equipped 5.2.9 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +95 -0
- package/README.md +362 -34
- package/dist/cjs/cache/adapters/in-memory/index.cjs +824 -0
- package/dist/cjs/cache/adapters/in-memory/index.cjs.map +1 -0
- package/dist/cjs/cache/adapters/in-memory/index.min.cjs +4 -0
- package/dist/cjs/cache/adapters/in-memory/index.min.cjs.map +1 -0
- package/dist/cjs/cache/adapters/redis/index.cjs +844 -0
- package/dist/cjs/cache/adapters/redis/index.cjs.map +1 -0
- package/dist/cjs/cache/adapters/redis/index.min.cjs +4 -0
- package/dist/cjs/cache/adapters/redis/index.min.cjs.map +1 -0
- package/dist/cjs/cache/index.cjs +602 -4
- package/dist/cjs/cache/index.cjs.map +1 -1
- package/dist/cjs/cache/index.min.cjs +3 -1
- package/dist/cjs/cache/index.min.cjs.map +1 -1
- package/dist/cjs/dbs/adapters/mongodb/index.cjs +1314 -0
- package/dist/cjs/dbs/adapters/mongodb/index.cjs.map +1 -0
- package/dist/cjs/dbs/adapters/mongodb/index.min.cjs +4 -0
- package/dist/cjs/dbs/adapters/mongodb/index.min.cjs.map +1 -0
- package/dist/cjs/dbs/index.cjs +965 -6
- package/dist/cjs/dbs/index.cjs.map +1 -1
- package/dist/cjs/dbs/index.min.cjs +3 -1
- package/dist/cjs/dbs/index.min.cjs.map +1 -1
- package/dist/cjs/errors/index.cjs +127 -8
- package/dist/cjs/errors/index.cjs.map +1 -1
- package/dist/cjs/errors/index.min.cjs +1 -1
- package/dist/cjs/errors/index.min.cjs.map +1 -1
- package/dist/cjs/events/adapters/kafka/index.cjs +845 -0
- package/dist/cjs/events/adapters/kafka/index.cjs.map +1 -0
- package/dist/cjs/events/adapters/kafka/index.min.cjs +4 -0
- package/dist/cjs/events/adapters/kafka/index.min.cjs.map +1 -0
- package/dist/cjs/events/adapters/rabbitmq/index.cjs +836 -0
- package/dist/cjs/events/adapters/rabbitmq/index.cjs.map +1 -0
- package/dist/cjs/events/adapters/rabbitmq/index.min.cjs +4 -0
- package/dist/cjs/events/adapters/rabbitmq/index.min.cjs.map +1 -0
- package/dist/cjs/events/index.cjs +33 -4
- package/dist/cjs/events/index.cjs.map +1 -1
- package/dist/cjs/events/index.min.cjs +1 -1
- package/dist/cjs/events/index.min.cjs.map +1 -1
- package/dist/cjs/index.cjs +588 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.min.cjs +3 -1
- package/dist/cjs/index.min.cjs.map +1 -1
- package/dist/cjs/instance/index.cjs +514 -64
- package/dist/cjs/instance/index.cjs.map +1 -1
- package/dist/cjs/instance/index.min.cjs +3 -3
- package/dist/cjs/instance/index.min.cjs.map +1 -1
- package/dist/cjs/jobs/adapters/redis/index.cjs +979 -0
- package/dist/cjs/jobs/adapters/redis/index.cjs.map +1 -0
- package/dist/cjs/jobs/adapters/redis/index.min.cjs +4 -0
- package/dist/cjs/jobs/adapters/redis/index.min.cjs.map +1 -0
- package/dist/cjs/jobs/index.cjs +55 -2
- package/dist/cjs/jobs/index.cjs.map +1 -1
- package/dist/cjs/jobs/index.min.cjs +1 -1
- package/dist/cjs/jobs/index.min.cjs.map +1 -1
- package/dist/cjs/orm/adapters/in-memory/index.cjs +2551 -0
- package/dist/cjs/orm/adapters/in-memory/index.cjs.map +1 -0
- package/dist/cjs/orm/adapters/in-memory/index.min.cjs +4 -0
- package/dist/cjs/orm/adapters/in-memory/index.min.cjs.map +1 -0
- package/dist/cjs/orm/adapters/json/index.cjs +3518 -0
- package/dist/cjs/orm/adapters/json/index.cjs.map +1 -0
- package/dist/cjs/orm/adapters/json/index.min.cjs +4 -0
- package/dist/cjs/orm/adapters/json/index.min.cjs.map +1 -0
- package/dist/cjs/orm/adapters/mongodb/index.cjs +3299 -0
- package/dist/cjs/orm/adapters/mongodb/index.cjs.map +1 -0
- package/dist/cjs/orm/adapters/mongodb/index.min.cjs +4 -0
- package/dist/cjs/orm/adapters/mongodb/index.min.cjs.map +1 -0
- package/dist/cjs/orm/adapters/postgresql/index.cjs +4114 -0
- package/dist/cjs/orm/adapters/postgresql/index.cjs.map +1 -0
- package/dist/cjs/orm/adapters/postgresql/index.min.cjs +49 -0
- package/dist/cjs/orm/adapters/postgresql/index.min.cjs.map +1 -0
- package/dist/cjs/orm/index.cjs +9216 -0
- package/dist/cjs/orm/index.cjs.map +1 -0
- package/dist/cjs/orm/index.min.cjs +4 -0
- package/dist/cjs/orm/index.min.cjs.map +1 -0
- package/dist/cjs/server/adapters/express/index.cjs +1967 -0
- package/dist/cjs/server/adapters/express/index.cjs.map +1 -0
- package/dist/cjs/server/adapters/express/index.min.cjs +32 -0
- package/dist/cjs/server/adapters/express/index.min.cjs.map +1 -0
- package/dist/cjs/server/adapters/fastify/index.cjs +1974 -0
- package/dist/cjs/server/adapters/fastify/index.cjs.map +1 -0
- package/dist/cjs/server/adapters/fastify/index.min.cjs +32 -0
- package/dist/cjs/server/adapters/fastify/index.min.cjs.map +1 -0
- package/dist/cjs/server/index.cjs +1811 -9
- package/dist/cjs/server/index.cjs.map +1 -1
- package/dist/cjs/server/index.min.cjs +31 -1
- package/dist/cjs/server/index.min.cjs.map +1 -1
- package/dist/cjs/types/index.cjs +18 -1
- package/dist/cjs/types/index.cjs.map +1 -1
- package/dist/cjs/types/index.min.cjs +1 -1
- package/dist/cjs/types/index.min.cjs.map +1 -1
- package/dist/cjs/utilities/index.cjs +862 -7
- package/dist/cjs/utilities/index.cjs.map +1 -1
- package/dist/cjs/utilities/index.min.cjs +3 -1
- package/dist/cjs/utilities/index.min.cjs.map +1 -1
- package/dist/cjs/validations/index.cjs +679 -10
- package/dist/cjs/validations/index.cjs.map +1 -1
- package/dist/cjs/validations/index.min.cjs +3 -1
- package/dist/cjs/validations/index.min.cjs.map +1 -1
- package/dist/esm/cache/adapters/in-memory/index.min.mjs +2 -0
- package/dist/esm/cache/adapters/in-memory/index.min.mjs.map +1 -0
- package/dist/esm/cache/adapters/in-memory/index.mjs +93 -0
- package/dist/esm/cache/adapters/in-memory/index.mjs.map +1 -0
- package/dist/esm/cache/adapters/redis/index.min.mjs +2 -0
- package/dist/esm/cache/adapters/redis/index.mjs +13 -0
- package/dist/esm/cache/index.min.mjs +1 -1
- package/dist/esm/cache/index.min.mjs.map +1 -1
- package/dist/esm/cache/index.mjs +9 -4
- package/dist/esm/cache/index.mjs.map +1 -1
- package/dist/esm/chunk-4JLDXF7T.min.mjs +2 -0
- package/dist/esm/chunk-4JLDXF7T.min.mjs.map +1 -0
- package/dist/{types/events/types/kafka.js → esm/chunk-4MXYZS5R.mjs} +60 -37
- package/dist/esm/chunk-4MXYZS5R.mjs.map +1 -0
- package/dist/esm/chunk-5VW3JAFR.min.mjs +2 -0
- package/dist/esm/chunk-5VW3JAFR.min.mjs.map +1 -0
- package/dist/esm/chunk-AKQBDYUO.mjs +126 -0
- package/dist/esm/chunk-AKQBDYUO.mjs.map +1 -0
- package/dist/esm/chunk-AQY7QVYI.min.mjs +2 -0
- package/dist/esm/chunk-B5QQ32YY.min.mjs +2 -0
- package/dist/esm/chunk-B5QQ32YY.min.mjs.map +1 -0
- package/dist/esm/chunk-BJNIUCPT.min.mjs +2 -0
- package/dist/esm/chunk-BJNIUCPT.min.mjs.map +1 -0
- package/dist/esm/chunk-DKPZJIIR.mjs +29 -0
- package/dist/esm/chunk-DKPZJIIR.mjs.map +1 -0
- package/dist/esm/chunk-DSUJ5FUL.min.mjs +2 -0
- package/dist/esm/chunk-DSUJ5FUL.min.mjs.map +1 -0
- package/dist/esm/chunk-FLAPYQUT.min.mjs +32 -0
- package/dist/esm/chunk-FLAPYQUT.min.mjs.map +1 -0
- package/dist/esm/chunk-J5LGTIGS.mjs +10 -0
- package/dist/esm/chunk-JH6EBXY4.mjs +53 -0
- package/dist/esm/chunk-JH6EBXY4.mjs.map +1 -0
- package/dist/esm/chunk-MDQKODYQ.mjs +2035 -0
- package/dist/esm/chunk-MDQKODYQ.mjs.map +1 -0
- package/dist/esm/chunk-PCAUXBAG.min.mjs +2 -0
- package/dist/esm/chunk-PCAUXBAG.min.mjs.map +1 -0
- package/dist/esm/chunk-PNZNNUMN.mjs +113 -0
- package/dist/esm/chunk-PNZNNUMN.mjs.map +1 -0
- package/dist/esm/chunk-PQCBVQL6.mjs +1280 -0
- package/dist/esm/chunk-PQCBVQL6.mjs.map +1 -0
- package/dist/esm/chunk-QHLKB47N.min.mjs +2 -0
- package/dist/esm/chunk-QHLKB47N.min.mjs.map +1 -0
- package/dist/esm/chunk-SGZNOYC3.min.mjs +2 -0
- package/dist/esm/chunk-SGZNOYC3.min.mjs.map +1 -0
- package/dist/esm/chunk-TVTYDU2D.mjs +795 -0
- package/dist/esm/chunk-TVTYDU2D.mjs.map +1 -0
- package/dist/esm/chunk-VCCS7CAI.mjs +8 -0
- package/dist/esm/chunk-VCCS7CAI.mjs.map +1 -0
- package/dist/esm/chunk-Z2TZ3KR7.mjs +22 -0
- package/dist/esm/chunk-Z2TZ3KR7.mjs.map +1 -0
- package/dist/esm/chunk-ZGMFFK6Y.min.mjs +2 -0
- package/dist/esm/chunk-ZGMFFK6Y.min.mjs.map +1 -0
- package/dist/esm/dbs/adapters/mongodb/index.min.mjs +2 -0
- package/dist/esm/dbs/adapters/mongodb/index.min.mjs.map +1 -0
- package/dist/esm/dbs/adapters/mongodb/index.mjs +419 -0
- package/dist/esm/dbs/adapters/mongodb/index.mjs.map +1 -0
- package/dist/esm/dbs/index.min.mjs +1 -1
- package/dist/esm/dbs/index.min.mjs.map +1 -1
- package/dist/esm/dbs/index.mjs +22 -6
- package/dist/esm/dbs/index.mjs.map +1 -1
- package/dist/esm/errors/index.min.mjs +1 -1
- package/dist/esm/errors/index.min.mjs.map +1 -1
- package/dist/esm/errors/index.mjs +22 -8
- package/dist/esm/errors/index.mjs.map +1 -1
- package/dist/esm/events/adapters/kafka/index.min.mjs +2 -0
- package/dist/esm/events/adapters/kafka/index.min.mjs.map +1 -0
- package/dist/esm/events/adapters/kafka/index.mjs +12 -0
- package/dist/esm/events/adapters/kafka/index.mjs.map +1 -0
- package/dist/esm/events/adapters/rabbitmq/index.min.mjs +2 -0
- package/dist/esm/events/adapters/rabbitmq/index.min.mjs.map +1 -0
- package/dist/esm/events/adapters/rabbitmq/index.mjs +92 -0
- package/dist/esm/events/adapters/rabbitmq/index.mjs.map +1 -0
- package/dist/esm/events/index.min.mjs +1 -1
- package/dist/esm/events/index.min.mjs.map +1 -1
- package/dist/esm/events/index.mjs +7 -4
- package/dist/esm/events/index.mjs.map +1 -1
- package/dist/esm/index.min.mjs +1 -1
- package/dist/esm/index.min.mjs.map +1 -1
- package/dist/esm/index.mjs +8 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/instance/index.min.mjs +1 -3
- package/dist/esm/instance/index.min.mjs.map +1 -1
- package/dist/esm/instance/index.mjs +4 -132
- package/dist/esm/instance/index.mjs.map +1 -1
- package/dist/esm/introspection-32BRYKYY.mjs +10 -0
- package/dist/esm/introspection-32BRYKYY.mjs.map +1 -0
- package/dist/esm/introspection-A72WMWE3.min.mjs +2 -0
- package/dist/esm/introspection-A72WMWE3.min.mjs.map +1 -0
- package/dist/esm/jobs/adapters/redis/index.min.mjs +2 -0
- package/dist/esm/jobs/adapters/redis/index.min.mjs.map +1 -0
- package/dist/esm/jobs/{types/redis.mjs → adapters/redis/index.mjs} +71 -56
- package/dist/esm/jobs/adapters/redis/index.mjs.map +1 -0
- package/dist/esm/jobs/index.min.mjs +1 -1
- package/dist/esm/jobs/index.min.mjs.map +1 -1
- package/dist/esm/jobs/index.mjs +9 -2
- package/dist/esm/jobs/index.mjs.map +1 -1
- package/dist/esm/orm/adapters/in-memory/index.min.mjs +2 -0
- package/dist/esm/orm/adapters/in-memory/index.min.mjs.map +1 -0
- package/dist/esm/orm/adapters/in-memory/index.mjs +11 -0
- package/dist/esm/orm/adapters/in-memory/index.mjs.map +1 -0
- package/dist/esm/orm/adapters/json/index.min.mjs +2 -0
- package/dist/esm/orm/adapters/json/index.min.mjs.map +1 -0
- package/dist/esm/orm/adapters/json/index.mjs +980 -0
- package/dist/esm/orm/adapters/json/index.mjs.map +1 -0
- package/dist/esm/orm/adapters/mongodb/index.min.mjs +2 -0
- package/dist/esm/orm/adapters/mongodb/index.min.mjs.map +1 -0
- package/dist/esm/orm/adapters/mongodb/index.mjs +1539 -0
- package/dist/esm/orm/adapters/mongodb/index.mjs.map +1 -0
- package/dist/esm/orm/adapters/postgresql/index.min.mjs +47 -0
- package/dist/esm/orm/adapters/postgresql/index.min.mjs.map +1 -0
- package/dist/esm/orm/adapters/postgresql/index.mjs +2070 -0
- package/dist/esm/orm/adapters/postgresql/index.mjs.map +1 -0
- package/dist/esm/orm/index.min.mjs +2 -0
- package/dist/esm/orm/index.min.mjs.map +1 -0
- package/dist/esm/orm/index.mjs +7326 -0
- package/dist/esm/orm/index.mjs.map +1 -0
- package/dist/esm/server/adapters/express/index.min.mjs +2 -0
- package/dist/esm/server/adapters/express/index.min.mjs.map +1 -0
- package/dist/esm/server/adapters/express/index.mjs +177 -0
- package/dist/esm/server/adapters/express/index.mjs.map +1 -0
- package/dist/esm/server/adapters/fastify/index.min.mjs +2 -0
- package/dist/esm/server/adapters/fastify/index.min.mjs.map +1 -0
- package/dist/esm/server/adapters/fastify/index.mjs +185 -0
- package/dist/esm/server/adapters/fastify/index.mjs.map +1 -0
- package/dist/esm/server/index.min.mjs +1 -1
- package/dist/esm/server/index.min.mjs.map +1 -1
- package/dist/esm/server/index.mjs +38 -9
- package/dist/esm/server/index.mjs.map +1 -1
- package/dist/esm/types/index.min.mjs +0 -1
- package/dist/esm/types/index.min.mjs.map +1 -1
- package/dist/esm/types/index.mjs +0 -1
- package/dist/esm/types/index.mjs.map +1 -1
- package/dist/esm/utilities/index.min.mjs +1 -1
- package/dist/esm/utilities/index.min.mjs.map +1 -1
- package/dist/esm/utilities/index.mjs +22 -9
- package/dist/esm/utilities/index.mjs.map +1 -1
- package/dist/esm/validations/index.min.mjs +1 -1
- package/dist/esm/validations/index.min.mjs.map +1 -1
- package/dist/esm/validations/index.mjs +8 -18
- package/dist/esm/validations/index.mjs.map +1 -1
- package/dist/types/adapter-Coap9ISX.d.ts +1435 -0
- package/dist/types/{fastify-DLPUK3vD.d.ts → base-DVr0fHil.d.ts} +76 -143
- package/dist/types/cache/adapters/in-memory/index.d.ts +21 -0
- package/dist/types/cache/adapters/in-memory/index.js +92 -0
- package/dist/types/cache/adapters/redis/index.d.ts +73 -0
- package/dist/types/cache/adapters/redis/index.js +12 -0
- package/dist/types/cache/index.d.ts +2 -42
- package/dist/types/cache/index.js +9 -4
- package/dist/types/chunk-3M4PBZAQ.js +125 -0
- package/dist/types/chunk-3TKJGSCZ.js +21 -0
- package/dist/types/chunk-65EHKCDZ.js +112 -0
- package/dist/types/chunk-JQ2FWX4W.js +1279 -0
- package/dist/types/chunk-KZKFYO4V.js +7 -0
- package/dist/types/chunk-LN3A6R4Y.js +28 -0
- package/dist/types/chunk-MLKGABMK.js +9 -0
- package/dist/types/chunk-NJ2FHI3U.js +794 -0
- package/dist/types/chunk-OHFTQGQG.js +52 -0
- package/dist/{esm/events/types/kafka.mjs → types/chunk-XGGGAEET.js} +59 -38
- package/dist/types/chunk-YTY3EFNB.js +2034 -0
- package/dist/types/{core-BrkNSwvc.d.ts → core-tNlIMH9Y.d.ts} +48 -38
- package/dist/types/dbs/adapters/mongodb/index.d.ts +43 -0
- package/dist/types/dbs/adapters/mongodb/index.js +418 -0
- package/dist/types/dbs/index.d.ts +14 -12
- package/dist/types/dbs/index.js +22 -6
- package/dist/types/equippedError-Cmo60Kn-.d.ts +8 -0
- package/dist/types/errors/index.d.ts +3 -3
- package/dist/types/errors/index.js +22 -8
- package/dist/types/events/adapters/kafka/index.d.ts +83 -0
- package/dist/types/events/adapters/kafka/index.js +11 -0
- package/dist/types/events/adapters/rabbitmq/index.d.ts +41 -0
- package/dist/types/events/adapters/rabbitmq/index.js +91 -0
- package/dist/types/events/index.d.ts +11 -11
- package/dist/types/events/index.js +7 -4
- package/dist/types/index.d.ts +2 -25
- package/dist/types/index.js +8 -1
- package/dist/types/instance/index.d.ts +12 -179
- package/dist/types/instance/index.js +4 -132
- package/dist/types/introspection-VOIU3XE6.js +9 -0
- package/dist/types/jobs/adapters/redis/index.d.ts +93 -0
- package/dist/types/jobs/{types/redis.js → adapters/redis/index.js} +70 -55
- package/dist/types/jobs/index.d.ts +19 -35
- package/dist/types/jobs/index.js +9 -2
- package/dist/types/orm/adapters/in-memory/index.d.ts +92 -0
- package/dist/types/orm/adapters/in-memory/index.js +10 -0
- package/dist/types/orm/adapters/json/index.d.ts +72 -0
- package/dist/types/orm/adapters/json/index.js +979 -0
- package/dist/types/orm/adapters/mongodb/index.d.ts +74 -0
- package/dist/types/orm/adapters/mongodb/index.js +1538 -0
- package/dist/types/orm/adapters/postgresql/index.d.ts +112 -0
- package/dist/types/orm/adapters/postgresql/index.js +2069 -0
- package/dist/types/orm/index.d.ts +160 -0
- package/dist/types/orm/index.js +7325 -0
- package/dist/types/{requestError-C2PNWUrt.d.ts → requestError-DdaL8hc3.d.ts} +2 -8
- package/dist/types/server/adapters/express/index.d.ts +196 -0
- package/dist/types/server/adapters/express/index.js +176 -0
- package/dist/types/server/adapters/fastify/index.d.ts +221 -0
- package/dist/types/server/adapters/fastify/index.js +184 -0
- package/dist/types/server/index.d.ts +10 -11
- package/dist/types/server/index.js +38 -9
- package/dist/types/types/index.js +0 -1
- package/dist/types/utilities/index.d.ts +22 -9
- package/dist/types/utilities/index.js +22 -9
- package/dist/types/{validationError-Bw8OYv5s.d.ts → validationError-oigtHqBi.d.ts} +1 -1
- package/dist/types/validations/index.d.ts +3 -2
- package/dist/types/validations/index.js +8 -18
- package/package.json +155 -18
- package/dist/cjs/audit/events.cjs +0 -101
- package/dist/cjs/audit/events.cjs.map +0 -1
- package/dist/cjs/audit/events.min.cjs +0 -2
- package/dist/cjs/audit/events.min.cjs.map +0 -1
- package/dist/cjs/audit/index.cjs +0 -2
- package/dist/cjs/audit/index.cjs.map +0 -1
- package/dist/cjs/audit/index.min.cjs +0 -2
- package/dist/cjs/audit/index.min.cjs.map +0 -1
- package/dist/cjs/cache/base.cjs +0 -6
- package/dist/cjs/cache/base.cjs.map +0 -1
- package/dist/cjs/cache/base.min.cjs +0 -2
- package/dist/cjs/cache/base.min.cjs.map +0 -1
- package/dist/cjs/cache/pipes.cjs +0 -16
- package/dist/cjs/cache/pipes.cjs.map +0 -1
- package/dist/cjs/cache/pipes.min.cjs +0 -2
- package/dist/cjs/cache/pipes.min.cjs.map +0 -1
- package/dist/cjs/cache/types/in-memory.cjs +0 -47
- package/dist/cjs/cache/types/in-memory.cjs.map +0 -1
- package/dist/cjs/cache/types/in-memory.min.cjs +0 -2
- package/dist/cjs/cache/types/in-memory.min.cjs.map +0 -1
- package/dist/cjs/cache/types/redis.cjs +0 -55
- package/dist/cjs/cache/types/redis.cjs.map +0 -1
- package/dist/cjs/cache/types/redis.min.cjs +0 -2
- package/dist/cjs/cache/types/redis.min.cjs.map +0 -1
- package/dist/cjs/dbs/base/changes.cjs +0 -36
- package/dist/cjs/dbs/base/changes.cjs.map +0 -1
- package/dist/cjs/dbs/base/changes.min.cjs +0 -2
- package/dist/cjs/dbs/base/changes.min.cjs.map +0 -1
- package/dist/cjs/dbs/base/core.cjs +0 -1
- package/dist/cjs/dbs/base/core.cjs.map +0 -1
- package/dist/cjs/dbs/base/core.min.cjs +0 -1
- package/dist/cjs/dbs/base/core.min.cjs.map +0 -1
- package/dist/cjs/dbs/base/db.cjs +0 -14
- package/dist/cjs/dbs/base/db.cjs.map +0 -1
- package/dist/cjs/dbs/base/db.min.cjs +0 -2
- package/dist/cjs/dbs/base/db.min.cjs.map +0 -1
- package/dist/cjs/dbs/base/types.cjs +0 -2
- package/dist/cjs/dbs/base/types.cjs.map +0 -1
- package/dist/cjs/dbs/base/types.min.cjs +0 -2
- package/dist/cjs/dbs/base/types.min.cjs.map +0 -1
- package/dist/cjs/dbs/mongo/changes.cjs +0 -81
- package/dist/cjs/dbs/mongo/changes.cjs.map +0 -1
- package/dist/cjs/dbs/mongo/changes.min.cjs +0 -2
- package/dist/cjs/dbs/mongo/changes.min.cjs.map +0 -1
- package/dist/cjs/dbs/mongo/db.cjs +0 -225
- package/dist/cjs/dbs/mongo/db.cjs.map +0 -1
- package/dist/cjs/dbs/mongo/db.min.cjs +0 -2
- package/dist/cjs/dbs/mongo/db.min.cjs.map +0 -1
- package/dist/cjs/dbs/mongo/query.cjs +0 -66
- package/dist/cjs/dbs/mongo/query.cjs.map +0 -1
- package/dist/cjs/dbs/mongo/query.min.cjs +0 -2
- package/dist/cjs/dbs/mongo/query.min.cjs.map +0 -1
- package/dist/cjs/dbs/pipes.cjs +0 -104
- package/dist/cjs/dbs/pipes.cjs.map +0 -1
- package/dist/cjs/dbs/pipes.min.cjs +0 -2
- package/dist/cjs/dbs/pipes.min.cjs.map +0 -1
- package/dist/cjs/errors/equippedError.cjs +0 -12
- package/dist/cjs/errors/equippedError.cjs.map +0 -1
- package/dist/cjs/errors/equippedError.min.cjs +0 -2
- package/dist/cjs/errors/equippedError.min.cjs.map +0 -1
- package/dist/cjs/errors/requestError.cjs +0 -12
- package/dist/cjs/errors/requestError.cjs.map +0 -1
- package/dist/cjs/errors/requestError.min.cjs +0 -2
- package/dist/cjs/errors/requestError.min.cjs.map +0 -1
- package/dist/cjs/errors/types/badRequestError.cjs +0 -12
- package/dist/cjs/errors/types/badRequestError.cjs.map +0 -1
- package/dist/cjs/errors/types/badRequestError.min.cjs +0 -2
- package/dist/cjs/errors/types/badRequestError.min.cjs.map +0 -1
- package/dist/cjs/errors/types/notAuthenticatedError.cjs +0 -12
- package/dist/cjs/errors/types/notAuthenticatedError.cjs.map +0 -1
- package/dist/cjs/errors/types/notAuthenticatedError.min.cjs +0 -2
- package/dist/cjs/errors/types/notAuthenticatedError.min.cjs.map +0 -1
- package/dist/cjs/errors/types/notAuthorizedError.cjs +0 -12
- package/dist/cjs/errors/types/notAuthorizedError.cjs.map +0 -1
- package/dist/cjs/errors/types/notAuthorizedError.min.cjs +0 -2
- package/dist/cjs/errors/types/notAuthorizedError.min.cjs.map +0 -1
- package/dist/cjs/errors/types/notFoundError.cjs +0 -12
- package/dist/cjs/errors/types/notFoundError.cjs.map +0 -1
- package/dist/cjs/errors/types/notFoundError.min.cjs +0 -2
- package/dist/cjs/errors/types/notFoundError.min.cjs.map +0 -1
- package/dist/cjs/errors/types/tokenExpired.cjs +0 -12
- package/dist/cjs/errors/types/tokenExpired.cjs.map +0 -1
- package/dist/cjs/errors/types/tokenExpired.min.cjs +0 -2
- package/dist/cjs/errors/types/tokenExpired.min.cjs.map +0 -1
- package/dist/cjs/errors/types/validationError.cjs +0 -16
- package/dist/cjs/errors/types/validationError.cjs.map +0 -1
- package/dist/cjs/errors/types/validationError.min.cjs +0 -2
- package/dist/cjs/errors/types/validationError.min.cjs.map +0 -1
- package/dist/cjs/events/base.cjs +0 -6
- package/dist/cjs/events/base.cjs.map +0 -1
- package/dist/cjs/events/base.min.cjs +0 -2
- package/dist/cjs/events/base.min.cjs.map +0 -1
- package/dist/cjs/events/pipes.cjs +0 -28
- package/dist/cjs/events/pipes.cjs.map +0 -1
- package/dist/cjs/events/pipes.min.cjs +0 -2
- package/dist/cjs/events/pipes.min.cjs.map +0 -1
- package/dist/cjs/events/types/kafka.cjs +0 -80
- package/dist/cjs/events/types/kafka.cjs.map +0 -1
- package/dist/cjs/events/types/kafka.min.cjs +0 -2
- package/dist/cjs/events/types/kafka.min.cjs.map +0 -1
- package/dist/cjs/events/types/rabbitmq.cjs +0 -54
- package/dist/cjs/events/types/rabbitmq.cjs.map +0 -1
- package/dist/cjs/events/types/rabbitmq.min.cjs +0 -2
- package/dist/cjs/events/types/rabbitmq.min.cjs.map +0 -1
- package/dist/cjs/instance/hooks.cjs +0 -26
- package/dist/cjs/instance/hooks.cjs.map +0 -1
- package/dist/cjs/instance/hooks.min.cjs +0 -2
- package/dist/cjs/instance/hooks.min.cjs.map +0 -1
- package/dist/cjs/instance/settings.cjs +0 -57
- package/dist/cjs/instance/settings.cjs.map +0 -1
- package/dist/cjs/instance/settings.min.cjs +0 -2
- package/dist/cjs/instance/settings.min.cjs.map +0 -1
- package/dist/cjs/jobs/pipes.cjs +0 -13
- package/dist/cjs/jobs/pipes.cjs.map +0 -1
- package/dist/cjs/jobs/pipes.min.cjs +0 -2
- package/dist/cjs/jobs/pipes.min.cjs.map +0 -1
- package/dist/cjs/jobs/types/redis.cjs +0 -106
- package/dist/cjs/jobs/types/redis.cjs.map +0 -1
- package/dist/cjs/jobs/types/redis.min.cjs +0 -2
- package/dist/cjs/jobs/types/redis.min.cjs.map +0 -1
- package/dist/cjs/server/impls/base.cjs +0 -211
- package/dist/cjs/server/impls/base.cjs.map +0 -1
- package/dist/cjs/server/impls/base.min.cjs +0 -2
- package/dist/cjs/server/impls/base.min.cjs.map +0 -1
- package/dist/cjs/server/impls/express.cjs +0 -111
- package/dist/cjs/server/impls/express.cjs.map +0 -1
- package/dist/cjs/server/impls/express.min.cjs +0 -2
- package/dist/cjs/server/impls/express.min.cjs.map +0 -1
- package/dist/cjs/server/impls/fastify.cjs +0 -121
- package/dist/cjs/server/impls/fastify.cjs.map +0 -1
- package/dist/cjs/server/impls/fastify.min.cjs +0 -2
- package/dist/cjs/server/impls/fastify.min.cjs.map +0 -1
- package/dist/cjs/server/middlewares/index.cjs +0 -2
- package/dist/cjs/server/middlewares/index.cjs.map +0 -1
- package/dist/cjs/server/middlewares/index.min.cjs +0 -2
- package/dist/cjs/server/middlewares/index.min.cjs.map +0 -1
- package/dist/cjs/server/middlewares/requireAuthUser.cjs +0 -22
- package/dist/cjs/server/middlewares/requireAuthUser.cjs.map +0 -1
- package/dist/cjs/server/middlewares/requireAuthUser.min.cjs +0 -2
- package/dist/cjs/server/middlewares/requireAuthUser.min.cjs.map +0 -1
- package/dist/cjs/server/openapi.cjs +0 -191
- package/dist/cjs/server/openapi.cjs.map +0 -1
- package/dist/cjs/server/openapi.min.cjs +0 -30
- package/dist/cjs/server/openapi.min.cjs.map +0 -1
- package/dist/cjs/server/pipes.cjs +0 -67
- package/dist/cjs/server/pipes.cjs.map +0 -1
- package/dist/cjs/server/pipes.min.cjs +0 -2
- package/dist/cjs/server/pipes.min.cjs.map +0 -1
- package/dist/cjs/server/requests-auth-methods/apiKeys.cjs +0 -21
- package/dist/cjs/server/requests-auth-methods/apiKeys.cjs.map +0 -1
- package/dist/cjs/server/requests-auth-methods/apiKeys.min.cjs +0 -2
- package/dist/cjs/server/requests-auth-methods/apiKeys.min.cjs.map +0 -1
- package/dist/cjs/server/requests-auth-methods/base.cjs +0 -20
- package/dist/cjs/server/requests-auth-methods/base.cjs.map +0 -1
- package/dist/cjs/server/requests-auth-methods/base.min.cjs +0 -2
- package/dist/cjs/server/requests-auth-methods/base.min.cjs.map +0 -1
- package/dist/cjs/server/requests-auth-methods/index.cjs +0 -4
- package/dist/cjs/server/requests-auth-methods/index.cjs.map +0 -1
- package/dist/cjs/server/requests-auth-methods/index.min.cjs +0 -2
- package/dist/cjs/server/requests-auth-methods/index.min.cjs.map +0 -1
- package/dist/cjs/server/requests-auth-methods/jwt.cjs +0 -78
- package/dist/cjs/server/requests-auth-methods/jwt.cjs.map +0 -1
- package/dist/cjs/server/requests-auth-methods/jwt.min.cjs +0 -2
- package/dist/cjs/server/requests-auth-methods/jwt.min.cjs.map +0 -1
- package/dist/cjs/server/requests.cjs +0 -80
- package/dist/cjs/server/requests.cjs.map +0 -1
- package/dist/cjs/server/requests.min.cjs +0 -2
- package/dist/cjs/server/requests.min.cjs.map +0 -1
- package/dist/cjs/server/routes.cjs +0 -74
- package/dist/cjs/server/routes.cjs.map +0 -1
- package/dist/cjs/server/routes.min.cjs +0 -2
- package/dist/cjs/server/routes.min.cjs.map +0 -1
- package/dist/cjs/server/sockets.cjs +0 -126
- package/dist/cjs/server/sockets.cjs.map +0 -1
- package/dist/cjs/server/sockets.min.cjs +0 -2
- package/dist/cjs/server/sockets.min.cjs.map +0 -1
- package/dist/cjs/server/types.cjs +0 -34
- package/dist/cjs/server/types.cjs.map +0 -1
- package/dist/cjs/server/types.min.cjs +0 -2
- package/dist/cjs/server/types.min.cjs.map +0 -1
- package/dist/cjs/types/overrides.cjs +0 -1
- package/dist/cjs/types/overrides.cjs.map +0 -1
- package/dist/cjs/types/overrides.min.cjs +0 -1
- package/dist/cjs/types/overrides.min.cjs.map +0 -1
- package/dist/cjs/utilities/authProviders.cjs +0 -53
- package/dist/cjs/utilities/authProviders.cjs.map +0 -1
- package/dist/cjs/utilities/authProviders.min.cjs +0 -2
- package/dist/cjs/utilities/authProviders.min.cjs.map +0 -1
- package/dist/cjs/utilities/hash.cjs +0 -17
- package/dist/cjs/utilities/hash.cjs.map +0 -1
- package/dist/cjs/utilities/hash.min.cjs +0 -2
- package/dist/cjs/utilities/hash.min.cjs.map +0 -1
- package/dist/cjs/utilities/json.cjs +0 -16
- package/dist/cjs/utilities/json.cjs.map +0 -1
- package/dist/cjs/utilities/json.min.cjs +0 -2
- package/dist/cjs/utilities/json.min.cjs.map +0 -1
- package/dist/cjs/utilities/media.cjs +0 -13
- package/dist/cjs/utilities/media.cjs.map +0 -1
- package/dist/cjs/utilities/media.min.cjs +0 -2
- package/dist/cjs/utilities/media.min.cjs.map +0 -1
- package/dist/cjs/utilities/random.cjs +0 -12
- package/dist/cjs/utilities/random.cjs.map +0 -1
- package/dist/cjs/utilities/random.min.cjs +0 -2
- package/dist/cjs/utilities/random.min.cjs.map +0 -1
- package/dist/cjs/utilities/retry.cjs +0 -14
- package/dist/cjs/utilities/retry.cjs.map +0 -1
- package/dist/cjs/utilities/retry.min.cjs +0 -2
- package/dist/cjs/utilities/retry.min.cjs.map +0 -1
- package/dist/cjs/validations/valleyed.cjs +0 -43
- package/dist/cjs/validations/valleyed.cjs.map +0 -1
- package/dist/cjs/validations/valleyed.min.cjs +0 -2
- package/dist/cjs/validations/valleyed.min.cjs.map +0 -1
- package/dist/esm/audit/events.min.mjs +0 -2
- package/dist/esm/audit/events.min.mjs.map +0 -1
- package/dist/esm/audit/events.mjs +0 -101
- package/dist/esm/audit/events.mjs.map +0 -1
- package/dist/esm/audit/index.min.mjs +0 -2
- package/dist/esm/audit/index.min.mjs.map +0 -1
- package/dist/esm/audit/index.mjs +0 -2
- package/dist/esm/audit/index.mjs.map +0 -1
- package/dist/esm/cache/base.min.mjs +0 -2
- package/dist/esm/cache/base.min.mjs.map +0 -1
- package/dist/esm/cache/base.mjs +0 -6
- package/dist/esm/cache/base.mjs.map +0 -1
- package/dist/esm/cache/pipes.min.mjs +0 -2
- package/dist/esm/cache/pipes.min.mjs.map +0 -1
- package/dist/esm/cache/pipes.mjs +0 -16
- package/dist/esm/cache/pipes.mjs.map +0 -1
- package/dist/esm/cache/types/in-memory.min.mjs +0 -2
- package/dist/esm/cache/types/in-memory.min.mjs.map +0 -1
- package/dist/esm/cache/types/in-memory.mjs +0 -47
- package/dist/esm/cache/types/in-memory.mjs.map +0 -1
- package/dist/esm/cache/types/redis.min.mjs +0 -2
- package/dist/esm/cache/types/redis.min.mjs.map +0 -1
- package/dist/esm/cache/types/redis.mjs +0 -55
- package/dist/esm/cache/types/redis.mjs.map +0 -1
- package/dist/esm/dbs/base/changes.min.mjs +0 -2
- package/dist/esm/dbs/base/changes.min.mjs.map +0 -1
- package/dist/esm/dbs/base/changes.mjs +0 -36
- package/dist/esm/dbs/base/changes.mjs.map +0 -1
- package/dist/esm/dbs/base/core.min.mjs +0 -1
- package/dist/esm/dbs/base/core.mjs +0 -1
- package/dist/esm/dbs/base/db.min.mjs +0 -2
- package/dist/esm/dbs/base/db.min.mjs.map +0 -1
- package/dist/esm/dbs/base/db.mjs +0 -14
- package/dist/esm/dbs/base/db.mjs.map +0 -1
- package/dist/esm/dbs/base/types.min.mjs +0 -2
- package/dist/esm/dbs/base/types.min.mjs.map +0 -1
- package/dist/esm/dbs/base/types.mjs +0 -2
- package/dist/esm/dbs/base/types.mjs.map +0 -1
- package/dist/esm/dbs/mongo/changes.min.mjs +0 -2
- package/dist/esm/dbs/mongo/changes.min.mjs.map +0 -1
- package/dist/esm/dbs/mongo/changes.mjs +0 -81
- package/dist/esm/dbs/mongo/changes.mjs.map +0 -1
- package/dist/esm/dbs/mongo/db.min.mjs +0 -2
- package/dist/esm/dbs/mongo/db.min.mjs.map +0 -1
- package/dist/esm/dbs/mongo/db.mjs +0 -225
- package/dist/esm/dbs/mongo/db.mjs.map +0 -1
- package/dist/esm/dbs/mongo/query.min.mjs +0 -2
- package/dist/esm/dbs/mongo/query.min.mjs.map +0 -1
- package/dist/esm/dbs/mongo/query.mjs +0 -66
- package/dist/esm/dbs/mongo/query.mjs.map +0 -1
- package/dist/esm/dbs/pipes.min.mjs +0 -2
- package/dist/esm/dbs/pipes.min.mjs.map +0 -1
- package/dist/esm/dbs/pipes.mjs +0 -104
- package/dist/esm/dbs/pipes.mjs.map +0 -1
- package/dist/esm/errors/equippedError.min.mjs +0 -2
- package/dist/esm/errors/equippedError.min.mjs.map +0 -1
- package/dist/esm/errors/equippedError.mjs +0 -12
- package/dist/esm/errors/equippedError.mjs.map +0 -1
- package/dist/esm/errors/requestError.min.mjs +0 -2
- package/dist/esm/errors/requestError.min.mjs.map +0 -1
- package/dist/esm/errors/requestError.mjs +0 -12
- package/dist/esm/errors/requestError.mjs.map +0 -1
- package/dist/esm/errors/types/badRequestError.min.mjs +0 -2
- package/dist/esm/errors/types/badRequestError.min.mjs.map +0 -1
- package/dist/esm/errors/types/badRequestError.mjs +0 -12
- package/dist/esm/errors/types/badRequestError.mjs.map +0 -1
- package/dist/esm/errors/types/notAuthenticatedError.min.mjs +0 -2
- package/dist/esm/errors/types/notAuthenticatedError.min.mjs.map +0 -1
- package/dist/esm/errors/types/notAuthenticatedError.mjs +0 -12
- package/dist/esm/errors/types/notAuthenticatedError.mjs.map +0 -1
- package/dist/esm/errors/types/notAuthorizedError.min.mjs +0 -2
- package/dist/esm/errors/types/notAuthorizedError.min.mjs.map +0 -1
- package/dist/esm/errors/types/notAuthorizedError.mjs +0 -12
- package/dist/esm/errors/types/notAuthorizedError.mjs.map +0 -1
- package/dist/esm/errors/types/notFoundError.min.mjs +0 -2
- package/dist/esm/errors/types/notFoundError.min.mjs.map +0 -1
- package/dist/esm/errors/types/notFoundError.mjs +0 -12
- package/dist/esm/errors/types/notFoundError.mjs.map +0 -1
- package/dist/esm/errors/types/tokenExpired.min.mjs +0 -2
- package/dist/esm/errors/types/tokenExpired.min.mjs.map +0 -1
- package/dist/esm/errors/types/tokenExpired.mjs +0 -12
- package/dist/esm/errors/types/tokenExpired.mjs.map +0 -1
- package/dist/esm/errors/types/validationError.min.mjs +0 -2
- package/dist/esm/errors/types/validationError.min.mjs.map +0 -1
- package/dist/esm/errors/types/validationError.mjs +0 -16
- package/dist/esm/errors/types/validationError.mjs.map +0 -1
- package/dist/esm/events/base.min.mjs +0 -2
- package/dist/esm/events/base.min.mjs.map +0 -1
- package/dist/esm/events/base.mjs +0 -6
- package/dist/esm/events/base.mjs.map +0 -1
- package/dist/esm/events/pipes.min.mjs +0 -2
- package/dist/esm/events/pipes.min.mjs.map +0 -1
- package/dist/esm/events/pipes.mjs +0 -28
- package/dist/esm/events/pipes.mjs.map +0 -1
- package/dist/esm/events/types/kafka.min.mjs +0 -2
- package/dist/esm/events/types/kafka.min.mjs.map +0 -1
- package/dist/esm/events/types/kafka.mjs.map +0 -1
- package/dist/esm/events/types/rabbitmq.min.mjs +0 -2
- package/dist/esm/events/types/rabbitmq.min.mjs.map +0 -1
- package/dist/esm/events/types/rabbitmq.mjs +0 -54
- package/dist/esm/events/types/rabbitmq.mjs.map +0 -1
- package/dist/esm/instance/hooks.min.mjs +0 -2
- package/dist/esm/instance/hooks.min.mjs.map +0 -1
- package/dist/esm/instance/hooks.mjs +0 -26
- package/dist/esm/instance/hooks.mjs.map +0 -1
- package/dist/esm/instance/settings.min.mjs +0 -2
- package/dist/esm/instance/settings.min.mjs.map +0 -1
- package/dist/esm/instance/settings.mjs +0 -57
- package/dist/esm/instance/settings.mjs.map +0 -1
- package/dist/esm/jobs/pipes.min.mjs +0 -2
- package/dist/esm/jobs/pipes.min.mjs.map +0 -1
- package/dist/esm/jobs/pipes.mjs +0 -13
- package/dist/esm/jobs/pipes.mjs.map +0 -1
- package/dist/esm/jobs/types/redis.min.mjs +0 -2
- package/dist/esm/jobs/types/redis.min.mjs.map +0 -1
- package/dist/esm/jobs/types/redis.mjs.map +0 -1
- package/dist/esm/server/impls/base.min.mjs +0 -2
- package/dist/esm/server/impls/base.min.mjs.map +0 -1
- package/dist/esm/server/impls/base.mjs +0 -211
- package/dist/esm/server/impls/base.mjs.map +0 -1
- package/dist/esm/server/impls/express.min.mjs +0 -2
- package/dist/esm/server/impls/express.min.mjs.map +0 -1
- package/dist/esm/server/impls/express.mjs +0 -111
- package/dist/esm/server/impls/express.mjs.map +0 -1
- package/dist/esm/server/impls/fastify.min.mjs +0 -2
- package/dist/esm/server/impls/fastify.min.mjs.map +0 -1
- package/dist/esm/server/impls/fastify.mjs +0 -121
- package/dist/esm/server/impls/fastify.mjs.map +0 -1
- package/dist/esm/server/middlewares/index.min.mjs +0 -2
- package/dist/esm/server/middlewares/index.min.mjs.map +0 -1
- package/dist/esm/server/middlewares/index.mjs +0 -2
- package/dist/esm/server/middlewares/index.mjs.map +0 -1
- package/dist/esm/server/middlewares/requireAuthUser.min.mjs +0 -2
- package/dist/esm/server/middlewares/requireAuthUser.min.mjs.map +0 -1
- package/dist/esm/server/middlewares/requireAuthUser.mjs +0 -22
- package/dist/esm/server/middlewares/requireAuthUser.mjs.map +0 -1
- package/dist/esm/server/openapi.min.mjs +0 -30
- package/dist/esm/server/openapi.min.mjs.map +0 -1
- package/dist/esm/server/openapi.mjs +0 -191
- package/dist/esm/server/openapi.mjs.map +0 -1
- package/dist/esm/server/pipes.min.mjs +0 -2
- package/dist/esm/server/pipes.min.mjs.map +0 -1
- package/dist/esm/server/pipes.mjs +0 -67
- package/dist/esm/server/pipes.mjs.map +0 -1
- package/dist/esm/server/requests-auth-methods/apiKeys.min.mjs +0 -2
- package/dist/esm/server/requests-auth-methods/apiKeys.min.mjs.map +0 -1
- package/dist/esm/server/requests-auth-methods/apiKeys.mjs +0 -21
- package/dist/esm/server/requests-auth-methods/apiKeys.mjs.map +0 -1
- package/dist/esm/server/requests-auth-methods/base.min.mjs +0 -2
- package/dist/esm/server/requests-auth-methods/base.min.mjs.map +0 -1
- package/dist/esm/server/requests-auth-methods/base.mjs +0 -20
- package/dist/esm/server/requests-auth-methods/base.mjs.map +0 -1
- package/dist/esm/server/requests-auth-methods/index.min.mjs +0 -2
- package/dist/esm/server/requests-auth-methods/index.min.mjs.map +0 -1
- package/dist/esm/server/requests-auth-methods/index.mjs +0 -4
- package/dist/esm/server/requests-auth-methods/index.mjs.map +0 -1
- package/dist/esm/server/requests-auth-methods/jwt.min.mjs +0 -2
- package/dist/esm/server/requests-auth-methods/jwt.min.mjs.map +0 -1
- package/dist/esm/server/requests-auth-methods/jwt.mjs +0 -78
- package/dist/esm/server/requests-auth-methods/jwt.mjs.map +0 -1
- package/dist/esm/server/requests.min.mjs +0 -2
- package/dist/esm/server/requests.min.mjs.map +0 -1
- package/dist/esm/server/requests.mjs +0 -80
- package/dist/esm/server/requests.mjs.map +0 -1
- package/dist/esm/server/routes.min.mjs +0 -2
- package/dist/esm/server/routes.min.mjs.map +0 -1
- package/dist/esm/server/routes.mjs +0 -74
- package/dist/esm/server/routes.mjs.map +0 -1
- package/dist/esm/server/sockets.min.mjs +0 -2
- package/dist/esm/server/sockets.min.mjs.map +0 -1
- package/dist/esm/server/sockets.mjs +0 -126
- package/dist/esm/server/sockets.mjs.map +0 -1
- package/dist/esm/server/types.min.mjs +0 -2
- package/dist/esm/server/types.min.mjs.map +0 -1
- package/dist/esm/server/types.mjs +0 -34
- package/dist/esm/server/types.mjs.map +0 -1
- package/dist/esm/types/overrides.min.mjs +0 -1
- package/dist/esm/types/overrides.mjs +0 -1
- package/dist/esm/utilities/authProviders.min.mjs +0 -2
- package/dist/esm/utilities/authProviders.min.mjs.map +0 -1
- package/dist/esm/utilities/authProviders.mjs +0 -53
- package/dist/esm/utilities/authProviders.mjs.map +0 -1
- package/dist/esm/utilities/hash.min.mjs +0 -2
- package/dist/esm/utilities/hash.min.mjs.map +0 -1
- package/dist/esm/utilities/hash.mjs +0 -17
- package/dist/esm/utilities/hash.mjs.map +0 -1
- package/dist/esm/utilities/json.min.mjs +0 -2
- package/dist/esm/utilities/json.min.mjs.map +0 -1
- package/dist/esm/utilities/json.mjs +0 -16
- package/dist/esm/utilities/json.mjs.map +0 -1
- package/dist/esm/utilities/media.min.mjs +0 -2
- package/dist/esm/utilities/media.min.mjs.map +0 -1
- package/dist/esm/utilities/media.mjs +0 -13
- package/dist/esm/utilities/media.mjs.map +0 -1
- package/dist/esm/utilities/random.min.mjs +0 -2
- package/dist/esm/utilities/random.min.mjs.map +0 -1
- package/dist/esm/utilities/random.mjs +0 -12
- package/dist/esm/utilities/random.mjs.map +0 -1
- package/dist/esm/utilities/retry.min.mjs +0 -2
- package/dist/esm/utilities/retry.min.mjs.map +0 -1
- package/dist/esm/utilities/retry.mjs +0 -14
- package/dist/esm/utilities/retry.mjs.map +0 -1
- package/dist/esm/validations/valleyed.min.mjs +0 -2
- package/dist/esm/validations/valleyed.min.mjs.map +0 -1
- package/dist/esm/validations/valleyed.mjs +0 -43
- package/dist/esm/validations/valleyed.mjs.map +0 -1
- package/dist/types/audit/events.js +0 -100
- package/dist/types/audit/index.d.ts +0 -44
- package/dist/types/audit/index.js +0 -1
- package/dist/types/cache/base.js +0 -5
- package/dist/types/cache/pipes.js +0 -15
- package/dist/types/cache/types/in-memory.js +0 -46
- package/dist/types/cache/types/redis.js +0 -54
- package/dist/types/db-C8YY1yTO.d.ts +0 -14
- package/dist/types/db-Dj1SGto0.d.ts +0 -24
- package/dist/types/dbs/base/changes.js +0 -35
- package/dist/types/dbs/base/core.js +0 -0
- package/dist/types/dbs/base/db.js +0 -13
- package/dist/types/dbs/base/types.js +0 -1
- package/dist/types/dbs/mongo/changes.js +0 -80
- package/dist/types/dbs/mongo/db.js +0 -224
- package/dist/types/dbs/mongo/query.js +0 -65
- package/dist/types/dbs/pipes.js +0 -103
- package/dist/types/errors/equippedError.js +0 -11
- package/dist/types/errors/requestError.js +0 -11
- package/dist/types/errors/types/badRequestError.js +0 -11
- package/dist/types/errors/types/notAuthenticatedError.js +0 -11
- package/dist/types/errors/types/notAuthorizedError.js +0 -11
- package/dist/types/errors/types/notFoundError.js +0 -11
- package/dist/types/errors/types/tokenExpired.js +0 -11
- package/dist/types/errors/types/validationError.js +0 -15
- package/dist/types/events/base.js +0 -5
- package/dist/types/events/pipes.js +0 -27
- package/dist/types/events/types/rabbitmq.js +0 -53
- package/dist/types/instance/hooks.js +0 -25
- package/dist/types/instance/settings.js +0 -56
- package/dist/types/jobs/pipes.js +0 -12
- package/dist/types/kafka-Cf-TUJgv.d.ts +0 -54
- package/dist/types/server/impls/base.js +0 -210
- package/dist/types/server/impls/express.js +0 -110
- package/dist/types/server/impls/fastify.js +0 -120
- package/dist/types/server/middlewares/index.js +0 -1
- package/dist/types/server/middlewares/requireAuthUser.js +0 -21
- package/dist/types/server/openapi.js +0 -190
- package/dist/types/server/pipes.js +0 -66
- package/dist/types/server/requests-auth-methods/apiKeys.js +0 -20
- package/dist/types/server/requests-auth-methods/base.js +0 -19
- package/dist/types/server/requests-auth-methods/index.js +0 -3
- package/dist/types/server/requests-auth-methods/jwt.js +0 -77
- package/dist/types/server/requests.js +0 -79
- package/dist/types/server/routes.js +0 -73
- package/dist/types/server/sockets.js +0 -125
- package/dist/types/server/types.js +0 -33
- package/dist/types/types/overrides.js +0 -0
- package/dist/types/utilities/authProviders.js +0 -52
- package/dist/types/utilities/hash.js +0 -16
- package/dist/types/utilities/json.js +0 -15
- package/dist/types/utilities/media.js +0 -12
- package/dist/types/utilities/random.js +0 -11
- package/dist/types/utilities/retry.js +0 -13
- package/dist/types/validations/valleyed.js +0 -42
- /package/dist/esm/{dbs/base/core.min.mjs.map → cache/adapters/redis/index.min.mjs.map} +0 -0
- /package/dist/esm/{dbs/base/core.mjs.map → cache/adapters/redis/index.mjs.map} +0 -0
- /package/dist/esm/{types/overrides.min.mjs.map → chunk-AQY7QVYI.min.mjs.map} +0 -0
- /package/dist/esm/{types/overrides.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/errors/equippedError.ts","../../../../../src/errors/requestError.ts","../../../../../src/instance/hooks.ts","../../../../../src/instance/settings.ts","../../../../../src/instance/index.ts","../../../../../src/utilities/authProviders.ts","../../../../../src/utilities/configurable.ts","../../../../../src/utilities/hash.ts","../../../../../src/utilities/json.ts","../../../../../src/utilities/media.ts","../../../../../src/utilities/random.ts","../../../../../src/utilities/retry.ts","../../../../../src/utilities/index.ts","../../../../../src/errors/types/badRequestError.ts","../../../../../src/errors/types/notAuthenticatedError.ts","../../../../../src/errors/types/notAuthorizedError.ts","../../../../../src/errors/types/notFoundError.ts","../../../../../src/errors/types/tokenExpired.ts","../../../../../src/errors/types/validationError.ts","../../../../../src/errors/index.ts","../../../../../src/orm/errors/introspection.ts","../../../../../src/orm/adapters/postgresql/index.ts","../../../../../src/orm/filter.ts","../../../../../src/orm/fields.ts","../../../../../src/orm/errors/validation.ts","../../../../../src/orm/updates.ts","../../../../../src/orm/adapters/postgresql/query.ts","../../../../../src/orm/orm-adapter.ts"],"sourcesContent":["export class EquippedError extends Error {\n\tconstructor(\n\t\tpublic readonly message: string,\n\t\tpublic readonly context: Record<string, unknown>,\n\t\tpublic readonly cause?: unknown,\n\t) {\n\t\tsuper(message, { cause })\n\t}\n}\n","import type { StatusCodesEnum } from '../server'\nimport { EquippedError } from './equippedError'\n\nexport abstract class RequestError extends EquippedError {\n\tabstract readonly statusCode: StatusCodesEnum\n\n\tprotected constructor(\n\t\tpublic readonly message: string,\n\t\tpublic readonly serializedErrors: { message: string; field?: string }[],\n\t\tcause?: unknown,\n\t) {\n\t\tsuper(message, { serializedErrors }, cause)\n\t}\n}\n","export type HookEvent = 'setup' | 'start' | 'close'\nexport type HookCb = Promise<unknown | void> | (() => void | unknown | Promise<void | unknown>)\n\nexport type ClassRef = Function & { prototype: unknown; name: string }\nexport type HookOptions = {\n\tclass?: ClassRef\n\tafter?: ClassRef[]\n}\nexport type HookRecord = { cb: HookCb; class?: ClassRef; after: ClassRef[] }\n\nexport function registerHook(hooks: HookRecord[], record: HookRecord): void {\n\tfor (const dep of record.after) {\n\t\tif (!hooks.some((h) => h.class === dep)) {\n\t\t\tconst depName = dep.name || 'unknown'\n\t\t\tconst ownerName = record.class?.name || 'anonymous'\n\t\t\tthrow new Error(`Missing dependency: ${ownerName} declares after: [${depName}], but ${depName} is not registered`)\n\t\t}\n\t}\n\n\tif (record.class) {\n\t\tconst tentative = [...hooks, record]\n\t\tdetectCycle(tentative)\n\t}\n\n\thooks.push(record)\n}\n\nfunction detectCycle(hooks: HookRecord[]): void {\n\tconst classToAfter = new Map<ClassRef, ClassRef[]>()\n\tfor (const h of hooks) {\n\t\tif (!h.class) continue\n\t\tconst existing = classToAfter.get(h.class)\n\t\tif (existing) {\n\t\t\tfor (const dep of h.after) {\n\t\t\t\tif (!existing.includes(dep)) existing.push(dep)\n\t\t\t}\n\t\t} else {\n\t\t\tclassToAfter.set(h.class, [...h.after])\n\t\t}\n\t}\n\n\tconst visited = new Set<ClassRef>()\n\tconst stack = new Set<ClassRef>()\n\n\tfunction visit(cls: ClassRef, path: ClassRef[]): void {\n\t\tif (stack.has(cls)) {\n\t\t\tconst cycleStart = path.indexOf(cls)\n\t\t\tconst cycle = [...path.slice(cycleStart), cls]\n\t\t\tconst names = cycle.map((c) => c.name || 'unknown')\n\t\t\tthrow new Error(`Cycle detected: ${names.join(' → ')}`)\n\t\t}\n\t\tif (visited.has(cls)) return\n\t\tstack.add(cls)\n\t\tpath.push(cls)\n\t\tfor (const dep of classToAfter.get(cls) ?? []) {\n\t\t\tvisit(dep, path)\n\t\t}\n\t\tpath.pop()\n\t\tstack.delete(cls)\n\t\tvisited.add(cls)\n\t}\n\n\tfor (const cls of classToAfter.keys()) {\n\t\tvisit(cls, [])\n\t}\n}\n\nexport type HookLayer = HookRecord[]\n\nexport function resolveHookDAG(hooks: HookRecord[], invert: boolean = false): HookLayer[] {\n\tif (hooks.length === 0) return []\n\n\tconst classToHooks = new Map<ClassRef, HookRecord[]>()\n\tconst anonymous: HookRecord[] = []\n\n\tfor (const h of hooks) {\n\t\tif (h.class) {\n\t\t\tconst list = classToHooks.get(h.class)\n\t\t\tif (list) list.push(h)\n\t\t\telse classToHooks.set(h.class, [h])\n\t\t} else {\n\t\t\tanonymous.push(h)\n\t\t}\n\t}\n\n\tconst classes = [...classToHooks.keys()]\n\n\tconst inDegree = new Map<ClassRef, number>()\n\tconst graph = new Map<ClassRef, ClassRef[]>()\n\n\tfor (const cls of classes) {\n\t\tinDegree.set(cls, 0)\n\t\tgraph.set(cls, [])\n\t}\n\n\tfor (const h of hooks) {\n\t\tif (!h.class) continue\n\t\tfor (const dep of h.after) {\n\t\t\tconst [from, to] = invert ? [h.class, dep] : [dep, h.class]\n\t\t\tconst edges = graph.get(from)!\n\t\t\tif (!edges.includes(to)) {\n\t\t\t\tedges.push(to)\n\t\t\t\tinDegree.set(to, inDegree.get(to)! + 1)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst layers: HookLayer[] = []\n\tlet queue = classes.filter((c) => inDegree.get(c) === 0)\n\n\twhile (queue.length > 0) {\n\t\tconst layer: HookRecord[] = []\n\t\tconst next: ClassRef[] = []\n\n\t\tfor (const cls of queue) {\n\t\t\tlayer.push(...(classToHooks.get(cls) ?? []))\n\t\t}\n\t\tlayers.push(layer)\n\n\t\tfor (const cls of queue) {\n\t\t\tfor (const neighbor of graph.get(cls) ?? []) {\n\t\t\t\tconst d = inDegree.get(neighbor)! - 1\n\t\t\t\tinDegree.set(neighbor, d)\n\t\t\t\tif (d === 0) next.push(neighbor)\n\t\t\t}\n\t\t}\n\n\t\tqueue = next\n\t}\n\n\tif (anonymous.length > 0) {\n\t\tconst anonWithDeps = anonymous.filter((h) => h.after.length > 0)\n\t\tconst anonWithoutDeps = anonymous.filter((h) => h.after.length === 0)\n\n\t\tif (anonWithDeps.length > 0) {\n\t\t\tlet maxLayer = -1\n\t\t\tfor (const h of anonWithDeps) {\n\t\t\t\tfor (const dep of h.after) {\n\t\t\t\t\tconst depLayer = layers.findIndex((l) => l.some((r) => r.class === dep))\n\t\t\t\t\tif (depLayer > maxLayer) maxLayer = depLayer\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst insertAt = maxLayer + 1\n\t\t\tif (insertAt < layers.length) {\n\t\t\t\tlayers[insertAt].push(...anonWithDeps)\n\t\t\t} else {\n\t\t\t\tlayers.push(anonWithDeps)\n\t\t\t}\n\t\t}\n\n\t\tif (anonWithoutDeps.length > 0) {\n\t\t\tif (layers.length > 0) {\n\t\t\t\tlayers[layers.length - 1].push(...anonWithoutDeps)\n\t\t\t} else {\n\t\t\t\tlayers.push(anonWithoutDeps)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn layers\n}\n\nexport async function runHooks(\n\thooks: HookRecord[],\n\tonError: (error: Error) => void = (error) => {\n\t\tthrow error\n\t},\n\tinvert: boolean = false,\n) {\n\tconst layers = resolveHookDAG(hooks, invert)\n\tfor (const layer of layers)\n\t\tawait Promise.all(\n\t\t\tlayer.map(async (h) => {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof h.cb === 'function') return await h.cb()\n\t\t\t\t\treturn await h.cb\n\t\t\t\t} catch (error) {\n\t\t\t\t\treturn onError(error instanceof Error ? error : new Error(`${error}`))\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\n\tclass A {}\n\tclass B {}\n\tclass C {}\n\tclass D {}\n\n\tconst noop = () => {}\n\n\tdescribe('registerHook', () => {\n\t\ttest('registers a hook with no dependencies', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\tregisterHook(hooks, { cb: noop, class: A, after: [] })\n\t\t\texpect(hooks).toHaveLength(1)\n\t\t})\n\n\t\ttest('throws on missing dependency', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\texpect(() => registerHook(hooks, { cb: noop, class: B, after: [A] })).toThrow(/Missing dependency.*B.*A/)\n\t\t})\n\n\t\ttest('throws on cycle: A→B→A', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\tregisterHook(hooks, { cb: noop, class: A, after: [] })\n\t\t\tregisterHook(hooks, { cb: noop, class: B, after: [A] })\n\t\t\texpect(() => registerHook(hooks, { cb: noop, class: A, after: [B] })).toThrow(/Cycle detected/)\n\t\t})\n\n\t\ttest('throws on transitive cycle: A→B→C→A', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\tregisterHook(hooks, { cb: noop, class: A, after: [] })\n\t\t\tregisterHook(hooks, { cb: noop, class: B, after: [A] })\n\t\t\tregisterHook(hooks, { cb: noop, class: C, after: [B] })\n\t\t\texpect(() => registerHook(hooks, { cb: noop, class: A, after: [C] })).toThrow(/Cycle detected/)\n\t\t})\n\n\t\ttest('allows anonymous hooks with dependencies', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\tregisterHook(hooks, { cb: noop, class: A, after: [] })\n\t\t\tregisterHook(hooks, { cb: noop, after: [A] })\n\t\t\texpect(hooks).toHaveLength(2)\n\t\t})\n\n\t\ttest('anonymous hook throws on missing dependency', () => {\n\t\t\tconst hooks: HookRecord[] = []\n\t\t\texpect(() => registerHook(hooks, { cb: noop, after: [A] })).toThrow(/Missing dependency.*anonymous.*A/)\n\t\t})\n\t})\n\n\tdescribe('resolveHookDAG', () => {\n\t\ttest('linear chain: A → B → C', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [B] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(3)\n\t\t\texpect(layers[0].every((h) => h.class === A)).toBe(true)\n\t\t\texpect(layers[1].every((h) => h.class === B)).toBe(true)\n\t\t\texpect(layers[2].every((h) => h.class === C)).toBe(true)\n\t\t})\n\n\t\ttest('fan-out: A → B, A → C (B and C are parallel)', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [A] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\texpect(layers[0].every((h) => h.class === A)).toBe(true)\n\t\t\tconst secondClasses = layers[1].map((h) => h.class)\n\t\t\texpect(secondClasses).toContain(B)\n\t\t\texpect(secondClasses).toContain(C)\n\t\t})\n\n\t\ttest('fan-in: B → D, C → D', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: B, after: [] },\n\t\t\t\t{ cb: noop, class: C, after: [] },\n\t\t\t\t{ cb: noop, class: D, after: [B, C] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\tconst firstClasses = layers[0].map((h) => h.class)\n\t\t\texpect(firstClasses).toContain(B)\n\t\t\texpect(firstClasses).toContain(C)\n\t\t\texpect(layers[1].every((h) => h.class === D)).toBe(true)\n\t\t})\n\n\t\ttest('diamond: A → B, A → C, B → D, C → D', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [A] },\n\t\t\t\t{ cb: noop, class: D, after: [B, C] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(3)\n\t\t\texpect(layers[0][0].class).toBe(A)\n\t\t\tconst midClasses = layers[1].map((h) => h.class)\n\t\t\texpect(midClasses).toContain(B)\n\t\t\texpect(midClasses).toContain(C)\n\t\t\texpect(layers[2][0].class).toBe(D)\n\t\t})\n\n\t\ttest('close-event inversion reverses the graph', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [B] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks, true)\n\t\t\texpect(layers).toHaveLength(3)\n\t\t\texpect(layers[0].every((h) => h.class === C)).toBe(true)\n\t\t\texpect(layers[1].every((h) => h.class === B)).toBe(true)\n\t\t\texpect(layers[2].every((h) => h.class === A)).toBe(true)\n\t\t})\n\n\t\ttest('close inversion: fan-out becomes fan-in', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [A] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks, true)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\tconst firstClasses = layers[0].map((h) => h.class)\n\t\t\texpect(firstClasses).toContain(B)\n\t\t\texpect(firstClasses).toContain(C)\n\t\t\texpect(layers[1].every((h) => h.class === A)).toBe(true)\n\t\t})\n\n\t\ttest('multiple hooks per class are all in the same layer', () => {\n\t\t\tconst cb1 = () => {}\n\t\t\tconst cb2 = () => {}\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: cb1, class: A, after: [] },\n\t\t\t\t{ cb: cb2, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\texpect(layers[0]).toHaveLength(2)\n\t\t\texpect(layers[0].every((h) => h.class === A)).toBe(true)\n\t\t})\n\n\t\ttest('anonymous hooks without deps run at deepest level', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, after: [] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\texpect(layers).toHaveLength(2)\n\t\t\tconst lastLayer = layers[layers.length - 1]\n\t\t\texpect(lastLayer.some((h) => h.class === undefined)).toBe(true)\n\t\t})\n\n\t\ttest('anonymous hooks with deps run after their dependencies', () => {\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: noop, class: A, after: [] },\n\t\t\t\t{ cb: noop, class: B, after: [A] },\n\t\t\t\t{ cb: noop, class: C, after: [B] },\n\t\t\t\t{ cb: noop, after: [A] },\n\t\t\t]\n\t\t\tconst layers = resolveHookDAG(hooks)\n\t\t\tconst anonLayer = layers.findIndex((l) => l.some((h) => h.class === undefined))\n\t\t\tconst aLayer = layers.findIndex((l) => l.some((h) => h.class === A))\n\t\t\texpect(anonLayer).toBeGreaterThan(aLayer)\n\t\t})\n\n\t\ttest('empty hooks returns empty layers', () => {\n\t\t\texpect(resolveHookDAG([])).toEqual([])\n\t\t})\n\t})\n\n\tdescribe('runHooks', () => {\n\t\ttest('same-depth siblings observably overlap', async () => {\n\t\t\tconst log: string[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{\n\t\t\t\t\tcb: async () => {\n\t\t\t\t\t\tlog.push('B-start')\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 20))\n\t\t\t\t\t\tlog.push('B-end')\n\t\t\t\t\t},\n\t\t\t\t\tclass: B,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcb: async () => {\n\t\t\t\t\t\tlog.push('C-start')\n\t\t\t\t\t\tawait new Promise((r) => setTimeout(r, 20))\n\t\t\t\t\t\tlog.push('C-end')\n\t\t\t\t\t},\n\t\t\t\t\tclass: C,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t]\n\t\t\tawait runHooks(hooks)\n\t\t\texpect(log[0]).toBe('B-start')\n\t\t\texpect(log[1]).toBe('C-start')\n\t\t})\n\n\t\ttest('different depths run sequentially', async () => {\n\t\t\tconst log: string[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{\n\t\t\t\t\tcb: async () => {\n\t\t\t\t\t\tlog.push('A')\n\t\t\t\t\t},\n\t\t\t\t\tclass: A,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcb: async () => {\n\t\t\t\t\t\tlog.push('B')\n\t\t\t\t\t},\n\t\t\t\t\tclass: B,\n\t\t\t\t\tafter: [A],\n\t\t\t\t},\n\t\t\t]\n\t\t\tawait runHooks(hooks)\n\t\t\texpect(log).toEqual(['A', 'B'])\n\t\t})\n\n\t\ttest('close inversion runs hooks in reverse dependency order', async () => {\n\t\t\tconst log: string[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{ cb: async () => log.push('A'), class: A, after: [] },\n\t\t\t\t{ cb: async () => log.push('B'), class: B, after: [A] },\n\t\t\t\t{ cb: async () => log.push('C'), class: C, after: [B] },\n\t\t\t]\n\t\t\tawait runHooks(hooks, undefined, true)\n\t\t\texpect(log).toEqual(['C', 'B', 'A'])\n\t\t})\n\n\t\ttest('errors are routed to onError handler', async () => {\n\t\t\tconst errors: Error[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{\n\t\t\t\t\tcb: () => {\n\t\t\t\t\t\tthrow new Error('boom')\n\t\t\t\t\t},\n\t\t\t\t\tclass: A,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t]\n\t\t\tawait runHooks(hooks, (e) => {\n\t\t\t\terrors.push(e)\n\t\t\t})\n\t\t\texpect(errors).toHaveLength(1)\n\t\t\texpect(errors[0].message).toBe('boom')\n\t\t})\n\n\t\ttest('raw promise callbacks are awaited', async () => {\n\t\t\tconst log: string[] = []\n\t\t\tconst hooks: HookRecord[] = [\n\t\t\t\t{\n\t\t\t\t\tcb: Promise.resolve().then(() => log.push('resolved')),\n\t\t\t\t\tclass: A,\n\t\t\t\t\tafter: [],\n\t\t\t\t},\n\t\t\t]\n\t\t\tawait runHooks(hooks)\n\t\t\texpect(log).toContain('resolved')\n\t\t})\n\t})\n}\n","import { type ConditionalObjectKeys, type PipeInput, type PipeOutput, v } from 'valleyed'\n\nexport const instanceSettingsPipe = () =>\n\tv.object({\n\t\tapp: v.object({\n\t\t\tname: v.string(),\n\t\t}),\n\t\tlog: v.defaults(\n\t\t\tv.object({\n\t\t\t\tlevel: v.defaults(v.in(['fatal', 'error', 'warn', 'info', 'debug', 'trace', 'silent'] as const), 'info'),\n\t\t\t}),\n\t\t\t{},\n\t\t),\n\t\tutils: v.defaults(\n\t\t\tv.object({\n\t\t\t\thashSaltRounds: v.defaults(v.number(), 10),\n\t\t\t\tpaginationDefaultLimit: v.defaults(v.number(), 100),\n\t\t\t\tmaxFileUploadSizeInMb: v.defaults(v.number(), 500),\n\t\t\t}),\n\t\t\t{},\n\t\t),\n\t})\n\nexport type Settings = PipeOutput<ReturnType<typeof instanceSettingsPipe>>\nexport type SettingsInput = ConditionalObjectKeys<PipeInput<ReturnType<typeof instanceSettingsPipe>>>\n","import pino, { type Logger } from 'pino'\nimport { ulid } from 'ulid'\nimport { type Pipe, v } from 'valleyed'\n\nimport { EquippedError } from '../errors'\nimport { type ClassRef, type HookCb, type HookEvent, type HookOptions, type HookRecord, registerHook, runHooks } from './hooks'\nimport { instanceSettingsPipe, type Settings, type SettingsInput } from './settings'\n\nexport type { ClassRef, HookCb, HookEvent, HookOptions }\n\nexport class Instance {\n\tstatic #id: string | undefined\n\tstatic #instance: Instance | undefined\n\tstatic #hooks: Partial<Record<HookEvent, HookRecord[]>> = {}\n\treadonly settings: Readonly<Settings>\n\treadonly log: Logger<never>\n\n\tprivate constructor(settings: Settings) {\n\t\tInstance.#instance = this\n\t\tthis.settings = Object.freeze(settings)\n\t\tthis.log = pino<never>({\n\t\t\tlevel: this.settings.log.level,\n\t\t\tserializers: {\n\t\t\t\terr: pino.stdSerializers.err,\n\t\t\t\terror: pino.stdSerializers.err,\n\t\t\t\treq: pino.stdSerializers.req,\n\t\t\t\tres: pino.stdSerializers.res,\n\t\t\t},\n\t\t\tmixin: () => ({\n\t\t\t\tinstanceId: Instance.#id,\n\t\t\t}),\n\t\t})\n\t\tInstance.#registerOnExitHandler()\n\t}\n\n\talias(id: string) {\n\t\tif (Instance.#id !== undefined) return Instance.crash(new EquippedError('Instance already has an alias', {}))\n\t\tInstance.#id = id\n\t}\n\n\tget id() {\n\t\tif (Instance.#id === undefined) return Instance.crash(new EquippedError('Instance doesnt have an alias yet', {}))\n\t\treturn Instance.#id\n\t}\n\n\tgetScopedName(name: string, key = '.') {\n\t\treturn [this.settings.app.name, name].join(key)\n\t}\n\n\tasync start() {\n\t\ttry {\n\t\t\tawait runHooks(Instance.#hooks['setup'] ?? [])\n\t\t\tawait runHooks(Instance.#hooks['start'] ?? [])\n\t\t} catch (error) {\n\t\t\tInstance.crash(new EquippedError(`Error starting instance`, {}, error))\n\t\t}\n\t}\n\n\tstatic envs<E extends object>(envsPipe: Pipe<unknown, E>): E {\n\t\tconst envValidity = v.validate(envsPipe, process.env)\n\t\tif (!envValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Environment variables are not valid\\n${envValidity.error.toString()}`, {\n\t\t\t\t\tmessages: envValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn envValidity.value\n\t}\n\n\tstatic create(settings: SettingsInput) {\n\t\tif (Instance.#instance) return Instance.crash(new EquippedError('Instance has been initialized already', {}))\n\t\tconst settingsValidity = v.validate(instanceSettingsPipe(), settings)\n\t\tif (!settingsValidity.valid) {\n\t\t\tInstance.crash(\n\t\t\t\tnew EquippedError(`Settings are not valid\\n${settingsValidity.error.toString()}`, {\n\t\t\t\t\tmessages: settingsValidity.error.messages,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t\treturn new Instance(settingsValidity.value)\n\t}\n\n\tstatic get() {\n\t\tif (!Instance.#instance)\n\t\t\treturn Instance.crash(\n\t\t\t\tnew EquippedError('Has not been initialized. Make sure an instance has been created before you get an instance', {}),\n\t\t\t)\n\t\treturn Instance.#instance\n\t}\n\n\tstatic maybeGet() {\n\t\treturn Instance.#instance\n\t}\n\n\tstatic on(event: HookEvent, cb: HookCb, options?: HookOptions) {\n\t\tInstance.#hooks[event] ??= []\n\t\tconst record: HookRecord = { cb, class: options?.class, after: options?.after ?? [] }\n\t\tregisterHook(Instance.#hooks[event], record)\n\t}\n\n\tstatic #registerOnExitHandler() {\n\t\tconst signals = {\n\t\t\tSIGHUP: 1,\n\t\t\tSIGINT: 2,\n\t\t\tSIGTERM: 15,\n\t\t}\n\n\t\tObject.entries(signals).forEach(([signal, code]) => {\n\t\t\tprocess.on(signal, async () => {\n\t\t\t\tawait runHooks(Instance.#hooks['close'] ?? [], () => {}, true)\n\t\t\t\tprocess.exit(128 + code)\n\t\t\t})\n\t\t})\n\t}\n\n\tstatic resolveBeforeCrash<T>(cb: () => Promise<T>) {\n\t\tconst value = cb()\n\t\tInstance.on('close', async () => await value)\n\t\treturn value\n\t}\n\n\tstatic crash(error: EquippedError): never {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error(error)\n\t\tprocess.exit(1)\n\t}\n\n\tstatic createId(opts?: { prefix?: string; time?: Date }) {\n\t\treturn `${opts?.prefix ?? ''}${ulid(opts?.time?.getTime())}`\n\t}\n}\n","import axios from 'axios'\nimport jwt from 'jsonwebtoken'\nimport jwksClient from 'jwks-rsa'\n\nimport { EquippedError } from '../errors'\n\nexport const signinWithGoogle = async (idToken: string) => {\n\tconst authUrl = `https://oauth2.googleapis.com/tokeninfo?id_token=${idToken}`\n\tconst { data } = await axios.get(authUrl).catch((err) => {\n\t\tthrow new EquippedError('Failed to sign in with google', { idToken }, err)\n\t})\n\tdata.first_name = data.given_name\n\tdata.last_name = data.family_name\n\treturn data as {\n\t\temail: string\n\t\temail_verified: 'true' | 'false'\n\t\tfirst_name: string\n\t\tlast_name: string\n\t\tpicture: string\n\t\tsub: string\n\t} & Record<string, any>\n}\n\nexport const signinWithApple = async (idToken: string) => {\n\ttry {\n\t\tconst APPLE_BASE = 'https://appleid.apple.com'\n\t\tconst json = jwt.decode(idToken, { complete: true })\n\t\tif (!json?.header) throw new EquippedError('Missing JWT header', { idToken, json })\n\t\tconst { kid, alg } = json.header\n\t\tconst publicKey = await jwksClient({ jwksUri: `${APPLE_BASE}/auth/keys`, cache: true })\n\t\t\t.getSigningKey(kid)\n\t\t\t.then((key) => key.getPublicKey())\n\t\t\t.catch(() => null)\n\t\tif (!publicKey) throw new EquippedError('no publicKey', { idToken, publicKey, json })\n\t\tconst data = jwt.verify(idToken, publicKey, { algorithms: [alg as any] }) as Record<string, any>\n\t\tif (!data) throw new EquippedError('no data', { idToken, data })\n\t\tif (data.iss !== APPLE_BASE) throw new EquippedError('iss doesnt match', { idToken, data })\n\t\tif (data.exp * 1000 < Date.now()) throw new EquippedError('expired idToken', { idToken, data })\n\t\t// TODO: Find out how to get profile data from api\n\t\treturn data as {\n\t\t\temail?: string\n\t\t\tsub: string\n\t\t\temail_verified?: 'true' | 'false'\n\t\t\tis_private_email?: 'true' | 'false'\n\t\t} & Record<string, any>\n\t} catch (err) {\n\t\tthrow new EquippedError('Failed to sign in with apple', { idToken }, err)\n\t}\n}\n\nexport const signinWithFacebook = async (accessToken: string, fields = [] as string[]) => {\n\tfields = [...new Set([...fields, 'name', 'picture', 'email'])]\n\tconst { data } = await axios\n\t\t.request({\n\t\t\tmethod: 'get',\n\t\t\turl: 'https://graph.facebook.com/v15.0/me',\n\t\t\tparams: {\n\t\t\t\tfields: fields.join(','),\n\t\t\t\taccess_token: accessToken,\n\t\t\t},\n\t\t})\n\t\t.catch((err) => {\n\t\t\tthrow new EquippedError('Failed to sign in with facebook', { accessToken, fields }, err)\n\t\t})\n\tconst isValidData = fields.every((key) => key in data)\n\tif (!isValidData) throw new EquippedError('Incomplete scope for access token', { accessToken, fields, data })\n\tdata.email_verified = 'true'\n\treturn data as {\n\t\tid: string\n\t\temail: string\n\t\temail_verified: 'true' | 'false'\n\t\tname: string\n\t\tpicture: {\n\t\t\tdata: { height: number; is_silhouette: boolean; url: string; width: number }\n\t\t}\n\t} & Record<string, any>\n}\n","import { v, type ConditionalObjectKeys, type Pipe, type PipeInput, type PipeOutput } from 'valleyed'\n\ntype CtorParams<T> = ConstructorParameters<T & (abstract new (...args: any[]) => any)>\ntype BaseCtorParams<T> = T extends abstract new (...args: infer A) => any ? A : never\n\nexport function configurable<P extends Pipe<any, any>, Base extends abstract new (...args: any[]) => any>(pipeFn: () => P, base: Base) {\n\tconst pipe = pipeFn()\n\tv.compile(pipe)\n\n\tabstract class Configurable extends (base as unknown as new (...args: any[]) => any) {\n\t\tdeclare static readonly Config: PipeOutput<P>\n\n\t\tprotected constructor (protected readonly config: PipeOutput<P>, ...baseArgs: BaseCtorParams<Base>) {\n\t\t\t// eslint-disable-next-line constructor-super\n\t\t\tsuper(...baseArgs)\n\t\t}\n\n\t\tstatic create<This extends Function & { prototype: any }>(\n\t\t\tthis: This,\n\t\t\tinput: ConditionalObjectKeys<PipeInput<P>>,\n\t\t\t...args: CtorParams<This> extends [PipeOutput<P>, ...infer R] ? R : never\n\t\t): This['prototype'] {\n\t\t\tconst r = v.validate(pipe, input)\n\t\t\tif (!r.valid) throw r.error\n\t\t\treturn new (this as any)(r.value, ...args) as This['prototype']\n\t\t}\n\t}\n\n\treturn Configurable as unknown as (abstract new (validated: PipeOutput<P>, ...baseArgs: BaseCtorParams<Base>) => InstanceType<Base> & { readonly config: PipeOutput<P> }) & {\n\t\treadonly Config: PipeOutput<P>\n\t\tcreate<This extends Function & { prototype: any }>(\n\t\t\tthis: This,\n\t\t\tinput: ConditionalObjectKeys<PipeInput<P>>,\n\t\t\t...args: CtorParams<This> extends [PipeOutput<P>, ...infer R] ? R : never\n\t\t): This['prototype']\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\n\tconst testPipe = () =>\n\t\tv.object({\n\t\t\thost: v.string(),\n\t\t\tport: v.number(),\n\t\t})\n\n\ttype TestConfig = PipeOutput<ReturnType<typeof testPipe>>\n\n\tclass TestBase {\n\t\tbaseValue: string\n\t\tconstructor() {\n\t\t\tthis.baseValue = 'base'\n\t\t}\n\t}\n\n\tclass TestBaseWithArgs {\n\t\tlabel: string\n\t\tconstructor(label: string) {\n\t\t\tthis.label = label\n\t\t}\n\t}\n\n\tdescribe('configurable', () => {\n\t\ttest('validation runs in static create before constructor body executes', () => {\n\t\t\tlet constructorRan = false\n\n\t\t\tconst Wrapped = configurable(testPipe, TestBase)\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof MyClass.Config) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t\tconstructorRan = true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\texpect(() => MyClass.create({ host: 123, port: 'bad' } as any)).toThrow()\n\t\t\texpect(constructorRan).toBe(false)\n\n\t\t\tMyClass.create({ host: 'localhost', port: 3000 })\n\t\t\texpect(constructorRan).toBe(true)\n\t\t})\n\n\t\ttest('constructor receives validated value', () => {\n\t\t\tconst Wrapped = configurable(testPipe, TestBase)\n\t\t\tlet receivedConfig: unknown\n\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof MyClass.Config) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t\treceivedConfig = this.config\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tMyClass.create({ host: 'localhost', port: 3000 })\n\n\t\t\texpect(receivedConfig).toEqual({ host: 'localhost', port: 3000 })\n\t\t})\n\n\t\ttest('external new is a compile error', () => {\n\t\t\tconst Wrapped = configurable(testPipe, TestBase)\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof MyClass.Config) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// @ts-expect-error — external `new` on a class with protected constructor is a compile error\n\t\t\tvoid (() => new MyClass({ host: 'localhost', port: 3000 }))\n\t\t})\n\n\t\ttest('static Config resolves to PipeOutput<P> at the type level', () => {\n\t\t\tconst Wrapped = configurable(testPipe, TestBase)\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof MyClass.Config) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\texpectTypeOf<typeof MyClass.Config>().toEqualTypeOf<TestConfig>()\n\t\t\texpect(MyClass.create).toBeTypeOf('function')\n\t\t})\n\n\t\ttest('ConstructorParameters<This>-based extras inference works for non-zero-arg leaf signatures', () => {\n\t\t\tconst Wrapped = configurable(testPipe, TestBase)\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\textra: number\n\t\t\t\tprotected constructor(config: typeof MyClass.Config, extra: number) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t\tthis.extra = extra\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst instance = MyClass.create({ host: 'localhost', port: 3000 }, 42)\n\n\t\t\texpect(instance.extra).toBe(42)\n\t\t\texpectTypeOf(instance).toHaveProperty('extra')\n\t\t\texpectTypeOf(instance.extra).toEqualTypeOf<number>()\n\n\t\t\t// @ts-expect-error — wrong extra type\n\t\t\tvoid (() => MyClass.create({ host: 'localhost', port: 3000 }, 'not-a-number'))\n\t\t})\n\n\t\ttest('base-args forwarding works for non-zero-arg bases', () => {\n\t\t\tconst Wrapped = configurable(testPipe, TestBaseWithArgs)\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof MyClass.Config, label: string) {\n\t\t\t\t\tsuper(config, label)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst instance = MyClass.create({ host: 'localhost', port: 3000 }, 'test-label')\n\n\t\t\texpect(instance.label).toBe('test-label')\n\t\t})\n\n\t\ttest('config is accessible as protected readonly on instances', () => {\n\t\t\tconst Wrapped = configurable(testPipe, TestBase)\n\t\t\tclass MyClass extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof MyClass.Config) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t}\n\n\t\t\t\tgetHost() {\n\t\t\t\t\treturn this.config.host\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst instance = MyClass.create({ host: 'localhost', port: 3000 })\n\t\t\texpect(instance.getHost()).toBe('localhost')\n\t\t})\n\n\t\ttest('accepts an abstract base class', () => {\n\t\t\tabstract class AbstractBase {\n\t\t\t\tabstract greet(): string\n\t\t\t}\n\n\t\t\tconst Wrapped = configurable(testPipe, AbstractBase)\n\t\t\tclass Concrete extends Wrapped {\n\t\t\t\tprotected constructor(config: typeof Concrete.Config) {\n\t\t\t\t\tsuper(config)\n\t\t\t\t}\n\t\t\t\tgreet() {\n\t\t\t\t\treturn `hello from ${this.config.host}`\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst instance = Concrete.create({ host: 'localhost', port: 3000 })\n\t\t\texpect(instance.greet()).toBe('hello from localhost')\n\t\t\texpectTypeOf(instance).toHaveProperty('config')\n\t\t})\n\t})\n}\n","import * as bcrypt from 'bcryptjs'\n\nimport { Instance } from '../instance'\n\nexport const hash = async (password: string) => {\n\tpassword = password.trim()\n\tif (!password) return ''\n\treturn await bcrypt.hash(password, Instance.get().settings.utils.hashSaltRounds)\n}\n\nexport const compare = async (plainPassword: string, hashed: string) => {\n\tplainPassword = plainPassword.trim()\n\tif (!plainPassword && plainPassword === hashed) return true\n\treturn await bcrypt.compare(plainPassword, hashed)\n}\n","export const parseJSONValue = (data: any) => {\n\ttry {\n\t\tif (data?.constructor?.name !== 'String') return data\n\t\treturn JSON.parse(data)\n\t} catch {\n\t\treturn data\n\t}\n}\n\nexport function parseJSONObject<T extends object>(data: T) {\n\treturn Object.fromEntries(Object.entries(data).map(([key, value]) => [key, parseJSONValue(value)])) as T\n}\n","import { parseBuffer } from 'music-metadata'\n\nexport const getMediaDuration = async (buffer: Buffer) => {\n\ttry {\n\t\tconst meta = await parseBuffer(buffer)\n\t\treturn meta.format.duration ?? 0\n\t} catch {\n\t\treturn 0\n\t}\n}\n","import crypto from 'crypto'\n\nexport function string(length = 20) {\n\treturn crypto.randomBytes(length).toString('hex').slice(0, length)\n}\n\nexport function number(min = 0, max = 2 ** 48 - 1) {\n\treturn crypto.randomInt(min, max)\n}\n","import { EquippedError } from '../errors'\n\nexport const sleep = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms))\n\nexport const retry = async <T>(cb: () => Promise<{ done: true; value: T } | { done: false }>, tries: number, waitTimeInMs: number) => {\n\tif (tries <= 0) throw new EquippedError('out of tries', { tries, waitTimeInMs })\n\tconst result = await cb()\n\tif (result.done === true) return result.value\n\tawait sleep(waitTimeInMs)\n\treturn await retry(cb, tries - 1, waitTimeInMs)\n}\n","export * as AuthProviders from './authProviders'\nexport * from './configurable'\nexport * as Hash from './hash'\nexport * from './json'\nexport * from './media'\nexport * as Random from './random'\nexport * from './retry'\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class BadRequestError extends RequestError {\n\tstatusCode = StatusCodes.BadRequest\n\n\tconstructor(message: string, cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class NotAuthenticatedError extends RequestError {\n\tstatusCode = StatusCodes.NotAuthenticated\n\n\tconstructor(message = 'Not authenticated', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class NotAuthorizedError extends RequestError {\n\tstatusCode = StatusCodes.NotAuthorized\n\n\tconstructor(message = 'Not authorized', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class NotFoundError extends RequestError {\n\tstatusCode = StatusCodes.NotFound\n\n\tconstructor(message = 'Not found', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\nexport class TokenExpired extends RequestError {\n\tstatusCode = StatusCodes.TokenExpired\n\n\tconstructor(message = 'Token expired', cause?: unknown) {\n\t\tsuper(message, [{ message }], cause)\n\t}\n}\n","import { StatusCodes } from '../../server'\nimport { RequestError } from '../requestError'\n\ntype ValidError = {\n\tmessages: string[]\n\tfield: string\n}\n\nexport class ValidationError extends RequestError {\n\tstatusCode = StatusCodes.ValidationError\n\n\tconstructor(errors: ValidError[], cause?: unknown) {\n\t\tsuper(\n\t\t\t'Unprocessable Entity',\n\t\t\terrors.flatMap(({ field, messages }) => messages.map((message) => ({ message, field }))),\n\t\t\tcause,\n\t\t)\n\t}\n}\n","export * from './equippedError'\nexport * from './requestError'\nexport * from './types/badRequestError'\nexport * from './types/notAuthenticatedError'\nexport * from './types/notAuthorizedError'\nexport * from './types/notFoundError'\nexport * from './types/tokenExpired'\nexport * from './types/validationError'\n","import { EquippedError } from '../../errors'\n\nexport class OrmIntrospectionError extends EquippedError {\n\treadonly adapter: string\n\treadonly table: string\n\n\tconstructor(opts: { adapter: string; table: string; cause: unknown }) {\n\t\tsuper(`Introspection failed for table '${opts.table}' on adapter '${opts.adapter}'`, { adapter: opts.adapter, table: opts.table }, opts.cause)\n\t\tthis.adapter = opts.adapter\n\t\tthis.table = opts.table\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { EquippedError } = await import('../../errors')\n\n\tdescribe('OrmIntrospectionError', () => {\n\t\ttest('stores adapter, table, and cause on the instance', () => {\n\t\t\tconst cause = new Error('unknown column type')\n\t\t\tconst err = new OrmIntrospectionError({ adapter: 'postgres', table: 'users', cause })\n\t\t\texpect(err.adapter).toBe('postgres')\n\t\t\texpect(err.table).toBe('users')\n\t\t\texpect(err.cause).toBe(cause)\n\t\t})\n\n\t\ttest('message includes adapter and table', () => {\n\t\t\tconst err = new OrmIntrospectionError({ adapter: 'pg', table: 'posts', cause: 'bad type' })\n\t\t\texpect(err.message).toBe(\"Introspection failed for table 'posts' on adapter 'pg'\")\n\t\t})\n\n\t\ttest('instanceof EquippedError is true', () => {\n\t\t\tconst err = new OrmIntrospectionError({ adapter: 'x', table: 'y', cause: null })\n\t\t\texpect(err).toBeInstanceOf(OrmIntrospectionError)\n\t\t\texpect(err).toBeInstanceOf(EquippedError)\n\t\t})\n\n\t\ttest('context carries adapter and table', () => {\n\t\t\tconst err = new OrmIntrospectionError({ adapter: 'mem', table: 'items', cause: 'fail' })\n\t\t\texpect((err.context as any).adapter).toBe('mem')\n\t\t\texpect((err.context as any).table).toBe('items')\n\t\t})\n\n\t\ttest('discriminates from sibling error classes', async () => {\n\t\t\tconst { OrmMigrationError } = await import('./migration')\n\t\t\tconst { OrmValidationError } = await import('./validation')\n\t\t\tconst err = new OrmIntrospectionError({ adapter: 'x', table: 'y', cause: null })\n\t\t\texpect(err).not.toBeInstanceOf(OrmMigrationError)\n\t\t\texpect(err).not.toBeInstanceOf(OrmValidationError)\n\t\t})\n\t})\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\n\nimport { Pool, type PoolClient } from 'pg'\nimport Cursor from 'pg-cursor'\nimport { v } from 'valleyed'\n\nimport {\n\tbuildAggregateQuery,\n\tbuildCountQuery,\n\tbuildCreateQuery,\n\tbuildDeleteQuery,\n\tbuildPkUpdateQuery,\n\tbuildSelectQuery,\n\tbuildUpdateQuery,\n\tbuildUpsertQuery,\n\textractUpsertConflictColumn,\n} from './query'\nimport { EquippedError } from '../../../errors'\nimport { configurable } from '../../../utilities'\nimport type { FieldTypeName } from '../../adapter'\nimport type { FilterGroup } from '../../filter'\nimport type { DiscoveredSchema, ForeignKeyAction } from '../../migrations/introspection-types'\nimport type {\n\tAddFieldChange,\n\tAddForeignKeyChange,\n\tAddIndexChange,\n\tCreateTableChange,\n\tDropFieldChange,\n\tDropForeignKeyChange,\n\tDropIndexChange,\n\tDropTableChange,\n\tModifyFieldChange,\n\tRenameFieldChange,\n\tRenameTableChange,\n} from '../../migrations/types'\nimport { OrmAdapter, type AggregateSpec } from '../../orm-adapter'\nimport type { IterationQueryOptions, QueryOptions } from '../../query-options'\nimport type { AnySchema } from '../../schema'\nimport { flattenOps, type AnyUpdateOp } from '../../updates'\n\nexport type PostgresqlRepoConfig = {\n\tschema?: string\n\ttable: string\n}\n\nexport type PostgresqlConnectionConfig = {\n\thost: string\n\tport: number\n\tusername: string\n\tpassword: string\n\tdatabase: string\n\tssl?: boolean\n}\n\nconst postgresqlConnectionPipe = () =>\n\tv.object({\n\t\thost: v.string(),\n\t\tport: v.number(),\n\t\tusername: v.string(),\n\t\tpassword: v.string(),\n\t\tdatabase: v.string(),\n\t\tssl: v.defaults(v.boolean(), false),\n\t})\n\nconst TRACKER_TABLE = 'equipped_migrations'\nconst ADVISORY_LOCK_KEY = 3_735_928_559\nconst DEFAULT_CURSOR_BATCH_SIZE = 1000\n\ntype PostgresCursor<T extends Record<string, unknown>> = {\n\tread: (rowCount: number) => Promise<T[]>\n\tclose: () => Promise<void>\n}\n\nconst FIELD_TYPE_TO_PG: Record<string, string> = {\n\tstring: 'text',\n\tnumber: 'double precision',\n\tboolean: 'boolean',\n\tdate: 'timestamptz',\n\tnull: 'text',\n\tobject: 'jsonb',\n\tarray: 'jsonb',\n}\n\nconst PG_TO_FIELD_TYPE: Record<string, FieldTypeName> = {\n\ttext: 'string',\n\t'character varying': 'string',\n\tvarchar: 'string',\n\tchar: 'string',\n\tcharacter: 'string',\n\t'double precision': 'number',\n\treal: 'number',\n\tinteger: 'number',\n\tsmallint: 'number',\n\tnumeric: 'number',\n\tdecimal: 'number',\n\tboolean: 'boolean',\n\t'timestamp with time zone': 'date',\n\t'timestamp without time zone': 'date',\n\ttimestamptz: 'date',\n\ttimestamp: 'date',\n\tdate: 'date',\n\tjsonb: 'object',\n\tjson: 'object',\n}\n\nexport class PostgresAdapter extends configurable(postgresqlConnectionPipe, OrmAdapter) {\n\treadonly schemaConfigPipe = v.object({\n\t\tschema: v.optional(v.string()),\n\t\ttable: v.string(),\n\t})\n\n\treadonly supportedFieldTypes = ['string', 'number', 'boolean', 'null', 'object', 'array', 'date'] as const\n\treadonly queryableOps = [\n\t\t'eq',\n\t\t'ne',\n\t\t'gt',\n\t\t'gte',\n\t\t'lt',\n\t\t'lte',\n\t\t'in',\n\t\t'notIn',\n\t\t'like',\n\t\t'exists',\n\t\t'notExists',\n\t\t'contains',\n\t\t'notContains',\n\t] as const\n\treadonly updateOps = ['set', 'inc', 'mul', 'min', 'max', 'unset', 'push', 'pull', 'patch'] as const\n\treadonly aggregateOps = ['count', 'countDistinct', 'sum', 'avg', 'min', 'max'] as const\n\n\treadonly pool: Pool\n\t#sessionStore = new AsyncLocalStorage<PoolClient | undefined>()\n\n\tprotected constructor(config: typeof PostgresAdapter.Config) {\n\t\tsuper(config)\n\t\tthis.pool = new Pool({\n\t\t\thost: config.host,\n\t\t\tport: config.port,\n\t\t\tuser: config.username,\n\t\t\tpassword: config.password,\n\t\t\tdatabase: config.database,\n\t\t\tssl: config.ssl ? { rejectUnauthorized: false } : false,\n\t\t})\n\t}\n\n\t#getClient() {\n\t\treturn this.#sessionStore.getStore() ?? this.pool\n\t}\n\n\t#resolveTableName(config: PostgresqlRepoConfig) {\n\t\treturn config.schema && config.schema !== 'public' ? `${config.schema}.${config.table}` : config.table\n\t}\n\n\tasync connect() {}\n\n\tasync disconnect() {\n\t\ttry {\n\t\t\tawait this.pool.end()\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError('Failed to disconnect PostgreSQL pool', { adapter: 'postgresql' }, error)\n\t\t}\n\t}\n\n\tasync findByPk(schema: AnySchema, config: unknown, pk: unknown) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst pkName = schema.pkField.name\n\t\t\tconst result = await this.#getClient().query(`SELECT * FROM \"${tableName}\" WHERE \"${pkName}\" = $1`, [pk])\n\t\t\treturn result.rows[0] ?? null\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError('PostgreSQL findByPk failed', { adapter: 'postgresql', operation: 'findByPk', table: c.table }, error)\n\t\t}\n\t}\n\n\tasync createMany(_schema: AnySchema, config: unknown, data: Record<string, unknown>[]) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst client = this.#getClient()\n\t\t\tconst results: Record<string, unknown>[] = []\n\t\t\tfor (const doc of data) {\n\t\t\t\tconst { sql, params } = buildCreateQuery(tableName, doc)\n\t\t\t\tconst result = await client.query(sql, params)\n\t\t\t\tresults.push(result.rows[0])\n\t\t\t}\n\t\t\treturn results\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'PostgreSQL createMany failed',\n\t\t\t\t{ adapter: 'postgresql', operation: 'createMany', table: c.table },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync updateByPk(schema: AnySchema, config: unknown, pk: unknown, ops: AnyUpdateOp[]) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst pkName = schema.pkField.name\n\t\t\tconst data = flattenOps(ops)\n\t\t\tif (Object.keys(data).length === 0) {\n\t\t\t\tconst result = await this.#getClient().query(`SELECT * FROM \"${tableName}\" WHERE \"${pkName}\" = $1`, [pk])\n\t\t\t\treturn result.rows[0] ?? null\n\t\t\t}\n\t\t\tconst { sql, params } = buildPkUpdateQuery(tableName, pkName, pk, data)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn result.rows[0] ?? null\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'PostgreSQL updateByPk failed',\n\t\t\t\t{ adapter: 'postgresql', operation: 'updateByPk', table: c.table },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync deleteByPk(schema: AnySchema, config: unknown, pk: unknown) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst pkName = schema.pkField.name\n\t\t\tconst result = await this.#getClient().query(`DELETE FROM \"${tableName}\" WHERE \"${pkName}\" = $1 RETURNING *`, [pk])\n\t\t\treturn result.rows[0] ?? null\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'PostgreSQL deleteByPk failed',\n\t\t\t\t{ adapter: 'postgresql', operation: 'deleteByPk', table: c.table },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync raw(_schema: AnySchema, config: unknown, command: string, params: unknown[] = []) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst result = await this.#getClient().query(command, params)\n\t\t\treturn result\n\t\t} catch (error) {\n\t\t\tif (error instanceof EquippedError) throw error\n\t\t\tthrow new EquippedError('PostgreSQL raw failed', { adapter: 'postgresql', operation: 'raw', table: c.table }, error)\n\t\t}\n\t}\n\n\tasync findMany(schema: AnySchema, config: unknown, filter: FilterGroup, options?: QueryOptions) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst { sql, params } = buildSelectQuery(filter, options, tableName, schema.pkField.name)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn result.rows\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError('PostgreSQL findMany failed', { adapter: 'postgresql', operation: 'findMany', table: c.table }, error)\n\t\t}\n\t}\n\n\tasync count(schema: AnySchema, config: unknown, filter: FilterGroup) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst { sql, params } = buildCountQuery(filter, tableName, schema.pkField.name)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn Number(result.rows[0]?.count ?? 0)\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError('PostgreSQL count failed', { adapter: 'postgresql', operation: 'count', table: c.table }, error)\n\t\t}\n\t}\n\n\tasync *iterateMany(schema: AnySchema, config: unknown, filter: FilterGroup, options?: IterationQueryOptions) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\tlet client: PoolClient | undefined\n\t\tlet releaseClient = false\n\t\tlet cursor: PostgresCursor<Record<string, unknown>> | undefined\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst { sql, params } = buildSelectQuery(filter, options, tableName, schema.pkField.name)\n\t\t\tconst sessionClient = this.#sessionStore.getStore()\n\t\t\tif (sessionClient) {\n\t\t\t\tclient = sessionClient\n\t\t\t} else {\n\t\t\t\tclient = await this.pool.connect()\n\t\t\t\treleaseClient = true\n\t\t\t}\n\t\t\tcursor = client.query(new Cursor<Record<string, unknown>>(sql, params) as any) as PostgresCursor<Record<string, unknown>>\n\t\t\tconst batchSize = options?.batchSize ?? DEFAULT_CURSOR_BATCH_SIZE\n\n\t\t\twhile (true) {\n\t\t\t\tconst rows = await cursor.read(batchSize)\n\t\t\t\tif (rows.length === 0) break\n\t\t\t\tfor (const row of rows) yield row\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError('PostgreSQL iterateMany failed', { adapter: 'postgresql', operation: 'iterateMany', table: c.table }, error)\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tawait cursor?.close()\n\t\t\t} finally {\n\t\t\t\tif (releaseClient) client?.release()\n\t\t\t}\n\t\t}\n\t}\n\n\tasync updateMany(schema: AnySchema, config: unknown, filter: FilterGroup, data: Record<string, unknown>) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst { sql, params } = buildUpdateQuery(filter, tableName, schema.pkField.name, data)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn result.rows\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'PostgreSQL updateMany failed',\n\t\t\t\t{ adapter: 'postgresql', operation: 'updateMany', table: c.table },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync deleteMany(schema: AnySchema, config: unknown, filter: FilterGroup) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst { sql, params } = buildDeleteQuery(filter, tableName, schema.pkField.name)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn result.rows\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'PostgreSQL deleteMany failed',\n\t\t\t\t{ adapter: 'postgresql', operation: 'deleteMany', table: c.table },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync upsertOne(schema: AnySchema, config: unknown, filter: FilterGroup, create: Record<string, unknown>, ops: AnyUpdateOp[]) {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst conflictColumn = extractUpsertConflictColumn(filter, schema.name)\n\t\t\tconst data = ops.length > 0 ? flattenOps(ops) : {}\n\t\t\tconst { sql, params } = buildUpsertQuery(tableName, conflictColumn, schema.pkField.name, create, data)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn result.rows[0]\n\t\t} catch (error) {\n\t\t\tif (error instanceof EquippedError) throw error\n\t\t\tthrow new EquippedError('PostgreSQL upsertOne failed', { adapter: 'postgresql', operation: 'upsertOne', table: c.table }, error)\n\t\t}\n\t}\n\n\tasync aggregate(schema: AnySchema, config: unknown, spec: AggregateSpec): Promise<Array<Record<string, unknown>>> {\n\t\tconst c = config as PostgresqlRepoConfig\n\t\ttry {\n\t\t\tconst tableName = this.#resolveTableName(c)\n\t\t\tconst { sql, params } = buildAggregateQuery(spec, tableName, schema.pkField.name)\n\t\t\tconst result = await this.#getClient().query(sql, params)\n\t\t\treturn result.rows.map((row: Record<string, unknown>) => {\n\t\t\t\tconst mapped: Record<string, unknown> = {}\n\t\t\t\tfor (const agg of spec.aggregates) {\n\t\t\t\t\tconst val = row[agg.alias]\n\t\t\t\t\tif (agg.fn === 'min' || agg.fn === 'max') {\n\t\t\t\t\t\tmapped[agg.alias] = val\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmapped[agg.alias] = typeof val === 'string' ? Number(val) : Number(val ?? 0)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const field of spec.groupBy) {\n\t\t\t\t\tmapped[field] = row[field]\n\t\t\t\t}\n\t\t\t\treturn mapped\n\t\t\t})\n\t\t} catch (error) {\n\t\t\tif (error instanceof EquippedError) throw error\n\t\t\tthrow new EquippedError('PostgreSQL aggregate failed', { adapter: 'postgresql', operation: 'aggregate', table: c.table }, error)\n\t\t}\n\t}\n\n\tasync loadMigrations(): Promise<{ id: string; appliedAt: number }[]> {\n\t\tconst client = this.#getClient()\n\t\tawait client.query(`\n\t\t\tCREATE TABLE IF NOT EXISTS \"${TRACKER_TABLE}\" (\n\t\t\t\tid text PRIMARY KEY,\n\t\t\t\tapplied_at bigint NOT NULL\n\t\t\t)\n\t\t`)\n\t\tconst result = await client.query(`SELECT id, applied_at FROM \"${TRACKER_TABLE}\"`)\n\t\treturn result.rows.map((row: any) => ({ id: row.id, appliedAt: Number(row.applied_at) }))\n\t}\n\n\tasync recordMigration(id: string, appliedAt: number): Promise<void> {\n\t\tconst client = this.#getClient()\n\t\tawait client.query(`INSERT INTO \"${TRACKER_TABLE}\" (id, applied_at) VALUES ($1, $2)`, [id, appliedAt])\n\t}\n\n\tasync acquireMigrationLock<T>(fn: () => Promise<T>): Promise<T> {\n\t\tconst client = this.#getClient()\n\t\tawait client.query(`SELECT pg_advisory_lock($1)`, [ADVISORY_LOCK_KEY])\n\t\ttry {\n\t\t\treturn await fn()\n\t\t} finally {\n\t\t\tawait client.query(`SELECT pg_advisory_unlock($1)`, [ADVISORY_LOCK_KEY])\n\t\t}\n\t}\n\n\tasync applyCreateTable(change: CreateTableChange<any>): Promise<void> {\n\t\tconst pkType = FIELD_TYPE_TO_PG[change.pk.type] ?? 'text'\n\t\tconst cols = [`\"${change.pk.name}\" ${pkType} PRIMARY KEY`]\n\t\tfor (const f of change.fields) {\n\t\t\tcols.push(this.#renderColumnDef(f))\n\t\t}\n\t\tawait this.#getClient().query(`CREATE TABLE \"${change.name}\" (${cols.join(', ')})`)\n\t}\n\n\tasync applyDropTable(change: DropTableChange): Promise<void> {\n\t\tawait this.#getClient().query(`DROP TABLE \"${change.name}\"`)\n\t}\n\n\tasync applyAddField(change: AddFieldChange<any>): Promise<void> {\n\t\tconst colDef = this.#renderColumnDef(change.field)\n\t\tawait this.#getClient().query(`ALTER TABLE \"${change.table}\" ADD COLUMN ${colDef}`)\n\t}\n\n\tasync applyDropField(change: DropFieldChange): Promise<void> {\n\t\tawait this.#getClient().query(`ALTER TABLE \"${change.table}\" DROP COLUMN \"${change.name}\"`)\n\t}\n\n\tasync applyModifyField(change: ModifyFieldChange<any>): Promise<void> {\n\t\tconst client = this.#getClient()\n\t\tconst table = `\"${change.table}\"`\n\t\tconst col = `\"${change.name}\"`\n\t\tconst newType = FIELD_TYPE_TO_PG[change.to.type] ?? 'text'\n\t\tawait client.query(`ALTER TABLE ${table} ALTER COLUMN ${col} TYPE ${newType} USING ${col}::${newType}`)\n\t\tif (change.to.nullable) {\n\t\t\tawait client.query(`ALTER TABLE ${table} ALTER COLUMN ${col} DROP NOT NULL`)\n\t\t} else {\n\t\t\tawait client.query(`ALTER TABLE ${table} ALTER COLUMN ${col} SET NOT NULL`)\n\t\t}\n\t\tif (change.to.default !== undefined) {\n\t\t\tawait client.query(`ALTER TABLE ${table} ALTER COLUMN ${col} SET DEFAULT ${this.#renderDefault(change.to.default)}`)\n\t\t} else {\n\t\t\tawait client.query(`ALTER TABLE ${table} ALTER COLUMN ${col} DROP DEFAULT`)\n\t\t}\n\t\tif (change.to.name !== change.name) {\n\t\t\tawait client.query(`ALTER TABLE ${table} RENAME COLUMN ${col} TO \"${change.to.name}\"`)\n\t\t}\n\t}\n\n\tasync applyRenameTable(change: RenameTableChange): Promise<void> {\n\t\tawait this.#getClient().query(`ALTER TABLE \"${change.from}\" RENAME TO \"${change.to}\"`)\n\t}\n\n\tasync applyRenameField(change: RenameFieldChange): Promise<void> {\n\t\tawait this.#getClient().query(`ALTER TABLE \"${change.table}\" RENAME COLUMN \"${change.from}\" TO \"${change.to}\"`)\n\t}\n\n\tasync applyAddIndex(change: AddIndexChange): Promise<void> {\n\t\tconst name = change.name ?? this.#deriveIndexName(change.table, change.on as string[], change.unique)\n\t\tconst unique = change.unique ? 'UNIQUE ' : ''\n\t\tconst cols = (change.on as string[]).map((c) => `\"${c}\"`).join(', ')\n\t\tawait this.#getClient().query(`CREATE ${unique}INDEX \"${name}\" ON \"${change.table}\" (${cols})`)\n\t}\n\n\tasync applyDropIndex(change: DropIndexChange): Promise<void> {\n\t\tawait this.#getClient().query(`DROP INDEX \"${change.name}\"`)\n\t}\n\n\tasync applyAddForeignKey(change: AddForeignKeyChange): Promise<void> {\n\t\tconst name = change.name ?? `fk_${change.table}_${change.on}`\n\t\tlet sql = `ALTER TABLE \"${change.table}\" ADD CONSTRAINT \"${name}\" FOREIGN KEY (\"${change.on}\") REFERENCES \"${change.references.table}\" (\"${change.references.column}\")`\n\t\tif (change.onDelete) sql += ` ON DELETE ${this.#renderFkAction(change.onDelete)}`\n\t\tif (change.onUpdate) sql += ` ON UPDATE ${this.#renderFkAction(change.onUpdate)}`\n\t\tawait this.#getClient().query(sql)\n\t}\n\n\tasync applyDropForeignKey(change: DropForeignKeyChange): Promise<void> {\n\t\tawait this.#getClient().query(`ALTER TABLE \"${change.table}\" DROP CONSTRAINT \"${change.name}\"`)\n\t}\n\n\tasync introspect(): Promise<DiscoveredSchema[]> {\n\t\tconst { OrmIntrospectionError } = await import('../../errors/introspection')\n\t\tconst client = this.#getClient()\n\n\t\tconst tablesResult = await client.query(`\n\t\t\tSELECT table_name FROM information_schema.tables\n\t\t\tWHERE table_schema = 'public' AND table_type = 'BASE TABLE' AND table_name != $1\n\t\t`, [TRACKER_TABLE])\n\n\t\tconst schemas: DiscoveredSchema[] = []\n\n\t\tfor (const tableRow of tablesResult.rows) {\n\t\t\tconst tableName = tableRow.table_name\n\n\t\t\tconst colsResult = await client.query(`\n\t\t\t\tSELECT column_name, data_type, is_nullable, column_default\n\t\t\t\tFROM information_schema.columns\n\t\t\t\tWHERE table_schema = 'public' AND table_name = $1\n\t\t\t\tORDER BY ordinal_position\n\t\t\t`, [tableName])\n\n\t\t\tconst pkResult = await client.query(`\n\t\t\t\tSELECT kcu.column_name\n\t\t\t\tFROM information_schema.table_constraints tc\n\t\t\t\tJOIN information_schema.key_column_usage kcu\n\t\t\t\t\tON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema\n\t\t\t\tWHERE tc.table_schema = 'public' AND tc.table_name = $1 AND tc.constraint_type = 'PRIMARY KEY'\n\t\t\t`, [tableName])\n\n\t\t\tconst pkColName = pkResult.rows[0]?.column_name as string | undefined\n\n\t\t\tconst uniqueResult = await client.query(`\n\t\t\t\tSELECT kcu.column_name\n\t\t\t\tFROM information_schema.table_constraints tc\n\t\t\t\tJOIN information_schema.key_column_usage kcu\n\t\t\t\t\tON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema\n\t\t\t\tWHERE tc.table_schema = 'public' AND tc.table_name = $1 AND tc.constraint_type = 'UNIQUE'\n\t\t\t`, [tableName])\n\t\t\tconst uniqueCols = new Set(uniqueResult.rows.map((r: any) => r.column_name))\n\n\t\t\tlet pk: { name: string; type: FieldTypeName } | undefined\n\t\t\tconst fields: { name: string; type: FieldTypeName; nullable: boolean; default?: string | number | boolean | null; unique?: boolean }[] = []\n\n\t\t\tfor (const col of colsResult.rows) {\n\t\t\t\tconst pgType = (col.data_type as string).toLowerCase()\n\t\t\t\tconst fieldType = PG_TO_FIELD_TYPE[pgType]\n\t\t\t\tif (!fieldType) {\n\t\t\t\t\tthrow new OrmIntrospectionError({ adapter: 'postgresql', table: tableName, cause: `Unsupported column type '${pgType}' on column '${col.column_name}'` })\n\t\t\t\t}\n\n\t\t\t\tif (col.column_name === pkColName) {\n\t\t\t\t\tpk = { name: col.column_name, type: fieldType }\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst nullable = col.is_nullable === 'YES'\n\t\t\t\tconst raw = col.column_default as string | null\n\t\t\t\tconst def = this.#parseDefault(raw)\n\n\t\t\t\tfields.push({\n\t\t\t\t\tname: col.column_name,\n\t\t\t\t\ttype: fieldType,\n\t\t\t\t\tnullable,\n\t\t\t\t\t...(def !== undefined ? { default: def } : {}),\n\t\t\t\t\t...(uniqueCols.has(col.column_name) ? { unique: true } : {}),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tconst idxResult = await client.query(`\n\t\t\t\tSELECT indexname, indexdef\n\t\t\t\tFROM pg_indexes\n\t\t\t\tWHERE schemaname = 'public' AND tablename = $1\n\t\t\t`, [tableName])\n\n\t\t\tconst indexes: { name: string; on: readonly string[]; unique: boolean }[] = []\n\t\t\tfor (const idx of idxResult.rows) {\n\t\t\t\tconst idxName = idx.indexname as string\n\t\t\t\tconst idxDef = idx.indexdef as string\n\t\t\t\tif (idxDef.includes('PRIMARY KEY') || idxName.endsWith('_pkey')) continue\n\t\t\t\tconst unique = idxDef.toUpperCase().includes('UNIQUE')\n\t\t\t\tconst colMatch = idxDef.match(/\\(([^)]+)\\)/)\n\t\t\t\tconst cols = colMatch ? colMatch[1].split(',').map((c: string) => c.trim().replace(/\"/g, '')) : []\n\t\t\t\tindexes.push({ name: idxName, on: cols, unique })\n\t\t\t}\n\n\t\t\tconst fkResult = await client.query(`\n\t\t\t\tSELECT\n\t\t\t\t\ttc.constraint_name,\n\t\t\t\t\tkcu.column_name,\n\t\t\t\t\tccu.table_name AS foreign_table_name,\n\t\t\t\t\tccu.column_name AS foreign_column_name,\n\t\t\t\t\trc.delete_rule,\n\t\t\t\t\trc.update_rule\n\t\t\t\tFROM information_schema.table_constraints tc\n\t\t\t\tJOIN information_schema.key_column_usage kcu\n\t\t\t\t\tON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema\n\t\t\t\tJOIN information_schema.constraint_column_usage ccu\n\t\t\t\t\tON tc.constraint_name = ccu.constraint_name AND tc.table_schema = ccu.table_schema\n\t\t\t\tJOIN information_schema.referential_constraints rc\n\t\t\t\t\tON tc.constraint_name = rc.constraint_name AND tc.table_schema = rc.constraint_schema\n\t\t\t\tWHERE tc.table_schema = 'public' AND tc.table_name = $1 AND tc.constraint_type = 'FOREIGN KEY'\n\t\t\t`, [tableName])\n\n\t\t\tconst foreignKeys: { name: string; on: string; references: { table: string; column: string }; onDelete?: ForeignKeyAction; onUpdate?: ForeignKeyAction }[] = []\n\t\t\tfor (const fk of fkResult.rows) {\n\t\t\t\tforeignKeys.push({\n\t\t\t\t\tname: fk.constraint_name,\n\t\t\t\t\ton: fk.column_name,\n\t\t\t\t\treferences: { table: fk.foreign_table_name, column: fk.foreign_column_name },\n\t\t\t\t\t...(fk.delete_rule && fk.delete_rule !== 'NO ACTION' ? { onDelete: this.#parseFkAction(fk.delete_rule) } : {}),\n\t\t\t\t\t...(fk.update_rule && fk.update_rule !== 'NO ACTION' ? { onUpdate: this.#parseFkAction(fk.update_rule) } : {}),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tschemas.push({ name: tableName, pk, fields, indexes, foreignKeys })\n\t\t}\n\n\t\treturn schemas\n\t}\n\n\t#renderColumnDef(f: { name: string; type: string; nullable?: boolean; default?: string | number | boolean | null; unique?: boolean }): string {\n\t\tconst pgType = FIELD_TYPE_TO_PG[f.type] ?? 'text'\n\t\tlet def = `\"${f.name}\" ${pgType}`\n\t\tif (!f.nullable) def += ' NOT NULL'\n\t\tif (f.default !== undefined) def += ` DEFAULT ${this.#renderDefault(f.default)}`\n\t\tif (f.unique) def += ' UNIQUE'\n\t\treturn def\n\t}\n\n\t#renderDefault(val: string | number | boolean | null | undefined): string {\n\t\tif (val === null) return 'NULL'\n\t\tif (typeof val === 'string') return `'${val.replace(/'/g, \"''\")}'`\n\t\tif (typeof val === 'boolean') return val ? 'TRUE' : 'FALSE'\n\t\treturn String(val)\n\t}\n\n\t#deriveIndexName(table: string, cols: string[], unique?: boolean): string {\n\t\tconst base = `idx_${table}_${cols.join('_')}`\n\t\treturn unique ? `${base}_unique` : base\n\t}\n\n\t#renderFkAction(action: string): string {\n\t\tconst map: Record<string, string> = { cascade: 'CASCADE', restrict: 'RESTRICT', setnull: 'SET NULL', noaction: 'NO ACTION' }\n\t\treturn map[action.toLowerCase()] ?? 'NO ACTION'\n\t}\n\n\t#parseFkAction(rule: string): ForeignKeyAction {\n\t\tconst map: Record<string, ForeignKeyAction> = { CASCADE: 'cascade', RESTRICT: 'restrict', 'SET NULL': 'setNull' }\n\t\treturn map[rule.toUpperCase()] ?? 'noAction'\n\t}\n\n\t#parseDefault(raw: string | null): string | number | boolean | null | undefined {\n\t\tif (raw === null || raw === undefined) return undefined\n\t\tif (raw === 'NULL' || raw === 'NULL::text') return null\n\t\tif (raw === 'true' || raw === 'TRUE') return true\n\t\tif (raw === 'false' || raw === 'FALSE') return false\n\t\tconst numMatch = raw.match(/^(-?\\d+(?:\\.\\d+)?)$/)\n\t\tif (numMatch) return Number(numMatch[1])\n\t\tconst strMatch = raw.match(/^'(.*)'(?:::.*)?$/)\n\t\tif (strMatch) return strMatch[1].replace(/''/g, \"'\")\n\t\treturn undefined\n\t}\n\n\tasync session<T>(fn: () => Promise<T>): Promise<T> {\n\t\tif (this.#sessionStore.getStore()) return fn()\n\t\tlet client: PoolClient | undefined\n\t\ttry {\n\t\t\tclient = await this.pool.connect()\n\t\t\tawait client.query('BEGIN')\n\t\t\tconst result = await this.#sessionStore.run(client, fn)\n\t\t\tawait client.query('COMMIT')\n\t\t\treturn result\n\t\t} catch (error) {\n\t\t\tif (client) {\n\t\t\t\ttry {\n\t\t\t\t\tawait client.query('ROLLBACK')\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore rollback errors and report original failure\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (error instanceof EquippedError) throw error\n\t\t\tthrow new EquippedError('PostgreSQL session failed', { adapter: 'postgresql', operation: 'session' }, error)\n\t\t} finally {\n\t\t\tclient?.release()\n\t\t}\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf, vi, beforeEach, afterEach } = import.meta.vitest\n\n\tconst testConnectionConfig = {\n\t\thost: 'localhost',\n\t\tport: 5432,\n\t\tusername: 'test',\n\t\tpassword: 'test',\n\t\tdatabase: 'testdb',\n\t\tssl: false,\n\t} as const\n\n\tdescribe('PostgresAdapter: class-via-configurable shape', () => {\n\t\tlet onSpy: ReturnType<typeof vi.spyOn>\n\n\t\tbeforeEach(async () => {\n\t\t\tconst { Instance } = await import('../../../instance')\n\t\t\tonSpy = vi.spyOn(Instance, 'on').mockImplementation(() => {})\n\t\t})\n\n\t\tafterEach(() => {\n\t\t\tonSpy.mockRestore()\n\t\t})\n\n\t\ttest('PostgresAdapter.create returns instance with correct capability declarations', () => {\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\n\t\t\texpect(adapter.supportedFieldTypes).toEqual(['string', 'number', 'boolean', 'null', 'object', 'array', 'date'])\n\t\t\texpect(adapter.queryableOps).toEqual([\n\t\t\t\t'eq',\n\t\t\t\t'ne',\n\t\t\t\t'gt',\n\t\t\t\t'gte',\n\t\t\t\t'lt',\n\t\t\t\t'lte',\n\t\t\t\t'in',\n\t\t\t\t'notIn',\n\t\t\t\t'like',\n\t\t\t\t'exists',\n\t\t\t\t'notExists',\n\t\t\t\t'contains',\n\t\t\t\t'notContains',\n\t\t\t])\n\t\t\texpect(adapter.updateOps).toEqual(['set', 'inc', 'mul', 'min', 'max', 'unset', 'push', 'pull', 'patch'])\n\t\t})\n\n\t\ttest('PostgresAdapter.create validates connection config', () => {\n\t\t\texpect(() => PostgresAdapter.create({ host: 123, port: 'bad' } as any)).toThrow()\n\t\t})\n\n\t\ttest('pool is exposed as a readonly instance field', () => {\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\n\t\t\texpect(adapter.pool).toBeInstanceOf(Pool)\n\t\t})\n\n\t\ttest('schemaConfigPipe is declared as readonly with table-name shape', () => {\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\n\t\t\texpect(adapter.schemaConfigPipe).toBeDefined()\n\t\t})\n\n\t\ttest('auto-wires Instance hooks for connect and disconnect', () => {\n\t\t\tPostgresAdapter.create(testConnectionConfig)\n\n\t\t\texpect(onSpy).toHaveBeenCalledWith('start', expect.any(Function), expect.objectContaining({ class: PostgresAdapter }))\n\t\t\texpect(onSpy).toHaveBeenCalledWith('close', expect.any(Function), expect.objectContaining({ class: PostgresAdapter }))\n\t\t})\n\n\t\ttest('adapter.use returns OrmUse-shaped object', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst use = adapter.use(schema, { table: 'test' })\n\n\t\t\texpect(use.findMany).toBeTypeOf('function')\n\t\t\texpect(use.iterateMany).toBeTypeOf('function')\n\t\t\texpect(use.findOne).toBeTypeOf('function')\n\t\t\texpect(use.count).toBeTypeOf('function')\n\t\t\texpect(use.createOne).toBeTypeOf('function')\n\t\t\texpect(use.createMany).toBeTypeOf('function')\n\t\t\texpect(use.updateMany).toBeTypeOf('function')\n\t\t\texpect(use.updateOne).toBeTypeOf('function')\n\t\t\texpect(use.upsertOne).toBeTypeOf('function')\n\t\t\texpect(use.deleteOne).toBeTypeOf('function')\n\t\t\texpect(use.deleteMany).toBeTypeOf('function')\n\t\t\texpect(use.raw).toBeTypeOf('function')\n\t\t})\n\n\t\ttest('type-level: capability declarations use as const', () => {\n\t\t\tconst _adapter = PostgresAdapter.create(testConnectionConfig)\n\n\t\t\ttype Ops = typeof _adapter.updateOps\n\t\t\texpectTypeOf<Ops>().toEqualTypeOf<readonly ['set', 'inc', 'mul', 'min', 'max', 'unset', 'push', 'pull', 'patch']>()\n\n\t\t\ttype Types = typeof _adapter.supportedFieldTypes\n\t\t\texpectTypeOf<Types>().toEqualTypeOf<readonly ['string', 'number', 'boolean', 'null', 'object', 'array', 'date']>()\n\n\t\t\ttype QOps = typeof _adapter.queryableOps\n\t\t\texpectTypeOf<QOps>().toEqualTypeOf<\n\t\t\t\treadonly ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'notIn', 'like', 'exists', 'notExists', 'contains', 'notContains']\n\t\t\t>()\n\t\t})\n\n\t\ttest('type-level: Repo.from with PostgresAdapter enables all builder methods', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve(() => ({ table: 'test' }))\n\t\t\t\t.build()\n\t\t\tconst _TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\n\t\t\tconst _one = repo.on(_TestSchema).one()\n\t\t\tconst _all = repo.on(_TestSchema).all()\n\t\t\tconst _ref = repo.on(_TestSchema)\n\t\t\texpectTypeOf(_one.create).toBeFunction()\n\t\t\texpectTypeOf(_one.find).toBeFunction()\n\t\t\texpectTypeOf(_one.update).toBeFunction()\n\t\t\texpectTypeOf(_one.delete).toBeFunction()\n\t\t\texpectTypeOf(_one.upsert).toBeFunction()\n\t\t\texpectTypeOf(_all.create).toBeFunction()\n\t\t\texpectTypeOf(_all.find).toBeFunction()\n\t\t\texpectTypeOf(_all.count).toBeFunction()\n\t\t\texpectTypeOf(_all.update).toBeFunction()\n\t\t\texpectTypeOf(_all.delete).toBeFunction()\n\t\t\texpectTypeOf(_ref.raw).toBeFunction()\n\t\t\texpectTypeOf(repo.session).toBeFunction()\n\t\t})\n\n\t\ttest('type-level: raw arg-tuple infers (command: string, params?: unknown[]) from PostgresAdapter', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve(() => ({ table: 'test' }))\n\t\t\t\t.build()\n\t\t\tconst _TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst _ref = repo.on(_TestSchema)\n\n\t\t\texpectTypeOf(_ref.raw).parameters.toEqualTypeOf<[command: string, params?: unknown[]]>()\n\t\t})\n\n\t\ttest('type-level: per-call <T> override narrows PostgresAdapter raw return type', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve(() => ({ table: 'test' }))\n\t\t\t\t.build()\n\t\t\tconst _TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst _ref = repo.on(_TestSchema)\n\n\t\t\texpectTypeOf(_ref.raw<{ id: string }[]>).returns.toEqualTypeOf<Promise<{ id: string }[]>>()\n\t\t})\n\n\t\ttest('count forwards COUNT query to pool.query and returns a number', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\n\t\t\tconst schema = Schema.from('pg_count')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tlet capturedSql: unknown\n\t\t\tlet capturedParams: unknown\n\t\t\t;(adapter.pool as any).query = async (sql: unknown, params: unknown) => {\n\t\t\t\tcapturedSql = sql\n\t\t\t\tcapturedParams = params\n\t\t\t\treturn { rows: [{ count: '4' }] }\n\t\t\t}\n\n\t\t\tconst result = await adapter.count(schema, { table: 'users' }, FilterGroup.create().eq('name', 'Alice'))\n\t\t\texpect(capturedSql).toBe('SELECT COUNT(*) as count FROM \"users\" WHERE \"name\" = $1')\n\t\t\texpect(capturedParams).toEqual(['Alice'])\n\t\t\texpect(result).toBe(4)\n\t\t})\n\n\t\ttest('raw forwards (command, params) to pool.query at runtime', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('pg_raw')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tlet capturedCommand: unknown\n\t\t\tlet capturedParams: unknown\n\t\t\tconst mockResult = { rows: [{ id: '1' }], rowCount: 1 }\n\t\t\t;(adapter.pool as any).query = async (cmd: unknown, params: unknown) => {\n\t\t\t\tcapturedCommand = cmd\n\t\t\t\tcapturedParams = params\n\t\t\t\treturn mockResult\n\t\t\t}\n\t\t\tconst result = await adapter.use(schema, { table: 'users' }).raw('SELECT * FROM users WHERE id = $1', ['abc'])\n\t\t\texpect(capturedCommand).toBe('SELECT * FROM users WHERE id = $1')\n\t\t\texpect(capturedParams).toEqual(['abc'])\n\t\t\texpect(result).toBe(mockResult)\n\t\t})\n\n\t\ttest('raw defaults params to [] when omitted', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('pg_raw2')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tlet capturedParams: unknown\n\t\t\t;(adapter.pool as any).query = async (_cmd: unknown, params: unknown) => {\n\t\t\t\tcapturedParams = params\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t\tawait adapter.use(schema, { table: 'users' }).raw('SELECT 1')\n\t\t\texpect(capturedParams).toEqual([])\n\t\t})\n\n\t\ttest('iterateMany opens a dedicated cursor client, reads in batchSize chunks, and releases on completion', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\t\t\tconst { OrderBy } = await import('../../query-options')\n\n\t\t\tconst schema = Schema.from('pg_iter')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('age', v.number())\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tlet capturedCursor: Cursor<Record<string, unknown>> | undefined\n\t\t\tconst release = vi.fn()\n\t\t\tconst cursor = {\n\t\t\t\tread: vi.fn()\n\t\t\t\t\t.mockResolvedValueOnce([{ id: 'u3', age: 40 }])\n\t\t\t\t\t.mockResolvedValueOnce([{ id: 'u1', age: 30 }])\n\t\t\t\t\t.mockResolvedValueOnce([]),\n\t\t\t\tclose: vi.fn().mockResolvedValue(undefined),\n\t\t\t}\n\t\t\tconst client = {\n\t\t\t\tquery: vi.fn((query: Cursor<Record<string, unknown>>) => {\n\t\t\t\t\tcapturedCursor = query\n\t\t\t\t\treturn cursor\n\t\t\t\t}),\n\t\t\t\trelease,\n\t\t\t}\n\t\t\t;(adapter.pool as any).connect = vi.fn(async () => client)\n\n\t\t\tconst rows: Record<string, unknown>[] = []\n\t\t\tfor await (const row of adapter.use(schema, { table: 'people' }).iterateMany(FilterGroup.create().gt('age', 19), {\n\t\t\t\torderBy: [new OrderBy('age', 'desc')],\n\t\t\t\toffset: 1,\n\t\t\t\tlimit: 2,\n\t\t\t\tbatchSize: 1,\n\t\t\t})) {\n\t\t\t\trows.push(row)\n\t\t\t}\n\n\t\t\texpect((adapter.pool as any).connect).toHaveBeenCalledTimes(1)\n\t\t\texpect(capturedCursor).toBeInstanceOf(Cursor)\n\t\t\tconst capturedCursorConfig = capturedCursor as unknown as { text: string; values: unknown[] }\n\t\t\texpect(capturedCursorConfig.text).toBe('SELECT * FROM \"people\" WHERE \"age\" > $1 ORDER BY \"age\" DESC LIMIT $2 OFFSET $3')\n\t\t\texpect(capturedCursorConfig.values).toEqual(['19', '2', '1'])\n\t\t\texpect(cursor.read).toHaveBeenNthCalledWith(1, 1)\n\t\t\texpect(cursor.read).toHaveBeenNthCalledWith(2, 1)\n\t\t\texpect(cursor.read).toHaveBeenNthCalledWith(3, 1)\n\t\t\texpect(cursor.close).toHaveBeenCalledTimes(1)\n\t\t\texpect(release).toHaveBeenCalledTimes(1)\n\t\t\texpect(rows).toEqual([{ id: 'u3', age: 40 }, { id: 'u1', age: 30 }])\n\t\t})\n\n\t\ttest('iterateMany closes cursor and releases dedicated client on early break', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\n\t\t\tconst schema = Schema.from('pg_iter_break')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst release = vi.fn()\n\t\t\tconst cursor = {\n\t\t\t\tread: vi.fn().mockResolvedValueOnce([{ id: 'u1' }, { id: 'u2' }]),\n\t\t\t\tclose: vi.fn().mockResolvedValue(undefined),\n\t\t\t}\n\t\t\t;(adapter.pool as any).connect = vi.fn(async () => ({\n\t\t\t\tquery: vi.fn(() => cursor),\n\t\t\t\trelease,\n\t\t\t}))\n\n\t\t\tconst rows: Record<string, unknown>[] = []\n\t\t\tfor await (const row of adapter.use(schema, { table: 'people' }).iterateMany(FilterGroup.create())) {\n\t\t\t\trows.push(row)\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\texpect(rows).toEqual([{ id: 'u1' }])\n\t\t\texpect(cursor.close).toHaveBeenCalledTimes(1)\n\t\t\texpect(release).toHaveBeenCalledTimes(1)\n\t\t})\n\n\t\ttest('iterateMany closes cursor and releases dedicated client when the consumer throws', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\n\t\t\tconst schema = Schema.from('pg_iter_throw')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst release = vi.fn()\n\t\t\tconst cursor = {\n\t\t\t\tread: vi.fn().mockResolvedValueOnce([{ id: 'u1' }]),\n\t\t\t\tclose: vi.fn().mockResolvedValue(undefined),\n\t\t\t}\n\t\t\t;(adapter.pool as any).connect = vi.fn(async () => ({\n\t\t\t\tquery: vi.fn(() => cursor),\n\t\t\t\trelease,\n\t\t\t}))\n\t\t\tconst consumerError = new Error('consumer failed')\n\n\t\t\tawait expect(async () => {\n\t\t\t\tfor await (const _row of adapter.use(schema, { table: 'people' }).iterateMany(FilterGroup.create())) {\n\t\t\t\t\tthrow consumerError\n\t\t\t\t}\n\t\t\t}).rejects.toThrow(consumerError)\n\n\t\t\texpect(cursor.close).toHaveBeenCalledTimes(1)\n\t\t\texpect(release).toHaveBeenCalledTimes(1)\n\t\t})\n\n\t\ttest('iterateMany inside a session uses the active client and leaves release ownership to session', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\n\t\t\tconst schema = Schema.from('pg_iter_session')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst events: string[] = []\n\t\t\tconst release = vi.fn(() => events.push('release'))\n\t\t\tconst cursor = {\n\t\t\t\tread: vi.fn()\n\t\t\t\t\t.mockResolvedValueOnce([{ id: 'u1' }])\n\t\t\t\t\t.mockResolvedValueOnce([]),\n\t\t\t\tclose: vi.fn(async () => events.push('cursor.close')),\n\t\t\t}\n\t\t\tconst client = {\n\t\t\t\tquery: vi.fn((query: string | Cursor<Record<string, unknown>>) => {\n\t\t\t\t\tif (typeof query === 'string') {\n\t\t\t\t\t\tevents.push(query)\n\t\t\t\t\t\treturn { rows: [] }\n\t\t\t\t\t}\n\t\t\t\t\tevents.push('cursor.open')\n\t\t\t\t\treturn cursor\n\t\t\t\t}),\n\t\t\t\trelease,\n\t\t\t}\n\t\t\t;(adapter.pool as any).connect = vi.fn(async () => client)\n\n\t\t\tconst rows: Record<string, unknown>[] = []\n\t\t\tawait adapter.session(async () => {\n\t\t\t\tfor await (const row of adapter.use(schema, { table: 'people' }).iterateMany(FilterGroup.create(), { batchSize: 1 })) {\n\t\t\t\t\trows.push(row)\n\t\t\t\t}\n\t\t\t\tevents.push('session.body.done')\n\t\t\t})\n\n\t\t\texpect((adapter.pool as any).connect).toHaveBeenCalledTimes(1)\n\t\t\texpect(rows).toEqual([{ id: 'u1' }])\n\t\t\texpect(events).toEqual(['BEGIN', 'cursor.open', 'cursor.close', 'session.body.done', 'COMMIT', 'release'])\n\t\t\texpect(release).toHaveBeenCalledTimes(1)\n\t\t})\n\n\t\ttest('session method is exposed on the adapter', () => {\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\texpect(adapter.session).toBeDefined()\n\t\t\texpect(adapter.session).toBeTypeOf('function')\n\t\t})\n\n\t\ttest('declares aggregateOps with all six canonical ops', () => {\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\texpect(adapter.aggregateOps).toEqual(['count', 'countDistinct', 'sum', 'avg', 'min', 'max'])\n\t\t})\n\n\t\ttest('type-level: aggregateOps is a readonly tuple of all six ops', () => {\n\t\t\tconst _adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\ttype AggOps = typeof _adapter.aggregateOps\n\t\t\texpectTypeOf<AggOps>().toEqualTypeOf<\n\t\t\t\treadonly ['count', 'countDistinct', 'sum', 'avg', 'min', 'max']\n\t\t\t>()\n\t\t})\n\n\t\ttest('aggregate method forwards spec to pool.query and returns mapped rows', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('pg_agg')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('amount', v.number())\n\t\t\t\t.field('region', v.string())\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tlet capturedSql: unknown\n\t\t\tlet capturedParams: unknown\n\t\t\t;(adapter.pool as any).query = async (sql: unknown, params: unknown) => {\n\t\t\t\tcapturedSql = sql\n\t\t\t\tcapturedParams = params\n\t\t\t\treturn { rows: [{ total: '5' }] }\n\t\t\t}\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'orders' }, {\n\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\tgroupBy: [],\n\t\t\t})\n\t\t\texpect(capturedSql).toBe('SELECT COUNT(*) AS \"total\" FROM \"orders\"')\n\t\t\texpect(capturedParams).toEqual([])\n\t\t\texpect(result).toEqual([{ total: 5 }])\n\t\t})\n\n\t\ttest('aggregate converts PG bigint/numeric strings to numbers for count/sum/avg', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('pg_agg_types')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('amount', v.number())\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\t;(adapter.pool as any).query = async () => ({\n\t\t\t\trows: [{ cnt: '10', revenue: '250.50', avgAmt: '25.05' }],\n\t\t\t})\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'orders' }, {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'count', alias: 'cnt' },\n\t\t\t\t\t{ fn: 'sum', field: 'amount', alias: 'revenue' },\n\t\t\t\t\t{ fn: 'avg', field: 'amount', alias: 'avgAmt' },\n\t\t\t\t],\n\t\t\t\tgroupBy: [],\n\t\t\t})\n\t\t\texpect(result[0].cnt).toBe(10)\n\t\t\texpect(result[0].revenue).toBe(250.5)\n\t\t\texpect(result[0].avgAmt).toBe(25.05)\n\t\t})\n\n\t\ttest('aggregate preserves original type for min/max', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('pg_agg_minmax')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\t;(adapter.pool as any).query = async () => ({\n\t\t\t\trows: [{ lowest: 'Alice', highest: 'Zara' }],\n\t\t\t})\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'users' }, {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'min', field: 'name', alias: 'lowest' },\n\t\t\t\t\t{ fn: 'max', field: 'name', alias: 'highest' },\n\t\t\t\t],\n\t\t\t\tgroupBy: [],\n\t\t\t})\n\t\t\texpect(result[0].lowest).toBe('Alice')\n\t\t\texpect(result[0].highest).toBe('Zara')\n\t\t})\n\n\t\ttest('aggregate includes groupBy fields in result rows', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst schema = Schema.from('pg_agg_group')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('region', v.string())\n\t\t\t\t.build()\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\t;(adapter.pool as any).query = async () => ({\n\t\t\t\trows: [\n\t\t\t\t\t{ cnt: '3', region: 'US' },\n\t\t\t\t\t{ cnt: '2', region: 'EU' },\n\t\t\t\t],\n\t\t\t})\n\t\t\tconst result = await adapter.aggregate(schema, { table: 'orders' }, {\n\t\t\t\taggregates: [{ fn: 'count', alias: 'cnt' }],\n\t\t\t\tgroupBy: ['region'],\n\t\t\t})\n\t\t\texpect(result).toEqual([\n\t\t\t\t{ cnt: 3, region: 'US' },\n\t\t\t\t{ cnt: 2, region: 'EU' },\n\t\t\t])\n\t\t})\n\n\t\ttest('type-level: Repo.from with PostgresAdapter enables aggregate method', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tconst adapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tconst repo = Repo.from(adapter)\n\t\t\t\t.resolve(() => ({ table: 'test' }))\n\t\t\t\t.build()\n\t\t\tconst _TestSchema = Schema.from('test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\n\t\t\tconst _ref = repo.on(_TestSchema)\n\t\t\texpectTypeOf(_ref.aggregate).toBeFunction()\n\t\t})\n\t})\n\n\tdescribe('PostgresAdapter: migration methods', () => {\n\t\tlet onSpy: ReturnType<typeof vi.spyOn>\n\t\tlet adapter: PostgresAdapter\n\t\tlet queries: { sql: string; params?: unknown[] }[]\n\n\t\tbeforeEach(async () => {\n\t\t\tconst { Instance } = await import('../../../instance')\n\t\t\tonSpy = vi.spyOn(Instance, 'on').mockImplementation(() => {})\n\t\t\tadapter = PostgresAdapter.create(testConnectionConfig)\n\t\t\tqueries = []\n\t\t\t;(adapter.pool as any).query = async (sql: string, params?: unknown[]) => {\n\t\t\t\tqueries.push({ sql, params })\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t})\n\n\t\tafterEach(() => {\n\t\t\tonSpy.mockRestore()\n\t\t})\n\n\t\ttest('loadMigrations creates tracker table then selects rows', async () => {\n\t\t\t;(adapter.pool as any).query = async (sql: string, params?: unknown[]) => {\n\t\t\t\tqueries.push({ sql, params })\n\t\t\t\tif (sql.includes('SELECT id')) {\n\t\t\t\t\treturn { rows: [{ id: '0001', applied_at: '1700000000000' }] }\n\t\t\t\t}\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t\tconst result = await adapter.loadMigrations()\n\t\t\texpect(queries).toHaveLength(2)\n\t\t\texpect(queries[0].sql).toContain('CREATE TABLE IF NOT EXISTS')\n\t\t\texpect(queries[0].sql).toContain('equipped_migrations')\n\t\t\texpect(queries[1].sql).toContain('SELECT id, applied_at')\n\t\t\texpect(result).toEqual([{ id: '0001', appliedAt: 1700000000000 }])\n\t\t})\n\n\t\ttest('recordMigration inserts into tracker table', async () => {\n\t\t\tawait adapter.recordMigration('0001-init', 1700000000000)\n\t\t\texpect(queries).toHaveLength(1)\n\t\t\texpect(queries[0].sql).toContain('INSERT INTO')\n\t\t\texpect(queries[0].sql).toContain('equipped_migrations')\n\t\t\texpect(queries[0].params).toEqual(['0001-init', 1700000000000])\n\t\t})\n\n\t\ttest('acquireMigrationLock wraps fn with pg_advisory_lock/unlock', async () => {\n\t\t\tconst result = await adapter.acquireMigrationLock(async () => {\n\t\t\t\tqueries.push({ sql: 'USER_FN' })\n\t\t\t\treturn 42\n\t\t\t})\n\t\t\texpect(result).toBe(42)\n\t\t\texpect(queries[0].sql).toContain('pg_advisory_lock')\n\t\t\texpect(queries[1].sql).toBe('USER_FN')\n\t\t\texpect(queries[2].sql).toContain('pg_advisory_unlock')\n\t\t})\n\n\t\ttest('acquireMigrationLock unlocks even on error', async () => {\n\t\t\tawait expect(adapter.acquireMigrationLock(async () => {\n\t\t\t\tthrow new Error('boom')\n\t\t\t})).rejects.toThrow('boom')\n\t\t\texpect(queries[0].sql).toContain('pg_advisory_lock')\n\t\t\texpect(queries[1].sql).toContain('pg_advisory_unlock')\n\t\t})\n\n\t\ttest('applyCreateTable generates correct DDL', async () => {\n\t\t\tawait adapter.applyCreateTable({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: 'users',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [\n\t\t\t\t\t{ name: 'email', type: 'string', unique: true },\n\t\t\t\t\t{ name: 'age', type: 'number', nullable: true },\n\t\t\t\t\t{ name: 'active', type: 'boolean', default: true },\n\t\t\t\t],\n\t\t\t})\n\t\t\texpect(queries).toHaveLength(1)\n\t\t\tconst sql = queries[0].sql\n\t\t\texpect(sql).toContain('CREATE TABLE \"users\"')\n\t\t\texpect(sql).toContain('\"id\" text PRIMARY KEY')\n\t\t\texpect(sql).toContain('\"email\" text NOT NULL UNIQUE')\n\t\t\texpect(sql).toContain('\"age\" double precision')\n\t\t\texpect(sql).not.toContain('\"age\" double precision NOT NULL')\n\t\t\texpect(sql).toContain('\"active\" boolean NOT NULL DEFAULT TRUE')\n\t\t})\n\n\t\ttest('applyDropTable generates DROP TABLE', async () => {\n\t\t\tawait adapter.applyDropTable({ kind: 'dropTable', name: 'users' })\n\t\t\texpect(queries[0].sql).toBe('DROP TABLE \"users\"')\n\t\t})\n\n\t\ttest('applyAddField generates ALTER TABLE ADD COLUMN', async () => {\n\t\t\tawait adapter.applyAddField({\n\t\t\t\tkind: 'addField',\n\t\t\t\ttable: 'users',\n\t\t\t\tfield: { name: 'bio', type: 'string', nullable: true, default: 'none' },\n\t\t\t})\n\t\t\texpect(queries[0].sql).toContain('ALTER TABLE \"users\" ADD COLUMN')\n\t\t\texpect(queries[0].sql).toContain('\"bio\" text')\n\t\t\texpect(queries[0].sql).not.toContain('NOT NULL')\n\t\t\texpect(queries[0].sql).toContain(\"DEFAULT 'none'\")\n\t\t})\n\n\t\ttest('applyDropField generates ALTER TABLE DROP COLUMN', async () => {\n\t\t\tawait adapter.applyDropField({ kind: 'dropField', table: 'users', name: 'bio' })\n\t\t\texpect(queries[0].sql).toBe('ALTER TABLE \"users\" DROP COLUMN \"bio\"')\n\t\t})\n\n\t\ttest('applyModifyField generates ALTER COLUMN statements for type, nullable, default', async () => {\n\t\t\tawait adapter.applyModifyField({\n\t\t\t\tkind: 'modifyField',\n\t\t\t\ttable: 'users',\n\t\t\t\tname: 'age',\n\t\t\t\tto: { name: 'age', type: 'string', nullable: true, default: null },\n\t\t\t})\n\t\t\texpect(queries[0].sql).toContain('ALTER COLUMN \"age\" TYPE text')\n\t\t\texpect(queries[1].sql).toContain('DROP NOT NULL')\n\t\t\texpect(queries[2].sql).toContain('SET DEFAULT NULL')\n\t\t})\n\n\t\ttest('applyModifyField renames column when to.name differs', async () => {\n\t\t\tawait adapter.applyModifyField({\n\t\t\t\tkind: 'modifyField',\n\t\t\t\ttable: 'users',\n\t\t\t\tname: 'age',\n\t\t\t\tto: { name: 'years', type: 'number' },\n\t\t\t})\n\t\t\tconst renameSql = queries.find((q) => q.sql.includes('RENAME COLUMN'))\n\t\t\texpect(renameSql).toBeDefined()\n\t\t\texpect(renameSql!.sql).toContain('RENAME COLUMN \"age\" TO \"years\"')\n\t\t})\n\n\t\ttest('applyRenameTable generates ALTER TABLE RENAME', async () => {\n\t\t\tawait adapter.applyRenameTable({ kind: 'renameTable', from: 'users', to: 'accounts' })\n\t\t\texpect(queries[0].sql).toBe('ALTER TABLE \"users\" RENAME TO \"accounts\"')\n\t\t})\n\n\t\ttest('applyRenameField generates ALTER TABLE RENAME COLUMN', async () => {\n\t\t\tawait adapter.applyRenameField({ kind: 'renameField', table: 'users', from: 'name', to: 'fullName' })\n\t\t\texpect(queries[0].sql).toBe('ALTER TABLE \"users\" RENAME COLUMN \"name\" TO \"fullName\"')\n\t\t})\n\n\t\ttest('applyAddIndex generates CREATE INDEX with auto-derived name', async () => {\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'users', on: ['email'] })\n\t\t\texpect(queries[0].sql).toBe('CREATE INDEX \"idx_users_email\" ON \"users\" (\"email\")')\n\t\t})\n\n\t\ttest('applyAddIndex generates CREATE UNIQUE INDEX with explicit name', async () => {\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'users', on: ['email'], unique: true, name: 'my_idx' })\n\t\t\texpect(queries[0].sql).toBe('CREATE UNIQUE INDEX \"my_idx\" ON \"users\" (\"email\")')\n\t\t})\n\n\t\ttest('applyAddIndex auto-derives unique suffix when unique and no name', async () => {\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'posts', on: ['author', 'title'], unique: true })\n\t\t\texpect(queries[0].sql).toBe('CREATE UNIQUE INDEX \"idx_posts_author_title_unique\" ON \"posts\" (\"author\", \"title\")')\n\t\t})\n\n\t\ttest('applyDropIndex generates DROP INDEX', async () => {\n\t\t\tawait adapter.applyDropIndex({ kind: 'dropIndex', name: 'idx_users_email' })\n\t\t\texpect(queries[0].sql).toBe('DROP INDEX \"idx_users_email\"')\n\t\t})\n\n\t\ttest('applyAddForeignKey generates ALTER TABLE ADD CONSTRAINT with auto-derived name', async () => {\n\t\t\tawait adapter.applyAddForeignKey({\n\t\t\t\tkind: 'addForeignKey',\n\t\t\t\ttable: 'posts',\n\t\t\t\ton: 'authorId',\n\t\t\t\treferences: { table: 'users', column: 'id' },\n\t\t\t\tonDelete: 'cascade',\n\t\t\t\tonUpdate: 'setNull',\n\t\t\t})\n\t\t\tconst sql = queries[0].sql\n\t\t\texpect(sql).toContain('ALTER TABLE \"posts\" ADD CONSTRAINT \"fk_posts_authorId\"')\n\t\t\texpect(sql).toContain('FOREIGN KEY (\"authorId\") REFERENCES \"users\" (\"id\")')\n\t\t\texpect(sql).toContain('ON DELETE CASCADE')\n\t\t\texpect(sql).toContain('ON UPDATE SET NULL')\n\t\t})\n\n\t\ttest('applyAddForeignKey uses explicit name when provided', async () => {\n\t\t\tawait adapter.applyAddForeignKey({\n\t\t\t\tkind: 'addForeignKey',\n\t\t\t\ttable: 'posts',\n\t\t\t\ton: 'authorId',\n\t\t\t\treferences: { table: 'users', column: 'id' },\n\t\t\t\tname: 'custom_fk',\n\t\t\t})\n\t\t\texpect(queries[0].sql).toContain('ADD CONSTRAINT \"custom_fk\"')\n\t\t})\n\n\t\ttest('applyDropForeignKey generates ALTER TABLE DROP CONSTRAINT', async () => {\n\t\t\tawait adapter.applyDropForeignKey({ kind: 'dropForeignKey', table: 'posts', name: 'fk_posts_authorId' })\n\t\t\texpect(queries[0].sql).toBe('ALTER TABLE \"posts\" DROP CONSTRAINT \"fk_posts_authorId\"')\n\t\t})\n\n\t\ttest('introspect queries information_schema and builds DiscoveredSchema[]', async () => {\n\t\t\t;(adapter.pool as any).query = async (sql: string, params?: unknown[]) => {\n\t\t\t\tqueries.push({ sql, params })\n\t\t\t\tif (sql.includes('information_schema.tables')) {\n\t\t\t\t\treturn { rows: [{ table_name: 'users' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes('information_schema.columns')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trows: [\n\t\t\t\t\t\t\t{ column_name: 'id', data_type: 'text', is_nullable: 'NO', column_default: null },\n\t\t\t\t\t\t\t{ column_name: 'email', data_type: 'character varying', is_nullable: 'NO', column_default: null },\n\t\t\t\t\t\t\t{ column_name: 'age', data_type: 'integer', is_nullable: 'YES', column_default: '25' },\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (sql.includes('PRIMARY KEY')) {\n\t\t\t\t\treturn { rows: [{ column_name: 'id' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes(\"constraint_type = 'UNIQUE'\")) {\n\t\t\t\t\treturn { rows: [{ column_name: 'email' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes('pg_indexes')) {\n\t\t\t\t\treturn { rows: [{ indexname: 'users_email_idx', indexdef: 'CREATE UNIQUE INDEX users_email_idx ON public.users USING btree (email)' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes(\"constraint_type = 'FOREIGN KEY'\")) {\n\t\t\t\t\treturn { rows: [] }\n\t\t\t\t}\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t\tconst schemas = await adapter.introspect()\n\t\t\texpect(schemas).toHaveLength(1)\n\t\t\tconst s = schemas[0]\n\t\t\texpect(s.name).toBe('users')\n\t\t\texpect(s.pk).toEqual({ name: 'id', type: 'string' })\n\t\t\texpect(s.fields).toEqual([\n\t\t\t\t{ name: 'email', type: 'string', nullable: false, unique: true },\n\t\t\t\t{ name: 'age', type: 'number', nullable: true, default: 25 },\n\t\t\t])\n\t\t\texpect(s.indexes).toEqual([{ name: 'users_email_idx', on: ['email'], unique: true }])\n\t\t\texpect(s.foreignKeys).toEqual([])\n\t\t})\n\n\t\ttest('introspect throws OrmIntrospectionError on unsupported PG type', async () => {\n\t\t\tconst { OrmIntrospectionError } = await import('../../errors/introspection')\n\t\t\t;(adapter.pool as any).query = async (sql: string) => {\n\t\t\t\tif (sql.includes('information_schema.tables')) {\n\t\t\t\t\treturn { rows: [{ table_name: 'files' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes('information_schema.columns')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trows: [\n\t\t\t\t\t\t\t{ column_name: 'id', data_type: 'text', is_nullable: 'NO', column_default: null },\n\t\t\t\t\t\t\t{ column_name: 'data', data_type: 'bytea', is_nullable: 'YES', column_default: null },\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (sql.includes('PRIMARY KEY')) {\n\t\t\t\t\treturn { rows: [{ column_name: 'id' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes(\"constraint_type = 'UNIQUE'\")) {\n\t\t\t\t\treturn { rows: [] }\n\t\t\t\t}\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t\tawait expect(adapter.introspect()).rejects.toThrow(OrmIntrospectionError)\n\t\t\ttry {\n\t\t\t\tawait adapter.introspect()\n\t\t\t} catch (err: any) {\n\t\t\t\texpect(err.adapter).toBe('postgresql')\n\t\t\t\texpect(err.table).toBe('files')\n\t\t\t\texpect(err.cause).toContain('bytea')\n\t\t\t}\n\t\t})\n\n\t\ttest('introspect parses foreign keys with cascade actions', async () => {\n\t\t\t;(adapter.pool as any).query = async (sql: string) => {\n\t\t\t\tif (sql.includes('information_schema.tables')) {\n\t\t\t\t\treturn { rows: [{ table_name: 'posts' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes('information_schema.columns')) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trows: [\n\t\t\t\t\t\t\t{ column_name: 'id', data_type: 'text', is_nullable: 'NO', column_default: null },\n\t\t\t\t\t\t\t{ column_name: 'author_id', data_type: 'text', is_nullable: 'NO', column_default: null },\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (sql.includes('PRIMARY KEY')) {\n\t\t\t\t\treturn { rows: [{ column_name: 'id' }] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes(\"constraint_type = 'UNIQUE'\")) {\n\t\t\t\t\treturn { rows: [] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes('pg_indexes')) {\n\t\t\t\t\treturn { rows: [] }\n\t\t\t\t}\n\t\t\t\tif (sql.includes(\"constraint_type = 'FOREIGN KEY'\")) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trows: [{\n\t\t\t\t\t\t\tconstraint_name: 'fk_posts_author_id',\n\t\t\t\t\t\t\tcolumn_name: 'author_id',\n\t\t\t\t\t\t\tforeign_table_name: 'users',\n\t\t\t\t\t\t\tforeign_column_name: 'id',\n\t\t\t\t\t\t\tdelete_rule: 'CASCADE',\n\t\t\t\t\t\t\tupdate_rule: 'SET NULL',\n\t\t\t\t\t\t}],\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t\tconst schemas = await adapter.introspect()\n\t\t\texpect(schemas[0].foreignKeys).toEqual([{\n\t\t\t\tname: 'fk_posts_author_id',\n\t\t\t\ton: 'author_id',\n\t\t\t\treferences: { table: 'users', column: 'id' },\n\t\t\t\tonDelete: 'cascade',\n\t\t\t\tonUpdate: 'setNull',\n\t\t\t}])\n\t\t})\n\n\t\ttest('introspect excludes tracker table from results', async () => {\n\t\t\t;(adapter.pool as any).query = async (sql: string, params?: unknown[]) => {\n\t\t\t\tif (sql.includes('information_schema.tables')) {\n\t\t\t\t\texpect(params).toContain('equipped_migrations')\n\t\t\t\t\treturn { rows: [] }\n\t\t\t\t}\n\t\t\t\treturn { rows: [] }\n\t\t\t}\n\t\t\tconst schemas = await adapter.introspect()\n\t\t\texpect(schemas).toEqual([])\n\t\t})\n\n\t\ttest('type-level: PostgresAdapter declares all migration methods', () => {\n\t\t\texpectTypeOf(adapter.loadMigrations).toBeFunction()\n\t\t\texpectTypeOf(adapter.recordMigration).toBeFunction()\n\t\t\texpectTypeOf(adapter.acquireMigrationLock).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyCreateTable).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyDropTable).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyAddField).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyDropField).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyModifyField).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyRenameTable).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyRenameField).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyAddIndex).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyDropIndex).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyAddForeignKey).toBeFunction()\n\t\t\texpectTypeOf(adapter.applyDropForeignKey).toBeFunction()\n\t\t\texpectTypeOf(adapter.introspect).toBeFunction()\n\t\t})\n\n\t\ttest('type-level: Migrator.from rejects withoutLock for PostgresAdapter', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Migrator } = await import('../../migrations/migrator')\n\t\t\tconst repo = Repo.from(adapter).resolve(() => ({ table: 'test' })).build()\n\t\t\tconst step = Migrator.from(repo, adapter).migrations([])\n\t\t\texpectTypeOf(step).toHaveProperty('build')\n\t\t\texpectTypeOf(step).not.toHaveProperty('withoutLock')\n\t\t})\n\n\t\ttest('applyCreateTable maps all field types to correct PG types', async () => {\n\t\t\tawait adapter.applyCreateTable({\n\t\t\t\tkind: 'createTable',\n\t\t\t\tname: 'all_types',\n\t\t\t\tpk: { name: 'id', type: 'string' },\n\t\t\t\tfields: [\n\t\t\t\t\t{ name: 'f_num', type: 'number' },\n\t\t\t\t\t{ name: 'f_bool', type: 'boolean' },\n\t\t\t\t\t{ name: 'f_date', type: 'date' },\n\t\t\t\t\t{ name: 'f_null', type: 'null' },\n\t\t\t\t\t{ name: 'f_obj', type: 'object' },\n\t\t\t\t\t{ name: 'f_arr', type: 'array' },\n\t\t\t\t],\n\t\t\t})\n\t\t\tconst sql = queries[0].sql\n\t\t\texpect(sql).toContain('\"f_num\" double precision NOT NULL')\n\t\t\texpect(sql).toContain('\"f_bool\" boolean NOT NULL')\n\t\t\texpect(sql).toContain('\"f_date\" timestamptz NOT NULL')\n\t\t\texpect(sql).toContain('\"f_null\" text NOT NULL')\n\t\t\texpect(sql).toContain('\"f_obj\" jsonb NOT NULL')\n\t\t\texpect(sql).toContain('\"f_arr\" jsonb NOT NULL')\n\t\t})\n\n\t\ttest('applyModifyField sets NOT NULL when nullable is falsy', async () => {\n\t\t\tawait adapter.applyModifyField({\n\t\t\t\tkind: 'modifyField',\n\t\t\t\ttable: 'users',\n\t\t\t\tname: 'email',\n\t\t\t\tto: { name: 'email', type: 'string' },\n\t\t\t})\n\t\t\texpect(queries[1].sql).toContain('SET NOT NULL')\n\t\t})\n\n\t\ttest('applyModifyField drops default when to.default is undefined', async () => {\n\t\t\tawait adapter.applyModifyField({\n\t\t\t\tkind: 'modifyField',\n\t\t\t\ttable: 'users',\n\t\t\t\tname: 'age',\n\t\t\t\tto: { name: 'age', type: 'number' },\n\t\t\t})\n\t\t\texpect(queries[2].sql).toContain('DROP DEFAULT')\n\t\t})\n\n\t\ttest('applyAddField with string default escapes single quotes', async () => {\n\t\t\tawait adapter.applyAddField({\n\t\t\t\tkind: 'addField',\n\t\t\t\ttable: 'users',\n\t\t\t\tfield: { name: 'bio', type: 'string', default: \"it's\" },\n\t\t\t})\n\t\t\texpect(queries[0].sql).toContain(\"DEFAULT 'it''s'\")\n\t\t})\n\n\t\ttest('end-to-end: Migrator.from(repo, adapter) wires up correctly', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Migrator } = await import('../../migrations/migrator')\n\t\t\tconst { Schema } = await import('../../schema')\n\n\t\t\tSchema.from('users').pk('id', v.string(), () => 'x').field('email', v.string()).build()\n\t\t\tconst repo = Repo.from(adapter).resolve(() => ({ table: 'test' })).build()\n\n\t\t\tlet loadCalls = 0\n\t\t\tconst mockClient = {\n\t\t\t\tquery: async (sql: string, _params?: unknown[]) => {\n\t\t\t\t\tif (sql.includes('pg_advisory_lock') || sql.includes('pg_advisory_unlock')) return { rows: [] }\n\t\t\t\t\tif (sql.includes('CREATE TABLE IF NOT EXISTS')) return { rows: [] }\n\t\t\t\t\tif (sql.includes('SELECT id, applied_at')) { loadCalls++; return { rows: [] } }\n\t\t\t\t\tif (sql.includes('INSERT INTO')) return { rows: [] }\n\t\t\t\t\tif (sql.includes('CREATE TABLE')) return { rows: [] }\n\t\t\t\t\tif (sql === 'BEGIN' || sql === 'COMMIT' || sql === 'ROLLBACK') return { rows: [] }\n\t\t\t\t\treturn { rows: [] }\n\t\t\t\t},\n\t\t\t\trelease: () => {},\n\t\t\t}\n\t\t\t;(adapter.pool as any).query = mockClient.query\n\t\t\t;(adapter.pool as any).connect = async () => mockClient\n\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([\n\t\t\t\t{ id: '0001', changes: [{ kind: 'createTable', name: 'users', pk: { name: 'id', type: 'string' }, fields: [{ name: 'email', type: 'string' }] }] },\n\t\t\t]).build()\n\n\t\t\tconst result = await migrator.up()\n\t\t\texpect(result.ran).toEqual(['0001'])\n\t\t\texpect(loadCalls).toBe(1)\n\t\t})\n\t})\n}\n","import type { FilterOpName } from './adapter'\nimport { EquippedError } from '../errors'\nimport { OrmValidationError, type OrmValidationFailure } from './errors'\nimport { toFieldName, type AnyField, type Field } from './fields'\nimport type { AggregateSpec } from './orm-adapter'\nimport type { AnySchema } from './schema'\n\nexport class Filter {\n\treadonly field: string\n\tconstructor(\n\t\tfield: string | AnyField,\n\t\treadonly op: FilterOpName,\n\t\treadonly value: unknown,\n\t) {\n\t\tthis.field = toFieldName(field)\n\t}\n}\n\nexport type FilterChild = Filter | FilterGroup\n\nexport type FilterFactory = (q: FilterGroup) => FilterGroup\n\nexport type FilterGroupOp = 'and' | 'or'\n\nexport class FilterGroup {\n\treadonly children: readonly FilterChild[]\n\n\tprivate constructor(\n\t\treadonly op: FilterGroupOp = 'and',\n\t\tchildren?: readonly FilterChild[],\n\t) {\n\t\tthis.children = children ?? []\n\t}\n\n\t#withChild(child: FilterChild): FilterGroup {\n\t\treturn new FilterGroup(this.op, [...this.children, child])\n\t}\n\n\teq<T>(field: string | Field<T>, value: T): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'eq', value))\n\t}\n\n\tne<T>(field: string | Field<T>, value: T): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'ne', value))\n\t}\n\n\tgt<T>(field: string | Field<T>, value: T): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'gt', value))\n\t}\n\n\tgte<T>(field: string | Field<T>, value: T): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'gte', value))\n\t}\n\n\tlt<T>(field: string | Field<T>, value: T): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'lt', value))\n\t}\n\n\tlte<T>(field: string | Field<T>, value: T): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'lte', value))\n\t}\n\n\tin<T>(field: string | Field<T>, value: T[]): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'in', value))\n\t}\n\n\tnotIn<T>(field: string | Field<T>, value: T[]): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'notIn', value))\n\t}\n\n\tlike(field: string | Field<string>, value: string): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'like', value))\n\t}\n\n\texists(field: string | Field<unknown>): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'exists', true))\n\t}\n\n\tnotExists(field: string | Field<unknown>): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'notExists', true))\n\t}\n\n\tcontains<T>(field: string | Field<T>, value: T[]): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'contains', value))\n\t}\n\n\tnotContains<T>(field: string | Field<T>, value: T[]): FilterGroup {\n\t\treturn this.#withChild(new Filter(field, 'notContains', value))\n\t}\n\n\tand(facFns: FilterFactory[]): FilterGroup {\n\t\tif (facFns.length === 0) throw new EquippedError('and() requires at least one filter factory', { op: 'and' })\n\t\tconst group = new FilterGroup('and', facFns.map((fn) => fn(FilterGroup.create())))\n\t\treturn this.#withChild(group)\n\t}\n\n\tor(facFns: FilterFactory[]): FilterGroup {\n\t\tif (facFns.length === 0) throw new EquippedError('or() requires at least one filter factory', { op: 'or' })\n\t\tconst group = new FilterGroup('or', facFns.map((fn) => fn(FilterGroup.create())))\n\t\treturn this.#withChild(group)\n\t}\n\n\tclone(): FilterGroup {\n\t\treturn new FilterGroup(\n\t\t\tthis.op,\n\t\t\tthis.children.map((c) => {\n\t\t\t\tif (c instanceof Filter) return new Filter(c.field, c.op, structuredClone(c.value))\n\t\t\t\treturn c.clone()\n\t\t\t}),\n\t\t)\n\t}\n\n\tstatic create(): FilterGroup {\n\t\treturn new FilterGroup()\n\t}\n}\n\n\nexport type GatedFilterGroup<DeclaredOps extends readonly FilterOpName[]> = {\n\t[K in FilterOpName]: K extends DeclaredOps[number] ? FilterGroup[K] : never\n} & Pick<FilterGroup, 'and' | 'or' | 'clone' | 'children' | 'op'>\n\nexport type GatedFilterFactory<DeclaredOps extends readonly FilterOpName[]> = (\n\tq: GatedFilterGroup<DeclaredOps>,\n) => GatedFilterGroup<DeclaredOps>\n\nexport function assertNormalisedAggregate(schema: AnySchema, adapter: { aggregateOps: readonly string[] }, spec: AggregateSpec): void {\n\tconst failures: OrmValidationFailure[] = []\n\n\tif (spec.aggregates.length === 0) {\n\t\tfailures.push({ cause: 'At least one aggregator step is required' })\n\t}\n\n\tconst seenAliases = new Set<string>()\n\tfor (const agg of spec.aggregates) {\n\t\tif (seenAliases.has(agg.alias)) {\n\t\t\tfailures.push({ alias: agg.alias, cause: `Duplicate alias \"${agg.alias}\"` })\n\t\t}\n\t\tseenAliases.add(agg.alias)\n\n\t\tif (!adapter.aggregateOps.includes(agg.fn)) {\n\t\t\tfailures.push({ alias: agg.alias, cause: `Undeclared aggregate op \"${agg.fn}\"` })\n\t\t}\n\t}\n\n\tconst allFields = schema.fields as Record<string, unknown>\n\tconst fieldNames = new Set(Object.keys(allFields))\n\tfor (const field of spec.groupBy) {\n\t\tif (!fieldNames.has(field)) {\n\t\t\tfailures.push({ field, cause: `Unknown groupBy field \"${field}\" on schema \"${schema.name}\"` })\n\t\t}\n\t\tif (seenAliases.has(field)) {\n\t\t\tfailures.push({ alias: field, cause: `Alias \"${field}\" collides with groupBy field name` })\n\t\t}\n\t}\n\n\tif (failures.length > 0) {\n\t\tthrow new OrmValidationError('aggregate', schema.name, 'aggregate', failures)\n\t}\n\n\tif (spec.where) {\n\t\tassertNormalisedFilter(schema, spec.where)\n\t}\n\n\tif (spec.having) {\n\t\tconst validHavingFields = new Set([...seenAliases, ...spec.groupBy])\n\t\tconst havingErrors: OrmValidationFailure[] = []\n\n\t\tfunction walkHaving(node: FilterChild): void {\n\t\t\tif (node instanceof Filter) {\n\t\t\t\tif (!validHavingFields.has(node.field)) {\n\t\t\t\t\thavingErrors.push({ field: node.field, cause: `Unknown having field \"${node.field}\" — must be an aggregator alias or groupBy field` })\n\t\t\t\t}\n\t\t\t} else if (node instanceof FilterGroup) {\n\t\t\t\tfor (const child of node.children) walkHaving(child)\n\t\t\t}\n\t\t}\n\n\t\tfor (const child of spec.having.children) walkHaving(child)\n\n\t\tif (havingErrors.length > 0) {\n\t\t\tthrow new OrmValidationError('aggregate', schema.name, 'aggregate', havingErrors)\n\t\t}\n\t}\n}\n\nexport function assertNormalisedFilter(schema: AnySchema, group: FilterGroup): void {\n\tconst allFields = schema.fields as Record<string, unknown>\n\tconst fieldNames = new Set(Object.keys(allFields))\n\tconst errors: Array<{ field: string; cause: string }> = []\n\n\tfunction walk(node: FilterChild): void {\n\t\tif (node instanceof Filter) {\n\t\t\tif (!fieldNames.has(node.field)) {\n\t\t\t\terrors.push({ field: node.field, cause: `Unknown field \"${node.field}\" on schema \"${schema.name}\"` })\n\t\t\t}\n\t\t} else if (node instanceof FilterGroup) {\n\t\t\tfor (const child of node.children) walk(child)\n\t\t}\n\t}\n\n\tfor (const child of group.children) walk(child)\n\n\tif (errors.length > 0) {\n\t\tthrow new OrmValidationError(\n\t\t\t'validation',\n\t\t\tschema.name,\n\t\t\t'filter',\n\t\t\terrors.map((e) => ({ field: e.field, cause: e.cause })),\n\t\t)\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { Schema } = await import('./schema')\n\n\tconst UserSchema = Schema.from('users')\n\t\t.pk('id', v.string(), () => 'u1')\n\t\t.field('email', v.string())\n\t\t.field('age', v.number())\n\t\t.field('name', v.string())\n\t\t.field('tags', v.array(v.string()))\n\t\t.build()\n\n\tdescribe('FilterGroup', () => {\n\t\tdescribe('filter-op methods', () => {\n\t\t\ttest('eq adds a filter clause with op eq', () => {\n\t\t\t\tconst g = FilterGroup.create().eq(UserSchema.fields.age, 25)\n\t\t\t\texpect(g.children).toHaveLength(1)\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.field).toBe('age')\n\t\t\t\texpect(f.op).toBe('eq')\n\t\t\t\texpect(f.value).toBe(25)\n\t\t\t})\n\n\t\t\ttest('ne adds a filter clause with op ne', () => {\n\t\t\t\tconst g = FilterGroup.create().ne('name', 'Bob')\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.op).toBe('ne')\n\t\t\t\texpect(f.value).toBe('Bob')\n\t\t\t})\n\n\t\t\ttest('gt/gte/lt/lte produce correct ops', () => {\n\t\t\t\tconst g = FilterGroup.create()\n\t\t\t\t\t.gt(UserSchema.fields.age, 10)\n\t\t\t\t\t.gte(UserSchema.fields.age, 20)\n\t\t\t\t\t.lt(UserSchema.fields.age, 30)\n\t\t\t\t\t.lte(UserSchema.fields.age, 40)\n\t\t\t\texpect(g.children.map((c) => (c as Filter).op)).toEqual(['gt', 'gte', 'lt', 'lte'])\n\t\t\t})\n\n\t\t\ttest('in adds a filter clause with array value', () => {\n\t\t\t\tconst g = FilterGroup.create().in(UserSchema.fields.age, [1, 2, 3])\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.op).toBe('in')\n\t\t\t\texpect(f.value).toEqual([1, 2, 3])\n\t\t\t})\n\n\t\t\ttest('notIn adds a filter clause with op notIn', () => {\n\t\t\t\tconst g = FilterGroup.create().notIn(UserSchema.fields.age, [4, 5])\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.op).toBe('notIn')\n\t\t\t\texpect(f.value).toEqual([4, 5])\n\t\t\t})\n\n\t\t\ttest('like adds a filter clause with op like', () => {\n\t\t\t\tconst g = FilterGroup.create().like(UserSchema.fields.email, 'alice')\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.op).toBe('like')\n\t\t\t\texpect(f.value).toBe('alice')\n\t\t\t})\n\n\t\t\ttest('exists adds a filter clause with op exists', () => {\n\t\t\t\tconst g = FilterGroup.create().exists(UserSchema.fields.name)\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.op).toBe('exists')\n\t\t\t})\n\n\t\t\ttest('notExists is its own op, not a boolean form of exists', () => {\n\t\t\t\tconst g = FilterGroup.create().notExists(UserSchema.fields.name)\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.op).toBe('notExists')\n\t\t\t\texpect(f.op).not.toBe('exists')\n\t\t\t})\n\n\t\t\ttest('contains/notContains produce correct ops', () => {\n\t\t\t\tconst g = FilterGroup.create()\n\t\t\t\t\t.contains('tags', ['a'])\n\t\t\t\t\t.notContains('tags', ['b'])\n\t\t\t\texpect((g.children[0] as Filter).op).toBe('contains')\n\t\t\t\texpect((g.children[1] as Filter).op).toBe('notContains')\n\t\t\t})\n\n\t\t\ttest('all 13 filter ops produce matching Filter.op values (name-parity)', () => {\n\t\t\t\tconst g = FilterGroup.create()\n\t\t\t\t\t.eq('f', 1)\n\t\t\t\t\t.ne('f', 1)\n\t\t\t\t\t.gt('f', 1)\n\t\t\t\t\t.gte('f', 1)\n\t\t\t\t\t.lt('f', 1)\n\t\t\t\t\t.lte('f', 1)\n\t\t\t\t\t.in('f', [1])\n\t\t\t\t\t.notIn('f', [1])\n\t\t\t\t\t.like('f', 'x')\n\t\t\t\t\t.exists('f')\n\t\t\t\t\t.notExists('f')\n\t\t\t\t\t.contains('f', [1])\n\t\t\t\t\t.notContains('f', [1])\n\t\t\t\tconst ops = g.children.map((c) => (c as Filter).op)\n\t\t\t\texpect(ops).toEqual([\n\t\t\t\t\t'eq', 'ne', 'gt', 'gte', 'lt', 'lte',\n\t\t\t\t\t'in', 'notIn', 'like', 'exists', 'notExists',\n\t\t\t\t\t'contains', 'notContains',\n\t\t\t\t])\n\t\t\t})\n\t\t})\n\n\t\tdescribe('raw-string field overload', () => {\n\t\t\ttest('accepts raw string field name', () => {\n\t\t\t\tconst g = FilterGroup.create().eq('age', 18)\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.field).toBe('age')\n\t\t\t})\n\n\t\t\ttest('accepts typed Field ref and extracts field name', () => {\n\t\t\t\tconst g = FilterGroup.create().eq(UserSchema.fields.age, 18)\n\t\t\t\tconst f = g.children[0] as Filter\n\t\t\t\texpect(f.field).toBe('age')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('structural combinators', () => {\n\t\t\ttest('and() creates a nested and-group', () => {\n\t\t\t\tconst g = FilterGroup.create().and([\n\t\t\t\t\t(q) => q.eq('age', 10),\n\t\t\t\t\t(q) => q.eq('name', 'Alice'),\n\t\t\t\t])\n\t\t\t\texpect(g.children).toHaveLength(1)\n\t\t\t\tconst nested = g.children[0] as FilterGroup\n\t\t\t\texpect(nested.op).toBe('and')\n\t\t\t\texpect(nested.children).toHaveLength(2)\n\t\t\t})\n\n\t\t\ttest('or() creates a nested or-group', () => {\n\t\t\t\tconst g = FilterGroup.create().or([\n\t\t\t\t\t(q) => q.eq('name', 'Alice'),\n\t\t\t\t\t(q) => q.eq('name', 'Bob'),\n\t\t\t\t])\n\t\t\t\tconst nested = g.children[0] as FilterGroup\n\t\t\t\texpect(nested.op).toBe('or')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('empty-combinator rejection', () => {\n\t\t\ttest('and([]) throws at builder time', () => {\n\t\t\t\texpect(() => FilterGroup.create().and([])).toThrow()\n\t\t\t})\n\n\t\t\ttest('or([]) throws at builder time', () => {\n\t\t\t\texpect(() => FilterGroup.create().or([])).toThrow()\n\t\t\t})\n\n\t\t\ttest('thrown error has stack pointing at offending call', () => {\n\t\t\t\ttry {\n\t\t\t\t\tFilterGroup.create().and([])\n\t\t\t\t\texpect.unreachable()\n\t\t\t\t} catch (e) {\n\t\t\t\t\texpect((e as Error).stack).toContain('filter.ts')\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\tdescribe('clone()', () => {\n\t\t\ttest('deep-clones the tree', () => {\n\t\t\t\tconst original = FilterGroup.create()\n\t\t\t\t\t.eq('name', 'Alice')\n\t\t\t\t\t.and([(q) => q.gt('age', 20)])\n\t\t\t\tconst cloned = original.clone()\n\n\t\t\t\texpect(cloned.children).toHaveLength(2)\n\t\t\t\texpect(cloned).not.toBe(original)\n\t\t\t\texpect(cloned.children[0]).not.toBe(original.children[0])\n\t\t\t})\n\n\t\t\ttest('structuredClone of values — mutations on clone do not leak', () => {\n\t\t\t\tconst arr = [1, 2, 3]\n\t\t\t\tconst original = FilterGroup.create().in('ids', arr)\n\t\t\t\tconst cloned = original.clone()\n\n\t\t\t\tconst clonedValue = (cloned.children[0] as Filter).value as number[]\n\t\t\t\tclonedValue.push(4)\n\n\t\t\t\texpect((original.children[0] as Filter).value).toEqual([1, 2, 3])\n\t\t\t\texpect(clonedValue).toEqual([1, 2, 3, 4])\n\t\t\t})\n\t\t})\n\t})\n\n\tdescribe('clone-on-step: fan-out independence', () => {\n\t\ttest('.eq() returns a new FilterGroup, not the same instance', () => {\n\t\t\tconst base = FilterGroup.create()\n\t\t\tconst a = base.eq('name', 'Alice')\n\t\t\texpect(a).not.toBe(base)\n\t\t})\n\n\t\ttest('fan-out from shared base does not pollute either branch', () => {\n\t\t\tconst base = FilterGroup.create().eq('name', 'Alice')\n\t\t\tconst branchA = base.gt('age', 20)\n\t\t\tconst branchB = base.lt('age', 40)\n\n\t\t\texpect(branchA.children).toHaveLength(2)\n\t\t\texpect(branchB.children).toHaveLength(2)\n\t\t\texpect(base.children).toHaveLength(1)\n\t\t\texpect((branchA.children[1] as Filter).op).toBe('gt')\n\t\t\texpect((branchB.children[1] as Filter).op).toBe('lt')\n\t\t})\n\n\t\ttest('.and() returns a new FilterGroup', () => {\n\t\t\tconst base = FilterGroup.create().eq('name', 'Alice')\n\t\t\tconst withAnd = base.and([(q) => q.gt('age', 20)])\n\t\t\texpect(withAnd).not.toBe(base)\n\t\t\texpect(base.children).toHaveLength(1)\n\t\t\texpect(withAnd.children).toHaveLength(2)\n\t\t})\n\n\t\ttest('.or() returns a new FilterGroup', () => {\n\t\t\tconst base = FilterGroup.create().eq('name', 'Alice')\n\t\t\tconst withOr = base.or([(q) => q.gt('age', 20)])\n\t\t\texpect(withOr).not.toBe(base)\n\t\t\texpect(base.children).toHaveLength(1)\n\t\t\texpect(withOr.children).toHaveLength(2)\n\t\t})\n\t})\n\n\tdescribe('assertNormalisedFilter', () => {\n\t\ttest('passes for valid filter referencing known fields', () => {\n\t\t\tconst g = FilterGroup.create().eq(UserSchema.fields.age, 25)\n\t\t\texpect(() => assertNormalisedFilter(UserSchema, g)).not.toThrow()\n\t\t})\n\n\t\ttest('passes for raw string field that exists on schema', () => {\n\t\t\tconst g = FilterGroup.create().eq('email', 'test@test.com')\n\t\t\texpect(() => assertNormalisedFilter(UserSchema, g)).not.toThrow()\n\t\t})\n\n\t\ttest('rejects unknown field name with OrmValidationError', () => {\n\t\t\tconst g = FilterGroup.create().eq('unknownField', 42)\n\t\t\texpect(() => assertNormalisedFilter(UserSchema, g)).toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('rejected error has kind validation', () => {\n\t\t\tconst g = FilterGroup.create().eq('badField', 42)\n\t\t\ttry {\n\t\t\t\tassertNormalisedFilter(UserSchema, g)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect(e).toBeInstanceOf(OrmValidationError)\n\t\t\t\texpect((e as OrmValidationError).kind).toBe('validation')\n\t\t\t\texpect((e as OrmValidationError).failures).toHaveLength(1)\n\t\t\t\texpect((e as OrmValidationError).failures[0].field).toBe('badField')\n\t\t\t}\n\t\t})\n\n\t\ttest('preserves logical field names verbatim for Field refs', () => {\n\t\t\tconst g = FilterGroup.create().eq(UserSchema.fields.email, 'a@b.com')\n\t\t\tconst f = g.children[0] as Filter\n\t\t\texpect(f.field).toBe('email')\n\t\t\tassertNormalisedFilter(UserSchema, g)\n\t\t})\n\n\t\ttest('preserves logical field names verbatim for raw-string overloads', () => {\n\t\t\tconst g = FilterGroup.create().eq('age', 18)\n\t\t\tconst f = g.children[0] as Filter\n\t\t\texpect(f.field).toBe('age')\n\t\t\tassertNormalisedFilter(UserSchema, g)\n\t\t})\n\n\t\ttest('walks nested groups to detect unknown fields', () => {\n\t\t\tconst g = FilterGroup.create().and([\n\t\t\t\t(q) => q.eq('name', 'Alice'),\n\t\t\t\t(q) => q.or([(inner) => inner.eq('nonexistent', 'val')]),\n\t\t\t])\n\t\t\texpect(() => assertNormalisedFilter(UserSchema, g)).toThrow(OrmValidationError)\n\t\t})\n\t})\n\n\tdescribe('assertNormalisedAggregate', () => {\n\t\tconst adapter = { aggregateOps: ['count'] as readonly string[] }\n\n\t\ttest('passes for valid count aggregate', () => {\n\t\t\tconst spec = { aggregates: [{ fn: 'count' as const, alias: 'total' }], groupBy: [] }\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, adapter, spec)).not.toThrow()\n\t\t})\n\n\t\ttest('rejects empty aggregator list', () => {\n\t\t\tconst spec = { aggregates: [], groupBy: [] }\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, adapter, spec)).toThrow(OrmValidationError)\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, adapter, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\texpect((e as OrmValidationError).kind).toBe('aggregate')\n\t\t\t}\n\t\t})\n\n\t\ttest('rejects undeclared aggregate op', () => {\n\t\t\tconst spec = { aggregates: [{ fn: 'sum' as const, alias: 'total', field: 'age' }], groupBy: [] }\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, adapter, spec)).toThrow(OrmValidationError)\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, adapter, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('aggregate')\n\t\t\t\texpect(err.failures[0].alias).toBe('total')\n\t\t\t\texpect(err.failures[0].cause).toContain('Undeclared')\n\t\t\t}\n\t\t})\n\n\t\ttest('rejects duplicate aliases', () => {\n\t\t\tconst spec = {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'count' as const, alias: 'total' },\n\t\t\t\t\t{ fn: 'count' as const, alias: 'total' },\n\t\t\t\t],\n\t\t\t\tgroupBy: [],\n\t\t\t}\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, adapter, spec)).toThrow(OrmValidationError)\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, adapter, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.failures.some((f) => f.alias === 'total')).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('validates where filter against schema', () => {\n\t\t\tconst spec = {\n\t\t\t\taggregates: [{ fn: 'count' as const, alias: 'total' }],\n\t\t\t\tgroupBy: [],\n\t\t\t\twhere: FilterGroup.create().eq('unknownField', 42),\n\t\t\t}\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, adapter, spec)).toThrow(OrmValidationError)\n\t\t})\n\n\t\ttest('collects multiple failures', () => {\n\t\t\tconst spec = {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'sum' as const, alias: 'x', field: 'age' },\n\t\t\t\t\t{ fn: 'avg' as const, alias: 'x', field: 'age' },\n\t\t\t\t],\n\t\t\t\tgroupBy: [],\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, adapter, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.failures.length).toBeGreaterThanOrEqual(2)\n\t\t\t}\n\t\t})\n\n\t\ttest('rejects unknown groupBy field', () => {\n\t\t\tconst allOps = { aggregateOps: ['count', 'sum'] as readonly string[] }\n\t\t\tconst spec = {\n\t\t\t\taggregates: [{ fn: 'count' as const, alias: 'total' }],\n\t\t\t\tgroupBy: ['nonexistent'],\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, allOps, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('aggregate')\n\t\t\t\texpect(err.failures[0].cause).toContain('groupBy')\n\t\t\t\texpect(err.failures[0].field).toBe('nonexistent')\n\t\t\t}\n\t\t})\n\n\t\ttest('rejects alias colliding with groupBy field name', () => {\n\t\t\tconst allOps = { aggregateOps: ['count'] as readonly string[] }\n\t\t\tconst spec = {\n\t\t\t\taggregates: [{ fn: 'count' as const, alias: 'name' }],\n\t\t\t\tgroupBy: ['name'],\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, allOps, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('aggregate')\n\t\t\t\texpect(err.failures.some((f) => String(f.cause).includes('collides'))).toBe(true)\n\t\t\t}\n\t\t})\n\n\t\ttest('rejects unknown having field', () => {\n\t\t\tconst allOps = { aggregateOps: ['count'] as readonly string[] }\n\t\t\tconst spec = {\n\t\t\t\taggregates: [{ fn: 'count' as const, alias: 'total' }],\n\t\t\t\tgroupBy: ['name'],\n\t\t\t\thaving: FilterGroup.create().gt('nonexistent', 0),\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tassertNormalisedAggregate(UserSchema, allOps, spec)\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('aggregate')\n\t\t\t\texpect(err.failures[0].cause).toContain('having')\n\t\t\t}\n\t\t})\n\n\t\ttest('having accepts alias and groupBy field names', () => {\n\t\t\tconst allOps = { aggregateOps: ['count'] as readonly string[] }\n\t\t\tconst spec = {\n\t\t\t\taggregates: [{ fn: 'count' as const, alias: 'total' }],\n\t\t\t\tgroupBy: ['name'],\n\t\t\t\thaving: FilterGroup.create().gt('total', 0).eq('name', 'Alice'),\n\t\t\t}\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, allOps, spec)).not.toThrow()\n\t\t})\n\n\t\ttest('passes valid groupBy with known schema fields', () => {\n\t\t\tconst allOps = { aggregateOps: ['count'] as readonly string[] }\n\t\t\tconst spec = {\n\t\t\t\taggregates: [{ fn: 'count' as const, alias: 'total' }],\n\t\t\t\tgroupBy: ['name', 'age'],\n\t\t\t}\n\t\t\texpect(() => assertNormalisedAggregate(UserSchema, allOps, spec)).not.toThrow()\n\t\t})\n\t})\n}\n","import { v, type Pipe, type PipeOutput } from 'valleyed'\n\nexport class Field<T = unknown, Name extends string = string, S = unknown> {\n\tdeclare readonly __valueType?: T\n\tdeclare readonly __schema?: S\n\treadonly name: Name\n\treadonly path: readonly string[]\n\n\tconstructor(name: Name, path?: readonly string[]) {\n\t\tthis.name = name\n\t\tthis.path = path ?? [name]\n\t}\n}\n\nexport type AnyField = Field<unknown, string, any>\n\nexport function toFieldName(field: string | AnyField): string {\n\tif (field instanceof Field) return field.path.join('.')\n\treturn field\n}\n\nexport class SchemaField<\n\tName extends string = string,\n\tP extends Pipe<any, any> = Pipe<any, any>,\n\tHasOnCreate extends boolean = false,\n> extends Field<PipeOutput<P>, Name> {\n\tdeclare readonly __hasOnCreate?: HasOnCreate\n\treadonly pipe: P\n\treadonly onCreate?: () => PipeOutput<P>\n\treadonly onUpdate?: () => PipeOutput<P>\n\n\tconstructor(name: Name, pipe: P, opts?: { onCreate?: () => PipeOutput<P>; onUpdate?: () => PipeOutput<P> }) {\n\t\tsuper(name)\n\t\tthis.pipe = pipe\n\t\tthis.onCreate = opts?.onCreate\n\t\tthis.onUpdate = opts?.onUpdate\n\t}\n}\n\nexport type AnySchemaField = SchemaField<string, Pipe<any, any>, boolean>\n\nexport class ComputedField<\n\tName extends string = string,\n\tP extends Pipe<any, any> = Pipe<any, any>,\n\tDeps extends readonly string[] = readonly string[],\n> {\n\tconstructor(\n\t\treadonly name: Name,\n\t\treadonly pipe: P,\n\t\treadonly deps: Deps,\n\t\treadonly compute: (data: Record<Deps[number], unknown>) => PipeOutput<P>,\n\t) {}\n}\n\nexport type AnyComputedField = ComputedField<string, Pipe<any, any>, readonly string[]>\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\n\tdescribe('Fields', () => {\n\t\tdescribe('Field', () => {\n\t\t\ttest('stores name and defaults path to [name]', () => {\n\t\t\t\tconst f = new Field('email')\n\t\t\t\texpect(f.name).toBe('email')\n\t\t\t\texpect(f.path).toEqual(['email'])\n\t\t\t})\n\n\t\t\ttest('stores provided custom path', () => {\n\t\t\t\tconst f = new Field('profile', ['profile', 'displayName'])\n\t\t\t\texpect(f.name).toBe('profile')\n\t\t\t\texpect(f.path).toEqual(['profile', 'displayName'])\n\t\t\t})\n\t\t})\n\n\t\tdescribe('toFieldName()', () => {\n\t\t\ttest('returns string input unchanged', () => {\n\t\t\t\texpect(toFieldName('createdAt')).toBe('createdAt')\n\t\t\t})\n\n\t\t\ttest('converts Field path into dot notation', () => {\n\t\t\t\tconst f = new Field('profile', ['profile', 'displayName'])\n\t\t\t\texpect(toFieldName(f)).toBe('profile.displayName')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('SchemaField', () => {\n\t\t\ttest('extends Field and stores pipe', () => {\n\t\t\t\tconst mockPipe = v.string()\n\t\t\t\tconst f = new SchemaField('email', mockPipe)\n\t\t\t\texpect(f).toBeInstanceOf(Field)\n\t\t\t\texpect(f.name).toBe('email')\n\t\t\t\texpect(f.path).toEqual(['email'])\n\t\t\t\texpect(f.pipe).toBe(mockPipe)\n\t\t\t})\n\n\t\t\ttest('stores lifecycle hooks when provided', () => {\n\t\t\t\tconst mockPipe = v.number()\n\t\t\t\tconst f = new SchemaField('updatedAt', mockPipe, {\n\t\t\t\t\tonCreate: () => 1000,\n\t\t\t\t\tonUpdate: () => 2000,\n\t\t\t\t})\n\t\t\t\texpect(f.onCreate?.()).toBe(1000)\n\t\t\t\texpect(f.onUpdate?.()).toBe(2000)\n\t\t\t})\n\n\t\t\ttest('keeps lifecycle hooks undefined when omitted', () => {\n\t\t\t\tconst mockPipe = v.string()\n\t\t\t\tconst f = new SchemaField('name', mockPipe)\n\t\t\t\texpect(f.onCreate).toBeUndefined()\n\t\t\t\texpect(f.onUpdate).toBeUndefined()\n\t\t\t})\n\t\t})\n\t})\n}\n","import { EquippedError } from '../../errors'\n\nexport type OrmValidationErrorKind = 'validation' | 'conflicting-ops' | 'empty-group' | 'undeclared-op' | 'upsert-filter-incompatible' | 'aggregate' | 'query-shape' | 'changes'\n\nexport type OrmValidationFailure = {\n\topIndex?: number\n\trowIndex?: number\n\tfield?: string\n\talias?: string\n\toption?: 'limit' | 'offset' | 'page' | 'batchSize'\n\tmigrationId?: string\n\tchangeIndex?: number\n\tcause: unknown\n}\n\nexport class OrmValidationError extends EquippedError {\n\tconstructor(\n\t\treadonly kind: OrmValidationErrorKind,\n\t\treadonly schema: string,\n\t\treadonly operation: string,\n\t\treadonly failures: OrmValidationFailure[],\n\t) {\n\t\tsuper(`ORM validation error (${kind}) on ${schema}.${operation}`, {\n\t\t\tkind,\n\t\t\tschema,\n\t\t\toperation,\n\t\t\tfailures,\n\t\t})\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { EquippedError } = await import('../../errors')\n\n\tdescribe('OrmValidationError', () => {\n\t\ttest('constructs with aggregate kind', () => {\n\t\t\tconst err = new OrmValidationError('aggregate', 'orders', 'aggregate', [])\n\t\t\texpect(err.kind).toBe('aggregate')\n\t\t\texpect(err.operation).toBe('aggregate')\n\t\t\texpect(err.message).toBe('ORM validation error (aggregate) on orders.aggregate')\n\t\t\texpect(err).toBeInstanceOf(OrmValidationError)\n\t\t\texpect(err).toBeInstanceOf(EquippedError)\n\t\t})\n\n\t\ttest('failure carries alias through to context', () => {\n\t\t\tconst failures: OrmValidationFailure[] = [\n\t\t\t\t{ alias: 'total_price', cause: 'alias collision' },\n\t\t\t]\n\t\t\tconst err = new OrmValidationError('aggregate', 'orders', 'aggregate', failures)\n\t\t\texpect(err.failures[0].alias).toBe('total_price')\n\t\t\texpect((err.context as any).failures[0].alias).toBe('total_price')\n\t\t})\n\n\t\ttest('failure without alias still works', () => {\n\t\t\tconst failures: OrmValidationFailure[] = [\n\t\t\t\t{ field: 'amount', cause: 'invalid field' },\n\t\t\t]\n\t\t\tconst err = new OrmValidationError('validation', 'orders', 'createOne', failures)\n\t\t\texpect(err.failures[0].alias).toBeUndefined()\n\t\t\texpect(err.failures[0].field).toBe('amount')\n\t\t})\n\n\t\ttest.each([\n\t\t\t'validation',\n\t\t\t'conflicting-ops',\n\t\t\t'empty-group',\n\t\t\t'undeclared-op',\n\t\t\t'upsert-filter-incompatible',\n\t\t\t'query-shape',\n\t\t\t'changes',\n\t\t] as const)('kind %s still works', (kind) => {\n\t\t\tconst err = new OrmValidationError(kind, 'users', 'createOne', [])\n\t\t\texpect(err.kind).toBe(kind)\n\t\t})\n\t})\n}\n","import type { PipeInput, PipeOutput } from 'valleyed'\n\nimport type { AnyField, AnySchemaField, SchemaField } from './fields'\nimport { toFieldName } from './fields'\nimport type { AnySchema, SchemaFields } from './schema'\nimport type { Prettify } from './utils'\n\nexport type NumericFieldOf<S extends AnySchema> = {\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends SchemaField<any, infer P, any>\n\t\t? PipeOutput<P> extends number\n\t\t\t? SchemaFields<S>[K]\n\t\t\t: never\n\t\t: never\n}[keyof SchemaFields<S>]\n\nexport type ComparableFieldOf<S extends AnySchema> = {\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends SchemaField<any, infer P, any>\n\t\t? PipeOutput<P> extends number | string | Date\n\t\t\t? SchemaFields<S>[K]\n\t\t\t: never\n\t\t: never\n}[keyof SchemaFields<S>]\n\nexport type OptionalFieldOf<S extends AnySchema> = {\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends SchemaField<any, infer P, any>\n\t\t? undefined extends PipeOutput<P>\n\t\t\t? SchemaFields<S>[K]\n\t\t\t: never\n\t\t: never\n}[keyof SchemaFields<S>]\n\nexport type ArrayFieldOf<S extends AnySchema> = {\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends SchemaField<any, infer P, any>\n\t\t? PipeOutput<P> extends readonly any[]\n\t\t\t? SchemaFields<S>[K]\n\t\t\t: never\n\t\t: never\n}[keyof SchemaFields<S>]\n\nexport type ObjectFieldOf<S extends AnySchema> = {\n\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends SchemaField<any, infer P, any>\n\t\t? PipeOutput<P> extends Record<string, any>\n\t\t\t? PipeOutput<P> extends readonly any[]\n\t\t\t\t? never\n\t\t\t\t: SchemaFields<S>[K]\n\t\t\t: never\n\t\t: never\n}[keyof SchemaFields<S>]\n\nexport type SetValues<S extends AnySchema> = Prettify<\n\tPartial<{\n\t\t[K in keyof SchemaFields<S>]: SchemaFields<S>[K] extends AnySchemaField ? PipeInput<SchemaFields<S>[K]['pipe']> : never\n\t}>\n>\n\nexport class SetOp {\n\treadonly kind = 'set' as const\n\tconstructor(readonly values: Record<string, unknown>) {}\n}\nexport class IncOp {\n\treadonly kind = 'inc' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: number,\n\t) {}\n}\nexport class MulOp {\n\treadonly kind = 'mul' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: number,\n\t) {}\n}\nexport class MinOp<T = unknown> {\n\treadonly kind = 'min' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: T,\n\t) {}\n}\nexport class MaxOp<T = unknown> {\n\treadonly kind = 'max' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: T,\n\t) {}\n}\nexport class UnsetOp {\n\treadonly kind = 'unset' as const\n\tconstructor(readonly field: string) {}\n}\nexport class PushOp<T = unknown> {\n\treadonly kind = 'push' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: T,\n\t) {}\n}\nexport class PullOp<T = unknown> {\n\treadonly kind = 'pull' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: T,\n\t) {}\n}\nexport class PatchOp<T = unknown> {\n\treadonly kind = 'patch' as const\n\tconstructor(\n\t\treadonly field: string,\n\t\treadonly value: T,\n\t) {}\n}\n\nexport type AnyUpdateOp = SetOp | IncOp | MulOp | MinOp | MaxOp | UnsetOp | PushOp | PullOp | PatchOp\n\nexport function isUpdateOp(v: unknown): v is AnyUpdateOp {\n\treturn (\n\t\tv instanceof SetOp ||\n\t\tv instanceof IncOp ||\n\t\tv instanceof MulOp ||\n\t\tv instanceof MinOp ||\n\t\tv instanceof MaxOp ||\n\t\tv instanceof UnsetOp ||\n\t\tv instanceof PushOp ||\n\t\tv instanceof PullOp ||\n\t\tv instanceof PatchOp\n\t)\n}\n\nexport type HasOp<A, Op extends string> = A extends { updateOps: readonly (infer U)[] } ? (Op extends U ? true : false) : false\n\nexport type UpdateOp<_S extends AnySchema, A> =\n\t| (HasOp<A, 'set'> extends true ? SetOp : never)\n\t| (HasOp<A, 'inc'> extends true ? IncOp : never)\n\t| (HasOp<A, 'mul'> extends true ? MulOp : never)\n\t| (HasOp<A, 'min'> extends true ? MinOp : never)\n\t| (HasOp<A, 'max'> extends true ? MaxOp : never)\n\t| (HasOp<A, 'unset'> extends true ? UnsetOp : never)\n\t| (HasOp<A, 'push'> extends true ? PushOp : never)\n\t| (HasOp<A, 'pull'> extends true ? PullOp : never)\n\t| (HasOp<A, 'patch'> extends true ? PatchOp : never)\n\nexport function set<S extends AnySchema>(values: SetValues<S>): SetOp {\n\treturn new SetOp(values as Record<string, unknown>)\n}\n\nexport function inc<S extends AnySchema>(field: NumericFieldOf<S>, value: number): IncOp {\n\treturn new IncOp(toFieldName(field as AnyField), value)\n}\n\nexport function mul<S extends AnySchema>(field: NumericFieldOf<S>, value: number): MulOp {\n\treturn new MulOp(toFieldName(field as AnyField), value)\n}\n\nexport function min<S extends AnySchema>(field: ComparableFieldOf<S>, value: unknown): MinOp {\n\treturn new MinOp(toFieldName(field as AnyField), value)\n}\n\nexport function max<S extends AnySchema>(field: ComparableFieldOf<S>, value: unknown): MaxOp {\n\treturn new MaxOp(toFieldName(field as AnyField), value)\n}\n\nexport function unset<S extends AnySchema>(field: OptionalFieldOf<S>): UnsetOp {\n\treturn new UnsetOp(toFieldName(field as AnyField))\n}\n\nexport function push<S extends AnySchema>(field: ArrayFieldOf<S>, value: unknown): PushOp {\n\treturn new PushOp(toFieldName(field as AnyField), value)\n}\n\nexport function pull<S extends AnySchema>(field: ArrayFieldOf<S>, value: unknown): PullOp {\n\treturn new PullOp(toFieldName(field as AnyField), value)\n}\n\nexport function patch<S extends AnySchema>(field: ObjectFieldOf<S>, value: Record<string, unknown>): PatchOp {\n\treturn new PatchOp(toFieldName(field as AnyField), value)\n}\n\nexport function opTouchedFields(op: AnyUpdateOp): string[] {\n\tif (op instanceof SetOp) return Object.keys(op.values)\n\treturn [op.field]\n}\n\nexport function flattenOps(ops: AnyUpdateOp[]): Record<string, unknown> {\n\tconst data: Record<string, unknown> = {}\n\tfor (const op of ops) {\n\t\tif (op instanceof SetOp) Object.assign(data, op.values)\n\t\telse data[op.field] = op\n\t}\n\treturn data\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\tconst { Schema } = await import('./schema')\n\n\tconst TestSchema = Schema.from('test')\n\t\t.pk('id', v.string(), () => 'x')\n\t\t.field('name', v.string())\n\t\t.field('age', v.number())\n\t\t.field('score', v.optional(v.number()))\n\t\t.field('tags', v.array(v.string()))\n\t\t.field('meta', v.object({ a: v.number() }))\n\t\t.field('createdAt', v.number(), { onCreate: () => 1000 })\n\t\t.field('updatedAt', v.number(), { onCreate: () => 1000, onUpdate: () => 2000 })\n\t\t.build()\n\n\tdescribe('op classes', () => {\n\t\ttest('SetOp has kind \"set\" and stores values', () => {\n\t\t\tconst op = new SetOp({ name: 'Alice' })\n\t\t\texpect(op.kind).toBe('set')\n\t\t\texpect(op.values).toEqual({ name: 'Alice' })\n\t\t})\n\t\ttest('IncOp has kind \"inc\" and stores field + value', () => {\n\t\t\tconst op = new IncOp('age', 5)\n\t\t\texpect(op.kind).toBe('inc')\n\t\t\texpect(op.field).toBe('age')\n\t\t\texpect(op.value).toBe(5)\n\t\t})\n\t\ttest('MulOp has kind \"mul\" and stores field + value', () => {\n\t\t\tconst op = new MulOp('score', 3)\n\t\t\texpect(op.kind).toBe('mul')\n\t\t\texpect(op.field).toBe('score')\n\t\t\texpect(op.value).toBe(3)\n\t\t})\n\t\ttest('MinOp has kind \"min\"', () => {\n\t\t\texpect(new MinOp('age', 10).kind).toBe('min')\n\t\t})\n\t\ttest('MaxOp has kind \"max\"', () => {\n\t\t\texpect(new MaxOp('age', 99).kind).toBe('max')\n\t\t})\n\t\ttest('UnsetOp has kind \"unset\"', () => {\n\t\t\texpect(new UnsetOp('score').kind).toBe('unset')\n\t\t})\n\t\ttest('PushOp has kind \"push\"', () => {\n\t\t\texpect(new PushOp('tags', 'x').kind).toBe('push')\n\t\t})\n\t\ttest('PullOp has kind \"pull\"', () => {\n\t\t\texpect(new PullOp('tags', 'x').kind).toBe('pull')\n\t\t})\n\t\ttest('PatchOp has kind \"patch\"', () => {\n\t\t\texpect(new PatchOp('meta', { a: 9 }).kind).toBe('patch')\n\t\t})\n\t})\n\n\tdescribe('isUpdateOp', () => {\n\t\ttest('returns true for every op class', () => {\n\t\t\texpect(isUpdateOp(new SetOp({}))).toBe(true)\n\t\t\texpect(isUpdateOp(new IncOp('f', 1))).toBe(true)\n\t\t\texpect(isUpdateOp(new MulOp('f', 2))).toBe(true)\n\t\t\texpect(isUpdateOp(new MinOp('f', 0))).toBe(true)\n\t\t\texpect(isUpdateOp(new MaxOp('f', 10))).toBe(true)\n\t\t\texpect(isUpdateOp(new UnsetOp('f'))).toBe(true)\n\t\t\texpect(isUpdateOp(new PushOp('f', 'v'))).toBe(true)\n\t\t\texpect(isUpdateOp(new PullOp('f', 'v'))).toBe(true)\n\t\t\texpect(isUpdateOp(new PatchOp('f', {}))).toBe(true)\n\t\t})\n\t\ttest('returns false for non-op values', () => {\n\t\t\texpect(isUpdateOp('string')).toBe(false)\n\t\t\texpect(isUpdateOp(42)).toBe(false)\n\t\t\texpect(isUpdateOp(null)).toBe(false)\n\t\t\texpect(isUpdateOp({})).toBe(false)\n\t\t})\n\t})\n\n\tdescribe('op helper functions', () => {\n\t\ttest('set() creates SetOp with values', () => {\n\t\t\tconst op = set<typeof TestSchema>({ name: 'Alice', age: 30 })\n\t\t\texpect(op).toBeInstanceOf(SetOp)\n\t\t\texpect(op.kind).toBe('set')\n\t\t\texpect(op.values).toEqual({ name: 'Alice', age: 30 })\n\t\t})\n\t\ttest('inc() creates IncOp from field ref', () => {\n\t\t\tconst op = inc<typeof TestSchema>(TestSchema.fields.age, 5)\n\t\t\texpect(op).toBeInstanceOf(IncOp)\n\t\t\texpect(op.field).toBe('age')\n\t\t\texpect(op.value).toBe(5)\n\t\t})\n\t\ttest('mul() creates MulOp from field ref', () => {\n\t\t\tconst op = mul<typeof TestSchema>(TestSchema.fields.age, 3)\n\t\t\texpect(op).toBeInstanceOf(MulOp)\n\t\t\texpect(op.field).toBe('age')\n\t\t\texpect(op.value).toBe(3)\n\t\t})\n\t\ttest('min() creates MinOp from field ref', () => {\n\t\t\tconst op = min<typeof TestSchema>(TestSchema.fields.age, 10)\n\t\t\texpect(op).toBeInstanceOf(MinOp)\n\t\t\texpect(op.field).toBe('age')\n\t\t})\n\t\ttest('max() creates MaxOp from field ref', () => {\n\t\t\tconst op = max<typeof TestSchema>(TestSchema.fields.age, 99)\n\t\t\texpect(op).toBeInstanceOf(MaxOp)\n\t\t\texpect(op.field).toBe('age')\n\t\t})\n\t\ttest('unset() creates UnsetOp from field ref', () => {\n\t\t\tconst op = unset<typeof TestSchema>(TestSchema.fields.score)\n\t\t\texpect(op).toBeInstanceOf(UnsetOp)\n\t\t\texpect(op.field).toBe('score')\n\t\t})\n\t\ttest('push() creates PushOp from field ref', () => {\n\t\t\tconst op = push<typeof TestSchema>(TestSchema.fields.tags, 'new-tag')\n\t\t\texpect(op).toBeInstanceOf(PushOp)\n\t\t\texpect(op.field).toBe('tags')\n\t\t\texpect(op.value).toBe('new-tag')\n\t\t})\n\t\ttest('pull() creates PullOp from field ref', () => {\n\t\t\tconst op = pull<typeof TestSchema>(TestSchema.fields.tags, 'old-tag')\n\t\t\texpect(op).toBeInstanceOf(PullOp)\n\t\t\texpect(op.field).toBe('tags')\n\t\t})\n\t\ttest('patch() creates PatchOp from field ref', () => {\n\t\t\tconst op = patch<typeof TestSchema>(TestSchema.fields.meta, { a: 9 })\n\t\t\texpect(op).toBeInstanceOf(PatchOp)\n\t\t\texpect(op.field).toBe('meta')\n\t\t\texpect(op.value).toEqual({ a: 9 })\n\t\t})\n\t})\n\n\tdescribe('opTouchedFields', () => {\n\t\ttest('SetOp returns all keys from values', () => {\n\t\t\texpect(opTouchedFields(new SetOp({ name: 'A', age: 1 }))).toEqual(['name', 'age'])\n\t\t})\n\t\ttest('IncOp returns the field', () => {\n\t\t\texpect(opTouchedFields(new IncOp('age', 1))).toEqual(['age'])\n\t\t})\n\t\ttest('UnsetOp returns the field', () => {\n\t\t\texpect(opTouchedFields(new UnsetOp('score'))).toEqual(['score'])\n\t\t})\n\t})\n\n\tdescribe('type-level: field-category helpers', () => {\n\t\ttest('NumericFieldOf only matches numeric fields (excludes optional numeric)', () => {\n\t\t\ttype Numeric = NumericFieldOf<typeof TestSchema>\n\t\t\texpectTypeOf<Numeric['name']>().toEqualTypeOf<'age' | 'createdAt' | 'updatedAt'>()\n\t\t})\n\t\ttest('ComparableFieldOf matches numeric and string fields (excludes optional)', () => {\n\t\t\ttype Comparable = ComparableFieldOf<typeof TestSchema>\n\t\t\texpectTypeOf<Comparable['name']>().toEqualTypeOf<'id' | 'name' | 'age' | 'createdAt' | 'updatedAt'>()\n\t\t})\n\t\ttest('OptionalFieldOf only matches optional fields', () => {\n\t\t\ttype Optional = OptionalFieldOf<typeof TestSchema>\n\t\t\texpectTypeOf<Optional['name']>().toEqualTypeOf<'score'>()\n\t\t})\n\t\ttest('ArrayFieldOf only matches array fields', () => {\n\t\t\ttype Arr = ArrayFieldOf<typeof TestSchema>\n\t\t\texpectTypeOf<Arr['name']>().toEqualTypeOf<'tags'>()\n\t\t})\n\t\ttest('ObjectFieldOf only matches object fields (not arrays)', () => {\n\t\t\ttype Obj = ObjectFieldOf<typeof TestSchema>\n\t\t\texpectTypeOf<Obj['name']>().toEqualTypeOf<'meta'>()\n\t\t})\n\t})\n\n\tdescribe('type-level: inc on a string field is a TS error', () => {\n\t\ttest('inc rejects non-numeric fields', () => {\n\t\t\t// @ts-expect-error — name is a string field, not numeric\n\t\t\tinc<typeof TestSchema>(TestSchema.fields.name, 1)\n\t\t})\n\t})\n\n\tdescribe('type-level: push on a non-array field is a TS error', () => {\n\t\ttest('push rejects non-array fields', () => {\n\t\t\t// @ts-expect-error — name is a string field, not array\n\t\t\tpush<typeof TestSchema>(TestSchema.fields.name, 'val')\n\t\t})\n\t})\n\n\tdescribe('type-level: per-op gating via UpdateOp<S, A>', () => {\n\t\ttest('undeclared ops resolve to never', async () => {\n\t\t\tconst { OrmAdapter } = await import('./orm-adapter')\n\t\t\tclass LimitedAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly updateOps = ['set', 'inc'] as const\n\t\t\t}\n\n\t\t\ttype Limited = UpdateOp<typeof TestSchema, LimitedAdapter>\n\t\t\texpectTypeOf<Limited>().toEqualTypeOf<SetOp | IncOp>()\n\t\t})\n\n\t\ttest('adapter with no updateOps resolves all variants to never', async () => {\n\t\t\tconst { OrmAdapter } = await import('./orm-adapter')\n\t\t\tclass NoOpsAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly updateOps = [] as const\n\t\t\t}\n\n\t\t\ttype NoOps = UpdateOp<typeof TestSchema, NoOpsAdapter>\n\t\t\texpectTypeOf<NoOps>().toBeNever()\n\t\t})\n\n\t\ttest('adapter with all updateOps includes all variants', async () => {\n\t\t\tconst { OrmAdapter } = await import('./orm-adapter')\n\t\t\tclass FullAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({})\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly updateOps = ['set', 'inc', 'mul', 'min', 'max', 'unset', 'push', 'pull', 'patch'] as const\n\t\t\t}\n\n\t\t\ttype Full = UpdateOp<typeof TestSchema, FullAdapter>\n\t\t\ttype Expected =\n\t\t\t\t| SetOp\n\t\t\t\t| IncOp\n\t\t\t\t| MulOp\n\t\t\t\t| MinOp\n\t\t\t\t| MaxOp\n\t\t\t\t| UnsetOp\n\t\t\t\t| PushOp\n\t\t\t\t| PullOp\n\t\t\t\t| PatchOp\n\t\t\texpectTypeOf<Full>().toEqualTypeOf<Expected>()\n\t\t})\n\t})\n}\n","import type { AggregateOpName } from '../../adapter'\nimport { OrmValidationError } from '../../errors'\nimport { Filter, FilterGroup, type FilterChild } from '../../filter'\nimport type { AggregateSpec } from '../../orm-adapter'\nimport type { QueryOptions } from '../../query-options'\nimport { IncOp, MaxOp, MinOp, MulOp, PatchOp, PullOp, PushOp, UnsetOp } from '../../updates'\n\nfunction mapField(field: string, primaryKey: string): string {\n\tif (field === 'id' && primaryKey !== 'id') return primaryKey\n\treturn field\n}\n\nfunction compileOps(f: Filter, field: string, nextParam: (v: unknown) => string): string {\n\tswitch (f.op) {\n\t\tcase 'eq':\n\t\t\treturn f.value === null ? `${field} IS NULL` : `${field} = ${nextParam(f.value)}`\n\t\tcase 'ne':\n\t\t\treturn f.value === null ? `${field} IS NOT NULL` : `${field} != ${nextParam(f.value)}`\n\t\tcase 'gt':\n\t\t\treturn `${field} > ${nextParam(f.value)}`\n\t\tcase 'gte':\n\t\t\treturn `${field} >= ${nextParam(f.value)}`\n\t\tcase 'lt':\n\t\t\treturn `${field} < ${nextParam(f.value)}`\n\t\tcase 'lte':\n\t\t\treturn `${field} <= ${nextParam(f.value)}`\n\t\tcase 'in':\n\t\t\treturn `${field} = ANY(${nextParam(f.value)})`\n\t\tcase 'notIn':\n\t\t\treturn `NOT (${field} = ANY(${nextParam(f.value)}))`\n\t\tcase 'like':\n\t\t\treturn `${field} ILIKE ${nextParam(`%${f.value}%`)}`\n\t\tcase 'exists':\n\t\t\treturn `${field} IS NOT NULL`\n\t\tcase 'notExists':\n\t\t\treturn `${field} IS NULL`\n\t\tcase 'contains':\n\t\t\treturn `${field} @> ${nextParam(JSON.stringify(f.value))}::jsonb`\n\t\tcase 'notContains':\n\t\t\treturn `NOT (${field} @> ${nextParam(JSON.stringify(f.value))}::jsonb)`\n\t\tdefault:\n\t\t\treturn `${field} = ${nextParam(f.value)}`\n\t}\n}\n\nfunction compileFilter(f: Filter, primaryKey: string, nextParam: (v: unknown) => string): string {\n\treturn compileOps(f, `\"${mapField(f.field, primaryKey)}\"`, nextParam)\n}\n\nfunction compileChildren(group: FilterGroup, compileLeaf: (f: Filter) => string): string[] {\n\treturn group.children.map((c) => compileChild(c, compileLeaf)).filter((c): c is string => c !== null)\n}\n\nfunction compileGroup(group: FilterGroup, compileLeaf: (f: Filter) => string): string | null {\n\tconst parts = compileChildren(group, compileLeaf)\n\tif (parts.length === 0) return null\n\tif (parts.length === 1) return parts[0]\n\treturn `(${parts.join(group.op === 'or' ? ' OR ' : ' AND ')})`\n}\n\nfunction compileChild(child: FilterChild, compileLeaf: (f: Filter) => string): string | null {\n\tif (child instanceof Filter) return compileLeaf(child)\n\tif (child instanceof FilterGroup) return compileGroup(child, compileLeaf)\n\treturn null\n}\n\nfunction compilePgFilter(\n\tgroup: FilterGroup,\n\tprimaryKey: string,\n\tstartIndex = 1,\n): { whereClause: string; params: unknown[]; nextParamIndex: number } {\n\tconst params: unknown[] = []\n\tlet paramIndex = startIndex\n\n\tfunction nextParam(value: unknown): string {\n\t\tparams.push(value)\n\t\treturn `$${paramIndex++}`\n\t}\n\n\tconst leaf = (f: Filter) => compileFilter(f, primaryKey, nextParam)\n\tconst whereParts = compileChildren(group, leaf)\n\n\tconst whereClause = whereParts.length > 0 ? `WHERE ${whereParts.join(' AND ')}` : ''\n\treturn { whereClause, params, nextParamIndex: paramIndex }\n}\n\nfunction buildSetParts(\n\tdata: Record<string, unknown>,\n\tstartIndex: number,\n): { setParts: string[]; params: unknown[]; nextParamIndex: number } {\n\tconst params: unknown[] = []\n\tlet paramIndex = startIndex\n\n\tconst setParts = Object.entries(data).map(([key, value]) => {\n\t\tconst col = `\"${key}\"`\n\n\t\tif (value instanceof IncOp) {\n\t\t\tparams.push(value.value)\n\t\t\treturn `${col} = ${col} + $${paramIndex++}`\n\t\t}\n\t\tif (value instanceof MulOp) {\n\t\t\tparams.push(value.value)\n\t\t\treturn `${col} = ${col} * $${paramIndex++}`\n\t\t}\n\t\tif (value instanceof MinOp) {\n\t\t\tparams.push(value.value)\n\t\t\treturn `${col} = LEAST(${col}, $${paramIndex++})`\n\t\t}\n\t\tif (value instanceof MaxOp) {\n\t\t\tparams.push(value.value)\n\t\t\treturn `${col} = GREATEST(${col}, $${paramIndex++})`\n\t\t}\n\t\tif (value instanceof UnsetOp) {\n\t\t\treturn `${col} = NULL`\n\t\t}\n\t\tif (value instanceof PushOp) {\n\t\t\tparams.push(JSON.stringify(value.value))\n\t\t\treturn `${col} = ${col} || jsonb_build_array($${paramIndex++}::jsonb)`\n\t\t}\n\t\tif (value instanceof PullOp) {\n\t\t\tparams.push(JSON.stringify(value.value))\n\t\t\treturn `${col} = (SELECT COALESCE(jsonb_agg(e), '[]'::jsonb) FROM jsonb_array_elements(${col}) e WHERE e <> $${paramIndex++}::jsonb)`\n\t\t}\n\t\tif (value instanceof PatchOp) {\n\t\t\tparams.push(JSON.stringify(value.value))\n\t\t\treturn `${col} = ${col} || $${paramIndex++}::jsonb`\n\t\t}\n\n\t\tparams.push(value)\n\t\treturn `${col} = $${paramIndex++}`\n\t})\n\n\treturn { setParts, params, nextParamIndex: paramIndex }\n}\n\nexport function buildSelectQuery(\n\tgroup: FilterGroup,\n\toptions: QueryOptions | undefined,\n\ttableName: string,\n\tprimaryKey: string,\n): { sql: string; params: unknown[] } {\n\tconst { whereClause, params, nextParamIndex } = compilePgFilter(group, primaryKey)\n\tlet i = nextParamIndex\n\n\tconst orderParts = (options?.orderBy ?? []).map((o) => `\"${mapField(o.field, primaryKey)}\" ${o.direction.toUpperCase()}`)\n\tconst orderClause = orderParts.length > 0 ? `ORDER BY ${orderParts.join(', ')}` : ''\n\n\tlet limitClause = ''\n\tif (options?.limit != null) {\n\t\tparams.push(options.limit)\n\t\tlimitClause = `LIMIT $${i++}`\n\t}\n\tlet offsetClause = ''\n\tif (options?.offset != null) {\n\t\tparams.push(options.offset)\n\t\toffsetClause = `OFFSET $${i++}`\n\t}\n\tconst selectClause = options?.select?.length ? options.select.map((f) => `\"${mapField(f, primaryKey)}\"`).join(', ') : '*'\n\n\tconst sql = `SELECT ${selectClause} FROM \"${tableName}\" ${whereClause} ${orderClause} ${limitClause} ${offsetClause}`\n\t\t.trim()\n\t\t.replace(/\\s+/g, ' ')\n\treturn { sql, params }\n}\n\nexport function buildCountQuery(group: FilterGroup, tableName: string, primaryKey: string): { sql: string; params: unknown[] } {\n\tconst { whereClause, params } = compilePgFilter(group, primaryKey)\n\tconst sql = `SELECT COUNT(*) as count FROM \"${tableName}\" ${whereClause}`.trim().replace(/\\s+/g, ' ')\n\treturn { sql, params }\n}\n\nexport function buildCreateQuery(tableName: string, data: Record<string, unknown>): { sql: string; params: unknown[] } {\n\tconst keys = Object.keys(data)\n\tconst params = Object.values(data)\n\tconst placeholders = keys.map((_, i) => `$${i + 1}`)\n\tconst columns = keys.map((k) => `\"${k}\"`).join(', ')\n\tconst sql = `INSERT INTO \"${tableName}\" (${columns}) VALUES (${placeholders.join(', ')}) RETURNING *`\n\treturn { sql, params }\n}\n\nexport function buildUpdateQuery(\n\tgroup: FilterGroup,\n\ttableName: string,\n\tprimaryKey: string,\n\tdata: Record<string, unknown>,\n): { sql: string; params: unknown[] } {\n\tconst { setParts, params: setParams, nextParamIndex } = buildSetParts(data, 1)\n\tconst { whereClause, params: whereParams } = compilePgFilter(group, primaryKey, nextParamIndex)\n\tconst params = [...setParams, ...whereParams]\n\tconst sql = `UPDATE \"${tableName}\" SET ${setParts.join(', ')} ${whereClause} RETURNING *`.trim().replace(/\\s+/g, ' ')\n\treturn { sql, params }\n}\n\nexport function buildPkUpdateQuery(\n\ttableName: string,\n\tprimaryKey: string,\n\tpk: unknown,\n\tdata: Record<string, unknown>,\n): { sql: string; params: unknown[] } {\n\tconst { setParts, params: setParams, nextParamIndex } = buildSetParts(data, 1)\n\tsetParams.push(pk)\n\tconst sql = `UPDATE \"${tableName}\" SET ${setParts.join(', ')} WHERE \"${primaryKey}\" = $${nextParamIndex} RETURNING *`.replace(\n\t\t/\\s+/g,\n\t\t' ',\n\t)\n\treturn { sql, params: setParams }\n}\n\nexport function buildDeleteQuery(group: FilterGroup, tableName: string, primaryKey: string): { sql: string; params: unknown[] } {\n\tconst { whereClause, params } = compilePgFilter(group, primaryKey)\n\tconst sql = `DELETE FROM \"${tableName}\" ${whereClause} RETURNING *`.trim().replace(/\\s+/g, ' ')\n\treturn { sql, params }\n}\n\nexport function buildUpsertQuery(\n\ttableName: string,\n\tconflictColumn: string,\n\tprimaryKey: string,\n\tcreate: Record<string, unknown>,\n\tdata: Record<string, unknown>,\n): { sql: string; params: unknown[] } {\n\tconst columns = Object.keys(create)\n\tconst createParams = Object.values(create)\n\tconst placeholders = columns.map((_, i) => `$${i + 1}`)\n\tconst pgConflictCol = mapField(conflictColumn, primaryKey)\n\n\tlet setClause: string\n\tconst allParams = [...createParams]\n\n\tif (Object.keys(data).length > 0) {\n\t\tconst { setParts, params: setParams } = buildSetParts(data, columns.length + 1)\n\t\tsetClause = setParts.join(', ')\n\t\tallParams.push(...setParams)\n\t} else {\n\t\tsetClause = `\"${pgConflictCol}\" = EXCLUDED.\"${pgConflictCol}\"`\n\t}\n\n\tconst sql =\n\t\t`INSERT INTO \"${tableName}\" (${columns.map((c) => `\"${c}\"`).join(', ')}) VALUES (${placeholders.join(', ')}) ON CONFLICT (\"${pgConflictCol}\") DO UPDATE SET ${setClause} RETURNING *`.replace(\n\t\t\t/\\s+/g,\n\t\t\t' ',\n\t\t)\n\treturn { sql, params: allParams }\n}\n\nexport function extractUpsertConflictColumn(filter: FilterGroup, schemaName: string): string {\n\tif (filter.children.length === 1 && filter.children[0] instanceof Filter && filter.children[0].op === 'eq') {\n\t\treturn filter.children[0].field\n\t}\n\n\tlet description: string\n\tif (filter.children.length === 0) {\n\t\tdescription = 'empty filter'\n\t} else if (filter.children.length === 1) {\n\t\tconst child = filter.children[0]\n\t\tconst opDesc = child instanceof Filter ? child.op : 'group'\n\t\tdescription = `single non-eq filter (op: ${opDesc})`\n\t} else {\n\t\tdescription = `${filter.children.length} filter clauses`\n\t}\n\n\tthrow new OrmValidationError('upsert-filter-incompatible', schemaName, 'upsertOne', [\n\t\t{\n\t\t\tcause: `PostgreSQL upsert requires a single eq filter on a UNIQUE-indexed column; received ${description}`,\n\t\t},\n\t])\n}\n\nfunction aggFnToSql(fn: AggregateOpName, field: string | undefined, primaryKey: string): string {\n\tif (fn === 'count') return 'COUNT(*)'\n\tconst col = `\"${mapField(field!, primaryKey)}\"`\n\tswitch (fn) {\n\t\tcase 'countDistinct':\n\t\t\treturn `COUNT(DISTINCT ${col})`\n\t\tcase 'sum':\n\t\t\treturn `SUM(${col})`\n\t\tcase 'avg':\n\t\t\treturn `AVG(${col})`\n\t\tcase 'min':\n\t\t\treturn `MIN(${col})`\n\t\tcase 'max':\n\t\t\treturn `MAX(${col})`\n\t}\n}\n\nfunction resolveHavingField(\n\tfield: string,\n\tprimaryKey: string,\n\taliasToExpr: Map<string, string>,\n\tgroupBySet: Set<string>,\n): string {\n\tif (aliasToExpr.has(field)) return aliasToExpr.get(field)!\n\tif (groupBySet.has(field)) return `\"${mapField(field, primaryKey)}\"`\n\treturn `\"${field}\"`\n}\n\nexport function buildAggregateQuery(\n\tspec: AggregateSpec,\n\ttableName: string,\n\tprimaryKey: string,\n): { sql: string; params: unknown[] } {\n\tconst params: unknown[] = []\n\tlet paramIndex = 1\n\n\tfunction nextParam(value: unknown): string {\n\t\tparams.push(value)\n\t\treturn `$${paramIndex++}`\n\t}\n\n\tconst selectParts: string[] = []\n\tconst aliasToExpr = new Map<string, string>()\n\n\tfor (const agg of spec.aggregates) {\n\t\tconst expr = aggFnToSql(agg.fn, agg.field, primaryKey)\n\t\taliasToExpr.set(agg.alias, expr)\n\t\tselectParts.push(`${expr} AS \"${agg.alias}\"`)\n\t}\n\n\tconst groupByFields: string[] = []\n\tfor (const f of spec.groupBy) {\n\t\tconst col = `\"${mapField(f, primaryKey)}\"`\n\t\tgroupByFields.push(col)\n\t\tselectParts.push(`${col} AS \"${f}\"`)\n\t}\n\n\tlet whereClause = ''\n\tif (spec.where) {\n\t\tconst whereLeaf = (f: Filter) => compileFilter(f, primaryKey, nextParam)\n\t\tconst whereParts = compileChildren(spec.where, whereLeaf)\n\t\tif (whereParts.length > 0) whereClause = `WHERE ${whereParts.join(' AND ')}`\n\t}\n\n\tconst groupByClause = groupByFields.length > 0 ? `GROUP BY ${groupByFields.join(', ')}` : ''\n\n\tlet havingClause = ''\n\tif (spec.having) {\n\t\tconst groupBySet = new Set(spec.groupBy)\n\t\tconst havingLeaf = (f: Filter) =>\n\t\t\tcompileOps(f, resolveHavingField(f.field, primaryKey, aliasToExpr, groupBySet), nextParam)\n\t\tconst havingParts = compileChildren(spec.having, havingLeaf)\n\t\tif (havingParts.length > 0) havingClause = `HAVING ${havingParts.join(' AND ')}`\n\t}\n\n\tconst sql = `SELECT ${selectParts.join(', ')} FROM \"${tableName}\" ${whereClause} ${groupByClause} ${havingClause}`\n\t\t.trim()\n\t\t.replace(/\\s+/g, ' ')\n\treturn { sql, params }\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { FilterGroup } = await import('../../filter')\n\tconst { OrderBy } = await import('../../query-options')\n\tconst { IncOp, MulOp, MinOp, MaxOp, UnsetOp, PushOp, PullOp, PatchOp, SetOp, flattenOps } = await import('../../updates')\n\tconst { OrmValidationError } = await import('../../errors')\n\n\tdescribe('compilePgFilter', () => {\n\t\ttest('empty filter group compiles to empty WHERE clause', () => {\n\t\t\tconst group = FilterGroup.create()\n\t\t\tconst { sql } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toBe('SELECT * FROM \"users\"')\n\t\t})\n\n\t\ttest('single eq filter compiles to WHERE field = $1', () => {\n\t\t\tconst group = FilterGroup.create().eq('name', 'Alice')\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toBe('SELECT * FROM \"users\" WHERE \"name\" = $1')\n\t\t\texpect(params).toEqual(['Alice'])\n\t\t})\n\n\t\ttest('eq with null compiles to IS NULL', () => {\n\t\t\tconst group = FilterGroup.create().eq('name', null)\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toBe('SELECT * FROM \"users\" WHERE \"name\" IS NULL')\n\t\t\texpect(params).toEqual([])\n\t\t})\n\n\t\ttest('ne compiles to != (or IS NOT NULL for null)', () => {\n\t\t\tconst group = FilterGroup.create().ne('age', 5)\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toBe('SELECT * FROM \"users\" WHERE \"age\" != $1')\n\t\t\texpect(params).toEqual([5])\n\n\t\t\tconst nullGroup = FilterGroup.create().ne('age', null)\n\t\t\tconst { sql: nullSql } = buildSelectQuery(nullGroup, undefined, 'users', 'id')\n\t\t\texpect(nullSql).toBe('SELECT * FROM \"users\" WHERE \"age\" IS NOT NULL')\n\t\t})\n\n\t\ttest('gt, gte, lt, lte compile to >, >=, <, <=', () => {\n\t\t\texpect(buildSelectQuery(FilterGroup.create().gt('age', 10), undefined, 't', 'id').sql).toContain('\"age\" > $1')\n\t\t\texpect(buildSelectQuery(FilterGroup.create().gte('age', 20), undefined, 't', 'id').sql).toContain('\"age\" >= $1')\n\t\t\texpect(buildSelectQuery(FilterGroup.create().lt('age', 30), undefined, 't', 'id').sql).toContain('\"age\" < $1')\n\t\t\texpect(buildSelectQuery(FilterGroup.create().lte('age', 40), undefined, 't', 'id').sql).toContain('\"age\" <= $1')\n\t\t})\n\n\t\ttest('in compiles to = ANY($N)', () => {\n\t\t\tconst group = FilterGroup.create().in('status', ['a', 'b'])\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('\"status\" = ANY($1)')\n\t\t\texpect(params).toEqual([['a', 'b']])\n\t\t})\n\n\t\ttest('notIn compiles to NOT (field = ANY($N)) — canonical name notIn', () => {\n\t\t\tconst group = FilterGroup.create().notIn('status', ['x', 'y'])\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('NOT (\"status\" = ANY($1))')\n\t\t\texpect(params).toEqual([['x', 'y']])\n\t\t})\n\n\t\ttest('like compiles to ILIKE with % wrapping', () => {\n\t\t\tconst group = FilterGroup.create().like('name', 'ali')\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('\"name\" ILIKE $1')\n\t\t\texpect(params).toEqual(['%ali%'])\n\t\t})\n\n\t\ttest('exists compiles to IS NOT NULL (own op, not boolean form)', () => {\n\t\t\tconst group = FilterGroup.create().exists('val')\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('\"val\" IS NOT NULL')\n\t\t\texpect(params).toEqual([])\n\t\t})\n\n\t\ttest('notExists is its own op — compiles to IS NULL', () => {\n\t\t\tconst group = FilterGroup.create().notExists('val')\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('\"val\" IS NULL')\n\t\t\texpect(params).toEqual([])\n\t\t})\n\n\t\ttest('contains compiles to @> jsonb', () => {\n\t\t\tconst group = FilterGroup.create().contains('tags', ['a', 'b'])\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('\"tags\" @> $1::jsonb')\n\t\t\texpect(params).toEqual([JSON.stringify(['a', 'b'])])\n\t\t})\n\n\t\ttest('notContains compiles to NOT (@> jsonb)', () => {\n\t\t\tconst group = FilterGroup.create().notContains('tags', ['x'])\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toContain('NOT (\"tags\" @> $1::jsonb)')\n\t\t\texpect(params).toEqual([JSON.stringify(['x'])])\n\t\t})\n\n\t\ttest('multiple clauses produce AND-joined WHERE', () => {\n\t\t\tconst group = FilterGroup.create().eq('a', 1).gt('b', 2)\n\t\t\tconst { sql } = buildSelectQuery(group, undefined, 't', 'id')\n\t\t\texpect(sql).toContain('WHERE \"a\" = $1 AND \"b\" > $2')\n\t\t})\n\n\t\ttest('nested and/or groups compile correctly', () => {\n\t\t\tconst group = FilterGroup.create().and([\n\t\t\t\t(q) => q.eq('a', 1),\n\t\t\t\t(q) => q.or([(g) => g.eq('b', 2), (g) => g.eq('c', 3)]),\n\t\t\t])\n\t\t\tconst { sql, params } = buildSelectQuery(group, undefined, 't', 'id')\n\t\t\texpect(sql).toContain('(\"a\" = $1 AND (\"b\" = $2 OR \"c\" = $3))')\n\t\t\texpect(params).toEqual([1, 2, 3])\n\t\t})\n\n\t\ttest('maps id field to primaryKey when primaryKey differs', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'abc')\n\t\t\tconst { sql } = buildSelectQuery(group, undefined, 'users', 'user_id')\n\t\t\texpect(sql).toContain('\"user_id\" = $1')\n\t\t})\n\t})\n\n\tdescribe('buildSelectQuery', () => {\n\t\ttest('options: sort, limit, offset, select', () => {\n\t\t\tconst group = FilterGroup.create().eq('active', true)\n\t\t\tconst options = {\n\t\t\t\torderBy: [new OrderBy('name', 'asc'), new OrderBy('age', 'desc')],\n\t\t\t\tlimit: 10,\n\t\t\t\toffset: 5,\n\t\t\t\tselect: ['name', 'age'] as const,\n\t\t\t}\n\t\t\tconst { sql, params } = buildSelectQuery(group, options, 'users', 'id')\n\t\t\texpect(sql).toContain('SELECT \"name\", \"age\"')\n\t\t\texpect(sql).toContain('ORDER BY \"name\" ASC, \"age\" DESC')\n\t\t\texpect(sql).toContain('LIMIT $2')\n\t\t\texpect(sql).toContain('OFFSET $3')\n\t\t\texpect(params).toEqual([true, 10, 5])\n\t\t})\n\n\t\ttest('undefined options returns basic SELECT *', () => {\n\t\t\tconst group = FilterGroup.create().eq('x', 1)\n\t\t\tconst { sql } = buildSelectQuery(group, undefined, 'users', 'id')\n\t\t\texpect(sql).toBe('SELECT * FROM \"users\" WHERE \"x\" = $1')\n\t\t})\n\t})\n\n\tdescribe('buildCreateQuery', () => {\n\t\ttest('produces INSERT with RETURNING *', () => {\n\t\t\tconst { sql, params } = buildCreateQuery('users', { name: 'Alice', age: 30 })\n\t\t\texpect(sql).toBe('INSERT INTO \"users\" (\"name\", \"age\") VALUES ($1, $2) RETURNING *')\n\t\t\texpect(params).toEqual(['Alice', 30])\n\t\t})\n\t})\n\n\tdescribe('buildUpdateQuery', () => {\n\t\ttest('plain values produce SET col = $N', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql, params } = buildUpdateQuery(group, 'users', 'id', { name: 'Bob', age: 25 })\n\t\t\texpect(sql).toBe('UPDATE \"users\" SET \"name\" = $1, \"age\" = $2 WHERE \"id\" = $3 RETURNING *')\n\t\t\texpect(params).toEqual(['Bob', 25, 'u1'])\n\t\t})\n\n\t\ttest('IncOp produces col = col + $N', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql, params } = buildUpdateQuery(group, 'users', 'id', { count: new IncOp('count', 5) })\n\t\t\texpect(sql).toContain('\"count\" = \"count\" + $1')\n\t\t\texpect(params[0]).toBe(5)\n\t\t})\n\n\t\ttest('MulOp produces col = col * $N', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql } = buildUpdateQuery(group, 'users', 'id', { score: new MulOp('score', 2) })\n\t\t\texpect(sql).toContain('\"score\" = \"score\" * $1')\n\t\t})\n\n\t\ttest('MinOp/MaxOp produce LEAST/GREATEST', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql } = buildUpdateQuery(group, 'users', 'id', {\n\t\t\t\tlo: new MinOp('lo', 1),\n\t\t\t\thi: new MaxOp('hi', 99),\n\t\t\t})\n\t\t\texpect(sql).toContain('LEAST(\"lo\", $1)')\n\t\t\texpect(sql).toContain('GREATEST(\"hi\", $2)')\n\t\t})\n\n\t\ttest('UnsetOp produces col = NULL', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql } = buildUpdateQuery(group, 'users', 'id', { old: new UnsetOp('old') })\n\t\t\texpect(sql).toContain('\"old\" = NULL')\n\t\t})\n\n\t\ttest('PushOp produces jsonb array append', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql } = buildUpdateQuery(group, 'users', 'id', { tags: new PushOp('tags', 'new') })\n\t\t\texpect(sql).toContain('jsonb_build_array($1::jsonb)')\n\t\t})\n\n\t\ttest('PullOp produces jsonb array removal', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql } = buildUpdateQuery(group, 'users', 'id', { tags: new PullOp('tags', 'old') })\n\t\t\texpect(sql).toContain('jsonb_array_elements')\n\t\t})\n\n\t\ttest('PatchOp produces jsonb merge', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql } = buildUpdateQuery(group, 'users', 'id', { meta: new PatchOp('meta', { a: 1 }) })\n\t\t\texpect(sql).toContain('|| $1::jsonb')\n\t\t})\n\t})\n\n\tdescribe('buildPkUpdateQuery', () => {\n\t\ttest('builds UPDATE with PK WHERE clause', () => {\n\t\t\tconst { sql, params } = buildPkUpdateQuery('users', 'id', 'u1', { name: 'Bob' })\n\t\t\texpect(sql).toBe('UPDATE \"users\" SET \"name\" = $1 WHERE \"id\" = $2 RETURNING *')\n\t\t\texpect(params).toEqual(['Bob', 'u1'])\n\t\t})\n\n\t\ttest('handles ops in PK update', () => {\n\t\t\tconst { sql, params } = buildPkUpdateQuery('users', 'id', 'u1', { count: new IncOp('count', 3) })\n\t\t\texpect(sql).toContain('\"count\" = \"count\" + $1')\n\t\t\texpect(sql).toContain('WHERE \"id\" = $2')\n\t\t\texpect(params).toEqual([3, 'u1'])\n\t\t})\n\t})\n\n\tdescribe('buildDeleteQuery', () => {\n\t\ttest('produces DELETE with RETURNING *', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'u1')\n\t\t\tconst { sql, params } = buildDeleteQuery(group, 'users', 'id')\n\t\t\texpect(sql).toBe('DELETE FROM \"users\" WHERE \"id\" = $1 RETURNING *')\n\t\t\texpect(params).toEqual(['u1'])\n\t\t})\n\t})\n\n\tdescribe('buildUpsertQuery', () => {\n\t\ttest('produces INSERT ON CONFLICT with SET parts from data', () => {\n\t\t\tconst data = flattenOps([new SetOp({ name: 'Updated' })])\n\t\t\tconst { sql, params } = buildUpsertQuery('users', 'email', 'id', { id: 'u1', email: 'a@b.com', name: 'Alice' }, data)\n\t\t\texpect(sql).toContain('INSERT INTO \"users\"')\n\t\t\texpect(sql).toContain('ON CONFLICT (\"email\") DO UPDATE SET')\n\t\t\texpect(sql).toContain('\"name\" = $4')\n\t\t\texpect(sql).toContain('RETURNING *')\n\t\t\texpect(params).toEqual(['u1', 'a@b.com', 'Alice', 'Updated'])\n\t\t})\n\n\t\ttest('empty data produces no-op SET on conflict column', () => {\n\t\t\tconst { sql, params } = buildUpsertQuery('users', 'email', 'id', { id: 'u1', email: 'a@b.com' }, {})\n\t\t\texpect(sql).toContain('ON CONFLICT (\"email\") DO UPDATE SET \"email\" = EXCLUDED.\"email\"')\n\t\t\texpect(params).toEqual(['u1', 'a@b.com'])\n\t\t})\n\n\t\ttest('maps conflict column via mapField when primaryKey differs', () => {\n\t\t\tconst { sql } = buildUpsertQuery('users', 'id', 'user_id', { user_id: 'u1', name: 'A' }, {})\n\t\t\texpect(sql).toContain('ON CONFLICT (\"user_id\")')\n\t\t})\n\n\t\ttest('handles ops in upsert SET clause', () => {\n\t\t\tconst data = flattenOps([new IncOp('views', 1)])\n\t\t\tconst { sql, params } = buildUpsertQuery('posts', 'slug', 'id', { id: 'p1', slug: 'hello', views: 0 }, data)\n\t\t\texpect(sql).toContain('\"views\" = \"views\" + $4')\n\t\t\texpect(params).toEqual(['p1', 'hello', 0, 1])\n\t\t})\n\t})\n\n\tdescribe('extractUpsertConflictColumn', () => {\n\t\ttest('extracts field from single eq filter', () => {\n\t\t\tconst filter = FilterGroup.create().eq('email', 'a@b.com')\n\t\t\texpect(extractUpsertConflictColumn(filter, 'users')).toBe('email')\n\t\t})\n\n\t\ttest('throws upsert-filter-incompatible on empty filter', () => {\n\t\t\tconst filter = FilterGroup.create()\n\t\t\texpect(() => extractUpsertConflictColumn(filter, 'users')).toThrow(OrmValidationError)\n\t\t\ttry {\n\t\t\t\textractUpsertConflictColumn(filter, 'users')\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('upsert-filter-incompatible')\n\t\t\t\texpect(err.schema).toBe('users')\n\t\t\t\texpect(err.operation).toBe('upsertOne')\n\t\t\t\texpect(err.failures[0].cause).toContain('empty filter')\n\t\t\t}\n\t\t})\n\n\t\ttest('throws upsert-filter-incompatible on multiple filters', () => {\n\t\t\tconst filter = FilterGroup.create().eq('a', 1).eq('b', 2)\n\t\t\texpect(() => extractUpsertConflictColumn(filter, 'users')).toThrow(OrmValidationError)\n\t\t\ttry {\n\t\t\t\textractUpsertConflictColumn(filter, 'users')\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('upsert-filter-incompatible')\n\t\t\t\texpect(err.failures[0].cause).toContain('2 filter clauses')\n\t\t\t}\n\t\t})\n\n\t\ttest('throws upsert-filter-incompatible on non-eq filter', () => {\n\t\t\tconst filter = FilterGroup.create().gt('age', 10)\n\t\t\texpect(() => extractUpsertConflictColumn(filter, 'users')).toThrow(OrmValidationError)\n\t\t\ttry {\n\t\t\t\textractUpsertConflictColumn(filter, 'users')\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('upsert-filter-incompatible')\n\t\t\t\texpect(err.failures[0].cause).toContain('non-eq filter')\n\t\t\t}\n\t\t})\n\n\t\ttest('throws with clear message naming received filter shape', () => {\n\t\t\tconst filter = FilterGroup.create().in('status', ['a', 'b'])\n\t\t\ttry {\n\t\t\t\textractUpsertConflictColumn(filter, 'test')\n\t\t\t\texpect.unreachable()\n\t\t\t} catch (e) {\n\t\t\t\tconst err = e as OrmValidationError\n\t\t\t\texpect(err.kind).toBe('upsert-filter-incompatible')\n\t\t\t\texpect(err.failures[0].cause).toContain('single eq filter')\n\t\t\t\texpect(err.failures[0].cause).toContain('UNIQUE-indexed column')\n\t\t\t}\n\t\t})\n\t})\n\n\tdescribe('buildAggregateQuery', () => {\n\t\ttest('bare count produces SELECT COUNT(*) AS alias', () => {\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{ aggregates: [{ fn: 'count', alias: 'total' }], groupBy: [] },\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe('SELECT COUNT(*) AS \"total\" FROM \"orders\"')\n\t\t\texpect(params).toEqual([])\n\t\t})\n\n\t\ttest('multi-aggregator produces all functions', () => {\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [\n\t\t\t\t\t\t{ fn: 'count', alias: 'cnt' },\n\t\t\t\t\t\t{ fn: 'sum', field: 'amount', alias: 'revenue' },\n\t\t\t\t\t\t{ fn: 'avg', field: 'amount', alias: 'avgAmt' },\n\t\t\t\t\t\t{ fn: 'min', field: 'amount', alias: 'lo' },\n\t\t\t\t\t\t{ fn: 'max', field: 'amount', alias: 'hi' },\n\t\t\t\t\t],\n\t\t\t\t\tgroupBy: [],\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe(\n\t\t\t\t'SELECT COUNT(*) AS \"cnt\", SUM(\"amount\") AS \"revenue\", AVG(\"amount\") AS \"avgAmt\", MIN(\"amount\") AS \"lo\", MAX(\"amount\") AS \"hi\" FROM \"orders\"',\n\t\t\t)\n\t\t\texpect(params).toEqual([])\n\t\t})\n\n\t\ttest('countDistinct produces COUNT(DISTINCT col)', () => {\n\t\t\tconst { sql } = buildAggregateQuery(\n\t\t\t\t{ aggregates: [{ fn: 'countDistinct', field: 'category', alias: 'unique' }], groupBy: [] },\n\t\t\t\t'items',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe('SELECT COUNT(DISTINCT \"category\") AS \"unique\" FROM \"items\"')\n\t\t})\n\n\t\ttest('single-column groupBy produces GROUP BY clause', () => {\n\t\t\tconst { sql } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'count', alias: 'cnt' }],\n\t\t\t\t\tgroupBy: ['region'],\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe('SELECT COUNT(*) AS \"cnt\", \"region\" AS \"region\" FROM \"orders\" GROUP BY \"region\"')\n\t\t})\n\n\t\ttest('multi-column groupBy produces all GROUP BY columns', () => {\n\t\t\tconst { sql } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'count', alias: 'cnt' }],\n\t\t\t\t\tgroupBy: ['region', 'product'],\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe(\n\t\t\t\t'SELECT COUNT(*) AS \"cnt\", \"region\" AS \"region\", \"product\" AS \"product\" FROM \"orders\" GROUP BY \"region\", \"product\"',\n\t\t\t)\n\t\t})\n\n\t\ttest('where-only produces WHERE clause with params', () => {\n\t\t\tconst where = FilterGroup.create().eq('status', 'active')\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{ aggregates: [{ fn: 'count', alias: 'total' }], groupBy: [], where },\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe('SELECT COUNT(*) AS \"total\" FROM \"orders\" WHERE \"status\" = $1')\n\t\t\texpect(params).toEqual(['active'])\n\t\t})\n\n\t\ttest('having-only filters on aggregate alias via repeated expression', () => {\n\t\t\tconst having = FilterGroup.create().gt('total', 10)\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\t\tgroupBy: ['region'],\n\t\t\t\t\thaving,\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe(\n\t\t\t\t'SELECT COUNT(*) AS \"total\", \"region\" AS \"region\" FROM \"orders\" GROUP BY \"region\" HAVING COUNT(*) > $1',\n\t\t\t)\n\t\t\texpect(params).toEqual([10])\n\t\t})\n\n\t\ttest('where + having both produce correct param ordering', () => {\n\t\t\tconst where = FilterGroup.create().eq('status', 'active')\n\t\t\tconst having = FilterGroup.create().gte('revenue', 1000)\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'sum', field: 'amount', alias: 'revenue' }],\n\t\t\t\t\tgroupBy: ['region'],\n\t\t\t\t\twhere,\n\t\t\t\t\thaving,\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe(\n\t\t\t\t'SELECT SUM(\"amount\") AS \"revenue\", \"region\" AS \"region\" FROM \"orders\" WHERE \"status\" = $1 GROUP BY \"region\" HAVING SUM(\"amount\") >= $2',\n\t\t\t)\n\t\t\texpect(params).toEqual(['active', 1000])\n\t\t})\n\n\t\ttest('having on groupBy field uses column name directly', () => {\n\t\t\tconst having = FilterGroup.create().eq('region', 'US')\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'count', alias: 'cnt' }],\n\t\t\t\t\tgroupBy: ['region'],\n\t\t\t\t\thaving,\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toBe(\n\t\t\t\t'SELECT COUNT(*) AS \"cnt\", \"region\" AS \"region\" FROM \"orders\" GROUP BY \"region\" HAVING \"region\" = $1',\n\t\t\t)\n\t\t\texpect(params).toEqual(['US'])\n\t\t})\n\n\t\ttest('field-name mapping: id maps to primaryKey when primaryKey differs', () => {\n\t\t\tconst { sql } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'countDistinct', field: 'id', alias: 'uniqueIds' }],\n\t\t\t\t\tgroupBy: [],\n\t\t\t\t},\n\t\t\t\t'users',\n\t\t\t\t'user_id',\n\t\t\t)\n\t\t\texpect(sql).toBe('SELECT COUNT(DISTINCT \"user_id\") AS \"uniqueIds\" FROM \"users\"')\n\t\t})\n\n\t\ttest('groupBy with id field maps to primaryKey', () => {\n\t\t\tconst { sql } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'count', alias: 'cnt' }],\n\t\t\t\t\tgroupBy: ['id'],\n\t\t\t\t},\n\t\t\t\t'users',\n\t\t\t\t'user_id',\n\t\t\t)\n\t\t\texpect(sql).toContain('GROUP BY \"user_id\"')\n\t\t\texpect(sql).toContain('\"user_id\" AS \"id\"')\n\t\t})\n\n\t\ttest('complex having with AND/OR groups', () => {\n\t\t\tconst having = FilterGroup.create().and([\n\t\t\t\t(q) => q.gt('cnt', 5),\n\t\t\t\t(q) => q.or([(g) => g.eq('region', 'US'), (g) => g.eq('region', 'EU')]),\n\t\t\t])\n\t\t\tconst { sql, params } = buildAggregateQuery(\n\t\t\t\t{\n\t\t\t\t\taggregates: [{ fn: 'count', alias: 'cnt' }],\n\t\t\t\t\tgroupBy: ['region'],\n\t\t\t\t\thaving,\n\t\t\t\t},\n\t\t\t\t'orders',\n\t\t\t\t'id',\n\t\t\t)\n\t\t\texpect(sql).toContain('HAVING (COUNT(*) > $1 AND (\"region\" = $2 OR \"region\" = $3))')\n\t\t\texpect(params).toEqual([5, 'US', 'EU'])\n\t\t})\n\t})\n}\n","import type { Pipe } from 'valleyed'\n\nimport { EquippedError } from '../errors'\nimport { Instance, type ClassRef } from '../instance'\nimport type { AggregateOpName, FieldTypeName, FilterOpName, UpdateOpName } from './adapter'\nimport type { OrmUse } from './adapters/base'\nimport { FilterGroup } from './filter'\nimport type { DiscoveredSchema } from './migrations/introspection-types'\nimport type { AddFieldChange, AddForeignKeyChange, AddIndexChange, CreateTableChange, DropFieldChange, DropForeignKeyChange, DropIndexChange, DropTableChange, ModifyFieldChange, RenameFieldChange, RenameTableChange } from './migrations/types'\nimport type { IterationQueryOptions, QueryOptions } from './query-options'\nimport type { AnySchema } from './schema'\nimport type { AnyUpdateOp } from './updates'\n\nexport type AggregateSpec = {\n\twhere?: FilterGroup\n\taggregates: ReadonlyArray<{\n\t\tfn: AggregateOpName\n\t\tfield?: string\n\t\talias: string\n\t}>\n\tgroupBy: readonly string[]\n\thaving?: FilterGroup\n}\n\nexport abstract class OrmAdapter {\n\treadonly queryableOps: readonly FilterOpName[] = []\n\treadonly updateOps: readonly UpdateOpName[] = []\n\treadonly aggregateOps: readonly AggregateOpName[] = []\n\treadonly supportedFieldTypes: readonly FieldTypeName[] = []\n\n\tabstract readonly schemaConfigPipe: Pipe<any, any>\n\n\tconnect?(): Promise<void>\n\tdisconnect?(): Promise<void>\n\tfindByPk?(schema: AnySchema, config: unknown, pk: unknown): Promise<Record<string, unknown> | null>\n\tcreateMany?(schema: AnySchema, config: unknown, data: Record<string, unknown>[]): Promise<Record<string, unknown>[]>\n\tupdateByPk?(schema: AnySchema, config: unknown, pk: unknown, ops: AnyUpdateOp[]): Promise<Record<string, unknown> | null>\n\tdeleteByPk?(schema: AnySchema, config: unknown, pk: unknown): Promise<Record<string, unknown> | null>\n\traw?(schema: AnySchema, config: unknown, ...args: any[]): Promise<any>\n\tfindMany?(schema: AnySchema, config: unknown, filter: FilterGroup, options?: QueryOptions): Promise<Record<string, unknown>[]>\n\tcount?(schema: AnySchema, config: unknown, filter: FilterGroup): Promise<number>\n\titerateMany?(schema: AnySchema, config: unknown, filter: FilterGroup, options?: IterationQueryOptions): AsyncGenerator<Record<string, unknown>, void, void>\n\tupdateMany?(schema: AnySchema, config: unknown, filter: FilterGroup, data: Record<string, unknown>): Promise<Record<string, unknown>[]>\n\tdeleteMany?(schema: AnySchema, config: unknown, filter: FilterGroup): Promise<Record<string, unknown>[]>\n\tupsertOne?(\n\t\tschema: AnySchema,\n\t\tconfig: unknown,\n\t\tfilter: FilterGroup,\n\t\tcreate: Record<string, unknown>,\n\t\tops: AnyUpdateOp[],\n\t): Promise<Record<string, unknown>>\n\taggregate?(schema: AnySchema, config: unknown, spec: AggregateSpec): Promise<Array<Record<string, unknown>>>\n\tsession?<T>(fn: () => Promise<T>): Promise<T>\n\n\tloadMigrations?(): Promise<{ id: string; appliedAt: number }[]>\n\trecordMigration?(id: string, appliedAt: number): Promise<void>\n\tacquireMigrationLock?<T>(fn: () => Promise<T>): Promise<T>\n\tapplyCreateTable?(change: CreateTableChange<any>): Promise<void>\n\tapplyDropTable?(change: DropTableChange): Promise<void>\n\tapplyAddField?(change: AddFieldChange<any>): Promise<void>\n\tapplyDropField?(change: DropFieldChange): Promise<void>\n\tapplyModifyField?(change: ModifyFieldChange<any>): Promise<void>\n\tapplyRenameTable?(change: RenameTableChange): Promise<void>\n\tapplyRenameField?(change: RenameFieldChange): Promise<void>\n\tapplyAddIndex?(change: AddIndexChange): Promise<void>\n\tapplyDropIndex?(change: DropIndexChange): Promise<void>\n\tapplyAddForeignKey?(change: AddForeignKeyChange): Promise<void>\n\tapplyDropForeignKey?(change: DropForeignKeyChange): Promise<void>\n\tintrospect?(): Promise<DiscoveredSchema[]>\n\n\tprotected onFatalError(err: unknown): never {\n\t\tconst wrapped = err instanceof EquippedError ? err : new EquippedError('OrmAdapter fatal error', {}, err)\n\t\tInstance.crash(wrapped)\n\t}\n\n\tconstructor() {\n\t\tconst self = this as any\n\t\tif (typeof self.connect === 'function') {\n\t\t\tInstance.on('start', () => self.connect(), { class: this.constructor as ClassRef })\n\t\t}\n\t\tif (typeof self.disconnect === 'function') {\n\t\t\tInstance.on('close', () => self.disconnect(), { class: this.constructor as ClassRef })\n\t\t}\n\t}\n\n\tuse(schema: AnySchema, config: unknown): OrmUse {\n\t\tconst self = this as any\n\t\tconst emptyIterator = async function* (): AsyncGenerator<Record<string, unknown>, void, void> {}\n\t\tconst use: OrmUse = {\n\t\t\tfindMany: (filter, opts) => self.findMany?.(schema, config, filter, opts) ?? Promise.resolve([]),\n\t\t\titerateMany: (filter, opts) => self.iterateMany?.(schema, config, filter, opts) ?? emptyIterator(),\n\t\t\tfindOne: async (filter) => {\n\t\t\t\tconst rows = await use.findMany(filter, { limit: 1 })\n\t\t\t\treturn rows[0] ?? null\n\t\t\t},\n\t\t\tcount: (filter) => self.count?.(schema, config, filter) ?? Promise.reject(new Error('count not implemented')),\n\t\t\tcreateOne: async (d) => {\n\t\t\t\tconst rows = await use.createMany([d])\n\t\t\t\treturn rows[0]\n\t\t\t},\n\t\t\tcreateMany: (d) => self.createMany?.(schema, config, d) ?? Promise.resolve([]),\n\t\t\tupdateMany: (filter, d) => self.updateMany?.(schema, config, filter, d) ?? Promise.resolve([]),\n\t\t\tupdateOne: async (filter, d) => {\n\t\t\t\tconst match = await use.findOne(filter)\n\t\t\t\tif (!match) return null\n\t\t\t\tconst pk = schema.pkField.name\n\t\t\t\tconst pkFilter = FilterGroup.create().eq(pk, match[pk])\n\t\t\t\tconst rows = await use.updateMany(pkFilter, d)\n\t\t\t\treturn rows[0] ?? null\n\t\t\t},\n\t\t\tupsertOne: (filter, create, ops) =>\n\t\t\t\tself.upsertOne?.(schema, config, filter, create, ops) ?? Promise.reject(new Error('upsertOne not implemented')),\n\t\t\tdeleteOne: async (filter) => {\n\t\t\t\tconst row = await use.findOne(filter)\n\t\t\t\tif (!row) return null\n\t\t\t\tconst pk = schema.pkField.name\n\t\t\t\tif (self.deleteByPk) {\n\t\t\t\t\tawait self.deleteByPk(schema, config, row[pk])\n\t\t\t\t} else if (self.deleteMany) {\n\t\t\t\t\tconst pkFilter = FilterGroup.create().eq(pk, row[pk])\n\t\t\t\t\tawait self.deleteMany(schema, config, pkFilter)\n\t\t\t\t}\n\t\t\t\treturn row\n\t\t\t},\n\t\t\tdeleteMany: (filter) => self.deleteMany?.(schema, config, filter) ?? Promise.resolve([]),\n\t\t\traw: (...args: any[]) => self.raw?.(schema, config, ...args) ?? Promise.reject(new Error('raw not implemented')),\n\t\t\taggregate: (spec) => self.aggregate?.(schema, config, spec) ?? Promise.reject(new Error('aggregate not implemented')),\n\t\t\taggregateOps: self.aggregateOps ?? [],\n\t\t}\n\t\treturn use\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, vi } = import.meta.vitest\n\tconst { v } = await import('valleyed')\n\n\tdescribe('OrmAdapter', () => {\n\t\ttest('subclass with connect/disconnect auto-registers Instance hooks', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tconst onSpy = vi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tclass TestAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync connect() {}\n\t\t\t\tasync disconnect() {}\n\t\t\t}\n\n\t\t\tnew (TestAdapter as any)()\n\n\t\t\texpect(onSpy).toHaveBeenCalledWith('start', expect.any(Function), expect.objectContaining({ class: TestAdapter }))\n\t\t\texpect(onSpy).toHaveBeenCalledWith('close', expect.any(Function), expect.objectContaining({ class: TestAdapter }))\n\n\t\t\tonSpy.mockRestore()\n\t\t})\n\n\t\ttest('subclass without connect/disconnect does not register hooks', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tconst onSpy = vi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tclass MinimalAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t}\n\n\t\t\tnew (MinimalAdapter as any)()\n\t\t\texpect(onSpy).not.toHaveBeenCalled()\n\n\t\t\tonSpy.mockRestore()\n\t\t})\n\n\t\ttest('capability declarations default to empty arrays', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tclass DefaultAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t}\n\t\t\tconst adapter = new (DefaultAdapter as any)() as DefaultAdapter\n\t\t\texpect(adapter.queryableOps).toEqual([])\n\t\t\texpect(adapter.updateOps).toEqual([])\n\t\t\texpect(adapter.aggregateOps).toEqual([])\n\t\t\texpect(adapter.supportedFieldTypes).toEqual([])\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('onFatalError wraps non-EquippedError and calls Instance.crash', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\t\t\tconst crashSpy = vi.spyOn(Inst, 'crash').mockImplementation((() => {\n\t\t\t\tthrow new Error('crash')\n\t\t\t}) as any)\n\n\t\t\tclass FatalAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\ttriggerFatal() {\n\t\t\t\t\tthis.onFatalError(new Error('something broke'))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (FatalAdapter as any)() as FatalAdapter\n\t\t\texpect(() => adapter.triggerFatal()).toThrow('crash')\n\t\t\texpect(crashSpy).toHaveBeenCalled()\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('onFatalError passes through EquippedError directly', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\t\t\tlet crashedWith: unknown\n\t\t\tvi.spyOn(Inst, 'crash').mockImplementation(((err: any) => {\n\t\t\t\tcrashedWith = err\n\t\t\t\tthrow err\n\t\t\t}) as any)\n\n\t\t\tclass FatalAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\ttriggerFatal() {\n\t\t\t\t\tthis.onFatalError(new EquippedError('equipped error', { detail: 'test' }))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (FatalAdapter as any)() as FatalAdapter\n\t\t\texpect(() => adapter.triggerFatal()).toThrow()\n\t\t\texpect(crashedWith).toBeInstanceOf(EquippedError)\n\t\t\texpect((crashedWith as EquippedError).message).toBe('equipped error')\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('use() creates OrmUse bridge that delegates to flat methods', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tconst { Schema } = await import('./schema')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tclass BridgeAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\treadonly queryableOps = ['eq'] as const\n\n\t\t\t\tasync findMany(_s: AnySchema, _c: unknown, _f: any, _o?: any) {\n\t\t\t\t\treturn [{ id: 'found' }]\n\t\t\t\t}\n\t\t\t\tasync count(_s: AnySchema, _c: unknown, _f: any) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\tasync *iterateMany(_s: AnySchema, _c: unknown, _f: any, _o?: any) {\n\t\t\t\t\tyield { id: 'iterated' }\n\t\t\t\t}\n\t\t\t\tasync createMany(_s: AnySchema, _c: unknown, data: Record<string, unknown>[]) {\n\t\t\t\t\treturn data\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst TestSchema = Schema.from('bridge_test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = new (BridgeAdapter as any)() as BridgeAdapter\n\t\t\tconst ormUse = adapter.use(TestSchema, { table: 'bridge_test' })\n\n\t\t\tconst rows = await ormUse.findMany(FilterGroup.create())\n\t\t\texpect(rows).toEqual([{ id: 'found' }])\n\t\t\tawait expect(ormUse.count(FilterGroup.create())).resolves.toBe(1)\n\n\t\t\tconst iterated: Record<string, unknown>[] = []\n\t\t\tfor await (const row of ormUse.iterateMany(FilterGroup.create())) iterated.push(row)\n\t\t\texpect(iterated).toEqual([{ id: 'iterated' }])\n\n\t\t\tconst created = await ormUse.createOne({ id: 'new' })\n\t\t\texpect(created).toEqual({ id: 'new' })\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('use() bridge delegates updateMany to flat method', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tconst { Schema } = await import('./schema')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tclass UpdateAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string', 'number'] as const\n\t\t\t\treadonly updateOps = ['set'] as const\n\n\t\t\t\tasync findMany(_s: AnySchema, _c: unknown, _f: any) {\n\t\t\t\t\treturn [{ id: 'u1', name: 'old' }]\n\t\t\t\t}\n\t\t\t\tasync updateMany(_s: AnySchema, _c: unknown, _f: any, data: Record<string, unknown>) {\n\t\t\t\t\treturn [{ id: 'u1', ...data }]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst TestSchema = Schema.from('upd_test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.field('name', v.string())\n\t\t\t\t.build()\n\t\t\tconst adapter = new (UpdateAdapter as any)() as UpdateAdapter\n\t\t\tconst ormUse = adapter.use(TestSchema, { table: 'upd_test' })\n\n\t\t\tconst updated = await ormUse.updateOne(FilterGroup.create().eq('id', 'u1'), { name: 'new' })\n\t\t\texpect(updated).not.toBeNull()\n\t\t\texpect(updated!.name).toBe('new')\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('use().iterateMany does not fall back to findMany when adapter omits iterateMany', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tconst { Schema } = await import('./schema')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tlet findManyCalls = 0\n\t\t\tclass FindOnlyAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\t\t\t\tasync findMany() {\n\t\t\t\t\tfindManyCalls += 1\n\t\t\t\t\treturn [{ id: 'found' }]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst TestSchema = Schema.from('iter_no_fallback')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = new (FindOnlyAdapter as any)() as FindOnlyAdapter\n\t\t\tconst rows: Record<string, unknown>[] = []\n\t\t\tfor await (const row of adapter.use(TestSchema, { table: 'iter_no_fallback' }).iterateMany(FilterGroup.create())) rows.push(row)\n\n\t\t\texpect(rows).toEqual([])\n\t\t\texpect(findManyCalls).toBe(0)\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('use() bridge delegates deleteByPk via deleteOne', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tconst { Schema } = await import('./schema')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tlet deletedPk: unknown = null\n\t\t\tclass DeleteAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\treadonly supportedFieldTypes = ['string'] as const\n\n\t\t\t\tasync findMany(_s: AnySchema, _c: unknown, _f: any) {\n\t\t\t\t\treturn [{ id: 'd1' }]\n\t\t\t\t}\n\t\t\t\tasync deleteByPk(_s: AnySchema, _c: unknown, pk: unknown) {\n\t\t\t\t\tdeletedPk = pk\n\t\t\t\t\treturn { id: String(pk) }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst TestSchema = Schema.from('del_test')\n\t\t\t\t.pk('id', v.string(), () => 'x')\n\t\t\t\t.build()\n\t\t\tconst adapter = new (DeleteAdapter as any)() as DeleteAdapter\n\t\t\tconst ormUse = adapter.use(TestSchema, { table: 'del_test' })\n\n\t\t\tconst deleted = await ormUse.deleteOne(FilterGroup.create().eq('id', 'd1'))\n\t\t\texpect(deleted).toEqual({ id: 'd1' })\n\t\t\texpect(deletedPk).toBe('d1')\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('use() bridge delegates session to flat method', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tlet sessionRan = false\n\t\t\tclass SessionAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\tasync session<T>(fn: () => Promise<T>): Promise<T> {\n\t\t\t\t\tsessionRan = true\n\t\t\t\t\treturn fn()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (SessionAdapter as any)() as SessionAdapter\n\t\t\tconst result = await adapter.session!(async () => 42)\n\t\t\texpect(result).toBe(42)\n\t\t\texpect(sessionRan).toBe(true)\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\n\t\ttest('type-level: subclass method override enforces canonical signature', async () => {\n\t\t\tconst { Instance: Inst } = await import('../instance')\n\t\t\tvi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tclass CorrectAdapter extends OrmAdapter {\n\t\t\t\treadonly schemaConfigPipe = v.object({ table: v.string() })\n\t\t\t\tasync findByPk(_s: AnySchema, _c: unknown, _pk: unknown) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\tasync createMany(_s: AnySchema, _c: unknown, _d: Record<string, unknown>[]) {\n\t\t\t\t\treturn []\n\t\t\t\t}\n\t\t\t\tasync raw(_s: AnySchema, _c: unknown, ..._args: any[]) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst adapter = new (CorrectAdapter as any)() as CorrectAdapter\n\t\t\texpect(adapter.findByPk).toBeTypeOf('function')\n\t\t\texpect(adapter.createMany).toBeTypeOf('function')\n\t\t\texpect(adapter.raw).toBeTypeOf('function')\n\n\t\t\tvi.restoreAllMocks()\n\t\t})\n\t})\n}\n"],"mappings":"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","names":["import_valleyed","pino","import_valleyed","v","EquippedError","OrmValidationError","import_valleyed","import_valleyed","v","v","EquippedError","v","OrmAdapter","FilterGroup","IncOp","MulOp","MinOp","MaxOp","UnsetOp","PushOp","PullOp","PatchOp","SetOp","flattenOps","OrmValidationError","v","result","Cursor","OrmIntrospectionError","Instance","FilterGroup"]}
|