@mikro-orm/knex 6.0.0-dev.27 → 6.0.0-dev.29

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.
@@ -177,5 +177,5 @@ class AbstractSqlConnection extends core_1.Connection {
177
177
  };
178
178
  }
179
179
  }
180
- exports.AbstractSqlConnection = AbstractSqlConnection;
181
180
  AbstractSqlConnection.__patched = false;
181
+ exports.AbstractSqlConnection = AbstractSqlConnection;
@@ -36,7 +36,7 @@ export declare abstract class AbstractSqlDriver<Connection extends AbstractSqlCo
36
36
  /**
37
37
  * 1:1 owner side needs to be marked for population so QB auto-joins the owner id
38
38
  */
39
- protected autoJoinOneToOneOwner<T extends object, P extends string = never>(meta: EntityMetadata, populate: PopulateOptions<T>[], fields?: readonly EntityField<T, P>[]): PopulateOptions<T>[];
39
+ protected autoJoinOneToOneOwner<T extends object, P extends string = never>(meta: EntityMetadata<T>, populate: PopulateOptions<T>[], fields?: readonly EntityField<T, P>[]): PopulateOptions<T>[];
40
40
  protected joinedProps<T>(meta: EntityMetadata, populate: PopulateOptions<T>[]): PopulateOptions<T>[];
41
41
  /**
42
42
  * @internal
@@ -150,6 +150,7 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
150
150
  mapJoinedProps(result, meta, populate, qb, root, map, parentJoinPath) {
151
151
  const joinedProps = this.joinedProps(meta, populate);
152
152
  joinedProps.forEach(p => {
153
+ var _a, _b;
153
154
  const relation = meta.properties[p.field];
154
155
  /* istanbul ignore next */
155
156
  if (!relation) {
@@ -167,7 +168,7 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
167
168
  if (!hasPK) {
168
169
  // initialize empty collections
169
170
  if ([core_1.ReferenceKind.MANY_TO_MANY, core_1.ReferenceKind.ONE_TO_MANY].includes(relation.kind)) {
170
- result[relation.name] = result[relation.name] || [];
171
+ result[_a = relation.name] ?? (result[_a] = []);
171
172
  }
172
173
  return;
173
174
  }
@@ -192,7 +193,7 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
192
193
  map[key] = result;
193
194
  }
194
195
  if ([core_1.ReferenceKind.MANY_TO_MANY, core_1.ReferenceKind.ONE_TO_MANY].includes(relation.kind)) {
195
- result[relation.name] = result[relation.name] || [];
196
+ result[_b = relation.name] ?? (result[_b] = []);
196
197
  this.appendToCollection(meta2, result[relation.name], relationPojo);
197
198
  }
