equipped 5.2.9 → 5.3.0-alpha.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 +88 -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 +1705 -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 +1709 -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 +1600 -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-2TCFNKRZ.mjs +1824 -0
- package/dist/esm/chunk-2TCFNKRZ.mjs.map +1 -0
- package/dist/esm/chunk-6DW4GW3R.min.mjs +2 -0
- package/dist/esm/chunk-6DW4GW3R.min.mjs.map +1 -0
- package/dist/esm/chunk-6SB5M4XH.mjs +795 -0
- package/dist/esm/chunk-6SB5M4XH.mjs.map +1 -0
- package/dist/esm/chunk-AQY7QVYI.min.mjs +2 -0
- package/dist/esm/chunk-AUKXL4EA.min.mjs +2 -0
- package/dist/esm/chunk-AUKXL4EA.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-ECBJ3NT3.min.mjs +2 -0
- package/dist/esm/chunk-ECBJ3NT3.min.mjs.map +1 -0
- package/dist/{types/events/types/kafka.js → esm/chunk-I4BB436E.mjs} +60 -37
- package/dist/esm/chunk-I4BB436E.mjs.map +1 -0
- package/dist/esm/chunk-IEBC3OWN.mjs +22 -0
- package/dist/esm/chunk-IEBC3OWN.mjs.map +1 -0
- package/dist/esm/chunk-J5LGTIGS.mjs +10 -0
- package/dist/esm/chunk-KW3PBDFD.mjs +53 -0
- package/dist/esm/chunk-KW3PBDFD.mjs.map +1 -0
- package/dist/esm/chunk-LTDVZJYJ.min.mjs +32 -0
- package/dist/esm/chunk-LTDVZJYJ.min.mjs.map +1 -0
- package/dist/esm/chunk-MYGAF2AC.min.mjs +2 -0
- package/dist/esm/chunk-MYGAF2AC.min.mjs.map +1 -0
- package/dist/esm/chunk-OXI6IKAM.min.mjs +2 -0
- package/dist/esm/chunk-OXI6IKAM.min.mjs.map +1 -0
- package/dist/esm/chunk-RIRBNBTC.mjs +113 -0
- package/dist/esm/chunk-RIRBNBTC.mjs.map +1 -0
- package/dist/esm/chunk-TWKHVLLT.mjs +1280 -0
- package/dist/esm/chunk-TWKHVLLT.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-WHIWTP2Z.min.mjs +2 -0
- package/dist/esm/chunk-WHIWTP2Z.min.mjs.map +1 -0
- package/dist/esm/chunk-YTHRK2PO.mjs +126 -0
- package/dist/esm/chunk-YTHRK2PO.mjs.map +1 -0
- package/dist/esm/chunk-YTM6ZURZ.min.mjs +2 -0
- package/dist/esm/chunk-YTM6ZURZ.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-GP3G26B6.min.mjs +2 -0
- package/dist/esm/introspection-GP3G26B6.min.mjs.map +1 -0
- package/dist/esm/introspection-Y7EXSYPD.mjs +10 -0
- package/dist/esm/introspection-Y7EXSYPD.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 +126 -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/{types/server/impls/fastify.js → esm/server/adapters/fastify/index.mjs} +56 -45
- 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-3PpBAx1K.d.ts} +58 -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-32DMHN3G.js +1823 -0
- package/dist/types/chunk-4LRJJSGG.js +112 -0
- package/dist/types/chunk-A2MRYMCA.js +1279 -0
- package/dist/types/chunk-H6JBLKX5.js +794 -0
- package/dist/{esm/events/types/kafka.mjs → types/chunk-IAHTILKJ.js} +59 -38
- package/dist/types/chunk-JZ2JTENY.js +125 -0
- package/dist/types/chunk-KZKFYO4V.js +7 -0
- package/dist/types/chunk-LN3A6R4Y.js +28 -0
- package/dist/types/chunk-LWUMIHL4.js +21 -0
- package/dist/types/chunk-MLKGABMK.js +9 -0
- package/dist/types/chunk-XOU2A2Y6.js +52 -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-ZQCAW254.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 +194 -0
- package/dist/types/server/adapters/express/index.js +125 -0
- package/dist/types/server/adapters/fastify/index.d.ts +219 -0
- package/dist/{esm/server/impls/fastify.mjs → types/server/adapters/fastify/index.js} +55 -46
- 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 +154 -15
- 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.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/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/orm/errors/validation.ts","../../src/orm/fields.ts","../../src/orm/filter.ts","../../src/orm/orm-adapter.ts","../../src/orm/updates.ts"],"sourcesContent":["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 { 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 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 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","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"],"mappings":"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","names":["EquippedError","walkHaving","v","v","v","OrmAdapter"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/events/adapters/base.ts"],"sourcesContent":["import type { Events } from '../../types'\n\nexport type StreamOptions = { skipScope?: boolean; fanout: boolean }\n\nexport type Stream<EventData> = {\n\tpublish: (data: EventData) => Promise<boolean>\n\tsubscribe: (onMessage: (data: EventData) => Promise<void>) => void\n}\n\nexport abstract class EventBus {\n\tabstract stream<Event extends Events[keyof Events]>(topic: Event['topic'], options?: Partial<StreamOptions>): Stream<Event['data']>\n}\n"],"mappings":";AASO,IAAe,WAAf,MAAwB;AAE/B;","names":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{K as x,a as m}from "./chunk-LTDVZJYJ.min.mjs";var f=class extends m{constructor(t,r,c,l){super(`ORM validation error (${t}) on ${r}.${c}`,{kind:t,schema:r,operation:c,failures:l});this.kind=t;this.schema=r;this.operation=c;this.failures=l}};import"valleyed";var O=class{name;path;constructor(e,t){this.name=e,this.path=t??[e]}};function p(a){return a instanceof O?a.path.join("."):a}var T=class extends O{pipe;onCreate;onUpdate;constructor(e,t,r){super(e),this.pipe=t,this.onCreate=r?.onCreate,this.onUpdate=r?.onUpdate}},P=class{constructor(e,t,r,c){this.name=e;this.pipe=t;this.deps=r;this.compute=c}};var i=class{constructor(e,t,r){this.op=t;this.value=r;this.field=p(e)}field},g=class a{constructor(e="and",t){this.op=e;this.children=t??[]}children;#e(e){return new a(this.op,[...this.children,e])}eq(e,t){return this.#e(new i(e,"eq",t))}ne(e,t){return this.#e(new i(e,"ne",t))}gt(e,t){return this.#e(new i(e,"gt",t))}gte(e,t){return this.#e(new i(e,"gte",t))}lt(e,t){return this.#e(new i(e,"lt",t))}lte(e,t){return this.#e(new i(e,"lte",t))}in(e,t){return this.#e(new i(e,"in",t))}notIn(e,t){return this.#e(new i(e,"notIn",t))}like(e,t){return this.#e(new i(e,"like",t))}exists(e){return this.#e(new i(e,"exists",!0))}notExists(e){return this.#e(new i(e,"notExists",!0))}contains(e,t){return this.#e(new i(e,"contains",t))}notContains(e,t){return this.#e(new i(e,"notContains",t))}and(e){if(e.length===0)throw new m("and() requires at least one filter factory",{op:"and"});let t=new a("and",e.map(r=>r(a.create())));return this.#e(t)}or(e){if(e.length===0)throw new m("or() requires at least one filter factory",{op:"or"});let t=new a("or",e.map(r=>r(a.create())));return this.#e(t)}clone(){return new a(this.op,this.children.map(e=>e instanceof i?new i(e.field,e.op,structuredClone(e.value)):e.clone()))}static create(){return new a}};function V(a,e,t){let r=[];t.aggregates.length===0&&r.push({cause:"At least one aggregator step is required"});let c=new Set;for(let s of t.aggregates)c.has(s.alias)&&r.push({alias:s.alias,cause:`Duplicate alias "${s.alias}"`}),c.add(s.alias),e.aggregateOps.includes(s.fn)||r.push({alias:s.alias,cause:`Undeclared aggregate op "${s.fn}"`});let l=a.fields,n=new Set(Object.keys(l));for(let s of t.groupBy)n.has(s)||r.push({field:s,cause:`Unknown groupBy field "${s}" on schema "${a.name}"`}),c.has(s)&&r.push({alias:s,cause:`Alias "${s}" collides with groupBy field name`});if(r.length>0)throw new f("aggregate",a.name,"aggregate",r);if(t.where&&E(a,t.where),t.having){let h=function(d){if(d instanceof i)s.has(d.field)||u.push({field:d.field,cause:`Unknown having field "${d.field}" \u2014 must be an aggregator alias or groupBy field`});else if(d instanceof g)for(let U of d.children)h(U)};var o=h;let s=new Set([...c,...t.groupBy]),u=[];for(let d of t.having.children)h(d);if(u.length>0)throw new f("aggregate",a.name,"aggregate",u)}}function E(a,e){let t=a.fields,r=new Set(Object.keys(t)),c=[];function l(n){if(n instanceof i)r.has(n.field)||c.push({field:n.field,cause:`Unknown field "${n.field}" on schema "${a.name}"`});else if(n instanceof g)for(let o of n.children)l(o)}for(let n of e.children)l(n);if(c.length>0)throw new f("validation",a.name,"filter",c.map(n=>({field:n.field,cause:n.cause})))}var q=class{queryableOps=[];updateOps=[];aggregateOps=[];supportedFieldTypes=[];onFatalError(e){let t=e instanceof m?e:new m("OrmAdapter fatal error",{},e);x.crash(t)}constructor(){let e=this;typeof e.connect=="function"&&x.on("start",()=>e.connect(),{class:this.constructor}),typeof e.disconnect=="function"&&x.on("close",()=>e.disconnect(),{class:this.constructor})}use(e,t){let r=this,c=async function*(){},l={findMany:(n,o)=>r.findMany?.(e,t,n,o)??Promise.resolve([]),iterateMany:(n,o)=>r.iterateMany?.(e,t,n,o)??c(),findOne:async n=>(await l.findMany(n,{limit:1}))[0]??null,count:n=>r.count?.(e,t,n)??Promise.reject(new Error("count not implemented")),createOne:async n=>(await l.createMany([n]))[0],createMany:n=>r.createMany?.(e,t,n)??Promise.resolve([]),updateMany:(n,o)=>r.updateMany?.(e,t,n,o)??Promise.resolve([]),updateOne:async(n,o)=>{let s=await l.findOne(n);if(!s)return null;let u=e.pkField.name,h=g.create().eq(u,s[u]);return(await l.updateMany(h,o))[0]??null},upsertOne:(n,o,s)=>r.upsertOne?.(e,t,n,o,s)??Promise.reject(new Error("upsertOne not implemented")),deleteOne:async n=>{let o=await l.findOne(n);if(!o)return null;let s=e.pkField.name;if(r.deleteByPk)await r.deleteByPk(e,t,o[s]);else if(r.deleteMany){let u=g.create().eq(s,o[s]);await r.deleteMany(e,t,u)}return o},deleteMany:n=>r.deleteMany?.(e,t,n)??Promise.resolve([]),raw:(...n)=>r.raw?.(e,t,...n)??Promise.reject(new Error("raw not implemented")),aggregate:n=>r.aggregate?.(e,t,n)??Promise.reject(new Error("aggregate not implemented")),aggregateOps:r.aggregateOps??[]};return l}};var y=class{constructor(e){this.values=e}kind="set"},w=class{constructor(e,t){this.field=e;this.value=t}kind="inc"},F=class{constructor(e,t){this.field=e;this.value=t}kind="mul"},S=class{constructor(e,t){this.field=e;this.value=t}kind="min"},v=class{constructor(e,t){this.field=e;this.value=t}kind="max"},k=class{constructor(e){this.field=e}kind="unset"},A=class{constructor(e,t){this.field=e;this.value=t}kind="push"},b=class{constructor(e,t){this.field=e;this.value=t}kind="pull"},B=class{constructor(e,t){this.field=e;this.value=t}kind="patch"};function Q(a){return a instanceof y||a instanceof w||a instanceof F||a instanceof S||a instanceof v||a instanceof k||a instanceof A||a instanceof b||a instanceof B}function z(a){return new y(a)}function J(a,e){return new w(p(a),e)}function X(a,e){return new F(p(a),e)}function Y(a,e){return new S(p(a),e)}function Z(a,e){return new v(p(a),e)}function ee(a){return new k(p(a))}function te(a,e){return new A(p(a),e)}function ae(a,e){return new b(p(a),e)}function ne(a,e){return new B(p(a),e)}function re(a){return a instanceof y?Object.keys(a.values):[a.field]}function se(a){let e={};for(let t of a)t instanceof y?Object.assign(e,t.values):e[t.field]=t;return e}export{f as a,O as b,p as c,T as d,P as e,i as f,g,V as h,E as i,q as j,y as k,w as l,F as m,S as n,v as o,k as p,A as q,b as r,B as s,Q as t,z as u,J as v,X as w,Y as x,Z as y,ee as z,te as A,ae as B,ne as C,re as D,se as E};
|
|
2
|
+
//# sourceMappingURL=chunk-WHIWTP2Z.min.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/orm/errors/validation.ts","../../src/orm/fields.ts","../../src/orm/filter.ts","../../src/orm/orm-adapter.ts","../../src/orm/updates.ts"],"sourcesContent":["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 { 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 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 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","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"],"mappings":"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","names":["OrmValidationError","EquippedError","kind","schema","operation","failures","Field","name","path","toFieldName","field","SchemaField","pipe","opts","ComputedField","deps","compute","Filter","field","op","value","toFieldName","FilterGroup","_FilterGroup","children","#withChild","child","facFns","EquippedError","group","fn","c","assertNormalisedAggregate","schema","adapter","spec","failures","seenAliases","agg","allFields","fieldNames","OrmValidationError","assertNormalisedFilter","walkHaving","node","validHavingFields","havingErrors","errors","walk","e","OrmAdapter","err","wrapped","EquippedError","Instance","self","schema","config","emptyIterator","use","filter","opts","d","match","pk","pkFilter","FilterGroup","create","ops","row","args","spec","SetOp","values","IncOp","field","value","MulOp","MinOp","MaxOp","UnsetOp","PushOp","PullOp","PatchOp","isUpdateOp","v","set","inc","toFieldName","mul","min","max","unset","push","pull","patch","opTouchedFields","op","flattenOps","ops","data"]}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import {
|
|
2
|
+
KafkaEventBus
|
|
3
|
+
} from "./chunk-I4BB436E.mjs";
|
|
4
|
+
import {
|
|
5
|
+
Instance
|
|
6
|
+
} from "./chunk-2TCFNKRZ.mjs";
|
|
7
|
+
|
|
8
|
+
// src/dbs/adapters/base/db.ts
|
|
9
|
+
var Db = class {
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
}
|
|
13
|
+
getScopedDb(db) {
|
|
14
|
+
return Instance.get().getScopedName(db).replaceAll(".", "-");
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// src/dbs/adapters/base/types.ts
|
|
19
|
+
import { v } from "valleyed";
|
|
20
|
+
var dbChangeConfigPipe = () => v.object({
|
|
21
|
+
debeziumUrl: v.string(),
|
|
22
|
+
eventBus: v.instanceOf(KafkaEventBus)
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// src/dbs/pipes.ts
|
|
26
|
+
import { v as v2 } from "valleyed";
|
|
27
|
+
var QueryKeys = /* @__PURE__ */ ((QueryKeys2) => {
|
|
28
|
+
QueryKeys2["and"] = "and";
|
|
29
|
+
QueryKeys2["or"] = "or";
|
|
30
|
+
return QueryKeys2;
|
|
31
|
+
})(QueryKeys || {});
|
|
32
|
+
var Conditions = /* @__PURE__ */ ((Conditions2) => {
|
|
33
|
+
Conditions2["lt"] = "lt";
|
|
34
|
+
Conditions2["lte"] = "lte";
|
|
35
|
+
Conditions2["gt"] = "gt";
|
|
36
|
+
Conditions2["gte"] = "gte";
|
|
37
|
+
Conditions2["eq"] = "eq";
|
|
38
|
+
Conditions2["ne"] = "ne";
|
|
39
|
+
Conditions2["in"] = "in";
|
|
40
|
+
Conditions2["nin"] = "nin";
|
|
41
|
+
return Conditions2;
|
|
42
|
+
})(Conditions || {});
|
|
43
|
+
var queryKeys = v2.catch(v2.defaults(v2.in(["and" /* and */, "or" /* or */]), "and" /* and */), "and" /* and */);
|
|
44
|
+
var queryWhere = v2.object({
|
|
45
|
+
field: v2.string(),
|
|
46
|
+
value: v2.any(),
|
|
47
|
+
// eslint-disable-next-line promise/valid-params -- valleyed v.catch(schema, fallback) is not Promise.prototype.catch
|
|
48
|
+
condition: v2.catch(v2.defaults(v2.in(Object.values(Conditions)), "eq" /* eq */), "eq" /* eq */)
|
|
49
|
+
});
|
|
50
|
+
var queryWhereBlock = v2.recursive(
|
|
51
|
+
() => v2.discriminate((d) => Object.values(QueryKeys).includes(d.condition) ? "block" : "regular", {
|
|
52
|
+
block: v2.object({
|
|
53
|
+
condition: queryKeys,
|
|
54
|
+
value: v2.array(queryWhereBlock)
|
|
55
|
+
}),
|
|
56
|
+
regular: queryWhere
|
|
57
|
+
}),
|
|
58
|
+
"QueryWhereBlock"
|
|
59
|
+
);
|
|
60
|
+
var queryWhereClause = v2.defaults(v2.array(queryWhereBlock), []);
|
|
61
|
+
function queryParamsPipe() {
|
|
62
|
+
return v2.meta(
|
|
63
|
+
v2.object({
|
|
64
|
+
all: v2.defaults(v2.boolean(), false),
|
|
65
|
+
limit: v2.lazy(() => {
|
|
66
|
+
const pagLimit = Instance.get().settings.utils.paginationDefaultLimit;
|
|
67
|
+
return v2.catch(v2.defaults(v2.number().pipe(v2.lte(pagLimit)), pagLimit), pagLimit);
|
|
68
|
+
}),
|
|
69
|
+
// eslint-disable-next-line promise/valid-params -- valleyed v.catch(schema, fallback) is not Promise.prototype.catch
|
|
70
|
+
page: v2.catch(v2.defaults(v2.number().pipe(v2.gte(1)), 1), 1),
|
|
71
|
+
search: v2.defaults(
|
|
72
|
+
v2.nullish(
|
|
73
|
+
v2.object({
|
|
74
|
+
value: v2.string(),
|
|
75
|
+
fields: v2.array(v2.string())
|
|
76
|
+
})
|
|
77
|
+
),
|
|
78
|
+
null
|
|
79
|
+
),
|
|
80
|
+
sort: v2.defaults(
|
|
81
|
+
v2.array(
|
|
82
|
+
v2.object({
|
|
83
|
+
field: v2.string(),
|
|
84
|
+
desc: v2.defaults(v2.boolean(), false)
|
|
85
|
+
})
|
|
86
|
+
),
|
|
87
|
+
[]
|
|
88
|
+
),
|
|
89
|
+
whereType: queryKeys,
|
|
90
|
+
where: queryWhereClause,
|
|
91
|
+
select: v2.optional(v2.array(v2.string()))
|
|
92
|
+
}).pipe((p) => ({ ...p, auth: [], authType: "and" /* and */ })),
|
|
93
|
+
{ title: "Query Params", $refId: "QueryParams" }
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
function queryResultsPipe(model) {
|
|
97
|
+
return v2.object({
|
|
98
|
+
pages: v2.object({
|
|
99
|
+
current: v2.number(),
|
|
100
|
+
start: v2.number(),
|
|
101
|
+
last: v2.number(),
|
|
102
|
+
previous: v2.nullable(v2.number()),
|
|
103
|
+
next: v2.nullable(v2.number())
|
|
104
|
+
}),
|
|
105
|
+
docs: v2.object({
|
|
106
|
+
limit: v2.number(),
|
|
107
|
+
total: v2.number(),
|
|
108
|
+
count: v2.number()
|
|
109
|
+
}),
|
|
110
|
+
results: v2.array(model)
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
function wrapQueryParams(params) {
|
|
114
|
+
return v2.assert(queryParamsPipe(), params);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export {
|
|
118
|
+
Db,
|
|
119
|
+
dbChangeConfigPipe,
|
|
120
|
+
QueryKeys,
|
|
121
|
+
Conditions,
|
|
122
|
+
queryParamsPipe,
|
|
123
|
+
queryResultsPipe,
|
|
124
|
+
wrapQueryParams
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=chunk-YTHRK2PO.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/dbs/adapters/base/db.ts","../../src/dbs/adapters/base/types.ts","../../src/dbs/pipes.ts"],"sourcesContent":["import * as core from './core'\nimport type { DbConfig } from './types'\nimport { Instance } from '../../../instance'\n\nexport type TableOptions = { skipAudit?: boolean }\n\nexport abstract class Db<IdKey extends core.IdType> {\n\tconstructor(protected config: DbConfig) {}\n\n\tprotected getScopedDb(db: string) {\n\t\treturn Instance.get().getScopedName(db).replaceAll('.', '-')\n\t}\n\n\tabstract use<Model extends core.Model<IdKey>, Entity extends core.Entity>(\n\t\tconfig: core.Config<Model, Entity>,\n\t): core.Table<IdKey, Model, Entity>\n\n\tabstract session<T>(callback: () => Promise<T>): Promise<T>\n}\n","import { v, type PipeOutput } from 'valleyed'\n\nimport { KafkaEventBus } from '../../../events/adapters/kafka'\n\nexport const dbChangeConfigPipe = () =>\n\tv.object({\n\t\tdebeziumUrl: v.string(),\n\t\teventBus: v.instanceOf(KafkaEventBus as unknown as abstract new (...args: any[]) => KafkaEventBus),\n\t})\n\nexport type DbChangeConfig = PipeOutput<ReturnType<typeof dbChangeConfigPipe>>\n\nexport type DbConfig = {\n\tchanges?: DbChangeConfig\n}\n","import { type ConditionalObjectKeys, type Pipe, type PipeInput, type PipeOutput, v } from 'valleyed'\n\nimport { Instance } from '../instance'\nimport type { Select } from './adapters/base/core'\n\nexport enum QueryKeys {\n\tand = 'and',\n\tor = 'or',\n}\n\nexport enum Conditions {\n\tlt = 'lt',\n\tlte = 'lte',\n\tgt = 'gt',\n\tgte = 'gte',\n\teq = 'eq',\n\tne = 'ne',\n\tin = 'in',\n\tnin = 'nin',\n}\n\n// eslint-disable-next-line promise/valid-params -- valleyed v.catch(schema, fallback) is not Promise.prototype.catch\nconst queryKeys = v.catch(v.defaults(v.in([QueryKeys.and, QueryKeys.or]), QueryKeys.and), QueryKeys.and)\nconst queryWhere = v.object({\n\tfield: v.string(),\n\tvalue: v.any(),\n\t// eslint-disable-next-line promise/valid-params -- valleyed v.catch(schema, fallback) is not Promise.prototype.catch\n\tcondition: v.catch(v.defaults(v.in(Object.values(Conditions)), Conditions.eq), Conditions.eq),\n})\nconst queryWhereBlock = v.recursive(\n\t() =>\n\t\tv.discriminate((d) => (Object.values(QueryKeys).includes(d.condition as any) ? 'block' : 'regular'), {\n\t\t\tblock: v.object({\n\t\t\t\tcondition: queryKeys,\n\t\t\t\tvalue: v.array(queryWhereBlock),\n\t\t\t}),\n\t\t\tregular: queryWhere,\n\t\t}),\n\t'QueryWhereBlock',\n) as Pipe<\n\t| {\n\t\t\tcondition: PipeInput<typeof queryKeys>\n\t\t\tvalue: PipeInput<typeof queryWhere>[]\n\t }\n\t| PipeInput<typeof queryWhere>,\n\t| {\n\t\t\tcondition: PipeOutput<typeof queryKeys>\n\t\t\tvalue: PipeOutput<typeof queryWhere>[]\n\t }\n\t| PipeOutput<typeof queryWhere>\n>\n\nconst queryWhereClause = v.defaults(v.array(queryWhereBlock), [])\n\nexport function queryParamsPipe() {\n\treturn v.meta(\n\t\tv\n\t\t\t.object({\n\t\t\t\tall: v.defaults(v.boolean(), false),\n\t\t\t\tlimit: v.lazy(() => {\n\t\t\t\t\tconst pagLimit = Instance.get().settings.utils.paginationDefaultLimit\n\t\t\t\t\t// eslint-disable-next-line promise/valid-params -- valleyed v.catch(schema, fallback) is not Promise.prototype.catch\n\t\t\t\t\treturn v.catch(v.defaults(v.number().pipe(v.lte(pagLimit)), pagLimit), pagLimit)\n\t\t\t\t}),\n\t\t\t\t// eslint-disable-next-line promise/valid-params -- valleyed v.catch(schema, fallback) is not Promise.prototype.catch\n\t\t\t\tpage: v.catch(v.defaults(v.number().pipe(v.gte(1)), 1), 1),\n\t\t\t\tsearch: v.defaults(\n\t\t\t\t\tv.nullish(\n\t\t\t\t\t\tv.object({\n\t\t\t\t\t\t\tvalue: v.string(),\n\t\t\t\t\t\t\tfields: v.array(v.string()),\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t\tnull,\n\t\t\t\t),\n\t\t\t\tsort: v.defaults(\n\t\t\t\t\tv.array(\n\t\t\t\t\t\tv.object({\n\t\t\t\t\t\t\tfield: v.string(),\n\t\t\t\t\t\t\tdesc: v.defaults(v.boolean(), false),\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t\t[],\n\t\t\t\t),\n\t\t\t\twhereType: queryKeys,\n\t\t\t\twhere: queryWhereClause,\n\t\t\t\tselect: v.optional(v.array(v.string())),\n\t\t\t})\n\t\t\t.pipe((p) => ({ ...p, auth: <(typeof p)['where']>[], authType: QueryKeys.and })),\n\t\t{ title: 'Query Params', $refId: 'QueryParams' },\n\t)\n}\n\nexport function queryResultsPipe<T>(model: Pipe<any, T>) {\n\treturn v.object({\n\t\tpages: v.object({\n\t\t\tcurrent: v.number(),\n\t\t\tstart: v.number(),\n\t\t\tlast: v.number(),\n\t\t\tprevious: v.nullable(v.number()),\n\t\t\tnext: v.nullable(v.number()),\n\t\t}),\n\t\tdocs: v.object({\n\t\t\tlimit: v.number(),\n\t\t\ttotal: v.number(),\n\t\t\tcount: v.number(),\n\t\t}),\n\t\tresults: v.array(model),\n\t})\n}\n\nexport function wrapQueryParams(params: QueryParamsInput): QueryParamsBase {\n\treturn v.assert(queryParamsPipe(), params)\n}\n\nexport type QueryParamsBase = PipeOutput<ReturnType<typeof queryParamsPipe>>\nexport type QueryParams<T, S extends Select<T> | undefined = undefined> = Omit<QueryParamsBase, 'select'> & {\n\tselect?: S extends undefined ? QueryParamsBase['select'] : S\n}\nexport type QueryParamsInput = ConditionalObjectKeys<PipeInput<ReturnType<typeof queryParamsPipe>>>\nexport type QueryWhereClause = QueryParamsBase['where'][number]\nexport type QueryWhere = Extract<QueryWhereClause, { field: string }>\nexport type QueryWhereBlock = Exclude<QueryWhereClause, { field: string }>\nexport type QueryResults<T> = PipeOutput<ReturnType<typeof queryResultsPipe<T>>>\n"],"mappings":"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","names":["v","QueryKeys","Conditions","v"]}
|