{"_id":"turbine-orm","_rev":"144-38baa629be04a60f931bed2c64fa9d5a","name":"turbine-orm","dist-tags":{"next":"0.81.0-next.573e171","latest":"0.81.0"},"versions":{"0.3.0":{"name":"turbine-orm","version":"0.3.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","batadata","nested-queries"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.3.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbine.batadata.com","bugs":{"url":"https://github.com/zvndev/nexus-postgres/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"37130ed9a1c3107d885c018083bee32c78472ada","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.3.0.tgz","fileCount":63,"integrity":"sha512-znd6YhroogmaP4aQEASspu/nqgBmPRgfa14FGaHfEqLMSpEM8GamtUvkm1LXimihAZ/K1MUxqvqVBy8bur35ug==","signatures":[{"sig":"MEUCIQCQ48G2+z5HxsC/0CU8jx0CZT3s8imEQoqg3ITd8p/CswIgKw6xYoXy1o/vaq8UUGhlBN5HtNaTHEGNyMR7qq5BW3Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":471998},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js"}},"gitHead":"b3978b99fa2599761f57e986b9a3b3e760071f6c","scripts":{"dev":"tsc --watch","test":"node --test --experimental-strip-types src/test/*.test.ts","build":"tsc","status":"tsx src/cli/index.ts status","examples":"tsx src/examples.ts","generate":"tsx src/cli/index.ts generate","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/nexus-postgres.git","type":"git","directory":"turbine/turbine-ts"},"_npmVersion":"11.0.0","description":"TypeScript ORM with json_agg nested queries — 2-3x faster than Prisma, 1.5x faster than Drizzle","directories":{},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","@types/pg":"^8.11.11","typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.3.0_1774584799764_0.7515179892145232","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"turbine-orm","version":"0.3.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","batadata","nested-queries"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.3.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbine.batadata.com","bugs":{"url":"https://github.com/zvndev/nexus-postgres/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"de1c538afd1ba121776f134212262be8b093617f","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.3.1.tgz","fileCount":48,"integrity":"sha512-il6+ZLh5AQw8dSMmetSCssay4737F8JUaQbxQwSKsuXuZSIdHEBpRa2vX1rGthzF96CsNvix1Q0IYRwB9bjZ9g==","signatures":[{"sig":"MEUCICVcTY8ACczxlqQiHNW0x4AwI/LPEVH68qQRnLp0BV08AiEA6SVYQn4ZFIvm0LtVSNk74w18MSc0Nz/b3/pR6mb7IcE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":305376},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js"}},"gitHead":"e5600579d36a81ce077ac18e6e4c496745891eb0","scripts":{"dev":"tsc --watch","test":"node --test --experimental-strip-types src/test/*.test.ts","build":"tsc","status":"tsx src/cli/index.ts status","examples":"tsx src/examples.ts","generate":"tsx src/cli/index.ts generate","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/nexus-postgres.git","type":"git","directory":"turbine/turbine-ts"},"_npmVersion":"11.0.0","description":"TypeScript ORM with json_agg nested queries — 2-3x faster than Prisma, 1.5x faster than Drizzle","directories":{},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","@types/pg":"^8.11.11","typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.3.1_1774587416301_0.44227674467488365","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"turbine-orm","version":"0.4.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","turbine-orm","nested-queries"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.4.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://github.com/zvndev/turbine-orm","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"b0465861bbd70fa53e41e1acff7d75868c689af9","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.4.0.tgz","fileCount":48,"integrity":"sha512-6R/YSwbBpcUx8mYcRkjPU18uGf4w/4gu/JRAvB9U/sV3OoKA9eJehrq3uuVVV0M+DAIiLqgtGdn8ijvPQPoZ6w==","signatures":[{"sig":"MEYCIQDgcLWeYFh3F14+TYh6ER5x1ungPBj9nBusQ3t0mx3+ZQIhAPSN4DGDjzawLUd22MdERMWEZxQLQndN6H2mQzuJ++Dx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":311155},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js"}},"gitHead":"ea428731b2228f63ffcc0362857e04d627e7944b","scripts":{"dev":"tsc --watch","test":"node --test --experimental-strip-types src/test/*.test.ts","build":"tsc","status":"tsx src/cli/index.ts status","examples":"tsx src/examples.ts","generate":"tsx src/cli/index.ts generate","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"TypeScript ORM with json_agg nested queries — 2-3x faster than Prisma, 1.5x faster than Drizzle","directories":{},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","@types/pg":"^8.11.11","typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.4.0_1774589845748_0.024771461703389175","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"turbine-orm","version":"0.5.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","batadata","nested-queries"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.5.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/nexus-postgres/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"cf3f97008868c297032ccfead5bf51f1c82ac00a","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.5.0.tgz","fileCount":48,"integrity":"sha512-l9rZfGoLBimitWWPbNAs5SPnB6tKNSJxmKxfuuLejqziZvHUC4KISSFYl9Lk+OiYLmYKMkWo//JKNtDqE2Jm0A==","signatures":[{"sig":"MEUCIES0kGO6IfyAmb1A6Ifs+2gNA1dXm4T+qgdpJ1cLemrdAiEAshd/yM7X1fl12W3je/iCWqZL+w9xy7m4pkrR34GHVog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":513050},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"d774ddd87448411783aeacafb7c54f18b9374c5e","scripts":{"dev":"tsc --watch","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","status":"tsx src/cli/index.ts status","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","test:unit":"tsx --test src/test/schema-builder.test.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/nexus-postgres.git","type":"git","directory":"turbine/turbine-ts"},"_npmVersion":"11.0.0","description":"TypeScript ORM with json_agg nested queries — 2-3x faster than Prisma, 1.5x faster than Drizzle","directories":{},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","@types/pg":"^8.11.11","typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.5.0_1774668477045_0.1625750188849131","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"turbine-orm","version":"0.7.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.7.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"dccbe4b1fd8dd072fb12c1a990a79415d889dfe9","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.7.0.tgz","fileCount":49,"integrity":"sha512-kjKbCQ7upRvNn2A3Lx8pWwY3pFDDPIdLSNEfpbO7m9tVNH0oI3ka8XKYZX/FAziqiOVOjo+A23x/3AbsRrc71Q==","signatures":[{"sig":"MEUCIQDOSUA7w38yiLtjcS0LdD4dgZK6hzEexrurCZZpj49nkwIgPFOqqC20gwcepfKdSX3+S21Xi9pQe8N3y4fF2pikI6w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":640505},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"7220c773f6e787a1994b6f3e3184991b65371860","scripts":{"dev":"tsc --watch","lint":"biome check src/","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","prepare":"husky","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.7.0_1775597832401_0.9857449841497119","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"turbine-orm","version":"0.7.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.7.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"3b49770ef64a0720f9dd72a38f17003709a1c6e7","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.7.1.tgz","fileCount":52,"integrity":"sha512-CZ81mjYaFLEawlcQMvSLlAD/dw4tAtix3biYrysnw4V7l2ywQVGDOiS9l8vx5fRfArI3tE7qnuzlvkxVr/s3Qg==","signatures":[{"sig":"MEQCICH4sO7XbFLKp3Ise0bB3R+UwaU7KJux6DHrhz/5ezoVAiA3569Dq3N5gef/f0ttHBS2s8OvOU6F5aQX4D4137wZZg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":727206},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"5271eb95bb1d913106e36908efc43ad53db020b4","scripts":{"dev":"tsc --watch","lint":"biome check src/","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","prepare":"husky","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.7.1_1775629172860_0.3400136770094555","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"turbine-orm","version":"0.8.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.8.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"f68dbcbb43acf2650355da00624b27841679543d","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.8.0.tgz","fileCount":55,"integrity":"sha512-4FkHob3Mso6iIq1nYkFfIcDk0N2Ccx5NNo67QwQNf01VoDKDZDQl71Z7sMJNbQBbHF6Pn/fAZjBXYP+EjZTDrw==","signatures":[{"sig":"MEUCIDR2y4EEEXEkkraY0lhdoZi2GuwHTVfQd4g11xZ6GdCiAiEA5MhhWwv3ga9OlDLfXh4PZVw7Jl2TFqaXA748TGWdTfc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":846588},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"49e1362df3cb75806aa3ddbc1756d5faec82274e","scripts":{"dev":"tsc --watch","lint":"biome check src/","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","prepare":"husky","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.8.0_1775761491331_0.22892516174130595","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"turbine-orm","version":"0.9.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.9.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"0908a9ee0a10f553b0107d4a3f8ba025099fa518","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.9.0.tgz","fileCount":61,"integrity":"sha512-rnvyPYFrQRpigNd2KWuz2BLAe1cB2NKaVdbSeYiWM9IvfLGsPE+nPNotZds3+jbeRbYZFPAc0l5rgw4LhYO+0Q==","signatures":[{"sig":"MEUCIDpPaF0Lhbq/HBw2bsRfN3bBluG/yI478/ZXAJl9s7UrAiEAq2rKkLm/mcoW71bY3AQTToig+Wj5OkdyJqqtUZDrI8Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1175023},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"eb897c2b0a797bf40d8b7091218bb753ec64f949","scripts":{"dev":"tsc --watch","lint":"biome check src/","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","prepare":"husky","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"node scripts/build-studio-ui.mjs","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","site:build":"cd site && npm run build","site:deploy":"cd site && vercel --prod","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.9.0_1775780045656_0.8796927926802192","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"turbine-orm","version":"0.9.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.9.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"f6bfddbc88a55ff15ffd4aef624813013cf76910","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.9.1.tgz","fileCount":61,"integrity":"sha512-KG2emuQDJ2baSznZFiO1aM4yxav77zH5EIhtp7GokxbkYcRceBMPJWCibSpb9n6lameVRnbJWVOvfA514jNLfA==","signatures":[{"sig":"MEUCIQCxE66kjXEZ1JakpNMJshbwk/o0SacfiW2qhGFbbejnSQIgHk2iyd4x03qIbQJcrw1QiFsZ5rFaFnlj3ck2Y82qCmA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1175269},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"d7183f6f4e264c466fa35645c51bb934cb04c920","scripts":{"dev":"tsc --watch","lint":"biome check src/","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","prepare":"husky","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"node scripts/build-studio-ui.mjs","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","site:build":"cd site && npm run build","site:deploy":"cd site && vercel --prod","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.9.1_1775793862250_0.7580255785308523","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"turbine-orm","version":"0.9.2","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.9.2","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"219f4bac5d561adbe755645cbb18c5bdd8e69ee5","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.9.2.tgz","fileCount":73,"integrity":"sha512-hoz/ehPK3keMzaAUfoijW1GbB+zl7Hksw7F6xwTij9GsamC2o1fOvc0GBDUaMC/q2ctgJ2QcKouJsyAnS+ec1w==","signatures":[{"sig":"MEQCIFtIm3yqZP0M6kmOIy8EExYsPDqDl46iuqIAXqgs+4szAiB4agOKDduM3aixDfS0IOE3vt0OVIHJIP/yWiBC1pvOcw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1473175},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"3f2894f347afb26f6991fbd885e83ec4a495812f","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","prepare":"husky","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"node scripts/build-studio-ui.mjs","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","size-limit":"^12.0.1","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.9.2_1776143326314_0.8035233114941969","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"turbine-orm","version":"0.10.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.10.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"eeddc09a80554fc11186599b17fa3b41972ff6d0","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.10.0.tgz","fileCount":82,"integrity":"sha512-0cNbBDMMdCrhjFzGcyIvbqdOYL8tlAH8Dzopu61N7UfvxWPe7EQ4Yc1355wf8+G/dOEZidqgEPNVLFR9jw34xA==","signatures":[{"sig":"MEUCIF1Qctn5CrxWqzED2Jn9tVdwRcy0AcX3G71NhNkzCNBnAiEA7d8+2k0NpU54Nplb5MmTXFVeORLjl36deEeXQ1OLSiY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1529817},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"b722814394feaae6d83ab697dde52839accbdc78","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","prepare":"husky","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"node scripts/build-studio-ui.mjs","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","size-limit":"^12.0.1","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.10.0_1778378906349_0.2725167836234361","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"turbine-orm","version":"0.11.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.11.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"f7d407bb693b2e2fb10d8d1d1da37e7c4a739dd8","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.11.0.tgz","fileCount":85,"integrity":"sha512-9b6hI2+tAKgjDWgH7+19MOpikMdcg+y/W9KDfo3QhuYizGFHWKaSB40mjgcLc5tHd/yYO2Oe6fhmrFiMAOkIzQ==","signatures":[{"sig":"MEYCIQDiw8IeIP6caSgXLdjV0QBuaCPpCNkPddeKEvfaIxdnQgIhAImngczR2EYIoqcTD+wb4f6OkldwEoLptge2oQy5PFWd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1539019},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"33d69136e5c29f503f7ef6c99b461d66a1a74b86","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","prepare":"husky","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"node scripts/build-studio-ui.mjs","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","size-limit":"^12.0.1","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.11.0_1778381360706_0.8039124407456406","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"turbine-orm","version":"0.12.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.12.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"51daac4a90ad381e761ad84b6abe7535b634b81b","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.12.0.tgz","fileCount":85,"integrity":"sha512-OohQ8gRvCt+lw7zYVTg3aKykxsq6Fa+1OXQhl1jv8bjYUGhw8YbT35GTR0xodUYp6rFV7ooU1+NOUzsAVB+F9Q==","signatures":[{"sig":"MEQCIHETJfkSOyqXFWLHkwxuXG7D6/7Pi+T3itQpwuTtu580AiAuqx9Z7AAjQhNzWfTuTEigvaY15dmhsyhhHfTAsqf+OQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1544100},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"b0f3521d03920bce22da88026e6b24fa08d3ddb0","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","prepare":"husky","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"node scripts/build-studio-ui.mjs","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","size-limit":"^12.0.1","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.12.0_1778382823388_0.7357386687248486","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"turbine-orm","version":"0.13.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.13.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"7804a09e0076543a6fbf65ff0443324557d5282a","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.13.0.tgz","fileCount":85,"integrity":"sha512-p+ZsMHXxvaug0HPDRmqkD14xhcBm0GkayFyrZcwd87xJpKU2fOoEG0VdIhxy1YPavLPZvhHPC5eTEGYYr8NByw==","signatures":[{"sig":"MEQCIDreKEHT8M1MHiIEo7uFUUv4SFw/lN9pl1DKzgdvA2WQAiB5CCAIhzCZ7LHQWjS7ve+2wEpip92nISqCd6GDupcxtg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1552438},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"50e57f05d4237074c82c71dc8125ebc8addde05d","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","prepare":"husky","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"node scripts/build-studio-ui.mjs","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","size-limit":"^12.0.1","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.13.0_1778385274295_0.48493428436384756","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"turbine-orm","version":"0.13.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.13.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"42550cc9ef18448e8e8e0d357ce9ebbb0bd04327","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.13.1.tgz","fileCount":85,"integrity":"sha512-sQEF2vRj5LOFmX7XZ4b7bhE2MlKJz+lLK61tVpF+shjoptGe49w7z+DBmrBBSZCGFV/SbKASrdY2BU0Z4ovjHA==","signatures":[{"sig":"MEUCIQC+y+mJa1Sf8FA5hKMYms2JOvfdj0WugKVhmczlGKBoFAIgNCslPwZ+/N6E/7FpAtUTMm49YSTaV+T374rW9tqXnYk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1553818},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"ed748638381e11254cc00cad55cdeded425d7dfd","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","size-limit":"^12.0.1","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.13.1_1778385895417_0.6847892902684121","host":"s3://npm-registry-packages-npm-production"}},"0.13.2":{"name":"turbine-orm","version":"0.13.2","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.13.2","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"c49c0440c6a6f559cc09dd2835845fe65bdc94e6","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.13.2.tgz","fileCount":85,"integrity":"sha512-4F+jJ66yPqi9twDUMycUmXf51lpETkvcxtQA41H6kKucjkbMk2b5f2EFNux+ZMioQSSxzRSvamgkM9wb9Y/PkA==","signatures":[{"sig":"MEYCIQD9zfe0dAaKDEneOB3+y9fPLpHUALrNl0xnbBzr4ap6aAIhAPauKs3rVBiy8BFkpBOEXcZfpEGQFuTPU02rznIvKk9S","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1553950},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"fb3efc587bea1f17f332684c25b47bdf5a66deb9","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","size-limit":"^12.0.1","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.13.2_1778387337240_0.9399488500604256","host":"s3://npm-registry-packages-npm-production"}},"0.13.3":{"name":"turbine-orm","version":"0.13.3","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.13.3","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"d986b9a56f76646536b4b5d027d17ceb5017ac77","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.13.3.tgz","fileCount":85,"integrity":"sha512-ZWxO2mB+c5WTpQYU8QNItuaQl3EDyKSybRrWM1HUb0w3mzS2Wsz5WB/MWZvPO+VkjFMZbZlrCBhDb1tZbcSj7A==","signatures":[{"sig":"MEUCIQCXBPi7JGHny2+GUrYHeHdy0TvKKJPKsMn+jb3fgwGATgIgJBfc42Dhbw921cpodbCu9YPaso1RQJZxYqG5XW6vDUY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1553950},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"5f0efe1b2c86f47c6226e74d32b7cb2f8d30e444","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","size-limit":"^12.0.1","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.13.3_1778434813796_0.40294661801698606","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"turbine-orm","version":"0.14.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.14.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"281bb6f13c1f2d80c98c137200af68fbe74d1205","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.14.0.tgz","fileCount":85,"integrity":"sha512-h3l5KrPYJB9bu4t+FF9eDlJPt5qKKQHN0eI4iYU2lpxDBCOFcW/47ubc4ksJQLJbbhYOfveyF2fgXtk8xV/Q7Q==","signatures":[{"sig":"MEUCIDx0XtTGmbfBGgYxV93W7nDLUWQOi0lGlNhHftjAxbL8AiEA+KOyBWVvTSqCkvOgoEhZ8rx4jphCot6OPhVF5/IrlgE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1556933},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"3e6bd4c370357e030af52fdc2915c8fd016a872d","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","size-limit":"^12.0.1","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.14.0_1778435613366_0.8416744170865262","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"turbine-orm","version":"0.15.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.15.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"e6af0d30a22165b92a8110d03469e0750b7825dc","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.15.0.tgz","fileCount":88,"integrity":"sha512-EYGGnTsN7DytTdJBIDD0YYjU3AlZlm2c2zwcI/HVQMNsK0ZR/ZtLae7QH6kM63Ma2KDwxaWiiGLjD7TfeW3BqA==","signatures":[{"sig":"MEUCIQCBhgUW7b0SG/1bbCk0dVAJXuH6u3rfFJTn8E/upPGjGgIgCTNhQirD/f4uU88I0YPgcyITHO2J+WpnO7fWBrdgghA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1645913},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"d7f37711d2dc40dc291bc87fd289b09838ce88cc","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts src/test/retry.test.ts src/test/text-search.test.ts src/test/optimistic-lock.test.ts src/test/sql-safety-property.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.8.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"25.5.0","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","size-limit":"^12.0.1","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.15.0_1779040712485_0.4907640010741168","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"turbine-orm","version":"0.16.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.16.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"5c0bfff32cd01bed695b8a096a9eb15958c4175e","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.16.0.tgz","fileCount":97,"integrity":"sha512-6HGWcTE1alYnOmn0dkS2js0O5GNUE26ZEARxAuQg7jb8WZhfZuwD2go0t2aasIQtCRtlf8KhQ3fUYvSphJhrwQ==","signatures":[{"sig":"MEQCICk5f3wRLEWRPdvE4PkxIc5coDs/2LncsObNa1btPFAFAiBJG0jigdaP67f1d2DbdXfPH1t44kM1KiLdygarMiaKZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1724751},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"876b9a45024f7e74dcbb1bd454e62cf6958f5205","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts src/test/retry.test.ts src/test/text-search.test.ts src/test/optimistic-lock.test.ts src/test/sql-safety-property.test.ts src/test/nested-write.test.ts src/test/nested-write-update-upsert.test.ts src/test/cursor-pagination.test.ts src/test/client-branches.test.ts src/test/is-isNot-filter.test.ts src/test/event-emitter.test.ts src/test/observe.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.8.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. 1 dependency, ~110KB","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"25.5.0","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","@types/pg":"^8.11.11","size-limit":"^12.0.1","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.0.1"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.16.0_1779161909105_0.669563610793521","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"turbine-orm","version":"0.18.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.18.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"71703760997c8b37cffd493b10212899e3a7053f","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.18.0.tgz","fileCount":103,"integrity":"sha512-GDBYh+ZA1Inyw/v/fvvNoNNwg9zaNrXk3iOIBwyzEhtqGRRcQkVWd2kqo2cm82KEAchykToNl8LEd9LB3uuBEw==","signatures":[{"sig":"MEUCIG94xCVVAKWcSNjjnLZ0kKJQr0OeY/cBaZ1sJQ5auKoVAiEA5edP3jn15dPGBc1sZXAcUC/KxyrXAqHhMQwYcvWsEl4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1890324},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"2aff299a31a7ed3a85270869d8213cd06a9c684a","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts src/test/retry.test.ts src/test/text-search.test.ts src/test/optimistic-lock.test.ts src/test/sql-safety-property.test.ts src/test/nested-write.test.ts src/test/nested-write-update-upsert.test.ts src/test/cursor-pagination.test.ts src/test/client-branches.test.ts src/test/is-isNot-filter.test.ts src/test/event-emitter.test.ts src/test/observe.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","size-limit":"^12.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.18.0_1780971171405_0.1242410443055546","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"turbine-orm","version":"0.19.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.19.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"7059bc8f53217781d79a1e5ca8de80c2fd034e21","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.19.0.tgz","fileCount":103,"integrity":"sha512-2z16sRRBrJdGKGHnz5Tgkl/hZSxbEeUaKwIfAVY4Yrx59Qe5yWCTMLh4qojQBAx3m3qRrRvyfr9XDDzZhxxUDA==","signatures":[{"sig":"MEQCIAzn6u+FfhaXhr0lfkwTWCEcITSFjt7up0tTsB5GeLZxAiByWmF8c3I/r54uXGf0igkuxJ3Mx5Rtuy+5BNWvtxJ9kw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1877265},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"64d3eec328e509ce6cc423f97cf9928d4e6f95fc","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts src/test/retry.test.ts src/test/text-search.test.ts src/test/optimistic-lock.test.ts src/test/sql-safety-property.test.ts src/test/nested-write.test.ts src/test/nested-write-update-upsert.test.ts src/test/cursor-pagination.test.ts src/test/client-branches.test.ts src/test/is-isNot-filter.test.ts src/test/event-emitter.test.ts src/test/observe.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","size-limit":"^12.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.19.0_1780980572716_0.6224743972914404","host":"s3://npm-registry-packages-npm-production"}},"0.19.1":{"name":"turbine-orm","version":"0.19.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.19.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"8fb6626ef61913058a77050d49a1fbe7c94a10ef","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.19.1.tgz","fileCount":100,"integrity":"sha512-tq2cU5s36CVDxPGxI6hsj8dYRGk8a/764nWilbQnSYVXIeVRaI7hsHZpXgF+ODcDdww5fbYtp0XWASzfbR9fBg==","signatures":[{"sig":"MEUCIQDkg8jNz0JlHtYyaMPhy/zy8cMBiJTh3WvzsVJCSLlx9QIgPOaRaCmEYRu7a+BMhWKEEMkHrdisY5EdMXdgF+feymI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1624584},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"398049e52c8959aa0c81990abb50a9f58c96c881","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"tsx --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts src/test/migrate.test.ts src/test/update-operators.test.ts src/test/empty-where-guard.test.ts src/test/cli.test.ts src/test/serverless.test.ts src/test/pipeline.test.ts src/test/pipeline-submittable.test.ts src/test/with-inference.test.ts src/test/operator-validation.test.ts src/test/unlimited-warning.test.ts src/test/generate-relations.test.ts src/test/stream-and-parse.test.ts src/test/sql-cache.test.ts src/test/dialect.test.ts src/test/studio.test.ts src/test/sql-injection.test.ts src/test/cli-flags.test.ts src/test/cockroachdb-adapter.test.ts src/test/yugabytedb-adapter.test.ts src/test/pg-compat.test.ts src/test/relation-filter-validation.test.ts src/test/client-coverage.test.ts src/test/schema-diff.test.ts src/test/composite-fk.test.ts src/test/retry.test.ts src/test/text-search.test.ts src/test/optimistic-lock.test.ts src/test/sql-safety-property.test.ts src/test/nested-write.test.ts src/test/nested-write-update-upsert.test.ts src/test/cursor-pagination.test.ts src/test/client-branches.test.ts src/test/is-isNot-filter.test.ts src/test/event-emitter.test.ts src/test/observe.test.ts src/test/relation-limit-param.test.ts src/test/where-guard-cache-and-relation-where.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/schema-builder.test.ts src/test/errors.test.ts src/test/stress.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","size-limit":"^12.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.19.1_1781057643938_0.007759579689145202","host":"s3://npm-registry-packages-npm-production"}},"0.19.2":{"name":"turbine-orm","version":"0.19.2","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.19.2","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"307e82e5d9830632943b4eeb4d23e9ed305befcb","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.19.2.tgz","fileCount":100,"integrity":"sha512-us+fWtf0KqsGVyzKGmJKG5F86tAsWUX4XntSOgG4YRE0yU8rtCjEoQZRHFUT3qNxVNgI/E2Yyk98lJIwfOk0SQ==","signatures":[{"sig":"MEQCIB979qg4WBEc5I/di2WaC1RQso3I9H8FROE5cojeGHsEAiBJOBhitOsFQNDR8PHLKryRcX1U5N/9ndN4VSGP0P+WjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1632395},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"abe92c966a2bb274eb91138f3935279295e39743","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","size-limit":"^12.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0"},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.19.2_1781065274424_0.10411481192201388","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"turbine-orm","version":"0.21.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.21.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"07d5d46b974de338cb291fbe28b776364ac00ed6","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.21.0.tgz","fileCount":109,"integrity":"sha512-wU4Sa0MgryVew8TuHDuYQjQIXWUUVwEInc28gV9v5Sz/IZaVyz9PimhlQ0LctRG9zwU3Rpz3PLZxLMmzelG1Gg==","signatures":[{"sig":"MEUCIQDc2B/I1FQPCQV/nZ1w/NKlRiCkKNrT5HCjQ5dBfqcCvgIgEe0Pig7YGXXvi9uSoDVrIX9ufhNycXuGM6uwIj5SGYA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2019277},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"ed6d8c03960729dd2039b5a238dcc93d3a1de45f","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^11.0.1","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0","mysql2":"^3.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.21.0_1782458957038_0.4869501628673767","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"turbine-orm","version":"0.22.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.22.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"a57a5a148515f46fa63386b18286f36ab6414a49","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.22.0.tgz","fileCount":115,"integrity":"sha512-gu6dH3hTUNvMYNC5RJ0m1LUg4wwjhX9LgMLNp37r8uunorQcjcFl137y3L6W6GoULRBgqtwJYUSz4mzy9F08sg==","signatures":[{"sig":"MEUCIQCeiRsx30h4KvqCWwj+76KwvXZ0xCgoq/cLNAHtt6K1rgIgFc2opHfLKgd37x+WqeXGCh2VNjymo4bOplUZUa4no6c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2209839},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"ade965819360b85fc3d28b2c0a9785a1cb169812","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^11.0.1","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.7.1","@zvndev/powdb-embedded":"^0.7.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1","@zvndev/powdb-embedded":"^0.7.1"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.22.0_1782695278750_0.9513210728136807","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"turbine-orm","version":"0.23.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.23.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"523bb1082cd30112b3157f79a54b39a9744232f2","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.23.0.tgz","fileCount":115,"integrity":"sha512-RXfgsEDgPMpmg03R6vRhx10He9ucZSWEmdWsA0t93H6oxJ/lWah+/+M+HjwJIzO/BuToUBm9ae/oTzTWcvXTzQ==","signatures":[{"sig":"MEUCIQC4MQzCff54Y1D/cxJbV+ar9yiEyFHxDcj3jfHO22ZVHgIgeq1qZzqOBFqaVDRwmZdnRUIftli8QuNiszw2iJoptHg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2254478},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"87592868a9b90858bb217f2eda6ee54f33dab782","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^11.0.1","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^5.7.0","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.7.1","@zvndev/powdb-embedded":"^0.7.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1","@zvndev/powdb-embedded":"^0.7.1"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.23.0_1782701540779_0.7445339382936547","host":"s3://npm-registry-packages-npm-production"}},"0.23.1":{"name":"turbine-orm","version":"0.23.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.23.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"15c45d4c43253098d9eed88faf7259864ceb9abe","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.23.1.tgz","fileCount":115,"integrity":"sha512-ll/fWsLyVaXfLvBmb6L9DSXtC/NkTp11BAJp6vtdBf2OouodR2F/9F9BnoI8ILTUCxkiOy3Y5cEI9m9bKFKhyQ==","signatures":[{"sig":"MEUCIQCrq1lM7Qphp9rVx2E3KQ5j4HyQcjmpFqV/KrPOStfbNAIgZ1T/YiWPH0WFxc3z6Uc3WlNeluK7Dy54qTcZuJHTXF8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2254498},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"a6202e14e66aed32dc90d9fe36e5d7e762568cc8","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^11.0.1","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^22.10.0","lint-staged":"^16.4.0","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1 || ^0.8.0","@zvndev/powdb-embedded":"^0.7.1 || ^0.8.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.23.1_1783061763486_0.2977682863077107","host":"s3://npm-registry-packages-npm-production"}},"0.23.2":{"name":"turbine-orm","version":"0.23.2","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.23.2","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"ebddba3dbacf0915c81cade6f6771bc6331676c9","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.23.2.tgz","fileCount":115,"integrity":"sha512-/S0oJ+QSxWnAwchAneCNO8DhCb3rfVqSvnjqOwYUgUgjpgUU71hZSMQKbmtf4vr+PlwHTKIA9ndqVjuD8Dvl7Q==","signatures":[{"sig":"MEYCIQDllMHl5BbRih9kSzZClqt24XSUCOxxW8HaeIS8A2NTfQIhAMIOzHIt9LMYJba8DXQ7WfjVzcbRfQFtuPIzMlR+E2Qm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2251775},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"68c37bfde4c31fa0692d87474d8c4edbc386622b","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1 || ^0.8.0","@zvndev/powdb-embedded":"^0.7.1 || ^0.8.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.23.2_1783136313969_0.40887132471466936","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"turbine-orm","version":"0.24.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.24.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"5b0a9e1d87fe67c82978a1b4e2592add334f68f6","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.24.0.tgz","fileCount":115,"integrity":"sha512-BWgL1SyUUPyl5G0Uk0QhkHJ4A73seV6cMDCtFoqLdHnrj+hJp6oV/1nuQp8vKQ7SPaLzTcC4CstHmtUzkkN68A==","signatures":[{"sig":"MEUCIQCQh91JyCFAKlrq+T/+Rsf1cOE5SAUMpWzwSsf9r1HSvQIgJBQfCzsS5A/e2FBf2QbGTE3oABBg6ZaqPZ/a+h5z5PU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2267585},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"186382ee528755c39ff63abf9f27cd00dcc046ed","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1 || ^0.8.0","@zvndev/powdb-embedded":"^0.7.1 || ^0.8.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.24.0_1783359754609_0.31450287115745557","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"turbine-orm","version":"0.25.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.25.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"009b5900dcd07d117361a788067091eb3426c034","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.25.0.tgz","fileCount":115,"integrity":"sha512-E0gNZdP5yroUSdRksrP/b+FGAQ1aoIgm3xrA9pRe/5LCO/GMAjiFLWMW+FS3/Y9Bn11JwSujd0k0LmFQPOjFRA==","signatures":[{"sig":"MEUCIQCGCLhxduSNQ4wQThHciWnyokJXss9V+PmQYGoaTYQU1QIgOP+aeBzOnSD3IramvfWcFdAADyZx9dgBZBLRI+UfIGU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2272892},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"934c456b0e21765e2430f6655fc499748b67efb4","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1 || ^0.8.0","@zvndev/powdb-embedded":"^0.7.1 || ^0.8.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.25.0_1783362989520_0.7861583177159126","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"turbine-orm","version":"0.26.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.26.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"bb70047761e9e9279e8d1eb57c741f743209ec48","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.26.0.tgz","fileCount":121,"integrity":"sha512-5yqcsrg8NgGrXcROIuGM/7mm29F4+Yire3mKLowF+2CpFkOakf0M1Qm44XocYDzSad/DLEzilApG5q6PUJCKFg==","signatures":[{"sig":"MEQCIGxdo5f0kQIfnGU/JdaAOhMFw408OOWrdDMup4ha/TifAiAXEG/20XRQYhPP8GEqAp6lSqu7ax+ryK8dj4r6eC4VPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2416476},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"9226bd3fd989fcc630b71717ed056fa7c6cc0797","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1 || ^0.8.0","@zvndev/powdb-embedded":"^0.7.1 || ^0.8.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.26.0_1783489010189_0.5832321106685123","host":"s3://npm-registry-packages-npm-production"}},"0.27.0":{"name":"turbine-orm","version":"0.27.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.27.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"c9135775fbe3f4215997e7ba748dc53c2fa2043a","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.27.0.tgz","fileCount":124,"integrity":"sha512-yTIdx1tTEqutEeQyw6FYawMOYEU2QIiwO0mGi4jMya3PxKiCvfsbvN9r+0QP6krd4e4XKt6XJzVc2EZARLCicQ==","signatures":[{"sig":"MEQCIFaN79c7hs+zg8F+iEtMaJdBZFRgVeFKHE3rXwGp/0uAAiA8cSd8LhOg31RFJBYiJc32PBe+EUXnVXia4eFIIDYtGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2443461},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"9226bd3fd989fcc630b71717ed056fa7c6cc0797","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1 || ^0.8.0","@zvndev/powdb-embedded":"^0.7.1 || ^0.8.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.27.0_1783556819580_0.7552110487429633","host":"s3://npm-registry-packages-npm-production"}},"0.27.1":{"name":"turbine-orm","version":"0.27.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.27.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"6d2229af2685a6ac90fde9d6500010a570579300","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.27.1.tgz","fileCount":124,"integrity":"sha512-iIfex6xZ80GwduvIyenKt2XDg/Fv00X205NicXZOD3XTBB5sB0gSdjCl7Zq0Ccr2PSdGh+TrOSjH8MOvPhXtOg==","signatures":[{"sig":"MEQCIBl9LSFF8cURlQwPpE/C50rP2d2gcxFdfnGNVQwejM2PAiBlcsNw7XUxpDUx29WaUU4t3/HcQVEGRext7S7XMvDh7w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2443333},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"03fac2596f42a8e0c18596fecfbd09f5ca46266d","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","examples":"tsx examples/examples.ts","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1 || ^0.8.0","@zvndev/powdb-embedded":"^0.7.1 || ^0.8.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.27.1_1783556921671_0.8325601547878003","host":"s3://npm-registry-packages-npm-production"}},"0.28.0":{"name":"turbine-orm","version":"0.28.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.28.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"3b64badf8f82dee72541f7553acfc28c8dd7dba9","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.28.0.tgz","fileCount":130,"integrity":"sha512-n4NecBMsBSObixR6gGMHjp7U5aDFdMRZWdA2Yz9yDd6zGNirhMXggsR3PTmO/yS19EnvSo/jkMbLlHKAV8y0IA==","signatures":[{"sig":"MEQCIBFHWLb9FPpygRhneMnu0FbSPV9NSCrWyRTAdYx6bFGnAiBzvqFcioCkiHSX1SZ1D9uAfoWHJAoEDL7jgExI4f+hng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2741195},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"8d34ca8b602d2a3dc5e4d9d00801de24b8a205d3","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1 || ^0.8.0","@zvndev/powdb-embedded":"^0.7.1 || ^0.8.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.28.0_1783603396240_0.9227255698114516","host":"s3://npm-registry-packages-npm-production"}},"0.28.1":{"name":"turbine-orm","version":"0.28.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.28.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"d691edd225ebbd536a97f635f5db4ed3af9b83aa","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.28.1.tgz","fileCount":136,"integrity":"sha512-e8TdzQnVkycIrARZ4LFGv5Iq7tSvF8TGHsyXC0voXUUfauk2ZxL5ncwkZJxLJYdYQNfqSeHhsp4WYSYUMsUOSw==","signatures":[{"sig":"MEUCIQCDSthCc5B4oUG3YtHynEso7y/uXghsBB3Nz8OaItMa7QIgIl7JMTQrvk/tHiSzc5r8a7eMf74UWFEipXBmeTS2uk0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2754037},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"00f10c9bde399a8e98a4232da105936bac316127","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"deprecated":"Broken: consumer TypeScript typecheck fails (missing @types/pg). Upgrade to 0.28.2 or later.","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1 || ^0.8.0","@zvndev/powdb-embedded":"^0.7.1 || ^0.8.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.28.1_1783713489109_0.0599909820563298","host":"s3://npm-registry-packages-npm-production"}},"0.28.2":{"name":"turbine-orm","version":"0.28.2","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.28.2","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"f2c46512289e268651f56cdbad553a1c15493c6f","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.28.2.tgz","fileCount":136,"integrity":"sha512-vfend+kncPfqHxG2j1+68VxdRIVBrApn4gtKPOlL/w0kh36Biw9sFZju6XRA3ggkEEnbHqHU8WWVqKwXilOJqQ==","signatures":[{"sig":"MEUCIQCjPp8OsW3rUJrEmQPBBCuAeYy9RhhF21zu6/CvpFiuhwIgSjBexcsR+1qgRxDF3ZBGbLsMFwwjbpvtz5po/J65vyk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2754429},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"cebbad270a5a5eeb0101027b19ccd5a77161adb1","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1 || ^0.8.0","@zvndev/powdb-embedded":"^0.7.1 || ^0.8.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.28.2_1783721182399_0.5542951675198298","host":"s3://npm-registry-packages-npm-production"}},"0.28.3":{"name":"turbine-orm","version":"0.28.3","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.28.3","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"4877420f42b665ee4c74c82d2c9d07e53554703d","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.28.3.tgz","fileCount":136,"integrity":"sha512-eND70e3FWGunND5CPkXZlbzpz4arazt+K2qLKKu4d/JWWhvI0VZAzhO5i5kTOoqgZJAHeuT3vkNMfJCdAiDrUQ==","signatures":[{"sig":"MEUCIQCpIx9APxD7xhlCxOoQ5SuxUxsYcKkhkOken3Qj+1uWAAIgKSOvyHJvUXrqYHnMSCUYDEtrP+JFcFKVeXGpza2xcHQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2755793},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"d2d4a896c455f9ff0800d247b1f62c139e9b08df","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1 || ^0.8.0","@zvndev/powdb-embedded":"^0.7.1 || ^0.8.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.28.3_1783747114035_0.05758239481995853","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"turbine-orm","version":"0.29.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.29.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"562fd57f516235b15b82ae3ed56f118dd7fea210","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.29.0.tgz","fileCount":136,"integrity":"sha512-MIDT3Zo7pk/vZYhFm7pUkgzIQm0bmDhwpI4PcvoFRjoODDRx/73INMf81TVIq7qO1dPeLQsCxwVfT/DW7xpzVw==","signatures":[{"sig":"MEYCIQD5+22PTXXbRoCAvLB1DtlZUBjNBd0f1PQ9hqReg1OhHwIhAIPecNK2ZbvU8Qfiksp0I5Y67EeKzKxdQwQD4kC5JCqO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2764989},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"9c0223335d91a92b5a30e17a9e803874bda2f3c1","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.0.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":"^0.7.1 || ^0.8.0","@zvndev/powdb-embedded":"^0.7.1 || ^0.8.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.29.0_1783829700007_0.8906108944520135","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"turbine-orm","version":"0.30.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.30.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"7379c4048e1326696d129b0b420e2ec158b85d4b","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.30.0.tgz","fileCount":142,"integrity":"sha512-UW2Xp3Q9bM0NDJQSi/f18yltaB7aOsNMQ94WSwqpMCMUEKu+Z74SC+DcHblfARZZrGrLHrEv6Idr2APXpJsWqA==","signatures":[{"sig":"MEQCIEmzxcCYihNRz9Tcg5/1k6QEU/DwA/hwmWQP+O9gzbZFAiBXwRIrpixTvMVTAWRLmnYsl362n0W0Tm9u72L49VhDcA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2903937},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"859c2412b560aad6b5475f9e26a0a2ce47d359ab","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.30.0_1783919822857_0.19689023540050132","host":"s3://npm-registry-packages-npm-production"}},"0.31.0":{"name":"turbine-orm","version":"0.31.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.31.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"743e9d36106cfa86e5c1d6c5484eb3dc7f1dacfb","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.31.0.tgz","fileCount":142,"integrity":"sha512-BNMV/YN9CH0SNvbfkUnmc5Pb/Hc6NomNRGNpxBmSVcvZWJCDf6JIaGgBPLeN9We6SsRINkxOQvIvuyk/jGBcjA==","signatures":[{"sig":"MEMCIEuuOsBua4xezdTjKh80fXFoliRJ8z8m+t+/zID1jGWWAh8gJi6EGq4ikTVC5tJLQs/oKzczUluaDJAPMyK9kGYj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2967528},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"a799c7f3ca344fd454062919cafde95ee61f1ea2","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.31.0_1783976275776_0.553990915459905","host":"s3://npm-registry-packages-npm-production"}},"0.32.0":{"name":"turbine-orm","version":"0.32.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.32.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"ef0ad91c3b10b5bf8ec3247ee4e818acb8a58f64","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.32.0.tgz","fileCount":142,"integrity":"sha512-2cIeki5RQl290F55Z/QJgSJOSFZvZaLj4VQiUtSHTE0usaEYhUK+FGEsROePztAOQRHgz2Rhq4/hqoivHBdVaQ==","signatures":[{"sig":"MEQCIHnEiVAx/BmaTtu4VZJzoJFmvB1WLGz7CGK+6kzMSb80AiA/36FU5ffJgxVVAinN0MoELDuYmYUPW1jUaWEDzV4jLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3037702},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"6aaf82cede23efef8e3136ec2a7b072b4828b3cc","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.32.0_1783993881815_0.813605901015144","host":"s3://npm-registry-packages-npm-production"}},"0.32.1":{"name":"turbine-orm","version":"0.32.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.32.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"03efc2a1e8440d10fd2a6a802b6d2ca45d15c6f8","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.32.1.tgz","fileCount":142,"integrity":"sha512-FpIqTHI+msyY7qkBePPf5vaZ5sZ8O2pyZdEfJghqqzt/0uyQsej1nPAtuHVKoZLtQRw/STfR2ry1MciLVEfwlw==","signatures":[{"sig":"MEQCIB36+QYG62KWaXpu0VutL1X8mQ4sL9nokU0tJ5/uB3qPAiBe8DhQ8q2xqtf2EdaR7eXQL3LmJeq88Y6bLNavCqL8cw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3098939},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"ac814de4b3048b73074c2426e535e50d2a92215b","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.32.1_1784076764698_0.5904814181734095","host":"s3://npm-registry-packages-npm-production"}},"0.32.2":{"name":"turbine-orm","version":"0.32.2","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.32.2","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"0f56f086693c2dd3840c961f09772ccaad8cae5d","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.32.2.tgz","fileCount":142,"integrity":"sha512-2cMB3Mf1KY0ix4Hu5XwadoJdmmKDdxROCVRE8AOARohVXhrDMgkMkUSIMlr9lU21o6u87Qz6lDMLSdV3VIVBvg==","signatures":[{"sig":"MEUCIG/fIbv5IQ2/oddkHWZYijhkmSra8kZrGSo9K0dl7NTxAiEAxoqs5zO2hi7s4t1DDQw+qWmaz2+nb5qt5I3KNCD5QR8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3114902},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"aa3f627eed0474219bcfabb5ab21dc32a9bd9468","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.32.2_1784090003468_0.9517576983820197","host":"s3://npm-registry-packages-npm-production"}},"0.33.0":{"name":"turbine-orm","version":"0.33.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.33.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"4544aee5b5f9eb329b6cf0cf738587488c7e5db8","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.33.0.tgz","fileCount":142,"integrity":"sha512-Ph9mH3y/OqdSC9mpgYa4cMEZkAMrqXur8rjclLu5kHYCfaXFwWg80AklUPWUsj3Nh8LKLNoT5+sqQ9az4mbe0g==","signatures":[{"sig":"MEYCIQCd6lN4r06nxTTq/o97w8Ki/GMSI1b0vithh+OqWKcIzQIhAO3A2HMiBSuHxC3suw7bGBLeZqv7YVR0VMAVGxfxci6r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3129270},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"61cf6bf093b8fc9ecba398c353a9d6e9c8a9d769","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.8.0","@zvndev/powdb-embedded":"^0.8.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.33.0_1784139744074_0.41995287611244736","host":"s3://npm-registry-packages-npm-production"}},"0.34.0":{"name":"turbine-orm","version":"0.34.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.34.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"465f594b227c0b65793cd3ae6dcfb46f48b22c10","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.34.0.tgz","fileCount":145,"integrity":"sha512-Wxhn061HQnBJbbsbPrt4kTVYjpxasaKyQGM6WGkoaTKGlrfosVyymsald7KJjZfy1feEjfbZD9adPlI+PeUfpA==","signatures":[{"sig":"MEUCIQCyCEULvZZwbmJCi9jidd6qgP2oGAtaenmfKmWpMW6yhgIgIwYx7THSemDf43OOcqEnWGZyjQMsGOLHLNbz1I72mo4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3291132},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"5c6d12c6da7977ec666bbac6bccdc1941526fd62","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.13.0","@zvndev/powdb-embedded":"^0.13.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.34.0_1784159348293_0.8981073983809049","host":"s3://npm-registry-packages-npm-production"}},"0.35.0":{"name":"turbine-orm","version":"0.35.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.35.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"9bc46ebfd1edbd7786389d3d1991f62425f478da","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.35.0.tgz","fileCount":145,"integrity":"sha512-r+JwhqOLLmicGCdyvkZcrwFvx009sTA4gbVYY6EK7sR4ag+fN/q61tkE7p1pELeHlEcfxwrlFxjJUgRpm1jqHQ==","signatures":[{"sig":"MEMCH2JIHzYSMbuL8CA0y2Tg+uLa8elwnul7AmOCdnFSfDICIDQLYYVri5xCUZnLZpXCjE+GYsO9SeR4ZaFUzRqXwkpy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3389204},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"ab05882baa8dd4d76ffda4b6ad1544b13f7c32a8","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.15.0","@zvndev/powdb-embedded":"^0.15.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.35.0_1784210745264_0.4678225796074573","host":"s3://npm-registry-packages-npm-production"}},"0.36.0":{"name":"turbine-orm","version":"0.36.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.36.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"013ab65e7c5c1421a254f35e56df63e8ab105701","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.36.0.tgz","fileCount":160,"integrity":"sha512-qdRYjdqVaiP6kR5L1gKnOAo+jfEkWtW7Hnhdv8EUgQvTEE8za2sOW7PqPD2TisIGwALsb1t7xezgK89hOH83qQ==","signatures":[{"sig":"MEYCIQDpzB8Cibb52Ea5HHGT5ypMt7q7kb1h4CE5QrRISQppuwIhAJsnp+/fJW2zcymYKYEJSeR1zefRGdSUbgrcS65WjEoU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3571307},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"8cf464b23deefa4a9435be301a6372562a1c6fd4","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.15.0","@zvndev/powdb-embedded":"^0.15.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.36.0_1784398939698_0.5512555805308004","host":"s3://npm-registry-packages-npm-production"}},"0.36.1":{"name":"turbine-orm","version":"0.36.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.36.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"62fe2faaedcf7737a82c27daf39809fc050119e1","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.36.1.tgz","fileCount":160,"integrity":"sha512-tL7qVz7imgIFkCL5b+Irmcj0IFDPIyb+nmfpxe4koXxD4fbaeRxgMLkZljEWnuPZ+pi0j0+MB6U61LSpdHCyyg==","signatures":[{"sig":"MEUCIHnISgxpWF/pc/RoQgTe5/mGEzDR7ByfuX5fH5EVeq96AiEA8OmcX6tXFLV8hX/NFriVbsPX5oui8lSxdcr6qFgqh50=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3571307},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"653b54989f54ab5a1b43ce5b38036fde560d8563","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.16.0","@zvndev/powdb-embedded":"^0.16.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.36.1_1784404984485_0.4241598094305694","host":"s3://npm-registry-packages-npm-production"}},"0.37.0":{"name":"turbine-orm","version":"0.37.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.37.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"6a57e928c7c4515b267b8faca7760b897311c23d","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.37.0.tgz","fileCount":163,"integrity":"sha512-2S4aBKYx7eObzJeXa1/cCorg2+cLfuTbKbnjfyBXVn/NXtnrSm+HfGCuu6I3aRrZuPNnKNqg0t809mO8SD9BdQ==","signatures":[{"sig":"MEUCIQDZO49o0Ql/znjduXR6A12o9/uZaQG58i4JbfY+oqp6qgIgaS/C4a6HOOhz9PeL0mvZeWni3omy779cYNZz6/Fu4Gw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3628713},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"f31a7034c44aab82ab0b771b5f1bc22363b1cc04","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.16.0","@zvndev/powdb-embedded":"^0.16.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.37.0_1784429162535_0.4321890064671834","host":"s3://npm-registry-packages-npm-production"}},"0.38.0":{"name":"turbine-orm","version":"0.38.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.38.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"1b5aca9c41c93fcaeca9fa3d354bb5fe690a5b4f","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.38.0.tgz","fileCount":163,"integrity":"sha512-wmDwMZt8lyx5IsUALbgrdjP88cS4Ef2vLMoD4/dMG8f08pJRUK7wWP0s8Omyr18gCe1qQLfNlyJAVp+EAHqnGw==","signatures":[{"sig":"MEUCID0Jo9YR0vQcI4Vh8cCNSqXySue6ANjHNeasJZ9CPvMMAiEAvg8I4IN4gvvFXakKBW4xNGxp3HtyrLdb1+E/+FdIbso=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3744412},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"54142aea3a55792b8e168a7eb41b6a26ff2006d0","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.16.0","@zvndev/powdb-embedded":"^0.16.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.38.0_1784516213603_0.9378107344200193","host":"s3://npm-registry-packages-npm-production"}},"0.38.1":{"name":"turbine-orm","version":"0.38.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.38.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"f3740bfdc9609b3ce4b4f85d65d13d239352ec94","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.38.1.tgz","fileCount":163,"integrity":"sha512-Qdr1f3zlFBDKhOKQp9ECYEHskf3y5iyiovXQj8cq3nTZaYm7vUF5bKbmhJe19Sh6Ut2t3OfI0ayM2BvRrFjUMQ==","signatures":[{"sig":"MEYCIQCApN0b0lMQlr439EoFQCN6yKr6UkqKkCPb+JRQQ9yxfQIhANQ9+jh0YCINYtEtHdXcQt6k2oY4oza9X2kuZTkKGoi6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3746242},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"4aefa1c5261c1d76996c397e0692655744c5bf5a","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.16.0","@zvndev/powdb-embedded":"^0.16.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.38.1_1784517708427_0.7903378446400711","host":"s3://npm-registry-packages-npm-production"}},"0.39.0":{"name":"turbine-orm","version":"0.39.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.39.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"babfc1ef76626bcab4007cc851628aab599e545d","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.39.0.tgz","fileCount":163,"integrity":"sha512-xIRcyoE90L0HBoyJI7+DAJvklI30/lr5A6HLaJM0yT244CLV+/QpCE9QNvLj2qFU7mvRctFHBe4tX4mcPBzN4w==","signatures":[{"sig":"MEQCIEe/IUpr6sXYUknNqr4kNxvdgjnsvtNvFn8m/EWrzY1UAiAX41xf9Z3zTnkj82N8oJZLSLHUXVi0RhHsymyFCj2Dmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3779996},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"4a00f8a7641b6a5975dd4a313590aafd23f9a699","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.17.0","@zvndev/powdb-embedded":"^0.17.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.39.0_1784527505017_0.40495863482964034","host":"s3://npm-registry-packages-npm-production"}},"0.39.0-next.4a00f8a":{"name":"turbine-orm","version":"0.39.0-next.4a00f8a","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.39.0-next.4a00f8a","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"7643710d798baf9c186363ea2fb8583f95d35005","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.39.0-next.4a00f8a.tgz","fileCount":163,"integrity":"sha512-KV3MPiWyzdvROJiXhKO5hdZIgXm2EU0w8MdHqLdQw2RXPFrSUbUG+ZB8ucCy/QfgZed/xw7QiSCAc0CgNs3M1g==","signatures":[{"sig":"MEUCIE7jZNxuPJH84yDNgPs5qN2uYMgM9vwsnE5ggw6jwOQ2AiEAwMfaudbmXuMkfeUxjBPYy3dBLTgExRWlgfiW5dOKGHg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.39.0-next.4a00f8a","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3780009},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"4a00f8a7641b6a5975dd4a313590aafd23f9a699","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.17.0","@zvndev/powdb-embedded":"^0.17.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.39.0-next.4a00f8a_1784527799366_0.2609962489615518","host":"s3://npm-registry-packages-npm-production"}},"0.40.0":{"name":"turbine-orm","version":"0.40.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.40.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"896064b695ffdd60ebc0f46993182221e5118be6","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.40.0.tgz","fileCount":163,"integrity":"sha512-EQB57ha46431oH0pdyCxMO4XcV+VFnZPYQFKhsi5Ih7oGua96Sk7x4gk24UqRzBDVtOgnmgHOF24QCNLxTxmgg==","signatures":[{"sig":"MEQCIE0QnaTOLUOvpeM3WiMVBgh4yrq1QoOgXkQWTMjWFZECAiBQBp1oyw/H9HXaV15kQniAM+VAu6cQnlzq73thgQ2gnw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3843609},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"02bec8dd6e82af0990b95611e1221c5cb280653e","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.18.1","@zvndev/powdb-embedded":"^0.18.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.40.0_1784680182528_0.11920002630080151","host":"s3://npm-registry-packages-npm-production"}},"0.40.0-next.02bec8d":{"name":"turbine-orm","version":"0.40.0-next.02bec8d","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.40.0-next.02bec8d","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"ee6e75238e494f7eb3e2855279f0e9a69338dd83","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.40.0-next.02bec8d.tgz","fileCount":163,"integrity":"sha512-7PpPouBnLT1FW3/SzmDVP07F/N7U/zzFy/13sZheoxOPrUf1/twf+3D84Ct2PTwcyN92EJ1NA+OZf3kna9KYSA==","signatures":[{"sig":"MEUCIEKMJlqsVdam1jaYk41DSGAFm4IRYXHSo7uYQHsg3TepAiEAqiCVLjh91RfjdGqp+1pLCSzrfzT0DH3fs+KPc6uI0wA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.40.0-next.02bec8d","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3843622},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"02bec8dd6e82af0990b95611e1221c5cb280653e","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.18.1","@zvndev/powdb-embedded":"^0.18.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.40.0-next.02bec8d_1784680265232_0.4542945533954834","host":"s3://npm-registry-packages-npm-production"}},"0.40.1":{"name":"turbine-orm","version":"0.40.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.40.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"83e163691c2515969aa2696621e36dc64b15cc2e","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.40.1.tgz","fileCount":163,"integrity":"sha512-sbZosoY3p6tHTuCnsjpRw2IXJQUPIx49ZRFAcHNh17zzmz2hNLNqSjgr46jpmwu4twRVlaLb4OdPdxxepSVjGQ==","signatures":[{"sig":"MEUCIGr1RJTu8SuQc5qw7M/1EkRoXwklc+zbtgeHoy+zgCARAiEAnbvtNOWhrM8rDb/IGHafRbHVmGUDk87iAniGNtER3nA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3874562},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"712c438b27b438e4115b763824631032a40cfe44","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.18.1","@zvndev/powdb-embedded":"^0.18.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.40.1_1784767376479_0.6866117347617666","host":"s3://npm-registry-packages-npm-production"}},"0.40.1-next.712c438":{"name":"turbine-orm","version":"0.40.1-next.712c438","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.40.1-next.712c438","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"dda5bbf8f478e869091c6caf389ee9532545960c","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.40.1-next.712c438.tgz","fileCount":163,"integrity":"sha512-LaadBkwadZKdlgmSWQd9fI2jlmBbBYSJ2XYNEIL8oOGVOkuto/VUfO8QjKWW3AI8TQ0p1x72j5gC924F6pLUWw==","signatures":[{"sig":"MEQCIAEy6XnRXI0hPyJ2bt/8pFX3T7aLjJdgHz4AxL9LVJ80AiAsfbu3wNpenb44iIbsmZS4+aNRi42s2jP24CF/MqNjvg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.40.1-next.712c438","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3874575},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"}},"gitHead":"712c438b27b438e4115b763824631032a40cfe44","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.18.1","@zvndev/powdb-embedded":"^0.18.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.40.1-next.712c438_1784767466440_0.0277901201957218","host":"s3://npm-registry-packages-npm-production"}},"0.41.0":{"name":"turbine-orm","version":"0.41.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.41.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"16fc9a0b2f72c18cfa037b6281737fc4e89d3f89","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.41.0.tgz","fileCount":181,"integrity":"sha512-0r3eyAcLqDGif/ocMFlKPPGrRv41PJZwgvaZ5k+aMoQ/pXEm/z4ak0p4CSNLAMdSU85oNNZd3wRHnKSHfYQ3/A==","signatures":[{"sig":"MEQCIAM/krUmRZnvWm/5tDSLhy+qxd9ZqFMq+VE9FNMfoDrXAiBRkyx50OWGhotWFoFQEIKKe2NLQupiZUPmNy9pEfs/hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4240889},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"66e0d433a1e3cc82ed77e6936fad16984d923dbf","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.18.1","@zvndev/powdb-embedded":"^0.18.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.41.0_1784821017396_0.5082859850268606","host":"s3://npm-registry-packages-npm-production"}},"0.42.0":{"name":"turbine-orm","version":"0.42.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.42.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"5a7565c91fa71c5a263f431a8cbb5f243d1f65d0","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.42.0.tgz","fileCount":181,"integrity":"sha512-Wn3H5ZEdqxztAKL5VTUcCJtqQ5DNreOFVY4s4jCfaucG1X/N/WpH9hY+ZhRoPkjWLsFbK7JSLBUcX7BYjTrFgA==","signatures":[{"sig":"MEUCIQD5TGFQIE4q8ySUR3GVeL+jhr4t9sqPpPEbt6ik1IXkgAIgNfyGPX46zJESGlmGcuDTE3Y8iF/m0MLNebHD0Op2ZwQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4261891},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"4cba2356710dad28a5050dc654660d206f978526","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.18.1","@zvndev/powdb-embedded":"^0.18.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.42.0_1784832564881_0.9668266922680839","host":"s3://npm-registry-packages-npm-production"}},"0.42.0-next.4cba235":{"name":"turbine-orm","version":"0.42.0-next.4cba235","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.42.0-next.4cba235","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"827f950a0e2493744087191d8feee1fdf1b8c6f2","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.42.0-next.4cba235.tgz","fileCount":181,"integrity":"sha512-ROKHlz1/XEpDxd0QJ6xusyvtz8toO42LmMAqt4XcqdCT7Sx3yZtaEAH8QCseKwllFCjDjFonG1/8F7qgXJ7HrQ==","signatures":[{"sig":"MEUCIQCwjBKpwcfxpNaAuoUFRu3Ax4avd/+EDKFrVqjuyoGWOwIgIl/PINqBFcrbB2b1lqVaIU4ML7fUuYJb9FTuNi3UmIc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.42.0-next.4cba235","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4261904},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"4cba2356710dad28a5050dc654660d206f978526","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.18.1","@zvndev/powdb-embedded":"^0.18.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.42.0-next.4cba235_1784832670168_0.20166268234032803","host":"s3://npm-registry-packages-npm-production"}},"0.43.0":{"name":"turbine-orm","version":"0.43.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.43.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"365d751a0256aa147012452974923f20c34b470a","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.43.0.tgz","fileCount":181,"integrity":"sha512-+/YT2DOJ0tljl+9vrTYHgod5oVqQIuOcQd6k7yDZRhK0Aln00EA31GBio9gHF3hIRS0zsdRXlr+T8Ip8yPmOlw==","signatures":[{"sig":"MEUCICy20yX0BIgQLUt24/1S4bTkbCl01nzd47ONa+6JBwObAiEApbP88DpGdCejsP4rofWt/SFshrjzjw1wHlejVPGbbTc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4273872},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"58c2a311582039cdc27b197bb6cde26386527b52","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.18.1","@zvndev/powdb-embedded":"^0.18.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.43.0_1784839935892_0.6845580484249116","host":"s3://npm-registry-packages-npm-production"}},"0.43.0-next.58c2a31":{"name":"turbine-orm","version":"0.43.0-next.58c2a31","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.43.0-next.58c2a31","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"87360468de1fb3123c8a4f98f42d3ddf6fff308a","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.43.0-next.58c2a31.tgz","fileCount":181,"integrity":"sha512-bARYQfEkOoPXL7g8++QnnMxcDjNxVVBVpKvJ/jXrrmp7BmGSagMQ9zGYOjvRJU3BBFCWpaxR/OINQ5xbNKR4hg==","signatures":[{"sig":"MEYCIQDHngvEptP/qty7gyy4eKyX+jyP6cAREezyHc3xB2g9LQIhAOou7k7GEfqrWmzQdccvTJ+AY5bYuDwv2PDAq6A/rUl7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.43.0-next.58c2a31","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4273885},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"58c2a311582039cdc27b197bb6cde26386527b52","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.18.1","@zvndev/powdb-embedded":"^0.18.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.43.0-next.58c2a31_1784840072642_0.5159669115428729","host":"s3://npm-registry-packages-npm-production"}},"0.44.0":{"name":"turbine-orm","version":"0.44.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.44.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"7aabba18d64cd633fe6b99a0f6ee5c18fe8a468e","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.44.0.tgz","fileCount":181,"integrity":"sha512-1mp4yzdhpKe4LxDN3xfnFGtSOkx3zrZxqEMBPbDMURfZ7WQ/QVL0hhqHVHnSI1u+X51oCDJe/N63/393o+Tm+Q==","signatures":[{"sig":"MEUCIHwlSYJkA6vKirCvALT9aSN3yO5pySX9eUIBpkSwHYh/AiEAmw9H5Bzhv6wL1IAOrOVuaxImPgTNs+LS4BAd9fTpws0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4293896},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"0559adf9f5b742fe807ef2137d6718c72fefec3e","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.18.1","@zvndev/powdb-embedded":"^0.18.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.44.0_1784846258168_0.540784975537741","host":"s3://npm-registry-packages-npm-production"}},"0.44.0-next.0559adf":{"name":"turbine-orm","version":"0.44.0-next.0559adf","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.44.0-next.0559adf","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"9228443c2108eb90d2f787fa9a53c3a8619f72ad","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.44.0-next.0559adf.tgz","fileCount":181,"integrity":"sha512-FLjMrS8Y6RM1tjF/Ch4N4QUbP4e3v0DZ6/RjkTzpqUMyTMP8sih8QgBksB6MM/Y1oDnTQpyipO6cJW8d/AyflA==","signatures":[{"sig":"MEYCIQCC0LvUfI8JBruKcCnfk3yk74J96JisVq/Te1UHMrvBngIhAPEbs77qCwTznIeYlxjBySvMtfAA4+VPqF/J0CywAfg+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.44.0-next.0559adf","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4293909},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"0559adf9f5b742fe807ef2137d6718c72fefec3e","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.18.1","@zvndev/powdb-embedded":"^0.18.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.44.0-next.0559adf_1784846356974_0.1878057620650062","host":"s3://npm-registry-packages-npm-production"}},"0.45.0":{"name":"turbine-orm","version":"0.45.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.45.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"cbd23383a1908ffef2fefa0266a882e4da0ce246","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.45.0.tgz","fileCount":181,"integrity":"sha512-B4DawoXrchglwf/eLv7Skqiv0kTuC/Pt+EhzUcqOXKGzSMtglvpRA/in6VF/fjjoYUApbA6p7OgL+94GlbMAsg==","signatures":[{"sig":"MEUCIDg3KkuAk6feHh/oe80o/MRBblRmugOwpds+39uHl05jAiEA9siW9Ag2MmZS0gULqDgEyag+WXvLop7SVCRMoV1vwNo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4299222},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"df4ea765b5465613f460f1f3c58d9bf4007beb39","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.0","@zvndev/powdb-embedded":"^0.19.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.45.0_1784858962484_0.44024724641316393","host":"s3://npm-registry-packages-npm-production"}},"0.46.0":{"name":"turbine-orm","version":"0.46.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.46.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"c4537cb956393ba8d3e129bf1c2c924157264eb8","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.46.0.tgz","fileCount":184,"integrity":"sha512-2S214Jv64NqqaUHsnqF3p5H4WnAaqI+7u+6w8wuSaE8W+n+Vm63HAXP/VXoibJTBOiM7Flmv1cmESR5LdvvZRA==","signatures":[{"sig":"MEUCIQDwjohFydxTtCOmmI3CWZW9AyqPgpeMAYkHfMUpHweT6AIgbxnQp/FraT+B1dZ2aDAEoROt1TKUqYg3NwCotrY0Z5E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4389591},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"9e9c2ae0ff49e47d46adc56a44e3a74b63bbfe91","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.0","@zvndev/powdb-embedded":"^0.19.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.46.0_1784859868568_0.6402611309681396","host":"s3://npm-registry-packages-npm-production"}},"0.46.0-next.9e9c2ae":{"name":"turbine-orm","version":"0.46.0-next.9e9c2ae","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.46.0-next.9e9c2ae","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"04a46e18e0d7db77cba213c6c3678db33a32a400","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.46.0-next.9e9c2ae.tgz","fileCount":184,"integrity":"sha512-x9qQ7TNJe9YYYkYU6vIp7N/bt5SvP9cexKIMYWGNJadB8b1grG314cH5ghcl7h7iwbiDg/ZT9fqK3xhLahmDcw==","signatures":[{"sig":"MEYCIQDHL7GlmqSuMghIfg92eUTD6HH9jVfosfI+1kU3iAoSzwIhANfMg8bv0T9iYRj4rP4BxXfLE1Htv/EJUK4VcLvpyWR3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.46.0-next.9e9c2ae","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4389604},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"9e9c2ae0ff49e47d46adc56a44e3a74b63bbfe91","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.0","@zvndev/powdb-embedded":"^0.19.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.46.0-next.9e9c2ae_1784859974830_0.308273617346952","host":"s3://npm-registry-packages-npm-production"}},"0.47.0":{"name":"turbine-orm","version":"0.47.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.47.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"a33889a6878a037d4da68d894bc47c767c48b68d","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.47.0.tgz","fileCount":184,"integrity":"sha512-tX4f8xXduDGidq8aJqfACU22dHz74tg8O5/ag09L5ouka08QMxV8FiPO8oq2pHA54cyxIjbhSKcSIiZqncXfPQ==","signatures":[{"sig":"MEUCIQDl0PN673px/k1zBWv0mUzPN31bM21zcAb6NbyFyQmwzQIgFbjqbHgi/I846PeefLQfXMAjPtswEw22U+qU99Tizuk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4444840},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"7db5246fe195e8bdd7c9b3e9e97c0e5040963535","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.0","@zvndev/powdb-embedded":"^0.19.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.47.0_1784862161937_0.45537944897418536","host":"s3://npm-registry-packages-npm-production"}},"0.47.0-next.7db5246":{"name":"turbine-orm","version":"0.47.0-next.7db5246","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.47.0-next.7db5246","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"8332fffb76c2122685bd8c574876e5c34a971160","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.47.0-next.7db5246.tgz","fileCount":184,"integrity":"sha512-Aj3X8FG5AV9dLyMDevxp3CoMMz852nmppbm/SZHfyQer/XL7sijen935r9Ptrw0P93p+KEqA/Y7Gy2l8URnTsw==","signatures":[{"sig":"MEUCIQCEZu4e0Ag8YoMWDZDeWSDL4RO5oyZ/ILQEJ0PTnJxUZwIgVeVzpGe8zVcfVFpW2IkAQ7rGMDWxucxj7U9XNb1AHeo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.47.0-next.7db5246","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4444853},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"7db5246fe195e8bdd7c9b3e9e97c0e5040963535","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.0","@zvndev/powdb-embedded":"^0.19.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.47.0-next.7db5246_1784862185695_0.5499520844776336","host":"s3://npm-registry-packages-npm-production"}},"0.48.0":{"name":"turbine-orm","version":"0.48.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.48.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"01173811be3bf43cdbc635199b44454f33086df3","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.48.0.tgz","fileCount":184,"integrity":"sha512-P9nXN/g9oi7tnvN1aVTGkb7tTGV6713/UQZWMBBJobsZOdiOv96uoHvsBgxhZ72tUhfPBO1TjxIVk3KsdkXSQw==","signatures":[{"sig":"MEUCIGEytdEq13HrC+CV6oMA5lg6je7NLOFc+X08IlOrLk+HAiEAvdOzw0wIcuycdDdHgk2w03VZp2TLHEexmQueqZ69jRM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4507314},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"81170f6200b2bd69d9bd9b71a5f95478b3f8fd4e","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.1","@zvndev/powdb-embedded":"^0.19.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.48.0_1784920756203_0.4889720742612862","host":"s3://npm-registry-packages-npm-production"}},"0.48.0-next.81170f6":{"name":"turbine-orm","version":"0.48.0-next.81170f6","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.48.0-next.81170f6","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"c01da66a37e37b883acdc51f7c5bd12f3195d0a9","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.48.0-next.81170f6.tgz","fileCount":184,"integrity":"sha512-cA4Q5Q0o8oAaaXS65gWccVNCbUJFrwpzW+xrN6B+KsNPDdoEpnLNoYQLPleY9wSPE1SFqZX26ZUaxq5U+pLrDg==","signatures":[{"sig":"MEYCIQCOi63GEKdV4CX1H0rTdYx+QN9/aN1epNzoFfZZldlKDAIhAMIrRUwD88I3/3oTI3gIV8LvbseuR+JngIWuWgit4Ut6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.48.0-next.81170f6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4507327},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"81170f6200b2bd69d9bd9b71a5f95478b3f8fd4e","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run size","pretest:coverage":"npm run gen:studio"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.1","@zvndev/powdb-embedded":"^0.19.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.48.0-next.81170f6_1784920850210_0.5442933239592005","host":"s3://npm-registry-packages-npm-production"}},"0.49.0":{"name":"turbine-orm","version":"0.49.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.49.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"4bb3290cce35b72c9f161afc856fa0adca6dd7cb","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.49.0.tgz","fileCount":187,"integrity":"sha512-9bamHMeLaZ+nwOXG8DgBvt9SLbNAAIM3xxZuhDpW8KFOFCm9AMezO6GKcHIrmD85BWBy0f3tqRcsqoDSfSdBfg==","signatures":[{"sig":"MEQCIEG6CYI9LzaVWgfQC1YnMQ9wed0a1AijUJ9TIanunf3UAiBP1QWJ0/OrDm+W/hq9WRqApl/5EwqkW1DDBjyHDl7Bmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4667041},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"92d99c41232340e5e1405b2ec1a11404ee3c106e","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.1","@zvndev/powdb-embedded":"^0.19.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.49.0_1784953148311_0.5077077186950918","host":"s3://npm-registry-packages-npm-production"}},"0.49.0-next.92d99c4":{"name":"turbine-orm","version":"0.49.0-next.92d99c4","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.49.0-next.92d99c4","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"2ffbb70d25ab258f80c6162c275c2f0ededcc691","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.49.0-next.92d99c4.tgz","fileCount":187,"integrity":"sha512-cjgTFZp37K3D4SijWS0TlCR92yU8WCW+Mv8wAFisc8xrL4GTPUrj8Crc9LOcuGyj7julRTANz98krX2yRX4mPg==","signatures":[{"sig":"MEUCIQDvrmyDusY5w2R82WZ726eERL4RgC2jiIgdg6g+vQGi9wIgImyR+UQE+2ZdY2QziS24yj602jjvrcQ/kXsRfdgDgCQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.49.0-next.92d99c4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4667054},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/cjs/index.js"},"./cli":{"types":"./dist/cli/config.d.ts","import":"./dist/cli/config.js","require":"./dist/cjs/cli/config.js"},"./mssql":{"types":"./dist/mssql.d.ts","import":"./dist/mssql.js","require":"./dist/cjs/mssql.js"},"./mysql":{"types":"./dist/mysql.d.ts","import":"./dist/mysql.js","require":"./dist/cjs/mysql.js"},"./powdb":{"types":"./dist/powdb.d.ts","import":"./dist/powdb.js","require":"./dist/cjs/powdb.js"},"./sqlite":{"types":"./dist/sqlite.d.ts","import":"./dist/sqlite.js","require":"./dist/cjs/sqlite.js"},"./adapters":{"types":"./dist/adapters/index.d.ts","import":"./dist/adapters/index.js","require":"./dist/cjs/adapters/index.js"},"./serverless":{"types":"./dist/serverless.d.ts","import":"./dist/serverless.js","require":"./dist/cjs/serverless.js"},"./prisma-compat":{"types":"./dist/prisma-compat.d.ts","import":"./dist/prisma-compat.js","require":"./dist/cjs/prisma-compat.js"}},"gitHead":"92d99c41232340e5e1405b2ec1a11404ee3c106e","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.1","@zvndev/powdb-embedded":"^0.19.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.49.0-next.92d99c4_1784953254651_0.49419587713282676","host":"s3://npm-registry-packages-npm-production"}},"0.50.0":{"name":"turbine-orm","version":"0.50.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.50.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"5e6e4b6e1c00ab4676e30f093c18cf315197b2cb","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.50.0.tgz","fileCount":252,"integrity":"sha512-IgHfBfaAHgTNrN3KF7koV4321BWHx5GcYw193m3mRvvRMJaV19LvhhsHluk+yeG8gJB48+vb65xoUURbD+ZCNA==","signatures":[{"sig":"MEYCIQCwt0br+PKa/jnrskjwTKDXM0VnUYJvSi5VtNjDubsvgAIhAPpaVa3MODig5RgwqwDVnzk8lUhRBU9Lbnoud5jWmL9c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5746229},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"ea011bc2477aceb678622e23747dab6f81f385ff","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.1","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.19.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.50.0_1785006433816_0.5354753545093505","host":"s3://npm-registry-packages-npm-production"}},"0.50.0-next.ea011bc":{"name":"turbine-orm","version":"0.50.0-next.ea011bc","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.50.0-next.ea011bc","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"653d9b5e4786c1e9be227cc170b0e74f862c1094","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.50.0-next.ea011bc.tgz","fileCount":252,"integrity":"sha512-UElepMy6pO4uohBGNPUnQzZR5xvK/AM7k4U6fLmFYwWGyuGAou32exsP+vLInePuI414ACYPhs9/3ZVnjelzMA==","signatures":[{"sig":"MEQCIE7sAFZHWvhZUI3cqJk2ZCWwcq3sAKN9yW/mUS0FaLQSAiB3lE43RE8t+LtrmE8yb1B2Ew4w+exG8kjtpm6pmM4/bQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.50.0-next.ea011bc","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5746242},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"ea011bc2477aceb678622e23747dab6f81f385ff","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM — runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.1","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.19.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.50.0-next.ea011bc_1785006517145_0.3029196456389125","host":"s3://npm-registry-packages-npm-production"}},"0.51.0":{"name":"turbine-orm","version":"0.51.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.51.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"d3c1d62c631e5e1062a44ffd0a6452b5694549c8","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.51.0.tgz","fileCount":252,"integrity":"sha512-zJ2mAoMITFCIpCMzTev6qlM3mtrCieS2GkEMWbCr17jBEyycyh2Iu+II2WAGCThTbSDQ2Zh0K5UfsQ2qfciTKQ==","signatures":[{"sig":"MEQCIG8t2Evk1kdfv80LL0Jdqrhlr/uurGEodnMje3cpMu36AiAYAUoLO5eczbo9O421WhzRmCmSEA+ht7TygfGCEels9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5844995},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"0864166ad721619f4eeac7f87b4f8be242c20fac","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.1","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.19.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.51.0_1785041571669_0.5825618066197913","host":"s3://npm-registry-packages-npm-production"}},"0.51.0-next.864166":{"name":"turbine-orm","version":"0.51.0-next.864166","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.51.0-next.864166","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"fb76ffb7569e9337a1358a345ddfd2639e54ee49","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.51.0-next.864166.tgz","fileCount":252,"integrity":"sha512-ECIBAsNlyBtL3vj/1OwxxBP7WNfqWlJaWOzQAIzlvfoi5KNQ+C+NtAiKYXKzvrxcsZy/nlNMcErE1VbPDmm+3g==","signatures":[{"sig":"MEQCIA63CtakbAtuiBCuBiztmmTIxBbhHX9miT7Y+TC1DerOAiBsHrKHIsRrFDWVaEq2sAR02eqN8k5KP85CFUQhlp7sGw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.51.0-next.864166","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5845007},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"0864166ad721619f4eeac7f87b4f8be242c20fac","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.19.1","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.19.1"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.51.0-next.864166_1785041848944_0.5988323318272155","host":"s3://npm-registry-packages-npm-production"}},"0.52.0":{"name":"turbine-orm","version":"0.52.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.52.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"97a1316bb6d3d465f22bcec01e8f04fb2462e868","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.52.0.tgz","fileCount":256,"integrity":"sha512-IqnFLXs8cx4ejN9dYV+/RPLsFPn7TIdTuU5fhcAGTQEeq+HYfqPTrtwYUKaqeAOkN4xxp2raxZKApm+U9WreaA==","signatures":[{"sig":"MEQCIBKbapGCW3jtFjnHpVR2zQhqiobKSYlJXTo73Cm8bConAiAUMsi3uxN2nk3vX+pTYYlcvSjEUO6fo5LNZU5A+2lcfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6079409},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"1f3303af35859da799c81b4cf1bf0d610a9fa8a8","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.52.0_1785051293994_0.3324207144221112","host":"s3://npm-registry-packages-npm-production"}},"0.52.0-next.1f3303a":{"name":"turbine-orm","version":"0.52.0-next.1f3303a","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.52.0-next.1f3303a","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"e10cfa1ab98edbfb4e350e973a8d1c6c724ab90b","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.52.0-next.1f3303a.tgz","fileCount":256,"integrity":"sha512-ZWRpg0CDmb4g47wxQr1NCreWDu4FQwYYImYI6Q4lQEqjb0j0hzAeD5nS02FhZ9nZiJFeULpNxaNingnof+e3SQ==","signatures":[{"sig":"MEUCIQD9fTM1sP8rNJA0xXd8Zn396dsXdOvjAhmoDheWGcIKnAIgDduLtuF6gCGd4YjQ7yaefQDXozDwW1tS7u0M20CdpcE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.52.0-next.1f3303a","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6079422},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"1f3303af35859da799c81b4cf1bf0d610a9fa8a8","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.52.0-next.1f3303a_1785051606219_0.6802190512268109","host":"s3://npm-registry-packages-npm-production"}},"0.53.0":{"name":"turbine-orm","version":"0.53.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.53.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"0d2a3e7831e7e8090085be643c5f2616450cb1de","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.53.0.tgz","fileCount":256,"integrity":"sha512-O8zJFKbOruoPO0RVcyZvDQxibjWWJir6vf6+w+556LDcD3l7h6q6Ea5HVm+hcoU3FldV7fo9HkQimXP5WltlBQ==","signatures":[{"sig":"MEYCIQCETB7C8Es8FwNTzy1yfBir9EinS0uBvPS27c7WTBLSFwIhAOD5OmFxCADsKA2O5H2mnmla1x3TpWTy6hiYEjF+oliZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6161364},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"9bc89c25a086f5524efded1cb530325ca59a1a6c","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.53.0_1785125003246_0.16358597698490884","host":"s3://npm-registry-packages-npm-production"}},"0.53.0-next.9bc89c2":{"name":"turbine-orm","version":"0.53.0-next.9bc89c2","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.53.0-next.9bc89c2","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"9817713716d517f5abfaaf9496675bd079f81bcb","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.53.0-next.9bc89c2.tgz","fileCount":256,"integrity":"sha512-FDoANTC4NfdyoslQ+8JKkC0AuXF+cHezZwV4u+ka/s8zNb9xypAb7js0ErkxLkqSAior2TH9JGlwfTC+sVV40g==","signatures":[{"sig":"MEYCIQCp2TF5141meviSPr93gDyZiu7cSNhCiA4P2Zr+utBjPgIhAIhb7SG7yeNLOk/zCtausahSiqQ8aigt/yEO+VVfRMxG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.53.0-next.9bc89c2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6161377},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"9bc89c25a086f5524efded1cb530325ca59a1a6c","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.53.0-next.9bc89c2_1785125210837_0.30378581391266923","host":"s3://npm-registry-packages-npm-production"}},"0.54.0":{"name":"turbine-orm","version":"0.54.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.54.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"db20824026a4788479b396f576f7e259e14ddde2","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.54.0.tgz","fileCount":256,"integrity":"sha512-b7mUXANa/LFE/xdBe1ASvKjtpHkvRYn8zfM5HZr89KFThlhk3kiPD/gGtMcWgIugx6b6578YJyaQi/JNkGv84A==","signatures":[{"sig":"MEYCIQCCbcgdTOUExFU7P14M7gg044Zxo6uJlA+glgS0gbusiAIhAPi8h1mRrfWFMwFe4tGlUczXgA8Hcn6w7bo7iQFmBYnO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6238711},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"f80837346b47e4aef9fdc5a7b21baa5e94d7622f","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.54.0_1785135500429_0.2979153296409207","host":"s3://npm-registry-packages-npm-production"}},"0.54.0-next.f808373":{"name":"turbine-orm","version":"0.54.0-next.f808373","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.54.0-next.f808373","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"5504e18a226b51a0c00f2e70e1dfeb395c1a14df","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.54.0-next.f808373.tgz","fileCount":256,"integrity":"sha512-6UA2FO1D1G5e0jI9MXJ9xQ/jWvQsd8yDv0Dm5MJfRCV4kn3LEoAHuwfR0rSpXVTqi3SOFeRjviI9m0LsZy9akg==","signatures":[{"sig":"MEYCIQDomhLpegdQDdT9CLDTJmDZmBAQX7DjAH4OAjyIF8U98gIhAKpBqxQx4KaLUcMpCZHuCB1tiKudZJ5vChFAWI6apUHR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.54.0-next.f808373","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6238724},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"f80837346b47e4aef9fdc5a7b21baa5e94d7622f","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.54.0-next.f808373_1785135827995_0.056166798516253946","host":"s3://npm-registry-packages-npm-production"}},"0.55.0":{"name":"turbine-orm","version":"0.55.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.55.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"d71fc095ae466b3606b8f9c47fa2e938d5c87f17","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.55.0.tgz","fileCount":256,"integrity":"sha512-PG4pBu+BzARoD+ytY9VsrsWuquqiKyDMgLbXJD4t0wgxn2EiK5DBiGcbG5LNmxOt5BfBlrSMOeMdGMj7IeCy3A==","signatures":[{"sig":"MEUCICkfh6Q+nY63jJRpgzOW0ePnGXZ4s2nI5Mlh4g0YYgFOAiEArgZ4qNvNx7JNq4G63RJvKrIuT34oySKeKUylUK2oMnc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6314354},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"cccce7287193942a521cbbb6a5b10d38314cc8bd","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.55.0_1785179858300_0.41050722816506235","host":"s3://npm-registry-packages-npm-production"}},"0.55.0-next.cccce72":{"name":"turbine-orm","version":"0.55.0-next.cccce72","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.55.0-next.cccce72","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"2f657907e1c78ca6a5b2dc08787bc45c54404472","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.55.0-next.cccce72.tgz","fileCount":256,"integrity":"sha512-bbUltB8KXzCznDNC2AkI75BmCOn5lLL8dzA66PyHwffJ2wvcP7lv21AjjLeMzlaad1mLrC4SC3ulewkVGPLc+Q==","signatures":[{"sig":"MEUCIF7jNCc3UvUwp+NUkjpv9g08h4FJ7WQC+57aWibtuy8KAiEAoikWAyfZxf7mNTSCqnZIqxXoOpSIG6ev7EsfqJH61IE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.55.0-next.cccce72","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6314367},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"cccce7287193942a521cbbb6a5b10d38314cc8bd","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.55.0-next.cccce72_1785180182946_0.8243612587484423","host":"s3://npm-registry-packages-npm-production"}},"0.56.0":{"name":"turbine-orm","version":"0.56.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.56.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"efe462f492117e0342ab8c67191788f9b3034a2f","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.56.0.tgz","fileCount":260,"integrity":"sha512-TWTLYRkpOHY8kbFYZn6iTEUXPR9kop9DTmgySM3i8H2Q6ZDbbpxwdHypczt6fQCAN6eQySB8DubfraB5c65iEQ==","signatures":[{"sig":"MEUCIQCAOJmtdEJzel94z5dJSzqZDF/HNP9VT0+jugPADzdEZAIgBjf7YUN08Pe/oZs+ZtgP7AscCc4013XsPB+d4s+eRLc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6462448},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"cf0c6a8682835a3ee3fda57df69d93d7772b7ac6","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.56.0_1785194187528_0.9236294153806379","host":"s3://npm-registry-packages-npm-production"}},"0.57.0":{"name":"turbine-orm","version":"0.57.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.57.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"b2663cf6d00497e8fb251ae582116cc636ee152f","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.57.0.tgz","fileCount":264,"integrity":"sha512-2mlXzbX+paMqn3uANu6wND6K/AuHGmKB3maFt49S8dJsYnPeH03VpljQpNp4BGJCFSam9JikFmazWTlBKJXu+g==","signatures":[{"sig":"MEUCIDcOv9956pOHl1YDoyaJ1Yxl0rO5LyPwiLEifRgL++zfAiEA4ovmh4pAnmMIMJErmFDKuEN65W1vNemvJe8ytdHsnbs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6631444},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"c37c1374663618b6095e3f4ea991e769529fa88a","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.57.0_1785203209973_0.6120774269365354","host":"s3://npm-registry-packages-npm-production"}},"0.58.0":{"name":"turbine-orm","version":"0.58.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.58.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"8e6bf8b0feb7443e7542a6d472a45d30625c7cba","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.58.0.tgz","fileCount":268,"integrity":"sha512-7Rk/gkDgflaJqLJ9eDeV3pyXKiiGt82elX11MSgBWFqvnI0P5GMy3fbHhDkcHKZFQIrU6S5/kUOSi/Rw7H79Tg==","signatures":[{"sig":"MEYCIQD4FqjGaPg8DwDBTuPFo3CKuN3P7rskMoZOERclcBjgCQIhAPRPWLJRHJLx6QKvCeCsl4xeGfk3CMch1mv3rcRN8cAI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6677363},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"b1e26dff4c5d7459651b046a540c8697a7475e07","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run size","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.58.0_1785207746937_0.03568454489087869","host":"s3://npm-registry-packages-npm-production"}},"0.59.0":{"name":"turbine-orm","version":"0.59.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.59.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"a4b17bb6e44427b9b0af474d1dab5d16a53dec80","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.59.0.tgz","fileCount":268,"integrity":"sha512-3v6PKAjOzfgZLASPyDDn5K7HMZmdWYpZpawoRCFMrHFHb52YAfQsmuE6l60JfunpsQu2CKY7q5UaWaep1ftYLg==","signatures":[{"sig":"MEUCIH7do1UzXCFe0b1iwew3SiXL9O9RQ0eOiSyiHgdZHrNJAiEAlFtANmsVbEjsyozsQGXnTbmOe8mo1dNYpFxsZv+Kl3M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6687074},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"0e0158fe6ae740af5cd11cf0d937d45ea0fee1e8","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run check:changelog && npm run size","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.59.0_1785210228449_0.9037963004337322","host":"s3://npm-registry-packages-npm-production"}},"0.59.1":{"name":"turbine-orm","version":"0.59.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.59.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"c06c02b415169639136351e878d4b76c702d5cf9","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.59.1.tgz","fileCount":268,"integrity":"sha512-QDI70ox9xIDD+k3+sqYJmNhVJfQZIvjYo0CBH/um+kfYnPKQqWyDdiE4iY4pELXeTsVRSVSNASc5UokiY89Yxw==","signatures":[{"sig":"MEUCIQDvZJyfBbW7kKpP/CneDeRfge6oafPiAkpG3rNZQoJ/sQIgGx13/RDS4/ZTe/tFNeDlzBlRbI2TNxKcVqAUwkZEUuE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6687189},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"a55cd6a33bc2fc108981dba2b468223e6cbd50a5","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run check:changelog && npm run size","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.59.1_1785212481777_0.2429819609555599","host":"s3://npm-registry-packages-npm-production"}},"0.59.2":{"name":"turbine-orm","version":"0.59.2","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.59.2","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"502fb172e0e18fd407f8ec4ee7746203b55916f4","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.59.2.tgz","fileCount":268,"integrity":"sha512-zLgEpZIQmFR5dk3LAGgMJLh4SCB+W+uqnczqCmVKbiGz3YS4QepnM1FyFJ5fRsYwP5qzUiqmrkXhJsN5YMugGw==","signatures":[{"sig":"MEUCIQCQekGOqAjW3W5yJPsDFX0GW2wIbewkKy8pykwWtbiZMwIgRXhBClwOqeZ/UNgOUr+ak1jsN4w/BtY2YZL2XopmUSg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6687161},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"2ab97f285ecd4db3a1939562afd90320c3ae8eb5","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run check:changelog && npm run size","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.59.2_1785214817414_0.9775499179526961","host":"s3://npm-registry-packages-npm-production"}},"0.60.0":{"name":"turbine-orm","version":"0.60.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.60.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"8496f977f43ad11fcef5b6b954fb0a74bb4f749d","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.60.0.tgz","fileCount":272,"integrity":"sha512-FZK8KWJ5JIrxEFRbuKtNLQjv6qx38nt1wmiiTvA6kP1zFGbs9wd9OP+YyyxDG86KFYEt9yZlW6fUNSTSbZpyJw==","signatures":[{"sig":"MEYCIQCawh0Xj2jqyqDK3GIokDVAnSY2m3q/ITPN3mwVAvbeRwIhAPhRV+f8mg92nwAWpKoe5ZzI491NfrIRK05cU5esTEbs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6716093},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"5a6c050bd8b6fa5920374f3f36b899bc10594700","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run check:changelog && npm run size","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.60.0_1785216653738_0.6071113976638061","host":"s3://npm-registry-packages-npm-production"}},"0.60.1":{"name":"turbine-orm","version":"0.60.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.60.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"2ca674f5c8ca4dc5788368ea18cc3cb31da50389","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.60.1.tgz","fileCount":272,"integrity":"sha512-SNZsOIM7zhZJ7oEN4aX2du7f0DoNvN31tecz9OYKp4vQUSaohziJ3GwsY42ys+uyCGisqfbZy/GjdV8gzYssbw==","signatures":[{"sig":"MEYCIQCgnMFRh8XyLEdefP8J9HBCw1PWzv00/wZFSol+LXYIhwIhAMAXpHIdjSxFCLyKxheS7hKIJViEDBwWAaUlfM8Z8HGz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6717497},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"d36d1e889955cd66e512881d3475aca0b5540140","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run check:changelog && npm run size","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.60.1_1785242748292_0.30796194120568865","host":"s3://npm-registry-packages-npm-production"}},"0.61.0":{"name":"turbine-orm","version":"0.61.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.61.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"5dc27e4f52c2d2655fdc04b8baee1c8e4ec05d23","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.61.0.tgz","fileCount":272,"integrity":"sha512-haZU6BhwGqwOk6zvMBDahREjb1r3rPlutIJTxRB6xiZfnpTR84kqMl1BqNf33rvUHWFKDF8NTutdTM2Ff3EyPg==","signatures":[{"sig":"MEQCIDjhA+TJ+vs1az+CPA6Iq0YMDFEM2RLHTp4dhoU5+l4ZAiAioeArTwzlxvS+ggTElbKDLfdIsq3IdP4h/hKJgCMh+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6734608},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"4080151677f9a9cc0b296b6b838429b47552f3f6","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run check:error-codes && npm run check:changelog && npm run size","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.61.0_1785245626598_0.9329331024696716","host":"s3://npm-registry-packages-npm-production"}},"0.62.0":{"name":"turbine-orm","version":"0.62.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.62.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"ff6a611d84c8a87fd295729dfd692a602d7d627d","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.62.0.tgz","fileCount":272,"integrity":"sha512-ArEAGuIrGIea+9+uATiStAAXf9NplOvsBg2A+e/OxA3d2LvRrBdhygiAMdbW/9OG9Z050nRNYjkCHo9Ciek3nw==","signatures":[{"sig":"MEUCIQDfXSxfdH7bJ1FM1rykgVpurUKUPJDJ3B/pmJdqRzfdAAIgWhQVB68eoSRprwr6ckeCCq5LwLUVZNUX/BxMfWYoiWw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7058167},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"25c458ac0e659a10e2a306ae2cf3c36452e0bc76","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:package && npm run size","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts","pretest:coverage:cli":"npm run gen:studio","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --lines 78 --statements 78 --branches 84 --functions 82","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need a live database or minutes of packing: the Postgres integration suite, the engine containers, and the tarball install smoke, all of which release.yml + ci.yml run.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.62.0_1785254516982_0.30006609409310503","host":"s3://npm-registry-packages-npm-production"}},"0.62.1":{"name":"turbine-orm","version":"0.62.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.62.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"e4a30f9958751710e392343add31aa0cc0608a2c","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.62.1.tgz","fileCount":272,"integrity":"sha512-/0CM9FixlM1SydQxCDaMZDSh2sGY7cGJLun3L28Dj35n2T437xZdK74oEk329tBiCcrtlRDisPug7kddAWO/Jw==","signatures":[{"sig":"MEQCIHx+NW7ahBmpgtVR+bxnVVcCfLFE5UiJkIK7OydBP++SAiAMeCSuAhCePFohCPSbzt4LS3t2vXB+ROKTM4x3opal5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7060603},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"5ec21977ec6e240d80404bbc191708fdd39d5392","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:package && npm run size","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts","pretest:coverage:cli":"npm run gen:studio","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --lines 78 --statements 78 --branches 84 --functions 82","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need a live database or minutes of packing: the Postgres integration suite, the engine containers, and the tarball install smoke, all of which release.yml + ci.yml run.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.62.1_1785255895816_0.005003575515480474","host":"s3://npm-registry-packages-npm-production"}},"0.63.0":{"name":"turbine-orm","version":"0.63.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.63.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"061fd6bbd511576e175d0defdf052773b36df7c3","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.63.0.tgz","fileCount":272,"integrity":"sha512-xOlKkIXCn618RSRTZJD3WXVGZfCvwjQjAcEEdsTQSpH4MJnB82ftrcF00TFCskb2Y8wL3O4TzSqye7Bi153ypQ==","signatures":[{"sig":"MEQCID933DHTPPy1p2Zg9H0VnHqwToMXvqvmWPlzc6L5GDjfAiBV3rcQfZT220jQ/W+StFM2oggKO4DwAnRio7aFQtPR1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7079771},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"45159e4c5706fe8c75535a377805f1ad32a509aa","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:package && npm run size","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts","pretest:coverage:cli":"npm run gen:studio","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --lines 78 --statements 78 --branches 84 --functions 82","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need a live database or minutes of packing: the Postgres integration suite, the engine containers, and the tarball install smoke, all of which release.yml + ci.yml run.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.63.0_1785346488543_0.44244981885981916","host":"s3://npm-registry-packages-npm-production"}},"0.64.0":{"name":"turbine-orm","version":"0.64.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.64.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"e97a76d2a655fcb71f0c5e49d0ed4e78e746ac15","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.64.0.tgz","fileCount":272,"integrity":"sha512-RhIdRtNumS0TnrdFgQUZKCEyGtpCtkqUrXAAzNFMLO71URpk5ss/W5bX49FEgeOq8cgp/NLGYsCNfhPvXUHCMA==","signatures":[{"sig":"MEUCIQCxSkWceQIcsdJPnZt65cV9D57Dr46zANXNzEbRGwVeAAIgftZCAj5EGEZxOQ45jSzygQJoY3EG1OybLKyKpis9CAU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7097282},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"c4c43d617812d9259d2754b7abf759d7a8a0c15e","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:package && npm run size","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts","pretest:coverage:cli":"npm run gen:studio","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --lines 78 --statements 78 --branches 84 --functions 82","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need a live database or minutes of packing: the Postgres integration suite, the engine containers, and the tarball install smoke, all of which release.yml + ci.yml run.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.64.0_1785352067982_0.6450479128035913","host":"s3://npm-registry-packages-npm-production"}},"0.64.1":{"name":"turbine-orm","version":"0.64.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.64.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"edfef515dc2f35c81fea4e112d3f2ef51d2420ca","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.64.1.tgz","fileCount":272,"integrity":"sha512-xHVZ5BHj+80Kwc/WW5PFKsCCTkD0rsH+sI4GKGmbPByf/dbDQDMIX7aK+soEmvcbUivW/DWNbjcnaEhVkqgylQ==","signatures":[{"sig":"MEYCIQCnBFur97yPdheMzmUcR8UAwpIVa7YROBxux/p9BBbk4AIhAPbGdfLc7eS5YMGBFpRFzX7lsCSXbg3vg9GJea1VScte","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7097279},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"a56cf42728a06efade9ef13a85ddcdf27739620d","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:package && npm run size","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts","pretest:coverage:cli":"npm run gen:studio","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --lines 78 --statements 78 --branches 84 --functions 82","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need a live database or minutes of packing: the Postgres integration suite, the engine containers, and the tarball install smoke, all of which release.yml + ci.yml run.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.64.1_1785357803263_0.6567292334395587","host":"s3://npm-registry-packages-npm-production"}},"0.64.1-next.a56cf42":{"name":"turbine-orm","version":"0.64.1-next.a56cf42","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.64.1-next.a56cf42","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"eeaa2847ebbdb2ab3e076469ea63862f762c05f1","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.64.1-next.a56cf42.tgz","fileCount":272,"integrity":"sha512-swE+qRsqu/ednp1tcIWePbsm5KvoQ1sgEOUGYiXerW56BL0wriIDXduvEu0ub1Rwn3nupK7N7Fpk1SwQHp47Ig==","signatures":[{"sig":"MEYCIQCvyLlaK+KYYVw5OG1QTvBHiAqAkbUPsydUTjyvL3hdWQIhANCWSbvYCxzzhieB+P+asFREtH1tOd4MctPSlnkVX9zk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.64.1-next.a56cf42","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7097292},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"a56cf42728a06efade9ef13a85ddcdf27739620d","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:package && npm run size","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts","pretest:coverage:cli":"npm run gen:studio","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --lines 78 --statements 78 --branches 84 --functions 82","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need a live database or minutes of packing: the Postgres integration suite, the engine containers, and the tarball install smoke, all of which release.yml + ci.yml run.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.64.1-next.a56cf42_1785358196711_0.9586482022315024","host":"s3://npm-registry-packages-npm-production"}},"0.65.0":{"name":"turbine-orm","version":"0.65.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.65.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"aea62cab888a16fa2ebbf54316ecf03da64ea021","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.65.0.tgz","fileCount":272,"integrity":"sha512-H3tXpDPDoeTm75y1Dnw9n9IG7W5kOgBAvCUnofeAPKGDQ0UEAyZgjX8/5I5ajxA3/yiXJI0smxHfFJD/r9QgmQ==","signatures":[{"sig":"MEUCIQCAY56TpMLHVDd+tIamQHbQrVgKBIsukbjbm86xZLXnaQIgN0vN3YVPxi5x+86aoIfjorQweCRlzeySXHxthZPx4kw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7128866},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"c23570fb187e1a226ccaa54a3615b8a72e3a45a0","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:package && npm run size && npm run check:release-tests","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts","pretest:coverage:cli":"npm run gen:studio","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --lines 78 --statements 78 --branches 84 --functions 82","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.65.0_1785651871652_0.10555890829902581","host":"s3://npm-registry-packages-npm-production"}},"0.65.0-next.c23570f":{"name":"turbine-orm","version":"0.65.0-next.c23570f","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.65.0-next.c23570f","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"23aa94538eb76582b820c5869cc45dc32ff1553e","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.65.0-next.c23570f.tgz","fileCount":272,"integrity":"sha512-jwnazgEPYKTWKyFJA1VhT6fLX0Y8WZ27tvyEc0xRFrCaQHrN+UX+uWTPLoRw6gfn+eqhvqwb6PpupnnN0SknPQ==","signatures":[{"sig":"MEYCIQCCBpfEZOb4Lp2zWKl6xhLbmOz1B8o5BruqPfy3OFnAPAIhANMoTZdasZVdmjqxu2ERFFjW5N+l9QeIRotrzFRGWKLu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.65.0-next.c23570f","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7128879},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"c23570fb187e1a226ccaa54a3615b8a72e3a45a0","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:package && npm run size && npm run check:release-tests","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts","pretest:coverage:cli":"npm run gen:studio","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --lines 78 --statements 78 --branches 84 --functions 82","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.65.0-next.c23570f_1785652191162_0.5035906663105327","host":"s3://npm-registry-packages-npm-production"}},"0.66.0":{"name":"turbine-orm","version":"0.66.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.66.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"9a1c6e8ddaf461a48e2f1abb5932d479848a9a68","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.66.0.tgz","fileCount":280,"integrity":"sha512-cW2Pg9ILj9qjWzhB749wDsql3CWZ82Clwlt71mAjA8fQFzYavCOPXSfmsQ6U7wsmbZolou3Htfmew4pwwqZBsQ==","signatures":[{"sig":"MEQCIGxLeJ5nwy3BjF1zo/kIQnQpZy6JPasfjJsENrroLZRsAiBfzecrWyYENGJZ/c8Mm96PXy3+LwGQlTLCPgDRSxQXYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7781399},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"2c0e31541251be8a0fd6dc5f1b7c82bb966f0fb4","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:package && npm run size && npm run check:release-tests","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts","pretest:coverage:cli":"npm run gen:studio","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --lines 78 --statements 78 --branches 84 --functions 82","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.66.0_1786302509572_0.1821220077334771","host":"s3://npm-registry-packages-npm-production"}},"0.67.0":{"name":"turbine-orm","version":"0.67.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.67.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"cf336b67bbf0b5c64bef3c7aae682250902b49ab","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.67.0.tgz","fileCount":280,"integrity":"sha512-holET27iVTY1U1oWTjqvDvCEAASVOVZY3YRZDHoAnLqJPzptW2qasdITRecGlU2MX7fidjnTmiu98cDfSZlnVA==","signatures":[{"sig":"MEUCIGzqm96NH0JtHJMbI7PdXs5M3t08V3SfutTjrbAjZhmRAiEA/texK2f0bzH8MjVzzOnb29bQ++MFh6EPCHDTxMAGsNo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.67.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7797070},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"3f04660190a07a7e1d4ff2fd8936bcd7f65ced0b","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:package && npm run size && npm run check:release-tests","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts","pretest:coverage:cli":"npm run gen:studio","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --lines 78 --statements 78 --branches 84 --functions 82","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.67.0_1786372990956_0.3754413388803657","host":"s3://npm-registry-packages-npm-production"}},"0.67.0-next.c353473":{"name":"turbine-orm","version":"0.67.0-next.c353473","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.67.0-next.c353473","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"e12d2c264cb273e4bde4b12243ca7eafd127ffd2","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.67.0-next.c353473.tgz","fileCount":280,"integrity":"sha512-vWoSIjjtwn52SPngTjfh+iJYJkYhUbRk19vQdIwo+E6PM6VJvOyiGBANyo999JvdBRHnc3GLt6NRTzpfASRoxA==","signatures":[{"sig":"MEQCIC1W3wmlJvrExSPIbU/aVZ+5Fe1W+uIblD6NWroTt/B7AiBD14M/dCGxU72dJGCt+nkENbFKcBcwT14o3rKxbtFoaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.67.0-next.c353473","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7797083},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"c353473884d6e59f4eff1b92fab0965dd1856f7d","scripts":{"dev":"tsc --watch","lint":"biome check src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:package && npm run size && npm run check:release-tests","check:changelog":"node scripts/check-changelog-headings.mjs","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts","pretest:coverage:cli":"npm run gen:studio","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --lines 78 --statements 78 --branches 84 --functions 82","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.1","dependencies":{"pg":"^8.13.1","@types/pg":"^8.11.11"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.67.0-next.c353473_1786374022076_0.5261440813816918","host":"s3://npm-registry-packages-npm-production"}},"0.70.0":{"name":"turbine-orm","version":"0.70.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.70.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"63f11984f976da182a212282b71535eaf82fcf04","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.70.0.tgz","fileCount":288,"integrity":"sha512-kRoJzAsvo7ouQQXQRlFJBbbXzObDmQguQuZjUH5NIRUUEO3KP2/9t2WvsmpQEsgi/97rCoBs2vEXrsUa4ysuTA==","signatures":[{"sig":"MEUCIQC/dhur6HABFHza48oLdO+hWe6ca12NmIitvTAExqd9SgIgU9G6ukURRp57vnjfLQNYHJBrEabwsbQohwwLOuyHPUg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.70.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7986537},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"47d847325ac282cd64b1166e79f0d9b68ef85083","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/error-catalog.ts --lines 87 --statements 87 --branches 85 --functions 86","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-14 when mcp.ts and error-catalog.ts joined the --include list: measured 88.15 lines / 88.15 statements / 85.82 branches / 87.57 functions, up from a 78/78/84/82 floor set over five files. Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.70.0_1786770999637_0.5031705980096113","host":"s3://npm-registry-packages-npm-production"}},"0.70.0-next.47d8473":{"name":"turbine-orm","version":"0.70.0-next.47d8473","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.70.0-next.47d8473","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"f5aebece0dd29b0c190fee407458c0ef3e2beca0","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.70.0-next.47d8473.tgz","fileCount":288,"integrity":"sha512-mXSUZQ5fUUCAxbT4xaLJNzZmVMqchoiHztUkMfqvaDWPO4n6V0RY4GmJfhFenEpDmCYlxbM53KgvYjOGMa4ZiA==","signatures":[{"sig":"MEUCIQCF8RvyFaCzJhZZNnqOwatMG+oOKeHp9uNEtjtnMrfxRwIgH/OPC5QEsLe7iUYRaTk92neL3InXnD/L7p87PjtupK0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.70.0-next.47d8473","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":7986550},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"47d847325ac282cd64b1166e79f0d9b68ef85083","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus FOUR threshold checks. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/error-catalog.ts --lines 87 --statements 87 --branches 85 --functions 86","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-14 when mcp.ts and error-catalog.ts joined the --include list: measured 88.15 lines / 88.15 statements / 85.82 branches / 87.57 functions, up from a 78/78/84/82 floor set over five files. Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100"},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.70.0-next.47d8473_1786771042021_0.09501867482698345","host":"s3://npm-registry-packages-npm-production"}},"0.71.0":{"name":"turbine-orm","version":"0.71.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.71.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"9c519b059e9cf47e8899a6143c34701b94b066cc","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.71.0.tgz","fileCount":296,"integrity":"sha512-dK/3KqQlz6JIS/mjvhA2xYA1VmlXZbuHtwBpomByLx1Ljqg57Gnd6iHAWSjKLT/6Kaz20x5wwPDv+Ob0oHbp3Q==","signatures":[{"sig":"MEUCICbBprKmW4BklGFZ3hFhxPFsm+tj7Da61AscwFz3zV9YAiEAkO5icYW369r1jRw3Mkz5pZOYanQ5oinfSgn+D+62qKg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.71.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8129182},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"dd1768890d21734c37ea8394e36cb9251e7380f4","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.71.0_1786851132768_0.5119880592078658","host":"s3://npm-registry-packages-npm-production"}},"0.71.0-next.dd17688":{"name":"turbine-orm","version":"0.71.0-next.dd17688","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.71.0-next.dd17688","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"e6c9ff786dc55fb0f0208bc79703ab6b7c44a2d3","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.71.0-next.dd17688.tgz","fileCount":296,"integrity":"sha512-gR6+noaceqXTtxd971XAz9wJAmkC2BIQLl0o0YHXI/hCCL5KhlwLUUTjLxnYK6T03GeRh5o3Y5zb4tS1PbOPwA==","signatures":[{"sig":"MEYCIQClG1037JHlGBydYCOhQeEWQFEWkJW1anYbWqetx1DkmwIhAO6xKWaexvChSD/tPuPcDnQgjElsnXhMG5hOrcQZKAlV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.71.0-next.dd17688","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8129195},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"dd1768890d21734c37ea8394e36cb9251e7380f4","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"c8 tsx --test --test-concurrency=1 src/test/*.test.ts","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.71.0-next.dd17688_1786852064219_0.9795689837199946","host":"s3://npm-registry-packages-npm-production"}},"0.72.0":{"name":"turbine-orm","version":"0.72.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.72.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"b7f88ffa0d002982147edc94cbd9c52f3b8e1ed3","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.72.0.tgz","fileCount":300,"integrity":"sha512-h232D6kXNemtUmCuIbg68DIzRXzucX/Xy2EaCjFyTH40QAkbaCq2EgxgVrefwkNmTGFFXM/1xxIUjVLcPvuifQ==","signatures":[{"sig":"MEUCIFP6Za2AL0iC02vGPZ6r4WhUsxZW+T6jaC/idqeTEhgkAiEA+LJkW9TfBujyl0IFZlUzzEOEXsCMSUsl0XjBJFCuJ7c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8240660},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"3f6572d0be67a17208c311bb2038cdc866265afe","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.72.0_1786910175034_0.3466464210109159","host":"s3://npm-registry-packages-npm-production"}},"0.72.0-next.3f6572d":{"name":"turbine-orm","version":"0.72.0-next.3f6572d","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.72.0-next.3f6572d","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"ee7541c29d13c349d03cd92b4c4d28f947841a09","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.72.0-next.3f6572d.tgz","fileCount":300,"integrity":"sha512-NvbFMJPH3xS35jM6T6RFqLKxFwB41qFgOeMbc7M6E/yv2tTFDSMkykHJ0+JX07u62hbStNG1ouSn2SIyhel0zg==","signatures":[{"sig":"MEYCIQCWXsyOGve8Vi3vpm5+BGJRhlG/cWZdT06z4s13G459jAIhAPxrIya6Oj66ppCXfc08pF39YBcWOlNhWQCHyNzbUD5U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.72.0-next.3f6572d","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8240673},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"3f6572d0be67a17208c311bb2038cdc866265afe","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.72.0-next.3f6572d_1786910601682_0.12371494631473201","host":"s3://npm-registry-packages-npm-production"}},"0.73.0":{"name":"turbine-orm","version":"0.73.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.73.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"f179d095c0e157f6267ca1dee8adb813a593f40e","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.73.0.tgz","fileCount":301,"integrity":"sha512-HcrnHQnHST6tY9hY7OqlE2X28gGbKvW09I7tVWIAOMnANiD3uUtTZs4bOsD63Vt01GJsc2wPcb+oVfE8utt0+w==","signatures":[{"sig":"MEUCIDmm6T8rTbICm+R6skurY8T+BplwT3lArekUv2CxeGBeAiEAhPFQ4uQQYRfnO/74MWalfvd/obP9IaWRWzgsi6AV43M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8310108},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"7907a7b160deaa539e311a62f4c2f9bff3f00d0a","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.73.0_1786915607107_0.13476466398327092","host":"s3://npm-registry-packages-npm-production"}},"0.73.0-next.7907a7b":{"name":"turbine-orm","version":"0.73.0-next.7907a7b","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.73.0-next.7907a7b","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"207f900dcf05f8a30a2fd49435fd9175b1ffbc49","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.73.0-next.7907a7b.tgz","fileCount":301,"integrity":"sha512-kOrxbAPj5Fh/8E7zNVXf9ftlcBRZFrrxy0oO+BytI0y5Y4ttrwGf32JoRcv1RmGVYzy+8MsI5zvbGIYzY5BGZQ==","signatures":[{"sig":"MEQCIDxvupo8cFHv/WPFWy1d7mOEd6Ma2CqR+aTqQGHjs1MrAiBvdzOiXno4aAl0+fFZC0N3KqgHs2BTcYZqvNx8MI3g2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.73.0-next.7907a7b","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8310121},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"7907a7b160deaa539e311a62f4c2f9bff3f00d0a","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.73.0-next.7907a7b_1786916179165_0.06041882099460616","host":"s3://npm-registry-packages-npm-production"}},"0.73.1-next.1e0f731":{"name":"turbine-orm","version":"0.73.1-next.1e0f731","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.73.1-next.1e0f731","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"3b619cf4d5a766a2aae1d298ccbe003dc4ed2fc2","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.73.1-next.1e0f731.tgz","fileCount":301,"integrity":"sha512-SmsmPf0eIghtD2np+1opwQEZHg2onc9T7VLPnXbY8yuAQxzdua8zl0ip2rSEFtSIyVUb86/Tp+2pJENTA0qmAQ==","signatures":[{"sig":"MEUCIQDBI35UZTrRSapFzAGXuypKJOY8WWpNcCrnhxSpATgSuwIgW/BfcfKFAY2EhBzsf30pjNXUZD+Bi/fJZrZBay9xkts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.73.1-next.1e0f731","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8310335},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"1e0f731ab0f87554246e4379cb0d99734775ccde","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.73.1-next.1e0f731_1786928602061_0.7378267352226875","host":"s3://npm-registry-packages-npm-production"}},"0.73.1":{"name":"turbine-orm","version":"0.73.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.73.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"9732f5c9a76afb9425f8edb641077369b6a648a3","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.73.1.tgz","fileCount":301,"integrity":"sha512-sHfSXUskNYyQWtzRz+ovlAgpOjfMU6CDTkMtumWjVZ+Cxw3Yh71BS6lZtytWZngpV2SauleuscWP1GiEDnX0lw==","signatures":[{"sig":"MEUCIFwjVxNuy8V0y6fBk/gEcy+KMD6XiS4UYDqWu7T4f12yAiEApxnzmWyB1XAtLjURg35GSjaRnV1qbOPwTzY+Pbcidxs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.73.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8312741},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"17e8f0c0cf4e41eb725ec88fb2b3f31f11c0d496","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.73.1_1786930201744_0.35987608038116314","host":"s3://npm-registry-packages-npm-production"}},"0.73.1-next.17e8f0c":{"name":"turbine-orm","version":"0.73.1-next.17e8f0c","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.73.1-next.17e8f0c","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"3a8c6241a2f58fffeed0cc8557fd1a29931f7ac2","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.73.1-next.17e8f0c.tgz","fileCount":301,"integrity":"sha512-L4McqfBEttx4n3QEcXo8EpXbZtuMVGt/RLIuc+PkwwME9TTauPAC+UBo6pbv2Pql/p1toallKhRiBH2arNG5Bw==","signatures":[{"sig":"MEUCICMYQIZuvU8mfClOJ03gqC1pDQYz3aGBOpj8OCIQVGcxAiEArIhhLcB4d+IKFPfapWfqAaX82v9z1FGcK5oNfm6J7MU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.73.1-next.17e8f0c","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8312754},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"17e8f0c0cf4e41eb725ec88fb2b3f31f11c0d496","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.73.1-next.17e8f0c_1786930271576_0.5791206837137981","host":"s3://npm-registry-packages-npm-production"}},"0.73.1-next.5304dfe":{"name":"turbine-orm","version":"0.73.1-next.5304dfe","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.73.1-next.5304dfe","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"a484182ae14b0998ca98054000fd3607a6968af0","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.73.1-next.5304dfe.tgz","fileCount":301,"integrity":"sha512-LsHoY4uKgdIzG+fVN36VR6/jglQW68MNmHidbUr1OshFl7uWS2xBq3T4D9PvZJsKsBMObPfMicwQZHR+KDrHOg==","signatures":[{"sig":"MEUCICj6WiT1ZeYFwWS2P+kmBId+M+rjv2HffXPx+nTotikVAiEAhvAxDPYONv3mRaLbVEGGMlhaco01PGFK4ytbGvgVeUo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.73.1-next.5304dfe","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8312754},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"5304dfeb09e996af50cf17154f7a7c1d3012258f","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.73.1-next.5304dfe_1786930968338_0.8022712702385","host":"s3://npm-registry-packages-npm-production"}},"0.74.0":{"name":"turbine-orm","version":"0.74.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.74.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"b2840380a45e0959ef15de102209b8e615bdf134","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.74.0.tgz","fileCount":301,"integrity":"sha512-9jbwG/lC15PHpDYn016pRE17j9tTk0/M/4LooVtz8YVWHyNAFHq+8zmHo61L4HTNxBef8Nzrapejob2K2oAG/w==","signatures":[{"sig":"MEUCIQCGadkLd9l1q2w2vg0uSlLzTUtpiHj8K4xWHr3h0IHNVgIgAbtpSgLBIh6qlFvtVOcp5O+GwFQ3hMQMbSYKlInnB94=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.74.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8337647},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"ed9d628ac60911ffa08512bdcb04db4f66950af6","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.74.0_1786935386518_0.37949836229099954","host":"s3://npm-registry-packages-npm-production"}},"0.74.0-next.ed9d628":{"name":"turbine-orm","version":"0.74.0-next.ed9d628","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.74.0-next.ed9d628","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"eb1c276772a1e9ec4eef62cfad190c63108d5be8","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.74.0-next.ed9d628.tgz","fileCount":301,"integrity":"sha512-IYxwCipQj4peLuIN4icZ+MaoJhTx0hLc0MCe6iTL5Rw6jRmbgVUlfowoaOxPjB7B383W4N3hd3L79tiHIProOA==","signatures":[{"sig":"MEQCIDpbS8J9WgWjcylzmcaqQQcySCatE5erkGu4WLqrV1rKAiBpmd48CQ25UF65rxd/Op6k+j3m2AA1GABXC1UWXY2OEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.74.0-next.ed9d628","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8337660},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"ed9d628ac60911ffa08512bdcb04db4f66950af6","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.74.0-next.ed9d628_1786935421920_0.23380331649799624","host":"s3://npm-registry-packages-npm-production"}},"0.75.0":{"name":"turbine-orm","version":"0.75.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.75.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"ea7da61ad0db562a46ed653d8525bafa15263a16","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.75.0.tgz","fileCount":301,"integrity":"sha512-m+CE7rehVgGK47sF7aWUipewh/jqRs97Gx0h3XQmYPHSLsYVIygfaM6zli+zwq6BhkBMf53TnFoAskpldtNepw==","signatures":[{"sig":"MEUCIDqumtAYUiqqrfVoeMxNeWXW+k1Y4SXeH2X5Zs83n7/YAiEA684QHr2dvd/3+5MpZFHfE4KStpKKleJLlw5oaxp1E0o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8346993},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"424989b811c7bff56e79a1ff7045be76d70ce167","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.75.0_1786938140786_0.3920156160426398","host":"s3://npm-registry-packages-npm-production"}},"0.75.0-next.424989b":{"name":"turbine-orm","version":"0.75.0-next.424989b","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.75.0-next.424989b","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"aadd3572d97358d57be40b2dac11586c68eb1e2b","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.75.0-next.424989b.tgz","fileCount":301,"integrity":"sha512-M7qifVlIGf9eumoGuSBa7O/t+cXIqzSZx+HebPBZZlfau46O5pl/E8nv9r1lIlq7lyvrD6U2jihNKy9e2AgV8w==","signatures":[{"sig":"MEUCIQC2Uci/pq8+b6E2bnNP6nwsrqynYGf84SzRGzhCPYrS4AIgF4lQgW3EZvJUFmIWb7WGTVv4JBn43Ib/vOa29Z0WFqs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.75.0-next.424989b","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8347006},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"424989b811c7bff56e79a1ff7045be76d70ce167","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.75.0-next.424989b_1786938569239_0.48059338299623877","host":"s3://npm-registry-packages-npm-production"}},"0.76.0":{"name":"turbine-orm","version":"0.76.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.76.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"ddcf43d8a19145442030362215c0398a6c023dce","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.76.0.tgz","fileCount":301,"integrity":"sha512-XtHFKel2cWUAzUuO7PXkin18+U5xgiKjKIzlNN8kMvU5c5cs9Gc2AXxJ+Vz+bxNypwT1yzlKE6I6Qlhrm2Uc5g==","signatures":[{"sig":"MEQCIDpAUlskyscvL6YnOtgukwW4wTKksmPKSQ17/rAmxAiDAiBB03gpXDP/FrxXTOQMmYjQj55Gn3/S+/tBDfTGBaq59Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8516772},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"f5362f49a0e78612e675e768922930cb829401e6","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"11.16.0","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.76.0_1787374769327_0.34366654329487134","host":"s3://npm-registry-packages-npm-production"}},"0.76.0-next.e52c526":{"name":"turbine-orm","version":"0.76.0-next.e52c526","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.76.0-next.e52c526","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"a0631ff8b94376ccddc483d4df902357e00e46e7","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.76.0-next.e52c526.tgz","fileCount":301,"integrity":"sha512-IB1roEjEsrkGtDiSyahwmkVB/+K5zRC1l26D3LVfTo/GCG9jMHf8G9o80kiR4iJagX9ST/Hj3RyssoMcEl5mIw==","signatures":[{"sig":"MEUCIGZDsLQSPwfctB0TW50bR+EAzSGjcF2utniEkFaIL87NAiEA+nTB1WY7SNKn6GQTs3m34NO7hMqqyy+QLHDK+T8Q4F4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.76.0-next.e52c526","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8517127},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"e52c526986225bd3296a5a30bee7884c527ffbdc","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.76.0-next.e52c526_1787376321412_0.6608688937234939","host":"s3://npm-registry-packages-npm-production"}},"0.77.0-next.f8dda11":{"name":"turbine-orm","version":"0.77.0-next.f8dda11","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.77.0-next.f8dda11","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"d7e83c1129fba6a1681749fb47d5380489a75400","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.77.0-next.f8dda11.tgz","fileCount":305,"integrity":"sha512-Y3Xn7C3tkXy9SOROVB1v5EEVJ2djeV3WIdAU79uDRDUCYDl+AHJq9H291hBaD1UrB+TkZPVS/RUQRVuHuG3krA==","signatures":[{"sig":"MEQCIEicAld90pO00/oCmt6FBoE9q6hwEaAMTV0ghO1+Yo3DAiAOXxUmgr92tsqFc4raHiAslFFtIhg5SPp+E9dVIDm+oA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.77.0-next.f8dda11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8541851},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"f8dda113a017f2974fd5c77c20027413a61bc5a2","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.77.0-next.f8dda11_1787496033715_0.21812703051912763","host":"s3://npm-registry-packages-npm-production"}},"0.77.0":{"name":"turbine-orm","version":"0.77.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.77.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"31c1f75f5c1e38d1c6709fe992a0398317770352","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.77.0.tgz","fileCount":305,"integrity":"sha512-YYBRgTsxKml6TuFTjewBSA/pXJAUNF+YlrvWeAyvO2lQKMhITzMM8/WxwpHjFQW3NJrGV9l7L53ti1FdWHo1jw==","signatures":[{"sig":"MEUCIE+CXprSXLAiuxVg9Tz8B+Mag4hFmJCMFSsmx0tucBtKAiEA5LrD3aeGyZQyBL0ntqwroFrv3grJ79pPYVtecl1P3dg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.77.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8541838},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"f8dda113a017f2974fd5c77c20027413a61bc5a2","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.77.0_1787496396774_0.9862245832695149","host":"s3://npm-registry-packages-npm-production"}},"0.77.1-next.19486ee":{"name":"turbine-orm","version":"0.77.1-next.19486ee","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.77.1-next.19486ee","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"1adfe01ef80b58b4bb2d12169ed46dc3c8eabd8e","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.77.1-next.19486ee.tgz","fileCount":305,"integrity":"sha512-lZFNxF8vwjxOcxm5w/xXZKGuxVDtnvIdZTSmWNJlVObdLRIK+nVpd+LB7g/mjJ0VVGmIy+d9gZka5BstONjn5A==","signatures":[{"sig":"MEUCIQC/Ux8TrPARuqhgVRBXjD5a1yHrDo9Xi69zrNorQAUNUgIgO9q/jW65/WYrhc2Q5vvntpH4GXKNO4ZPlNdSZJiP0rY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.77.1-next.19486ee","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8541851},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"19486ee8190518e4a264c4927a323d8dcdfca36f","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.77.1-next.19486ee_1787515507232_0.6314417270562114","host":"s3://npm-registry-packages-npm-production"}},"0.77.1":{"name":"turbine-orm","version":"0.77.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.77.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"b9db9a884fc6435538b0ac5bf30441f689e5e62b","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.77.1.tgz","fileCount":305,"integrity":"sha512-YRa3y59QdXz7DU2RmcUM3Jaz4Q1OJIq9lf/gNl4sLDwLUDhGNeBl3wfMkXTTtCl7H7iwzeAB3NpN9fU4IWFGQA==","signatures":[{"sig":"MEUCIQDw2wpsU1DZs+zKPm3IWG+w83uAO6+baAkAri1U4Z6fxwIgPdc2GApUIfI0HvdSHh2QlYjVLtWaJcOq/mWYIOAf6Dw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.77.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8541838},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"19486ee8190518e4a264c4927a323d8dcdfca36f","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"husky","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.77.1_1787515774006_0.12990054916809868","host":"s3://npm-registry-packages-npm-production"}},"0.78.0":{"name":"turbine-orm","version":"0.78.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.78.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"5f3f86b72eb46795206127e50f9261ef95b3900a","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.78.0.tgz","fileCount":305,"integrity":"sha512-Zro0wkJDG9VaWVe8WKOaIL5xUvODw9iYswnyqAJqMt21f5d4cqgADUYJ0ndUuZ/ZNiBmyLEYmeUOS/UN3I89oQ==","signatures":[{"sig":"MEUCIBR88VYxNqkbDNxBgKgaiJgrpr3eevWv5uFodc7AnMZdAiEAsgIwgGHJggPVv/pHvSnuiRjYTCnDza/UGHd9AZ5CQY0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.78.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8945182},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"b8ab743dd72af7fd57a10fd68c321d4c604b3a47","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.78.0_1788747289667_0.21750280328752636","host":"s3://npm-registry-packages-npm-production"}},"0.78.0-next.4bd3c8f":{"name":"turbine-orm","version":"0.78.0-next.4bd3c8f","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.78.0-next.4bd3c8f","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"10460bbe10e57cc6f62517195ab7dc3f690b70c4","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.78.0-next.4bd3c8f.tgz","fileCount":305,"integrity":"sha512-Gc1/ZCHoAiTdwemivKaFGy1o+TBcn0KOgiAAG1RcAwcYmc5fGqFXJAB7vLYdhWigF8pEn2GcRl++kSCal2qT8A==","signatures":[{"sig":"MEYCIQCeSW3P5kiWYi1TfgB1Ny0JG2s1CS7rYsINxxCGhnevDwIhAKeXMVWMsLzBzZ7w+hkG/jQw22IcMDTciyKZzGrzwDiN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.78.0-next.4bd3c8f","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8945195},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"4bd3c8fd056b724de0af04433101a6821948c158","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.78.0-next.4bd3c8f_1788750066708_0.5338702502300114","host":"s3://npm-registry-packages-npm-production"}},"0.78.0-next.33495bd":{"name":"turbine-orm","version":"0.78.0-next.33495bd","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.78.0-next.33495bd","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"10ae81b8b28d5e5a04ba9153251c2296432c4fba","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.78.0-next.33495bd.tgz","fileCount":305,"integrity":"sha512-DWQsRuR6e3VXeHq62c899p+kCRIhvQ7vm52GfZpHv0Ec/Hb4y48gOrLe2/faMhIWL2vZ0bisBgje88jcgcrrRg==","signatures":[{"sig":"MEUCIQD+kLBZAMI4K9oWB06GRXC0lpM/3v/QXMoMXEldYUCX0gIgTxfRsopHQ8rLD+fnVUWG9KRwJmJkVrc+aij9ca1HXGk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.78.0-next.33495bd","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8945195},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"33495bdd084447a8d632b70870885bfaad43e6d7","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.78.0-next.33495bd_1788801624559_0.5389355750275635","host":"s3://npm-registry-packages-npm-production"}},"0.78.0-next.3a41a82":{"name":"turbine-orm","version":"0.78.0-next.3a41a82","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.78.0-next.3a41a82","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"50e1a71cd4f553faa0b3d117639c172c8efd8759","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.78.0-next.3a41a82.tgz","fileCount":305,"integrity":"sha512-fGcWXaEkxRUXVtJcl/p9FGgXVgG3ancexE52py/2GUSL5LEetkZ8IkILieqpkH6bGQfyqkCdCgDg/iYY/36wmw==","signatures":[{"sig":"MEUCIQDs9chEC3T44tyRPiqSG+280R1Id2URTJXC3aAfU+uq4AIgayQ/KybcbszQxFafzIsDH4fBIxqjaTn3OwazA4MeLNw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.78.0-next.3a41a82","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8945195},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"3a41a823a937bbd6df9e59e0deaf01e43b49f68c","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.78.0-next.3a41a82_1788805139242_0.8545941386461855","host":"s3://npm-registry-packages-npm-production"}},"0.78.0-next.9e959ba":{"name":"turbine-orm","version":"0.78.0-next.9e959ba","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.78.0-next.9e959ba","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"e8afded00e886c0cc22985f748671cbf572a2529","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.78.0-next.9e959ba.tgz","fileCount":305,"integrity":"sha512-2GXiJA9Mr9/WB1vFu02CweUrezJBa5fnlYz6AoSDLKc0rkDkV6Gox82lyQ7pwSl89TeNrdtEbdyCLEAJqsMfqw==","signatures":[{"sig":"MEQCIFy3f3pAOKFdgJwt0WkzyfOxMcNi++lBjulhsIhoJfrFAiA2OrW+ZxezFyBR6EujdC9KK6JfjCY26BH8VkoJiTAXVQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.78.0-next.9e959ba","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8945195},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"9e959ba7c8e71e611e6eb3caab728524c9240cc2","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.78.0-next.9e959ba_1788806738191_0.8557285561405954","host":"s3://npm-registry-packages-npm-production"}},"0.78.0-next.b792a6a":{"name":"turbine-orm","version":"0.78.0-next.b792a6a","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.78.0-next.b792a6a","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"b8d98440074f7fd5b2050babd88d009aae0efc4f","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.78.0-next.b792a6a.tgz","fileCount":305,"integrity":"sha512-CriSxAJatwaW1Qng4vRlli9x+V2JtzO9FTYXjyezSr6ZJBpD6Z/ZdAMqyWJqECZ6HzS8otBcYCVrVHrOG7Ibfw==","signatures":[{"sig":"MEUCIQCa2UjAJGq5RJaPJsKW+QX8vb9UEZOH9rCUqI/vHNeRGAIgNBSLFDmzgol2umZSxz/YjyR9jNqL/Ih8Th8VTzwWygY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.78.0-next.b792a6a","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8956511},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"b792a6aebd188612f783a0c32eb78c0b074574be","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.78.0-next.b792a6a_1788808394686_0.14895822331504394","host":"s3://npm-registry-packages-npm-production"}},"0.79.0-next.c53fa34":{"name":"turbine-orm","version":"0.79.0-next.c53fa34","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.79.0-next.c53fa34","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"266ab90aa5819f344277ff1988c99c776687d586","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.79.0-next.c53fa34.tgz","fileCount":309,"integrity":"sha512-JS6oKmCHQElgfJtg0zEUEicsB71S3bVw1cSMYAHYggl15P1U5hqQJCK9PbOTaUnnk6Msdj0MzPCFzq14HUV/PQ==","signatures":[{"sig":"MEUCIQDquqmtKlqeX61gs+AJfMbia+9f9naZbSt66JXPJR9REgIgID4TTnsxsShnin3UMFPkjsXn8Mr1Lbia5sDTKbe1tW8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDt17v8JSz8DAxHnghUBQzEXoVi3hSp3o/cUcK4M29cbgIgIFUXpDVsbLWOUKlPc+kNOPWAEBgpMvyT5LSni0nSdQA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.79.0-next.c53fa34","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8996768},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"c53fa34942be0029c13c69f6500d3aaa27ef3696","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.79.0-next.c53fa34_1790229680492_0.6158148327640358","host":"s3://npm-registry-packages-npm-production"}},"0.79.0":{"name":"turbine-orm","version":"0.79.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.79.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"0e2456d05133e55edc4ba617a79bd6a21279238d","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.79.0.tgz","fileCount":309,"integrity":"sha512-4H/9lFGywpWRnlFuXLyWQ6z/2DcJEGfFlE7G9rrGvif937ABw1J5GB6MFzdgoQwPBBk8dmw+3dM6Wea5pSpXNw==","signatures":[{"sig":"MEUCIEs7CCCSIArUPKrNXmO6Y4bnJ9xlkPi3d8yca+CHD+UaAiEApGgVVFV/VbUp+1ZzwjRc6xfk3sHNdpzSYxGuNxxiGLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICx/VqDFl4dGeBt2e7D8g9jn+ro2KlLdfAwBMCi7SkI9AiEAwfxb1XnDLjsStbN8SopQEepU4e/jVaNff6wc+bs1W7g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.79.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8996755},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"c53fa34942be0029c13c69f6500d3aaa27ef3696","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","publint":"^0.3.16","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.79.0_1790230199049_0.9742301470324728","host":"s3://npm-registry-packages-npm-production"}},"0.79.1-next.e9dcb00":{"name":"turbine-orm","version":"0.79.1-next.e9dcb00","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.79.1-next.e9dcb00","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"cc75caac3cf382e361e3249f1db15eb302cd3531","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.79.1-next.e9dcb00.tgz","fileCount":313,"integrity":"sha512-YAzHUx15iSAaXA5OraT2FnMfA04ZTR+71e1DianjsKT/o+axsevhIhM8nqKoWhYmvsOz1u9BITX0fM7VctOqvw==","signatures":[{"sig":"MEYCIQCgHBgDPG5UkIE/2OMLA7JyZ0GiwCq8Ticm27+YUtZVYwIhAO0Qs4NB6clWOcG1ea34wXvOGu9nxWw0ylwEn3W+1ezg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIArOpg6CqGK4SyAPdEaBw/mSXMrxEiHADbXlPeTEXV3TAiA6OEIiS53bYua5Hz9tcJUOFVR+L8p3aJNPMHx7TJhkXQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.79.1-next.e9dcb00","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9008712},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"e9dcb008b8f0bc6b576625c0bfa662bd4549a716","imports":{"#pg":{"browser":"./dist/pg-edge.js","default":"pg","workerd":"pg","edge-light":"./dist/pg-edge.js"}},"scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && node scripts/finish-cjs-build.mjs","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","check:edge":"node scripts/check-edge-bundle.mjs","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","//check:edge":"The edge-runtime gate for turbine-orm/serverless: bundles dist/serverless.js (the ESM build, which is what edge bundlers resolve) with esbuild under the edge-light/worker/browser conditions and fails on any pg-family import, any Node builtin but node:async_hooks, or any other package. Every other gate here runs on Node, which is how a static `import pg from 'pg'` in a shared module broke every edge build while CI stayed green. A CONTROL bundle under Node conditions must reach pg first, or the scan refuses to pass. Reads dist/, so it runs after `npm run build`: in prepublishOnly, and in the build job of ci.yml and the test job of release.yml.","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run check:edge && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","//imports":"`#pg` is how the modules shared with the serverless entry reach node-postgres. It is `pg` itself everywhere except edge-light and browser, which get dist/pg-edge.js (see src/pg-edge.ts): those runtimes cannot bundle pg at all, and turbineHttp() never uses it. workerd is listed first so Cloudflare keeps the real driver (pg supports Workers). An imports target may be a bare package name, which is what keeps src/ runnable under tsx with no dist/ present. The CJS build (dist/cjs) is Node-only: scripts/finish-cjs-build.mjs rewrites its require(\"#pg\") to require(\"pg\"), because a require() resolves #imports against the NEAREST package.json (dist/cjs/package.json) and publint rejects a nested imports field. Edge bundlers resolve the import condition, i.e. the ESM files. `npm run check:edge` bundles the serverless entry for the edge conditions and fails on any pg or Node-builtin import.","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","esbuild":"^0.28.2","publint":"^0.3.16","@swc/core":"1.16.2","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.79.1-next.e9dcb00_1790272081336_0.9810735099010397","host":"s3://npm-registry-packages-npm-production"}},"0.79.1":{"name":"turbine-orm","version":"0.79.1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.79.1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"44480e001b4cd1d051a699b30abfb49d89b06374","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.79.1.tgz","fileCount":313,"integrity":"sha512-Nlto/Uikz8PqymoAD/SQVT+Qk0f0S87ppCq0SttbpJA+DIEqCab5h1VZhYdw3ZoqLXD9yzK6VekPLq6eol56+Q==","signatures":[{"sig":"MEUCIBZtl17AvZ3oSTekcHLDny8711aWiQw7Df65Palae8cvAiEAiag5cEcfPUCZO7wxNPBbcIwrrSPiUxWLtlwDEtQwqLc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDXFZqz1fHxT11EC8Pz1EcdlQ9lAxUvcMAWV74Nyi7CrAIhAKD1DL9NPKb2oD5YCfN/0cWa6vdfEn7PRdTz7cPZPnrx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.79.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9008699},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"e9dcb008b8f0bc6b576625c0bfa662bd4549a716","imports":{"#pg":{"browser":"./dist/pg-edge.js","default":"pg","workerd":"pg","edge-light":"./dist/pg-edge.js"}},"scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && node scripts/finish-cjs-build.mjs","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","check:edge":"node scripts/check-edge-bundle.mjs","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","//check:edge":"The edge-runtime gate for turbine-orm/serverless: bundles dist/serverless.js (the ESM build, which is what edge bundlers resolve) with esbuild under the edge-light/worker/browser conditions and fails on any pg-family import, any Node builtin but node:async_hooks, or any other package. Every other gate here runs on Node, which is how a static `import pg from 'pg'` in a shared module broke every edge build while CI stayed green. A CONTROL bundle under Node conditions must reach pg first, or the scan refuses to pass. Reads dist/, so it runs after `npm run build`: in prepublishOnly, and in the build job of ci.yml and the test job of release.yml.","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run check:edge && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","//imports":"`#pg` is how the modules shared with the serverless entry reach node-postgres. It is `pg` itself everywhere except edge-light and browser, which get dist/pg-edge.js (see src/pg-edge.ts): those runtimes cannot bundle pg at all, and turbineHttp() never uses it. workerd is listed first so Cloudflare keeps the real driver (pg supports Workers). An imports target may be a bare package name, which is what keeps src/ runnable under tsx with no dist/ present. The CJS build (dist/cjs) is Node-only: scripts/finish-cjs-build.mjs rewrites its require(\"#pg\") to require(\"pg\"), because a require() resolves #imports against the NEAREST package.json (dist/cjs/package.json) and publint rejects a nested imports field. Edge bundlers resolve the import condition, i.e. the ESM files. `npm run check:edge` bundles the serverless entry for the edge conditions and fails on any pg or Node-builtin import.","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","esbuild":"^0.28.2","publint":"^0.3.16","@swc/core":"1.16.2","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.79.1_1790272104964_0.8184568906919003","host":"s3://npm-registry-packages-npm-production"}},"0.79.1-next.a5c9de2":{"name":"turbine-orm","version":"0.79.1-next.a5c9de2","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.79.1-next.a5c9de2","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"eb27d828883a775ff9b0358a3ec44b3dc19120c2","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.79.1-next.a5c9de2.tgz","fileCount":313,"integrity":"sha512-wWe8/gw5ustbvuefIRJdvU98zYBLEuMjymg5e/KjzIEAYKYsBYdbnma3AEwNxSlNtRpOFzXiw546pDsAKyWnRw==","signatures":[{"sig":"MEUCIFHaD9/8x61HPkoiVJr55yrkFzpFlOJy57e+5CBtlq5dAiEAnhSfGydOanU/wThDg7IdOJwtxmnBcBkTLtuhuzkQMM8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCK2ilrPPvdqu1KefSTDEQCTZWE0KBYsqFTkev1og0VTQIhAJVsyUFbnYidsfJHbuwJSk6TGQqHFmUgrBC78bxaFPxP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.79.1-next.a5c9de2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9008712},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"a5c9de29c80225d6f06718c8004ef04d01795c55","imports":{"#pg":{"browser":"./dist/pg-edge.js","default":"pg","workerd":"pg","edge-light":"./dist/pg-edge.js"}},"scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && node scripts/finish-cjs-build.mjs","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","check:edge":"node scripts/check-edge-bundle.mjs","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","//check:edge":"The edge-runtime gate for turbine-orm/serverless: bundles dist/serverless.js (the ESM build, which is what edge bundlers resolve) with esbuild under the edge-light/worker/browser conditions and fails on any pg-family import, any Node builtin but node:async_hooks, or any other package. Every other gate here runs on Node, which is how a static `import pg from 'pg'` in a shared module broke every edge build while CI stayed green. A CONTROL bundle under Node conditions must reach pg first, or the scan refuses to pass. Reads dist/, so it runs after `npm run build`: in prepublishOnly, and in the build job of ci.yml and the test job of release.yml.","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run check:edge && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","//imports":"`#pg` is how the modules shared with the serverless entry reach node-postgres. It is `pg` itself everywhere except edge-light and browser, which get dist/pg-edge.js (see src/pg-edge.ts): those runtimes cannot bundle pg at all, and turbineHttp() never uses it. workerd is listed first so Cloudflare keeps the real driver (pg supports Workers). An imports target may be a bare package name, which is what keeps src/ runnable under tsx with no dist/ present. The CJS build (dist/cjs) is Node-only: scripts/finish-cjs-build.mjs rewrites its require(\"#pg\") to require(\"pg\"), because a require() resolves #imports against the NEAREST package.json (dist/cjs/package.json) and publint rejects a nested imports field. Edge bundlers resolve the import condition, i.e. the ESM files. `npm run check:edge` bundles the serverless entry for the edge conditions and fails on any pg or Node-builtin import.","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.13.1"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","esbuild":"^0.28.2","publint":"^0.3.16","@swc/core":"1.16.2","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.79.1-next.a5c9de2_1790477755355_0.34523054781375184","host":"s3://npm-registry-packages-npm-production"}},"0.80.0":{"name":"turbine-orm","version":"0.80.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.80.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"86f2ec3ef2e4a80ce25be2b99118687b9390529d","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.80.0.tgz","fileCount":321,"integrity":"sha512-9psDn3lGUd4lUeYj0kIQLpOigw3ysc1DTnbdiBQclHTG87IPoMb3P4f02I+0vwuDgzSQAKydvlW0H/iwq9uPlg==","signatures":[{"sig":"MEUCIQC1XYHMNZaDc280JxrsFl8PF2zzwGgO0n6Ua1THjm5ugAIgFHRKUdUIPceMX4ml1Uhbe4sLIoWWlP5ienr0Qd0dd5U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHkKawA9osAKH3MYZPGvMCYio7EWfzsKP/Jghpsb2AmTAiEAofHeBB0yAwzajhevNfUfOpSyTstYFXZWIPnYTnt3QuY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.80.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9149605},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"cbb21b1dc0fa497654264a3fb823b2a93649b590","imports":{"#pg":{"browser":"./dist/pg-edge.js","default":"pg","workerd":"pg","edge-light":"./dist/pg-edge.js"}},"scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && node scripts/finish-cjs-build.mjs","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","check:edge":"node scripts/check-edge-bundle.mjs","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","//check:edge":"The edge-runtime gate for turbine-orm/serverless: bundles dist/serverless.js (the ESM build, which is what edge bundlers resolve) with esbuild under the edge-light/worker/browser conditions and fails on any pg-family import, any Node builtin but node:async_hooks, or any other package. Every other gate here runs on Node, which is how a static `import pg from 'pg'` in a shared module broke every edge build while CI stayed green. A CONTROL bundle under Node conditions must reach pg first, or the scan refuses to pass. Reads dist/, so it runs after `npm run build`: in prepublishOnly, and in the build job of ci.yml and the test job of release.yml.","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","check:pg-floor":"node scripts/check-pg-floor.mjs","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run check:edge && npm run check:pg-floor && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","//check:pg-floor":"Installs the packed tarball next to EXACTLY the floor of dependencies.pg and imports every published entry point under both import and require. CI and dev machines only ever install the newest pg in range, so the floor is otherwise never exercised: a ^8.13.1 range shipped code that read pg.utils at load time, which pg first exports in 8.15.0, and 6 of the 8 entry points failed to import on 8.13 and 8.14. Packs dist/ itself when given no tarball, so it runs after `npm run build`. Called from prepublishOnly and from the pack-smoke job of both ci.yml and release.yml.","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","//imports":"`#pg` is how the modules shared with the serverless entry reach node-postgres. It is `pg` itself everywhere except edge-light and browser, which get dist/pg-edge.js (see src/pg-edge.ts): those runtimes cannot bundle pg at all, and turbineHttp() never uses it. workerd is listed first so Cloudflare keeps the real driver (pg supports Workers). An imports target may be a bare package name, which is what keeps src/ runnable under tsx with no dist/ present. The CJS build (dist/cjs) is Node-only: scripts/finish-cjs-build.mjs rewrites its require(\"#pg\") to require(\"pg\"), because a require() resolves #imports against the NEAREST package.json (dist/cjs/package.json) and publint rejects a nested imports field. Edge bundlers resolve the import condition, i.e. the ESM files. `npm run check:edge` bundles the serverless entry for the edge conditions and fails on any pg or Node-builtin import.","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.15.0"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","esbuild":"^0.28.2","publint":"^0.3.16","@swc/core":"1.16.2","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.80.0_1790557532083_0.5073450683383594","host":"s3://npm-registry-packages-npm-production"}},"0.80.0-next.cbb21b1":{"name":"turbine-orm","version":"0.80.0-next.cbb21b1","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.80.0-next.cbb21b1","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"645ad24845c16d6d7d4892aed5550c5e90299038","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.80.0-next.cbb21b1.tgz","fileCount":321,"integrity":"sha512-OsTrp7djruMv5OaN5VbTi5DgG2QE69c6GzCPdfzO3F1I6K1/TCBLULnSnUvXAVULmFGx6Q0F5ZTXzZs+ZMIIjg==","signatures":[{"sig":"MEUCIAufJsEhKUYsJa7w31tApUZ0ST25aFE4WIYNvl84HvtpAiEAgO4siG/CrgCGb4JNx9zXGGhhoVX22xkk2ITXHGa0nOU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFNCVgobdUJ+Lxw9YZGaVBXD7bjIFhSkaduZBcdvizysAiEA6k+Ar2lsYiq8wbCVpWUkcR6M2SvZHNIsY3L4v0m5NDM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.80.0-next.cbb21b1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9149618},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"cbb21b1dc0fa497654264a3fb823b2a93649b590","imports":{"#pg":{"browser":"./dist/pg-edge.js","default":"pg","workerd":"pg","edge-light":"./dist/pg-edge.js"}},"scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && node scripts/finish-cjs-build.mjs","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","check:edge":"node scripts/check-edge-bundle.mjs","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","//check:edge":"The edge-runtime gate for turbine-orm/serverless: bundles dist/serverless.js (the ESM build, which is what edge bundlers resolve) with esbuild under the edge-light/worker/browser conditions and fails on any pg-family import, any Node builtin but node:async_hooks, or any other package. Every other gate here runs on Node, which is how a static `import pg from 'pg'` in a shared module broke every edge build while CI stayed green. A CONTROL bundle under Node conditions must reach pg first, or the scan refuses to pass. Reads dist/, so it runs after `npm run build`: in prepublishOnly, and in the build job of ci.yml and the test job of release.yml.","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","check:pg-floor":"node scripts/check-pg-floor.mjs","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run check:edge && npm run check:pg-floor && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","//check:pg-floor":"Installs the packed tarball next to EXACTLY the floor of dependencies.pg and imports every published entry point under both import and require. CI and dev machines only ever install the newest pg in range, so the floor is otherwise never exercised: a ^8.13.1 range shipped code that read pg.utils at load time, which pg first exports in 8.15.0, and 6 of the 8 entry points failed to import on 8.13 and 8.14. Packs dist/ itself when given no tarball, so it runs after `npm run build`. Called from prepublishOnly and from the pack-smoke job of both ci.yml and release.yml.","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","//imports":"`#pg` is how the modules shared with the serverless entry reach node-postgres. It is `pg` itself everywhere except edge-light and browser, which get dist/pg-edge.js (see src/pg-edge.ts): those runtimes cannot bundle pg at all, and turbineHttp() never uses it. workerd is listed first so Cloudflare keeps the real driver (pg supports Workers). An imports target may be a bare package name, which is what keeps src/ runnable under tsx with no dist/ present. The CJS build (dist/cjs) is Node-only: scripts/finish-cjs-build.mjs rewrites its require(\"#pg\") to require(\"pg\"), because a require() resolves #imports against the NEAREST package.json (dist/cjs/package.json) and publint rejects a nested imports field. Edge bundlers resolve the import condition, i.e. the ESM files. `npm run check:edge` bundles the serverless entry for the edge conditions and fails on any pg or Node-builtin import.","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.15.0"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^11.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","esbuild":"^0.28.2","publint":"^0.3.16","@swc/core":"1.16.2","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.80.0-next.cbb21b1_1790557614960_0.37030413792777295","host":"s3://npm-registry-packages-npm-production"}},"0.81.0":{"name":"turbine-orm","version":"0.81.0","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","_id":"turbine-orm@0.81.0","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"homepage":"https://turbineorm.dev","bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"bin":{"turbine":"dist/cli/index.js"},"dist":{"shasum":"69ae899d8584dd987797155cfa65d51e6d1ec008","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.81.0.tgz","fileCount":321,"integrity":"sha512-1D7mlOsAooTWp2wCbaO0VOJlk4B4czIZWYzJ4ySH0q81MBMannKwGM1FU61ZCJBxWdpVWuV5nIbZ/d6+tQpNBA==","signatures":[{"sig":"MEYCIQCi72Y9tpXph7bcWu88CeL6HCBAfCHl37rVlRdJA9JvLgIhAJnRh3nj17yCwhQ3jAMyhRmG/1HBrXX2XDb6PfnN+TAd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCfsAX058LWd0EQmkbDrKM4tlXxIL2UrMcYvt7N/kxi3gIhAOSFZTXYXUbnQ3NjE8b1kikH4KJIzs2r6DGlRERXltbg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.81.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9169323},"main":"./dist/cjs/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"573e171f9960e38001140afd56731d10d66dc0c7","imports":{"#pg":{"browser":"./dist/pg-edge.js","default":"pg","workerd":"pg","edge-light":"./dist/pg-edge.js"}},"scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && node scripts/finish-cjs-build.mjs","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","check:edge":"node scripts/check-edge-bundle.mjs","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","//check:edge":"The edge-runtime gate for turbine-orm/serverless: bundles dist/serverless.js (the ESM build, which is what edge bundlers resolve) with esbuild under the edge-light/worker/browser conditions and fails on any pg-family import, any Node builtin but node:async_hooks, or any other package. Every other gate here runs on Node, which is how a static `import pg from 'pg'` in a shared module broke every edge build while CI stayed green. A CONTROL bundle under Node conditions must reach pg first, or the scan refuses to pass. Reads dist/, so it runs after `npm run build`: in prepublishOnly, and in the build job of ci.yml and the test job of release.yml.","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","check:pg-floor":"node scripts/check-pg-floor.mjs","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run check:edge && npm run check:pg-floor && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","//check:pg-floor":"Installs the packed tarball next to EXACTLY the floor of dependencies.pg and imports every published entry point under both import and require. CI and dev machines only ever install the newest pg in range, so the floor is otherwise never exercised: a ^8.13.1 range shipped code that read pg.utils at load time, which pg first exports in 8.15.0, and 6 of the 8 entry points failed to import on 8.13 and 8.14. Packs dist/ itself when given no tarball, so it runs after `npm run build`. Called from prepublishOnly and from the pack-smoke job of both ci.yml and release.yml.","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","//imports":"`#pg` is how the modules shared with the serverless entry reach node-postgres. It is `pg` itself everywhere except edge-light and browser, which get dist/pg-edge.js (see src/pg-edge.ts): those runtimes cannot bundle pg at all, and turbineHttp() never uses it. workerd is listed first so Cloudflare keeps the real driver (pg supports Workers). An imports target may be a bare package name, which is what keeps src/ runnable under tsx with no dist/ present. The CJS build (dist/cjs) is Node-only: scripts/finish-cjs-build.mjs rewrites its require(\"#pg\") to require(\"pg\"), because a require() resolves #imports against the NEAREST package.json (dist/cjs/package.json) and publint rejects a nested imports field. Edge bundlers resolve the import condition, i.e. the ESM files. `npm run check:edge` bundles the serverless entry for the edge conditions and fails on any pg or Node-builtin import.","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.15.0"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","esbuild":"^0.28.2","publint":"^0.3.16","@swc/core":"1.16.2","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/turbine-orm_0.81.0_1790566364428_0.49890121729718495","host":"s3://npm-registry-packages-npm-production"}},"0.81.0-next.573e171":{"_id":"turbine-orm@0.81.0-next.573e171","bin":{"turbine":"dist/cli/index.js"},"bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"dist":{"shasum":"0be6ff368778ce9651fc4c3f0213915c647be3e0","tarball":"https://registry.npmjs.org/turbine-orm/-/turbine-orm-0.81.0-next.573e171.tgz","fileCount":321,"integrity":"sha512-WY2BHqZQ5XvXHSgjghN5cLVjk4UhbRVf3B/jDzzo+Zwdb9n1jQ8zOeZ7JY98Z/bM1FUk7fjoJ3BUTDkD/ngYlQ==","signatures":[{"sig":"MEYCIQDcG+uOJTjzXhMN23ajKuEB2P/n/YxA3SfD9wz3UvmPMgIhALsNV5C830WHE1qbkkC2dVdQJv/ClPvMBjQc/V42n1+z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDputbCsAm5FxAtPJ6qkTFvFwniiLL8h0HpUaAhDDMagAIhAIFUeabJWlKARAXpP7tFPpt4aUDBKIef/wceMY5ScRjl"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/turbine-orm@0.81.0-next.573e171","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":9169336},"main":"./dist/cjs/index.js","name":"turbine-orm","type":"module","types":"./dist/index.d.ts","author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./cli":{"import":{"types":"./dist/cli/config.d.ts","default":"./dist/cli/config.js"},"require":{"types":"./dist/cjs/cli/config.d.ts","default":"./dist/cjs/cli/config.js"}},"./mssql":{"import":{"types":"./dist/mssql.d.ts","default":"./dist/mssql.js"},"require":{"types":"./dist/cjs/mssql.d.ts","default":"./dist/cjs/mssql.js"}},"./mysql":{"import":{"types":"./dist/mysql.d.ts","default":"./dist/mysql.js"},"require":{"types":"./dist/cjs/mysql.d.ts","default":"./dist/cjs/mysql.js"}},"./powdb":{"import":{"types":"./dist/powdb.d.ts","default":"./dist/powdb.js"},"require":{"types":"./dist/cjs/powdb.d.ts","default":"./dist/cjs/powdb.js"}},"./sqlite":{"import":{"types":"./dist/sqlite.d.ts","default":"./dist/sqlite.js"},"require":{"types":"./dist/cjs/sqlite.d.ts","default":"./dist/cjs/sqlite.js"}},"./adapters":{"import":{"types":"./dist/adapters/index.d.ts","default":"./dist/adapters/index.js"},"require":{"types":"./dist/cjs/adapters/index.d.ts","default":"./dist/cjs/adapters/index.js"}},"./serverless":{"import":{"types":"./dist/serverless.d.ts","default":"./dist/serverless.js"},"require":{"types":"./dist/cjs/serverless.d.ts","default":"./dist/cjs/serverless.js"}},"./prisma-compat":{"import":{"types":"./dist/prisma-compat.d.ts","default":"./dist/prisma-compat.js"},"require":{"types":"./dist/cjs/prisma-compat.d.ts","default":"./dist/cjs/prisma-compat.js"}}},"gitHead":"573e171f9960e38001140afd56731d10d66dc0c7","imports":{"#pg":{"browser":"./dist/pg-edge.js","default":"pg","workerd":"pg","edge-light":"./dist/pg-edge.js"}},"license":"MIT","scripts":{"dev":"tsc --watch","lint":"biome check --error-on-warnings src/","size":"size-limit","test":"tsx --test --test-concurrency=1 src/test/*.test.ts","build":"rm -rf dist && tsc && tsc --project tsconfig.cjs.json && node scripts/finish-cjs-build.mjs","//lint":"`--error-on-warnings` is load-bearing, not cosmetic. Biome exits 0 on a warning, so `npm run lint` passed while reporting an unused import, and both the lint CI job and prepublishOnly read only the exit code. Every rule this repo runs is one it means, so a warning nobody has to act on is a rule that should not be enabled.","format":"biome format --write src/","status":"tsx src/cli/index.ts status","db:seed":"psql $DATABASE_URL -v ON_ERROR_STOP=1 -f src/test/fixtures/seed.sql","dogfood":"tsx examples/dogfood.ts","prepack":"node scripts/strip-prepare.mjs","prepare":"node scripts/prepare.mjs","pretest":"npm run gen:studio","db:reset":"psql $DATABASE_URL -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' && npm run db:seed","generate":"tsx src/cli/index.ts generate","lint:fix":"biome check --write src/","postpack":"node scripts/restore-prepare.mjs","prebuild":"npm run gen:studio","site:dev":"cd site && npm run dev","test:unit":"DATABASE_URL= tsx --test src/test/*.test.ts","typecheck":"tsc --noEmit --project tsconfig.test.json","check:edge":"node scripts/check-edge-bundle.mjs","gen:studio":"node scripts/build-studio-ui.mjs","site:build":"cd site && npm run build","size:check":"size-limit","test:watch":"tsx --watch --test src/test/*.test.ts","site:deploy":"cd site && vercel --prod","//check:edge":"The edge-runtime gate for turbine-orm/serverless: bundles dist/serverless.js (the ESM build, which is what edge bundlers resolve) with esbuild under the edge-light/worker/browser conditions and fails on any pg-family import, any Node builtin but node:async_hooks, or any other package. Every other gate here runs on Node, which is how a static `import pg from 'pg'` in a shared module broke every edge build while CI stayed green. A CONTROL bundle under Node conditions must reach pg first, or the scan refuses to pass. Reads dist/, so it runs after `npm run build`: in prepublishOnly, and in the build job of ci.yml and the test job of release.yml.","check:cycles":"node scripts/check-import-cycles.mjs","pretest:unit":"npm run gen:studio","pretypecheck":"npm run gen:studio","check:package":"publint --strict && attw --pack . --profile node16","test:coverage":"rm -rf coverage/tmp && mkdir -p coverage/tmp && NODE_V8_COVERAGE=coverage/tmp tsx --test --test-concurrency=1 src/test/*.test.ts && node scripts/coverage-report.mjs","//coverage:cli":"The CLI coverage gate, split into ONE collection run plus a per-file threshold check for every file in it, and an aggregate. c8 enforces a single threshold set per invocation and its --per-file applies the SAME numbers to every file, neither of which can express 'destructive.ts holds 100 while migrate.ts holds 70'. An aggregate-only floor lets the least-covered file spend the whole slack the best-covered file earned: at the measured 3623/2951 lines, migrate.ts could fall from 70.3% to 66.6% with the aggregate still green. So each file gets its OWN floor, checked by re-reporting the coverage already on disk (c8 report re-reads ./coverage/tmp, so this costs no extra test run). The aggregate check is kept as well: it catches all three sagging together inside their individual margins. Per-file gates run FIRST because their failure names the file. DATABASE_URL is neutralized on the collection run: these test files include live migration tests that create and drop tables, and this script runs from prepublishOnly.","check:pg-floor":"node scripts/check-pg-floor.mjs","prepublishOnly":"npm run build && npm run typecheck && npm run lint && npm run test:unit && npm run test:coverage:cli && npm run check:error-codes && npm run check:error-prefix && npm run check:changelog && npm run check:cycles && npm run check:skip-gates && npm run check:private-terms && npm run check:package && npm run check:package-types && npm run check:edge && npm run check:pg-floor && npm run size && npm run check:release-tests","//test:coverage":"Collection and reporting are SEPARATE, and the report is not c8's. c8 merges every process's V8 coverage into one ProcessCov before converting to istanbul, and that merge is not monotonic on a run this size: measured on this suite, query/relations.ts read 3043 covered lines at 240 process files and 1333 at 359, and a 448-test SUBSET read 91.88% where the full 5,819-test superset read 41.78%. scripts/coverage-report.mjs keeps every other c8 behaviour (same .c8rc.json, same reporters, same checkCoverages gate) and only moves the merge to the istanbul level, where it is additive and cannot go backwards. Collection is a bare NODE_V8_COVERAGE, which is exactly what the c8 wrapper set; dropping the wrapper also drops the broken merge from the critical path instead of running it and discarding the result.","check:changelog":"node scripts/check-changelog-headings.mjs","//check:pg-floor":"Installs the packed tarball next to EXACTLY the floor of dependencies.pg and imports every published entry point under both import and require. CI and dev machines only ever install the newest pg in range, so the floor is otherwise never exercised: a ^8.13.1 range shipped code that read pg.utils at load time, which pg first exports in 8.15.0, and 6 of the 8 entry points failed to import on 8.13 and 8.14. Packs dist/ itself when given no tarball, so it runs after `npm run build`. Called from prepublishOnly and from the pack-smoke job of both ci.yml and release.yml.","check:skip-gates":"tsx scripts/check-skip-gate-reasons.ts","coverage:codegen":"node scripts/coverage-report.mjs --config .c8rc.codegen.json","pretest:coverage":"npm run gen:studio","check:error-codes":"tsx scripts/check-error-codes.ts","coverage:cli:gate":"c8 report --all --exclude 'src/test/**' --reporter text --check-coverage","test:coverage:cli":"npm run check:coverage-sync && npm run coverage:cli:collect && npm run coverage:cli:gate:destructive && npm run coverage:cli:gate:sql-statements && npm run coverage:cli:gate:pii-guard && npm run coverage:cli:gate:error-catalog && npm run coverage:cli:gate:mcp && npm run coverage:cli:gate:compile-query && npm run coverage:cli:gate:studio && npm run coverage:cli:gate:migrate && npm run coverage:cli:gate:index && npm run coverage:cli:gate:aggregate","//check:skip-gates":"Guards the TURBINE_REQUIRE_ENGINE coupling, which is a regex against a human-readable skipGate reason string: rewording a reason silently disarms the guard and the engine job it protects goes green over a suite that never ran. Fails on a reason no engine pattern claims and no allowlist entry excuses, on a token no CI job sets, and on a workflow token that is not a known engine. Since 0.76.0 it also fails on a test file that calls turbineSqlite() without first probing that node:sqlite exists, because that precondition is a Node VERSION rather than an env var: it holds on every dev machine and on three of the four unit-matrix legs, so a missing gate is invisible until CI, which is where it was found, after publish.","//coverage:codegen":"The ratchet for the two code-generation modules, which .c8rc.json excludes from the main gate and which therefore sat in no gate at all. introspect.ts carries a stated correctness invariant (determinism) and generate.ts writes executable TypeScript from database-controlled identifiers, which is the highest-consequence untested code in the package. Both were excluded from all measurement. Same ratchet argument. Adds NO test execution: it re-reports the coverage `npm run test:coverage` already wrote to coverage/tmp, under .c8rc.codegen.json, so it must run AFTER that command. It goes through scripts/coverage-report.mjs rather than `c8 report` because the main collection is 418 process files, past the point where c8's own merge stops being monotonic (see //merge-bug in .c8rc.json). Floors, thresholds and the per-file reasoning live in .c8rc.codegen.json.","check:error-prefix":"node scripts/check-error-prefix.mjs","check:coverage-sync":"node scripts/check-coverage-gate-sync.mjs","check:package-types":"node scripts/check-no-pg-types.mjs","check:private-terms":"node scripts/check-private-terms.mjs --all","check:release-tests":"node scripts/check-release-tests.mjs","//check:error-prefix":"No message reaching a TurbineError may hand-write a `[turbine] ` prefix. formatErrorMessage prepends `[TURBINE_EXXX] ` unless the message already opens with that exact tag, and a hand-written `[turbine] ` never matches one, so the two stacked on roughly 355 of the package's throw sites. A prefix rule looks unnecessary because formatErrorMessage guarantees the [CODE] tag: true, and not the failure mode, which is the INTERACTION between the automatic tag and a manual one. Diagnostics that no code tag ever touches (console calls, stream writes, Studio HTTP bodies) keep the prefix and are named in the script's DIAGNOSTIC_SINKS.","coverage:cli:collect":"DATABASE_URL= c8 --all --check-coverage=false --reporter text --exclude 'src/test/**' --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --include src/cli/index.ts tsx --test src/test/studio-write.test.ts src/test/pii-guard-symmetry.test.ts src/test/studio-demo.test.ts src/test/studio.test.ts src/test/studio-security.test.ts src/test/migrate.test.ts src/test/migrate-deploy.test.ts src/test/migrate-smoke-fixes.test.ts src/test/tracking-table-race.test.ts src/test/destructive-dynamic-assembly.test.ts src/test/destructive-migrations.test.ts src/test/backfill-recipe.test.ts src/test/cli.test.ts src/test/cli-diff-migration.test.ts src/test/cli-flags.test.ts src/test/cli-first-run.test.ts src/test/mcp.test.ts src/test/mcp-relations.test.ts src/test/mcp-pii.test.ts src/test/mcp-pii-round2.test.ts src/test/mcp-agent-tools.test.ts src/test/mcp-compile-query.test.ts src/test/mcp-perimeter-bounds.test.ts src/test/destructive-obfuscation.test.ts src/test/cli-init-schema.test.ts src/test/cli-introspect-options.test.ts src/test/mcp-transport-bounds.test.ts src/test/seed-schema.test.ts src/test/migrate-preview-and-report.test.ts src/test/destructive-quoting-forms.test.ts","pretest:coverage:cli":"npm run gen:studio","//check:coverage-sync":"The three-way coupling between a coverage collection and the floors that hold it. A file can be added to coverage:cli:collect and then be held by NOTHING, which is not a missing gate but a slower lane enforcing a floor of zero, and it has happened twice (mcp.ts and error-catalog.ts each spent a release that way). The invariant is that every file in the collection is named by a per-file gate OR by the aggregate, NOT that the collection and the aggregate are equal: cli/index.ts is deliberately outside the aggregate, see //coverage:cli:gate:aggregate. It also refuses a gate that names a file nobody collects, which measures nothing and passes, and it fails closed on an empty parse. It runs FIRST in test:coverage:cli, ahead of the collection, because it needs no coverage data and its failure names the missing wiring instead of a number.","//check:package-types":"The @types/pg tripwire, and the permanent guard on the v0.28.1 regression: no reference to the pg module family may reach a published .d.ts, or a types-only package becomes a hard requirement for every consumer compiling under strict. It lived as an inline grep in ONE ci.yml job, which left the gate proving the change safe off the publish path entirely (a tag push and a local `npm publish` both reached npm without asking). The logic is scripts/check-no-pg-types.mjs now and this script is its single entry point, called by prepublishOnly and by the `consumer-types` job in BOTH ci.yml and release.yml. Reads dist/, so it must run after `npm run build`.","//check:private-terms":"The `--all` mode of the pre-commit private-material guard, over every TRACKED file rather than the staged diff. The hook is advisory (`git commit --no-verify` skips it) and nothing downstream re-asked, so this runs in CI's lint job. `.private-terms` is gitignored, so CI enforces the builtin provenance patterns only. It sits on BOTH publish paths as well: prepublishOnly for a local `npm publish`, and release.yml's test job for a tag push. A leak guard reachable only from the one workflow that does not gate publishing had a single bypassable enforcement point, which for a public repo is the same as none. Scope note, `--all` enumerates with `git ls-files`, so an UNTRACKED working-tree file is outside the scan by construction; that is the right boundary here, because package.json `files` publishes dist/, skills/, LICENSE and README.md, all of which are tracked or generated from tracked sources.","coverage:cli:gate:mcp":"npm run coverage:cli:gate -- --include src/cli/mcp.ts --lines 93 --statements 93 --branches 81 --functions 91","//coverage:cli:collect":"--check-coverage=false is load-bearing, not tidying. c8 reads .c8rc.json for defaults, so this COLLECTION step was silently enforcing the MAIN gate's global thresholds against a src/cli-only file set. That is a gate nobody wrote and nobody wanted, and it went unnoticed only because the main floor was low enough (75) for the CLI aggregate (89.29) to clear it by accident. When the main floors were re-baselined to 93/89/78 (see //merge-bug in .c8rc.json) it started failing here, several steps before the per-file gates that are supposed to decide. Thresholds for these files belong to the coverage:cli:gate:* scripts, which pass their own explicitly.","//coverage:cli:gate:mcp":"The MCP server is a network-facing read-only surface with its own PII perimeter (sample_rows never fetches a hidden column, explain_query refuses a predicate on one, sanitizeIndex strips literals out of an index definition), so it belongs in this gate for the same reason cli/studio.ts does. It was added to coverage:cli:collect with no gate of its own and was absent from the aggregate's --include list, which meant it was COLLECTED and enforced by nothing: a slower lane holding a floor of zero. Floors measured 2026-08-14 at 93.47 lines / 93.47 statements / 81.77 branches / 92.30 functions.","coverage:cli:gate:index":"npm run coverage:cli:gate -- --include src/cli/index.ts --lines 30 --statements 30 --branches 73 --functions 18","coverage:cli:gate:studio":"npm run coverage:cli:gate -- --include src/cli/studio.ts --lines 82 --statements 82 --branches 81 --functions 86","//coverage:cli:gate:index":"cli/index.ts is the largest file in the repo (5,945 lines) and was in no coverage gate at all. The .c8rc.json //cli-gate argument for the other CLI files applies verbatim: coverage could fall to zero without anything noticing. The floors are LOW on purpose and are not a target: this file is argument parsing and command dispatch whose `process.exit` paths dominate any figure set over it, and the point of the gate is that the number cannot fall silently, not that it is high. MEASURED 2026-08-23 by `npm run coverage:cli:collect` (no database), read from the json-summary reporter rather than the text table, per the //cli-gate-measurements note: 32.62 lines / 32.62 statements / 75.62 branches / 20 functions, identical in isolation and in the nine-file collection. Floors sit about two points under. Raise as coverage improves; never lower one without recording why. It is deliberately NOT in coverage:cli:gate:aggregate, see that key's note.","coverage:cli:gate:migrate":"npm run coverage:cli:gate -- --include src/cli/migrate.ts --lines 69 --statements 69 --branches 91 --functions 73","coverage:cli:gate:aggregate":"npm run coverage:cli:gate -- --include src/cli/studio.ts --include src/cli/migrate.ts --include src/cli/destructive.ts --include src/cli/sql-statements.ts --include src/cli/pii-predicate-guard.ts --include src/cli/mcp.ts --include src/cli/compile-query.ts --include src/cli/error-catalog.ts --lines 89 --statements 89 --branches 86 --functions 89","coverage:cli:gate:pii-guard":"npm run coverage:cli:gate -- --include src/cli/pii-predicate-guard.ts --lines 97 --statements 97 --branches 88 --functions 100","//coverage:cli:gate:aggregate":"Re-baselined 2026-08-15 when compile-query.ts joined the --include list: measured 89.28 lines / 89.28 statements / 86.77 branches / 89.18 functions, up from a 87/87/85/86 floor set over seven files (itself up from 78/78/84/82 over five). Raise as coverage improves, never lower one without recording why. WHY cli/index.ts IS NOT HERE, although it is in coverage:cli:collect and has its own per-file gate: it is 5,945 lines at 32.62%, so folding it in drops this aggregate from a measured 89.63 lines / 87.15 branches / 89.18 functions to 66.32 / 85.76 / 63.38, which would mean LOWERING two floors by about 25 points. That is the rule above broken, and it also empties the aggregate of its purpose. This check exists only as the backstop that catches every file sagging together inside its individual margin; with one 5,945-line file at 32% dominating the denominator, the other eight could collectively shed well over a thousand covered lines with this still green. The invariant the collection actually needs is that every collected file is held by SOME floor, and index.ts is held by coverage:cli:gate:index. That is what check:coverage-sync asserts.","coverage:cli:gate:destructive":"npm run coverage:cli:gate -- --include src/cli/destructive.ts --lines 98 --statements 98 --branches 84 --functions 98","coverage:cli:gate:compile-query":"npm run coverage:cli:gate -- --include src/cli/compile-query.ts --lines 100 --statements 100 --branches 94 --functions 100","coverage:cli:gate:error-catalog":"npm run coverage:cli:gate -- --include src/cli/error-catalog.ts --lines 100 --statements 100 --branches 90 --functions 100","coverage:cli:gate:sql-statements":"npm run coverage:cli:gate -- --include src/cli/sql-statements.ts --lines 100 --statements 100 --branches 98 --functions 100","//coverage:cli:gate:compile-query":"compile_query's core: the CLOSED set of read operations an agent may compile, the sealed pool that makes 'never executes' structural rather than promised, and the aggregate-arg name harvest the PII refusal runs on. Every one of those is a refusal boundary, which is the same reason destructive.ts and pii-predicate-guard.ts carry their own floors. It gets a gate the SAME commit it joins coverage:cli:collect and the aggregate --include list, because a file in the collection with neither is collected and enforced by nothing, which is how mcp.ts and error-catalog.ts spent a release at a floor of zero. Floors measured 2026-08-15 at 100 lines / 100 statements / 94.21 branches / 100 functions."},"version":"0.81.0-next.573e171","_npmUser":{"name":"kirby_zvndev","email":"kirby@zvndev.com"},"homepage":"https://turbineorm.dev","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"//exports":"Each subpath declares its types PER CONDITION. A single shared top-level \"types\" resolves to the ESM declarations for `require` too, which is TS1479 (\"is an ES module ... cannot be require()d\") for any CJS consumer on moduleResolution node16/nodenext. The require condition points at dist/cjs, which ships its own {\"type\":\"commonjs\"} package.json, so those declarations are CJS declarations. Gated in CI by publint + @arethetypeswrong/cli + a real .cts consumer typecheck (see the package-types job in ci.yml).","//imports":"`#pg` is how the modules shared with the serverless entry reach node-postgres. It is `pg` itself everywhere except edge-light and browser, which get dist/pg-edge.js (see src/pg-edge.ts): those runtimes cannot bundle pg at all, and turbineHttp() never uses it. workerd is listed first so Cloudflare keeps the real driver (pg supports Workers). An imports target may be a bare package name, which is what keeps src/ runnable under tsx with no dist/ present. The CJS build (dist/cjs) is Node-only: scripts/finish-cjs-build.mjs rewrites its require(\"#pg\") to require(\"pg\"), because a require() resolves #imports against the NEAREST package.json (dist/cjs/package.json) and publint rejects a nested imports field. Edge bundlers resolve the import condition, i.e. the ESM files. `npm run check:edge` bundles the serverless entry for the edge conditions and fails on any pg or Node-builtin import.","repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"_npmVersion":"10.9.8","description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","directories":{},"lint-staged":{"*.ts":["biome check --error-on-warnings --no-errors-on-unmatched"]},"maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"sideEffects":false,"_nodeVersion":"22.23.2","dependencies":{"pg":"^8.15.0"},"//dependencies":"EXACTLY ONE runtime dependency, `pg`. `@types/pg` sat here until 0.70.0 because the published declarations named `pg.Pool` / `pg.PoolClient` / `pg.QueryResult`, which makes a types-only package a hard requirement for every consumer compiling under strict (the v0.28.1 regression). The declaration surface is now pg-free (see src/pg-types.ts) and the `consumer-types` CI job proves it against the real tarball, so the types package is a devDependency. The order is one-way: clear the surface FIRST, then move the dependency.","_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"c8":"^12.0.0","tsx":"^4.19.0","husky":"^9.1.7","mssql":"^12.7.0","mysql2":"^3.22.5","esbuild":"^0.28.2","publint":"^0.3.16","@swc/core":"1.16.2","@types/pg":"^8.11.11","size-limit":"^12.1.0","typescript":"^6.0.3","@types/node":"^26.1.0","lint-staged":"^17.0.8","@biomejs/biome":"^2.4.10","@size-limit/file":"^12.1.0","@size-limit/esbuild":"^12.1.0","@zvndev/powdb-client":"^0.20.0","@arethetypeswrong/cli":"^0.18.2","@zvndev/powdb-embedded":"^0.20.0"},"//prepublishOnly":"The gate for a MANUAL LOCAL `npm publish`, which is the normal release flow here, so it is the ONLY gate on that path (release.yml runs on a pushed tag, and a local publish never triggers it). `check:package` joined it 2026-07-28: publint --strict + attw --pack, the two checks that catch a broken exports map or CJS declarations that resolve to ESM, which is a class of bug that shipped once already and is invisible to every other script here. `test:coverage:cli` joined at the same time (~3s) so a local publish cannot ship a Studio/migrate coverage regression. Still deliberately absent, because they need containers or minutes of packing: the non-Postgres engine suites and the tarball install smoke, which release.yml + ci.yml run. check:cycles joined 2026-08-02 (the query/->client.ts acyclicity rule as a build failure instead of CLAUDE.md prose). check:release-tests joined at the same time and runs LAST because it is the expensive one: outside CI it runs the full DB-backed `npm test` (refusing to publish when no DATABASE_URL is reachable, escape hatch TURBINE_PUBLISH_WITHOUT_DB=1), which closes the old gap where the release path never executed a query against a real Postgres; in CI it self-skips since release.yml/nightly.yml run that suite as dedicated jobs. Known double-coverage: `npm test` re-runs the unit-lane files serially, so a local publish executes them twice; accepted, the second pass is the one with a real database behind it.","peerDependencies":{"mssql":"^10.0.0 || ^11.0.0 || ^12.0.0","mysql2":"^3.0.0","@zvndev/powdb-client":">=0.7.1 <1.0.0","@zvndev/powdb-embedded":">=0.7.1 <1.0.0"},"peerDependenciesMeta":{"mssql":{"optional":true},"mysql2":{"optional":true},"@zvndev/powdb-client":{"optional":true},"@zvndev/powdb-embedded":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/turbine-orm_0.81.0-next.573e171_1790566515975_0.7497017324813686"}}},"time":{"created":"2026-03-27T04:13:19.667Z","modified":"2026-09-28T03:35:16.465Z","0.3.0":"2026-03-27T04:13:19.919Z","0.3.1":"2026-03-27T04:56:56.453Z","0.4.0":"2026-03-27T05:37:25.908Z","0.5.0":"2026-03-28T03:27:57.285Z","0.7.0":"2026-04-07T21:37:12.572Z","0.7.1":"2026-04-08T06:19:33.044Z","0.8.0":"2026-04-09T19:04:51.553Z","0.9.0":"2026-04-10T00:14:05.806Z","0.9.1":"2026-04-10T04:04:22.428Z","0.9.2":"2026-04-14T05:08:46.551Z","0.10.0":"2026-05-10T02:08:26.559Z","0.11.0":"2026-05-10T02:49:20.890Z","0.12.0":"2026-05-10T03:13:43.589Z","0.13.0":"2026-05-10T03:54:34.426Z","0.13.1":"2026-05-10T04:04:55.669Z","0.13.2":"2026-05-10T04:28:57.414Z","0.13.3":"2026-05-10T17:40:13.992Z","0.14.0":"2026-05-10T17:53:33.557Z","0.15.0":"2026-05-17T17:58:32.630Z","0.16.0":"2026-05-19T03:38:29.361Z","0.18.0":"2026-06-09T02:12:51.653Z","0.19.0":"2026-06-09T04:49:32.901Z","0.19.1":"2026-06-10T02:14:04.103Z","0.19.2":"2026-06-10T04:21:14.581Z","0.21.0":"2026-06-26T07:29:17.179Z","0.22.0":"2026-06-29T01:07:58.939Z","0.23.0":"2026-06-29T02:52:20.924Z","0.23.1":"2026-07-03T06:56:03.656Z","0.23.2":"2026-07-04T03:38:34.139Z","0.24.0":"2026-07-06T17:42:34.807Z","0.25.0":"2026-07-06T18:36:29.702Z","0.26.0":"2026-07-08T05:36:50.381Z","0.27.0":"2026-07-09T00:26:59.740Z","0.27.1":"2026-07-09T00:28:41.892Z","0.28.0":"2026-07-09T13:23:16.429Z","0.28.1":"2026-07-10T19:58:09.303Z","0.28.2":"2026-07-10T22:06:22.627Z","0.28.3":"2026-07-11T05:18:34.218Z","0.29.0":"2026-07-12T04:15:00.220Z","0.30.0":"2026-07-13T05:17:03.021Z","0.31.0":"2026-07-13T20:57:55.949Z","0.32.0":"2026-07-14T01:51:22.027Z","0.32.1":"2026-07-15T00:52:44.874Z","0.32.2":"2026-07-15T04:33:23.656Z","0.33.0":"2026-07-15T18:22:24.264Z","0.34.0":"2026-07-15T23:49:08.462Z","0.35.0":"2026-07-16T14:05:45.438Z","0.36.0":"2026-07-18T18:22:19.917Z","0.36.1":"2026-07-18T20:03:04.712Z","0.37.0":"2026-07-19T02:46:02.707Z","0.38.0":"2026-07-20T02:56:53.833Z","0.38.1":"2026-07-20T03:21:48.645Z","0.39.0":"2026-07-20T06:05:05.168Z","0.39.0-next.4a00f8a":"2026-07-20T06:09:59.557Z","0.40.0":"2026-07-22T00:29:42.676Z","0.40.0-next.02bec8d":"2026-07-22T00:31:05.422Z","0.40.1":"2026-07-23T00:42:56.707Z","0.40.1-next.712c438":"2026-07-23T00:44:26.639Z","0.41.0":"2026-07-23T15:36:57.609Z","0.42.0":"2026-07-23T18:49:25.086Z","0.42.0-next.4cba235":"2026-07-23T18:51:10.355Z","0.43.0":"2026-07-23T20:52:16.076Z","0.43.0-next.58c2a31":"2026-07-23T20:54:32.871Z","0.44.0":"2026-07-23T22:37:38.353Z","0.44.0-next.0559adf":"2026-07-23T22:39:17.239Z","0.45.0":"2026-07-24T02:09:22.933Z","0.46.0":"2026-07-24T02:24:28.749Z","0.46.0-next.9e9c2ae":"2026-07-24T02:26:14.996Z","0.47.0":"2026-07-24T03:02:42.196Z","0.47.0-next.7db5246":"2026-07-24T03:03:05.896Z","0.48.0":"2026-07-24T19:19:16.364Z","0.48.0-next.81170f6":"2026-07-24T19:20:50.485Z","0.49.0":"2026-07-25T04:19:08.522Z","0.49.0-next.92d99c4":"2026-07-25T04:20:54.848Z","0.50.0":"2026-07-25T19:07:14.054Z","0.50.0-next.ea011bc":"2026-07-25T19:08:37.319Z","0.51.0":"2026-07-26T04:52:51.866Z","0.51.0-next.864166":"2026-07-26T04:57:29.138Z","0.52.0":"2026-07-26T07:34:54.194Z","0.52.0-next.1f3303a":"2026-07-26T07:40:06.406Z","0.53.0":"2026-07-27T04:03:23.475Z","0.53.0-next.9bc89c2":"2026-07-27T04:06:51.021Z","0.54.0":"2026-07-27T06:58:20.651Z","0.54.0-next.f808373":"2026-07-27T07:03:48.147Z","0.55.0":"2026-07-27T19:17:38.544Z","0.55.0-next.cccce72":"2026-07-27T19:23:03.153Z","0.56.0":"2026-07-27T23:16:27.705Z","0.57.0":"2026-07-28T01:46:50.183Z","0.58.0":"2026-07-28T03:02:27.114Z","0.59.0":"2026-07-28T03:43:48.667Z","0.59.1":"2026-07-28T04:21:21.977Z","0.59.2":"2026-07-28T05:00:17.606Z","0.60.0":"2026-07-28T05:30:53.941Z","0.60.1":"2026-07-28T12:45:48.503Z","0.61.0":"2026-07-28T13:33:46.780Z","0.62.0":"2026-07-28T16:01:57.254Z","0.62.1":"2026-07-28T16:24:56.002Z","0.63.0":"2026-07-29T17:34:48.766Z","0.64.0":"2026-07-29T19:07:48.243Z","0.64.1":"2026-07-29T20:43:23.476Z","0.64.1-next.a56cf42":"2026-07-29T20:49:56.891Z","0.65.0":"2026-08-02T06:24:31.816Z","0.65.0-next.c23570f":"2026-08-02T06:29:51.354Z","0.66.0":"2026-08-09T19:08:29.782Z","0.67.0":"2026-08-10T14:43:11.148Z","0.67.0-next.c353473":"2026-08-10T15:00:22.301Z","0.70.0":"2026-08-15T05:16:39.857Z","0.70.0-next.47d8473":"2026-08-15T05:17:22.214Z","0.71.0":"2026-08-16T03:32:13.329Z","0.71.0-next.dd17688":"2026-08-16T03:47:44.415Z","0.72.0":"2026-08-16T19:56:15.222Z","0.72.0-next.3f6572d":"2026-08-16T20:03:21.857Z","0.73.0":"2026-08-16T21:26:47.322Z","0.73.0-next.7907a7b":"2026-08-16T21:36:19.402Z","0.73.1-next.1e0f731":"2026-08-17T01:03:22.328Z","0.73.1":"2026-08-17T01:30:01.964Z","0.73.1-next.17e8f0c":"2026-08-17T01:31:11.774Z","0.73.1-next.5304dfe":"2026-08-17T01:42:48.575Z","0.74.0":"2026-08-17T02:56:26.770Z","0.74.0-next.ed9d628":"2026-08-17T02:57:02.134Z","0.75.0":"2026-08-17T03:42:21.002Z","0.75.0-next.424989b":"2026-08-17T03:49:29.477Z","0.76.0":"2026-08-22T04:59:29.558Z","0.76.0-next.e52c526":"2026-08-22T05:25:21.644Z","0.77.0-next.f8dda11":"2026-08-23T14:40:33.920Z","0.77.0":"2026-08-23T14:46:36.968Z","0.77.1-next.19486ee":"2026-08-23T20:05:07.423Z","0.77.1":"2026-08-23T20:09:34.213Z","0.78.0":"2026-09-07T02:14:49.856Z","0.78.0-next.4bd3c8f":"2026-09-07T03:01:06.920Z","0.78.0-next.33495bd":"2026-09-07T17:20:24.730Z","0.78.0-next.3a41a82":"2026-09-07T18:18:59.431Z","0.78.0-next.9e959ba":"2026-09-07T18:45:38.412Z","0.78.0-next.b792a6a":"2026-09-07T19:13:14.933Z","0.79.0-next.c53fa34":"2026-09-24T06:01:20.674Z","0.79.0":"2026-09-24T06:09:59.206Z","0.79.1-next.e9dcb00":"2026-09-24T17:48:01.517Z","0.79.1":"2026-09-24T17:48:25.122Z","0.79.1-next.a5c9de2":"2026-09-27T02:55:55.506Z","0.80.0":"2026-09-28T01:05:32.227Z","0.80.0-next.cbb21b1":"2026-09-28T01:06:55.131Z","0.81.0":"2026-09-28T03:32:44.601Z","0.81.0-next.573e171":"2026-09-28T03:35:16.121Z"},"bugs":{"url":"https://github.com/zvndev/turbine-orm/issues"},"author":{"name":"ZVN DEV","email":"dev@zvndev.com"},"license":"MIT","homepage":"https://turbineorm.dev","keywords":["orm","postgres","postgresql","typescript","json-agg","query-builder","database","sql","turbine","nested-queries","prisma-alternative"],"repository":{"url":"git+https://github.com/zvndev/turbine-orm.git","type":"git"},"description":"Postgres-native TypeScript ORM, runs on Neon, Vercel Postgres, Cloudflare, Supabase. Streaming cursors, typed errors, single-query nested relations. One dependency, no WASM engine","maintainers":[{"name":"kirby_zvndev","email":"kirby@zvndev.com"}],"readme":"","readmeFilename":""}