uql-orm 0.8.0 → 0.8.2
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 +12 -0
- package/README.md +9 -2
- package/dist/browser/{mongoSchemaGenerator-B1IameRz.js → mongoSchemaGenerator-8aUNHkiE.js} +23 -17
- package/dist/browser/mongoSchemaGenerator-8aUNHkiE.js.map +1 -0
- package/dist/browser/uql-browser.min.js +33 -3
- package/dist/browser/uql-browser.min.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/libsql/libsqlQuerier.d.ts +7 -1
- package/dist/libsql/libsqlQuerier.d.ts.map +1 -1
- package/dist/libsql/libsqlQuerier.js +6 -1
- package/dist/libsql/libsqlQuerier.js.map +1 -1
- package/dist/libsql/libsqlQuerierPool.d.ts +8 -0
- package/dist/libsql/libsqlQuerierPool.d.ts.map +1 -1
- package/dist/libsql/libsqlQuerierPool.js +22 -0
- package/dist/libsql/libsqlQuerierPool.js.map +1 -1
- package/dist/migrate/acquireQuerierForMigrations.d.ts +9 -0
- package/dist/migrate/acquireQuerierForMigrations.d.ts.map +1 -0
- package/dist/migrate/acquireQuerierForMigrations.js +10 -0
- package/dist/migrate/acquireQuerierForMigrations.js.map +1 -0
- package/dist/migrate/builder/migrationBuilder.d.ts +1 -0
- package/dist/migrate/builder/migrationBuilder.d.ts.map +1 -1
- package/dist/migrate/builder/migrationBuilder.js +13 -6
- package/dist/migrate/builder/migrationBuilder.js.map +1 -1
- package/dist/migrate/builder/splitSqlStatements.d.ts +9 -0
- package/dist/migrate/builder/splitSqlStatements.d.ts.map +1 -0
- package/dist/migrate/builder/splitSqlStatements.js +14 -0
- package/dist/migrate/builder/splitSqlStatements.js.map +1 -0
- package/dist/migrate/codegen/index.d.ts +1 -0
- package/dist/migrate/codegen/index.d.ts.map +1 -1
- package/dist/migrate/codegen/index.js +1 -0
- package/dist/migrate/codegen/index.js.map +1 -1
- package/dist/migrate/codegen/migrationFile.d.ts +29 -0
- package/dist/migrate/codegen/migrationFile.d.ts.map +1 -0
- package/dist/migrate/codegen/migrationFile.js +48 -0
- package/dist/migrate/codegen/migrationFile.js.map +1 -0
- package/dist/migrate/generator/mongoSchemaGenerator.d.ts +9 -3
- package/dist/migrate/generator/mongoSchemaGenerator.d.ts.map +1 -1
- package/dist/migrate/generator/mongoSchemaGenerator.js +6 -6
- package/dist/migrate/generator/mongoSchemaGenerator.js.map +1 -1
- package/dist/migrate/index.d.ts +1 -0
- package/dist/migrate/index.d.ts.map +1 -1
- package/dist/migrate/index.js +1 -0
- package/dist/migrate/index.js.map +1 -1
- package/dist/migrate/migrator.d.ts +0 -8
- package/dist/migrate/migrator.d.ts.map +1 -1
- package/dist/migrate/migrator.js +26 -66
- package/dist/migrate/migrator.js.map +1 -1
- package/dist/migrate/schemaGenerator.d.ts +3 -6
- package/dist/migrate/schemaGenerator.d.ts.map +1 -1
- package/dist/migrate/schemaGenerator.js +16 -22
- package/dist/migrate/schemaGenerator.js.map +1 -1
- package/dist/migrate/storage/databaseStorage.d.ts.map +1 -1
- package/dist/migrate/storage/databaseStorage.js +3 -2
- package/dist/migrate/storage/databaseStorage.js.map +1 -1
- package/dist/type/migration.d.ts +7 -6
- package/dist/type/migration.d.ts.map +1 -1
- package/dist/type/querierPool.d.ts +8 -1
- package/dist/type/querierPool.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/browser/mongoSchemaGenerator-B1IameRz.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file. Please add
|
|
|
4
4
|
|
|
5
5
|
date format is [yyyy-mm-dd]
|
|
6
6
|
|
|
7
|
+
## [0.8.2] - 2026-04-04
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
- **[#86](https://github.com/rogerpadilla/uql/issues/86) — Invalid generated migration TypeScript with LibSQL**: `uql-migrate generate:entities` embedded SQL inside a JS **template literal**; SQLite/LibSQL identifier quotes use **backticks**, which **terminated** the outer literal and produced invalid `.ts` (so `uql-migrate up` could not even load the migration). Generated files now use **`JSON.stringify`** for each `querier.run(...)` argument (double-quoted string literals), so SQL may contain backticks, `"`, newlines, `${` inside string data, etc., without breaking TypeScript.
|
|
12
|
+
|
|
13
|
+
- **[#87](https://github.com/rogerpadilla/uql/issues/87) — `uql-migrate` against libsql + sqld (HTTP) with multiple statements in one `run`**: **sqld** does not accept **multiple SQL statements** in a single `execute` / `run` call; a migration that bundled `CREATE TABLE …;` and `CREATE INDEX …;` in one string failed at runtime even when the TypeScript was valid. **Entity-generated migrations** now emit **one `await querier.run("…")` per statement**, and **`Migrator` / `syncForce` / `autoSync` / `MigrationBuilder`** apply create-table DDL **statement-by-statement**, matching sqld’s behavior.
|
|
14
|
+
|
|
15
|
+
### Breaking Changes
|
|
16
|
+
|
|
17
|
+
- **`SchemaGenerator` create-table DDL** (supports the [#87](https://github.com/rogerpadilla/uql/issues/87) fix end-to-end): **`generateCreateTable`**, **`generateCreateTableFromNode`**, and **`generateCreateTableFromDefinition`** now return **`string[]`** — one string per logical statement (`CREATE EXTENSION` if needed, `CREATE TABLE`, each separate `CREATE INDEX`, …). They used to return a **single** newline-joined `string`. **Migrate custom code** by taking the array and either calling `querier.run(stmt)` for each element or using **`.join('\n')`** when you need one script blob. **`MongoSchemaGenerator`** uses the same signatures; each method returns a **one-element** array containing the JSON sync command string.
|
|
18
|
+
|
|
7
19
|
## [0.8.0] - 2026-04-03
|
|
8
20
|
|
|
9
21
|
### Features
|
package/README.md
CHANGED
|
@@ -272,8 +272,8 @@ defineEntity(User, {
|
|
|
272
272
|
name: 'users',
|
|
273
273
|
fields: {
|
|
274
274
|
id: { type: 'uuid', isId: true },
|
|
275
|
-
name: { type:
|
|
276
|
-
email: { type:
|
|
275
|
+
name: { type: String },
|
|
276
|
+
email: { type: String, unique: true },
|
|
277
277
|
},
|
|
278
278
|
|
|
279
279
|
indexes: [
|
|
@@ -312,6 +312,7 @@ export default {
|
|
|
312
312
|
|
|
313
313
|
> **Notes:**
|
|
314
314
|
> - Reuse one pool for both app queries and migrations to keep behavior (for example naming strategy) consistent.
|
|
315
|
+
> - **LibSQL embedded replica** (`file:` + `syncUrl`): `LibsqlQuerierPool` runs **migrations and the `uql_migrations` table** against **`syncUrl`**, while **`getQuerier`** stays on the local file. **`getDiffs` / introspection** (e.g. `generate:entities`) still use the normal pool connection—often the local replica—so compare with your remote if needed.
|
|
315
316
|
> - If your architecture spans backend + browser, `HttpQuerier` reduces custom API mapping and keeps query semantics aligned.
|
|
316
317
|
> - **Upgrading:** use `pool.dialect` (not `pool.dialectInstance`), read `pool.dialect.dialectName`, and remove any top-level `dialect` from migrate config (see `CHANGELOG.md`).
|
|
317
318
|
|
|
@@ -562,6 +563,12 @@ npx uql-migrate up
|
|
|
562
563
|
|
|
563
564
|
> **Note:** Keep entities as the source of truth to minimize drift between code and database schema.
|
|
564
565
|
|
|
566
|
+
**Generated `generate:entities` files** emit **one `await querier.run("…")` per SQL statement** (table vs indexes, etc.), with the SQL passed as a **double-quoted string literal** (`JSON.stringify`) so dialects that quote identifiers with **backticks** (SQLite, LibSQL, MySQL-style) do not produce invalid TypeScript.
|
|
567
|
+
|
|
568
|
+
If you implement a **custom `SchemaGenerator`**, note that **`generateCreateTable`**, **`generateCreateTableFromNode`**, and **`generateCreateTableFromDefinition`** return **`string[]`** (one entry per `querier.run`). Use **`.join('\n')`** only when you need a single combined script. See the **[changelog](CHANGELOG.md)** for **0.8.2**.
|
|
569
|
+
|
|
570
|
+
**Advanced:** custom tools can use **`acquireQuerierForMigrations(pool)`** from **`uql-orm/migrate`** to match the same connection choice as **`Migrator`** and **`DatabaseMigrationStorage`** (including optional **`pool.getMigrationQuerier`**).
|
|
571
|
+
|
|
565
572
|
### 1. Unified Configuration
|
|
566
573
|
|
|
567
574
|
Reuse the same `uql.config.ts` for your app and the CLI to ensure consistent settings (naming strategies, entities, pool):
|
|
@@ -505,7 +505,7 @@ class MongoSchemaGenerator extends AbstractDialect {
|
|
|
505
505
|
namingStrategy
|
|
506
506
|
}), this.defaultForeignKeyAction = defaultForeignKeyAction, this.dialectName = 'mongodb', this.insertIdStrategy = 'last';
|
|
507
507
|
}
|
|
508
|
-
generateCreateTable(entity) {
|
|
508
|
+
generateCreateTable(entity, _options) {
|
|
509
509
|
const meta = getMeta(entity);
|
|
510
510
|
const collectionName = this.resolveTableName(entity, meta);
|
|
511
511
|
const indexes = [];
|
|
@@ -523,11 +523,13 @@ class MongoSchemaGenerator extends AbstractDialect {
|
|
|
523
523
|
});
|
|
524
524
|
}
|
|
525
525
|
}
|
|
526
|
-
return
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
526
|
+
return [
|
|
527
|
+
JSON.stringify({
|
|
528
|
+
action: 'createCollection',
|
|
529
|
+
name: collectionName,
|
|
530
|
+
indexes
|
|
531
|
+
})
|
|
532
|
+
];
|
|
531
533
|
}
|
|
532
534
|
generateDropTable(entity) {
|
|
533
535
|
const meta = getMeta(entity);
|
|
@@ -608,11 +610,13 @@ class MongoSchemaGenerator extends AbstractDialect {
|
|
|
608
610
|
formatDefaultValue() {
|
|
609
611
|
return '';
|
|
610
612
|
}
|
|
611
|
-
generateCreateTableFromNode(table) {
|
|
612
|
-
return
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
613
|
+
generateCreateTableFromNode(table, _options) {
|
|
614
|
+
return [
|
|
615
|
+
JSON.stringify({
|
|
616
|
+
action: 'createCollection',
|
|
617
|
+
name: table.name
|
|
618
|
+
})
|
|
619
|
+
];
|
|
616
620
|
}
|
|
617
621
|
generateCreateIndexFromNode(index) {
|
|
618
622
|
const key = {};
|
|
@@ -636,11 +640,13 @@ class MongoSchemaGenerator extends AbstractDialect {
|
|
|
636
640
|
name: table.name
|
|
637
641
|
});
|
|
638
642
|
}
|
|
639
|
-
generateCreateTableFromDefinition(table) {
|
|
640
|
-
return
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
643
|
+
generateCreateTableFromDefinition(table, _options) {
|
|
644
|
+
return [
|
|
645
|
+
JSON.stringify({
|
|
646
|
+
action: 'createCollection',
|
|
647
|
+
name: table.name
|
|
648
|
+
})
|
|
649
|
+
];
|
|
644
650
|
}
|
|
645
651
|
generateDropTableSql(tableName) {
|
|
646
652
|
return JSON.stringify({
|
|
@@ -718,4 +724,4 @@ class MongoSchemaGenerator extends AbstractDialect {
|
|
|
718
724
|
}
|
|
719
725
|
|
|
720
726
|
export { MongoSchemaGenerator };
|
|
721
|
-
//# sourceMappingURL=mongoSchemaGenerator-
|
|
727
|
+
//# sourceMappingURL=mongoSchemaGenerator-8aUNHkiE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
|
@@ -4,6 +4,10 @@ import { Id, Field, ManyToOne, Entity, OneToOne, OneToMany, ManyToMany } from '.
|
|
|
4
4
|
import '../type/index.js';
|
|
5
5
|
import { raw, lowerFirst, upperFirst, getKeys } from '../util/index.js';
|
|
6
6
|
import 'reflect-metadata';
|
|
7
|
+
import { mkdtemp, writeFile, rm } from 'node:fs/promises';
|
|
8
|
+
import { tmpdir } from 'node:os';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { createJiti } from 'jiti';
|
|
7
11
|
|
|
8
12
|
var _dec, _dec1, _dec2, _dec3, _dec4, _dec5, _dec6, /**
|
|
9
13
|
* auto-generated primary-key (when the `onInsert` property is omitted).
|
|
@@ -1139,10 +1143,32 @@ function getDdlForTable(entity, querier, primaryKeyType) {
|
|
|
1139
1143
|
return sql;
|
|
1140
1144
|
}
|
|
1141
1145
|
|
|
1146
|
+
/**
|
|
1147
|
+
* Write TypeScript source to a temp file and load its default export via jiti.
|
|
1148
|
+
*
|
|
1149
|
+
* Use in tests to mirror how `uql-migrate` loads `.ts` migrations. At runtime, the migrator loads
|
|
1150
|
+
* on-disk files with native `import()`; this helper matches CLI-style jiti resolution for generated strings.
|
|
1151
|
+
*/ async function loadTsDefaultExportWithJiti(source, uqlOrmPackageRoot) {
|
|
1152
|
+
const dir = await mkdtemp(join(tmpdir(), 'uql-jiti-'));
|
|
1153
|
+
const filePath = join(dir, 'module.ts');
|
|
1154
|
+
await writeFile(filePath, source, 'utf8');
|
|
1155
|
+
try {
|
|
1156
|
+
const jiti = createJiti(uqlOrmPackageRoot);
|
|
1157
|
+
return await jiti.import(filePath, {
|
|
1158
|
+
default: true
|
|
1159
|
+
});
|
|
1160
|
+
} finally{
|
|
1161
|
+
await rm(dir, {
|
|
1162
|
+
recursive: true,
|
|
1163
|
+
force: true
|
|
1164
|
+
});
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
|
|
1142
1168
|
/**
|
|
1143
1169
|
* Minimal {@link QuerierPool} for tests. Requires `dialect` so shapes stay aligned with {@link Config.pool}.
|
|
1144
|
-
*/ function createMockQuerierPool(dialect, getQuerier) {
|
|
1145
|
-
|
|
1170
|
+
*/ function createMockQuerierPool(dialect, getQuerier, options) {
|
|
1171
|
+
const pool = {
|
|
1146
1172
|
dialect,
|
|
1147
1173
|
getQuerier,
|
|
1148
1174
|
async transaction (callback, _opts) {
|
|
@@ -1159,6 +1185,10 @@ function getDdlForTable(entity, querier, primaryKeyType) {
|
|
|
1159
1185
|
},
|
|
1160
1186
|
async end () {}
|
|
1161
1187
|
};
|
|
1188
|
+
if (options?.getMigrationQuerier) {
|
|
1189
|
+
pool.getMigrationQuerier = options.getMigrationQuerier;
|
|
1190
|
+
}
|
|
1191
|
+
return pool;
|
|
1162
1192
|
}
|
|
1163
1193
|
|
|
1164
1194
|
// src/index.ts
|
|
@@ -5600,5 +5630,5 @@ const hooks = {
|
|
|
5600
5630
|
afterAll
|
|
5601
5631
|
};
|
|
5602
5632
|
|
|
5603
|
-
export { BaseEntity, _Company as Company, _InventoryAdjustment as InventoryAdjustment, _Item as Item, _ItemAdjustment as ItemAdjustment, _ItemTag as ItemTag, _LedgerAccount as LedgerAccount, _MeasureUnit as MeasureUnit, _MeasureUnitCategory as MeasureUnitCategory, _Profile as Profile, _Storehouse as Storehouse, _Tag as Tag, _Tax as Tax, _TaxCategory as TaxCategory, _User as User, _UserWithNonUpdatableId as UserWithNonUpdatableId, _VectorItem as VectorItem, clearTables, createMockQuerierPool, createSpec, createTables, dropTables };
|
|
5633
|
+
export { BaseEntity, _Company as Company, _InventoryAdjustment as InventoryAdjustment, _Item as Item, _ItemAdjustment as ItemAdjustment, _ItemTag as ItemTag, _LedgerAccount as LedgerAccount, _MeasureUnit as MeasureUnit, _MeasureUnitCategory as MeasureUnitCategory, _Profile as Profile, _Storehouse as Storehouse, _Tag as Tag, _Tax as Tax, _TaxCategory as TaxCategory, _User as User, _UserWithNonUpdatableId as UserWithNonUpdatableId, _VectorItem as VectorItem, clearTables, createMockQuerierPool, createSpec, createTables, dropTables, loadTsDefaultExportWithJiti };
|
|
5604
5634
|
//# sourceMappingURL=uql-browser.min.js.map
|