198
199
  else {
@@ -253,7 +254,7 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
253
254
  const collections = options.processCollections ? data.map(d => this.extractManyToMany(entityName, d)) : [];
254
255
  const pks = this.getPrimaryKeyFields(entityName);
255
256
  const set = new Set();
256
- data.forEach(row => Object.keys(row).forEach(k => set.add(k)));
257
+ data.forEach(row => core_1.Utils.keys(row).forEach(k => set.add(k)));
257
258
  const props = [...set].map(name => meta?.properties[name] ?? { name, fieldNames: [name] });
258
259
  const fields = core_1.Utils.flatten(props.map(prop => prop.fieldNames));
259
260
  const params = [];
@@ -326,11 +327,11 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
326
327
  .withSchema(this.getSchemaName(meta, options));
327
328
  if (options.upsert) {
328
329
  /* istanbul ignore next */
329
- const uniqueFields = core_1.Utils.isPlainObject(where) ? Object.keys(where) : meta.primaryKeys;
330
+ const uniqueFields = core_1.Utils.isPlainObject(where) ? core_1.Utils.keys(where) : meta.primaryKeys;
330
331
  /* istanbul ignore next */
331
332
  qb.insert(data)
332
333
  .onConflict(uniqueFields.map(p => meta?.properties[p]?.fieldNames[0] ?? p))
333
- .merge(Object.keys(data).filter(f => !uniqueFields.includes(f)));
334
+ .merge(core_1.Utils.keys(data).filter(f => !uniqueFields.includes(f)));
334
335
  }
335
336
  else {
336
337
  qb.update(data).where(where);
@@ -356,7 +357,7 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
356
357
  }
357
358
  const collections = options.processCollections ? data.map(d => this.extractManyToMany(entityName, d)) : [];
358
359
  const keys = new Set();
359
- data.forEach(row => Object.keys(row).forEach(k => keys.add(k)));
360
+ data.forEach(row => core_1.Utils.keys(row).forEach(k => keys.add(k)));
360
361
  const pkCond = core_1.Utils.flatten(meta.primaryKeys.map(pk => meta.properties[pk].fieldNames)).map(pk => `${this.platform.quoteIdentifier(pk)} = ?`).join(' and ');
361
362
  const params = [];
362
363
  let sql = `update ${this.getTableName(meta, options)} set `;
@@ -718,7 +719,7 @@ class AbstractSqlDriver extends core_1.DatabaseDriver {
718
719
  const path = `${parentPath ? parentPath : entityName}.${relation.field}`;
719
720
  const propAlias = qb.getAliasForJoinPath(path);
720
721
  if (propOrderBy) {
721
- Object.keys(propOrderBy).forEach(field => {
722
+ core_1.Utils.keys(propOrderBy).forEach(field => {
722
723
  orderBy.push({ [`${propAlias}.${field}`]: propOrderBy[field] });
723
724
  });
724
725
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikro-orm/knex",
3
- "version": "6.0.0-dev.27",
3
+ "version": "6.0.0-dev.29",
4
4
  "description": "TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.",
5
5
  "main": "index.js",
6
6
  "module": "index.mjs",
@@ -66,6 +66,6 @@
66
66
  "@mikro-orm/core": "^5.6.8"
67
67
  },
68
68
  "peerDependencies": {
69
- "@mikro-orm/core": "~6.0.0-dev.27"
69
+ "@mikro-orm/core": "~6.0.0-dev.29"
70
70
  }
71
71
  }
@@ -3,7 +3,7 @@ import type { IQueryBuilder } from '../typings';
3
3
  /**
4
4
  * @internal
5
5
  */
6
- export declare class ArrayCriteriaNode extends CriteriaNode {
7
- process<T>(qb: IQueryBuilder<T>, alias?: string): any;
8
- willAutoJoin<T>(qb: IQueryBuilder<T>, alias?: string): any;
6
+ export declare class ArrayCriteriaNode<T extends object> extends CriteriaNode<T> {
7
+ process(qb: IQueryBuilder<T>, alias?: string): any;
8
+ willAutoJoin(qb: IQueryBuilder<T>, alias?: string): any;
9
9
  }
@@ -1,24 +1,24 @@
1
1
  /// <reference types="node" />
2
2
  import { inspect } from 'util';
3
- import type { EntityProperty, MetadataStorage } from '@mikro-orm/core';
3
+ import type { EntityKey, EntityProperty, MetadataStorage } from '@mikro-orm/core';
4
4
  import type { ICriteriaNode, IQueryBuilder } from '../typings';
5
5
  /**
6
6
  * Helper for working with deeply nested where/orderBy/having criteria. Uses composite pattern to build tree from the payload.
7
7
  * Auto-joins relations and converts payload from { books: { publisher: { name: '...' } } } to { 'publisher_alias.name': '...' }
8
8
  * @internal
9
9
  */
10
- export declare class CriteriaNode implements ICriteriaNode {
10
+ export declare class CriteriaNode<T extends object> implements ICriteriaNode<T> {
11
11
  protected readonly metadata: MetadataStorage;
12
12
  readonly entityName: string;
13
- readonly parent?: ICriteriaNode | undefined;
14
- readonly key?: string | undefined;
13
+ readonly parent?: ICriteriaNode<T> | undefined;
14
+ readonly key?: EntityKey<T> | undefined;
15
15
  payload: any;
16
- prop?: EntityProperty;
16
+ prop?: EntityProperty<T>;
17
17
  index?: number;
18
- constructor(metadata: MetadataStorage, entityName: string, parent?: ICriteriaNode | undefined, key?: string | undefined, validate?: boolean);
19
- process<T>(qb: IQueryBuilder<T>, alias?: string): any;
18
+ constructor(metadata: MetadataStorage, entityName: string, parent?: ICriteriaNode<T> | undefined, key?: EntityKey<T> | undefined, validate?: boolean);
19
+ process(qb: IQueryBuilder<T>, alias?: string): any;
20
20
  shouldInline(payload: any): boolean;
21
- willAutoJoin<T>(qb: IQueryBuilder<T>, alias?: string): boolean;
21
+ willAutoJoin(qb: IQueryBuilder<T>, alias?: string): boolean;
22
22
  shouldRename(payload: any): boolean;
23
23
  renameFieldToPK<T>(qb: IQueryBuilder<T>): string;
24
24
  getPath(addIndex?: boolean): string;
@@ -1,12 +1,12 @@
1
- import type { Dictionary, EntityMetadata, MetadataStorage } from '@mikro-orm/core';
1
+ import type { Dictionary, EntityKey, EntityMetadata, MetadataStorage } from '@mikro-orm/core';
2
2
  import type { ICriteriaNode } from '../typings';
3
3
  /**
4
4
  * @internal
5
5
  */
6
6
  export declare class CriteriaNodeFactory {
7
- static createNode(metadata: MetadataStorage, entityName: string, payload: any, parent?: ICriteriaNode, key?: string): ICriteriaNode;
8
- static createScalarNode(metadata: MetadataStorage, entityName: string, payload: any, parent?: ICriteriaNode, key?: string): ICriteriaNode;
9
- static createArrayNode(metadata: MetadataStorage, entityName: string, payload: any[], parent?: ICriteriaNode, key?: string): ICriteriaNode;
10
- static createObjectNode(metadata: MetadataStorage, entityName: string, payload: Dictionary, parent?: ICriteriaNode, key?: string): ICriteriaNode;
11
- static createObjectItemNode(metadata: MetadataStorage, entityName: string, node: ICriteriaNode, payload: Dictionary, item: string, meta?: EntityMetadata): ICriteriaNode;
7
+ static createNode<T extends object>(metadata: MetadataStorage, entityName: string, payload: any, parent?: ICriteriaNode<T>, key?: EntityKey<T>): ICriteriaNode<T>;
8
+ static createScalarNode<T extends object>(metadata: MetadataStorage, entityName: string, payload: any, parent?: ICriteriaNode<T>, key?: EntityKey<T>): ICriteriaNode<T>;
9
+ static createArrayNode<T extends object>(metadata: MetadataStorage, entityName: string, payload: any[], parent?: ICriteriaNode<T>, key?: EntityKey<T>): ICriteriaNode<T>;
10
+ static createObjectNode<T extends object>(metadata: MetadataStorage, entityName: string, payload: Dictionary, parent?: ICriteriaNode<T>, key?: EntityKey<T>): ICriteriaNode<T>;
11
+ static createObjectItemNode<T extends object>(metadata: MetadataStorage, entityName: string, node: ICriteriaNode<T>, payload: Dictionary, key: EntityKey<T>, meta?: EntityMetadata<T>): ICriteriaNode<T>;
12
12
  }
@@ -47,24 +47,24 @@ class CriteriaNodeFactory {
47
47
  }, {});
48
48
  return node;
49
49
  }
50
- static createObjectItemNode(metadata, entityName, node, payload, item, meta) {
51
- const prop = meta?.properties[item];
50
+ static createObjectItemNode(metadata, entityName, node, payload, key, meta) {
51
+ const prop = meta?.properties[key];
52
52
  if (prop?.kind !== core_1.ReferenceKind.EMBEDDED) {
53
53
  const childEntity = prop && prop.kind !== core_1.ReferenceKind.SCALAR ? prop.type : entityName;
54
- return this.createNode(metadata, childEntity, payload[item], node, item);
54
+ return this.createNode(metadata, childEntity, payload[key], node, key);
55
55
  }
56
- const operator = Object.keys(payload[item]).some(f => core_1.Utils.isOperator(f));
56
+ const operator = Object.keys(payload[key]).some(f => core_1.Utils.isOperator(f));
57
57
  if (operator) {
58
58
  throw core_1.ValidationError.cannotUseOperatorsInsideEmbeddables(entityName, prop.name, payload);
59
59
  }
60
- const map = Object.keys(payload[item]).reduce((oo, k) => {
60
+ const map = Object.keys(payload[key]).reduce((oo, k) => {
61
61
  if (!prop.embeddedProps[k]) {
62
62
  throw core_1.ValidationError.invalidEmbeddableQuery(entityName, k, prop.type);
63
63
  }
64
- oo[prop.embeddedProps[k].name] = payload[item][k];
64
+ oo[prop.embeddedProps[k].name] = payload[key][k];
65
65
  return oo;
66
66
  }, {});
67
- return this.createNode(metadata, entityName, map, node, item);
67
+ return this.createNode(metadata, entityName, map, node, key);
68
68
  }
69
69
  }
70
70
  exports.CriteriaNodeFactory = CriteriaNodeFactory;
@@ -3,9 +3,9 @@ import type { IQueryBuilder } from '../typings';
3
3
  /**
4
4
  * @internal
5
5
  */
6
- export declare class ObjectCriteriaNode extends CriteriaNode {
7
- process<T>(qb: IQueryBuilder<T>, alias?: string): any;
8
- willAutoJoin<T>(qb: IQueryBuilder<T>, alias?: string): boolean;
6
+ export declare class ObjectCriteriaNode<T extends object> extends CriteriaNode<T> {
7
+ process(qb: IQueryBuilder<T>, alias?: string): any;
8
+ willAutoJoin(qb: IQueryBuilder<T>, alias?: string): boolean;
9
9
  shouldInline(payload: any): boolean;
10
10
  private inlineChildPayload;
11
11
  private shouldAutoJoin;
@@ -77,7 +77,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
77
77
  /**
78
78
  * @internal
79
79
  */
80
- constructor(entityName: EntityName<T> | QueryBuilder<T>, metadata: MetadataStorage, driver: AbstractSqlDriver, context?: Knex.Transaction<any, any[]> | undefined, alias?: string, connectionType?: ConnectionType | undefined, em?: SqlEntityManager<AbstractSqlDriver<import("../AbstractSqlConnection").AbstractSqlConnection, import("../AbstractSqlPlatform").AbstractSqlPlatform>> | undefined);
80
+ constructor(entityName: EntityName<T> | QueryBuilder<T>, metadata: MetadataStorage, driver: AbstractSqlDriver, context?: Knex.Transaction<any, any[]> | undefined, alias?: string, connectionType?: ConnectionType | undefined, em?: SqlEntityManager<AbstractSqlDriver<import("..").AbstractSqlConnection, import("..").AbstractSqlPlatform>> | undefined);
81
81
  select(fields: Field<T> | Field<T>[], distinct?: boolean): SelectQueryBuilder<T>;
82
82
  addSelect(fields: Field<T> | Field<T>[]): SelectQueryBuilder<T>;
83
83
  distinct(): SelectQueryBuilder<T>;
@@ -92,7 +92,7 @@ export declare class QueryBuilder<T extends object = AnyEntity> {
92
92
  leftJoin(field: string, alias: string, cond?: QBFilterQuery): this;
93
93
  joinAndSelect(field: string, alias: string, cond?: QBFilterQuery, type?: 'leftJoin' | 'innerJoin' | 'pivotJoin', path?: string): SelectQueryBuilder<T>;
94
94
  leftJoinAndSelect(field: string, alias: string, cond?: QBFilterQuery): SelectQueryBuilder<T>;
95
- protected getFieldsForJoinedLoad<U extends object>(prop: EntityProperty<U>, alias: string): Field<U>[];
95
+ protected getFieldsForJoinedLoad(prop: EntityProperty<T>, alias: string): Field<T>[];
96
96
  withSubQuery(subQuery: Knex.QueryBuilder, alias: string): this;
97
97
  where(cond: QBFilterQuery<T>, operator?: keyof typeof GroupOperator): this;
98
98
  where(cond: string, params?: any[], operator?: keyof typeof GroupOperator): this;
@@ -1,5 +1,5 @@
1
1
  import type { Knex } from 'knex';
2
- import type { Dictionary, EntityData, EntityMetadata, EntityProperty, FlatQueryOrderMap, QBFilterQuery } from '@mikro-orm/core';
2
+ import type { Dictionary, EntityData, EntityKey, EntityMetadata, EntityProperty, FlatQueryOrderMap, QBFilterQuery } from '@mikro-orm/core';
3
3
  import { LockMode } from '@mikro-orm/core';
4
4
  import { QueryType } from './enums';
5
5
  import type { Field, JoinOptions } from '../typings';
@@ -49,7 +49,7 @@ export declare class QueryBuilderHelper {
49
49
  getQueryOrder(type: QueryType, orderBy: FlatQueryOrderMap | FlatQueryOrderMap[], populate: Dictionary<string>): string;
50
50
  getQueryOrderFromObject(type: QueryType, orderBy: FlatQueryOrderMap, populate: Dictionary<string>): string;
51
51
  finalize(type: QueryType, qb: Knex.QueryBuilder, meta?: EntityMetadata): void;
52
- splitField(field: string, greedyAlias?: boolean): [string, string];
52
+ splitField<T>(field: EntityKey<T>, greedyAlias?: boolean): [string, EntityKey<T>];
53
53
  getLockSQL(qb: Knex.QueryBuilder, lockMode: LockMode, lockTables?: string[]): void;
54
54
  updateVersionProperty(qb: Knex.QueryBuilder, data: Dictionary): void;
55
55
  static isCustomExpression(field: string, hasAlias?: boolean): boolean;
@@ -311,7 +311,7 @@ class QueryBuilderHelper {
311
311
  let mergeParam = item.merge;
312
312
  if (core_1.Utils.isObject(item.merge)) {
313
313
  mergeParam = {};
314
- Object.keys(item.merge).forEach(key => {
314
+ core_1.Utils.keys(item.merge).forEach(key => {
315
315
  const k = this.mapper(key, type);
316
316
  mergeParam[k] = item.merge[key];
317
317
  });
@@ -3,7 +3,7 @@ import type { IQueryBuilder } from '../typings';
3
3
  /**
4
4
  * @internal
5
5
  */
6
- export declare class ScalarCriteriaNode extends CriteriaNode {
7
- process<T>(qb: IQueryBuilder<T>, alias?: string): any;
6
+ export declare class ScalarCriteriaNode<T extends object> extends CriteriaNode<T> {
7
+ process(qb: IQueryBuilder<T>, alias?: string): any;
8
8
  shouldJoin(): boolean;
9
9
  }
@@ -308,10 +308,10 @@ class DatabaseTable {
308
308
  }
309
309
  toJSON() {
310
310
  const { platform, columns, ...rest } = this;
311
- const columnsMapped = Object.keys(columns).reduce((o, col) => {
311
+ const columnsMapped = core_1.Utils.keys(columns).reduce((o, col) => {
312
312
  const { mappedType, ...restCol } = columns[col];
313
313
  o[col] = restCol;
314
- o[col].mappedType = Object.keys(core_1.t).find(k => core_1.t[k] === mappedType.constructor);
314
+ o[col].mappedType = core_1.Utils.keys(core_1.t).find(k => core_1.t[k] === mappedType.constructor);
315
315
  return o;
316
316
  }, {});
317
317
  return { columns: columnsMapped, ...rest };
package/typings.d.ts CHANGED
@@ -136,16 +136,16 @@ export interface IQueryBuilder<T> {
136
136
  getAliasForJoinPath(path: string): string | undefined;
137
137
  getNextAlias(entityName?: string): string;
138
138
  }
139
- export interface ICriteriaNode {
139
+ export interface ICriteriaNode<T extends object> {
140
140
  readonly entityName: string;
141
- readonly parent?: ICriteriaNode | undefined;
141
+ readonly parent?: ICriteriaNode<T> | undefined;
142
142
  readonly key?: string | undefined;
143
143
  payload: any;
144
144
  prop?: EntityProperty;
145
145
  index?: number;
146
- process<T>(qb: IQueryBuilder<T>, alias?: string): any;
146
+ process(qb: IQueryBuilder<T>, alias?: string): any;
147
147
  shouldInline(payload: any): boolean;
148
- willAutoJoin<T>(qb: IQueryBuilder<T>, alias?: string): boolean;
148
+ willAutoJoin(qb: IQueryBuilder<T>, alias?: string): boolean;
149
149
  shouldRename(payload: any): boolean;
150
150
  renameFieldToPK<T>(qb: IQueryBuilder<T>): string;
151
151
  getPath(addIndex?: boolean): string;