@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.
- package/CHANGELOG.md +27 -0
- package/esm/ai/src/agent/agent.mjs +126 -7
- package/esm/ai/src/agent/agent.mjs.map +1 -1
- package/esm/ai/src/agent/signature.mjs +57 -0
- package/esm/ai/src/agent/signature.mjs.map +1 -0
- package/esm/ai/src/agent/snapshot.mjs +101 -0
- package/esm/ai/src/agent/snapshot.mjs.map +1 -0
- package/esm/ai/src/ai.mjs +37 -1
- package/esm/ai/src/ai.mjs.map +1 -1
- package/esm/ai/src/errors/agent-drift-error.mjs +31 -0
- package/esm/ai/src/errors/agent-drift-error.mjs.map +1 -0
- package/esm/ai/src/errors/index.mjs +2 -0
- package/esm/ai/src/errors/planner-drift-error.mjs +33 -0
- package/esm/ai/src/errors/planner-drift-error.mjs.map +1 -0
- package/esm/ai/src/image/image-cost.mjs +55 -0
- package/esm/ai/src/image/image-cost.mjs.map +1 -0
- package/esm/ai/src/image/image.mjs +112 -0
- package/esm/ai/src/image/image.mjs.map +1 -0
- package/esm/ai/src/image/index.mjs +4 -0
- package/esm/ai/src/index.mjs +20 -0
- package/esm/ai/src/planner/planner-run.mjs +161 -6
- package/esm/ai/src/planner/planner-run.mjs.map +1 -1
- package/esm/ai/src/planner/planner.mjs +25 -1
- package/esm/ai/src/planner/planner.mjs.map +1 -1
- package/esm/ai/src/planner/snapshot.mjs +95 -0
- package/esm/ai/src/planner/snapshot.mjs.map +1 -0
- package/esm/ai/src/rag/hybrid/bm25.mjs +51 -0
- package/esm/ai/src/rag/hybrid/bm25.mjs.map +1 -0
- package/esm/ai/src/rag/hybrid/hybrid-rank.mjs +29 -0
- package/esm/ai/src/rag/hybrid/hybrid-rank.mjs.map +1 -0
- package/esm/ai/src/rag/hybrid/rrf.mjs +30 -0
- package/esm/ai/src/rag/hybrid/rrf.mjs.map +1 -0
- package/esm/ai/src/rag/index.mjs +11 -0
- package/esm/ai/src/rag/loaders/errors.mjs +25 -0
- package/esm/ai/src/rag/loaders/errors.mjs.map +1 -0
- package/esm/ai/src/rag/loaders/index.mjs +7 -0
- package/esm/ai/src/rag/loaders/load-html.mjs +138 -0
- package/esm/ai/src/rag/loaders/load-html.mjs.map +1 -0
- package/esm/ai/src/rag/loaders/load-pdf.mjs +150 -0
- package/esm/ai/src/rag/loaders/load-pdf.mjs.map +1 -0
- package/esm/ai/src/rag/loaders/load-text.mjs +60 -0
- package/esm/ai/src/rag/loaders/load-text.mjs.map +1 -0
- package/esm/ai/src/rag/loaders/load-web.mjs +89 -0
- package/esm/ai/src/rag/loaders/load-web.mjs.map +1 -0
- package/esm/ai/src/rag/store/pg-vector-store.mjs +328 -0
- package/esm/ai/src/rag/store/pg-vector-store.mjs.map +1 -0
- package/esm/ai/src/rag/transforms/multi-query.mjs +41 -0
- package/esm/ai/src/rag/transforms/multi-query.mjs.map +1 -0
- package/esm/ai/src/speech/index.mjs +3 -0
- package/esm/ai/src/speech/speech.mjs +122 -0
- package/esm/ai/src/speech/speech.mjs.map +1 -0
- package/esm/ai/src/supervisor/entries.mjs +2 -2
- package/esm/ai/src/supervisor/entries.mjs.map +1 -1
- package/esm/ai/src/transcribe/audio-input.mjs +84 -0
- package/esm/ai/src/transcribe/audio-input.mjs.map +1 -0
- package/esm/ai/src/transcribe/index.mjs +4 -0
- package/esm/ai/src/transcribe/transcribe.mjs +127 -0
- package/esm/ai/src/transcribe/transcribe.mjs.map +1 -0
- package/esm/ai-openai/src/image.mjs +5 -0
- package/esm/ai-openai/src/index.mjs +3 -0
- package/esm/ai-openai/src/sdk.mjs +3 -0
- package/esm/ai-openai/src/speech.mjs +5 -0
- package/esm/ai-openai/src/transcription.mjs +6 -0
- package/esm/ai-openai/src/utils/index.mjs +1 -0
- package/esm/ai-openai/src/utils/to-openai-messages.mjs +3 -0
- package/esm/cli/commands/doctor/checks/config.check.mjs +42 -0
- package/esm/cli/commands/doctor/checks/config.check.mjs.map +1 -0
- package/esm/cli/commands/doctor/checks/connectors.check.mjs +28 -0
- package/esm/cli/commands/doctor/checks/connectors.check.mjs.map +1 -0
- package/esm/cli/commands/doctor/checks/health.check.mjs +35 -0
- package/esm/cli/commands/doctor/checks/health.check.mjs.map +1 -0
- package/esm/cli/commands/doctor/checks/index.mjs +25 -0
- package/esm/cli/commands/doctor/checks/index.mjs.map +1 -0
- package/esm/cli/commands/doctor/checks/optional-peers.check.mjs +90 -0
- package/esm/cli/commands/doctor/checks/optional-peers.check.mjs.map +1 -0
- package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs +69 -0
- package/esm/cli/commands/doctor/checks/release-hygiene.check.mjs.map +1 -0
- package/esm/cli/commands/doctor/checks/routes.check.mjs +30 -0
- package/esm/cli/commands/doctor/checks/routes.check.mjs.map +1 -0
- package/esm/cli/commands/doctor/doctor-command.action.mjs +28 -0
- package/esm/cli/commands/doctor/doctor-command.action.mjs.map +1 -0
- package/esm/cli/commands/doctor/format-report.mjs +44 -0
- package/esm/cli/commands/doctor/format-report.mjs.map +1 -0
- package/esm/cli/commands/doctor/run-checks.mjs +50 -0
- package/esm/cli/commands/doctor/run-checks.mjs.map +1 -0
- package/esm/cli/commands/doctor.command.mjs +29 -0
- package/esm/cli/commands/doctor.command.mjs.map +1 -0
- package/esm/cli/commands/generate/templates/stubs.mjs +6 -8
- package/esm/cli/commands/generate/templates/stubs.mjs.map +1 -1
- package/esm/cli/commands/routes/format-routes-table.mjs +129 -0
- package/esm/cli/commands/routes/format-routes-table.mjs.map +1 -0
- package/esm/cli/commands/routes/route-row.mjs +92 -0
- package/esm/cli/commands/routes/route-row.mjs.map +1 -0
- package/esm/cli/commands/routes/routes-command.action.mjs +43 -0
- package/esm/cli/commands/routes/routes-command.action.mjs.map +1 -0
- package/esm/cli/commands/routes.command.mjs +51 -0
- package/esm/cli/commands/routes.command.mjs.map +1 -0
- package/esm/cli/commands/seed.command.mjs +5 -0
- package/esm/cli/commands/seed.command.mjs.map +1 -1
- package/esm/cli/framework-cli-commands.mjs +4 -0
- package/esm/cli/framework-cli-commands.mjs.map +1 -1
- package/esm/config/config-getter.mjs +5 -5
- package/esm/config/config-getter.mjs.map +1 -1
- package/esm/config/config-loader.mjs +2 -2
- package/esm/config/config-loader.mjs.map +1 -1
- package/esm/connectors/access-connector.mjs +2 -2
- package/esm/connectors/access-connector.mjs.map +1 -1
- package/esm/connectors/ai-connector.mjs +2 -2
- package/esm/connectors/ai-connector.mjs.map +1 -1
- package/esm/connectors/cache-connector.mjs +2 -2
- package/esm/connectors/cache-connector.mjs.map +1 -1
- package/esm/connectors/database-connector.mjs +2 -2
- package/esm/connectors/database-connector.mjs.map +1 -1
- package/esm/connectors/herald-connector.mjs +2 -2
- package/esm/connectors/herald-connector.mjs.map +1 -1
- package/esm/connectors/http-connector.d.mts.map +1 -1
- package/esm/connectors/http-connector.mjs +9 -7
- package/esm/connectors/http-connector.mjs.map +1 -1
- package/esm/connectors/logger-connector.mjs +2 -2
- package/esm/connectors/logger-connector.mjs.map +1 -1
- package/esm/connectors/mail-connector.mjs +2 -2
- package/esm/connectors/mail-connector.mjs.map +1 -1
- package/esm/connectors/notifications-connector.mjs +2 -2
- package/esm/connectors/notifications-connector.mjs.map +1 -1
- package/esm/connectors/socket-connector.mjs +3 -3
- package/esm/connectors/socket-connector.mjs.map +1 -1
- package/esm/database/index.d.mts +2 -1
- package/esm/database/index.mjs +1 -0
- package/esm/database/seed-command-action.mjs +44 -4
- package/esm/database/seed-command-action.mjs.map +1 -1
- package/esm/database/seeds/seed-records-table-migration.mjs +36 -0
- package/esm/database/seeds/seed-records-table-migration.mjs.map +1 -0
- package/esm/database/seeds/seeder.d.mts +22 -5
- package/esm/database/seeds/seeder.d.mts.map +1 -1
- package/esm/database/seeds/seeder.errors.d.mts +22 -0
- package/esm/database/seeds/seeder.errors.d.mts.map +1 -0
- package/esm/database/seeds/seeder.errors.mjs +29 -0
- package/esm/database/seeds/seeder.errors.mjs.map +1 -0
- package/esm/database/seeds/seeder.mjs.map +1 -1
- package/esm/database/seeds/seeders.manager.mjs +90 -11
- package/esm/database/seeds/seeders.manager.mjs.map +1 -1
- package/esm/database/seeds/types.d.mts +117 -1
- package/esm/database/seeds/types.d.mts.map +1 -1
- package/esm/database/seeds/utils.mjs +6 -1
- package/esm/database/seeds/utils.mjs.map +1 -1
- package/esm/dev-server/module-loader.d.mts +12 -0
- package/esm/dev-server/module-loader.d.mts.map +1 -1
- package/esm/dev-server/module-loader.mjs +30 -2
- package/esm/dev-server/module-loader.mjs.map +1 -1
- package/esm/http/config.mjs +2 -2
- package/esm/http/config.mjs.map +1 -1
- package/esm/http/createHttpApplication.mjs +2 -2
- package/esm/http/createHttpApplication.mjs.map +1 -1
- package/esm/http/health.d.mts +14 -0
- package/esm/http/health.d.mts.map +1 -1
- package/esm/http/health.mjs +16 -0
- package/esm/http/health.mjs.map +1 -1
- package/esm/http/middleware/idempotency.middleware.mjs +5 -5
- package/esm/http/middleware/idempotency.middleware.mjs.map +1 -1
- package/esm/http/middleware/inject-request-context.mjs +2 -2
- package/esm/http/middleware/inject-request-context.mjs.map +1 -1
- package/esm/http/middleware/maintenance.middleware.mjs +4 -4
- package/esm/http/middleware/maintenance.middleware.mjs.map +1 -1
- package/esm/http/plugins.mjs +9 -9
- package/esm/http/plugins.mjs.map +1 -1
- package/esm/http/response.mjs +5 -5
- package/esm/http/response.mjs.map +1 -1
- package/esm/http/server.mjs +4 -4
- package/esm/http/server.mjs.map +1 -1
- package/esm/index.d.mts +4 -3
- package/esm/index.mjs +2 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts +28 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.d.mts.map +1 -1
- package/esm/repositories/adapters/cascade/cascade-query-builder.mjs +39 -0
- package/esm/repositories/adapters/cascade/cascade-query-builder.mjs.map +1 -1
- package/esm/repositories/contracts/index.d.mts +1 -1
- package/esm/repositories/contracts/query-builder.contract.d.mts +87 -1
- package/esm/repositories/contracts/query-builder.contract.d.mts.map +1 -1
- package/esm/repositories/index.d.mts +1 -1
- package/esm/repositories/repository.manager.d.mts +99 -1
- package/esm/repositories/repository.manager.d.mts.map +1 -1
- package/esm/repositories/repository.manager.mjs +128 -0
- package/esm/repositories/repository.manager.mjs.map +1 -1
- package/esm/router/router.d.mts +9 -0
- package/esm/router/router.d.mts.map +1 -1
- package/esm/router/router.mjs +21 -1
- package/esm/router/router.mjs.map +1 -1
- package/esm/utils/paths.mjs +2 -2
- package/esm/utils/paths.mjs.map +1 -1
- package/esm/validation/validateAll.mjs +2 -2
- package/esm/validation/validateAll.mjs.map +1 -1
- package/llms-full.txt +427 -45
- package/llms.txt +4 -2
- package/package.json +9 -9
- package/skills/README.md +65 -0
- package/skills/health-checks/SKILL.md +13 -0
- package/skills/use-repository/SKILL.md +38 -1
- package/skills/warlock-doctor/SKILL.md +135 -0
- package/skills/warlock-routes/SKILL.md +91 -0
- package/skills/write-seeder/SKILL.md +143 -45
package/esm/http/server.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
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:
|
|
15
|
-
bodyLimit:
|
|
16
|
-
forceCloseConnections:
|
|
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
|
}
|
package/esm/http/server.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.mjs","names":[
|
|
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":";;;;;;;;;
|
|
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":";;;;;;;;;AAsBA,IAAa,sBAAb,MAAa,oBAAwE;;;;;CAKnF,AAAO,YAAY,AAAQ,OAAuC;EAAvC;CAAwC;CAanE,AAAO,MACL,6BACA,iBACA,OACM;EACN,IAAI,OAAO,gCAAgC,YAEzC,4BAA4B,IAAI;OAC3B,IAAI,OAAO,gCAAgC,UAEhD,KAAK,MAAM,MAAM,2BAA2B;OACvC,IAAI,UAAU,QAEnB,KAAK,MAAM,MAAM,6BAA6B,iBAAiB,KAAK;OAGpE,KAAK,MAAM,MAAM,6BAA6B,eAAe;EAG/D,OAAO;CACT;;;;CAKA,AAAO,SAAS;EACd,OAAO,KAAK,MAAM,OAAO;CAC3B;CAQA,AAAO,QACL,mBACA,iBACA,OACM;EACN,IAAI,OAAO,sBAAsB,UAC/B,KAAK,MAAM,QAAQ,iBAAiB;OAC/B,IAAI,UAAU,QACnB,KAAK,MAAM,QAAQ,mBAAmB,iBAAiB,KAAK;OAE5D,KAAK,MAAM,QAAQ,mBAAmB,eAAe;EAGvD,OAAO;CACT;;;;CAKA,AAAO,QAAQ,OAAe,QAAqB;EACjD,KAAK,MAAM,QAAQ,OAAO,MAAM;EAChC,OAAO;CACT;;;;CAKA,AAAO,WAAW,OAAe,QAAqB;EACpD,KAAK,MAAM,WAAW,OAAO,MAAM;EACnC,OAAO;CACT;;;;CAKA,AAAO,UAAU,OAAqB;EACpC,KAAK,MAAM,UAAU,KAAK;EAC1B,OAAO;CACT;;;;CAKA,AAAO,aAAa,OAAqB;EACvC,KAAK,MAAM,aAAa,KAAK;EAC7B,OAAO;CACT;;;;CAKA,AAAO,aAAa,OAAe,OAAyB;EAC1D,KAAK,MAAM,aAAa,OAAO,KAAK;EACpC,OAAO;CACT;;;;CAKA,AAAO,UAAU,OAAe,SAAuB;EACrD,KAAK,MAAM,UAAU,OAAO,OAAO;EACnC,OAAO;CACT;;;;CAKA,AAAO,UAAU,QAAgB,WAAqB,OAAsB;EAC1E,KAAK,MAAM,UAAU,QAAQ,WAAW,KAAK;EAC7C,OAAO;CACT;CAWA,AAAO,OAAO,GAAG,QAAqB;EACpC,IAAI,MAAM,QAAQ,OAAO,EAAE,GACzB,KAAK,MAAM,OAAO,OAAO,EAAE;OAE3B,KAAK,MAAM,OAAO,MAAM;EAE1B,OAAO;CACT;CAOA,AAAO,SAAS,GAAG,QAAqB;EACtC,IAAI,MAAM,QAAQ,OAAO,EAAE,GACzB,KAAK,MAAM,SAAS,OAAO,EAAE;OAE7B,KAAK,MAAM,SAAS,MAAM;EAE5B,OAAO;CACT;;;;CASA,AAAO,QAAQ,OAAe,YAA4B,OAAa;EACrE,KAAK,MAAM,QAAQ,OAAO,SAAS;EACnC,OAAO;CACT;;;;CAKA,AAAO,OAAO,SAA+C;EAE3D,KAAK,MAAM,CAAC,OAAO,cAAc,OAAO,QAAQ,OAAO,GACrD,KAAK,MAAM,QAAQ,OAAO,SAAS;EAErC,OAAO;CACT;;;;CAKA,AAAO,OAAO,OAAqB;EACjC,KAAK,MAAM,cAAc,KAAK;EAC9B,OAAO;CACT;;;;CASA,AAAO,MAAM,OAAqB;EAChC,KAAK,MAAM,MAAM,KAAK;EACtB,OAAO;CACT;;;;CAKA,AAAO,OAAO,QAAsB;EAClC,KAAK,MAAM,OAAO,MAAM;EACxB,OAAO;CACT;;;;CAKA,AAAO,KAAK,OAAqB;EAC/B,OAAO,KAAK,OAAO,KAAK;CAC1B;;;;CASA,AAAO,aAAa,SAA4B,MAAW,SAA8B;EAEvF,IADuB,iBACd,CAAC,CAAC,MAAM,KAAK,OAAc,SAAS,MAAM,OAAO;EAC1D,OAAO;CACT;;;;CASA,MAAa,MAAoB;EAC/B,OAAO,KAAK,MAAM,IAAI;CACxB;;;;CAKA,MAAa,QAA2B;EACtC,OAAO,KAAK,MAAM,MAAM;CAC1B;;;;CAKA,MAAa,QAAyB;EACpC,OAAO,KAAK,MAAM,MAAM;CAC1B;;;;CAKA,MAAa,SAAS,MAAc,OAA6C;EAC/E,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS;GAAE;GAAO;EAAK,CAAC;EAGxD,OAAO;GACL,MAAM,OAAO;GACb,YAAY;IACV,GAAG,OAAO;IACV,QAAQ,OAAO,KAAK;GACtB;EACF;CACF;;;;;;;;;;;;;;;;;;CAmBA,MAAa,eACX,SACoC;EACpC,MAAM,EAAE,OAAO,eAAe,MAAM,YAAY,WAAW;EAG3D,KAAK,MAAM,QAAQ,CAAC;EAEpB,MAAM,UAAU,MAAM,KAAK,IAAI;EAC/B,MAAM,UAAU,QAAQ,SAAS;EAIjC,MAAM,UAAU,UAAU,QAAQ,MAAM,GAAG,KAAK,IAAI;EAEpD,MAAM,YAAY,WAChB,WAAW,SAAY,SAAc,OAAe;EAEtD,IAAI,cAAc,QAAQ;GAExB,MAAM,YAAY,CAAC,GAAG,OAAO,CAAC,CAAC,QAAQ;GACvC,MAAM,QAAQ,UAAU;GACxB,MAAM,OAAO,UAAU,UAAU,SAAS;GAE1C,OAAO;IACL,MAAM;IACN,YAAY;KACV;KACA,QAAQ,UAAU;KAClB;KAGA,YAAY,UAAU,SAAS,KAAK,IAAI;KAExC,YAAY,SAAS,IAAI;IAC3B;GACF;EACF;EAGA,MAAM,YAAY;EAClB,MAAM,QAAQ,UAAU;EACxB,MAAM,OAAO,UAAU,UAAU,SAAS;EAE1C,OAAO;GACL,MAAM;GACN,YAAY;IACV;IACA,QAAQ,UAAU;IAClB;IAGA,YAAY,UAAU,SAAS,IAAI,IAAI;IAEvC,YAAY,SAAS,KAAK;GAC5B;EACF;CACF;;;;CAKA,MAAa,MAAM,MAAc,UAA2C;EAC1E,OAAO,KAAK,MAAM,MAAM,MAAM,QAAQ;CACxC;;;;CASA,AAAO,KAAK,UAAwB;EAClC,KAAK,MAAM,KAAK,QAAQ;EACxB,OAAO;CACT;;;;CAKA,AAAO,SAAS,GAAG,WAA2B;EAC5C,IAAI,KAAK,MAAM,UACb,KAAK,MAAM,SAAS,GAAG,SAAS;OAC3B;GACL,QAAQ,KACN,+FACF;GACA,KAAK,MAAM,YAAY,WACrB,KAAK,MAAM,KAAK,QAAQ;EAE5B;EACA,OAAO;CACT;;;;CAKA,AAAO,QAAc;EACnB,OAAO,IAAI,oBAAoB,KAAK,MAAM,MAAM,CAAC;CACnD;AACF"}
|
|
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;
|
|
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":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"repository.manager.d.mts","names":[],"sources":["../../../../../../../@warlock.js/core/src/repositories/repository.manager.ts"],"mappings":"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"}
|