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/adapters/mongodb/index.ts","../../../../../src/orm/adapters/mongodb/query.ts"],"sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks'\n\nimport { MongoClient, type ClientSession, type MongoClientOptions, type OptionalUnlessRequiredId } from 'mongodb'\nimport { v, type PipeOutput } from 'valleyed'\n\nimport { compileMongoAggregate, compileMongoFilter, compileMongoOps, compileMongoQuery, compileMongoUpdate } from './query'\nimport { EquippedError } from '../../../errors'\nimport { configurable } from '../../../utilities/configurable'\nimport type { FilterGroup } from '../../filter'\nimport type { DiscoveredSchema } from '../../migrations/introspection-types'\nimport type { AddIndexChange, DropIndexChange } from '../../migrations/types'\nimport { OrmAdapter, type AggregateSpec } from '../../orm-adapter'\nimport type { IterationQueryOptions, QueryOptions } from '../../query-options'\nimport type { AnySchema } from '../../schema'\nimport type { AnyUpdateOp } from '../../updates'\n\nconst mongoSchemaConfigPipe = () => v.object({ db: v.string(), col: v.string() })\nexport type MongoDbRepoConfig = PipeOutput<ReturnType<typeof mongoSchemaConfigPipe>>\n\nconst mongoConnectionPipe = () =>\n\tv.object({\n\t\turi: v.string(),\n\t})\n\nconst MIGRATION_TRACKER_COLLECTION = 'equipped_migrations'\n\nexport class MongoDbAdapter extends configurable(mongoConnectionPipe, OrmAdapter) {\n\treadonly schemaConfigPipe = mongoSchemaConfigPipe()\n\n\treadonly queryableOps = ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'notIn', 'like', 'exists', 'notExists', 'contains', 'notContains'] as const\n\treadonly updateOps = ['set', 'inc', 'mul', 'min', 'max', 'unset', 'push', 'pull', 'patch'] as const\n\treadonly aggregateOps = ['count', 'countDistinct', 'sum', 'avg', 'min', 'max'] as const\n\treadonly supportedFieldTypes = ['string', 'number', 'boolean', 'null', 'object', 'array', 'date'] as const\n\n\treadonly client: MongoClient\n\treadonly #sessionStore = new AsyncLocalStorage<ClientSession | undefined>()\n\n\tprotected constructor(config: typeof MongoDbAdapter.Config, options?: MongoClientOptions) {\n\t\tsuper(config)\n\t\tthis.client = new MongoClient(config.uri, {\n\t\t\t...options,\n\t\t\tignoreUndefined: true,\n\t\t})\n\t}\n\n\t#getCollection(schemaCfg: MongoDbRepoConfig) {\n\t\treturn this.client.db(schemaCfg.db).collection(schemaCfg.col)\n\t}\n\n\tasync connect() {\n\t\ttry {\n\t\t\tawait this.client.connect()\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError('Failed to connect MongoDB client', { adapter: 'mongodb' }, error)\n\t\t}\n\t}\n\n\tasync disconnect() {\n\t\ttry {\n\t\t\tawait this.client.close()\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError('Failed to disconnect MongoDB client', { adapter: 'mongodb' }, error)\n\t\t}\n\t}\n\n\tasync findByPk(schema: AnySchema, config: unknown, pk: unknown) {\n\t\tconst schemaCfg = config as MongoDbRepoConfig\n\t\ttry {\n\t\t\tconst pkName = schema.pkField.name\n\t\t\tconst collection = this.#getCollection(schemaCfg)\n\t\t\tconst doc = await collection.findOne(\n\t\t\t\t{ [pkName]: pk },\n\t\t\t\t{ session: this.#sessionStore.getStore() },\n\t\t\t)\n\t\t\treturn doc as Record<string, unknown> | null\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'MongoDB findByPk failed',\n\t\t\t\t{ adapter: 'mongodb', operation: 'findByPk', collection: schemaCfg.col },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync createMany(_schema: AnySchema, config: unknown, data: Record<string, unknown>[]) {\n\t\tconst schemaCfg = config as MongoDbRepoConfig\n\t\ttry {\n\t\t\tconst collection = this.#getCollection(schemaCfg)\n\t\t\tconst docs = data.map((d) => d as OptionalUnlessRequiredId<any>)\n\t\t\tawait collection.insertMany(docs, { session: this.#sessionStore.getStore() })\n\t\t\treturn data\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'MongoDB createMany failed',\n\t\t\t\t{ adapter: 'mongodb', operation: 'createMany', collection: schemaCfg.col },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync updateByPk(schema: AnySchema, config: unknown, pk: unknown, ops: AnyUpdateOp[]) {\n\t\tconst schemaCfg = config as MongoDbRepoConfig\n\t\ttry {\n\t\t\tconst pkName = schema.pkField.name\n\t\t\tconst collection = this.#getCollection(schemaCfg)\n\t\t\tconst update = compileMongoOps(ops)\n\t\t\tif (Object.keys(update).length === 0) {\n\t\t\t\treturn await collection.findOne({ [pkName]: pk }, { session: this.#sessionStore.getStore() }) as Record<string, unknown> | null\n\t\t\t}\n\t\t\treturn await collection.findOneAndUpdate(\n\t\t\t\t{ [pkName]: pk },\n\t\t\t\tupdate,\n\t\t\t\t{ returnDocument: 'after', session: this.#sessionStore.getStore() },\n\t\t\t) as Record<string, unknown> | null\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'MongoDB updateByPk failed',\n\t\t\t\t{ adapter: 'mongodb', operation: 'updateByPk', collection: schemaCfg.col },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync deleteByPk(schema: AnySchema, config: unknown, pk: unknown) {\n\t\tconst schemaCfg = config as MongoDbRepoConfig\n\t\ttry {\n\t\t\tconst pkName = schema.pkField.name\n\t\t\tconst collection = this.#getCollection(schemaCfg)\n\t\t\treturn await collection.findOneAndDelete(\n\t\t\t\t{ [pkName]: pk },\n\t\t\t\t{ session: this.#sessionStore.getStore() },\n\t\t\t) as Record<string, unknown> | null\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'MongoDB deleteByPk failed',\n\t\t\t\t{ adapter: 'mongodb', operation: 'deleteByPk', collection: schemaCfg.col },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync raw(_schema: AnySchema, config: unknown, pipeline: Record<string, unknown>[]) {\n\t\tconst schemaCfg = config as MongoDbRepoConfig\n\t\ttry {\n\t\t\tconst collection = this.#getCollection(schemaCfg)\n\t\t\tconst result = await collection.aggregate(pipeline, { session: this.#sessionStore.getStore() }).toArray()\n\t\t\treturn result\n\t\t} catch (error) {\n\t\t\tif (error instanceof EquippedError) throw error\n\t\t\tthrow new EquippedError(\n\t\t\t\t'MongoDB raw failed',\n\t\t\t\t{ adapter: 'mongodb', operation: 'raw', collection: schemaCfg.col },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync aggregate(schema: AnySchema, config: unknown, spec: AggregateSpec): Promise<Array<Record<string, unknown>>> {\n\t\tconst schemaCfg = config as MongoDbRepoConfig\n\t\ttry {\n\t\t\tconst pk = schema.pkField.name\n\t\t\tconst collection = this.#getCollection(schemaCfg)\n\t\t\tconst pipeline = compileMongoAggregate(spec, pk)\n\t\t\tconst result = await collection.aggregate(pipeline, { session: this.#sessionStore.getStore() }).toArray()\n\t\t\treturn result as Array<Record<string, unknown>>\n\t\t} catch (error) {\n\t\t\tif (error instanceof EquippedError) throw error\n\t\t\tthrow new EquippedError(\n\t\t\t\t'MongoDB aggregate failed',\n\t\t\t\t{ adapter: 'mongodb', operation: 'aggregate', collection: schemaCfg.col },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync findMany(schema: AnySchema, config: unknown, filter: FilterGroup, options?: QueryOptions) {\n\t\tconst schemaCfg = config as MongoDbRepoConfig\n\t\ttry {\n\t\t\tconst pk = schema.pkField.name\n\t\t\tconst { filter: mongoFilter, sort, limit, skip, projection } = compileMongoQuery(filter, options, pk)\n\t\t\tconst collection = this.#getCollection(schemaCfg)\n\n\t\t\tlet cursor = collection.find(mongoFilter, {\n\t\t\t\tsession: this.#sessionStore.getStore(),\n\t\t\t\tprojection,\n\t\t\t})\n\t\t\tif (sort) cursor = cursor.sort(sort)\n\t\t\tif (limit) cursor = cursor.limit(limit)\n\t\t\tif (skip) cursor = cursor.skip(skip)\n\n\t\t\treturn await cursor.toArray()\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'MongoDB findMany failed',\n\t\t\t\t{ adapter: 'mongodb', operation: 'findMany', collection: schemaCfg.col },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync count(schema: AnySchema, config: unknown, filter: FilterGroup) {\n\t\tconst schemaCfg = config as MongoDbRepoConfig\n\t\ttry {\n\t\t\tconst pk = schema.pkField.name\n\t\t\tconst collection = this.#getCollection(schemaCfg)\n\t\t\treturn await collection.countDocuments(compileMongoFilter(filter, pk), { session: this.#sessionStore.getStore() })\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'MongoDB count failed',\n\t\t\t\t{ adapter: 'mongodb', operation: 'count', collection: schemaCfg.col },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync *iterateMany(schema: AnySchema, config: unknown, filter: FilterGroup, options?: IterationQueryOptions) {\n\t\tconst schemaCfg = config as MongoDbRepoConfig\n\t\tlet cursor: any\n\t\ttry {\n\t\t\tconst pk = schema.pkField.name\n\t\t\tconst { filter: mongoFilter, sort, limit, skip, projection } = compileMongoQuery(filter, options, pk)\n\t\t\tconst collection = this.#getCollection(schemaCfg)\n\n\t\t\tcursor = collection.find(mongoFilter, {\n\t\t\t\tsession: this.#sessionStore.getStore(),\n\t\t\t\tprojection,\n\t\t\t})\n\t\t\tif (sort) cursor = cursor.sort(sort)\n\t\t\tif (limit) cursor = cursor.limit(limit)\n\t\t\tif (skip) cursor = cursor.skip(skip)\n\t\t\tif (options?.batchSize !== undefined) cursor = cursor.batchSize(options.batchSize)\n\n\t\t\tfor await (const row of cursor) {\n\t\t\t\tyield row as Record<string, unknown>\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'MongoDB iterateMany failed',\n\t\t\t\t{ adapter: 'mongodb', operation: 'iterateMany', collection: schemaCfg.col },\n\t\t\t\terror,\n\t\t\t)\n\t\t} finally {\n\t\t\tawait cursor?.close()\n\t\t}\n\t}\n\n\tasync updateMany(schema: AnySchema, config: unknown, filter: FilterGroup, data: Record<string, unknown>) {\n\t\tconst schemaCfg = config as MongoDbRepoConfig\n\t\ttry {\n\t\t\tconst pk = schema.pkField.name\n\t\t\tconst collection = this.#getCollection(schemaCfg)\n\t\t\tconst session = this.#sessionStore.getStore()\n\t\t\tconst mongoFilter = compileMongoFilter(filter, pk)\n\n\t\t\tconst matchingDocs = await collection.find(mongoFilter, { session, projection: { [pk]: 1 } }).toArray()\n\t\t\tconst ids = matchingDocs.map((d) => d[pk])\n\t\t\tconst idFilter = { [pk]: { $in: ids } }\n\n\t\t\tconst update = compileMongoUpdate(data)\n\t\t\tif (Object.keys(update).length > 0) {\n\t\t\t\tawait collection.updateMany(idFilter, update, { session })\n\t\t\t}\n\n\t\t\treturn await collection.find({ [pk]: { $in: ids } }, { session }).toArray()\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'MongoDB updateMany failed',\n\t\t\t\t{ adapter: 'mongodb', operation: 'updateMany', collection: schemaCfg.col },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync deleteMany(schema: AnySchema, config: unknown, filter: FilterGroup) {\n\t\tconst schemaCfg = config as MongoDbRepoConfig\n\t\ttry {\n\t\t\tconst pk = schema.pkField.name\n\t\t\tconst collection = this.#getCollection(schemaCfg)\n\t\t\tconst session = this.#sessionStore.getStore()\n\t\t\tconst mongoFilter = compileMongoFilter(filter, pk)\n\n\t\t\tconst docs = await collection.find(mongoFilter, { session }).toArray()\n\t\t\tif (docs.length > 0) {\n\t\t\t\tawait collection.deleteMany(mongoFilter, { session })\n\t\t\t}\n\t\t\treturn docs\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'MongoDB deleteMany failed',\n\t\t\t\t{ adapter: 'mongodb', operation: 'deleteMany', collection: schemaCfg.col },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync upsertOne(schema: AnySchema, config: unknown, filter: FilterGroup, create: Record<string, unknown>, ops: AnyUpdateOp[]) {\n\t\tconst schemaCfg = config as MongoDbRepoConfig\n\t\ttry {\n\t\t\tconst pk = schema.pkField.name\n\t\t\tconst collection = this.#getCollection(schemaCfg)\n\t\t\tconst mongoFilter = compileMongoFilter(filter, pk)\n\n\t\t\tconst updateDoc = compileMongoOps(ops)\n\t\t\tconst doc = await collection.findOneAndUpdate(\n\t\t\t\tmongoFilter,\n\t\t\t\t{\n\t\t\t\t\t...updateDoc,\n\t\t\t\t\t$setOnInsert: create,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\treturnDocument: 'after',\n\t\t\t\t\tsession: this.#sessionStore.getStore(),\n\t\t\t\t\tupsert: true,\n\t\t\t\t},\n\t\t\t)\n\n\t\t\treturn doc as Record<string, unknown>\n\t\t} catch (error) {\n\t\t\tthrow new EquippedError(\n\t\t\t\t'MongoDB upsertOne failed',\n\t\t\t\t{ adapter: 'mongodb', operation: 'upsertOne', collection: schemaCfg.col },\n\t\t\t\terror,\n\t\t\t)\n\t\t}\n\t}\n\n\tasync session<T>(fn: () => Promise<T>): Promise<T> {\n\t\tif (this.#sessionStore.getStore()) return fn()\n\t\ttry {\n\t\t\tconst session = await this.client.startSession()\n\t\t\ttry {\n\t\t\t\treturn await session.withTransaction(async () => this.#sessionStore.run(session, fn))\n\t\t\t} finally {\n\t\t\t\tawait session.endSession()\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof EquippedError) throw error\n\t\t\tthrow new EquippedError('MongoDB session failed', { adapter: 'mongodb', operation: 'session' }, error)\n\t\t}\n\t}\n\n\tasync loadMigrations(): Promise<{ id: string; appliedAt: number }[]> {\n\t\tconst db = this.client.db()\n\t\tconst docs = await db.collection(MIGRATION_TRACKER_COLLECTION).find({}).toArray()\n\t\treturn docs.map((d) => ({ id: String(d._id), appliedAt: d.appliedAt as number }))\n\t}\n\n\tasync recordMigration(id: string, appliedAt: number): Promise<void> {\n\t\tconst db = this.client.db()\n\t\tawait db.collection(MIGRATION_TRACKER_COLLECTION).insertOne({ _id: id as any, appliedAt })\n\t}\n\n\tasync applyAddIndex(change: AddIndexChange): Promise<void> {\n\t\tconst db = this.client.db()\n\t\tconst fields: Record<string, 1> = {}\n\t\tfor (const f of change.on) {\n\t\t\tfields[f] = 1\n\t\t}\n\t\tconst name = change.name ?? `${change.table}_${change.on.join('_')}_idx`\n\t\tawait db.collection(change.table).createIndex(fields, { unique: change.unique ?? false, name })\n\t}\n\n\tasync applyDropIndex(change: DropIndexChange): Promise<void> {\n\t\tconst db = this.client.db()\n\t\tconst collections = await db.listCollections().toArray()\n\t\tfor (const col of collections) {\n\t\t\tconst indexes = await db.collection(col.name).listIndexes().toArray()\n\t\t\tif (indexes.some((idx) => idx.name === change.name)) {\n\t\t\t\tawait db.collection(col.name).dropIndex(change.name)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tasync introspect(): Promise<DiscoveredSchema[]> {\n\t\tconst db = this.client.db()\n\t\tconst collections = await db.listCollections().toArray()\n\t\tconst schemas: DiscoveredSchema[] = []\n\t\tfor (const col of collections) {\n\t\t\tif (col.name === MIGRATION_TRACKER_COLLECTION) continue\n\t\t\tconst rawIndexes = await db.collection(col.name).listIndexes().toArray()\n\t\t\tconst indexes = rawIndexes\n\t\t\t\t.filter((idx) => idx.name !== '_id_')\n\t\t\t\t.map((idx) => ({\n\t\t\t\t\tname: idx.name as string,\n\t\t\t\t\ton: Object.keys(idx.key as Record<string, unknown>) as ReadonlyArray<string>,\n\t\t\t\t\tunique: !!(idx.unique),\n\t\t\t\t}))\n\t\t\tschemas.push({\n\t\t\t\tname: col.name,\n\t\t\t\tpk: undefined,\n\t\t\t\tfields: [],\n\t\t\t\tindexes,\n\t\t\t\tforeignKeys: [],\n\t\t\t})\n\t\t}\n\t\treturn schemas\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf } = import.meta.vitest\n\n\tdescribe('MongoDbAdapter: class-via-configurable shape', () => {\n\t\ttest('MongoDbAdapter.create validates connection config via pipe', () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\texpect(adapter).toBeInstanceOf(MongoDbAdapter)\n\t\t\texpect(adapter.client).toBeInstanceOf(MongoClient)\n\t\t})\n\n\t\ttest('MongoDbAdapter.create rejects invalid config', () => {\n\t\t\texpect(() => MongoDbAdapter.create({} as any)).toThrow()\n\t\t\texpect(() => MongoDbAdapter.create({ uri: 123 } as any)).toThrow()\n\t\t})\n\n\t\ttest('readonly schemaConfigPipe declared with { db, col } shape', () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\texpect(adapter.schemaConfigPipe).toBeDefined()\n\t\t})\n\n\t\ttest('capability declarations use as const', () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\n\t\t\texpect(adapter.supportedFieldTypes).toEqual([\n\t\t\t\t'string', 'number', 'boolean', 'null', 'object', 'array', 'date',\n\t\t\t])\n\t\t\texpect(adapter.queryableOps).toEqual([\n\t\t\t\t'eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'notIn', 'like', 'exists', 'notExists', 'contains', 'notContains',\n\t\t\t])\n\t\t\texpect(adapter.updateOps).toEqual([\n\t\t\t\t'set', 'inc', 'mul', 'min', 'max', 'unset', 'push', 'pull', 'patch',\n\t\t\t])\n\t\t\texpect(adapter.aggregateOps).toEqual([\n\t\t\t\t'count', 'countDistinct', 'sum', 'avg', 'min', 'max',\n\t\t\t])\n\t\t})\n\n\t\ttest('underlying MongoClient exposed as readonly instance field', () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\texpect(adapter.client).toBeInstanceOf(MongoClient)\n\t\t})\n\n\t\ttest('adapter.use returns OrmUse-shaped object', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { v } = await import('valleyed')\n\t\t\tconst schema = Schema.from('test').pk('id', v.string(), () => 'x').build()\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\tconst use = adapter.use(schema, { db: 'testdb', col: 'testcol' })\n\n\t\t\texpect(use.findMany).toBeTypeOf('function')\n\t\t\texpect(use.iterateMany).toBeTypeOf('function')\n\t\t\texpect(use.findOne).toBeTypeOf('function')\n\t\t\texpect(use.count).toBeTypeOf('function')\n\t\t\texpect(use.createOne).toBeTypeOf('function')\n\t\t\texpect(use.createMany).toBeTypeOf('function')\n\t\t\texpect(use.updateMany).toBeTypeOf('function')\n\t\t\texpect(use.updateOne).toBeTypeOf('function')\n\t\t\texpect(use.upsertOne).toBeTypeOf('function')\n\t\t\texpect(use.deleteOne).toBeTypeOf('function')\n\t\t\texpect(use.deleteMany).toBeTypeOf('function')\n\t\t\texpect(use.raw).toBeTypeOf('function')\n\t\t})\n\n\t\ttest('type-level: adapter declares all 9 canonical update ops', () => {\n\t\t\tconst _adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\ttype Ops = typeof _adapter.updateOps\n\t\t\texpectTypeOf<Ops>().toEqualTypeOf<\n\t\t\t\treadonly ['set', 'inc', 'mul', 'min', 'max', 'unset', 'push', 'pull', 'patch']\n\t\t\t>()\n\t\t})\n\n\t\ttest('type-level: adapter declares all 7 field types', () => {\n\t\t\tconst _adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\ttype Types = typeof _adapter.supportedFieldTypes\n\t\t\texpectTypeOf<Types>().toEqualTypeOf<\n\t\t\t\treadonly ['string', 'number', 'boolean', 'null', 'object', 'array', 'date']\n\t\t\t>()\n\t\t})\n\n\t\ttest('type-level: adapter declares all 13 queryable ops', () => {\n\t\t\tconst _adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\ttype Ops = typeof _adapter.queryableOps\n\t\t\texpectTypeOf<Ops>().toEqualTypeOf<\n\t\t\t\treadonly ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'notIn', 'like', 'exists', 'notExists', 'contains', 'notContains']\n\t\t\t>()\n\t\t})\n\n\t\ttest('type-level: Repo.from with MongoDbAdapter enables all builder methods', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { v } = await import('valleyed')\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\tconst repo = Repo.from(adapter).resolve(() => ({ db: 'test', col: 'test' })).build()\n\t\t\tconst _TestSchema = Schema.from('test').pk('id', v.string(), () => 'x').build()\n\n\t\t\tconst _one = repo.on(_TestSchema).one()\n\t\t\tconst _all = repo.on(_TestSchema).all()\n\t\t\tconst _ref = repo.on(_TestSchema)\n\t\t\texpectTypeOf(_one.create).toBeFunction()\n\t\t\texpectTypeOf(_one.find).toBeFunction()\n\t\t\texpectTypeOf(_one.update).toBeFunction()\n\t\t\texpectTypeOf(_one.delete).toBeFunction()\n\t\t\texpectTypeOf(_one.upsert).toBeFunction()\n\t\t\texpectTypeOf(_all.create).toBeFunction()\n\t\t\texpectTypeOf(_all.find).toBeFunction()\n\t\t\texpectTypeOf(_all.count).toBeFunction()\n\t\t\texpectTypeOf(_all.update).toBeFunction()\n\t\t\texpectTypeOf(_all.delete).toBeFunction()\n\t\t\texpectTypeOf(_ref.raw).toBeFunction()\n\t\t\texpectTypeOf(repo.session).toBeFunction()\n\t\t})\n\n\t\ttest('type-level: raw arg-tuple infers (pipeline: Record<string, unknown>[]) from MongoDbAdapter', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { v } = await import('valleyed')\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\tconst repo = Repo.from(adapter).resolve(() => ({ db: 'test', col: 'test' })).build()\n\t\t\tconst _TestSchema = Schema.from('test').pk('id', v.string(), () => 'x').build()\n\t\t\tconst _ref = repo.on(_TestSchema)\n\n\t\t\texpectTypeOf(_ref.raw).parameters.toEqualTypeOf<[pipeline: Record<string, unknown>[]]>()\n\t\t})\n\n\t\ttest('type-level: per-call <T> override narrows MongoDbAdapter raw return type', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { v } = await import('valleyed')\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\tconst repo = Repo.from(adapter).resolve(() => ({ db: 'test', col: 'test' })).build()\n\t\t\tconst _TestSchema = Schema.from('test').pk('id', v.string(), () => 'x').build()\n\t\t\tconst _ref = repo.on(_TestSchema)\n\n\t\t\texpectTypeOf(_ref.raw<{ total: number }[]>).returns.toEqualTypeOf<Promise<{ total: number }[]>>()\n\t\t})\n\n\t\ttest('count forwards compiled filter to collection.countDocuments', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { v } = await import('valleyed')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\t\t\tconst schema = Schema.from('mongo_count').pk('_id', v.string(), () => 'x').field('name', v.string()).build()\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\tlet capturedFilter: unknown\n\t\t\t;(adapter.client as any).db = () => ({\n\t\t\t\tcollection: () => ({\n\t\t\t\t\tcountDocuments: async (filter: unknown, _opts: unknown) => {\n\t\t\t\t\t\tcapturedFilter = filter\n\t\t\t\t\t\treturn 7\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t})\n\n\t\t\tconst result = await adapter.count(schema, { db: 'testdb', col: 'things' }, FilterGroup.create().eq('name', 'Alice'))\n\t\t\texpect(capturedFilter).toEqual({ name: { $eq: 'Alice' } })\n\t\t\texpect(result).toBe(7)\n\t\t})\n\n\t\ttest('raw forwards pipeline to collection.aggregate at runtime', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { v } = await import('valleyed')\n\t\t\tconst schema = Schema.from('mongo_raw').pk('id', v.string(), () => 'x').build()\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\tlet capturedPipeline: unknown\n\t\t\tconst mockResults = [{ total: 42 }]\n\t\t\t;(adapter.client as any).db = () => ({\n\t\t\t\tcollection: () => ({\n\t\t\t\t\taggregate: (pipeline: unknown, _opts: unknown) => {\n\t\t\t\t\t\tcapturedPipeline = pipeline\n\t\t\t\t\t\treturn { toArray: async () => mockResults }\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t})\n\t\t\tconst result = await adapter.use(schema, { db: 'testdb', col: 'things' }).raw([{ $count: 'total' }])\n\t\t\texpect(capturedPipeline).toEqual([{ $count: 'total' }])\n\t\t\texpect(result).toEqual(mockResults)\n\t\t})\n\n\t\ttest('iterateMany forwards batchSize and closes cursor on early return', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { v } = await import('valleyed')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\t\t\tconst { OrderBy } = await import('../../query-options')\n\t\t\tconst schema = Schema.from('mongo_iter').pk('_id', v.string(), () => 'x').field('age', v.number()).build()\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\tlet capturedFindFilter: unknown\n\t\t\tlet capturedFindOptions: unknown\n\t\t\tlet capturedSort: unknown\n\t\t\tlet capturedLimit: unknown\n\t\t\tlet capturedSkip: unknown\n\t\t\tlet capturedBatchSize: unknown\n\t\t\tlet closeCalls = 0\n\t\t\tconst cursor = {\n\t\t\t\tsort(sort: unknown) {\n\t\t\t\t\tcapturedSort = sort\n\t\t\t\t\treturn this\n\t\t\t\t},\n\t\t\t\tlimit(limit: unknown) {\n\t\t\t\t\tcapturedLimit = limit\n\t\t\t\t\treturn this\n\t\t\t\t},\n\t\t\t\tskip(skip: unknown) {\n\t\t\t\t\tcapturedSkip = skip\n\t\t\t\t\treturn this\n\t\t\t\t},\n\t\t\t\tbatchSize(batchSize: unknown) {\n\t\t\t\t\tcapturedBatchSize = batchSize\n\t\t\t\t\treturn this\n\t\t\t\t},\n\t\t\t\tasync close() {\n\t\t\t\t\tcloseCalls += 1\n\t\t\t\t},\n\t\t\t\tasync *[Symbol.asyncIterator]() {\n\t\t\t\t\tyield { _id: 'u4', age: 50 }\n\t\t\t\t\tyield { _id: 'u3', age: 40 }\n\t\t\t\t},\n\t\t\t}\n\t\t\t;(adapter.client as any).db = () => ({\n\t\t\t\tcollection: () => ({\n\t\t\t\t\tfind: (filter: unknown, options: unknown) => {\n\t\t\t\t\t\tcapturedFindFilter = filter\n\t\t\t\t\t\tcapturedFindOptions = options\n\t\t\t\t\t\treturn cursor\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t})\n\n\t\t\tconst rows: Record<string, unknown>[] = []\n\t\t\tfor await (const row of adapter.use(schema, { db: 'testdb', col: 'people' }).iterateMany(FilterGroup.create().gt('age', 19), {\n\t\t\t\torderBy: [new OrderBy('age', 'desc')],\n\t\t\t\toffset: 1,\n\t\t\t\tlimit: 2,\n\t\t\t\tbatchSize: 25,\n\t\t\t})) {\n\t\t\t\trows.push(row)\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\texpect(capturedFindFilter).toEqual({ age: { $gt: 19 } })\n\t\t\texpect(capturedFindOptions).toEqual({ session: undefined, projection: undefined })\n\t\t\texpect(capturedSort).toEqual({ age: -1 })\n\t\t\texpect(capturedLimit).toBe(2)\n\t\t\texpect(capturedSkip).toBe(1)\n\t\t\texpect(capturedBatchSize).toBe(25)\n\t\t\texpect(rows).toEqual([{ _id: 'u4', age: 50 }])\n\t\t\texpect(closeCalls).toBe(1)\n\t\t})\n\n\t\ttest('iterateMany closes cursor on normal completion', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { v } = await import('valleyed')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\t\t\tconst schema = Schema.from('mongo_iter_complete').pk('_id', v.string(), () => 'x').field('age', v.number()).build()\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\tlet closeCalls = 0\n\t\t\tconst cursor = {\n\t\t\t\tasync close() {\n\t\t\t\t\tcloseCalls += 1\n\t\t\t\t},\n\t\t\t\tasync *[Symbol.asyncIterator]() {\n\t\t\t\t\tyield { _id: 'u1', age: 30 }\n\t\t\t\t\tyield { _id: 'u2', age: 40 }\n\t\t\t\t},\n\t\t\t}\n\t\t\t;(adapter.client as any).db = () => ({\n\t\t\t\tcollection: () => ({\n\t\t\t\t\tfind: () => cursor,\n\t\t\t\t}),\n\t\t\t})\n\n\t\t\tconst rows: Record<string, unknown>[] = []\n\t\t\tfor await (const row of adapter.use(schema, { db: 'testdb', col: 'people' }).iterateMany(FilterGroup.create())) {\n\t\t\t\trows.push(row)\n\t\t\t}\n\n\t\t\texpect(rows).toEqual([{ _id: 'u1', age: 30 }, { _id: 'u2', age: 40 }])\n\t\t\texpect(closeCalls).toBe(1)\n\t\t})\n\n\t\ttest('nested session returns callback without starting new transaction', () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\texpect(adapter.session).toBeTypeOf('function')\n\t\t})\n\n\t\ttest('type-level: adapter declares all 6 canonical aggregate ops', () => {\n\t\t\tconst _adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\ttype Ops = typeof _adapter.aggregateOps\n\t\t\texpectTypeOf<Ops>().toEqualTypeOf<\n\t\t\t\treadonly ['count', 'countDistinct', 'sum', 'avg', 'min', 'max']\n\t\t\t>()\n\t\t})\n\n\t\ttest('type-level: Repo.from with MongoDbAdapter enables aggregate method', async () => {\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { v } = await import('valleyed')\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\tconst repo = Repo.from(adapter).resolve(() => ({ db: 'test', col: 'test' })).build()\n\t\t\tconst _TestSchema = Schema.from('test').pk('id', v.string(), () => 'x').build()\n\t\t\tconst _ref = repo.on(_TestSchema)\n\t\t\texpectTypeOf(_ref.aggregate).toBeFunction()\n\t\t})\n\n\t\ttest('aggregate forwards compiled pipeline to collection.aggregate', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { v } = await import('valleyed')\n\t\t\tconst schema = Schema.from('mongo_agg').pk('_id', v.string(), () => 'x').field('amount', v.number()).build()\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\tlet capturedPipeline: unknown\n\t\t\tconst mockResults = [{ total: 3, revenue: 150 }]\n\t\t\t;(adapter.client as any).db = () => ({\n\t\t\t\tcollection: () => ({\n\t\t\t\t\taggregate: (pipeline: unknown, _opts: unknown) => {\n\t\t\t\t\t\tcapturedPipeline = pipeline\n\t\t\t\t\t\treturn { toArray: async () => mockResults }\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t})\n\t\t\tconst result = await adapter.aggregate(schema, { db: 'testdb', col: 'orders' }, {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'count', alias: 'total' },\n\t\t\t\t\t{ fn: 'sum', field: 'amount', alias: 'revenue' },\n\t\t\t\t],\n\t\t\t\tgroupBy: [],\n\t\t\t})\n\t\t\texpect(capturedPipeline).toEqual([\n\t\t\t\t{ $group: { _id: null, total: { $sum: 1 }, revenue: { $sum: '$amount' } } },\n\t\t\t\t{ $project: { _id: 0, total: 1, revenue: 1 } },\n\t\t\t])\n\t\t\texpect(result).toEqual(mockResults)\n\t\t})\n\n\t\ttest('aggregate with where and groupBy produces correct pipeline', async () => {\n\t\t\tconst { Schema } = await import('../../schema')\n\t\t\tconst { v } = await import('valleyed')\n\t\t\tconst { FilterGroup } = await import('../../filter')\n\t\t\tconst schema = Schema.from('mongo_agg2').pk('_id', v.string(), () => 'x').field('region', v.string()).field('amount', v.number()).build()\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\t\t\tlet capturedPipeline: unknown\n\t\t\t;(adapter.client as any).db = () => ({\n\t\t\t\tcollection: () => ({\n\t\t\t\t\taggregate: (pipeline: unknown, _opts: unknown) => {\n\t\t\t\t\t\tcapturedPipeline = pipeline\n\t\t\t\t\t\treturn { toArray: async () => [{ region: 'US', total: 2 }] }\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t})\n\t\t\tawait adapter.aggregate(schema, { db: 'testdb', col: 'orders' }, {\n\t\t\t\twhere: FilterGroup.create().gt('amount', 10),\n\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\tgroupBy: ['region'],\n\t\t\t})\n\t\t\texpect(capturedPipeline).toEqual([\n\t\t\t\t{ $match: { amount: { $gt: 10 } } },\n\t\t\t\t{ $group: { _id: { region: '$region' }, total: { $sum: 1 } } },\n\t\t\t\t{ $project: { _id: 0, region: '$_id.region', total: 1 } },\n\t\t\t])\n\t\t})\n\n\t\ttest('auto-wires Instance hooks for connect/disconnect', async () => {\n\t\t\tconst { Instance: Inst } = await import('../../../instance')\n\t\t\tconst { vi } = await import('vitest')\n\t\t\tconst onSpy = vi.spyOn(Inst, 'on').mockImplementation(() => {})\n\n\t\t\tMongoDbAdapter.create({ uri: 'mongodb://localhost:27017' })\n\n\t\t\texpect(onSpy).toHaveBeenCalledWith('start', expect.any(Function), expect.objectContaining({ class: MongoDbAdapter }))\n\t\t\texpect(onSpy).toHaveBeenCalledWith('close', expect.any(Function), expect.objectContaining({ class: MongoDbAdapter }))\n\n\t\t\tonSpy.mockRestore()\n\t\t})\n\t})\n\n\tdescribe('MongoDbAdapter: migrations', () => {\n\t\tfunction mockMongoDb(adapter: MongoDbAdapter) {\n\t\t\tconst state = {\n\t\t\t\tmigrations: new Map<string, { _id: string; appliedAt: number }>(),\n\t\t\t\tcollections: new Map<string, { indexes: Array<{ name: string; key: Record<string, number>; unique?: boolean }> }>(),\n\t\t\t}\n\n\t\t\tconst getCol = (name: string) => {\n\t\t\t\tif (!state.collections.has(name)) {\n\t\t\t\t\tstate.collections.set(name, { indexes: [] })\n\t\t\t\t}\n\t\t\t\treturn state.collections.get(name)!\n\t\t\t}\n\n\t\t\t;(adapter.client as any).db = () => ({\n\t\t\t\tcollection: (name: string) => {\n\t\t\t\t\tif (name === MIGRATION_TRACKER_COLLECTION) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tfind: () => ({ toArray: async () => [...state.migrations.values()] }),\n\t\t\t\t\t\t\tinsertOne: async (doc: { _id: string; appliedAt: number }) => {\n\t\t\t\t\t\t\t\tstate.migrations.set(doc._id, doc)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst col = getCol(name)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcreateIndex: async (fields: Record<string, number>, opts: { unique?: boolean; name: string }) => {\n\t\t\t\t\t\t\tcol.indexes.push({ name: opts.name, key: fields, unique: opts.unique })\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdropIndex: async (indexName: string) => {\n\t\t\t\t\t\t\tcol.indexes = col.indexes.filter((i) => i.name !== indexName)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlistIndexes: () => ({\n\t\t\t\t\t\t\ttoArray: async () => [\n\t\t\t\t\t\t\t\t{ name: '_id_', key: { _id: 1 } },\n\t\t\t\t\t\t\t\t...col.indexes,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}),\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tlistCollections: () => ({\n\t\t\t\t\ttoArray: async () => [...state.collections.keys()].map((name) => ({ name })),\n\t\t\t\t}),\n\t\t\t})\n\n\t\t\treturn state\n\t\t}\n\n\t\ttest('loadMigrations reads from equipped_migrations collection', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst state = mockMongoDb(adapter)\n\t\t\tstate.migrations.set('0001', { _id: '0001', appliedAt: 1000 })\n\t\t\tstate.migrations.set('0002', { _id: '0002', appliedAt: 2000 })\n\n\t\t\tconst result = await adapter.loadMigrations()\n\t\t\texpect(result).toEqual([\n\t\t\t\t{ id: '0001', appliedAt: 1000 },\n\t\t\t\t{ id: '0002', appliedAt: 2000 },\n\t\t\t])\n\t\t})\n\n\t\ttest('loadMigrations returns empty array when no migrations exist', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tmockMongoDb(adapter)\n\n\t\t\tconst result = await adapter.loadMigrations()\n\t\t\texpect(result).toEqual([])\n\t\t})\n\n\t\ttest('recordMigration inserts into equipped_migrations with _id', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst state = mockMongoDb(adapter)\n\n\t\t\tawait adapter.recordMigration('0001', 1234)\n\n\t\t\texpect(state.migrations.has('0001')).toBe(true)\n\t\t\texpect(state.migrations.get('0001')).toEqual({ _id: '0001', appliedAt: 1234 })\n\t\t})\n\n\t\ttest('applyAddIndex creates index with specified name and fields', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst state = mockMongoDb(adapter)\n\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'users', on: ['email'], unique: true, name: 'users_email_unique' })\n\n\t\t\tconst col = state.collections.get('users')!\n\t\t\texpect(col.indexes).toHaveLength(1)\n\t\t\texpect(col.indexes[0]).toEqual({ name: 'users_email_unique', key: { email: 1 }, unique: true })\n\t\t})\n\n\t\ttest('applyAddIndex auto-derives name when absent', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst state = mockMongoDb(adapter)\n\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'users', on: ['email'] })\n\n\t\t\tconst col = state.collections.get('users')!\n\t\t\texpect(col.indexes[0].name).toBe('users_email_idx')\n\t\t})\n\n\t\ttest('applyAddIndex auto-derived compound index name', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst state = mockMongoDb(adapter)\n\n\t\t\tawait adapter.applyAddIndex({ kind: 'addIndex', table: 'orders', on: ['userId', 'createdAt'] })\n\n\t\t\tconst col = state.collections.get('orders')!\n\t\t\texpect(col.indexes[0].name).toBe('orders_userId_createdAt_idx')\n\t\t\texpect(col.indexes[0].key).toEqual({ userId: 1, createdAt: 1 })\n\t\t})\n\n\t\ttest('applyDropIndex finds and drops index by scanning collections', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst state = mockMongoDb(adapter)\n\t\t\tstate.collections.set('users', { indexes: [{ name: 'users_email_idx', key: { email: 1 }, unique: true }] })\n\n\t\t\tawait adapter.applyDropIndex({ kind: 'dropIndex', name: 'users_email_idx' })\n\n\t\t\texpect(state.collections.get('users')!.indexes).toHaveLength(0)\n\t\t})\n\n\t\ttest('applyDropIndex is a no-op when index not found', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tmockMongoDb(adapter)\n\n\t\t\tawait adapter.applyDropIndex({ kind: 'dropIndex', name: 'nonexistent_idx' })\n\t\t})\n\n\t\ttest('introspect returns DiscoveredSchema with empty fields, pk, and foreignKeys', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst state = mockMongoDb(adapter)\n\t\t\tstate.collections.set('users', { indexes: [] })\n\t\t\tstate.collections.set('posts', { indexes: [] })\n\n\t\t\tconst schemas = await adapter.introspect()\n\n\t\t\texpect(schemas).toHaveLength(2)\n\t\t\tfor (const s of schemas) {\n\t\t\t\texpect(s.pk).toBeUndefined()\n\t\t\t\texpect(s.fields).toEqual([])\n\t\t\t\texpect(s.foreignKeys).toEqual([])\n\t\t\t}\n\t\t})\n\n\t\ttest('introspect skips _id_ index', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst state = mockMongoDb(adapter)\n\t\t\tstate.collections.set('users', { indexes: [{ name: 'users_email_idx', key: { email: 1 }, unique: false }] })\n\n\t\t\tconst schemas = await adapter.introspect()\n\n\t\t\texpect(schemas).toHaveLength(1)\n\t\t\texpect(schemas[0].indexes).toHaveLength(1)\n\t\t\texpect(schemas[0].indexes[0].name).toBe('users_email_idx')\n\t\t})\n\n\t\ttest('introspect skips tracker collection', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst state = mockMongoDb(adapter)\n\t\t\tstate.collections.set('users', { indexes: [] })\n\t\t\tstate.collections.set(MIGRATION_TRACKER_COLLECTION, { indexes: [] })\n\n\t\t\tconst schemas = await adapter.introspect()\n\n\t\t\texpect(schemas).toHaveLength(1)\n\t\t\texpect(schemas[0].name).toBe('users')\n\t\t})\n\n\t\ttest('introspect maps index keys to on array and unique flag', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst state = mockMongoDb(adapter)\n\t\t\tstate.collections.set('orders', {\n\t\t\t\tindexes: [\n\t\t\t\t\t{ name: 'orders_userId_createdAt_idx', key: { userId: 1, createdAt: 1 }, unique: false },\n\t\t\t\t\t{ name: 'orders_email_unique', key: { email: 1 }, unique: true },\n\t\t\t\t],\n\t\t\t})\n\n\t\t\tconst schemas = await adapter.introspect()\n\n\t\t\texpect(schemas[0].indexes).toEqual([\n\t\t\t\t{ name: 'orders_userId_createdAt_idx', on: ['userId', 'createdAt'], unique: false },\n\t\t\t\t{ name: 'orders_email_unique', on: ['email'], unique: true },\n\t\t\t])\n\t\t})\n\n\t\ttest('adapter does not implement acquireMigrationLock', () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\texpect((adapter as any).acquireMigrationLock).toBeUndefined()\n\t\t})\n\n\t\ttest('adapter does not implement DDL apply methods', () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\texpect((adapter as any).applyCreateTable).toBeUndefined()\n\t\t\texpect((adapter as any).applyDropTable).toBeUndefined()\n\t\t\texpect((adapter as any).applyAddField).toBeUndefined()\n\t\t\texpect((adapter as any).applyDropField).toBeUndefined()\n\t\t\texpect((adapter as any).applyModifyField).toBeUndefined()\n\t\t\texpect((adapter as any).applyRenameTable).toBeUndefined()\n\t\t\texpect((adapter as any).applyRenameField).toBeUndefined()\n\t\t\texpect((adapter as any).applyAddForeignKey).toBeUndefined()\n\t\t\texpect((adapter as any).applyDropForeignKey).toBeUndefined()\n\t\t})\n\n\t\ttest('type-level: ChangeFor<MongoDbAdapter> excludes DDL variants', () => {\n\t\t\ttype Changes = import('../../migrations/types').ChangeFor<MongoDbAdapter>\n\n\t\t\texpectTypeOf<Extract<Changes, { kind: 'addIndex' }>>().not.toBeNever()\n\t\t\texpectTypeOf<Extract<Changes, { kind: 'dropIndex' }>>().not.toBeNever()\n\t\t\texpectTypeOf<Extract<Changes, { kind: 'execute' }>>().not.toBeNever()\n\n\t\t\texpectTypeOf<Extract<Changes, { kind: 'addField' }>>().toBeNever()\n\t\t\texpectTypeOf<Extract<Changes, { kind: 'createTable' }>>().toBeNever()\n\t\t\texpectTypeOf<Extract<Changes, { kind: 'dropTable' }>>().toBeNever()\n\t\t\texpectTypeOf<Extract<Changes, { kind: 'modifyField' }>>().toBeNever()\n\t\t\texpectTypeOf<Extract<Changes, { kind: 'renameTable' }>>().toBeNever()\n\t\t\texpectTypeOf<Extract<Changes, { kind: 'renameField' }>>().toBeNever()\n\t\t\texpectTypeOf<Extract<Changes, { kind: 'dropField' }>>().toBeNever()\n\t\t\texpectTypeOf<Extract<Changes, { kind: 'addForeignKey' }>>().toBeNever()\n\t\t\texpectTypeOf<Extract<Changes, { kind: 'dropForeignKey' }>>().toBeNever()\n\t\t})\n\n\t\ttest('type-level: Migrator.from(repo, adapter).build() works without withoutLock', async () => {\n\t\t\tconst { Migrator } = await import('../../migrations/migrator')\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst repo = Repo.from(adapter).resolve(() => ({ db: 'test', col: 'test' })).build()\n\t\t\tconst step = Migrator.from(repo, adapter).migrations([])\n\n\t\t\texpectTypeOf(step).toHaveProperty('build')\n\t\t\texpectTypeOf(step).toHaveProperty('withoutLock')\n\t\t})\n\n\t\ttest('type-level: Migrator.from(repo, adapter).withoutLock().build() also works', async () => {\n\t\t\tconst { Migrator } = await import('../../migrations/migrator')\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst repo = Repo.from(adapter).resolve(() => ({ db: 'test', col: 'test' })).build()\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([]).withoutLock().build()\n\t\t\texpect(migrator).toBeDefined()\n\t\t})\n\n\t\ttest('end-to-end: Migrator runs addIndex + dropIndex + execute changes', async () => {\n\t\t\tconst { Migrator } = await import('../../migrations/migrator')\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst state = mockMongoDb(adapter)\n\t\t\tconst repo = Repo.from(adapter).resolve(() => ({ db: 'test', col: 'test' })).build()\n\n\t\t\tlet executeRan = false\n\t\t\ttype M = import('../../migrations/types').Migration<typeof adapter>\n\t\t\tconst migrations: M[] = [\n\t\t\t\t{\n\t\t\t\t\tid: '0001-add-idx',\n\t\t\t\t\ttx: false,\n\t\t\t\t\tchanges: [\n\t\t\t\t\t\t{ kind: 'addIndex', table: 'users', on: ['email'], unique: true },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0002-backfill',\n\t\t\t\t\ttx: false,\n\t\t\t\t\tchanges: [\n\t\t\t\t\t\t{ kind: 'execute', up: async () => { executeRan = true } },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0003-drop-idx',\n\t\t\t\t\ttx: false,\n\t\t\t\t\tchanges: [\n\t\t\t\t\t\t{ kind: 'dropIndex', name: 'users_email_idx' },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t]\n\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations(migrations).build()\n\t\t\tconst result = await migrator.up()\n\n\t\t\texpect(result.ran).toEqual(['0001-add-idx', '0002-backfill', '0003-drop-idx'])\n\t\t\texpect(executeRan).toBe(true)\n\t\t\texpect(state.migrations.size).toBe(3)\n\t\t\texpect(state.collections.get('users')!.indexes).toHaveLength(0)\n\t\t})\n\n\t\ttest('introspect round-trip: addIndex then introspect sees the index', async () => {\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tconst state = mockMongoDb(adapter)\n\n\t\t\tstate.collections.set('users', {\n\t\t\t\tindexes: [{ name: 'users_email_idx', key: { email: 1 }, unique: true }],\n\t\t\t})\n\n\t\t\tconst schemas = await adapter.introspect()\n\n\t\t\texpect(schemas).toHaveLength(1)\n\t\t\texpect(schemas[0].name).toBe('users')\n\t\t\texpect(schemas[0].pk).toBeUndefined()\n\t\t\texpect(schemas[0].fields).toEqual([])\n\t\t\texpect(schemas[0].foreignKeys).toEqual([])\n\t\t\texpect(schemas[0].indexes).toEqual([\n\t\t\t\t{ name: 'users_email_idx', on: ['email'], unique: true },\n\t\t\t])\n\t\t})\n\n\t\ttest('data backfill via execute change', async () => {\n\t\t\tconst { Migrator } = await import('../../migrations/migrator')\n\t\t\tconst { Repo } = await import('../../repo/repo')\n\n\t\t\tconst adapter = MongoDbAdapter.create({ uri: 'mongodb://localhost:27017/testdb' })\n\t\t\tmockMongoDb(adapter)\n\t\t\tconst repo = Repo.from(adapter).resolve(() => ({ db: 'test', col: 'test' })).build()\n\n\t\t\tconst backfilledData: string[] = []\n\t\t\ttype M = import('../../migrations/types').Migration<typeof adapter>\n\t\t\tconst m: M = {\n\t\t\t\tid: '0001-backfill',\n\t\t\t\ttx: false,\n\t\t\t\tchanges: [{\n\t\t\t\t\tkind: 'execute',\n\t\t\t\t\tup: async () => {\n\t\t\t\t\t\tbackfilledData.push('user-1-normalized')\n\t\t\t\t\t\tbackfilledData.push('user-2-normalized')\n\t\t\t\t\t},\n\t\t\t\t}],\n\t\t\t}\n\n\t\t\tconst migrator = Migrator.from(repo, adapter).migrations([m]).build()\n\t\t\tawait migrator.up()\n\n\t\t\texpect(backfilledData).toEqual(['user-1-normalized', 'user-2-normalized'])\n\t\t})\n\t})\n}\n","import { Filter, FilterGroup, type FilterChild } from '../../filter'\nimport type { AggregateSpec } from '../../orm-adapter'\nimport type { QueryOptions } from '../../query-options'\nimport { flattenOps, IncOp, MaxOp, MinOp, MulOp, PatchOp, PullOp, PushOp, SetOp, UnsetOp, type AnyUpdateOp } from '../../updates'\n\ntype MongoFilter = Record<string, unknown>\n\nexport function compileMongoFilter(group: FilterGroup, primaryKey: string): MongoFilter {\n\tconst clauses: MongoFilter[] = []\n\tfor (const child of group.children) {\n\t\tconst compiled = compileChild(child, primaryKey)\n\t\tif (compiled) clauses.push(compiled)\n\t}\n\n\tif (clauses.length === 0) return {}\n\tif (clauses.length === 1) return clauses[0]\n\treturn { $and: clauses }\n}\n\nexport function compileMongoQuery(\n\tgroup: FilterGroup,\n\toptions: QueryOptions | undefined,\n\tprimaryKey: string,\n): {\n\tfilter: MongoFilter\n\tsort: Record<string, 1 | -1> | undefined\n\tlimit: number | undefined\n\tskip: number | undefined\n\tprojection: Record<string, 1> | undefined\n} {\n\tconst mongoFilter = compileMongoFilter(group, primaryKey)\n\n\tconst orderBys = options?.orderBy ?? []\n\tconst sort =\n\t\torderBys.length > 0\n\t\t\t? Object.fromEntries(orderBys.map((o) => [mapField(o.field, primaryKey), o.direction === 'desc' ? -1 : 1]))\n\t\t\t: undefined\n\n\tconst selects = options?.select ?? []\n\tconst projection = selects.length > 0 ? Object.fromEntries(selects.map((f) => [mapField(f, primaryKey), 1])) : undefined\n\n\treturn {\n\t\tfilter: mongoFilter,\n\t\tsort: sort as Record<string, 1 | -1> | undefined,\n\t\tlimit: options?.limit,\n\t\tskip: options?.offset,\n\t\tprojection: projection as Record<string, 1> | undefined,\n\t}\n}\n\nfunction mapField(field: string, primaryKey: string): string {\n\tif (field === 'id' && primaryKey === '_id') return '_id'\n\treturn field\n}\n\nfunction compileFilter(f: Filter, primaryKey: string): MongoFilter {\n\tconst field = mapField(f.field, primaryKey)\n\n\tswitch (f.op) {\n\t\tcase 'eq':\n\t\t\treturn { [field]: { $eq: f.value } }\n\t\tcase 'ne':\n\t\t\treturn { [field]: { $ne: f.value } }\n\t\tcase 'gt':\n\t\t\treturn { [field]: { $gt: f.value } }\n\t\tcase 'gte':\n\t\t\treturn { [field]: { $gte: f.value } }\n\t\tcase 'lt':\n\t\t\treturn { [field]: { $lt: f.value } }\n\t\tcase 'lte':\n\t\t\treturn { [field]: { $lte: f.value } }\n\t\tcase 'in':\n\t\t\treturn { [field]: { $in: f.value } }\n\t\tcase 'notIn':\n\t\t\treturn { [field]: { $nin: f.value } }\n\t\tcase 'like':\n\t\t\treturn { [field]: { $regex: new RegExp(String(f.value), 'i') } }\n\t\tcase 'exists':\n\t\t\treturn { [field]: { $exists: true, $ne: null } }\n\t\tcase 'notExists':\n\t\t\treturn { [field]: { $eq: null } }\n\t\tcase 'contains':\n\t\t\treturn { [field]: { $all: Array.isArray(f.value) ? f.value : [f.value] } }\n\t\tcase 'notContains':\n\t\t\treturn { [field]: { $not: { $all: Array.isArray(f.value) ? f.value : [f.value] } } }\n\t\tdefault:\n\t\t\treturn { [field]: { $eq: f.value } }\n\t}\n}\n\nfunction compileChild(child: FilterChild, primaryKey: string): MongoFilter | null {\n\tif (child instanceof Filter) return compileFilter(child, primaryKey)\n\tif (child instanceof FilterGroup) return compileGroup(child, primaryKey)\n\treturn null\n}\n\nfunction compileGroup(group: FilterGroup, primaryKey: string): MongoFilter | null {\n\tconst clauses = group.children.map((c) => compileChild(c, primaryKey)).filter((c): c is MongoFilter => c !== null)\n\tif (clauses.length === 0) return null\n\tif (clauses.length === 1) return clauses[0]\n\treturn { [group.op === 'or' ? '$or' : '$and']: clauses }\n}\n\nexport function compileMongoUpdate(data: Record<string, unknown>): Record<string, unknown> {\n\tconst $set: Record<string, unknown> = {}\n\tconst $inc: Record<string, unknown> = {}\n\tconst $mul: Record<string, unknown> = {}\n\tconst $min: Record<string, unknown> = {}\n\tconst $max: Record<string, unknown> = {}\n\tconst $unset: Record<string, ''> = {}\n\tconst $push: Record<string, unknown> = {}\n\tconst $pull: Record<string, unknown> = {}\n\n\tfor (const [key, value] of Object.entries(data)) {\n\t\tif (value instanceof IncOp) $inc[key] = value.value\n\t\telse if (value instanceof MulOp) $mul[key] = value.value\n\t\telse if (value instanceof MinOp) $min[key] = value.value\n\t\telse if (value instanceof MaxOp) $max[key] = value.value\n\t\telse if (value instanceof UnsetOp) $unset[key] = ''\n\t\telse if (value instanceof PushOp) $push[key] = value.value\n\t\telse if (value instanceof PullOp) $pull[key] = value.value\n\t\telse if (value instanceof PatchOp) {\n\t\t\tconst patchVal = value.value as Record<string, unknown>\n\t\t\tfor (const [subKey, subVal] of Object.entries(patchVal)) {\n\t\t\t\t$set[`${key}.${subKey}`] = subVal\n\t\t\t}\n\t\t} else $set[key] = value\n\t}\n\n\tconst result: Record<string, unknown> = {}\n\tif (Object.keys($set).length) result.$set = $set\n\tif (Object.keys($inc).length) result.$inc = $inc\n\tif (Object.keys($mul).length) result.$mul = $mul\n\tif (Object.keys($min).length) result.$min = $min\n\tif (Object.keys($max).length) result.$max = $max\n\tif (Object.keys($unset).length) result.$unset = $unset\n\tif (Object.keys($push).length) result.$push = $push\n\tif (Object.keys($pull).length) result.$pull = $pull\n\n\treturn result\n}\n\nexport function compileMongoOps(ops: AnyUpdateOp[]): Record<string, unknown> {\n\treturn compileMongoUpdate(flattenOps(ops))\n}\n\nexport function compileMongoAggregate(spec: AggregateSpec, primaryKey: string): Record<string, unknown>[] {\n\tconst pipeline: Record<string, unknown>[] = []\n\n\tif (spec.where) {\n\t\tconst match = compileMongoFilter(spec.where, primaryKey)\n\t\tif (Object.keys(match).length > 0) pipeline.push({ $match: match })\n\t}\n\n\tconst groupId: Record<string, string> | null =\n\t\tspec.groupBy.length > 0\n\t\t\t? Object.fromEntries(spec.groupBy.map((f) => [f, `$${mapField(f, primaryKey)}`]))\n\t\t\t: null\n\n\tconst accumulators: Record<string, unknown> = {}\n\tfor (const agg of spec.aggregates) {\n\t\tconst fieldRef = agg.field ? `$${mapField(agg.field, primaryKey)}` : undefined\n\t\tswitch (agg.fn) {\n\t\t\tcase 'count':\n\t\t\t\taccumulators[agg.alias] = { $sum: 1 }\n\t\t\t\tbreak\n\t\t\tcase 'countDistinct':\n\t\t\t\taccumulators[agg.alias] = { $addToSet: fieldRef }\n\t\t\t\tbreak\n\t\t\tcase 'sum':\n\t\t\tcase 'avg':\n\t\t\tcase 'min':\n\t\t\tcase 'max':\n\t\t\t\taccumulators[agg.alias] = { [`$${agg.fn}`]: fieldRef }\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tpipeline.push({ $group: { _id: groupId, ...accumulators } })\n\n\tconst project: Record<string, unknown> = { _id: 0 }\n\tfor (const f of spec.groupBy) {\n\t\tproject[f] = `$_id.${f}`\n\t}\n\tfor (const agg of spec.aggregates) {\n\t\tif (agg.fn === 'countDistinct') {\n\t\t\tproject[agg.alias] = { $size: `$${agg.alias}` }\n\t\t} else {\n\t\t\tproject[agg.alias] = 1\n\t\t}\n\t}\n\tpipeline.push({ $project: project })\n\n\tif (spec.having) {\n\t\tconst havingMatch = compileMongoFilter(spec.having, '')\n\t\tif (Object.keys(havingMatch).length > 0) pipeline.push({ $match: havingMatch })\n\t}\n\n\treturn pipeline\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect } = import.meta.vitest\n\tconst { FilterGroup } = await import('../../filter')\n\tconst { OrderBy } = await import('../../query-options')\n\n\tdescribe('compileMongoFilter', () => {\n\t\ttest('empty filter group compiles to empty object', () => {\n\t\t\tconst group = FilterGroup.create()\n\t\t\texpect(compileMongoFilter(group, 'id')).toEqual({})\n\t\t})\n\n\t\ttest('single eq filter compiles to $eq', () => {\n\t\t\tconst group = FilterGroup.create().eq('name', 'Alice')\n\t\t\texpect(compileMongoFilter(group, 'id')).toEqual({ name: { $eq: 'Alice' } })\n\t\t})\n\n\t\ttest('ne, gt, gte, lt, lte compile to corresponding Mongo ops', () => {\n\t\t\texpect(compileMongoFilter(FilterGroup.create().ne('age', 5), 'id')).toEqual({ age: { $ne: 5 } })\n\t\t\texpect(compileMongoFilter(FilterGroup.create().gt('age', 10), 'id')).toEqual({ age: { $gt: 10 } })\n\t\t\texpect(compileMongoFilter(FilterGroup.create().gte('age', 20), 'id')).toEqual({ age: { $gte: 20 } })\n\t\t\texpect(compileMongoFilter(FilterGroup.create().lt('age', 30), 'id')).toEqual({ age: { $lt: 30 } })\n\t\t\texpect(compileMongoFilter(FilterGroup.create().lte('age', 40), 'id')).toEqual({ age: { $lte: 40 } })\n\t\t})\n\n\t\ttest('in compiles to $in', () => {\n\t\t\tconst group = FilterGroup.create().in('status', ['a', 'b'])\n\t\t\texpect(compileMongoFilter(group, 'id')).toEqual({ status: { $in: ['a', 'b'] } })\n\t\t})\n\n\t\ttest('notIn compiles to $nin (canonical name notIn, Mongo op $nin)', () => {\n\t\t\tconst group = FilterGroup.create().notIn('status', ['x', 'y'])\n\t\t\texpect(compileMongoFilter(group, 'id')).toEqual({ status: { $nin: ['x', 'y'] } })\n\t\t})\n\n\t\ttest('like compiles to $regex with case-insensitive flag', () => {\n\t\t\tconst group = FilterGroup.create().like('name', 'ali')\n\t\t\tconst result = compileMongoFilter(group, 'id')\n\t\t\texpect(result.name).toEqual({ $regex: expect.any(RegExp) })\n\t\t\tconst regex = (result.name as any).$regex as RegExp\n\t\t\texpect(regex.flags).toBe('i')\n\t\t\texpect(regex.test('Alice')).toBe(true)\n\t\t})\n\n\t\ttest('exists compiles to $exists: true, $ne: null', () => {\n\t\t\tconst group = FilterGroup.create().exists('val')\n\t\t\texpect(compileMongoFilter(group, 'id')).toEqual({ val: { $exists: true, $ne: null } })\n\t\t})\n\n\t\ttest('notExists is its own op — compiles to $eq: null', () => {\n\t\t\tconst group = FilterGroup.create().notExists('val')\n\t\t\texpect(compileMongoFilter(group, 'id')).toEqual({ val: { $eq: null } })\n\t\t})\n\n\t\ttest('contains compiles to $all', () => {\n\t\t\tconst group = FilterGroup.create().contains('tags', ['a', 'b'])\n\t\t\texpect(compileMongoFilter(group, 'id')).toEqual({ tags: { $all: ['a', 'b'] } })\n\t\t})\n\n\t\ttest('notContains compiles to $not: { $all }', () => {\n\t\t\tconst group = FilterGroup.create().notContains('tags', ['x'])\n\t\t\texpect(compileMongoFilter(group, 'id')).toEqual({ tags: { $not: { $all: ['x'] } } })\n\t\t})\n\n\t\ttest('multiple clauses produce $and', () => {\n\t\t\tconst group = FilterGroup.create().eq('a', 1).gt('b', 2)\n\t\t\tconst result = compileMongoFilter(group, 'id')\n\t\t\texpect(result).toEqual({ $and: [{ a: { $eq: 1 } }, { b: { $gt: 2 } }] })\n\t\t})\n\n\t\ttest('nested and/or groups compile correctly', () => {\n\t\t\tconst group = FilterGroup.create().and([\n\t\t\t\t(q) => q.eq('a', 1),\n\t\t\t\t(q) => q.or([(g) => g.eq('b', 2), (g) => g.eq('c', 3)]),\n\t\t\t])\n\t\t\tconst result = compileMongoFilter(group, 'id')\n\t\t\texpect(result).toEqual({\n\t\t\t\t$and: [{ a: { $eq: 1 } }, { $or: [{ b: { $eq: 2 } }, { c: { $eq: 3 } }] }],\n\t\t\t})\n\t\t})\n\n\t\ttest('maps id field to _id when primaryKey is _id', () => {\n\t\t\tconst group = FilterGroup.create().eq('id', 'abc')\n\t\t\texpect(compileMongoFilter(group, '_id')).toEqual({ _id: { $eq: 'abc' } })\n\t\t})\n\t})\n\n\tdescribe('compileMongoQuery', () => {\n\t\ttest('options: sort, limit, skip, projection', () => {\n\t\t\tconst group = FilterGroup.create().eq('active', true)\n\t\t\tconst options = {\n\t\t\t\torderBy: [new OrderBy('name', 'asc'), new OrderBy('age', 'desc')],\n\t\t\t\tlimit: 10,\n\t\t\t\toffset: 5,\n\t\t\t\tselect: ['name', 'age'] as const,\n\t\t\t}\n\t\t\tconst result = compileMongoQuery(group, options, 'id')\n\t\t\texpect(result.filter).toEqual({ active: { $eq: true } })\n\t\t\texpect(result.sort).toEqual({ name: 1, age: -1 })\n\t\t\texpect(result.limit).toBe(10)\n\t\t\texpect(result.skip).toBe(5)\n\t\t\texpect(result.projection).toEqual({ name: 1, age: 1 })\n\t\t})\n\n\t\ttest('undefined options returns undefined for sort/limit/skip/projection', () => {\n\t\t\tconst group = FilterGroup.create().eq('x', 1)\n\t\t\tconst result = compileMongoQuery(group, undefined, 'id')\n\t\t\texpect(result.sort).toBeUndefined()\n\t\t\texpect(result.limit).toBeUndefined()\n\t\t\texpect(result.skip).toBeUndefined()\n\t\t\texpect(result.projection).toBeUndefined()\n\t\t})\n\t})\n\n\tdescribe('compileMongoUpdate', () => {\n\t\ttest('plain values go into $set', () => {\n\t\t\tconst result = compileMongoUpdate({ name: 'Alice', age: 30 })\n\t\t\texpect(result).toEqual({ $set: { name: 'Alice', age: 30 } })\n\t\t})\n\n\t\ttest('IncOp goes into $inc', () => {\n\t\t\tconst result = compileMongoUpdate({ count: new IncOp('count', 5) })\n\t\t\texpect(result).toEqual({ $inc: { count: 5 } })\n\t\t})\n\n\t\ttest('MulOp goes into $mul', () => {\n\t\t\tconst result = compileMongoUpdate({ score: new MulOp('score', 2) })\n\t\t\texpect(result).toEqual({ $mul: { score: 2 } })\n\t\t})\n\n\t\ttest('MinOp/MaxOp go into $min/$max', () => {\n\t\t\tconst result = compileMongoUpdate({\n\t\t\t\tlo: new MinOp('lo', 1),\n\t\t\t\thi: new MaxOp('hi', 99),\n\t\t\t})\n\t\t\texpect(result).toEqual({ $min: { lo: 1 }, $max: { hi: 99 } })\n\t\t})\n\n\t\ttest('UnsetOp goes into $unset', () => {\n\t\t\tconst result = compileMongoUpdate({ old: new UnsetOp('old') })\n\t\t\texpect(result).toEqual({ $unset: { old: '' } })\n\t\t})\n\n\t\ttest('PushOp/PullOp go into $push/$pull', () => {\n\t\t\tconst result = compileMongoUpdate({\n\t\t\t\ttags: new PushOp('tags', 'new'),\n\t\t\t\tremoved: new PullOp('removed', 'old'),\n\t\t\t})\n\t\t\texpect(result).toEqual({ $push: { tags: 'new' }, $pull: { removed: 'old' } })\n\t\t})\n\n\t\ttest('PatchOp produces dot-notation $set entries', () => {\n\t\t\tconst result = compileMongoUpdate({ meta: new PatchOp('meta', { a: 1, b: 2 }) })\n\t\t\texpect(result).toEqual({ $set: { 'meta.a': 1, 'meta.b': 2 } })\n\t\t})\n\n\t\ttest('empty data produces empty result', () => {\n\t\t\tconst result = compileMongoUpdate({})\n\t\t\texpect(result).toEqual({})\n\t\t})\n\t})\n\n\tdescribe('compileMongoOps', () => {\n\t\ttest('SetOp values go into $set', () => {\n\t\t\tconst result = compileMongoOps([new SetOp({ name: 'Bob', age: 25 })])\n\t\t\texpect(result).toEqual({ $set: { name: 'Bob', age: 25 } })\n\t\t})\n\n\t\ttest('mixed ops compile to separate Mongo update operators', () => {\n\t\t\tconst result = compileMongoOps([\n\t\t\t\tnew SetOp({ name: 'Alice' }),\n\t\t\t\tnew IncOp('count', 1),\n\t\t\t\tnew PushOp('tags', 'x'),\n\t\t\t])\n\t\t\texpect(result).toEqual({\n\t\t\t\t$set: { name: 'Alice' },\n\t\t\t\t$inc: { count: 1 },\n\t\t\t\t$push: { tags: 'x' },\n\t\t\t})\n\t\t})\n\n\t\ttest('empty ops produces empty result', () => {\n\t\t\texpect(compileMongoOps([])).toEqual({})\n\t\t})\n\t})\n\n\tdescribe('compileMongoAggregate', () => {\n\t\ttest('bare count produces $group with $sum:1 and $project', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\tgroupBy: [],\n\t\t\t}\n\t\t\texpect(compileMongoAggregate(spec, '_id')).toEqual([\n\t\t\t\t{ $group: { _id: null, total: { $sum: 1 } } },\n\t\t\t\t{ $project: { _id: 0, total: 1 } },\n\t\t\t])\n\t\t})\n\n\t\ttest('multi-aggregator produces all accumulators in $group', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'count', alias: 'total' },\n\t\t\t\t\t{ fn: 'sum', field: 'amount', alias: 'revenue' },\n\t\t\t\t\t{ fn: 'avg', field: 'price', alias: 'avgPrice' },\n\t\t\t\t],\n\t\t\t\tgroupBy: [],\n\t\t\t}\n\t\t\texpect(compileMongoAggregate(spec, '_id')).toEqual([\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: null,\n\t\t\t\t\t\ttotal: { $sum: 1 },\n\t\t\t\t\t\trevenue: { $sum: '$amount' },\n\t\t\t\t\t\tavgPrice: { $avg: '$price' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ $project: { _id: 0, total: 1, revenue: 1, avgPrice: 1 } },\n\t\t\t])\n\t\t})\n\n\t\ttest('single-column groupBy produces composite _id and $project lift', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\tgroupBy: ['region'],\n\t\t\t}\n\t\t\texpect(compileMongoAggregate(spec, '_id')).toEqual([\n\t\t\t\t{ $group: { _id: { region: '$region' }, total: { $sum: 1 } } },\n\t\t\t\t{ $project: { _id: 0, region: '$_id.region', total: 1 } },\n\t\t\t])\n\t\t})\n\n\t\ttest('multi-column groupBy via composite _id', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\taggregates: [{ fn: 'sum', field: 'amount', alias: 'revenue' }],\n\t\t\t\tgroupBy: ['region', 'year'],\n\t\t\t}\n\t\t\texpect(compileMongoAggregate(spec, '_id')).toEqual([\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: { region: '$region', year: '$year' },\n\t\t\t\t\t\trevenue: { $sum: '$amount' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\tregion: '$_id.region',\n\t\t\t\t\t\tyear: '$_id.year',\n\t\t\t\t\t\trevenue: 1,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t})\n\n\t\ttest('where-only emits $match before $group', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\twhere: FilterGroup.create().eq('active', true),\n\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\tgroupBy: [],\n\t\t\t}\n\t\t\texpect(compileMongoAggregate(spec, '_id')).toEqual([\n\t\t\t\t{ $match: { active: { $eq: true } } },\n\t\t\t\t{ $group: { _id: null, total: { $sum: 1 } } },\n\t\t\t\t{ $project: { _id: 0, total: 1 } },\n\t\t\t])\n\t\t})\n\n\t\ttest('having-only emits $match after $project', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\tgroupBy: ['region'],\n\t\t\t\thaving: FilterGroup.create().gt('total', 5),\n\t\t\t}\n\t\t\texpect(compileMongoAggregate(spec, '_id')).toEqual([\n\t\t\t\t{ $group: { _id: { region: '$region' }, total: { $sum: 1 } } },\n\t\t\t\t{ $project: { _id: 0, region: '$_id.region', total: 1 } },\n\t\t\t\t{ $match: { total: { $gt: 5 } } },\n\t\t\t])\n\t\t})\n\n\t\ttest('where + having produces both $match stages', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\twhere: FilterGroup.create().eq('active', true),\n\t\t\t\taggregates: [{ fn: 'sum', field: 'amount', alias: 'revenue' }],\n\t\t\t\tgroupBy: ['region'],\n\t\t\t\thaving: FilterGroup.create().gte('revenue', 1000),\n\t\t\t}\n\t\t\texpect(compileMongoAggregate(spec, '_id')).toEqual([\n\t\t\t\t{ $match: { active: { $eq: true } } },\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: { region: '$region' },\n\t\t\t\t\t\trevenue: { $sum: '$amount' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ $project: { _id: 0, region: '$_id.region', revenue: 1 } },\n\t\t\t\t{ $match: { revenue: { $gte: 1000 } } },\n\t\t\t])\n\t\t})\n\n\t\ttest('countDistinct uses $addToSet in $group and $size in $project', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\taggregates: [{ fn: 'countDistinct', field: 'userId', alias: 'uniqueUsers' }],\n\t\t\t\tgroupBy: [],\n\t\t\t}\n\t\t\texpect(compileMongoAggregate(spec, '_id')).toEqual([\n\t\t\t\t{ $group: { _id: null, uniqueUsers: { $addToSet: '$userId' } } },\n\t\t\t\t{ $project: { _id: 0, uniqueUsers: { $size: '$uniqueUsers' } } },\n\t\t\t])\n\t\t})\n\n\t\ttest('min/max produce $min/$max accumulators', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'min', field: 'price', alias: 'lowest' },\n\t\t\t\t\t{ fn: 'max', field: 'price', alias: 'highest' },\n\t\t\t\t],\n\t\t\t\tgroupBy: [],\n\t\t\t}\n\t\t\texpect(compileMongoAggregate(spec, '_id')).toEqual([\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: null,\n\t\t\t\t\t\tlowest: { $min: '$price' },\n\t\t\t\t\t\thighest: { $max: '$price' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{ $project: { _id: 0, lowest: 1, highest: 1 } },\n\t\t\t])\n\t\t})\n\n\t\ttest('field-name mapping: id field maps to _id when primaryKey is _id', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\twhere: FilterGroup.create().eq('id', 'abc'),\n\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\tgroupBy: ['id'],\n\t\t\t}\n\t\t\texpect(compileMongoAggregate(spec, '_id')).toEqual([\n\t\t\t\t{ $match: { _id: { $eq: 'abc' } } },\n\t\t\t\t{ $group: { _id: { id: '$_id' }, total: { $sum: 1 } } },\n\t\t\t\t{ $project: { _id: 0, id: '$_id.id', total: 1 } },\n\t\t\t])\n\t\t})\n\n\t\ttest('countDistinct with groupBy combines $addToSet, groupBy lift, and $size', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\taggregates: [{ fn: 'countDistinct', field: 'category', alias: 'uniqueCats' }],\n\t\t\t\tgroupBy: ['region'],\n\t\t\t}\n\t\t\texpect(compileMongoAggregate(spec, '_id')).toEqual([\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: { region: '$region' },\n\t\t\t\t\t\tuniqueCats: { $addToSet: '$category' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\tregion: '$_id.region',\n\t\t\t\t\t\tuniqueCats: { $size: '$uniqueCats' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t})\n\n\t\ttest('all six aggregators in a single pipeline', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\taggregates: [\n\t\t\t\t\t{ fn: 'count', alias: 'total' },\n\t\t\t\t\t{ fn: 'countDistinct', field: 'status', alias: 'uniqueStatuses' },\n\t\t\t\t\t{ fn: 'sum', field: 'amount', alias: 'totalAmount' },\n\t\t\t\t\t{ fn: 'avg', field: 'amount', alias: 'avgAmount' },\n\t\t\t\t\t{ fn: 'min', field: 'amount', alias: 'minAmount' },\n\t\t\t\t\t{ fn: 'max', field: 'amount', alias: 'maxAmount' },\n\t\t\t\t],\n\t\t\t\tgroupBy: ['region'],\n\t\t\t}\n\t\t\tconst pipeline = compileMongoAggregate(spec, '_id')\n\t\t\texpect(pipeline).toEqual([\n\t\t\t\t{\n\t\t\t\t\t$group: {\n\t\t\t\t\t\t_id: { region: '$region' },\n\t\t\t\t\t\ttotal: { $sum: 1 },\n\t\t\t\t\t\tuniqueStatuses: { $addToSet: '$status' },\n\t\t\t\t\t\ttotalAmount: { $sum: '$amount' },\n\t\t\t\t\t\tavgAmount: { $avg: '$amount' },\n\t\t\t\t\t\tminAmount: { $min: '$amount' },\n\t\t\t\t\t\tmaxAmount: { $max: '$amount' },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t$project: {\n\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\tregion: '$_id.region',\n\t\t\t\t\t\ttotal: 1,\n\t\t\t\t\t\tuniqueStatuses: { $size: '$uniqueStatuses' },\n\t\t\t\t\t\ttotalAmount: 1,\n\t\t\t\t\t\tavgAmount: 1,\n\t\t\t\t\t\tminAmount: 1,\n\t\t\t\t\t\tmaxAmount: 1,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t})\n\n\t\ttest('empty where filter is omitted from pipeline', () => {\n\t\t\tconst spec: AggregateSpec = {\n\t\t\t\twhere: FilterGroup.create(),\n\t\t\t\taggregates: [{ fn: 'count', alias: 'total' }],\n\t\t\t\tgroupBy: [],\n\t\t\t}\n\t\t\texpect(compileMongoAggregate(spec, '_id')).toEqual([\n\t\t\t\t{ $group: { _id: null, total: { $sum: 1 } } },\n\t\t\t\t{ $project: { _id: 0, total: 1 } },\n\t\t\t])\n\t\t})\n\t})\n}\n"],"mappings":"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","names":["FilterGroup","v","FilterGroup"]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import{E as S,a as v,f as O,g as B,j as P,l as I,m as D,n as M,o as G,p as Q,q as j,r as H,s as Y}from "../../../chunk-WHIWTP2Z.min.mjs";import{a as f,m as U}from "../../../chunk-LTDVZJYJ.min.mjs";import"../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";import{AsyncLocalStorage as pe}from"async_hooks";import{Pool as ue}from"pg";import de from"pg-cursor";import{v as E}from"valleyed";function b(a,e){return a==="id"&&e!=="id"?e:a}function K(a,e,t){switch(a.op){case"eq":return a.value===null?`${e} IS NULL`:`${e} = ${t(a.value)}`;case"ne":return a.value===null?`${e} IS NOT NULL`:`${e} != ${t(a.value)}`;case"gt":return`${e} > ${t(a.value)}`;case"gte":return`${e} >= ${t(a.value)}`;case"lt":return`${e} < ${t(a.value)}`;case"lte":return`${e} <= ${t(a.value)}`;case"in":return`${e} = ANY(${t(a.value)})`;case"notIn":return`NOT (${e} = ANY(${t(a.value)}))`;case"like":return`${e} ILIKE ${t(`%${a.value}%`)}`;case"exists":return`${e} IS NOT NULL`;case"notExists":return`${e} IS NULL`;case"contains":return`${e} @> ${t(JSON.stringify(a.value))}::jsonb`;case"notContains":return`NOT (${e} @> ${t(JSON.stringify(a.value))}::jsonb)`;default:return`${e} = ${t(a.value)}`}}function W(a,e,t){return K(a,`"${b(a.field,e)}"`,t)}function A(a,e){return a.children.map(t=>ie(t,e)).filter(t=>t!==null)}function oe(a,e){let t=A(a,e);return t.length===0?null:t.length===1?t[0]:`(${t.join(a.op==="or"?" OR ":" AND ")})`}function ie(a,e){return a instanceof O?e(a):a instanceof B?oe(a,e):null}function N(a,e,t=1){let n=[],o=t;function s(c){return n.push(c),`$${o++}`}let i=A(a,c=>W(c,e,s));return{whereClause:i.length>0?`WHERE ${i.join(" AND ")}`:"",params:n,nextParamIndex:o}}function L(a,e){let t=[],n=e;return{setParts:Object.entries(a).map(([s,r])=>{let i=`"${s}"`;return r instanceof I?(t.push(r.value),`${i} = ${i} + $${n++}`):r instanceof D?(t.push(r.value),`${i} = ${i} * $${n++}`):r instanceof M?(t.push(r.value),`${i} = LEAST(${i}, $${n++})`):r instanceof G?(t.push(r.value),`${i} = GREATEST(${i}, $${n++})`):r instanceof Q?`${i} = NULL`:r instanceof j?(t.push(JSON.stringify(r.value)),`${i} = ${i} || jsonb_build_array($${n++}::jsonb)`):r instanceof H?(t.push(JSON.stringify(r.value)),`${i} = (SELECT COALESCE(jsonb_agg(e), '[]'::jsonb) FROM jsonb_array_elements(${i}) e WHERE e <> $${n++}::jsonb)`):r instanceof Y?(t.push(JSON.stringify(r.value)),`${i} = ${i} || $${n++}::jsonb`):(t.push(r),`${i} = $${n++}`)}),params:t,nextParamIndex:n}}function $(a,e,t,n){let{whereClause:o,params:s,nextParamIndex:r}=N(a,n),i=r,l=(e?.orderBy??[]).map(g=>`"${b(g.field,n)}" ${g.direction.toUpperCase()}`),c=l.length>0?`ORDER BY ${l.join(", ")}`:"",d="";e?.limit!=null&&(s.push(e.limit),d=`LIMIT $${i++}`);let p="";return e?.offset!=null&&(s.push(e.offset),p=`OFFSET $${i++}`),{sql:`SELECT ${e?.select?.length?e.select.map(g=>`"${b(g,n)}"`).join(", "):"*"} FROM "${t}" ${o} ${c} ${d} ${p}`.trim().replace(/\s+/g," "),params:s}}function V(a,e,t){let{whereClause:n,params:o}=N(a,t);return{sql:`SELECT COUNT(*) as count FROM "${e}" ${n}`.trim().replace(/\s+/g," "),params:o}}function X(a,e){let t=Object.keys(e),n=Object.values(e),o=t.map((i,l)=>`$${l+1}`),s=t.map(i=>`"${i}"`).join(", ");return{sql:`INSERT INTO "${a}" (${s}) VALUES (${o.join(", ")}) RETURNING *`,params:n}}function J(a,e,t,n){let{setParts:o,params:s,nextParamIndex:r}=L(n,1),{whereClause:i,params:l}=N(a,t,r),c=[...s,...l];return{sql:`UPDATE "${e}" SET ${o.join(", ")} ${i} RETURNING *`.trim().replace(/\s+/g," "),params:c}}function z(a,e,t,n){let{setParts:o,params:s,nextParamIndex:r}=L(n,1);return s.push(t),{sql:`UPDATE "${a}" SET ${o.join(", ")} WHERE "${e}" = $${r} RETURNING *`.replace(/\s+/g," "),params:s}}function Z(a,e,t){let{whereClause:n,params:o}=N(a,t);return{sql:`DELETE FROM "${e}" ${n} RETURNING *`.trim().replace(/\s+/g," "),params:o}}function ee(a,e,t,n,o){let s=Object.keys(n),r=Object.values(n),i=s.map((y,m)=>`$${m+1}`),l=b(e,t),c,d=[...r];if(Object.keys(o).length>0){let{setParts:y,params:m}=L(o,s.length+1);c=y.join(", "),d.push(...m)}else c=`"${l}" = EXCLUDED."${l}"`;return{sql:`INSERT INTO "${a}" (${s.map(y=>`"${y}"`).join(", ")}) VALUES (${i.join(", ")}) ON CONFLICT ("${l}") DO UPDATE SET ${c} RETURNING *`.replace(/\s+/g," "),params:d}}function te(a,e){if(a.children.length===1&&a.children[0]instanceof O&&a.children[0].op==="eq")return a.children[0].field;let t;if(a.children.length===0)t="empty filter";else if(a.children.length===1){let n=a.children[0];t=`single non-eq filter (op: ${n instanceof O?n.op:"group"})`}else t=`${a.children.length} filter clauses`;throw new v("upsert-filter-incompatible",e,"upsertOne",[{cause:`PostgreSQL upsert requires a single eq filter on a UNIQUE-indexed column; received ${t}`}])}function le(a,e,t){if(a==="count")return"COUNT(*)";let n=`"${b(e,t)}"`;switch(a){case"countDistinct":return`COUNT(DISTINCT ${n})`;case"sum":return`SUM(${n})`;case"avg":return`AVG(${n})`;case"min":return`MIN(${n})`;case"max":return`MAX(${n})`}}function ce(a,e,t,n){return t.has(a)?t.get(a):n.has(a)?`"${b(a,e)}"`:`"${a}"`}function ne(a,e,t){let n=[],o=1;function s(m){return n.push(m),`$${o++}`}let r=[],i=new Map;for(let m of a.aggregates){let g=le(m.fn,m.field,t);i.set(m.alias,g),r.push(`${g} AS "${m.alias}"`)}let l=[];for(let m of a.groupBy){let g=`"${b(m,t)}"`;l.push(g),r.push(`${g} AS "${m}"`)}let c="";if(a.where){let m=q=>W(q,t,s),g=A(a.where,m);g.length>0&&(c=`WHERE ${g.join(" AND ")}`)}let d=l.length>0?`GROUP BY ${l.join(", ")}`:"",p="";if(a.having){let m=new Set(a.groupBy),g=T=>K(T,ce(T.field,t,i,m),s),q=A(a.having,g);q.length>0&&(p=`HAVING ${q.join(" AND ")}`)}return{sql:`SELECT ${r.join(", ")} FROM "${e}" ${c} ${d} ${p}`.trim().replace(/\s+/g," "),params:n}}var me=()=>E.object({host:E.string(),port:E.number(),username:E.string(),password:E.string(),database:E.string(),ssl:E.defaults(E.boolean(),!1)}),R="equipped_migrations",ae=3735928559,ge=1e3,F={string:"text",number:"double precision",boolean:"boolean",date:"timestamptz",null:"text",object:"jsonb",array:"jsonb"},ye={text:"string","character varying":"string",varchar:"string",char:"string",character:"string","double precision":"number",real:"number",integer:"number",smallint:"number",numeric:"number",decimal:"number",boolean:"boolean","timestamp with time zone":"date","timestamp without time zone":"date",timestamptz:"date",timestamp:"date",date:"date",jsonb:"object",json:"object"},re=class extends U(me,P){schemaConfigPipe=E.object({schema:E.optional(E.string()),table:E.string()});supportedFieldTypes=["string","number","boolean","null","object","array","date"];queryableOps=["eq","ne","gt","gte","lt","lte","in","notIn","like","exists","notExists","contains","notContains"];updateOps=["set","inc","mul","min","max","unset","push","pull","patch"];aggregateOps=["count","countDistinct","sum","avg","min","max"];pool;#n=new pe;constructor(e){super(e),this.pool=new ue({host:e.host,port:e.port,user:e.username,password:e.password,database:e.database,ssl:e.ssl?{rejectUnauthorized:!1}:!1})}#e(){return this.#n.getStore()??this.pool}#t(e){return e.schema&&e.schema!=="public"?`${e.schema}.${e.table}`:e.table}async connect(){}async disconnect(){try{await this.pool.end()}catch(e){throw new f("Failed to disconnect PostgreSQL pool",{adapter:"postgresql"},e)}}async findByPk(e,t,n){let o=t;try{let s=this.#t(o),r=e.pkField.name;return(await this.#e().query(`SELECT * FROM "${s}" WHERE "${r}" = $1`,[n])).rows[0]??null}catch(s){throw new f("PostgreSQL findByPk failed",{adapter:"postgresql",operation:"findByPk",table:o.table},s)}}async createMany(e,t,n){let o=t;try{let s=this.#t(o),r=this.#e(),i=[];for(let l of n){let{sql:c,params:d}=X(s,l),p=await r.query(c,d);i.push(p.rows[0])}return i}catch(s){throw new f("PostgreSQL createMany failed",{adapter:"postgresql",operation:"createMany",table:o.table},s)}}async updateByPk(e,t,n,o){let s=t;try{let r=this.#t(s),i=e.pkField.name,l=S(o);if(Object.keys(l).length===0)return(await this.#e().query(`SELECT * FROM "${r}" WHERE "${i}" = $1`,[n])).rows[0]??null;let{sql:c,params:d}=z(r,i,n,l);return(await this.#e().query(c,d)).rows[0]??null}catch(r){throw new f("PostgreSQL updateByPk failed",{adapter:"postgresql",operation:"updateByPk",table:s.table},r)}}async deleteByPk(e,t,n){let o=t;try{let s=this.#t(o),r=e.pkField.name;return(await this.#e().query(`DELETE FROM "${s}" WHERE "${r}" = $1 RETURNING *`,[n])).rows[0]??null}catch(s){throw new f("PostgreSQL deleteByPk failed",{adapter:"postgresql",operation:"deleteByPk",table:o.table},s)}}async raw(e,t,n,o=[]){let s=t;try{return await this.#e().query(n,o)}catch(r){throw r instanceof f?r:new f("PostgreSQL raw failed",{adapter:"postgresql",operation:"raw",table:s.table},r)}}async findMany(e,t,n,o){let s=t;try{let r=this.#t(s),{sql:i,params:l}=$(n,o,r,e.pkField.name);return(await this.#e().query(i,l)).rows}catch(r){throw new f("PostgreSQL findMany failed",{adapter:"postgresql",operation:"findMany",table:s.table},r)}}async count(e,t,n){let o=t;try{let s=this.#t(o),{sql:r,params:i}=V(n,s,e.pkField.name),l=await this.#e().query(r,i);return Number(l.rows[0]?.count??0)}catch(s){throw new f("PostgreSQL count failed",{adapter:"postgresql",operation:"count",table:o.table},s)}}async*iterateMany(e,t,n,o){let s=t,r,i=!1,l;try{let c=this.#t(s),{sql:d,params:p}=$(n,o,c,e.pkField.name),y=this.#n.getStore();y?r=y:(r=await this.pool.connect(),i=!0),l=r.query(new de(d,p));let m=o?.batchSize??ge;for(;;){let g=await l.read(m);if(g.length===0)break;for(let q of g)yield q}}catch(c){throw new f("PostgreSQL iterateMany failed",{adapter:"postgresql",operation:"iterateMany",table:s.table},c)}finally{try{await l?.close()}finally{i&&r?.release()}}}async updateMany(e,t,n,o){let s=t;try{let r=this.#t(s),{sql:i,params:l}=J(n,r,e.pkField.name,o);return(await this.#e().query(i,l)).rows}catch(r){throw new f("PostgreSQL updateMany failed",{adapter:"postgresql",operation:"updateMany",table:s.table},r)}}async deleteMany(e,t,n){let o=t;try{let s=this.#t(o),{sql:r,params:i}=Z(n,s,e.pkField.name);return(await this.#e().query(r,i)).rows}catch(s){throw new f("PostgreSQL deleteMany failed",{adapter:"postgresql",operation:"deleteMany",table:o.table},s)}}async upsertOne(e,t,n,o,s){let r=t;try{let i=this.#t(r),l=te(n,e.name),c=s.length>0?S(s):{},{sql:d,params:p}=ee(i,l,e.pkField.name,o,c);return(await this.#e().query(d,p)).rows[0]}catch(i){throw i instanceof f?i:new f("PostgreSQL upsertOne failed",{adapter:"postgresql",operation:"upsertOne",table:r.table},i)}}async aggregate(e,t,n){let o=t;try{let s=this.#t(o),{sql:r,params:i}=ne(n,s,e.pkField.name);return(await this.#e().query(r,i)).rows.map(c=>{let d={};for(let p of n.aggregates){let y=c[p.alias];p.fn==="min"||p.fn==="max"?d[p.alias]=y:d[p.alias]=Number(typeof y=="string"?y:y??0)}for(let p of n.groupBy)d[p]=c[p];return d})}catch(s){throw s instanceof f?s:new f("PostgreSQL aggregate failed",{adapter:"postgresql",operation:"aggregate",table:o.table},s)}}async loadMigrations(){let e=this.#e();return await e.query(`
|
|
2
|
+
CREATE TABLE IF NOT EXISTS "${R}" (
|
|
3
|
+
id text PRIMARY KEY,
|
|
4
|
+
applied_at bigint NOT NULL
|
|
5
|
+
)
|
|
6
|
+
`),(await e.query(`SELECT id, applied_at FROM "${R}"`)).rows.map(n=>({id:n.id,appliedAt:Number(n.applied_at)}))}async recordMigration(e,t){await this.#e().query(`INSERT INTO "${R}" (id, applied_at) VALUES ($1, $2)`,[e,t])}async acquireMigrationLock(e){let t=this.#e();await t.query("SELECT pg_advisory_lock($1)",[ae]);try{return await e()}finally{await t.query("SELECT pg_advisory_unlock($1)",[ae])}}async applyCreateTable(e){let t=F[e.pk.type]??"text",n=[`"${e.pk.name}" ${t} PRIMARY KEY`];for(let o of e.fields)n.push(this.#a(o));await this.#e().query(`CREATE TABLE "${e.name}" (${n.join(", ")})`)}async applyDropTable(e){await this.#e().query(`DROP TABLE "${e.name}"`)}async applyAddField(e){let t=this.#a(e.field);await this.#e().query(`ALTER TABLE "${e.table}" ADD COLUMN ${t}`)}async applyDropField(e){await this.#e().query(`ALTER TABLE "${e.table}" DROP COLUMN "${e.name}"`)}async applyModifyField(e){let t=this.#e(),n=`"${e.table}"`,o=`"${e.name}"`,s=F[e.to.type]??"text";await t.query(`ALTER TABLE ${n} ALTER COLUMN ${o} TYPE ${s} USING ${o}::${s}`),e.to.nullable?await t.query(`ALTER TABLE ${n} ALTER COLUMN ${o} DROP NOT NULL`):await t.query(`ALTER TABLE ${n} ALTER COLUMN ${o} SET NOT NULL`),e.to.default!==void 0?await t.query(`ALTER TABLE ${n} ALTER COLUMN ${o} SET DEFAULT ${this.#r(e.to.default)}`):await t.query(`ALTER TABLE ${n} ALTER COLUMN ${o} DROP DEFAULT`),e.to.name!==e.name&&await t.query(`ALTER TABLE ${n} RENAME COLUMN ${o} TO "${e.to.name}"`)}async applyRenameTable(e){await this.#e().query(`ALTER TABLE "${e.from}" RENAME TO "${e.to}"`)}async applyRenameField(e){await this.#e().query(`ALTER TABLE "${e.table}" RENAME COLUMN "${e.from}" TO "${e.to}"`)}async applyAddIndex(e){let t=e.name??this.#i(e.table,e.on,e.unique),n=e.unique?"UNIQUE ":"",o=e.on.map(s=>`"${s}"`).join(", ");await this.#e().query(`CREATE ${n}INDEX "${t}" ON "${e.table}" (${o})`)}async applyDropIndex(e){await this.#e().query(`DROP INDEX "${e.name}"`)}async applyAddForeignKey(e){let t=e.name??`fk_${e.table}_${e.on}`,n=`ALTER TABLE "${e.table}" ADD CONSTRAINT "${t}" FOREIGN KEY ("${e.on}") REFERENCES "${e.references.table}" ("${e.references.column}")`;e.onDelete&&(n+=` ON DELETE ${this.#s(e.onDelete)}`),e.onUpdate&&(n+=` ON UPDATE ${this.#s(e.onUpdate)}`),await this.#e().query(n)}async applyDropForeignKey(e){await this.#e().query(`ALTER TABLE "${e.table}" DROP CONSTRAINT "${e.name}"`)}async introspect(){let{OrmIntrospectionError:e}=await import("../../../introspection-GP3G26B6.min.mjs"),t=this.#e(),n=await t.query(`
|
|
7
|
+
SELECT table_name FROM information_schema.tables
|
|
8
|
+
WHERE table_schema = 'public' AND table_type = 'BASE TABLE' AND table_name != $1
|
|
9
|
+
`,[R]),o=[];for(let s of n.rows){let r=s.table_name,i=await t.query(`
|
|
10
|
+
SELECT column_name, data_type, is_nullable, column_default
|
|
11
|
+
FROM information_schema.columns
|
|
12
|
+
WHERE table_schema = 'public' AND table_name = $1
|
|
13
|
+
ORDER BY ordinal_position
|
|
14
|
+
`,[r]),c=(await t.query(`
|
|
15
|
+
SELECT kcu.column_name
|
|
16
|
+
FROM information_schema.table_constraints tc
|
|
17
|
+
JOIN information_schema.key_column_usage kcu
|
|
18
|
+
ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
19
|
+
WHERE tc.table_schema = 'public' AND tc.table_name = $1 AND tc.constraint_type = 'PRIMARY KEY'
|
|
20
|
+
`,[r])).rows[0]?.column_name,d=await t.query(`
|
|
21
|
+
SELECT kcu.column_name
|
|
22
|
+
FROM information_schema.table_constraints tc
|
|
23
|
+
JOIN information_schema.key_column_usage kcu
|
|
24
|
+
ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
25
|
+
WHERE tc.table_schema = 'public' AND tc.table_name = $1 AND tc.constraint_type = 'UNIQUE'
|
|
26
|
+
`,[r]),p=new Set(d.rows.map(u=>u.column_name)),y,m=[];for(let u of i.rows){let w=u.data_type.toLowerCase(),h=ye[w];if(!h)throw new e({adapter:"postgresql",table:r,cause:`Unsupported column type '${w}' on column '${u.column_name}'`});if(u.column_name===c){y={name:u.column_name,type:h};continue}let _=u.is_nullable==="YES",C=u.column_default,x=this.#l(C);m.push({name:u.column_name,type:h,nullable:_,...x!==void 0?{default:x}:{},...p.has(u.column_name)?{unique:!0}:{}})}let g=await t.query(`
|
|
27
|
+
SELECT indexname, indexdef
|
|
28
|
+
FROM pg_indexes
|
|
29
|
+
WHERE schemaname = 'public' AND tablename = $1
|
|
30
|
+
`,[r]),q=[];for(let u of g.rows){let w=u.indexname,h=u.indexdef;if(h.includes("PRIMARY KEY")||w.endsWith("_pkey"))continue;let _=h.toUpperCase().includes("UNIQUE"),C=h.match(/\(([^)]+)\)/),x=C?C[1].split(",").map(se=>se.trim().replace(/"/g,"")):[];q.push({name:w,on:x,unique:_})}let T=await t.query(`
|
|
31
|
+
SELECT
|
|
32
|
+
tc.constraint_name,
|
|
33
|
+
kcu.column_name,
|
|
34
|
+
ccu.table_name AS foreign_table_name,
|
|
35
|
+
ccu.column_name AS foreign_column_name,
|
|
36
|
+
rc.delete_rule,
|
|
37
|
+
rc.update_rule
|
|
38
|
+
FROM information_schema.table_constraints tc
|
|
39
|
+
JOIN information_schema.key_column_usage kcu
|
|
40
|
+
ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema
|
|
41
|
+
JOIN information_schema.constraint_column_usage ccu
|
|
42
|
+
ON tc.constraint_name = ccu.constraint_name AND tc.table_schema = ccu.table_schema
|
|
43
|
+
JOIN information_schema.referential_constraints rc
|
|
44
|
+
ON tc.constraint_name = rc.constraint_name AND tc.table_schema = rc.constraint_schema
|
|
45
|
+
WHERE tc.table_schema = 'public' AND tc.table_name = $1 AND tc.constraint_type = 'FOREIGN KEY'
|
|
46
|
+
`,[r]),k=[];for(let u of T.rows)k.push({name:u.constraint_name,on:u.column_name,references:{table:u.foreign_table_name,column:u.foreign_column_name},...u.delete_rule&&u.delete_rule!=="NO ACTION"?{onDelete:this.#o(u.delete_rule)}:{},...u.update_rule&&u.update_rule!=="NO ACTION"?{onUpdate:this.#o(u.update_rule)}:{}});o.push({name:r,pk:y,fields:m,indexes:q,foreignKeys:k})}return o}#a(e){let t=F[e.type]??"text",n=`"${e.name}" ${t}`;return e.nullable||(n+=" NOT NULL"),e.default!==void 0&&(n+=` DEFAULT ${this.#r(e.default)}`),e.unique&&(n+=" UNIQUE"),n}#r(e){return e===null?"NULL":typeof e=="string"?`'${e.replace(/'/g,"''")}'`:typeof e=="boolean"?e?"TRUE":"FALSE":String(e)}#i(e,t,n){let o=`idx_${e}_${t.join("_")}`;return n?`${o}_unique`:o}#s(e){return{cascade:"CASCADE",restrict:"RESTRICT",setnull:"SET NULL",noaction:"NO ACTION"}[e.toLowerCase()]??"NO ACTION"}#o(e){return{CASCADE:"cascade",RESTRICT:"restrict","SET NULL":"setNull"}[e.toUpperCase()]??"noAction"}#l(e){if(e==null)return;if(e==="NULL"||e==="NULL::text")return null;if(e==="true"||e==="TRUE")return!0;if(e==="false"||e==="FALSE")return!1;let t=e.match(/^(-?\d+(?:\.\d+)?)$/);if(t)return Number(t[1]);let n=e.match(/^'(.*)'(?:::.*)?$/);if(n)return n[1].replace(/''/g,"'")}async session(e){if(this.#n.getStore())return e();let t;try{t=await this.pool.connect(),await t.query("BEGIN");let n=await this.#n.run(t,e);return await t.query("COMMIT"),n}catch(n){if(t)try{await t.query("ROLLBACK")}catch{}throw n instanceof f?n:new f("PostgreSQL session failed",{adapter:"postgresql",operation:"session"},n)}finally{t?.release()}}};export{re as PostgresAdapter};
|
|
47
|
+
//# sourceMappingURL=index.min.mjs.map
|