@warlock.js/core 4.5.0 → 4.6.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.
Files changed (200) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/esm/ai/src/agent/agent.mjs +126 -7
  3. package/esm/ai/src/agent/agent.mjs.map +1 -1
  4. package/esm/ai/src/agent/signature.mjs +57 -0
  5. package/esm/ai/src/agent/signature.mjs.map +1 -0
  6. package/esm/ai/src/agent/snapshot.mjs +101 -0
  7. package/esm/ai/src/agent/snapshot.mjs.map +1 -0
  8. package/esm/ai/src/ai.mjs +37 -1
  9. package/esm/ai/src/ai.mjs.map +1 -1
  10. package/esm/ai/src/errors/agent-drift-error.mjs +31 -0
  11. package/esm/ai/src/errors/agent-drift-error.mjs.map +1 -0
  12. package/esm/ai/src/errors/index.mjs +2 -0
  13. package/esm/ai/src/errors/planner-drift-error.mjs +33 -0
  14. package/esm/ai/src/errors/planner-drift-error.mjs.map +1 -0
  15. package/esm/ai/src/image/image-cost.mjs +55 -0
  16. package/esm/ai/src/image/image-cost.mjs.map +1 -0
  17. package/esm/ai/src/image/image.mjs +112 -0
  18. package/esm/ai/src/image/image.mjs.map +1 -0
  19. package/esm/ai/src/image/index.mjs +4 -0
  20. package/esm/ai/src/index.mjs +20 -0
  21. package/esm/ai/src/planner/planner-run.mjs +161 -6
  22. package/esm/ai/src/planner/planner-run.mjs.map +1 -1
  23. package/esm/ai/src/planner/planner.mjs +25 -1
  24. package/esm/ai/src/planner/planner.mjs.map +1 -1
  25. package/esm/ai/src/planner/snapshot.mjs +95 -0
  26. package/esm/ai/src/planner/snapshot.mjs.map +1 -0
  27. package/esm/ai/src/rag/hybrid/bm25.mjs +51 -0
  28. package/esm/ai/src/rag/hybrid/bm25.mjs.map +1 -0
  29. package/esm/ai/src/rag/hybrid/hybrid-rank.mjs +29 -0
  30. package/esm/ai/src/rag/hybrid/hybrid-rank.mjs.map +1 -0
  31. package/esm/ai/src/rag/hybrid/rrf.mjs +30 -0
  32. package/esm/ai/src/rag/hybrid/rrf.mjs.map +1 -0
  33. package/esm/ai/src/rag/index.mjs +11 -0
  34. package/esm/ai/src/rag/loaders/errors.mjs +25 -0
  35. package/esm/ai/src/rag/loaders/errors.mjs.map +1 -0
  36. package/esm/ai/src/rag/loaders/index.mjs +7 -0
  37. package/esm/ai/src/rag/loaders/load-html.mjs +138 -0
  38. package/esm/ai/src/rag/loaders/load-html.mjs.map +1 -0
  39. package/esm/ai/src/rag/loaders/load-pdf.mjs +150 -0
  40. package/esm/ai/src/rag/loaders/load-pdf.mjs.map +1 -0
  41. package/esm/ai/src/rag/loaders/load-text.mjs +60 -0
  42. package/esm/ai/src/rag/loaders/load-text.mjs.map +1 -0
  43. package/esm/ai/src/rag/loaders/load-web.mjs +89 -0
  44. package/esm/ai/src/rag/loaders/load-web.mjs.map +1 -0
  45. package/esm/ai/src/rag/store/pg-vector-store.mjs +328 -0
  46. package/esm/ai/src/rag/store/pg-vector-store.mjs.map +1 -0
  47. package/esm/ai/src/rag/transforms/multi-query.mjs +41 -0
  48. package/esm/ai/src/rag/transforms/multi-query.mjs.map +1 -0
  49. package/esm/ai/src/speech/index.mjs +3 -0
  50. package/esm/ai/src/speech/speech.mjs +122 -0
  51. package/esm/ai/src/speech/speech.mjs.map +1 -0
  52. package/esm/ai/src/supervisor/entries.mjs +2 -2
  53. package/esm/ai/src/supervisor/entries.mjs.map +1 -1
  54. package/esm/ai/src/transcribe/audio-input.mjs +84 -0
  55. package/esm/ai/src/transcribe/audio-input.mjs.map +1 -0
  56. package/esm/ai/src/transcribe/index.mjs +4 -0
  57. package/esm/ai/src/transcribe/transcribe.mjs +127 -0
  58. package/esm/ai/src/transcribe/transcribe.mjs.map +1 -0
  59. package/esm/ai-openai/src/image.mjs +5 -0
  60. package/esm/ai-openai/src/index.mjs +3 -0
  61. package/esm/ai-openai/src/sdk.mjs +3 -0
  62. package/esm/ai-openai/src/speech.mjs +5 -0
  63. package/esm/ai-openai/src/transcription.mjs +6 -0
  64. package/esm/ai-openai/src/utils/index.mjs +1 -0
  65. package/esm/ai-openai/src/utils/to-openai-messages.mjs +3 -0
  66. package/esm/cli/commands/doctor/checks/config.check.mjs +42 -0
  67. package/esm/cli/commands/doctor/checks/config.check.mjs.map +1 -0
  68. package/esm/cli/commands/doctor/checks/connectors.check.mjs +28 -0
  69. package/esm/cli/commands/doctor/checks/connectors.check.mjs.map +1 -0
  70. package/esm/cli/commands/doctor/checks/health.check.mjs +35 -0
  71. package/esm/cli/commands/doctor/checks/health.check.mjs.map +1 -0
  72. package/esm/cli/commands/doctor/checks/index.mjs +25 -0
  73. package/esm/cli/commands/doctor/checks/index.mjs.map +1 -0
  74. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs +90 -0
  75. package/esm/cli/commands/doctor/checks/optional-peers.check.mjs.map +1 -0
  76. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs +69 -0
  77. package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs.map +1 -0
  78. package/esm/cli/commands/doctor/checks/routes.check.mjs +30 -0
  79. package/esm/cli/commands/doctor/checks/routes.check.mjs.map +1 -0
  80. package/esm/cli/commands/doctor/doctor-command.action.mjs +28 -0
  81. package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -0
  82. package/esm/cli/commands/doctor/format-report.mjs +44 -0
  83. package/esm/cli/commands/doctor/format-report.mjs.map +1 -0
  84. package/esm/cli/commands/doctor/run-checks.mjs +50 -0
  85. package/esm/cli/commands/doctor/run-checks.mjs.map +1 -0
  86. package/esm/cli/commands/doctor.command.mjs +29 -0
  87. package/esm/cli/commands/doctor.command.mjs.map +1 -0
  88. package/esm/cli/commands/generate/templates/stubs.mjs +6 -8
  89. package/esm/cli/commands/generate/templates/stubs.mjs.map +1 -1
  90. package/esm/cli/commands/routes/format-routes-table.mjs +129 -0
  91. package/esm/cli/commands/routes/format-routes-table.mjs.map +1 -0
  92. package/esm/cli/commands/routes/route-row.mjs +92 -0
  93. package/esm/cli/commands/routes/route-row.mjs.map +1 -0
  94. package/esm/cli/commands/routes/routes-command.action.mjs +43 -0
  95. package/esm/cli/commands/routes/routes-command.action.mjs.map +1 -0
  96. package/esm/cli/commands/routes.command.mjs +51 -0
  97. package/esm/cli/commands/routes.command.mjs.map +1 -0
  98. package/esm/cli/commands/seed.command.mjs +5 -0
  99. package/esm/cli/commands/seed.command.mjs.map +1 -1
  100. package/esm/cli/framework-cli-commands.mjs +4 -0
  101. package/esm/cli/framework-cli-commands.mjs.map +1 -1
  102. package/esm/config/config-getter.mjs +5 -5
  103. package/esm/config/config-getter.mjs.map +1 -1
  104. package/esm/config/config-loader.mjs +2 -2
  105. package/esm/config/config-loader.mjs.map +1 -1
  106. package/esm/connectors/access-connector.mjs +2 -2
  107. package/esm/connectors/access-connector.mjs.map +1 -1
  108. package/esm/connectors/ai-connector.mjs +2 -2
  109. package/esm/connectors/ai-connector.mjs.map +1 -1
  110. package/esm/connectors/cache-connector.mjs +2 -2
  111. package/esm/connectors/cache-connector.mjs.map +1 -1
  112. package/esm/connectors/database-connector.mjs +2 -2
  113. package/esm/connectors/database-connector.mjs.map +1 -1
  114. package/esm/connectors/herald-connector.mjs +2 -2
  115. package/esm/connectors/herald-connector.mjs.map +1 -1
  116. package/esm/connectors/http-connector.d.mts.map +1 -1
  117. package/esm/connectors/http-connector.mjs +9 -7
  118. package/esm/connectors/http-connector.mjs.map +1 -1
  119. package/esm/connectors/logger-connector.mjs +2 -2
  120. package/esm/connectors/logger-connector.mjs.map +1 -1
  121. package/esm/connectors/mail-connector.mjs +2 -2
  122. package/esm/connectors/mail-connector.mjs.map +1 -1
  123. package/esm/connectors/notifications-connector.mjs +2 -2
  124. package/esm/connectors/notifications-connector.mjs.map +1 -1
  125. package/esm/connectors/socket-connector.mjs +3 -3
  126. package/esm/connectors/socket-connector.mjs.map +1 -1
  127. package/esm/database/index.d.mts +2 -1
  128. package/esm/database/index.mjs +1 -0
  129. package/esm/database/seed-command-action.mjs +44 -4
  130. package/esm/database/seed-command-action.mjs.map +1 -1
  131. package/esm/database/seeds/seed-records-table-migration.mjs +36 -0
  132. package/esm/database/seeds/seed-records-table-migration.mjs.map +1 -0
  133. package/esm/database/seeds/seeder.d.mts +22 -5
  134. package/esm/database/seeds/seeder.d.mts.map +1 -1
  135. package/esm/database/seeds/seeder.errors.d.mts +22 -0
  136. package/esm/database/seeds/seeder.errors.d.mts.map +1 -0
  137. package/esm/database/seeds/seeder.errors.mjs +29 -0
  138. package/esm/database/seeds/seeder.errors.mjs.map +1 -0
  139. package/esm/database/seeds/seeder.mjs.map +1 -1
  140. package/esm/database/seeds/seeders.manager.mjs +90 -11
  141. package/esm/database/seeds/seeders.manager.mjs.map +1 -1
  142. package/esm/database/seeds/types.d.mts +117 -1
  143. package/esm/database/seeds/types.d.mts.map +1 -1
  144. package/esm/database/seeds/utils.mjs +6 -1
  145. package/esm/database/seeds/utils.mjs.map +1 -1
  146. package/esm/dev-server/module-loader.d.mts +12 -0
  147. package/esm/dev-server/module-loader.d.mts.map +1 -1
  148. package/esm/dev-server/module-loader.mjs +30 -2
  149. package/esm/dev-server/module-loader.mjs.map +1 -1
  150. package/esm/http/config.mjs +2 -2
  151. package/esm/http/config.mjs.map +1 -1
  152. package/esm/http/createHttpApplication.mjs +2 -2
  153. package/esm/http/createHttpApplication.mjs.map +1 -1
  154. package/esm/http/health.d.mts +14 -0
  155. package/esm/http/health.d.mts.map +1 -1
  156. package/esm/http/health.mjs +16 -0
  157. package/esm/http/health.mjs.map +1 -1
  158. package/esm/http/middleware/idempotency.middleware.mjs +5 -5
  159. package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
  160. package/esm/http/middleware/inject-request-context.mjs +2 -2
  161. package/esm/http/middleware/inject-request-context.mjs.map +1 -1
  162. package/esm/http/middleware/maintenance.middleware.mjs +4 -4
  163. package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
  164. package/esm/http/plugins.mjs +9 -9
  165. package/esm/http/plugins.mjs.map +1 -1
  166. package/esm/http/response.mjs +5 -5
  167. package/esm/http/response.mjs.map +1 -1
  168. package/esm/http/server.mjs +4 -4
  169. package/esm/http/server.mjs.map +1 -1
  170. package/esm/index.d.mts +4 -3
  171. package/esm/index.mjs +2 -1
  172. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +28 -1
  173. package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
  174. package/esm/repositories/adapters/cascade/cascade-query-builder.mjs +39 -0
  175. package/esm/repositories/adapters/cascade/cascade-query-builder.mjs.map +1 -1
  176. package/esm/repositories/contracts/index.d.mts +1 -1
  177. package/esm/repositories/contracts/query-builder.contract.d.mts +87 -1
  178. package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
  179. package/esm/repositories/index.d.mts +1 -1
  180. package/esm/repositories/repository.manager.d.mts +99 -1
  181. package/esm/repositories/repository.manager.d.mts.map +1 -1
  182. package/esm/repositories/repository.manager.mjs +128 -0
  183. package/esm/repositories/repository.manager.mjs.map +1 -1
  184. package/esm/router/router.d.mts +9 -0
  185. package/esm/router/router.d.mts.map +1 -1
  186. package/esm/router/router.mjs +21 -1
  187. package/esm/router/router.mjs.map +1 -1
  188. package/esm/utils/paths.mjs +2 -2
  189. package/esm/utils/paths.mjs.map +1 -1
  190. package/esm/validation/validateAll.mjs +2 -2
  191. package/esm/validation/validateAll.mjs.map +1 -1
  192. package/llms-full.txt +427 -45
  193. package/llms.txt +4 -2
  194. package/package.json +9 -9
  195. package/skills/README.md +65 -0
  196. package/skills/health-checks/SKILL.md +13 -0
  197. package/skills/use-repository/SKILL.md +38 -1
  198. package/skills/warlock-doctor/SKILL.md +135 -0
  199. package/skills/warlock-routes/SKILL.md +91 -0
  200. package/skills/write-seeder/SKILL.md +143 -45
