{"_id":"@prisma/ppg","_rev":"15-bf2b83b94428e16257af76be3b497a21","name":"@prisma/ppg","dist-tags":{"latest":"1.0.1"},"versions":{"0.1.0":{"name":"@prisma/ppg","version":"0.1.0","keywords":["prisma","postgres","ppg","database","client","sql"],"license":"Apache-2.0","_id":"@prisma/ppg@0.1.0","maintainers":[{"name":"jkomyno","email":"alberto.schiabel@gmail.com"},{"name":"nilubava","email":"nilubava@gmail.com"},{"name":"prismabot","email":"bot@prisma.io"},{"name":"aqrln","email":"alex@aqrln.net"},{"name":"tylerhogarth","email":"tylerhogarth@gmail.com"},{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},{"name":"ankur-datta-007","email":"dev.ankur.datta@gmail.com"},{"name":"jloots","email":"loots@prisma.io"}],"dist":{"shasum":"814d6febe5c37c1c5089240ac18b056926a71902","tarball":"https://registry.npmjs.org/@prisma/ppg/-/ppg-0.1.0.tgz","fileCount":4,"integrity":"sha512-hDgF6n7JAdbQF4XcpdrDy05SFshAdb28Zu20MbGJSlqeKxw4X4Sqorgft57RZ7gUtD/07sVZq9rPR9SyQQuJag==","signatures":[{"sig":"MEUCIEMf6n+bK1P0BVChQFuySZrhuUuxsO+WTjyyWYY36vp4AiEA3e6XjlsL/hUmPAJkb4PPNStmTrscbu5nTvW07NRisfU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19897},"type":"module","_from":"file:prisma-ppg-0.1.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsup src/index.ts --format esm --dts --target esnext --out-dir dist","format":"biome format --write"},"_npmUser":{"name":"aqrln","email":"alex@aqrln.net"},"_resolved":"/private/var/folders/54/8s4kj7mx4nn4tv4jl9y9yzkr0000gn/T/ade44835eab7904096f23b750f5f8711/prisma-ppg-0.1.0.tgz","_integrity":"sha512-hDgF6n7JAdbQF4XcpdrDy05SFshAdb28Zu20MbGJSlqeKxw4X4Sqorgft57RZ7gUtD/07sVZq9rPR9SyQQuJag==","_npmVersion":"11.3.0","description":"Lightweight client for Prisma Postgres","directories":{},"_nodeVersion":"24.0.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3","@types/node":"^22.15.18","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/ppg_0.1.0_1747239839274_0.12344132876485281","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@prisma/ppg","version":"0.1.2","keywords":["prisma","postgres","ppg","database","client","sql"],"license":"Apache-2.0","_id":"@prisma/ppg@0.1.2","maintainers":[{"name":"jkomyno","email":"alberto.schiabel@gmail.com"},{"name":"nilubava","email":"nilubava@gmail.com"},{"name":"prismabot","email":"bot@prisma.io"},{"name":"aqrln","email":"alex@aqrln.net"},{"name":"tylerhogarth","email":"tylerhogarth@gmail.com"},{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},{"name":"ankur-datta-007","email":"dev.ankur.datta@gmail.com"},{"name":"jloots","email":"loots@prisma.io"}],"dist":{"shasum":"1352408a878808a57e96a5fe803985a689d43ba2","tarball":"https://registry.npmjs.org/@prisma/ppg/-/ppg-0.1.2.tgz","fileCount":5,"integrity":"sha512-6dtiVwDLs6JBfcBGxAOOUUK3R9C/3Re4mSfVSG+lf94IDDzu3bjqtzPQzYtwXrzAb+yfID+ZUK9xY6w0Kt0vvQ==","signatures":[{"sig":"MEUCIQC463PDiSw6YuOOSO0jO7OdnTqifOYtCZxkaASPIYbWrQIgQOiY/4buIhJv667N0K5DuS9x1dPqSkXciCcvR0MbaK4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22317},"type":"module","_from":"file:prisma-ppg-0.1.2.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsup src/index.ts --format esm --dts --target esnext --out-dir dist","format":"biome format --write"},"_npmUser":{"name":"aqrln","email":"alex@aqrln.net"},"_resolved":"/private/var/folders/54/8s4kj7mx4nn4tv4jl9y9yzkr0000gn/T/fbaff7b4d6f7b8301e16aa6badf7ce62/prisma-ppg-0.1.2.tgz","_integrity":"sha512-6dtiVwDLs6JBfcBGxAOOUUK3R9C/3Re4mSfVSG+lf94IDDzu3bjqtzPQzYtwXrzAb+yfID+ZUK9xY6w0Kt0vvQ==","_npmVersion":"11.3.0","description":"Lightweight client for Prisma Postgres","directories":{},"_nodeVersion":"24.0.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3","@types/node":"^22.15.18","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/ppg_0.1.2_1747317340149_0.009865398792388014","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@prisma/ppg","version":"0.2.0","keywords":["prisma","postgres","postgresql","ppg","database","client","sql","serverless"],"license":"Apache-2.0","_id":"@prisma/ppg@0.2.0","maintainers":[{"name":"jkomyno","email":"alberto.schiabel@gmail.com"},{"name":"nilubava","email":"nilubava@gmail.com"},{"name":"prismabot","email":"bot@prisma.io"},{"name":"aqrln","email":"alex@aqrln.net"},{"name":"tylerhogarth","email":"tylerhogarth@gmail.com"},{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},{"name":"ankur-datta-007","email":"dev.ankur.datta@gmail.com"},{"name":"jloots","email":"loots@prisma.io"}],"dist":{"shasum":"dde12d3c8889b50e729b35bcd2f3f679e5f65cd1","tarball":"https://registry.npmjs.org/@prisma/ppg/-/ppg-0.2.0.tgz","fileCount":5,"integrity":"sha512-B7U8nF7SXiuQhYaD1hpyG/WtBs+BObULFUGaFByOjeVjs5VewyoSIAUozMkBosPsYTXp7CntG5bLE7mOVr11Xg==","signatures":[{"sig":"MEUCIGUdyBjbABGiCFsdPRupjKdIW+mnQ5ohlL6Z0YRmFF5FAiEAj+Ap3KdoooG3ZzJWmNr878IG+jQm1yy8xCrkSgWvCEY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20419},"type":"module","_from":"file:prisma-ppg-0.2.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsup src/index.ts --format esm --dts --target esnext --out-dir dist","format":"biome check --write"},"_npmUser":{"name":"aqrln","email":"alex@aqrln.net"},"_resolved":"/private/var/folders/54/8s4kj7mx4nn4tv4jl9y9yzkr0000gn/T/05f04d7525f75209b8655b0a99b984e2/prisma-ppg-0.2.0.tgz","_integrity":"sha512-B7U8nF7SXiuQhYaD1hpyG/WtBs+BObULFUGaFByOjeVjs5VewyoSIAUozMkBosPsYTXp7CntG5bLE7mOVr11Xg==","_npmVersion":"11.3.0","description":"Lightweight client for Prisma Postgres","directories":{},"_nodeVersion":"24.0.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3","@types/node":"^22.15.18","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/ppg_0.2.0_1747335239069_0.5333452011854596","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@prisma/ppg","version":"0.3.0","keywords":["prisma","postgres","postgresql","ppg","database","client","sql","serverless"],"license":"Apache-2.0","_id":"@prisma/ppg@0.3.0","maintainers":[{"name":"jkomyno","email":"alberto.schiabel@gmail.com"},{"name":"nilubava","email":"nilubava@gmail.com"},{"name":"prismabot","email":"bot@prisma.io"},{"name":"aqrln","email":"alex@aqrln.net"},{"name":"tylerhogarth","email":"tylerhogarth@gmail.com"},{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},{"name":"ankur-datta-007","email":"dev.ankur.datta@gmail.com"},{"name":"jloots","email":"loots@prisma.io"}],"dist":{"shasum":"3e04feaf5e245eb247f9abe1dbd57e78ee37a965","tarball":"https://registry.npmjs.org/@prisma/ppg/-/ppg-0.3.0.tgz","fileCount":6,"integrity":"sha512-xihm0fUCx87NNRc+I2tdqy15Bau9G3NIYmSrjupq5LdWwt0HVE5A6e9/0ByFDXDeIfmE6Bz+E/3DLmz/oll95Q==","signatures":[{"sig":"MEYCIQCCZbiUs94taF4UG5JxpkTm1OBTf8Qpene4PsNeyieuBgIhALrLZwL2SwhLghFOT3RmbMHN4BT8o2hGwMXvlflA/o/D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25289},"type":"module","_from":"file:prisma-ppg-0.3.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"pnpm run /^build:/","format":"biome check --write","build:cjs":"tsup src/index.ts --format cjs --target esnext --out-dir dist","build:esm":"tsup src/index.ts --format esm --dts --target esnext --out-dir dist"},"_npmUser":{"name":"aqrln","email":"alex@aqrln.net"},"_resolved":"/private/var/folders/54/8s4kj7mx4nn4tv4jl9y9yzkr0000gn/T/5680c5ebf972cefcb35efb28b94c384f/prisma-ppg-0.3.0.tgz","_integrity":"sha512-xihm0fUCx87NNRc+I2tdqy15Bau9G3NIYmSrjupq5LdWwt0HVE5A6e9/0ByFDXDeIfmE6Bz+E/3DLmz/oll95Q==","_npmVersion":"11.3.0","description":"Lightweight client for Prisma Postgres","directories":{},"_nodeVersion":"24.0.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3","@types/node":"^22.15.18","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/ppg_0.3.0_1747386612889_0.33707585931444073","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@prisma/ppg","version":"0.4.0","keywords":["prisma","postgres","postgresql","ppg","database","client","sql","serverless"],"license":"Apache-2.0","_id":"@prisma/ppg@0.4.0","maintainers":[{"name":"jkomyno","email":"alberto.schiabel@gmail.com"},{"name":"nilubava","email":"nilubava@gmail.com"},{"name":"prismabot","email":"bot@prisma.io"},{"name":"aqrln","email":"alex@aqrln.net"},{"name":"tylerhogarth","email":"tylerhogarth@gmail.com"},{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},{"name":"ankur-datta-007","email":"dev.ankur.datta@gmail.com"},{"name":"jloots","email":"loots@prisma.io"}],"dist":{"shasum":"6078fb3fa5a8cba5bfc4d61df5a667be37ac9ac9","tarball":"https://registry.npmjs.org/@prisma/ppg/-/ppg-0.4.0.tgz","fileCount":6,"integrity":"sha512-1d7qm8kw60T5cZmhJAWS2lsjn+oPM71+WWxqLLw1+d9NpQa10/NmiaK4oGYN/uVVoLLYFxXVn89zqvVtcLti2Q==","signatures":[{"sig":"MEUCID2tZivm907BlkUdwhoHktgCeRLdPjM8TH5pk398X5+rAiEApz/dZfPVB8f6PvityTvIOciFd0G3ml1mzX3BWY2Oikk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25798},"type":"module","_from":"file:prisma-ppg-0.4.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"pnpm run /^build:/","format":"biome check --write","build:cjs":"tsup src/index.ts --format cjs --target esnext --out-dir dist","build:esm":"tsup src/index.ts --format esm --dts --target esnext --out-dir dist"},"_npmUser":{"name":"aqrln","email":"alex@aqrln.net"},"_resolved":"/private/var/folders/54/8s4kj7mx4nn4tv4jl9y9yzkr0000gn/T/336a81dbd825d639db9d5587fdfd8f1d/prisma-ppg-0.4.0.tgz","_integrity":"sha512-1d7qm8kw60T5cZmhJAWS2lsjn+oPM71+WWxqLLw1+d9NpQa10/NmiaK4oGYN/uVVoLLYFxXVn89zqvVtcLti2Q==","_npmVersion":"11.3.0","description":"Lightweight client for Prisma Postgres","directories":{},"_nodeVersion":"24.0.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3","@types/node":"^22.15.18","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/ppg_0.4.0_1747390696151_0.012944164729457919","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@prisma/ppg","version":"0.4.1","keywords":["prisma","postgres","postgresql","ppg","database","client","sql","serverless"],"license":"Apache-2.0","_id":"@prisma/ppg@0.4.1","maintainers":[{"name":"jkomyno","email":"alberto.schiabel@gmail.com"},{"name":"nilubava","email":"nilubava@gmail.com"},{"name":"prismabot","email":"bot@prisma.io"},{"name":"aqrln","email":"alex@aqrln.net"},{"name":"tylerhogarth","email":"tylerhogarth@gmail.com"},{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},{"name":"ankur-datta-007","email":"dev.ankur.datta@gmail.com"},{"name":"jloots","email":"loots@prisma.io"}],"dist":{"shasum":"432ce327c97ff3b1cbcce7a0db3d54117078cefb","tarball":"https://registry.npmjs.org/@prisma/ppg/-/ppg-0.4.1.tgz","fileCount":6,"integrity":"sha512-FzcRWJD7N1W+RveOUBAdD5BXCLXIaggkq11JQuwBK0eyeQ7z4u/Hhb8rHL5xL0f4+aBnucfVCS0QHPrJLMcMDw==","signatures":[{"sig":"MEUCIQD408b0er8ekla2cDMDtbXYZ8ZjGK597FbhcSwMCx8Z1wIgbjmUnTW4rCfaQ/kGzWECTd5Z5DAlL9xLAtw/1ThdfDw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25800},"type":"module","_from":"file:prisma-ppg-0.4.1.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"pnpm run /^build:/","format":"biome check --write","build:cjs":"tsup src/index.ts --format cjs --target esnext --out-dir dist","build:esm":"tsup src/index.ts --format esm --dts --target esnext --out-dir dist"},"_npmUser":{"name":"aqrln","email":"alex@aqrln.net"},"_resolved":"/private/var/folders/54/8s4kj7mx4nn4tv4jl9y9yzkr0000gn/T/eb542a02ae57de05c04544c72761bb8c/prisma-ppg-0.4.1.tgz","_integrity":"sha512-FzcRWJD7N1W+RveOUBAdD5BXCLXIaggkq11JQuwBK0eyeQ7z4u/Hhb8rHL5xL0f4+aBnucfVCS0QHPrJLMcMDw==","_npmVersion":"11.3.0","description":"Lightweight client for Prisma Postgres","directories":{},"_nodeVersion":"24.0.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3","@types/node":"^22.15.18","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/ppg_0.4.1_1747390792093_0.5739571146239049","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@prisma/ppg","version":"0.5.0","keywords":["prisma","postgres","postgresql","ppg","database","client","sql","serverless"],"license":"Apache-2.0","_id":"@prisma/ppg@0.5.0","maintainers":[{"name":"jkomyno","email":"alberto.schiabel@gmail.com"},{"name":"nilubava","email":"nilubava@gmail.com"},{"name":"prismabot","email":"bot@prisma.io"},{"name":"aqrln","email":"alex@aqrln.net"},{"name":"tylerhogarth","email":"tylerhogarth@gmail.com"},{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},{"name":"ankur-datta-007","email":"dev.ankur.datta@gmail.com"},{"name":"jloots","email":"loots@prisma.io"}],"dist":{"shasum":"ad8489188eb591ee21824a442d5de825908d5961","tarball":"https://registry.npmjs.org/@prisma/ppg/-/ppg-0.5.0.tgz","fileCount":6,"integrity":"sha512-V//eabHkF5hRPsk21NLa5eFhF0YA3n9Zs9I/p/aUxmUwlMW8veDnTQtswqUJwHeB7WPLj68QtJdZpv1hFt7ZVg==","signatures":[{"sig":"MEYCIQD8G8EDvFpRu6/q3PyZh9lROzvju8SbGcMRHWggKND2VQIhAMS/zHPH4fsrUeGS5wYfKy70xJb1XJWj7IUZMl3BDAEA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26004},"type":"module","_from":"file:prisma-ppg-0.5.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"pnpm run /^build:/","format":"biome check --write","build:cjs":"tsup src/index.ts --format cjs --target esnext --out-dir dist","build:esm":"tsup src/index.ts --format esm --dts --target esnext --out-dir dist"},"_npmUser":{"name":"aqrln","email":"alex@aqrln.net"},"_resolved":"/private/var/folders/54/8s4kj7mx4nn4tv4jl9y9yzkr0000gn/T/58fe72baaa1938b25b37d014d80c14b2/prisma-ppg-0.5.0.tgz","_integrity":"sha512-V//eabHkF5hRPsk21NLa5eFhF0YA3n9Zs9I/p/aUxmUwlMW8veDnTQtswqUJwHeB7WPLj68QtJdZpv1hFt7ZVg==","_npmVersion":"11.3.0","description":"Lightweight client for Prisma Postgres","directories":{},"_nodeVersion":"24.0.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3","@types/node":"^22.15.18","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/ppg_0.5.0_1747392045169_0.47555815613005725","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@prisma/ppg","version":"0.5.1","keywords":["prisma","postgres","postgresql","ppg","database","client","sql","serverless"],"license":"Apache-2.0","_id":"@prisma/ppg@0.5.1","maintainers":[{"name":"jkomyno","email":"alberto.schiabel@gmail.com"},{"name":"nilubava","email":"nilubava@gmail.com"},{"name":"prismabot","email":"bot@prisma.io"},{"name":"aqrln","email":"alex@aqrln.net"},{"name":"tylerhogarth","email":"tylerhogarth@gmail.com"},{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},{"name":"ankur-datta-007","email":"dev.ankur.datta@gmail.com"},{"name":"jloots","email":"loots@prisma.io"}],"dist":{"shasum":"ba31ca77b3c550d2fda3026b792e1714e8a913aa","tarball":"https://registry.npmjs.org/@prisma/ppg/-/ppg-0.5.1.tgz","fileCount":6,"integrity":"sha512-wVrSY1r/4gQwYHyBXadlTR+BaZPvIAc4+QYrycwDoqexIaxZjwJQm9cDb2JPK3MtSUB/bt57NOryPk6YIHN49A==","signatures":[{"sig":"MEYCIQDbcirOOZBjJrb/m/n56D1IVf6e3ThY+egwq5bvWRq4eQIhAPrsG5ozJ7iacbttJvzL5L2pjvBkyCEeg3hyS8dSKpkV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26004},"type":"module","_from":"file:prisma-ppg-0.5.1.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"pnpm run /^build:/","format":"biome check --write","build:cjs":"tsup src/index.ts --format cjs --target esnext --out-dir dist","build:esm":"tsup src/index.ts --format esm --dts --target esnext --out-dir dist"},"_npmUser":{"name":"aqrln","email":"alex@aqrln.net"},"_resolved":"/private/var/folders/54/8s4kj7mx4nn4tv4jl9y9yzkr0000gn/T/d7decfff0925ef9119f879a842f20178/prisma-ppg-0.5.1.tgz","_integrity":"sha512-wVrSY1r/4gQwYHyBXadlTR+BaZPvIAc4+QYrycwDoqexIaxZjwJQm9cDb2JPK3MtSUB/bt57NOryPk6YIHN49A==","_npmVersion":"11.3.0","description":"Lightweight client for Prisma Postgres","directories":{},"_nodeVersion":"24.0.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3","@types/node":"^22.15.18","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/ppg_0.5.1_1747492546367_0.0584546777913062","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@prisma/ppg","version":"0.5.2","keywords":["prisma","postgres","postgresql","ppg","database","client","sql","serverless"],"license":"Apache-2.0","_id":"@prisma/ppg@0.5.2","maintainers":[{"name":"jkomyno","email":"alberto.schiabel@gmail.com"},{"name":"nilubava","email":"nilubava@gmail.com"},{"name":"prismabot","email":"bot@prisma.io"},{"name":"aqrln","email":"alex@aqrln.net"},{"name":"tylerhogarth","email":"tylerhogarth@gmail.com"},{"name":"pirix-gh","email":"pierreantoine.urvoy@gmail.com"},{"name":"ankur-datta-007","email":"dev.ankur.datta@gmail.com"},{"name":"jloots","email":"loots@prisma.io"}],"dist":{"shasum":"0f01c1483f407f7002243a78eab7eee8a8e9f095","tarball":"https://registry.npmjs.org/@prisma/ppg/-/ppg-0.5.2.tgz","fileCount":6,"integrity":"sha512-WT5Kxj1gRLjcrnhMJfdTMsxs8RBhOHm4ZooCuaK0qhKP1ta1ukV3Ab11jEOSI2XeMWCRN6fvwO8+wqWzGmTXuQ==","signatures":[{"sig":"MEUCIQDssNQRXDoAwP/6nbnW5k//npuRuXw1DZuPQN6tQwsR+gIgKmV/AumoZTUTIjuYO4V/YWyQ9P9yNBYS3/TaNfog598=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26001},"type":"module","_from":"file:prisma-ppg-0.5.2.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"build":"pnpm run /^build:/","format":"biome check --write","build:cjs":"tsup src/index.ts --format cjs --target esnext --out-dir dist","build:esm":"tsup src/index.ts --format esm --dts --target esnext --out-dir dist"},"_npmUser":{"name":"aqrln","email":"alex@aqrln.net"},"_resolved":"/private/var/folders/54/8s4kj7mx4nn4tv4jl9y9yzkr0000gn/T/056261e6efee69f330f65a97b06d277a/prisma-ppg-0.5.2.tgz","_integrity":"sha512-WT5Kxj1gRLjcrnhMJfdTMsxs8RBhOHm4ZooCuaK0qhKP1ta1ukV3Ab11jEOSI2XeMWCRN6fvwO8+wqWzGmTXuQ==","_npmVersion":"11.3.0","description":"Lightweight client for Prisma Postgres","directories":{},"_nodeVersion":"24.0.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"^5.8.3","@types/node":"^22.15.18","@biomejs/biome":"^1.9.4"},"_npmOperationalInternal":{"tmp":"tmp/ppg_0.5.2_1747497850725_0.5815729383162906","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@prisma/ppg","version":"1.0.0","keywords":["prisma","postgres","postgresql","ppg","database","client","sql","serverless","edge","http","websocket"],"license":"Apache-2.0","_id":"@prisma/ppg@1.0.0","maintainers":[{"name":"jkomyno","email":"alberto.schiabel@gmail.com"},{"name":"nilubava","email":"nilubava@gmail.com"},{"name":"prismabot","email":"bot-npm@prisma.io"},{"name":"aqrln","email":"alex@aqrln.net"},{"name":"tylerhogarth","email":"tylerhogarth@gmail.com"},{"name":"ankur-datta-007","email":"dev.ankur.datta@gmail.com"},{"name":"jloots","email":"loots@prisma.io"}],"homepage":"https://github.com/prisma/ppg-client#readme","bugs":{"url":"https://github.com/prisma/ppg-client/issues"},"dist":{"shasum":"033724a20c731af3de5166fb8007995a06fdc58e","tarball":"https://registry.npmjs.org/@prisma/ppg/-/ppg-1.0.0.tgz","fileCount":7,"integrity":"sha512-Yr4Jdo+RVxxvncgAAFo56CztLn3jfolpX3sB8GoX7PYLNTdWvGOZKN6ZfRUF1oCSLg5UBD1+mBZbvAxb4Vc1uQ==","signatures":[{"sig":"MEUCIQDddv0bYv9pqwhGd+szWeskPIhFTfaOJqhuMb8McVBZuAIgN6q01PSKe2dgxWivvEqG66Y7YspgCmYuccg0H5VaJWM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@prisma%2fppg@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":153718},"type":"module","_from":"file:prisma-ppg-1.0.0.tgz","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm,cjs --dts --target node18 --out-dir dist","format":"biome check --write","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c1fab4c6-3c2f-4e44-9db8-87d601922696"}},"_resolved":"/tmp/3fcdce6436b8b3f95678c5b2557c9177/prisma-ppg-1.0.0.tgz","_integrity":"sha512-Yr4Jdo+RVxxvncgAAFo56CztLn3jfolpX3sB8GoX7PYLNTdWvGOZKN6ZfRUF1oCSLg5UBD1+mBZbvAxb4Vc1uQ==","repository":{"url":"git+https://github.com/prisma/ppg-client.git","type":"git"},"_npmVersion":"11.5.1","description":"Lightweight client for Prisma Postgres","directories":{},"_nodeVersion":"22.21.1","dependencies":{"ws":"^8.18.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","busboy":"^1.6.0","vitest":"^4.0.5","@types/ws":"^8.18.1","@vitest/ui":"^4.0.5","typescript":"^5.8.3","@types/node":"^22.15.18","@types/busboy":"^1.5.4","@biomejs/biome":"^1.9.4","@vitest/coverage-v8":"^4.0.5"},"_npmOperationalInternal":{"tmp":"tmp/ppg_1.0.0_1762255039546_0.9568380467026967","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@prisma/ppg","version":"1.0.1","keywords":["prisma","postgres","postgresql","ppg","database","client","sql","serverless","edge","http","websocket"],"license":"Apache-2.0","_id":"@prisma/ppg@1.0.1","maintainers":[{"name":"jkomyno","email":"alberto.schiabel@gmail.com"},{"name":"nilubava","email":"nilubava@gmail.com"},{"name":"prismabot","email":"bot-npm@prisma.io"},{"name":"aqrln","email":"alex@aqrln.net"},{"name":"tylerhogarth","email":"tylerhogarth@gmail.com"},{"name":"ankur-datta-007","email":"dev.ankur.datta@gmail.com"},{"name":"jloots","email":"loots@prisma.io"}],"homepage":"https://github.com/prisma/ppg-client#readme","bugs":{"url":"https://github.com/prisma/ppg-client/issues"},"dist":{"shasum":"23f5ec09b4a7d43d62ba39435508e7e1c7089dee","tarball":"https://registry.npmjs.org/@prisma/ppg/-/ppg-1.0.1.tgz","fileCount":7,"integrity":"sha512-rRRXuPPerXwNWjSA3OE0e/bqXSTfsE82EsMvoiluc0fN0DizQSe3937/Tnl5+DPbxY5rdAOlYjWXG0A2wwTbKA==","signatures":[{"sig":"MEUCIQDX/JHqSVh7p1BcEAn4Eg59dIBW4lpA0amkKq6Mu71msAIgKRgXAtWZ++LH+b7hvzZsMtd3fGCTL6eg8APPIF0hpEE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@prisma%2fppg@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":154634},"main":"./dist/index.cjs","type":"module","_from":"file:prisma-ppg-1.0.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":"./dist/index.js","require":{"types":"./dist/index.d.ts","default":"./dist/index.cjs"}}},"scripts":{"test":"vitest run","build":"tsup src/index.ts --format esm,cjs --dts --target node18 --out-dir dist","format":"biome check --write","test:ui":"vitest --ui","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c1fab4c6-3c2f-4e44-9db8-87d601922696"}},"_resolved":"/tmp/e0a5d21b0b3c35f3a9c1188b2df969ee/prisma-ppg-1.0.1.tgz","_integrity":"sha512-rRRXuPPerXwNWjSA3OE0e/bqXSTfsE82EsMvoiluc0fN0DizQSe3937/Tnl5+DPbxY5rdAOlYjWXG0A2wwTbKA==","repository":{"url":"git+https://github.com/prisma/ppg-client.git","type":"git"},"_npmVersion":"11.5.1","description":"Lightweight client for Prisma Postgres","directories":{},"_nodeVersion":"22.21.1","dependencies":{"ws":"^8.18.3"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","busboy":"^1.6.0","vitest":"^4.0.5","@types/ws":"^8.18.1","@vitest/ui":"^4.0.5","typescript":"^5.8.3","@types/node":"^22.15.18","@types/busboy":"^1.5.4","@biomejs/biome":"^1.9.4","@vitest/coverage-v8":"^4.0.5"},"_npmOperationalInternal":{"tmp":"tmp/ppg_1.0.1_1762275894834_0.6392034022297941","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2025-05-14T16:23:59.196Z","modified":"2026-05-12T06:21:37.553Z","0.1.0":"2025-05-14T16:23:59.478Z","0.1.2":"2025-05-15T13:55:40.350Z","0.2.0":"2025-05-15T18:53:59.264Z","0.3.0":"2025-05-16T09:10:13.083Z","0.4.0":"2025-05-16T10:18:16.355Z","0.4.1":"2025-05-16T10:19:52.322Z","0.5.0":"2025-05-16T10:40:45.358Z","0.5.1":"2025-05-17T14:35:46.578Z","0.5.2":"2025-05-17T16:04:10.908Z","1.0.0":"2025-11-04T11:17:19.747Z","1.0.1":"2025-11-04T17:04:55.041Z"},"bugs":{"url":"https://github.com/prisma/ppg-client/issues"},"license":"Apache-2.0","homepage":"https://github.com/prisma/ppg-client#readme","keywords":["prisma","postgres","postgresql","ppg","database","client","sql","serverless","edge","http","websocket"],"repository":{"url":"git+https://github.com/prisma/ppg-client.git","type":"git"},"description":"Lightweight client for Prisma Postgres","maintainers":[{"email":"bot-npm@prisma.io","name":"prismabot"},{"email":"alex@aqrln.net","name":"aqrln"},{"email":"tylerhogarth@gmail.com","name":"tylerhogarth"},{"email":"dev.ankur.datta@gmail.com","name":"ankur-datta-007"}],"readme":"# @prisma/ppg\n\nModern, lightweight, minimal serverless client for [Prisma Postgres®](https://www.prisma.io/postgres?utm_source=github&utm_medium=ppg-client-readme).\n\n## Installation\n\nInstall this package using your package manager and registry of choice:\n\n* npm: `npm install @prisma/ppg`\n* pnpm: `pnpm add @prisma/ppg` (or `pnpm add jsr:@prisma/ppg`)\n* Yarn: `yarn add @prisma/ppg`\n* Bun: `bun add @prisma/ppg`\n* Deno: `deno add jsr:@prisma/ppg`\n* esm.sh CDN: `https://esm.sh/@prisma/ppg`\n\n## Prisma Postgres Direct TCP Connection URL\n\n**Important**: This client requires a **Prisma Postgres Direct TCP Connection** URL. This URL format is specific to Prisma Postgres and has the following structure:\n\n```\npostgres://identifier:key@db.prisma.io:5432/postgres?sslmode=require\n```\n\nYou can find this connection string in the API Keys section of your Prisma Postgres dashboard. Other standard PostgreSQL connection strings will not work with this client.\n\n## Quick Start\n\n```ts\nimport { prismaPostgres, defaultClientConfig } from \"@prisma/ppg\";\n\nconst ppg = prismaPostgres(\n  defaultClientConfig(process.env.PRISMA_DIRECT_TCP_URL!)\n);\n\n// SQL template literals with automatic parameterization\nconst users = await ppg.sql<User>`SELECT * FROM users WHERE id = ${userId}`.collect();\n```\n\n## Usage Guide\n\nThis library provides two APIs:\n\n1. **`prismaPostgres()`** - High-level API with SQL template literals, transactions, and batch operations (recommended for most users)\n2. **`client()`** - Low-level untyped API with explicit parameter passing and session management\n\n---\n\n## High-Level API: `prismaPostgres()`\n\nThe `prismaPostgres()` function returns a feature-rich client with SQL template literals, transactions, and batch operations.\n\n### Setup\n\n```ts\nimport { prismaPostgres, defaultClientConfig } from \"@prisma/ppg\";\n\n// Recommended: Use defaultClientConfig to include default parsers and serializers\nconst ppg = prismaPostgres(\n  defaultClientConfig(\"postgres://identifier:key@db.prisma.io:5432/postgres?sslmode=require\")\n);\n\n// Or manually configure (no default parsers/serializers):\nconst ppgCustom = prismaPostgres({\n  connectionString: \"postgres://identifier:key@db.prisma.io:5432/postgres?sslmode=require\",\n  parsers: [/* your custom parsers */],\n  serializers: [/* your custom serializers */]\n});\n```\n\n> **Important**: Use `defaultClientConfig()` to automatically include default parsers and serializers for common PostgreSQL types (Date, JSON, BigInt, etc.). Without it, you'll need to manually configure parsers and serializers.\n\n### Query Modes\n\n#### 1. SQL Template Literals - Async Iterator\n\nExecute queries using tagged template literals. Values are automatically parameterized to prevent SQL injection.\n\n```ts\ntype User = { id: string; name: string; email: string };\n\nconst users = ppg.sql<User>`SELECT * FROM users`;\n\n// Stream results one by one\nfor await (const user of users) {\n  console.log(user.id, user.name, user.email);\n}\n```\n\n#### 2. SQL Template Literals - Collect All Rows\n\nCollect all results into an array:\n\n```ts\nconst users = await ppg.sql<User>`SELECT * FROM users WHERE email = ${\"test@example.com\"}`.collect();\nconsole.log(users[0].name);\n```\n\n#### 3. SQL Template Literals - Exec Mode\n\nUse `sql.exec` for INSERT, UPDATE, DELETE operations that return affected row counts:\n\n```ts\nconst affected = await ppg.sql.exec`DELETE FROM users WHERE id = ${userId}`;\nconsole.log(`Deleted ${affected} user(s)`);\n```\n\n#### 4. Explicit Parameter Query\n\nUse the `query()` method with explicit positional parameters:\n\n```ts\nconst users = await ppg.query<User>(\"SELECT * FROM users WHERE email = $1\", \"test@example.com\").collect();\n```\n\n#### 5. Explicit Parameter Exec\n\nUse the `exec()` method for write operations:\n\n```ts\nconst affected = await ppg.exec(\"INSERT INTO users (name, email) VALUES ($1, $2)\", \"Alice\", \"alice@example.com\");\nconsole.log(`Inserted ${affected} row(s)`);\n```\n\n### Transactions\n\n#### Interactive Transactions\n\nExecute multiple queries within an automatic transaction. The transaction commits on success or rolls back on error:\n\n```ts\nconst result = await ppg.transaction(async (tx) => {\n  // BEGIN is executed automatically\n\n  await tx.sql.exec`INSERT INTO users (name) VALUES ('Alice')`;\n\n  const users = await tx.sql<User>`SELECT * FROM users WHERE name = 'Alice'`.collect();\n\n  // COMMIT is executed automatically\n  return users[0].name;\n});\n\nconsole.log(result); // \"Alice\"\n```\n\nRollback on error:\n\n```ts\ntry {\n  await ppg.transaction(async (tx) => {\n    await tx.sql.exec`INSERT INTO users (name) VALUES ('Bob')`;\n    throw new Error(\"Something went wrong\");\n    // ROLLBACK is executed automatically\n  });\n} catch (error) {\n  console.log(\"Transaction rolled back\");\n}\n```\n\nUse `query()` and `exec()` methods within transactions:\n\n```ts\nawait ppg.transaction(async (tx) => {\n  const before = await tx.query<User>(\"SELECT * FROM users WHERE id = $1\", userId).collect();\n\n  await tx.exec(\"UPDATE users SET name = $1 WHERE id = $2\", \"New Name\", userId);\n\n  const after = await tx.query<User>(\"SELECT * FROM users WHERE id = $1\", userId).collect();\n});\n```\n\n### Batch Operations\n\nExecute multiple statements in a single round-trip within an automatic transaction.\n\n#### Array Syntax\n\n```ts\nconst [users, affected, counts] = await ppg.batch<[User[], number, { count: bigint }[]]>(\n  { query: \"SELECT * FROM users WHERE id < $1\", parameters: [5] },\n  { exec: \"INSERT INTO users (name) VALUES ($1)\", parameters: [\"Charlie\"] },\n  { query: \"SELECT COUNT(*)::int8 as count FROM users\", parameters: [] }\n);\n\nconsole.log(users);        // User[]\nconsole.log(affected);     // number\nconsole.log(counts[0].count); // bigint\n```\n\n#### Fluent Builder API\n\n```ts\nconst [users, affected, counts] = await ppg.batch()\n  .query<User>(\"SELECT * FROM users WHERE id = $1\", userId)\n  .exec(\"UPDATE users SET name = $1 WHERE id = $2\", \"Updated Name\", userId)\n  .query<{ count: bigint }>(\"SELECT COUNT(*)::int8 as count FROM users\")\n  .run();\n```\n\nBatch operations are atomic - they rollback automatically on error:\n\n```ts\ntry {\n  await ppg.batch<[number, User[]]>(\n    { exec: \"INSERT INTO users (name) VALUES ($1)\", parameters: [\"Dave\"] },\n    { query: \"SELECT * FROM invalid_table\", parameters: [] } // Fails\n  );\n} catch (error) {\n  // First insert is rolled back\n}\n```\n\n### Type Support\n\nWhen using `defaultClientConfig()`, the client automatically handles PostgreSQL types:\n\n```ts\nimport { prismaPostgres, defaultClientConfig } from \"@prisma/ppg\";\n\nconst ppg = prismaPostgres(defaultClientConfig(process.env.DATABASE_URL!));\n\n// JSON/JSONB - automatic parsing\nconst rows = await ppg.sql<{ data: { key: string } }>`\n  SELECT '{\"key\": \"value\"}'::jsonb as data\n`.collect();\nconsole.log(rows[0].data.key); // \"value\" (already parsed)\n\n// BigInt - parsed to JavaScript BigInt\nconst bigints = await ppg.sql<{ big: bigint }>`\n  SELECT 9007199254740991::int8 as big\n`.collect();\nconsole.log(typeof bigints[0].big); // \"bigint\"\n\n// Date/Timestamp - parsed to Date objects\nconst dates = await ppg.sql<{ created: Date }>`\n  SELECT NOW() as created\n`.collect();\nconsole.log(dates[0].created instanceof Date); // true\n\n// Date serialization - automatic conversion\nconst testDate = new Date(\"2024-01-15T10:30:00Z\");\nawait ppg.sql.exec`INSERT INTO events (timestamp) VALUES (${testDate})`;\n\n// Null handling\nconst rows2 = await ppg.sql<{ id: number | null; name: string | null }>`\n  SELECT NULL::int as id, 'test'::text as name\n`.collect();\n```\n\n#### Default Type Mappings\n\nWith `defaultClientConfig()`, the following types are automatically parsed:\n\n| PostgreSQL Type | JavaScript Type | OID |\n|----------------|-----------------|-----|\n| `boolean` | `boolean` | 16 |\n| `int2`, `int4` | `number` | 21, 23 |\n| `int8` | `bigint` | 20 |\n| `float4`, `float8` | `number` | 700, 701 |\n| `text`, `varchar` | `string` | 25, 1043 |\n| `json`, `jsonb` | `object` | 114, 3802 |\n| `date` | `Date` | 1082 |\n| `time` | `string` | 1083 |\n| `timestamp` | `Date` | 1114 |\n| `timestamptz` | `Date` | 1184 |\n\n---\n\n## Low-Level API: `client()`\n\nThe `client()` function provides direct control over query execution and session management.\n\n### Setup\n\n```ts\nimport { client, defaultClientConfig } from \"@prisma/ppg\";\n\n// Recommended: Use defaultClientConfig to include default parsers and serializers\nconst cl = client(\n  defaultClientConfig(\"postgres://identifier:key@db.prisma.io:5432/postgres?sslmode=require\")\n);\n\n// Or manually configure:\nconst clCustom = client({\n  connectionString: \"postgres://identifier:key@db.prisma.io:5432/postgres?sslmode=require\",\n  parsers: [/* your custom parsers */],\n  serializers: [/* your custom serializers */]\n});\n```\n\n> **Important**: Use `defaultClientConfig()` to get automatic type parsing (Date, JSON, BigInt, etc.) and serialization (Date, BigInt, Number).\n\n### Query Modes\n\n#### 1. Simple Query\n\n```ts\nconst result = await cl.query(\"SELECT * FROM users WHERE id = $1\", userId);\n\nconsole.log(result.columns); // Column metadata\nconst rows = await result.rows.collect(); // Collect all rows\nconsole.log(rows[0].values); // Access row values as array\n```\n\n#### 2. Exec for Write Operations\n\n```ts\nconst affected = await cl.exec(\"INSERT INTO users (name, email) VALUES ($1, $2)\", \"Alice\", \"alice@example.com\");\nconsole.log(`Affected ${affected} rows`);\n```\n\n#### 3. Async Iteration\n\n```ts\nconst result = await cl.query(\"SELECT * FROM users\");\n\nfor await (const row of result.rows) {\n  console.log(row.values); // Process one row at a time\n}\n```\n\n### Sessions\n\nSessions provide stateful connections for transactions and sequential operations.\n\n#### Creating and Using Sessions\n\n```ts\nconst session = await cl.newSession();\n\n// Execute queries in the session\nconst result = await session.query(\"SELECT 1\");\nconst rows = await result.rows.collect();\n\n// Close the session when done\nsession.close();\n```\n\n#### Using Declaration (Automatic Cleanup)\n\n```ts\n{\n  using session = await cl.newSession();\n\n  await session.query(\"SELECT 1\");\n\n  // Session automatically closes when leaving scope\n}\n```\n\n#### Manual Transactions with Sessions\n\n```ts\nconst session = await cl.newSession();\n\nawait session.query(\"BEGIN\");\ntry {\n  await session.query(\"INSERT INTO users (name) VALUES ($1)\", \"Alice\");\n  const result = await session.query(\"SELECT * FROM users WHERE name = $1\", \"Alice\");\n  await session.query(\"COMMIT\");\n} catch (error) {\n  await session.query(\"ROLLBACK\");\n  throw error;\n} finally {\n  session.close();\n}\n```\n\n#### Concurrent Queries in Session\n\nSessions can handle concurrent queries via WebSocket multiplexing:\n\n```ts\nconst session = await cl.newSession();\n\nconst [res1, res2, res3] = await Promise.all([\n  session.query(\"SELECT 1\"),\n  session.query(\"SELECT 2\"),\n  session.query(\"SELECT 3\")\n]);\n\nconst rows1 = await res1.rows.collect();\nconst rows2 = await res2.rows.collect();\nconst rows3 = await res3.rows.collect();\n\nsession.close();\n```\n\n### Result Handling\n\n#### Column Metadata\n\n```ts\nconst result = await cl.query(\"SELECT id, name FROM users\");\n\nresult.columns.forEach(col => {\n  console.log(col.name);  // Column name\n  console.log(col.oid);   // PostgreSQL type OID\n});\n```\n\n#### Row Values\n\n```ts\nconst result = await cl.query(\"SELECT id, name FROM users\");\nconst rows = await result.rows.collect();\n\nrows.forEach(row => {\n  const [id, name] = row.values;\n  console.log(id, name);\n});\n```\n\n### Custom Type Handling\n\n#### Custom Parsers\n\nYou can override or add parsers on top of the defaults:\n\n```ts\nimport { client, defaultClientConfig } from \"@prisma/ppg\";\nimport type { ValueParser } from \"@prisma/ppg\";\n\nconst uuidParser: ValueParser<string> = {\n  oid: 2950, // UUID type OID\n  parse: (value: string | null) => value ? value.toUpperCase() : null\n};\n\nconst config = defaultClientConfig(\"postgres://identifier:key@db.prisma.io:5432/postgres?sslmode=require\");\nconst cl = client({\n  ...config,\n  parsers: [...config.parsers, uuidParser], // Add to defaults\n});\n\n// Or replace defaults entirely:\nconst clCustom = client({\n  connectionString: \"postgres://identifier:key@db.prisma.io:5432/postgres?sslmode=require\",\n  parsers: [uuidParser], // Only your custom parsers\n});\n```\n\n#### Custom Serializers\n\nAdd custom serializers on top of defaults:\n\n```ts\nimport { client, defaultClientConfig } from \"@prisma/ppg\";\nimport type { ValueSerializer } from \"@prisma/ppg\";\n\nclass Point { constructor(public x: number, public y: number) {} }\n\nconst pointSerializer: ValueSerializer<Point> = {\n  supports: (value: unknown): value is Point => value instanceof Point,\n  serialize: (value: Point) => `(${value.x},${value.y})`\n};\n\nconst config = defaultClientConfig(\"postgres://identifier:key@db.prisma.io:5432/postgres?sslmode=require\");\nconst cl = client({\n  ...config,\n  serializers: [pointSerializer, ...config.serializers], // Your serializer first\n});\n\nawait cl.query(\"INSERT INTO locations (point) VALUES ($1)\", new Point(10, 20));\n```\n\n> **Note**: Custom serializers are checked in order. Put your custom serializers before defaults so they take precedence.\n\n### Binary Parameters\n\nSend binary data efficiently:\n\n```ts\nimport { byteArrayParameter, boundedByteStreamParameter, BINARY, TEXT } from \"@prisma/ppg\";\n\n// From Uint8Array\nconst bytes = new Uint8Array([1, 2, 3, 4]);\nconst param = byteArrayParameter(bytes, BINARY);\nawait cl.query(\"INSERT INTO files (data) VALUES ($1)\", param);\n\n// From ReadableStream\nconst stream = getReadableStream();\nconst streamParam = boundedByteStreamParameter(stream, BINARY, 1024);\nawait cl.query(\"INSERT INTO files (data) VALUES ($1)\", streamParam);\n```\n\n---\n\n## Error Handling\n\nThe library provides a structured error hierarchy:\n\n```ts\nimport {\n  GenericError,       // Base error class\n  ValidationError,    // Invalid input or configuration\n  HttpResponseError,  // HTTP transport errors\n  WebSocketError,     // WebSocket transport errors\n  DatabaseError       // PostgreSQL errors\n} from \"@prisma/ppg\";\n\ntry {\n  await ppg.sql`SELECT * FROM invalid_table`.collect();\n} catch (error) {\n  if (error instanceof DatabaseError) {\n    console.log(error.code);    // PostgreSQL error code (e.g., \"42P01\")\n    console.log(error.details); // Additional error details\n  }\n}\n```\n\n---\n\n## API Reference\n\n### `defaultClientConfig(connectionString: string | URL): ClientConfig`\n\nCreates a client configuration with default parsers and serializers.\n\nReturns:\n- `connectionString: string` - The connection URL\n- `parsers: ValueParser<unknown>[]` - Default type parsers (Date, JSON, BigInt, etc.)\n- `serializers: ValueSerializer<unknown>[]` - Default type serializers (Date, BigInt, Number)\n\n```ts\nimport { prismaPostgres, defaultClientConfig } from \"@prisma/ppg\";\n\nconst ppg = prismaPostgres(defaultClientConfig(process.env.DATABASE_URL!));\n```\n\n### `prismaPostgres(config: PrismaPostgresConfig): PrismaPostgres`\n\nConfiguration:\n- `connectionString: string` - PostgreSQL connection URL\n- `parsers?: ValueParser<unknown>[]` - Custom type parsers (use `defaultClientConfig` for defaults)\n- `serializers?: ValueSerializer<unknown>[]` - Custom type serializers (use `defaultClientConfig` for defaults)\n\nReturns:\n- `sql` - SQL template literal tag\n- `sql.exec` - SQL template literal for exec operations\n- `query<R>(sql, ...params): CollectableIterator<R>` - Execute query with explicit parameters\n- `exec(sql, ...params): Promise<number>` - Execute command with explicit parameters\n- `transaction<T>(callback): Promise<T>` - Execute interactive transaction\n- `batch(...statements)` - Execute batch operations\n- `batch()` - Start fluent batch builder\n\n### `client(config: ClientConfig): Client`\n\nConfiguration:\n- `connectionString: string` - PostgreSQL connection URL\n- `parsers?: ValueParser<unknown>[]` - Custom type parsers (use `defaultClientConfig` for defaults)\n- `serializers?: ValueSerializer<unknown>[]` - Custom type serializers (use `defaultClientConfig` for defaults)\n\nReturns:\n- `query(sql, ...params): Promise<Resultset>` - Execute query\n- `exec(sql, ...params): Promise<number>` - Execute command\n- `newSession(config?: SessionConfig): Promise<Session>` - Create new session\n\n### Types\n\n```ts\ninterface CollectableIterator<T> extends AsyncIterableIterator<T> {\n  collect(): Promise<T[]>;\n}\n\ninterface Resultset {\n  columns: Column[];\n  rows: CollectableIterator<Row>;\n}\n\ninterface Row {\n  values: unknown[];\n}\n\ninterface Column {\n  name: string;\n  oid: number;\n}\n\ninterface Session extends Statements, Disposable {\n  readonly active: boolean;\n  close(): void;\n}\n```\n\n---\n\n## License\n\nApache-2.0","readmeFilename":"README.md"}