uql-orm 0.8.3 → 0.9.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 +21 -0
- package/README.md +32 -5
- package/dist/browser/{mongoSchemaGenerator-8aUNHkiE.js → mongoSchemaGenerator-BT2_u1wI.js} +14 -6
- package/dist/browser/mongoSchemaGenerator-BT2_u1wI.js.map +1 -0
- package/dist/browser/uql-browser.min.js +3362 -2888
- package/dist/browser/uql-browser.min.js.map +1 -1
- package/dist/dialect/abstractSqlDialect.d.ts +6 -5
- package/dist/dialect/abstractSqlDialect.d.ts.map +1 -1
- package/dist/dialect/abstractSqlDialect.js +26 -57
- package/dist/dialect/abstractSqlDialect.js.map +1 -1
- package/dist/entity/metadata/definition.d.ts.map +1 -1
- package/dist/entity/metadata/definition.js.map +1 -1
- package/dist/express/query.util.d.ts.map +1 -1
- package/dist/express/query.util.js +7 -9
- package/dist/express/query.util.js.map +1 -1
- package/dist/mongo/mongoDialect.d.ts +5 -5
- package/dist/mongo/mongoDialect.d.ts.map +1 -1
- package/dist/mongo/mongoDialect.js +13 -5
- package/dist/mongo/mongoDialect.js.map +1 -1
- package/dist/mongo/mongodbQuerier.d.ts +1 -0
- package/dist/mongo/mongodbQuerier.d.ts.map +1 -1
- package/dist/mongo/mongodbQuerier.js +21 -9
- package/dist/mongo/mongodbQuerier.js.map +1 -1
- package/dist/querier/abstractQuerier.d.ts +17 -3
- package/dist/querier/abstractQuerier.d.ts.map +1 -1
- package/dist/querier/abstractQuerier.js +78 -42
- package/dist/querier/abstractQuerier.js.map +1 -1
- package/dist/querier/abstractSqlQuerier.d.ts.map +1 -1
- package/dist/querier/abstractSqlQuerier.js +7 -2
- package/dist/querier/abstractSqlQuerier.js.map +1 -1
- package/dist/type/query.d.ts +22 -9
- package/dist/type/query.d.ts.map +1 -1
- package/dist/type/query.js.map +1 -1
- package/dist/util/dialect.util.d.ts +2 -3
- package/dist/util/dialect.util.d.ts.map +1 -1
- package/dist/util/dialect.util.js +21 -17
- package/dist/util/dialect.util.js.map +1 -1
- package/dist/util/index.d.ts +1 -0
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +1 -0
- package/dist/util/index.js.map +1 -1
- package/dist/util/relationQuery.util.d.ts +25 -0
- package/dist/util/relationQuery.util.d.ts.map +1 -0
- package/dist/util/relationQuery.util.js +101 -0
- package/dist/util/relationQuery.util.js.map +1 -0
- package/package.json +5 -5
- package/dist/browser/mongoSchemaGenerator-8aUNHkiE.js.map +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { EntityMeta, Query, QueryPopulate, RelationKey } from '../type/index.js';
|
|
2
|
+
export type RelationRequestSummary<E> = {
|
|
3
|
+
readonly requestedKeys: RelationKey<E>[];
|
|
4
|
+
readonly joinableKeys: RelationKey<E>[];
|
|
5
|
+
readonly toManyKeys: RelationKey<E>[];
|
|
6
|
+
};
|
|
7
|
+
export declare function getRelationRequestSummary<E>(meta: EntityMeta<E>, populate?: QueryPopulate<E>): RelationRequestSummary<E>;
|
|
8
|
+
/** True when `$populate` includes at least one relation key. */
|
|
9
|
+
export declare function isPopulatingRelations<E>(meta: EntityMeta<E>, populate?: QueryPopulate<E>): boolean;
|
|
10
|
+
export type RelationQuery<E extends object = object> = Query<E> & {
|
|
11
|
+
$required?: boolean;
|
|
12
|
+
};
|
|
13
|
+
export declare function getRelationQueryValue<E>(relKey: RelationKey<E>, populate?: QueryPopulate<E>): unknown;
|
|
14
|
+
export declare function isRelationQueryObject<E extends object = object>(value: unknown): value is RelationQuery<E>;
|
|
15
|
+
export type ParsedRelationQuery<E extends object = object> = {
|
|
16
|
+
query: RelationQuery<E>;
|
|
17
|
+
required: boolean;
|
|
18
|
+
/** Structured relation query object (recurse validation / nested semantics). */
|
|
19
|
+
nested: boolean;
|
|
20
|
+
};
|
|
21
|
+
export declare function parseRelationQueryValue<E extends object = object>(value: unknown): ParsedRelationQuery<E>;
|
|
22
|
+
/** Parses the relation payload for `relKey` */
|
|
23
|
+
export declare function parseRelationAtKey<E>(relKey: RelationKey<E>, populate?: QueryPopulate<E>): ParsedRelationQuery;
|
|
24
|
+
export declare function forEachRequestedRelation<E extends object>(meta: EntityMeta<E>, populate: QueryPopulate<E> | undefined, fn: (relKey: RelationKey<E>, rawValue: unknown) => void): void;
|
|
25
|
+
//# sourceMappingURL=relationQuery.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationQuery.util.d.ts","sourceRoot":"","sources":["../../src/util/relationQuery.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAe,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGnG,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI;IACtC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;CACvC,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACnB,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAC1B,sBAAsB,CAAC,CAAC,CAAC,CAuB3B;AAED,gEAAgE;AAChE,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAGlG;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAa1F,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAErG;AAED,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,CAG1G;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IAC3D,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,gFAAgF;IAChF,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAiBzG;AAED,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAE9G;AAED,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,EACvD,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EACnB,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,EACtC,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,GACtD,IAAI,CAIN"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { getKeys } from './object.util.js';
|
|
2
|
+
export function getRelationRequestSummary(meta, populate) {
|
|
3
|
+
const requestedKeys = [];
|
|
4
|
+
const joinableKeys = [];
|
|
5
|
+
const toManyKeys = [];
|
|
6
|
+
if (!populate)
|
|
7
|
+
return { requestedKeys, joinableKeys, toManyKeys };
|
|
8
|
+
for (const key of getKeys(populate)) {
|
|
9
|
+
if (!populate[key])
|
|
10
|
+
continue;
|
|
11
|
+
const relOpts = meta.relations[key];
|
|
12
|
+
if (!relOpts)
|
|
13
|
+
continue;
|
|
14
|
+
requestedKeys.push(key);
|
|
15
|
+
if (relOpts.cardinality === '1m' || relOpts.cardinality === 'mm') {
|
|
16
|
+
toManyKeys.push(key);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
joinableKeys.push(key);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return { requestedKeys, joinableKeys, toManyKeys };
|
|
23
|
+
}
|
|
24
|
+
/** True when `$populate` includes at least one relation key. */
|
|
25
|
+
export function isPopulatingRelations(meta, populate) {
|
|
26
|
+
if (!populate)
|
|
27
|
+
return false;
|
|
28
|
+
return getKeys(populate).some((key) => populate[key] && key in meta.relations);
|
|
29
|
+
}
|
|
30
|
+
// Keep in sync with nested keys allowed on `Query` / relation options (see `type/query.ts`).
|
|
31
|
+
const RELATION_QUERY_BOOLEAN_KEYS = new Set(['$distinct', '$required']);
|
|
32
|
+
const RELATION_QUERY_OBJECT_KEYS = new Set(['$select', '$populate', '$exclude', '$sort']);
|
|
33
|
+
const RELATION_QUERY_NUMBER_KEYS = new Set(['$limit', '$skip']);
|
|
34
|
+
const RELATION_QUERY_ALLOWED_KEYS = new Set([
|
|
35
|
+
...RELATION_QUERY_BOOLEAN_KEYS,
|
|
36
|
+
...RELATION_QUERY_OBJECT_KEYS,
|
|
37
|
+
...RELATION_QUERY_NUMBER_KEYS,
|
|
38
|
+
'$where',
|
|
39
|
+
]);
|
|
40
|
+
export function getRelationQueryValue(relKey, populate) {
|
|
41
|
+
return populate?.[relKey];
|
|
42
|
+
}
|
|
43
|
+
export function isRelationQueryObject(value) {
|
|
44
|
+
if (!isRecord(value))
|
|
45
|
+
return false;
|
|
46
|
+
return isValidRelationQueryShape(value);
|
|
47
|
+
}
|
|
48
|
+
export function parseRelationQueryValue(value) {
|
|
49
|
+
if (isRelationQueryObject(value)) {
|
|
50
|
+
return { query: value, required: value.$required === true, nested: true };
|
|
51
|
+
}
|
|
52
|
+
if (Array.isArray(value)) {
|
|
53
|
+
const selectMap = {};
|
|
54
|
+
for (const key of value) {
|
|
55
|
+
selectMap[key] = 1;
|
|
56
|
+
}
|
|
57
|
+
return { query: { $select: selectMap }, required: false, nested: false };
|
|
58
|
+
}
|
|
59
|
+
if (value !== undefined && value !== null && value !== true && value !== 1) {
|
|
60
|
+
throw new TypeError(`Invalid relation query value '${String(value)}'. Expected true/1, relation query object, or relation $populate array.`);
|
|
61
|
+
}
|
|
62
|
+
return { query: {}, required: false, nested: false };
|
|
63
|
+
}
|
|
64
|
+
/** Parses the relation payload for `relKey` */
|
|
65
|
+
export function parseRelationAtKey(relKey, populate) {
|
|
66
|
+
return parseRelationQueryValue(getRelationQueryValue(relKey, populate));
|
|
67
|
+
}
|
|
68
|
+
export function forEachRequestedRelation(meta, populate, fn) {
|
|
69
|
+
for (const relKey of getRelationRequestSummary(meta, populate).requestedKeys) {
|
|
70
|
+
fn(relKey, getRelationQueryValue(relKey, populate));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function isRecord(value) {
|
|
74
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
75
|
+
}
|
|
76
|
+
function isBooleanLikeValue(value) {
|
|
77
|
+
return value === true || value === false || value === 0 || value === 1;
|
|
78
|
+
}
|
|
79
|
+
function isValidRelationQueryShape(query) {
|
|
80
|
+
let hasKnownKey = false;
|
|
81
|
+
for (const [key, value] of Object.entries(query)) {
|
|
82
|
+
if (!RELATION_QUERY_ALLOWED_KEYS.has(key)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
hasKnownKey = true;
|
|
86
|
+
if (RELATION_QUERY_BOOLEAN_KEYS.has(key) && !isBooleanLikeValue(value)) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
if (RELATION_QUERY_OBJECT_KEYS.has(key) && !isRecord(value)) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
if (RELATION_QUERY_NUMBER_KEYS.has(key) && (typeof value !== 'number' || !Number.isFinite(value))) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
if (key === '$where' && !isRecord(value)) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return hasKnownKey;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=relationQuery.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationQuery.util.js","sourceRoot":"","sources":["../../src/util/relationQuery.util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"homepage": "https://uql-orm.dev",
|
|
4
4
|
"description": "Fast, type-safe TypeScript ORM — one API for every database",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.9.0",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"sideEffects": false,
|
|
9
9
|
"main": "./dist/index.js",
|
|
@@ -107,12 +107,12 @@
|
|
|
107
107
|
"@types/express": "^5.0.6",
|
|
108
108
|
"@types/pg": "^8.20.0",
|
|
109
109
|
"@types/sqlstring": "^2.3.2",
|
|
110
|
-
"better-sqlite3": "^12.
|
|
111
|
-
"bunchee": "^6.
|
|
110
|
+
"better-sqlite3": "^12.9.0",
|
|
111
|
+
"bunchee": "^6.10.0",
|
|
112
112
|
"express": "^5.2.1",
|
|
113
113
|
"mariadb": "^3.5.2",
|
|
114
114
|
"mongodb": "^7.1.1",
|
|
115
|
-
"mysql2": "^3.
|
|
115
|
+
"mysql2": "^3.22.0",
|
|
116
116
|
"pg": "^8.20.0",
|
|
117
117
|
"pg-query-stream": "^4.14.0"
|
|
118
118
|
},
|
|
@@ -156,5 +156,5 @@
|
|
|
156
156
|
"publishConfig": {
|
|
157
157
|
"access": "public"
|
|
158
158
|
},
|
|
159
|
-
"gitHead": "
|
|
159
|
+
"gitHead": "37ad1e16aaafba493d402cc7c55b07a818e71d91"
|
|
160
160
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mongoSchemaGenerator-8aUNHkiE.js","sources":["../../src/dialect/abstractDialect.ts","../../src/mongo/mongoDialect.ts","../../src/migrate/generator/mongoSchemaGenerator.ts"],"sourcesContent":["import type { DialectFeatures, DialectName, EntityMeta, FieldOptions, NamingStrategy, Type } from '../type/index.js';\n\n/**\n * Options for initializing a dialect.\n */\nexport interface DialectOptions {\n readonly namingStrategy?: NamingStrategy;\n readonly driverCapabilities?: Partial<DialectFeatures>;\n}\n\n/**\n * Merge dialect capability defaults with optional overrides from {@link DialectOptions.driverCapabilities}.\n */\nexport function mergeDialectFeatures(defaults: DialectFeatures, patch?: Partial<DialectFeatures>): DialectFeatures {\n return patch ? { ...defaults, ...patch } : defaults;\n}\n\n/**\n * Base abstract class for all database dialects (SQL and NoSQL).\n */\nexport abstract class AbstractDialect {\n abstract readonly dialectName: DialectName;\n\n abstract readonly insertIdStrategy: 'first' | 'last';\n readonly namingStrategy: NamingStrategy | undefined;\n readonly features: DialectFeatures;\n\n constructor(\n featureDefaults: DialectFeatures,\n protected readonly options: DialectOptions = {},\n ) {\n this.namingStrategy = options.namingStrategy;\n this.features = mergeDialectFeatures(featureDefaults, options.driverCapabilities);\n }\n\n /**\n * Resolve the table name for an entity, applying naming strategy if necessary.\n */\n resolveTableName<E>(entity: Type<E>, meta: EntityMeta<E>): string {\n const name = meta.name ?? entity.name;\n if (name !== entity.name || !this.namingStrategy) {\n return name;\n }\n return this.namingStrategy.tableName(name);\n }\n\n /**\n * Resolve the column/field name for a property, applying naming strategy if necessary.\n */\n resolveColumnName(key: string, field: FieldOptions | undefined): string {\n if (!field || field.name !== key || !this.namingStrategy) {\n return field?.name ?? key;\n }\n return this.namingStrategy.columnName(field.name);\n }\n}\n","import { type Document, type Filter, ObjectId, type Sort } from 'mongodb';\nimport type { DialectOptions } from '../dialect/abstractDialect.js';\nimport { AbstractDialect } from '../dialect/abstractDialect.js';\nimport { getMeta } from '../entity/index.js';\nimport type { IndexType } from '../schema/types.js';\nimport type {\n DialectFeatures,\n EntityMeta,\n FieldValue,\n Query,\n QueryAggregate,\n QueryOptions,\n QuerySelect,\n QuerySortMap,\n QueryVectorSearch,\n QueryWhere,\n RelationKey,\n Type,\n} from '../type/index.js';\nimport {\n buildQueryWhereAsMap,\n buildSortMap,\n type CallbackKey,\n fillOnFields,\n filterFieldKeys,\n filterRelationKeys,\n getKeys,\n hasKeys,\n isVectorSearch,\n parseGroupMap,\n} from '../util/index.js';\n\nexport class MongoDialect extends AbstractDialect {\n /** Default {@link DialectFeatures} for MongoDB; shared by {@link MongoSchemaGenerator}. */\n static readonly defaultDialectFeatures: DialectFeatures = {\n explicitJsonCast: false,\n nativeArrays: false,\n supportsJsonb: false,\n returning: false,\n ifNotExists: false,\n indexIfNotExists: false,\n dropTableCascade: false,\n renameColumn: false,\n foreignKeyAlter: false,\n columnComment: false,\n vectorIndexStyle: 'create',\n vectorSupportsLength: false,\n supportsTimestamptz: false,\n defaultStringAsText: false,\n };\n\n readonly dialectName = 'mongodb';\n\n override readonly insertIdStrategy = 'last';\n\n constructor(options: DialectOptions = {}) {\n super(MongoDialect.defaultDialectFeatures, options);\n }\n\n private static readonly ID_KEY = '_id';\n private static readonly VECTOR_INDEX_TYPES = new Set<IndexType>(['vectorSearch', 'hnsw', 'ivfflat', 'vector']);\n\n private static readonly AGGREGATE_OP_MAP: Record<string, string> = {\n $count: '$sum',\n $sum: '$sum',\n $avg: '$avg',\n $min: '$min',\n $max: '$max',\n };\n\n public where<E extends Document>(\n entity: Type<E>,\n where: QueryWhere<E> = {},\n { softDelete }: QueryOptions = {},\n ): Filter<E> {\n const meta = getMeta(entity);\n const whereMap = buildQueryWhereAsMap(meta, where);\n\n if (meta.softDelete && (softDelete || softDelete === undefined) && !whereMap[meta.softDelete]) {\n const field = meta.fields[meta.softDelete];\n (whereMap as Record<string, unknown>)[this.resolveColumnName(meta.softDelete, field!)] = null;\n }\n\n const filter: Record<string, unknown> = {};\n for (const [rawKey, rawVal] of Object.entries(whereMap)) {\n let key = rawKey;\n let val: unknown = rawVal;\n if (key === '$and' || key === '$or') {\n filter[key] = (val as QueryWhere<E>[]).map((filterIt) => this.where(entity, filterIt));\n } else {\n const field = meta.fields[key];\n if (key === MongoDialect.ID_KEY || key === meta.id) {\n key = MongoDialect.ID_KEY;\n val = this.getIdValue(val as IdValue);\n } else if (field) {\n key = this.resolveColumnName(key, field);\n }\n if (\n val &&\n typeof val === 'object' &&\n !Array.isArray(val) &&\n this.hasOperatorKeys(val as Record<string, unknown>)\n ) {\n val = this.transformOperators(val as Record<string, unknown>);\n } else if (Array.isArray(val)) {\n val = { $in: val };\n }\n filter[key] = val;\n }\n }\n return filter as Filter<E>;\n }\n\n /**\n * Check if an object has operator keys (keys starting with $).\n */\n private hasOperatorKeys(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).some((key) => key.startsWith('$'));\n }\n\n protected mapTableNameRow(row: { table_name: string }): string {\n return row.table_name;\n }\n\n /** String operators → { pattern: (v) => regex, caseInsensitive } */\n private static readonly REGEX_OP_MAP: Record<string, { wrap: (v: unknown) => string; ci: boolean }> = {\n $startsWith: { wrap: (v) => `^${v}`, ci: false },\n $istartsWith: { wrap: (v) => `^${v}`, ci: true },\n $endsWith: { wrap: (v) => `${v}$`, ci: false },\n $iendsWith: { wrap: (v) => `${v}$`, ci: true },\n $includes: { wrap: (v) => String(v), ci: false },\n $iincludes: { wrap: (v) => String(v), ci: true },\n $like: { wrap: (v) => String(v).replace(/%/g, '.*').replace(/_/g, '.'), ci: false },\n $ilike: { wrap: (v) => String(v).replace(/%/g, '.*').replace(/_/g, '.'), ci: true },\n };\n\n /** MongoDB native operators — pass through as-is. */\n private static readonly NATIVE_OPS = new Set([\n '$all',\n '$size',\n '$elemMatch',\n '$eq',\n '$ne',\n '$lt',\n '$lte',\n '$gt',\n '$gte',\n '$in',\n '$nin',\n '$regex',\n '$not',\n ]);\n\n /**\n * Transform UQL operators to MongoDB operators.\n */\n private transformOperators(ops: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [op, val] of Object.entries(ops)) {\n // Native MongoDB operators — pass through directly\n if (MongoDialect.NATIVE_OPS.has(op)) {\n result[op] = val;\n continue;\n }\n // String/pattern → regex operators (8 variants including $like/$ilike)\n const regexEntry = MongoDialect.REGEX_OP_MAP[op];\n if (regexEntry) {\n result['$regex'] = regexEntry.wrap(val);\n if (regexEntry.ci) result['$options'] = 'i';\n continue;\n }\n // Structural transforms\n switch (op) {\n case '$between': {\n const [min, max] = val as [unknown, unknown];\n result['$gte'] = min;\n result['$lte'] = max;\n break;\n }\n case '$isNull':\n result[val ? '$eq' : '$ne'] = null;\n break;\n case '$isNotNull':\n result[val ? '$ne' : '$eq'] = null;\n break;\n case '$text':\n result['$text'] = { $search: val };\n break;\n default:\n result[op] = val;\n break;\n }\n }\n return result;\n }\n\n public select<E extends Document>(entity: Type<E>, select: QuerySelect<E>): QuerySelect<E> {\n return select;\n }\n\n public sort<E extends Document>(entity: Type<E>, sort: QuerySortMap<E>): Sort {\n const raw = buildSortMap(sort);\n const normalized: Record<string, 1 | -1> = {};\n for (const [key, dir] of Object.entries(raw)) {\n normalized[key] = dir === 'desc' || dir === -1 ? -1 : 1;\n }\n return normalized as Sort;\n }\n\n public aggregationPipeline<E extends Document>(entity: Type<E>, q: Query<E>): MongoAggregationPipelineEntry<E>[] {\n const meta = getMeta(entity);\n const where = this.where(entity, q.$where);\n const sort = this.sort(entity, q.$sort!);\n const firstPipelineEntry: MongoAggregationPipelineEntry<E> = {};\n\n if (hasKeys(where)) {\n firstPipelineEntry.$match = where;\n }\n if (hasKeys(sort)) {\n firstPipelineEntry.$sort = sort;\n }\n\n const pipeline: MongoAggregationPipelineEntry<E>[] = [];\n\n if (hasKeys(firstPipelineEntry)) {\n pipeline.push(firstPipelineEntry);\n }\n\n const relKeys = filterRelationKeys(meta, q.$select!);\n\n for (const relKey of relKeys) {\n const relOpts = meta.relations[relKey];\n if (!relOpts) continue;\n\n if (relOpts.cardinality === '1m' || relOpts.cardinality === 'mm') {\n // '1m' and 'mm' should be resolved in a higher layer because they will need multiple queries\n continue;\n }\n\n const relEntity = relOpts.entity!();\n const relMeta = getMeta(relEntity);\n\n if (relOpts.cardinality === 'm1') {\n const localField = meta.fields[relOpts.references![0].local];\n pipeline.push({\n $lookup: {\n from: this.resolveTableName(relEntity, relMeta),\n localField: this.resolveColumnName(relOpts.references![0].local, localField!),\n foreignField: '_id',\n as: relKey,\n },\n });\n } else {\n const foreignField = relMeta.fields[relOpts.references![0].foreign];\n const foreignFieldName = this.resolveColumnName(relOpts.references![0].foreign, foreignField!);\n const referenceWhere = this.where(relEntity, where);\n const referenceSort = this.sort(relEntity, q.$sort!);\n const _id = MongoDialect.ID_KEY;\n const referencePipelineEntry: MongoAggregationPipelineEntry<FieldValue<E>> = {\n $match: { [foreignFieldName]: referenceWhere[_id] },\n };\n if (hasKeys(referenceSort)) {\n referencePipelineEntry.$sort = referenceSort;\n }\n pipeline.push({\n $lookup: {\n from: this.resolveTableName(relEntity, relMeta),\n pipeline: [referencePipelineEntry],\n as: relKey,\n },\n });\n }\n\n pipeline.push({ $unwind: { path: `$${relKey}`, preserveNullAndEmptyArrays: true } });\n }\n\n return pipeline;\n }\n\n public normalizeIds<E extends Document>(meta: EntityMeta<E>, docs: E[] | undefined): E[] | undefined {\n return docs?.map((doc) => this.normalizeId(meta, doc)) as E[] | undefined;\n }\n\n public normalizeId<E extends Document>(meta: EntityMeta<E>, doc: E | undefined): E | undefined {\n if (!doc) {\n return doc;\n }\n\n const res = doc as unknown as Record<string, unknown>;\n const _id = MongoDialect.ID_KEY;\n\n if (res[_id]) {\n res[meta.id as string] = res[_id];\n if (meta.id !== _id) {\n delete res[_id];\n }\n }\n\n for (const key of getKeys(meta.fields)) {\n const field = meta.fields[key];\n const dbName = this.resolveColumnName(key, field!);\n if (dbName !== key && res[dbName] !== undefined) {\n res[key] = res[dbName];\n delete res[dbName];\n }\n }\n\n const relKeys = getKeys(meta.relations).filter((key) => res[key]) as RelationKey<E>[];\n\n for (const relKey of relKeys) {\n const relOpts = meta.relations[relKey];\n if (!relOpts) continue;\n const relMeta = getMeta(relOpts.entity!());\n res[relKey] = Array.isArray(res[relKey])\n ? this.normalizeIds(relMeta, res[relKey] as Document[])\n : this.normalizeId(relMeta, res[relKey] as Document);\n }\n\n return res as unknown as E;\n }\n\n public getIdValue<T extends IdValue>(value: T): T {\n if (value instanceof ObjectId) {\n return value;\n }\n try {\n return new ObjectId(value) as T;\n } catch (e) {\n return value;\n }\n }\n\n public getPersistable<E extends Document>(meta: EntityMeta<E>, payload: E, callbackKey: CallbackKey): Partial<E> {\n return this.getPersistables(meta, payload, callbackKey)[0];\n }\n\n public getPersistables<E extends Document>(\n meta: EntityMeta<E>,\n payload: E | E[],\n callbackKey: CallbackKey,\n ): Partial<E>[] {\n const payloads = fillOnFields(meta, payload, callbackKey);\n const persistableKeys = filterFieldKeys(meta, payloads[0], callbackKey);\n return payloads.map((it) =>\n persistableKeys.reduce<Partial<E>>(\n (acc, key) => {\n const field = meta.fields[key];\n (acc as Record<string, unknown>)[this.resolveColumnName(key, field!)] = it[key];\n return acc;\n },\n {} as Partial<E>,\n ),\n );\n }\n\n /**\n * Build MongoDB aggregation pipeline stages from a QueryAggregate.\n */\n public buildAggregateStages<E extends Document>(entity: Type<E>, q: QueryAggregate<E>): Record<string, unknown>[] {\n const pipeline: Record<string, unknown>[] = [];\n\n // $match stage (WHERE equivalent — before grouping)\n if (q.$where) {\n const filter = this.where(entity, q.$where);\n if (hasKeys(filter)) {\n pipeline.push({ $match: filter });\n }\n }\n\n // $group stage\n const groupId: Record<string, string> = {};\n const groupAccumulators: Record<string, Record<string, unknown>> = {};\n\n for (const entry of parseGroupMap(q.$group)) {\n if (entry.kind === 'key') {\n groupId[entry.alias] = `$${entry.alias}`;\n } else {\n const mongoOp = MongoDialect.AGGREGATE_OP_MAP[entry.op];\n groupAccumulators[entry.alias] = entry.op === '$count' ? { [mongoOp]: 1 } : { [mongoOp]: `$${entry.fieldRef}` };\n }\n }\n\n pipeline.push({ $group: { _id: hasKeys(groupId) ? groupId : null, ...groupAccumulators } });\n\n // Project stage — rename _id fields back to their original names\n if (hasKeys(groupId)) {\n const project: Record<string, unknown> = { _id: 0 };\n for (const alias of Object.keys(groupId)) {\n project[alias] = `$_id.${alias}`;\n }\n for (const alias of Object.keys(groupAccumulators)) {\n project[alias] = 1;\n }\n pipeline.push({ $project: project });\n }\n\n // $match stage for HAVING (post-group filtering)\n if (q.$having) {\n const havingFilter = this.buildHavingFilter(q.$having);\n if (hasKeys(havingFilter)) {\n pipeline.push({ $match: havingFilter });\n }\n }\n\n // $sort stage\n if (q.$sort) {\n const sort = this.sort(entity, q.$sort);\n if (hasKeys(sort)) {\n pipeline.push({ $sort: sort });\n }\n }\n\n // $skip and $limit stages\n if (q.$skip !== undefined) {\n pipeline.push({ $skip: q.$skip });\n }\n if (q.$limit !== undefined) {\n pipeline.push({ $limit: q.$limit });\n }\n\n return pipeline;\n }\n\n private buildHavingFilter(having: Record<string, unknown>): Record<string, unknown> {\n const filter: Record<string, unknown> = {};\n for (const [alias, condition] of Object.entries(having)) {\n if (condition === undefined) continue;\n if (typeof condition === 'number') {\n filter[alias] = condition;\n } else if (typeof condition === 'object' && condition !== null) {\n filter[alias] = this.transformOperators(condition as Record<string, unknown>);\n }\n }\n return filter;\n }\n\n /**\n * Separate vector sort entries from regular sort entries.\n * Returns `undefined` if no vector sort is present.\n */\n extractVectorSort<E extends Document>(sort: QuerySortMap<E> | undefined): ExtractedVectorSort<E> | undefined {\n if (!sort) return undefined;\n const raw = buildSortMap(sort);\n let vectorKey: string | undefined;\n let vectorSearch: QueryVectorSearch | undefined;\n const regularSort = {} as QuerySortMap<E>;\n\n for (const [key, value] of Object.entries(raw)) {\n if (isVectorSearch(value)) {\n vectorKey = key;\n vectorSearch = value;\n } else {\n (regularSort as Record<string, unknown>)[key] = value;\n }\n }\n\n if (!vectorKey || !vectorSearch) return undefined;\n\n return { vectorKey, vectorSearch, regularSort };\n }\n\n /**\n * Build a `$vectorSearch` aggregation pipeline stage.\n * Merges `$where` into `$vectorSearch.filter` for optimal pre-filtering.\n */\n buildVectorSearchStage<E extends Document>(\n entity: Type<E>,\n meta: EntityMeta<E>,\n key: string,\n search: QueryVectorSearch,\n where: QueryWhere<E> | undefined,\n limit: number,\n ): Record<string, unknown> {\n const field = meta.fields[key];\n if (!field) {\n throw new TypeError(`Field '${key}' not found in entity '${meta.name}'`);\n }\n const colName = this.resolveColumnName(key, field);\n\n // Resolve index name from @Index metadata, or fall back to convention\n const indexMeta = meta.indexes?.find(\n (idx) => idx.columns.includes(key) && MongoDialect.VECTOR_INDEX_TYPES.has(idx.type!),\n );\n const indexName = indexMeta?.name ?? `${colName}_index`;\n\n const stage: Record<string, unknown> = {\n index: indexName,\n path: colName,\n queryVector: [...search.$vector],\n numCandidates: limit * 10,\n limit,\n };\n\n // Pre-filter: merge $where into $vectorSearch.filter\n if (where) {\n const filter = this.where(entity, where);\n if (hasKeys(filter)) {\n stage['filter'] = filter;\n }\n }\n\n return { $vectorSearch: stage };\n }\n}\n\nexport type MongoAggregationPipelineEntry<E extends Document> = {\n $lookup?: MongoAggregationLookup<E>;\n $match?: Filter<E> | Record<string, unknown>;\n $sort?: Sort;\n $unwind?: MongoAggregationUnwind;\n $group?: Record<string, unknown>;\n $project?: Record<string, unknown>;\n $skip?: number;\n $limit?: number;\n};\n\ntype MongoAggregationLookup<E extends Document> = {\n readonly from?: string;\n readonly foreignField?: string;\n readonly localField?: string;\n readonly pipeline?: MongoAggregationPipelineEntry<FieldValue<E>>[];\n readonly as?: RelationKey<E>;\n};\n\ntype MongoAggregationUnwind = {\n readonly path?: string;\n readonly preserveNullAndEmptyArrays?: boolean;\n};\n\ntype IdValue = string | ObjectId;\n\nexport type ExtractedVectorSort<E> = {\n readonly vectorKey: string;\n readonly vectorSearch: QueryVectorSearch;\n readonly regularSort: QuerySortMap<E>;\n};\n","import { AbstractDialect } from '../../dialect/abstractDialect.js';\nimport { getMeta } from '../../entity/index.js';\nimport { MongoDialect } from '../../mongo/mongoDialect.js';\nimport type { ForeignKeyAction, IndexNode, TableNode } from '../../schema/types.js';\nimport type {\n DialectName,\n FieldOptions,\n IndexSchema,\n NamingStrategy,\n SchemaDiff,\n SchemaGenerator,\n Type,\n} from '../../type/index.js';\nimport { getKeys } from '../../util/index.js';\nimport type { TableDefinition } from '../builder/types.js';\n\nexport class MongoSchemaGenerator extends AbstractDialect implements SchemaGenerator {\n readonly dialectName = 'mongodb' satisfies DialectName;\n\n constructor(\n namingStrategy?: NamingStrategy,\n protected readonly defaultForeignKeyAction?: ForeignKeyAction,\n ) {\n super(MongoDialect.defaultDialectFeatures, { namingStrategy });\n }\n\n override readonly insertIdStrategy: 'first' | 'last' = 'last';\n\n generateCreateTable<E>(entity: Type<E>, _options?: { ifNotExists?: boolean }): string[] {\n const meta = getMeta(entity);\n const collectionName = this.resolveTableName(entity, meta);\n const indexes: IndexSchema[] = [];\n\n for (const key of getKeys(meta.fields)) {\n const field = meta.fields[key];\n if (field?.index) {\n const columnName = this.resolveColumnName(key, field);\n const indexName = typeof field.index === 'string' ? field.index : `idx_${collectionName}_${columnName}`;\n indexes.push({\n name: indexName,\n columns: [columnName],\n unique: !!field.unique,\n });\n }\n }\n\n return [JSON.stringify({ action: 'createCollection', name: collectionName, indexes })];\n }\n\n generateDropTable<E>(entity: Type<E>): string {\n const meta = getMeta(entity);\n const collectionName = this.resolveTableName(entity, meta);\n return JSON.stringify({ action: 'dropCollection', name: collectionName });\n }\n\n generateAlterTable(diff: SchemaDiff): string[] {\n const statements: string[] = [];\n if (diff.indexesToAdd?.length) {\n for (const index of diff.indexesToAdd) {\n statements.push(this.generateCreateIndex(diff.tableName, index));\n }\n }\n return statements;\n }\n\n generateAlterTableDown(diff: SchemaDiff): string[] {\n const statements: string[] = [];\n if (diff.indexesToAdd?.length) {\n for (const index of diff.indexesToAdd) {\n statements.push(this.generateDropIndex(diff.tableName, index.name));\n }\n }\n return statements;\n }\n\n generateCreateIndex(tableName: string, index: IndexSchema): string {\n const key: Record<string, number> = {};\n for (const col of index.columns) {\n key[col] = 1;\n }\n return JSON.stringify({\n action: 'createIndex',\n collection: tableName,\n name: index.name,\n key,\n options: { unique: index.unique, name: index.name },\n });\n }\n\n generateDropIndex(tableName: string, indexName: string): string {\n return JSON.stringify({\n action: 'dropIndex',\n collection: tableName,\n name: indexName,\n });\n }\n\n getSqlType(fieldOptions: FieldOptions, fieldType?: unknown): string {\n return '';\n }\n\n getBooleanType(): string {\n return '';\n }\n\n generateColumnDefinitions(): string[] {\n return [];\n }\n\n generateColumnDefinition(): string {\n return '';\n }\n\n generateColumnDefinitionFromSchema(): string {\n return '';\n }\n\n generateTableConstraints(): string[] {\n return [];\n }\n\n generateAlterColumnStatements(): string[] {\n return [];\n }\n\n getTableOptions(): string {\n return '';\n }\n\n generateColumnComment(): string {\n return '';\n }\n\n formatDefaultValue(): string {\n return '';\n }\n\n generateCreateTableFromNode(table: TableNode, _options?: { ifNotExists?: boolean }): string[] {\n return [JSON.stringify({ action: 'createCollection', name: table.name })];\n }\n\n generateCreateIndexFromNode(index: IndexNode): string {\n const key: Record<string, number> = {};\n for (const col of index.columns) {\n key[col.name] = 1;\n }\n return JSON.stringify({\n action: 'createIndex',\n collection: index.table.name,\n name: index.name,\n key,\n options: { unique: index.unique, name: index.name },\n });\n }\n\n generateDropTableFromNode(table: TableNode): string {\n return JSON.stringify({ action: 'dropCollection', name: table.name });\n }\n\n generateCreateTableFromDefinition(table: TableDefinition, _options?: { ifNotExists?: boolean }): string[] {\n return [JSON.stringify({ action: 'createCollection', name: table.name })];\n }\n\n generateDropTableSql(tableName: string): string {\n return JSON.stringify({ action: 'dropCollection', name: tableName });\n }\n\n generateRenameTableSql(oldName: string, newName: string): string {\n return JSON.stringify({ action: 'renameCollection', from: oldName, to: newName });\n }\n\n generateAddColumnSql(): string {\n return '';\n }\n\n generateDropColumnSql(): string {\n return '';\n }\n\n generateRenameColumnSql(): string {\n return '';\n }\n\n generateAlterColumnSql(): string {\n return '';\n }\n\n generateCreateIndexSql(tableName: string, index: IndexSchema): string {\n return this.generateCreateIndex(tableName, index);\n }\n\n generateDropIndexSql(tableName: string, indexName: string): string {\n return this.generateDropIndex(tableName, indexName);\n }\n\n generateAddForeignKeySql(): string {\n return '';\n }\n\n generateDropForeignKeySql(): string {\n return '';\n }\n\n diffSchema<E>(entity: Type<E>, currentTable: TableNode | undefined): SchemaDiff | undefined {\n const meta = getMeta(entity);\n const collectionName = this.resolveTableName(entity, meta);\n\n if (!currentTable) {\n return { tableName: collectionName, type: 'create' };\n }\n\n const indexesToAdd: IndexSchema[] = [];\n const existingIndexes = new Set(currentTable.indexes?.map((i) => i.name) ?? []);\n\n for (const key of getKeys(meta.fields)) {\n const field = meta.fields[key];\n if (field?.index) {\n const columnName = this.resolveColumnName(key, field);\n const indexName = typeof field.index === 'string' ? field.index : `idx_${collectionName}_${columnName}`;\n if (!existingIndexes.has(indexName)) {\n indexesToAdd.push({\n name: indexName,\n columns: [columnName],\n unique: !!field.unique,\n });\n }\n }\n }\n\n if (indexesToAdd.length === 0) {\n return undefined;\n }\n\n return {\n tableName: collectionName,\n type: 'alter',\n indexesToAdd,\n };\n }\n}\n"],"names":["mergeDialectFeatures","defaults","patch","AbstractDialect","featureDefaults","options","namingStrategy","features","driverCapabilities","resolveTableName","entity","meta","name","tableName","resolveColumnName","key","field","columnName","MongoDialect","defaultDialectFeatures","explicitJsonCast","nativeArrays","supportsJsonb","returning","ifNotExists","indexIfNotExists","dropTableCascade","renameColumn","foreignKeyAlter","columnComment","vectorIndexStyle","vectorSupportsLength","supportsTimestamptz","defaultStringAsText","dialectName","insertIdStrategy","ID_KEY","VECTOR_INDEX_TYPES","Set","AGGREGATE_OP_MAP","$count","$sum","$avg","$min","$max","where","softDelete","getMeta","whereMap","buildQueryWhereAsMap","undefined","fields","filter","rawKey","rawVal","Object","entries","val","map","filterIt","id","getIdValue","Array","isArray","hasOperatorKeys","transformOperators","$in","obj","keys","some","startsWith","mapTableNameRow","row","table_name","REGEX_OP_MAP","$startsWith","wrap","v","ci","$istartsWith","$endsWith","$iendsWith","$includes","String","$iincludes","$like","replace","$ilike","NATIVE_OPS","ops","result","op","has","regexEntry","min","max","$search","select","sort","raw","buildSortMap","normalized","dir","aggregationPipeline","q","$where","$sort","firstPipelineEntry","hasKeys","$match","pipeline","push","relKeys","filterRelationKeys","$select","relKey","relOpts","relations","cardinality","relEntity","relMeta","localField","references","local","$lookup","from","foreignField","as","foreign","foreignFieldName","referenceWhere","referenceSort","_id","referencePipelineEntry","$unwind","path","preserveNullAndEmptyArrays","normalizeIds","docs","doc","normalizeId","res","getKeys","dbName","value","ObjectId","e","getPersistable","payload","callbackKey","getPersistables","payloads","fillOnFields","persistableKeys","filterFieldKeys","it","reduce","acc","buildAggregateStages","groupId","groupAccumulators","entry","parseGroupMap","$group","kind","alias","mongoOp","fieldRef","project","$project","$having","havingFilter","buildHavingFilter","$skip","$limit","having","condition","extractVectorSort","vectorKey","vectorSearch","regularSort","isVectorSearch","buildVectorSearchStage","search","limit","TypeError","colName","indexMeta","indexes","find","idx","columns","includes","type","indexName","stage","index","queryVector","$vector","numCandidates","$vectorSearch","MongoSchemaGenerator","defaultForeignKeyAction","generateCreateTable","_options","collectionName","unique","JSON","stringify","action","generateDropTable","generateAlterTable","diff","statements","indexesToAdd","length","generateCreateIndex","generateAlterTableDown","generateDropIndex","col","collection","getSqlType","fieldOptions","fieldType","getBooleanType","generateColumnDefinitions","generateColumnDefinition","generateColumnDefinitionFromSchema","generateTableConstraints","generateAlterColumnStatements","getTableOptions","generateColumnComment","formatDefaultValue","generateCreateTableFromNode","table","generateCreateIndexFromNode","generateDropTableFromNode","generateCreateTableFromDefinition","generateDropTableSql","generateRenameTableSql","oldName","newName","to","generateAddColumnSql","generateDropColumnSql","generateRenameColumnSql","generateAlterColumnSql","generateCreateIndexSql","generateDropIndexSql","generateAddForeignKeySql","generateDropForeignKeySql","diffSchema","currentTable","existingIndexes","i"],"mappings":"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"}
|