@@ -1,4 +1,4 @@
1
- import baseConfig from "@mongez/config";
1
+ import config from "@mongez/config";
2
2
  import Fastify from "fastify";
3
3
 
4
4
  //#region ../@warlock.js/core/src/http/server.ts
@@ -11,9 +11,9 @@ const DEFAULT_BODY_LIMIT = 200 * 1024 * 1024 * 1024;
11
11
  let server = void 0;
12
12
  function startHttpServer(options) {
13
13
  return server = Fastify({
14
- trustProxy: baseConfig.get("http.trustProxy", true),
15
- bodyLimit: baseConfig.get("http.bodyLimit", DEFAULT_BODY_LIMIT),
16
- forceCloseConnections: baseConfig.get("http.gracefulShutdown.forceCloseConnections", "idle"),
14
+ trustProxy: config.get("http.trustProxy", true),
15
+ bodyLimit: config.get("http.bodyLimit", DEFAULT_BODY_LIMIT),
16
+ forceCloseConnections: config.get("http.gracefulShutdown.forceCloseConnections", "idle"),
17
17
  ...options
18
18
  });
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.mjs","names":["config"],"sources":["../../../../../../../@warlock.js/core/src/http/server.ts"],"sourcesContent":["import config from \"@mongez/config\";\r\nimport Fastify, { FastifyServerOptions } from \"fastify\";\r\n\r\nexport type FastifyInstance = ReturnType<typeof Fastify>;\r\n\r\n/**\r\n * Default Fastify body limit. Kept at the historical 200GB so existing apps\r\n * don't regress on upgrade. Override via `http.bodyLimit` in config; for\r\n * per-route caps use the `maxBodySize()` middleware.\r\n */\r\nconst DEFAULT_BODY_LIMIT = 200 * 1024 * 1024 * 1024;\r\n\r\n// Instantiate Fastify server\r\nlet server: FastifyInstance | undefined = undefined;\r\n\r\nexport function startHttpServer(options?: FastifyServerOptions): FastifyInstance {\r\n return (server = Fastify({\r\n // Configurable so deployments NOT behind a trusted proxy can disable\r\n // `X-Forwarded-For` resolution (it's client-settable and spoofable).\r\n // Defaults to `true` to preserve historical behavior for proxied apps.\r\n trustProxy: config.get(\"http.trustProxy\", true),\r\n bodyLimit: config.get(\"http.bodyLimit\", DEFAULT_BODY_LIMIT),\r\n // Close idle keep-alive connections on shutdown while letting in-flight\r\n // requests finish — the basis for graceful draining. Override via\r\n // `http.gracefulShutdown.forceCloseConnections`.\r\n forceCloseConnections: config.get(\"http.gracefulShutdown.forceCloseConnections\", \"idle\"),\r\n ...options,\r\n }));\r\n}\r\n\r\n/**\r\n * Expose the server to be publicly accessible\r\n */\r\nexport function getHttpServer(): FastifyInstance {\r\n return server;\r\n}\r\n\r\n/**\r\n * Minimal shape needed to close a server — lets {@link closeServerWithTimeout}\r\n * be unit-tested with a fake instead of a real Fastify instance.\r\n */\r\nexport type ClosableServer = { close: () => Promise<unknown> };\r\n\r\n/**\r\n * Close a server, bounded by a timeout. Fastify's `close()` stops accepting new\r\n * requests (it answers 503 while closing) and drains the in-flight ones; this\r\n * wraps it so a single stuck request can't hang shutdown forever.\r\n *\r\n * @returns `true` if the server drained cleanly, `false` if the timeout fired first.\r\n */\r\nexport async function closeServerWithTimeout(\r\n server: ClosableServer,\r\n timeoutMs: number,\r\n): Promise<boolean> {\r\n let timer: ReturnType<typeof setTimeout> | undefined;\r\n\r\n const drained = server.close().then(() => true);\r\n\r\n const timedOut = new Promise<boolean>((resolve) => {\r\n timer = setTimeout(() => resolve(false), timeoutMs);\r\n });\r\n\r\n try {\r\n return await Promise.race([drained, timedOut]);\r\n } finally {\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;AAUA,MAAM,qBAAqB,MAAM,OAAO,OAAO;AAG/C,IAAI,SAAsC;AAE1C,SAAgB,gBAAgB,SAAiD;CAC/E,OAAQ,SAAS,QAAQ;EAIvB,YAAYA,WAAO,IAAI,mBAAmB,IAAI;EAC9C,WAAWA,WAAO,IAAI,kBAAkB,kBAAkB;EAI1D,uBAAuBA,WAAO,IAAI,+CAA+C,MAAM;EACvF,GAAG;CACL,CAAC;AACH;;;;AAKA,SAAgB,gBAAiC;CAC/C,OAAO;AACT;;;;;;;;AAeA,eAAsB,uBACpB,QACA,WACkB;CAClB,IAAI;CAEJ,MAAM,UAAU,OAAO,MAAM,CAAC,CAAC,WAAW,IAAI;CAE9C,MAAM,WAAW,IAAI,SAAkB,YAAY;EACjD,QAAQ,iBAAiB,QAAQ,KAAK,GAAG,SAAS;CACpD,CAAC;CAED,IAAI;EACF,OAAO,MAAM,QAAQ,KAAK,CAAC,SAAS,QAAQ,CAAC;CAC/C,UAAU;EACR,IAAI,OACF,aAAa,KAAK;CAEtB;AACF"}
1
+ {"version":3,"file":"server.mjs","names":[],"sources":["../../../../../../../@warlock.js/core/src/http/server.ts"],"sourcesContent":["import config from \"@mongez/config\";\r\nimport Fastify, { FastifyServerOptions } from \"fastify\";\r\n\r\nexport type FastifyInstance = ReturnType<typeof Fastify>;\r\n\r\n/**\r\n * Default Fastify body limit. Kept at the historical 200GB so existing apps\r\n * don't regress on upgrade. Override via `http.bodyLimit` in config; for\r\n * per-route caps use the `maxBodySize()` middleware.\r\n */\r\nconst DEFAULT_BODY_LIMIT = 200 * 1024 * 1024 * 1024;\r\n\r\n// Instantiate Fastify server\r\nlet server: FastifyInstance | undefined = undefined;\r\n\r\nexport function startHttpServer(options?: FastifyServerOptions): FastifyInstance {\r\n return (server = Fastify({\r\n // Configurable so deployments NOT behind a trusted proxy can disable\r\n // `X-Forwarded-For` resolution (it's client-settable and spoofable).\r\n // Defaults to `true` to preserve historical behavior for proxied apps.\r\n trustProxy: config.get(\"http.trustProxy\", true),\r\n bodyLimit: config.get(\"http.bodyLimit\", DEFAULT_BODY_LIMIT),\r\n // Close idle keep-alive connections on shutdown while letting in-flight\r\n // requests finish — the basis for graceful draining. Override via\r\n // `http.gracefulShutdown.forceCloseConnections`.\r\n forceCloseConnections: config.get(\"http.gracefulShutdown.forceCloseConnections\", \"idle\"),\r\n ...options,\r\n }));\r\n}\r\n\r\n/**\r\n * Expose the server to be publicly accessible\r\n */\r\nexport function getHttpServer(): FastifyInstance {\r\n return server;\r\n}\r\n\r\n/**\r\n * Minimal shape needed to close a server — lets {@link closeServerWithTimeout}\r\n * be unit-tested with a fake instead of a real Fastify instance.\r\n */\r\nexport type ClosableServer = { close: () => Promise<unknown> };\r\n\r\n/**\r\n * Close a server, bounded by a timeout. Fastify's `close()` stops accepting new\r\n * requests (it answers 503 while closing) and drains the in-flight ones; this\r\n * wraps it so a single stuck request can't hang shutdown forever.\r\n *\r\n * @returns `true` if the server drained cleanly, `false` if the timeout fired first.\r\n */\r\nexport async function closeServerWithTimeout(\r\n server: ClosableServer,\r\n timeoutMs: number,\r\n): Promise<boolean> {\r\n let timer: ReturnType<typeof setTimeout> | undefined;\r\n\r\n const drained = server.close().then(() => true);\r\n\r\n const timedOut = new Promise<boolean>((resolve) => {\r\n timer = setTimeout(() => resolve(false), timeoutMs);\r\n });\r\n\r\n try {\r\n return await Promise.race([drained, timedOut]);\r\n } finally {\r\n if (timer) {\r\n clearTimeout(timer);\r\n }\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;AAUA,MAAM,qBAAqB,MAAM,OAAO,OAAO;AAG/C,IAAI,SAAsC;AAE1C,SAAgB,gBAAgB,SAAiD;CAC/E,OAAQ,SAAS,QAAQ;EAIvB,YAAY,OAAO,IAAI,mBAAmB,IAAI;EAC9C,WAAW,OAAO,IAAI,kBAAkB,kBAAkB;EAI1D,uBAAuB,OAAO,IAAI,+CAA+C,MAAM;EACvF,GAAG;CACL,CAAC;AACH;;;;AAKA,SAAgB,gBAAiC;CAC/C,OAAO;AACT;;;;;;;;AAeA,eAAsB,uBACpB,QACA,WACkB;CAClB,IAAI;CAEJ,MAAM,UAAU,OAAO,MAAM,CAAC,CAAC,WAAW,IAAI;CAE9C,MAAM,WAAW,IAAI,SAAkB,YAAY;EACjD,QAAQ,iBAAiB,QAAQ,KAAK,GAAG,SAAS;CACpD,CAAC;CAED,IAAI;EACF,OAAO,MAAM,QAAQ,KAAK,CAAC,SAAS,QAAQ,CAAC;CAC/C,UAAU;EACR,IAAI,OACF,aAAa,KAAK;CAEtB;AACF"}
package/esm/index.d.mts CHANGED
@@ -83,8 +83,9 @@ import { registerAppConfig } from "./config/config-handlers.mjs";
83
83
  import { ConfigSpecialHandlers, configSpecialHandlers } from "./config/config-special-handlers.mjs";
84
84
  import { ContainerTypes, container } from "./container/index.mjs";
85
85
  import { DatabaseLogModel } from "./database/models/database-log/database-log.mjs";
86
- import { SeedResult, SeederMetadata } from "./database/seeds/types.mjs";
86
+ import { SeedClock, SeedContext, SeedRecordRef, SeedResult, SeederMetadata, Track, TrackableModel } from "./database/seeds/types.mjs";
87
87
  import { Seeder, seeder } from "./database/seeds/seeder.mjs";
88
+ import { SeederDependencyCycleError, UnknownSeederDependencyError } from "./database/seeds/seeder.errors.mjs";
88
89
  import { useComputedModel, useComputedSlug, useHashedPassword } from "./database/utils.mjs";
89
90
  import { FilesOrchestrator, filesOrchestrator, onCleanup } from "./dev-server/files-orchestrator.mjs";
90
91
  import { BaseHealthChecker } from "./dev-server/health-checker/checkers/base-health-checker.mjs";
@@ -108,7 +109,7 @@ import { renderReact } from "./react/index.mjs";
108
109
  import { RepositoryManager } from "./repositories/repository.manager.mjs";
109
110
  import { RepositoryAdapterContract } from "./repositories/contracts/repository-adapter.contract.mjs";
110
111
  import { AllRepositoryOptions, CachedRepositoryOptions, ChunkCallback, CursorPaginationOptions, CursorPaginationResult, FilterFunction, FilterOperator, FilterOptions, FilterRule, FilterRules, PaginationMode, PaginationResult, RepositoryConfigurations, RepositoryEvent, RepositoryOptions, RepositoryOptionsWithCursor, RepositoryOptionsWithPages, SaveMode, TypedAllRepositoryOptions, TypedRepositoryOptions, TypedRepositoryOptionsWithCursor, TypedRepositoryOptionsWithPages, WhereOperator } from "./repositories/contracts/types.mjs";
111
- import { QueryBuilderContract } from "./repositories/contracts/query-builder.contract.mjs";
112
+ import { AggregateExpressionInput, AggregateExpressions, GroupByFields, QueryBuilderContract } from "./repositories/contracts/query-builder.contract.mjs";
112
113
  import { CascadeAdapter } from "./repositories/adapters/cascade/cascade-adapter.mjs";
113
114
  import { CascadeQueryBuilder } from "./repositories/adapters/cascade/cascade-query-builder.mjs";
114
115
  import { DefineResourceOptions, defineResource } from "./resource/define-resource.mjs";
@@ -152,7 +153,7 @@ import { WarlockConfigManager, isUnknownTsExtensionError, warlockConfigManager }
152
153
  import { env } from "@mongez/dotenv";
153
154
  import { colors } from "@mongez/copper";
154
155
  export * from "@mongez/localization";
155
- export { $registerUseCase, $unregisterUseCase, AccessConnector, AiConnector, AllRepositoryOptions, AppConfigurations, Application, BadRequestError, BadSchemaUseCaseError, BaseConnector, BaseHealthChecker, type BenchmarkChannel, type BenchmarkConfigurations, type BenchmarkErrorResult, type BenchmarkOptions, BenchmarkProfiler, type BenchmarkProfilerOptions, type BenchmarkResult, BenchmarkSnapshots, type BenchmarkSnapshotsOptions, type BenchmarkStats, type BenchmarkSuccessResult, BootContext, BootListener, CLICommand, CLICommandAction, CLICommandOption, CLICommandOptions, CLICommandPreload, CLICommandSource, CacheConnector, type CacheMiddlewareOptions, CachedRepositoryOptions, type CapturedMail, CascadeAdapter, CascadeQueryBuilder, ChunkCallback, ClosableServer, CloudDriver, CloudStorageDriverContract, CloudStorageDriverOptions, CloudStorageFileData, CommandActionData, type ConcurrencyLimitOptions, ConfigKey, ConfigKeyRegistry, ConfigName, ConfigRegistry, ConfigSpecialHandlers, ConflictError, Connector, ConnectorLifecyclePhase, ConnectorName, ConnectorPriority, ConnectorsManager, ConsoleChannel, ContainerTypes, CookieOptions, CursorPaginationOptions, CursorPaginationResult, DOSpacesDriver, DatabaseCacheDriver, type DatabaseCacheOptions, DatabaseConnector, DatabaseLog, DatabaseLogModel, DatabaseLogOptions, DecoratorLoweringPlugin, DefineResourceOptions, DeleteManyResult, EncryptionConfigurations, EncryptionPasswordConfigurations, Environment, EslintHealthChecker, EventSubscription, ExistsExceptCurrentIdRuleOptions, ExistsExceptCurrentUserRuleOptions, FastifyInstance, FileNamingStrategy, FileValidationOptions, FileValidator, FileVisibility, FilesOrchestrator, FilterFunction, FilterOperator, FilterOptions, FilterRule, FilterRules, ForbiddenError, GroupedRoutesOptions, HealthCheck, HealthStatus, HeraldConnector, HttpConfigurations, HttpConnector, HttpError, HttpErrorCodes, type IdempotencyOptions, Image, ImageFormat, ImageInput, ImageTransformCallback, ImageTransformConfig, ImageTransformOptions, type IpFilterOptions, ListOptions, LocalDriver, LocalStorageDriverOptions, LocalizedObject, LogConfigurations, LoggerConnector, MAIL_EVENTS, Mail, type MailAddress, type MailAttachment, type MailConfigurations, MailError, type MailErrorCode, type MailEvents, type MailMode, type MailOptions, type MailPriority, type MailResult, MailerConnector, type MailersConfig, type MaintenanceOptions, Middleware, MiddlewareResponse, MimeTypes, NoopChannel, type NormalizedMail, NotAcceptableError, NotAllowedError, NotificationsConnector, PaginationMode, PaginationResult, PartialMiddleware, PartialPick, PipelineOptions, PrefixConfig, PrefixOptions, PresignedOptions, PresignedUploadOptions, PutDirectoryOptions, PutDirectoryResult, PutFromUrlOptions, PutOptions, QueryBuilderContract, Queue, R2Driver, R2StorageDriverOptions, type RateLimitOptions, RegisterResource, RegisteredUseCase, RepositoryAdapterContract, RepositoryConfigurations, RepositoryEvent, RepositoryManager, RepositoryOptions, RepositoryOptionsWithCursor, RepositoryOptionsWithPages, Request, RequestContextStore, RequestController, RequestControllerContract, RequestEvent, RequestHandler, RequestHandlerType, RequestHandlerValidation, RequestLog, RequestMethod, ResolvedCLICommandOption, Resource, ResourceArraySchema, ResourceCastType, ResourceConstructor, ResourceContract, ResourceFieldBuilder, ResourceFieldBuilderDateOutputOptions, ResourceFieldConfig, ResourceMethod, ResourceNotFoundError, ResourceOutputValueCastType, ResourceSchema, ResourceSelfReference, Response, ResponseBodyValue, ResponseEvent, ResponseSSEController, ResponseSchema, ResponseStatus, ResponseStreamController, Restful, RestfulMiddleware, ReturnedResponse, Route, RouteOptions, RouteResource, Router, RouterGroupCallback, RouterStacks, RuntimeStrategy, S3Driver, type SESConfigurations, type SMTPConfigurations, SafeFetchOptions, SafeFetchResult, SaveAsOptions, SaveMode, SaveOptions, ScopedStorage, ScopedStorageContract, SeedResult, Seeder, SeederMetadata, SendBufferOptions, SendFileOptions, ServerError, ShutdownListener, SocketConnector, SocketOptions, Storage, StorageConfigurations, StorageConnector, StorageCopyEventPayload, StorageDriverConfig, StorageDriverContextStore, StorageDriverContract, StorageDriverName, StorageDriverRegistry, StorageDriverType, StorageError, StorageErrorOptions, StorageEventHandler, StorageEventPayload, StorageEventType, StorageFile, StorageFileData, StorageFileInfo, StorageManagerContract, StoragePutEventPayload, TemporaryTokenError, TemporaryTokenPayload, TemporaryTokenValidation, TypedAllRepositoryOptions, TypedRepositoryOptions, TypedRepositoryOptionsWithCursor, TypedRepositoryOptionsWithPages, TypescriptHealthChecker, UPLOADS_DEFAULTS, UnAuthorizedError, UniqueExceptCurrentIdRuleOptions, UniqueExceptCurrentUserRuleOptions, UploadedFile, UploadedFileImageOptions, UploadsConfigurations, UseCase, UseCaseAfterMiddleware, UseCaseBeforeMiddleware, UseCaseBroadcastChannel, UseCaseBroadcastEvent, UseCaseBroadcastOption, UseCaseConfigurations, UseCaseContext, UseCaseErrorResult, UseCaseEventsCallbacksMap, UseCaseGuard, UseCaseHandler, UseCaseOnExecutingContext, UseCaseResult, UseCaseRuntimeOptions, UseCaseWithSchema, ValidationConfiguration, WarlockConfig, WarlockConfigManager, WatermarkConfig, WhereOperator, addUseCaseHistory, anyMatch, app, appLog, appPath, assertMailCount, assertMailSent, assetsUrl, bootstrap, broadcastUseCaseResult, buildIdempotencyCacheKey, cachePath, captureMail, clearTestMailbox, closeAllMailers, closeMailer, closeServerWithTimeout, colors, command, config, configPath, configSpecialHandlers, connectorsManager, container, createHttpApplication, createRequestStore, decrypt, defaultHttpConfigurations, defineConfig, defineResource, displayEnvironmentMode, encrypt, env, environment, existsExceptCurrentIdRule, existsExceptCurrentUserRule, expectJson, fetchLatestVersion, fileExtensionRule, fileRule, fileTypeRule, filesOrchestrator, findMailsBySubject, findMailsTo, fireLifecycleEvent, fromRequest, generateMailId, getDefaultMailConfig, getHttpServer, getLastMail, getLocalized, getMailEventName, getMailMode, getMailboxSize, getMailer, getMailerConfig, getMimeType, getPoolStats, getSocketServer, getTestMailbox, getTestServerUrl, getUseCase, getUseCaseHistory, getUseCases, globalEventsCallbacksMap, globalUseCasesEvents, hashBody, hashPassword, health, hmacHash, httpConfig, imageRule, increaseUseCaseFailedCalls, increaseUseCaseSuccessCalls, ipMatches, isDevelopmentMode, isNewerVersion, isPrivateOrReservedIp, isProductionMode, isTestMode, isTestServerRunning, isUnknownTsExtensionError, isValidIdempotencyKey, loadS3, logResponse, logsPath, lowerStage3Decorators, mailEvents, measure, middleware, onCleanup, parseJsonResponse, parseSize, paths, promiseAllObject, publicPath, publicUrl, registerAppConfig, registerHttpPlugins, renderReact, renderReactMail, requestContext, resetMailConfig, resolveMailConfig, resolveWithinRoot, rootPath, router, runPipeline, safeFetchToBuffer, sanitizePath, seeder, sendMail, setBaseUrl, setEnvironment, setLogConfigurations, setMailConfigurations, setMailMode, setupTest, sleep, sluggable, srcPath, startHttpServer, startHttpTestServer, stopHttpApplication, stopHttpTestServer, storage, storageConfig, storageConfigurations, storageDriverContext, storagePath, t, tempPath, testDelete, testGet, testPatch, testPost, testPut, testRequest, toJson, uniqueExceptCurrentIdRule, uniqueExceptCurrentUserRule, uploadedFileMetadataSchema, uploadsConfig, uploadsPath, uploadsUrl, url, useCase, useComputedModel, useComputedSlug, useCurrentUser, useHashedPassword, useRequest, useRequestStore, verifyMailer, verifyPassword, warlockConfigManager, warlockPath, wasMailSentTo, wasMailSentWithSubject, wrapResponseInDataKey };
156
+ export { $registerUseCase, $unregisterUseCase, AccessConnector, AggregateExpressionInput, AggregateExpressions, AiConnector, AllRepositoryOptions, AppConfigurations, Application, BadRequestError, BadSchemaUseCaseError, BaseConnector, BaseHealthChecker, type BenchmarkChannel, type BenchmarkConfigurations, type BenchmarkErrorResult, type BenchmarkOptions, BenchmarkProfiler, type BenchmarkProfilerOptions, type BenchmarkResult, BenchmarkSnapshots, type BenchmarkSnapshotsOptions, type BenchmarkStats, type BenchmarkSuccessResult, BootContext, BootListener, CLICommand, CLICommandAction, CLICommandOption, CLICommandOptions, CLICommandPreload, CLICommandSource, CacheConnector, type CacheMiddlewareOptions, CachedRepositoryOptions, type CapturedMail, CascadeAdapter, CascadeQueryBuilder, ChunkCallback, ClosableServer, CloudDriver, CloudStorageDriverContract, CloudStorageDriverOptions, CloudStorageFileData, CommandActionData, type ConcurrencyLimitOptions, ConfigKey, ConfigKeyRegistry, ConfigName, ConfigRegistry, ConfigSpecialHandlers, ConflictError, Connector, ConnectorLifecyclePhase, ConnectorName, ConnectorPriority, ConnectorsManager, ConsoleChannel, ContainerTypes, CookieOptions, CursorPaginationOptions, CursorPaginationResult, DOSpacesDriver, DatabaseCacheDriver, type DatabaseCacheOptions, DatabaseConnector, DatabaseLog, DatabaseLogModel, DatabaseLogOptions, DecoratorLoweringPlugin, DefineResourceOptions, DeleteManyResult, EncryptionConfigurations, EncryptionPasswordConfigurations, Environment, EslintHealthChecker, EventSubscription, ExistsExceptCurrentIdRuleOptions, ExistsExceptCurrentUserRuleOptions, FastifyInstance, FileNamingStrategy, FileValidationOptions, FileValidator, FileVisibility, FilesOrchestrator, FilterFunction, FilterOperator, FilterOptions, FilterRule, FilterRules, ForbiddenError, GroupByFields, GroupedRoutesOptions, HealthCheck, HealthStatus, HeraldConnector, HttpConfigurations, HttpConnector, HttpError, HttpErrorCodes, type IdempotencyOptions, Image, ImageFormat, ImageInput, ImageTransformCallback, ImageTransformConfig, ImageTransformOptions, type IpFilterOptions, ListOptions, LocalDriver, LocalStorageDriverOptions, LocalizedObject, LogConfigurations, LoggerConnector, MAIL_EVENTS, Mail, type MailAddress, type MailAttachment, type MailConfigurations, MailError, type MailErrorCode, type MailEvents, type MailMode, type MailOptions, type MailPriority, type MailResult, MailerConnector, type MailersConfig, type MaintenanceOptions, Middleware, MiddlewareResponse, MimeTypes, NoopChannel, type NormalizedMail, NotAcceptableError, NotAllowedError, NotificationsConnector, PaginationMode, PaginationResult, PartialMiddleware, PartialPick, PipelineOptions, PrefixConfig, PrefixOptions, PresignedOptions, PresignedUploadOptions, PutDirectoryOptions, PutDirectoryResult, PutFromUrlOptions, PutOptions, QueryBuilderContract, Queue, R2Driver, R2StorageDriverOptions, type RateLimitOptions, RegisterResource, RegisteredUseCase, RepositoryAdapterContract, RepositoryConfigurations, RepositoryEvent, RepositoryManager, RepositoryOptions, RepositoryOptionsWithCursor, RepositoryOptionsWithPages, Request, RequestContextStore, RequestController, RequestControllerContract, RequestEvent, RequestHandler, RequestHandlerType, RequestHandlerValidation, RequestLog, RequestMethod, ResolvedCLICommandOption, Resource, ResourceArraySchema, ResourceCastType, ResourceConstructor, ResourceContract, ResourceFieldBuilder, ResourceFieldBuilderDateOutputOptions, ResourceFieldConfig, ResourceMethod, ResourceNotFoundError, ResourceOutputValueCastType, ResourceSchema, ResourceSelfReference, Response, ResponseBodyValue, ResponseEvent, ResponseSSEController, ResponseSchema, ResponseStatus, ResponseStreamController, Restful, RestfulMiddleware, ReturnedResponse, Route, RouteOptions, RouteResource, Router, RouterGroupCallback, RouterStacks, RuntimeStrategy, S3Driver, type SESConfigurations, type SMTPConfigurations, SafeFetchOptions, SafeFetchResult, SaveAsOptions, SaveMode, SaveOptions, ScopedStorage, ScopedStorageContract, SeedClock, SeedContext, SeedRecordRef, SeedResult, Seeder, SeederDependencyCycleError, SeederMetadata, SendBufferOptions, SendFileOptions, ServerError, ShutdownListener, SocketConnector, SocketOptions, Storage, StorageConfigurations, StorageConnector, StorageCopyEventPayload, StorageDriverConfig, StorageDriverContextStore, StorageDriverContract, StorageDriverName, StorageDriverRegistry, StorageDriverType, StorageError, StorageErrorOptions, StorageEventHandler, StorageEventPayload, StorageEventType, StorageFile, StorageFileData, StorageFileInfo, StorageManagerContract, StoragePutEventPayload, TemporaryTokenError, TemporaryTokenPayload, TemporaryTokenValidation, Track, TrackableModel, TypedAllRepositoryOptions, TypedRepositoryOptions, TypedRepositoryOptionsWithCursor, TypedRepositoryOptionsWithPages, TypescriptHealthChecker, UPLOADS_DEFAULTS, UnAuthorizedError, UniqueExceptCurrentIdRuleOptions, UniqueExceptCurrentUserRuleOptions, UnknownSeederDependencyError, UploadedFile, UploadedFileImageOptions, UploadsConfigurations, UseCase, UseCaseAfterMiddleware, UseCaseBeforeMiddleware, UseCaseBroadcastChannel, UseCaseBroadcastEvent, UseCaseBroadcastOption, UseCaseConfigurations, UseCaseContext, UseCaseErrorResult, UseCaseEventsCallbacksMap, UseCaseGuard, UseCaseHandler, UseCaseOnExecutingContext, UseCaseResult, UseCaseRuntimeOptions, UseCaseWithSchema, ValidationConfiguration, WarlockConfig, WarlockConfigManager, WatermarkConfig, WhereOperator, addUseCaseHistory, anyMatch, app, appLog, appPath, assertMailCount, assertMailSent, assetsUrl, bootstrap, broadcastUseCaseResult, buildIdempotencyCacheKey, cachePath, captureMail, clearTestMailbox, closeAllMailers, closeMailer, closeServerWithTimeout, colors, command, config, configPath, configSpecialHandlers, connectorsManager, container, createHttpApplication, createRequestStore, decrypt, defaultHttpConfigurations, defineConfig, defineResource, displayEnvironmentMode, encrypt, env, environment, existsExceptCurrentIdRule, existsExceptCurrentUserRule, expectJson, fetchLatestVersion, fileExtensionRule, fileRule, fileTypeRule, filesOrchestrator, findMailsBySubject, findMailsTo, fireLifecycleEvent, fromRequest, generateMailId, getDefaultMailConfig, getHttpServer, getLastMail, getLocalized, getMailEventName, getMailMode, getMailboxSize, getMailer, getMailerConfig, getMimeType, getPoolStats, getSocketServer, getTestMailbox, getTestServerUrl, getUseCase, getUseCaseHistory, getUseCases, globalEventsCallbacksMap, globalUseCasesEvents, hashBody, hashPassword, health, hmacHash, httpConfig, imageRule, increaseUseCaseFailedCalls, increaseUseCaseSuccessCalls, ipMatches, isDevelopmentMode, isNewerVersion, isPrivateOrReservedIp, isProductionMode, isTestMode, isTestServerRunning, isUnknownTsExtensionError, isValidIdempotencyKey, loadS3, logResponse, logsPath, lowerStage3Decorators, mailEvents, measure, middleware, onCleanup, parseJsonResponse, parseSize, paths, promiseAllObject, publicPath, publicUrl, registerAppConfig, registerHttpPlugins, renderReact, renderReactMail, requestContext, resetMailConfig, resolveMailConfig, resolveWithinRoot, rootPath, router, runPipeline, safeFetchToBuffer, sanitizePath, seeder, sendMail, setBaseUrl, setEnvironment, setLogConfigurations, setMailConfigurations, setMailMode, setupTest, sleep, sluggable, srcPath, startHttpServer, startHttpTestServer, stopHttpApplication, stopHttpTestServer, storage, storageConfig, storageConfigurations, storageDriverContext, storagePath, t, tempPath, testDelete, testGet, testPatch, testPost, testPut, testRequest, toJson, uniqueExceptCurrentIdRule, uniqueExceptCurrentUserRule, uploadedFileMetadataSchema, uploadsConfig, uploadsPath, uploadsUrl, url, useCase, useComputedModel, useComputedSlug, useCurrentUser, useHashedPassword, useRequest, useRequestStore, verifyMailer, verifyPassword, warlockConfigManager, warlockPath, wasMailSentTo, wasMailSentWithSubject, wrapResponseInDataKey };
156
157
  import "./config/types.mjs";
157
158
  import "./storage/types.mjs";
158
159
  import "./validation/types.mjs";
package/esm/index.mjs CHANGED
@@ -107,6 +107,7 @@ import { StorageConnector } from "./connectors/storage.connector.mjs";
107
107
  import { ConnectorsManager, connectorsManager } from "./connectors/connectors-manager.mjs";
108
108
  import "./connectors/index.mjs";
109
109
  import { seeder } from "./database/seeds/seeder.mjs";
110
+ import { SeederDependencyCycleError, UnknownSeederDependencyError } from "./database/seeds/seeder.errors.mjs";
110
111
  import { useComputedModel, useComputedSlug, useHashedPassword } from "./database/utils.mjs";
111
112
  import "./database/index.mjs";
112
113
  import { WarlockConfigManager, isUnknownTsExtensionError, warlockConfigManager } from "./warlock-config/warlock-config.manager.mjs";
@@ -153,4 +154,4 @@ import { colors } from "@mongez/copper";
153
154
 
154
155
  export * from "@mongez/localization"
155
156
 
156
- export { $registerUseCase, $unregisterUseCase, AccessConnector, AiConnector, Application, BadRequestError, BadSchemaUseCaseError, BaseConnector, BaseHealthChecker, BenchmarkProfiler, BenchmarkSnapshots, CLICommand, CacheConnector, CascadeAdapter, CascadeQueryBuilder, CloudDriver, ConfigSpecialHandlers, ConflictError, ConnectorLifecyclePhase, ConnectorPriority, ConnectorsManager, ConsoleChannel, DOSpacesDriver, DatabaseCacheDriver, DatabaseConnector, DatabaseLog, DatabaseLogModel, EslintHealthChecker, FileValidator, FilesOrchestrator, ForbiddenError, HeraldConnector, HttpConnector, HttpError, HttpErrorCodes, Image, LocalDriver, LoggerConnector, MAIL_EVENTS, Mail, MailError, MailerConnector, MimeTypes, NoopChannel, NotAcceptableError, NotAllowedError, NotificationsConnector, Queue, R2Driver, RegisterResource, RepositoryManager, Request, RequestController, RequestLog, Resource, ResourceFieldBuilder, ResourceNotFoundError, Response, ResponseStatus, Restful, Router, S3Driver, ScopedStorage, ServerError, SocketConnector, Storage, StorageConnector, StorageError, StorageFile, TypescriptHealthChecker, UPLOADS_DEFAULTS, UnAuthorizedError, UploadedFile, WarlockConfigManager, addUseCaseHistory, anyMatch, app, appLog, appPath, assertMailCount, assertMailSent, assetsUrl, bootstrap, broadcastUseCaseResult, buildIdempotencyCacheKey, cachePath, captureMail, clearTestMailbox, closeAllMailers, closeMailer, closeServerWithTimeout, colors, command, config, configPath, configSpecialHandlers, connectorsManager, container, createHttpApplication, createRequestStore, decrypt, defaultHttpConfigurations, defineConfig, defineResource, displayEnvironmentMode, encrypt, env, environment, existsExceptCurrentIdRule, existsExceptCurrentUserRule, expectJson, fetchLatestVersion, fileExtensionRule, fileRule, fileTypeRule, filesOrchestrator, findMailsBySubject, findMailsTo, fireLifecycleEvent, fromRequest, generateMailId, getDefaultMailConfig, getHttpServer, getLastMail, getLocalized, getMailEventName, getMailMode, getMailboxSize, getMailer, getMailerConfig, getMimeType, getPoolStats, getSocketServer, getTestMailbox, getTestServerUrl, getUseCase, getUseCaseHistory, getUseCases, globalEventsCallbacksMap, globalUseCasesEvents, hashBody, hashPassword, health, hmacHash, httpConfig, imageRule, increaseUseCaseFailedCalls, increaseUseCaseSuccessCalls, ipMatches, isDevelopmentMode, isNewerVersion, isPrivateOrReservedIp, isProductionMode, isTestMode, isTestServerRunning, isUnknownTsExtensionError, isValidIdempotencyKey, loadS3, logResponse, logsPath, lowerStage3Decorators, mailEvents, measure, middleware, onCleanup, parseJsonResponse, parseSize, paths, promiseAllObject, publicPath, publicUrl, registerAppConfig, registerHttpPlugins, renderReact, renderReactMail, requestContext, resetMailConfig, resolveMailConfig, resolveWithinRoot, rootPath, router, runPipeline, safeFetchToBuffer, sanitizePath, seeder, sendMail, setBaseUrl, setEnvironment, setLogConfigurations, setMailConfigurations, setMailMode, setupTest, sleep, sluggable, srcPath, startHttpServer, startHttpTestServer, stopHttpApplication, stopHttpTestServer, storage, storageConfig, storageConfigurations, storageDriverContext, storagePath, t, tempPath, testDelete, testGet, testPatch, testPost, testPut, testRequest, toJson, uniqueExceptCurrentIdRule, uniqueExceptCurrentUserRule, uploadedFileMetadataSchema, uploadsConfig, uploadsPath, uploadsUrl, url, useCase, useComputedModel, useComputedSlug, useCurrentUser, useHashedPassword, useRequest, useRequestStore, verifyMailer, verifyPassword, warlockConfigManager, warlockPath, wasMailSentTo, wasMailSentWithSubject, wrapResponseInDataKey };
157
+ export { $registerUseCase, $unregisterUseCase, AccessConnector, AiConnector, Application, BadRequestError, BadSchemaUseCaseError, BaseConnector, BaseHealthChecker, BenchmarkProfiler, BenchmarkSnapshots, CLICommand, CacheConnector, CascadeAdapter, CascadeQueryBuilder, CloudDriver, ConfigSpecialHandlers, ConflictError, ConnectorLifecyclePhase, ConnectorPriority, ConnectorsManager, ConsoleChannel, DOSpacesDriver, DatabaseCacheDriver, DatabaseConnector, DatabaseLog, DatabaseLogModel, EslintHealthChecker, FileValidator, FilesOrchestrator, ForbiddenError, HeraldConnector, HttpConnector, HttpError, HttpErrorCodes, Image, LocalDriver, LoggerConnector, MAIL_EVENTS, Mail, MailError, MailerConnector, MimeTypes, NoopChannel, NotAcceptableError, NotAllowedError, NotificationsConnector, Queue, R2Driver, RegisterResource, RepositoryManager, Request, RequestController, RequestLog, Resource, ResourceFieldBuilder, ResourceNotFoundError, Response, ResponseStatus, Restful, Router, S3Driver, ScopedStorage, SeederDependencyCycleError, ServerError, SocketConnector, Storage, StorageConnector, StorageError, StorageFile, TypescriptHealthChecker, UPLOADS_DEFAULTS, UnAuthorizedError, UnknownSeederDependencyError, UploadedFile, WarlockConfigManager, addUseCaseHistory, anyMatch, app, appLog, appPath, assertMailCount, assertMailSent, assetsUrl, bootstrap, broadcastUseCaseResult, buildIdempotencyCacheKey, cachePath, captureMail, clearTestMailbox, closeAllMailers, closeMailer, closeServerWithTimeout, colors, command, config, configPath, configSpecialHandlers, connectorsManager, container, createHttpApplication, createRequestStore, decrypt, defaultHttpConfigurations, defineConfig, defineResource, displayEnvironmentMode, encrypt, env, environment, existsExceptCurrentIdRule, existsExceptCurrentUserRule, expectJson, fetchLatestVersion, fileExtensionRule, fileRule, fileTypeRule, filesOrchestrator, findMailsBySubject, findMailsTo, fireLifecycleEvent, fromRequest, generateMailId, getDefaultMailConfig, getHttpServer, getLastMail, getLocalized, getMailEventName, getMailMode, getMailboxSize, getMailer, getMailerConfig, getMimeType, getPoolStats, getSocketServer, getTestMailbox, getTestServerUrl, getUseCase, getUseCaseHistory, getUseCases, globalEventsCallbacksMap, globalUseCasesEvents, hashBody, hashPassword, health, hmacHash, httpConfig, imageRule, increaseUseCaseFailedCalls, increaseUseCaseSuccessCalls, ipMatches, isDevelopmentMode, isNewerVersion, isPrivateOrReservedIp, isProductionMode, isTestMode, isTestServerRunning, isUnknownTsExtensionError, isValidIdempotencyKey, loadS3, logResponse, logsPath, lowerStage3Decorators, mailEvents, measure, middleware, onCleanup, parseJsonResponse, parseSize, paths, promiseAllObject, publicPath, publicUrl, registerAppConfig, registerHttpPlugins, renderReact, renderReactMail, requestContext, resetMailConfig, resolveMailConfig, resolveWithinRoot, rootPath, router, runPipeline, safeFetchToBuffer, sanitizePath, seeder, sendMail, setBaseUrl, setEnvironment, setLogConfigurations, setMailConfigurations, setMailMode, setupTest, sleep, sluggable, srcPath, startHttpServer, startHttpTestServer, stopHttpApplication, stopHttpTestServer, storage, storageConfig, storageConfigurations, storageDriverContext, storagePath, t, tempPath, testDelete, testGet, testPatch, testPost, testPut, testRequest, toJson, uniqueExceptCurrentIdRule, uniqueExceptCurrentUserRule, uploadedFileMetadataSchema, uploadsConfig, uploadsPath, uploadsUrl, url, useCase, useComputedModel, useComputedSlug, useCurrentUser, useHashedPassword, useRequest, useRequestStore, verifyMailer, verifyPassword, warlockConfigManager, warlockPath, wasMailSentTo, wasMailSentWithSubject, wrapResponseInDataKey };
@@ -1,5 +1,5 @@
1
1
  import { ChunkCallback, CursorPaginationOptions, CursorPaginationResult, FilterOptions, FilterRules, PaginationResult, WhereOperator } from "../../contracts/types.mjs";
2
- import { QueryBuilderContract as QueryBuilderContract$1 } from "../../contracts/query-builder.contract.mjs";
2
+ import { AggregateExpressions, GroupByFields, QueryBuilderContract as QueryBuilderContract$1 } from "../../contracts/query-builder.contract.mjs";
3
3
  import { Model, QueryBuilderContract } from "@warlock.js/cascade";
4
4
 
5
5
  //#region ../@warlock.js/core/src/repositories/adapters/cascade/cascade-query-builder.d.ts
@@ -111,6 +111,33 @@ declare class CascadeQueryBuilder<T extends Model> implements QueryBuilderContra
111
111
  * {@inheritDoc QueryBuilderContract.count}
112
112
  */
113
113
  count(): Promise<number>;
114
+ /**
115
+ * {@inheritDoc QueryBuilderContract.sum}
116
+ */
117
+ sum(field: string): Promise<number>;
118
+ /**
119
+ * {@inheritDoc QueryBuilderContract.avg}
120
+ */
121
+ avg(field: string): Promise<number>;
122
+ /**
123
+ * {@inheritDoc QueryBuilderContract.min}
124
+ */
125
+ min(field: string): Promise<number>;
126
+ /**
127
+ * {@inheritDoc QueryBuilderContract.max}
128
+ */
129
+ max(field: string): Promise<number>;
130
+ /**
131
+ * {@inheritDoc QueryBuilderContract.groupBy}
132
+ */
133
+ groupBy<R = Record<string, unknown>>(fields: GroupByFields, aggregates: AggregateExpressions): Promise<R[]>;
134
+ /**
135
+ * {@inheritDoc QueryBuilderContract.aggregate}
136
+ *
137
+ * Whole-set aggregation: groups with no group key so every matching record
138
+ * falls into a single group, then returns that one summary row.
139
+ */
140
+ aggregate<R = Record<string, unknown>>(aggregates: AggregateExpressions): Promise<R | null>;
114
141
  /**
115
142
  * {@inheritDoc QueryBuilderContract.paginate}
116
143
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cascade-query-builder.d.mts","names":[],"sources":["../../../../../../../../../@warlock.js/core/src/repositories/adapters/cascade/cascade-query-builder.ts"],"mappings":";;;;;;;;;AAsBA;;cAAa,mBAAA,WAA8B,KAAA,aAAkB,sBAAA,CAAqB,CAAA;EAAA,QAKrD,KAAA;EALqD;;;;cAKrD,KAAA,EAAO,oBAAA,CAA4B,CAAA;EA8CtB;;;EArCjC,KAAA,CAAM,KAAA,UAAe,KAAA;EACrB,KAAA,CAAM,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,KAAA;EAC9C,KAAA,CAAM,UAAA,EAAY,MAAA;EAClB,KAAA,CAAM,QAAA,GAAW,KAAA;EAiOM;;;EAvMvB,MAAA;EAqNqD;;;EA9MrD,OAAA,CAAQ,KAAA,UAAe,KAAA;EACvB,OAAA,CAAQ,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,KAAA;EAChD,OAAA,CAAQ,UAAA,EAAY,MAAA;EAwS8B;;;EApRlD,OAAA,CAAQ,KAAA,UAAe,MAAA;EAxEiD;;;EAgFxE,UAAA,CAAW,KAAA,UAAe,MAAA;EAhF0B;;;EAwFpD,SAAA,CAAU,KAAA;EAnFiB;;;EA2F3B,YAAA,CAAa,KAAA;EAlFP;;;EA0FN,YAAA,CAAa,KAAA,UAAe,KAAA;EAzFG;;;EAiG/B,SAAA,CAAU,KAAA,UAAe,OAAA;EAhGP;;;EAwGlB,SAAA,CAAU,MAAA,UAAgB,SAAA,YAAqB,KAAA;EAvGzC;;;EAmHN,MAAA,CAAO,MAAA;EACP,MAAA,IAAU,MAAA;EAlFV;;;EA+FA,QAAA,CAAS,MAAA;EACT,QAAA,IAAY,MAAA;EA/FZ;;;EAgHA,OAAA,CAAQ,KAAA,UAAe,SAAA;EA5Ff;;;EAoGR,MAAA,CAAO,OAAA,EAAS,MAAA;EA5FU;;;EAuG1B,MAAA,CAAO,KAAA;EAvFM;;;EAmGb,KAAA,CAAM,KAAA;EAnFN;;;EA2FA,MAAA,CAAO,MAAA;EAnFG;;;EA2FV,IAAA,CAAK,KAAA;EA/EE;;;EA0FP,YAAA,CAAa,OAAA,EAAS,WAAA,QAAmB,IAAA,OAAW,OAAA,EAAS,aAAA;EA5EpD;;;EAyFH,GAAA,IAAO,OAAA,CAAQ,CAAA;EAvEb;;;EA8EF,KAAA,IAAS,OAAA,CAAQ,CAAA;EAtEhB;;;EA6ED,KAAA,IAAS,OAAA;EAtDT;;;EA6DA,QAAA,CAAS,IAAA,UAAc,KAAA,WAAgB,OAAA,CAAQ,gBAAA,CAAiB,CAAA;EA7CjE;;;;;;;;;;;;;;;;;EA2EC,cAAA,CACX,OAAA,EAAS,uBAAA,GACR,OAAA,CAAQ,sBAAA,CAAuB,CAAA;EAhCkB;;;EA4FvC,KAAA,CAAM,IAAA,UAAc,QAAA,EAAU,aAAA,CAAc,CAAA,IAAK,OAAA;EA7DnD;;;EAwEJ,IAAA,CAAK,QAAA;EAvEsB;;;EA+E3B,QAAA,IAAY,SAAA;EAnBsC;;;EAoClD,KAAA;AAAA"}
1
+ {"version":3,"file":"cascade-query-builder.d.mts","names":[],"sources":["../../../../../../../../../@warlock.js/core/src/repositories/adapters/cascade/cascade-query-builder.ts"],"mappings":";;;;;;;;;AAwBA;;cAAa,mBAAA,WAA8B,KAAA,aAAkB,sBAAA,CAAqB,CAAA;EAAA,QAKrD,KAAA;EALqD;;;;cAKrD,KAAA,EAAO,oBAAA,CAA4B,CAAA;EA8CtB;;;EArCjC,KAAA,CAAM,KAAA,UAAe,KAAA;EACrB,KAAA,CAAM,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,KAAA;EAC9C,KAAA,CAAM,UAAA,EAAY,MAAA;EAClB,KAAA,CAAM,QAAA,GAAW,KAAA;EAiOM;;;EAvMvB,MAAA;EA4N0B;;;EArN1B,OAAA,CAAQ,KAAA,UAAe,KAAA;EACvB,OAAA,CAAQ,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,KAAA;EAChD,OAAA,CAAQ,UAAA,EAAY,MAAA;EA2OhB;;;EAvNJ,OAAA,CAAQ,KAAA,UAAe,MAAA;EAmOnB;;;EA3NJ,UAAA,CAAW,KAAA,UAAe,MAAA;EAmOmB;;;EA3N7C,SAAA,CAAU,KAAA;EA2Pd;;;EAnPI,YAAA,CAAa,KAAA;EAhGuC;;;EAwGpD,YAAA,CAAa,KAAA,UAAe,KAAA;EAxGM;;;EAgHlC,SAAA,CAAU,KAAA,UAAe,OAAA;;;;EAQzB,SAAA,CAAU,MAAA,UAAgB,SAAA,YAAqB,KAAA;EA1G/C;;;EAsHA,MAAA,CAAO,MAAA;EACP,MAAA,IAAU,MAAA;EAtHqB;;;EAmI/B,QAAA,CAAS,MAAA;EACT,QAAA,IAAY,MAAA;EAnIN;;;EAoJN,OAAA,CAAQ,KAAA,UAAe,SAAA;EAzHvB;;;EAiIA,MAAA,CAAO,OAAA,EAAS,MAAA;EAzHhB;;;EAoIA,MAAA,CAAO,KAAA;EApIyC;;;EAgJhD,KAAA,CAAM,KAAA;EA3HN;;;EAmIA,MAAA,CAAO,MAAA;EA3HI;;;EAmIX,IAAA,CAAK,KAAA;EAnHL;;;EA8HA,YAAA,CAAa,OAAA,EAAS,WAAA,QAAmB,IAAA,OAAW,OAAA,EAAS,aAAA;EAtHjC;;;EAmItB,GAAA,IAAO,OAAA,CAAQ,CAAA;EAnHrB;;;EA0HM,KAAA,IAAS,OAAA,CAAQ,CAAA;EA9GvB;;;EAqHM,KAAA,IAAS,OAAA;EAvGf;;;EA8GM,GAAA,CAAI,KAAA,WAAgB,OAAA;EA5F1B;;;EAmGM,GAAA,CAAI,KAAA,WAAgB,OAAA;EA3FV;;;EAkGV,GAAA,CAAI,KAAA,WAAgB,OAAA;EA3E1B;;;EAkFM,GAAA,CAAI,KAAA,WAAgB,OAAA;EAlE1B;;;EAyEM,OAAA,KAAY,MAAA,mBACvB,MAAA,EAAQ,aAAA,EACR,UAAA,EAAY,oBAAA,GACX,OAAA,CAAQ,CAAA;EAjES;;;;;;EA2EP,SAAA,KAAc,MAAA,mBACzB,UAAA,EAAY,oBAAA,GACX,OAAA,CAAQ,CAAA;EAzDE;;;EAiEA,QAAA,CAAS,IAAA,UAAc,KAAA,WAAgB,OAAA,CAAQ,gBAAA,CAAiB,CAAA;EA1DvD;;;;;;;;;;;;;;;;;EAwFT,cAAA,CACX,OAAA,EAAS,uBAAA,GACR,OAAA,CAAQ,sBAAA,CAAuB,CAAA;EArDpB;;;EAiHD,KAAA,CAAM,IAAA,UAAc,QAAA,EAAU,aAAA,CAAc,CAAA,IAAK,OAAA;EAtGjD;;;EAiHN,IAAA,CAAK,QAAA;EAhHV;;;EAwHK,QAAA,IAAY,SAAA;EA/GG;;;EAgIf,KAAA;AAAA"}
@@ -160,6 +160,45 @@ var CascadeQueryBuilder = class CascadeQueryBuilder {
160
160
  return this.query.count();
161
161
  }
162
162
  /**
163
+ * {@inheritDoc QueryBuilderContract.sum}
164
+ */
165
+ async sum(field) {
166
+ return this.query.sum(field);
167
+ }
168
+ /**
169
+ * {@inheritDoc QueryBuilderContract.avg}
170
+ */
171
+ async avg(field) {
172
+ return this.query.avg(field);
173
+ }
174
+ /**
175
+ * {@inheritDoc QueryBuilderContract.min}
176
+ */
177
+ async min(field) {
178
+ return this.query.min(field);
179
+ }
180
+ /**
181
+ * {@inheritDoc QueryBuilderContract.max}
182
+ */
183
+ async max(field) {
184
+ return this.query.max(field);
185
+ }
186
+ /**
187
+ * {@inheritDoc QueryBuilderContract.groupBy}
188
+ */
189
+ async groupBy(fields, aggregates) {
190
+ return this.query.groupBy(fields, aggregates).get();
191
+ }
192
+ /**
193
+ * {@inheritDoc QueryBuilderContract.aggregate}
194
+ *
195
+ * Whole-set aggregation: groups with no group key so every matching record
196
+ * falls into a single group, then returns that one summary row.
197
+ */
198
+ async aggregate(aggregates) {
199
+ return (await this.query.groupBy([], aggregates).get())[0] ?? null;
200
+ }
201
+ /**
163
202
  * {@inheritDoc QueryBuilderContract.paginate}
164
203
  */
165
204
  async paginate(page, limit) {
@@ -1 +1 @@
1
- {"version":3,"file":"cascade-query-builder.mjs","names":[],"sources":["../../../../../../../../../@warlock.js/core/src/repositories/adapters/cascade/cascade-query-builder.ts"],"sourcesContent":["import type {\n QueryBuilderContract as CascadeQueryBuilderContract,\n Model,\n} from \"@warlock.js/cascade\";\nimport type {\n ChunkCallback,\n CursorPaginationOptions,\n CursorPaginationResult,\n FilterOptions,\n FilterRules,\n PaginationResult,\n QueryBuilderContract,\n WhereOperator,\n} from \"../../contracts\";\nimport { FilterApplicator } from \"./filter-applicator\";\n\n/**\n * Cascade query builder wrapper\n * Wraps Cascade-Next's ModelAggregate to implement QueryBuilderContract\n *\n * @template T - The model instance type\n */\nexport class CascadeQueryBuilder<T extends Model> implements QueryBuilderContract<T> {\n /**\n * Constructor\n * @param query - Cascade-Next QueryBuilder instance\n */\n public constructor(private query: CascadeQueryBuilderContract<T>) {}\n\n // ============================================================================\n // WHERE CLAUSES\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.where}\n */\n public where(field: string, value: any): this;\n public where(field: string, operator: WhereOperator, value: any): this;\n public where(conditions: Record<string, any>): this;\n public where(callback: (query: this) => void): this;\n public where(\n fieldOrConditionsOrCallback: string | Record<string, any> | ((query: this) => void),\n operatorOrValue?: WhereOperator | any,\n value?: any,\n ): this {\n if (typeof fieldOrConditionsOrCallback === \"function\") {\n // Callback\n fieldOrConditionsOrCallback(this);\n } else if (typeof fieldOrConditionsOrCallback === \"object\") {\n // Object conditions\n this.query.where(fieldOrConditionsOrCallback);\n } else if (value !== undefined) {\n // Field, operator, value\n this.query.where(fieldOrConditionsOrCallback, operatorOrValue, value);\n } else {\n // Field, value\n this.query.where(fieldOrConditionsOrCallback, operatorOrValue);\n }\n\n return this;\n }\n\n /**\n * Pretty display the query in terminal\n */\n public pretty() {\n return this.query.pretty();\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.orWhere}\n */\n public orWhere(field: string, value: any): this;\n public orWhere(field: string, operator: WhereOperator, value: any): this;\n public orWhere(conditions: Record<string, any>): this;\n public orWhere(\n fieldOrConditions: string | Record<string, any>,\n operatorOrValue?: WhereOperator | any,\n value?: any,\n ): this {\n if (typeof fieldOrConditions === \"object\") {\n this.query.orWhere(fieldOrConditions);\n } else if (value !== undefined) {\n this.query.orWhere(fieldOrConditions, operatorOrValue, value);\n } else {\n this.query.orWhere(fieldOrConditions, operatorOrValue);\n }\n\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.whereIn}\n */\n public whereIn(field: string, values: any[]): this {\n this.query.whereIn(field, values);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.whereNotIn}\n */\n public whereNotIn(field: string, values: any[]): this {\n this.query.whereNotIn(field, values);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.whereNull}\n */\n public whereNull(field: string): this {\n this.query.whereNull(field);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.whereNotNull}\n */\n public whereNotNull(field: string): this {\n this.query.whereNotNull(field);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.whereBetween}\n */\n public whereBetween(field: string, range: [any, any]): this {\n this.query.whereBetween(field, range);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.whereLike}\n */\n public whereLike(field: string, pattern: string): this {\n this.query.whereLike(field, pattern);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.similarTo}\n */\n public similarTo(column: string, embedding: number[], alias?: string): this {\n this.query.similarTo(column, embedding, alias);\n return this;\n }\n\n // ============================================================================\n // SELECT / PROJECTION\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.select}\n */\n public select(fields: string[]): this;\n public select(...fields: string[]): this;\n public select(...fields: any[]): this {\n if (Array.isArray(fields[0])) {\n this.query.select(fields[0]);\n } else {\n this.query.select(fields);\n }\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.deselect}\n */\n public deselect(fields: string[]): this;\n public deselect(...fields: string[]): this;\n public deselect(...fields: any[]): this {\n if (Array.isArray(fields[0])) {\n this.query.deselect(fields[0]);\n } else {\n this.query.deselect(fields);\n }\n return this;\n }\n\n // ============================================================================\n // ORDERING\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.orderBy}\n */\n public orderBy(field: string, direction: \"asc\" | \"desc\" = \"asc\"): this {\n this.query.orderBy(field, direction);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.sortBy}\n */\n public sortBy(orderBy: Record<string, \"asc\" | \"desc\">): this {\n // Apply each order clause individually\n for (const [field, direction] of Object.entries(orderBy)) {\n this.query.orderBy(field, direction);\n }\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.random}\n */\n public random(limit: number): this {\n this.query.orderByRandom(limit);\n return this;\n }\n\n // ============================================================================\n // LIMITING\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.limit}\n */\n public limit(limit: number): this {\n this.query.limit(limit);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.offset}\n */\n public offset(offset: number): this {\n this.query.offset(offset);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.skip}\n */\n public skip(count: number): this {\n return this.offset(count);\n }\n\n // ============================================================================\n // FILTERING (Repository-specific)\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.applyFilters}\n */\n public applyFilters(filters: FilterRules<this>, data: any, options: FilterOptions): this {\n const applicator = new FilterApplicator();\n applicator.apply(this.query as any, filters, data, options);\n return this;\n }\n\n // ============================================================================\n // EXECUTION\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.get}\n */\n public async get(): Promise<T[]> {\n return this.query.get();\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.first}\n */\n public async first(): Promise<T | null> {\n return this.query.first();\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.count}\n */\n public async count(): Promise<number> {\n return this.query.count();\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.paginate}\n */\n public async paginate(page: number, limit: number): Promise<PaginationResult<T>> {\n const result = await this.query.paginate({ limit, page });\n\n // Convert Cascade-Next pagination to repository format\n return {\n data: result.data,\n pagination: {\n ...result.pagination,\n result: result.data.length,\n },\n };\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.cursorPaginate}\n *\n * NOTE: This method is a pure executor.\n * The caller (e.g. RepositoryManager._listImpl) is responsible for applying\n * the cursor WHERE condition and ORDER BY BEFORE calling this method,\n * so that the cursor column is always the primary sort key.\n *\n * For a forward page (`direction: \"next\"`) the caller sorts ASC and filters\n * `> cursor`, so the rows already arrive in ascending cursor order.\n *\n * For a backward page (`direction: \"prev\"`) the caller sorts DESC and filters\n * `< cursor`, so rows arrive in DESCENDING order. We re-reverse the trimmed\n * page back to ascending so callers always receive a page in the same\n * (ascending) order regardless of direction, and we derive the next/prev\n * cursors from the page boundaries accordingly.\n */\n public async cursorPaginate(\n options: CursorPaginationOptions,\n ): Promise<CursorPaginationResult<T>> {\n const { limit, cursorColumn = \"id\", direction = \"next\" } = options;\n\n // Fetch limit + 1 to detect whether more pages exist in the scan direction.\n this.limit(limit + 1);\n\n const results = await this.get();\n const hasMore = results.length > limit;\n\n // Drop the extra record used for the hasMore check. It always sits at the\n // tail because the caller ordered the scan so the next-to-fetch row is last.\n const trimmed = hasMore ? results.slice(0, limit) : results;\n\n const cursorOf = (record: T | undefined): string | number | undefined =>\n record === undefined ? undefined : ((record as any)[cursorColumn] as string | number);\n\n if (direction === \"prev\") {\n // Scan came back DESC; present it ascending.\n const documents = [...trimmed].reverse();\n const first = documents[0];\n const last = documents[documents.length - 1];\n\n return {\n data: documents,\n pagination: {\n limit,\n result: documents.length,\n hasMore,\n // Going further back is only possible when the backward scan saw more\n // rows than this page; the boundary is this page's first (smallest) row.\n prevCursor: hasMore ? cursorOf(first) : undefined,\n // Going forward always resumes after this page's last (largest) row.\n nextCursor: cursorOf(last),\n },\n };\n }\n\n // Forward page — rows already ascending.\n const documents = trimmed;\n const first = documents[0];\n const last = documents[documents.length - 1];\n\n return {\n data: documents,\n pagination: {\n limit,\n result: documents.length,\n hasMore,\n // Going forward is only possible when the forward scan saw more rows\n // than this page; the boundary is this page's last (largest) row.\n nextCursor: hasMore ? cursorOf(last) : undefined,\n // Going back resumes before this page's first (smallest) row.\n prevCursor: cursorOf(first),\n },\n };\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.chunk}\n */\n public async chunk(size: number, callback: ChunkCallback<T>): Promise<void> {\n return this.query.chunk(size, callback);\n }\n\n // ============================================================================\n // UTILITIES\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.with}\n */\n public with(relation: string): this {\n this.query.with(relation);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.joinWith}\n */\n public joinWith(...relations: string[]): this {\n if (this.query.joinWith) {\n this.query.joinWith(...relations);\n } else {\n console.warn(\n \"[Repository] joinWith is not supported by the underlying query builder. Falling back to with.\",\n );\n for (const relation of relations) {\n this.query.with(relation);\n }\n }\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.clone}\n */\n public clone(): this {\n return new CascadeQueryBuilder(this.query.clone()) as this;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cascade-query-builder.mjs","names":[],"sources":["../../../../../../../../../@warlock.js/core/src/repositories/adapters/cascade/cascade-query-builder.ts"],"sourcesContent":["import type {\n QueryBuilderContract as CascadeQueryBuilderContract,\n Model,\n} from \"@warlock.js/cascade\";\nimport type {\n AggregateExpressions,\n ChunkCallback,\n CursorPaginationOptions,\n CursorPaginationResult,\n FilterOptions,\n FilterRules,\n GroupByFields,\n PaginationResult,\n QueryBuilderContract,\n WhereOperator,\n} from \"../../contracts\";\nimport { FilterApplicator } from \"./filter-applicator\";\n\n/**\n * Cascade query builder wrapper\n * Wraps Cascade-Next's ModelAggregate to implement QueryBuilderContract\n *\n * @template T - The model instance type\n */\nexport class CascadeQueryBuilder<T extends Model> implements QueryBuilderContract<T> {\n /**\n * Constructor\n * @param query - Cascade-Next QueryBuilder instance\n */\n public constructor(private query: CascadeQueryBuilderContract<T>) {}\n\n // ============================================================================\n // WHERE CLAUSES\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.where}\n */\n public where(field: string, value: any): this;\n public where(field: string, operator: WhereOperator, value: any): this;\n public where(conditions: Record<string, any>): this;\n public where(callback: (query: this) => void): this;\n public where(\n fieldOrConditionsOrCallback: string | Record<string, any> | ((query: this) => void),\n operatorOrValue?: WhereOperator | any,\n value?: any,\n ): this {\n if (typeof fieldOrConditionsOrCallback === \"function\") {\n // Callback\n fieldOrConditionsOrCallback(this);\n } else if (typeof fieldOrConditionsOrCallback === \"object\") {\n // Object conditions\n this.query.where(fieldOrConditionsOrCallback);\n } else if (value !== undefined) {\n // Field, operator, value\n this.query.where(fieldOrConditionsOrCallback, operatorOrValue, value);\n } else {\n // Field, value\n this.query.where(fieldOrConditionsOrCallback, operatorOrValue);\n }\n\n return this;\n }\n\n /**\n * Pretty display the query in terminal\n */\n public pretty() {\n return this.query.pretty();\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.orWhere}\n */\n public orWhere(field: string, value: any): this;\n public orWhere(field: string, operator: WhereOperator, value: any): this;\n public orWhere(conditions: Record<string, any>): this;\n public orWhere(\n fieldOrConditions: string | Record<string, any>,\n operatorOrValue?: WhereOperator | any,\n value?: any,\n ): this {\n if (typeof fieldOrConditions === \"object\") {\n this.query.orWhere(fieldOrConditions);\n } else if (value !== undefined) {\n this.query.orWhere(fieldOrConditions, operatorOrValue, value);\n } else {\n this.query.orWhere(fieldOrConditions, operatorOrValue);\n }\n\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.whereIn}\n */\n public whereIn(field: string, values: any[]): this {\n this.query.whereIn(field, values);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.whereNotIn}\n */\n public whereNotIn(field: string, values: any[]): this {\n this.query.whereNotIn(field, values);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.whereNull}\n */\n public whereNull(field: string): this {\n this.query.whereNull(field);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.whereNotNull}\n */\n public whereNotNull(field: string): this {\n this.query.whereNotNull(field);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.whereBetween}\n */\n public whereBetween(field: string, range: [any, any]): this {\n this.query.whereBetween(field, range);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.whereLike}\n */\n public whereLike(field: string, pattern: string): this {\n this.query.whereLike(field, pattern);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.similarTo}\n */\n public similarTo(column: string, embedding: number[], alias?: string): this {\n this.query.similarTo(column, embedding, alias);\n return this;\n }\n\n // ============================================================================\n // SELECT / PROJECTION\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.select}\n */\n public select(fields: string[]): this;\n public select(...fields: string[]): this;\n public select(...fields: any[]): this {\n if (Array.isArray(fields[0])) {\n this.query.select(fields[0]);\n } else {\n this.query.select(fields);\n }\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.deselect}\n */\n public deselect(fields: string[]): this;\n public deselect(...fields: string[]): this;\n public deselect(...fields: any[]): this {\n if (Array.isArray(fields[0])) {\n this.query.deselect(fields[0]);\n } else {\n this.query.deselect(fields);\n }\n return this;\n }\n\n // ============================================================================\n // ORDERING\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.orderBy}\n */\n public orderBy(field: string, direction: \"asc\" | \"desc\" = \"asc\"): this {\n this.query.orderBy(field, direction);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.sortBy}\n */\n public sortBy(orderBy: Record<string, \"asc\" | \"desc\">): this {\n // Apply each order clause individually\n for (const [field, direction] of Object.entries(orderBy)) {\n this.query.orderBy(field, direction);\n }\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.random}\n */\n public random(limit: number): this {\n this.query.orderByRandom(limit);\n return this;\n }\n\n // ============================================================================\n // LIMITING\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.limit}\n */\n public limit(limit: number): this {\n this.query.limit(limit);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.offset}\n */\n public offset(offset: number): this {\n this.query.offset(offset);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.skip}\n */\n public skip(count: number): this {\n return this.offset(count);\n }\n\n // ============================================================================\n // FILTERING (Repository-specific)\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.applyFilters}\n */\n public applyFilters(filters: FilterRules<this>, data: any, options: FilterOptions): this {\n const applicator = new FilterApplicator();\n applicator.apply(this.query as any, filters, data, options);\n return this;\n }\n\n // ============================================================================\n // EXECUTION\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.get}\n */\n public async get(): Promise<T[]> {\n return this.query.get();\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.first}\n */\n public async first(): Promise<T | null> {\n return this.query.first();\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.count}\n */\n public async count(): Promise<number> {\n return this.query.count();\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.sum}\n */\n public async sum(field: string): Promise<number> {\n return this.query.sum(field);\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.avg}\n */\n public async avg(field: string): Promise<number> {\n return this.query.avg(field);\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.min}\n */\n public async min(field: string): Promise<number> {\n return this.query.min(field);\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.max}\n */\n public async max(field: string): Promise<number> {\n return this.query.max(field);\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.groupBy}\n */\n public async groupBy<R = Record<string, unknown>>(\n fields: GroupByFields,\n aggregates: AggregateExpressions,\n ): Promise<R[]> {\n return this.query.groupBy(fields, aggregates).get<R>();\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.aggregate}\n *\n * Whole-set aggregation: groups with no group key so every matching record\n * falls into a single group, then returns that one summary row.\n */\n public async aggregate<R = Record<string, unknown>>(\n aggregates: AggregateExpressions,\n ): Promise<R | null> {\n const rows = await this.query.groupBy([], aggregates).get<R>();\n return rows[0] ?? null;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.paginate}\n */\n public async paginate(page: number, limit: number): Promise<PaginationResult<T>> {\n const result = await this.query.paginate({ limit, page });\n\n // Convert Cascade-Next pagination to repository format\n return {\n data: result.data,\n pagination: {\n ...result.pagination,\n result: result.data.length,\n },\n };\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.cursorPaginate}\n *\n * NOTE: This method is a pure executor.\n * The caller (e.g. RepositoryManager._listImpl) is responsible for applying\n * the cursor WHERE condition and ORDER BY BEFORE calling this method,\n * so that the cursor column is always the primary sort key.\n *\n * For a forward page (`direction: \"next\"`) the caller sorts ASC and filters\n * `> cursor`, so the rows already arrive in ascending cursor order.\n *\n * For a backward page (`direction: \"prev\"`) the caller sorts DESC and filters\n * `< cursor`, so rows arrive in DESCENDING order. We re-reverse the trimmed\n * page back to ascending so callers always receive a page in the same\n * (ascending) order regardless of direction, and we derive the next/prev\n * cursors from the page boundaries accordingly.\n */\n public async cursorPaginate(\n options: CursorPaginationOptions,\n ): Promise<CursorPaginationResult<T>> {\n const { limit, cursorColumn = \"id\", direction = \"next\" } = options;\n\n // Fetch limit + 1 to detect whether more pages exist in the scan direction.\n this.limit(limit + 1);\n\n const results = await this.get();\n const hasMore = results.length > limit;\n\n // Drop the extra record used for the hasMore check. It always sits at the\n // tail because the caller ordered the scan so the next-to-fetch row is last.\n const trimmed = hasMore ? results.slice(0, limit) : results;\n\n const cursorOf = (record: T | undefined): string | number | undefined =>\n record === undefined ? undefined : ((record as any)[cursorColumn] as string | number);\n\n if (direction === \"prev\") {\n // Scan came back DESC; present it ascending.\n const documents = [...trimmed].reverse();\n const first = documents[0];\n const last = documents[documents.length - 1];\n\n return {\n data: documents,\n pagination: {\n limit,\n result: documents.length,\n hasMore,\n // Going further back is only possible when the backward scan saw more\n // rows than this page; the boundary is this page's first (smallest) row.\n prevCursor: hasMore ? cursorOf(first) : undefined,\n // Going forward always resumes after this page's last (largest) row.\n nextCursor: cursorOf(last),\n },\n };\n }\n\n // Forward page — rows already ascending.\n const documents = trimmed;\n const first = documents[0];\n const last = documents[documents.length - 1];\n\n return {\n data: documents,\n pagination: {\n limit,\n result: documents.length,\n hasMore,\n // Going forward is only possible when the forward scan saw more rows\n // than this page; the boundary is this page's last (largest) row.\n nextCursor: hasMore ? cursorOf(last) : undefined,\n // Going back resumes before this page's first (smallest) row.\n prevCursor: cursorOf(first),\n },\n };\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.chunk}\n */\n public async chunk(size: number, callback: ChunkCallback<T>): Promise<void> {\n return this.query.chunk(size, callback);\n }\n\n // ============================================================================\n // UTILITIES\n // ============================================================================\n\n /**\n * {@inheritDoc QueryBuilderContract.with}\n */\n public with(relation: string): this {\n this.query.with(relation);\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.joinWith}\n */\n public joinWith(...relations: string[]): this {\n if (this.query.joinWith) {\n this.query.joinWith(...relations);\n } else {\n console.warn(\n \"[Repository] joinWith is not supported by the underlying query builder. Falling back to with.\",\n );\n for (const relation of relations) {\n this.query.with(relation);\n }\n }\n return this;\n }\n\n /**\n * {@inheritDoc QueryBuilderContract.clone}\n */\n public clone(): this {\n return new CascadeQueryBuilder(this.query.clone()) as this;\n }\n}\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import { RepositoryAdapterContract } from "./repository-adapter.contract.mjs";
2
2
  import { AllRepositoryOptions, CachedRepositoryOptions, ChunkCallback, CursorPaginationOptions, CursorPaginationResult, FilterFunction, FilterOperator, FilterOptions, FilterRule, FilterRules, PaginationMode, PaginationResult, RepositoryConfigurations, RepositoryEvent, RepositoryOptions, RepositoryOptionsWithCursor, RepositoryOptionsWithPages, SaveMode, TypedAllRepositoryOptions, TypedRepositoryOptions, TypedRepositoryOptionsWithCursor, TypedRepositoryOptionsWithPages, WhereOperator } from "./types.mjs";
3
- import { QueryBuilderContract } from "./query-builder.contract.mjs";
3
+ import { AggregateExpressionInput, AggregateExpressions, GroupByFields, QueryBuilderContract } from "./query-builder.contract.mjs";
@@ -1,6 +1,29 @@
1
1
  import { ChunkCallback, CursorPaginationOptions, CursorPaginationResult, FilterOptions, FilterRules, PaginationResult, WhereOperator } from "./types.mjs";
2
2
 
3
3
  //#region ../@warlock.js/core/src/repositories/contracts/query-builder.contract.d.ts
4
+ /**
5
+ * Field(s) to group aggregated results by.
6
+ *
7
+ * ORM-agnostic mirror of the underlying driver's group-by payload: a single
8
+ * field name, a list of field names, or a driver-specific object form.
9
+ */
10
+ type GroupByFields = string | string[] | Record<string, unknown> | Array<Record<string, unknown>>;
11
+ /**
12
+ * A single aggregate expression in a `groupBy` / `aggregate` projection.
13
+ *
14
+ * Either an abstract, cross-driver expression (e.g. produced by Cascade's
15
+ * `$agg.count()` / `$agg.sum("amount")`) or a raw, driver-specific shape
16
+ * (e.g. MongoDB `{ $sum: "$amount" }`, SQL `"SUM(amount)"`). The repository
17
+ * layer is agnostic to which form is used and forwards it verbatim.
18
+ */
19
+ type AggregateExpressionInput = string | Record<string, unknown> | unknown;
20
+ /**
21
+ * Map of result aliases to aggregate expressions.
22
+ *
23
+ * @example
24
+ * { count: $agg.count(), total: $agg.sum("total") }
25
+ */
26
+ type AggregateExpressions = Record<string, AggregateExpressionInput>;
4
27
  /**
5
28
  * Query builder contract for building database queries
6
29
  * This interface is ORM-agnostic and can be implemented by any data source adapter
@@ -244,6 +267,69 @@ interface QueryBuilderContract<T> {
244
267
  * @returns Promise resolving to count
245
268
  */
246
269
  count(): Promise<number>;
270
+ /**
271
+ * Sum a numeric field across all matching records.
272
+ *
273
+ * @param field - Field name to sum
274
+ * @returns Promise resolving to the numeric sum (0 when no records match)
275
+ *
276
+ * @example
277
+ * await query.where("status", "paid").sum("total")
278
+ */
279
+ sum(field: string): Promise<number>;
280
+ /**
281
+ * Average a numeric field across all matching records.
282
+ *
283
+ * @param field - Field name to average
284
+ * @returns Promise resolving to the numeric average (0 when no records match)
285
+ *
286
+ * @example
287
+ * await query.where("status", "paid").avg("total")
288
+ */
289
+ avg(field: string): Promise<number>;
290
+ /**
291
+ * Minimum value of a field across all matching records.
292
+ *
293
+ * @param field - Field name
294
+ * @returns Promise resolving to the minimum value (0 when no records match)
295
+ */
296
+ min(field: string): Promise<number>;
297
+ /**
298
+ * Maximum value of a field across all matching records.
299
+ *
300
+ * @param field - Field name
301
+ * @returns Promise resolving to the maximum value (0 when no records match)
302
+ */
303
+ max(field: string): Promise<number>;
304
+ /**
305
+ * Group matching records by one or more fields and compute aggregates.
306
+ *
307
+ * This is a terminal executor: it applies the grouping + aggregate
308
+ * projection and returns the grouped rows.
309
+ *
310
+ * @template R - Shape of each grouped row
311
+ * @param fields - Field(s) to group by
312
+ * @param aggregates - Map of result aliases to aggregate expressions
313
+ * @returns Promise resolving to the array of grouped rows
314
+ *
315
+ * @example
316
+ * await query.groupBy("status", { count: $agg.count(), total: $agg.sum("total") })
317
+ */
318
+ groupBy<R = Record<string, unknown>>(fields: GroupByFields, aggregates: AggregateExpressions): Promise<R[]>;
319
+ /**
320
+ * Compute aggregates over the whole matching set as a single summary row.
321
+ *
322
+ * Equivalent to a `groupBy` with no group key — every matching record falls
323
+ * into one group and the aggregate projection is returned as one object.
324
+ *
325
+ * @template R - Shape of the summary row
326
+ * @param aggregates - Map of result aliases to aggregate expressions
327
+ * @returns Promise resolving to the single summary row (or `null` when empty)
328
+ *
329
+ * @example
330
+ * await query.aggregate({ total: $agg.sum("total"), avg: $agg.avg("total") })
331
+ */
332
+ aggregate<R = Record<string, unknown>>(aggregates: AggregateExpressions): Promise<R | null>;
247
333
  /**
248
334
  * Execute query with pagination
249
335
  *
@@ -320,5 +406,5 @@ interface QueryBuilderContract<T> {
320
406
  similarTo(column: string, embedding: number[], alias?: string): this;
321
407
  }
322
408
  //#endregion
323
- export { QueryBuilderContract };
409
+ export { AggregateExpressionInput, AggregateExpressions, GroupByFields, QueryBuilderContract };
324
410
  //# sourceMappingURL=query-builder.contract.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.contract.d.mts","names":[],"sources":["../../../../../../../../@warlock.js/core/src/repositories/contracts/query-builder.contract.ts"],"mappings":";;;;;AAgBA;;;;UAAiB,oBAAA;EAqEkB;;;;;;;;;;EAtDjC,KAAA,CAAM,KAAA,UAAe,KAAA;EAyR0B;;;;;;;;;;;EA5Q/C,KAAA,CAAM,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,KAAA;EAb9C;;;;;;;;;EAwBA,KAAA,CAAM,UAAA,EAAY,MAAA;EAAZ;;;;;;;;;EAWN,KAAA,CAAM,QAAA,GAAW,KAAA;EAmBM;;;;;;;EAVvB,OAAA,CAAQ,KAAA,UAAe,KAAA;EAuCvB;;;;;;;;EA7BA,OAAA,CAAQ,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,KAAA;EAyDpB;;;;;;EAjD5B,OAAA,CAAQ,UAAA,EAAY,MAAA;EA4FpB;;;;;;;;;;EAhFA,OAAA,CAAQ,KAAA,UAAe,MAAA;EA2HhB;;;;;;;EAlHP,UAAA,CAAW,KAAA,UAAe,MAAA;EAsJrB;;;;;;EA9IL,SAAA,CAAU,KAAA;EAuKV;;;;;;EA/JA,YAAA,CAAa,KAAA;EA6KJ;;;;;;;;;;EAjKT,YAAA,CAAa,KAAA,UAAe,KAAA;EAsL8B;;;;;;;;;;EA1K1D,SAAA,CAAU,KAAA,UAAe,OAAA;EA6MZ;;;EAxMb,MAAA;EAqO0B;;;AAAmC;;;;;;EAtN7D,MAAA,CAAO,MAAA;;;;;;;;;;EAWP,MAAA,IAAU,MAAA;;;;;;;EAQV,QAAA,CAAS,MAAA;;;;;;;EAQT,QAAA,IAAY,MAAA;;;;;;;;;;;EAgBZ,OAAA,CAAQ,KAAA,UAAe,SAAA;;;;;;;;;;EAWvB,MAAA,CAAO,OAAA,EAAS,MAAA;;;;;;;EAQhB,MAAA,CAAO,KAAA;;;;;;;EAYP,KAAA,CAAM,KAAA;;;;;;;EAQN,MAAA,CAAO,MAAA;;;;;;;EAQP,IAAA,CAAK,KAAA;;;;;;;;;EAcL,YAAA,CAAa,OAAA,EAAS,WAAA,QAAmB,IAAA,OAAW,OAAA,EAAS,aAAA;;;;;;EAW7D,GAAA,IAAO,OAAA,CAAQ,CAAA;;;;;;EAOf,KAAA,IAAS,OAAA,CAAQ,CAAA;;;;;;EAOjB,KAAA,IAAS,OAAA;;;;;;;;EAST,QAAA,CAAS,IAAA,UAAc,KAAA,WAAgB,OAAA,CAAQ,gBAAA,CAAiB,CAAA;;;;;;;;;;;EAYhE,cAAA,CAAe,OAAA,EAAS,uBAAA,GAA0B,OAAA,CAAQ,sBAAA,CAAuB,CAAA;;;;;;;;EASjF,KAAA,CAAM,IAAA,UAAc,QAAA,EAAU,aAAA,CAAc,CAAA,IAAK,OAAA;;;;;;;;;;EAejD,IAAA,EAAM,QAAA;;;;;;;;;;EAWN,QAAA,KAAa,SAAA;;;;;;EAOb,KAAA;;;;;;;;;;;;;;;;;;;;;EAsBA,SAAA,CAAU,MAAA,UAAgB,SAAA,YAAqB,KAAA;AAAA"}
1
+ {"version":3,"file":"query-builder.contract.d.mts","names":[],"sources":["../../../../../../../../@warlock.js/core/src/repositories/contracts/query-builder.contract.ts"],"mappings":";;;;;AAgBA;;;;KAAY,aAAA,uBAAoC,MAAA,oBAA0B,KAAA,CAAM,MAAA;;;;;;;;AAAM;KAU1E,wBAAA,YAAoC,MAAM;;;;AAAA;AAQtD;;KAAY,oBAAA,GAAuB,MAAM,SAAS,wBAAA;;AAAwB;AAQ1E;;;;UAAiB,oBAAA;EAqEkB;;;;;;;;;;EAtDjC,KAAA,CAAM,KAAA,UAAe,KAAA;EAsSD;;;;;;;;;;;EAzRpB,KAAA,CAAM,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,KAAA;EAoVkB;;;;;;;;;EAzUhE,KAAA,CAAM,UAAA,EAAY,MAAA;EA8VsC;;;;;;;;;EAnVxD,KAAA,CAAM,QAAA,GAAW,KAAA;EAtB6B;;;;;;;EA+B9C,OAAA,CAAQ,KAAA,UAAe,KAAA;EAAf;;;;;;;;EAUR,OAAA,CAAQ,KAAA,UAAe,QAAA,EAAU,aAAA,EAAe,KAAA;EAQxC;;;;;;EAAR,OAAA,CAAQ,UAAA,EAAY,MAAA;EA6BpB;;;;;;;;;;EAjBA,OAAA,CAAQ,KAAA,UAAe,MAAA;EAqEvB;;;;;;;EA5DA,UAAA,CAAW,KAAA,UAAe,MAAA;EAuG1B;;;;;;EA/FA,SAAA,CAAU,KAAA;EAkHH;;;;;;EA1GP,YAAA,CAAa,KAAA;EAoJb;;;;;;;;;;EAxIA,YAAA,CAAa,KAAA,UAAe,KAAA;EA0JX;;;;;;;;;;EA9IjB,SAAA,CAAU,KAAA,UAAe,OAAA;EAmLL;;;EA9KpB,MAAA;EAsMA;;;;;;;;;EAvLA,MAAA,CAAO,MAAA;EAyMG;;;;;;;;;EA9LV,MAAA,IAAU,MAAA;EAuMqC;;;;;;EA/L/C,QAAA,CAAS,MAAA;EA2MwE;;;;;;EAnMjF,QAAA,IAAY,MAAA;EA2NZ;;;;;;;;;;EA3MA,OAAA,CAAQ,KAAA,UAAe,SAAA;;;;;;;;;;EAWvB,MAAA,CAAO,OAAA,EAAS,MAAA;;;;;;;EAQhB,MAAA,CAAO,KAAA;;;;;;;EAYP,KAAA,CAAM,KAAA;;;;;;;EAQN,MAAA,CAAO,MAAA;;;;;;;EAQP,IAAA,CAAK,KAAA;;;;;;;;;EAcL,YAAA,CAAa,OAAA,EAAS,WAAA,QAAmB,IAAA,OAAW,OAAA,EAAS,aAAA;;;;;;EAW7D,GAAA,IAAO,OAAA,CAAQ,CAAA;;;;;;EAOf,KAAA,IAAS,OAAA,CAAQ,CAAA;;;;;;EAOjB,KAAA,IAAS,OAAA;;;;;;;;;;EAWT,GAAA,CAAI,KAAA,WAAgB,OAAA;;;;;;;;;;EAWpB,GAAA,CAAI,KAAA,WAAgB,OAAA;;;;;;;EAQpB,GAAA,CAAI,KAAA,WAAgB,OAAA;;;;;;;EAQpB,GAAA,CAAI,KAAA,WAAgB,OAAA;;;;;;;;;;;;;;;EAgBpB,OAAA,KAAY,MAAA,mBACV,MAAA,EAAQ,aAAA,EACR,UAAA,EAAY,oBAAA,GACX,OAAA,CAAQ,CAAA;;;;;;;;;;;;;;EAeX,SAAA,KAAc,MAAA,mBAAyB,UAAA,EAAY,oBAAA,GAAuB,OAAA,CAAQ,CAAA;;;;;;;;EASlF,QAAA,CAAS,IAAA,UAAc,KAAA,WAAgB,OAAA,CAAQ,gBAAA,CAAiB,CAAA;;;;;;;;;;;EAYhE,cAAA,CAAe,OAAA,EAAS,uBAAA,GAA0B,OAAA,CAAQ,sBAAA,CAAuB,CAAA;;;;;;;;EASjF,KAAA,CAAM,IAAA,UAAc,QAAA,EAAU,aAAA,CAAc,CAAA,IAAK,OAAA;;;;;;;;;;EAejD,IAAA,EAAM,QAAA;;;;;;;;;;EAWN,QAAA,KAAa,SAAA;;;;;;EAOb,KAAA;;;;;;;;;;;;;;;;;;;;;EAsBA,SAAA,CAAU,MAAA,UAAgB,SAAA,YAAqB,KAAA;AAAA"}
@@ -1,6 +1,6 @@
1
1
  import { RepositoryManager } from "./repository.manager.mjs";
2
2
  import { RepositoryAdapterContract } from "./contracts/repository-adapter.contract.mjs";
3
3
  import { AllRepositoryOptions, CachedRepositoryOptions, ChunkCallback, CursorPaginationOptions, CursorPaginationResult, FilterFunction, FilterOperator, FilterOptions, FilterRule, FilterRules, PaginationMode, PaginationResult, RepositoryConfigurations, RepositoryEvent, RepositoryOptions, RepositoryOptionsWithCursor, RepositoryOptionsWithPages, SaveMode, TypedAllRepositoryOptions, TypedRepositoryOptions, TypedRepositoryOptionsWithCursor, TypedRepositoryOptionsWithPages, WhereOperator } from "./contracts/types.mjs";
4
- import { QueryBuilderContract } from "./contracts/query-builder.contract.mjs";
4
+ import { AggregateExpressionInput, AggregateExpressions, GroupByFields, QueryBuilderContract } from "./contracts/query-builder.contract.mjs";
5
5
  import { CascadeAdapter } from "./adapters/cascade/cascade-adapter.mjs";
6
6
  import { CascadeQueryBuilder } from "./adapters/cascade/cascade-query-builder.mjs";
@@ -1,6 +1,6 @@
1
1
  import { RepositoryAdapterContract } from "./contracts/repository-adapter.contract.mjs";
2
2
  import { AllRepositoryOptions, ChunkCallback, CursorPaginationResult, FilterRules, PaginationResult, RepositoryOptions, SaveMode, TypedAllRepositoryOptions, TypedRepositoryOptions, TypedRepositoryOptionsWithCursor, TypedRepositoryOptionsWithPages } from "./contracts/types.mjs";
3
- import { QueryBuilderContract } from "./contracts/query-builder.contract.mjs";
3
+ import { AggregateExpressions, GroupByFields, QueryBuilderContract } from "./contracts/query-builder.contract.mjs";
4
4
  import { CacheDriver, CacheKey } from "@warlock.js/cache";
5
5
 
6
6
  //#region ../@warlock.js/core/src/repositories/repository.manager.d.ts
@@ -555,6 +555,104 @@ declare class RepositoryManager<T = unknown, F = Record<string, any>> {
555
555
  * @public
556
556
  */
557
557
  countActiveCached(options?: TypedRepositoryOptions<F>): Promise<number>;
558
+ /**
559
+ * Sum a numeric field across records matching options.
560
+ *
561
+ * Applies `filterBy` (and its operator-injection guard), `where`, scopes and
562
+ * every other repository option to the query FIRST — exactly like `count()` —
563
+ * THEN runs the aggregate, so the sum is always scoped by the same filters
564
+ * the rest of the repository honors.
565
+ *
566
+ * @param field - Numeric field to sum
567
+ * @param options - Repository options (filter values, perform, etc.)
568
+ * @returns Promise resolving to the filtered numeric sum
569
+ * @public
570
+ *
571
+ * @example
572
+ * await ordersRepository.sum("total", { status: "paid" });
573
+ */
574
+ sum(field: string, options?: TypedRepositoryOptions<F>): Promise<number>;
575
+ /**
576
+ * Average a numeric field across records matching options.
577
+ *
578
+ * Options (including `filterBy`) are applied before the aggregate, mirroring
579
+ * `count()`.
580
+ *
581
+ * @param field - Numeric field to average
582
+ * @param options - Repository options
583
+ * @returns Promise resolving to the filtered numeric average
584
+ * @public
585
+ */
586
+ avg(field: string, options?: TypedRepositoryOptions<F>): Promise<number>;
587
+ /**
588
+ * Minimum value of a field across records matching options.
589
+ *
590
+ * Options (including `filterBy`) are applied before the aggregate, mirroring
591
+ * `count()`.
592
+ *
593
+ * @param field - Field name
594
+ * @param options - Repository options
595
+ * @returns Promise resolving to the filtered minimum value
596
+ * @public
597
+ */
598
+ min(field: string, options?: TypedRepositoryOptions<F>): Promise<number>;
599
+ /**
600
+ * Maximum value of a field across records matching options.
601
+ *
602
+ * Options (including `filterBy`) are applied before the aggregate, mirroring
603
+ * `count()`.
604
+ *
605
+ * @param field - Field name
606
+ * @param options - Repository options
607
+ * @returns Promise resolving to the filtered maximum value
608
+ * @public
609
+ */
610
+ max(field: string, options?: TypedRepositoryOptions<F>): Promise<number>;
611
+ /**
612
+ * Group records by one or more fields and compute aggregates.
613
+ *
614
+ * Repository options (including `filterBy`) are applied before the grouping,
615
+ * mirroring `count()`, so the grouped rows are always scoped by the same
616
+ * filters the rest of the repository honors.
617
+ *
618
+ * @template R - Shape of each grouped row
619
+ * @param fields - Field(s) to group by
620
+ * @param aggregates - Map of result aliases to aggregate expressions (e.g. `$agg.*`)
621
+ * @param options - Repository options
622
+ * @returns Promise resolving to the array of grouped rows
623
+ * @public
624
+ *
625
+ * @example
626
+ * import { $agg } from "@warlock.js/cascade";
627
+ *
628
+ * await ordersRepository.groupBy(
629
+ * "status",
630
+ * { count: $agg.count(), total: $agg.sum("total") },
631
+ * { paidAfter: "2026-01-01" },
632
+ * );
633
+ */
634
+ groupBy<R = Record<string, unknown>>(fields: GroupByFields, aggregates: AggregateExpressions, options?: TypedRepositoryOptions<F>): Promise<R[]>;
635
+ /**
636
+ * Compute aggregates over the whole matching set as a single summary row.
637
+ *
638
+ * Repository options (including `filterBy`) are applied before the aggregate,
639
+ * mirroring `count()`.
640
+ *
641
+ * @template R - Shape of the summary row
642
+ * @param aggregates - Map of result aliases to aggregate expressions (e.g. `$agg.*`)
643
+ * @param options - Repository options
644
+ * @returns Promise resolving to the single summary row (or `null` when empty)
645
+ * @public
646
+ *
647
+ * @example
648
+ * import { $agg } from "@warlock.js/cascade";
649
+ *
650
+ * await ordersRepository.aggregate(
651
+ * { total: $agg.sum("total"), avg: $agg.avg("total") },
652
+ * { status: "paid" },
653
+ * );
654
+ */
655
+ aggregate<R = Record<string, unknown>>(aggregates: AggregateExpressions, options?: TypedRepositoryOptions<F>): Promise<R | null>;
558
656
  /**
559
657
  * Set cache driver
560
658
  * @param driver - Cache driver instance
@@ -1 +1 @@
1
- {"version":3,"file":"repository.manager.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/repositories/repository.manager.ts"],"mappings":"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"}
1
+ {"version":3,"file":"repository.manager.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/repositories/repository.manager.ts"],"mappings":"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"}