@mikro-orm/knex 7.0.0-dev.38 → 7.0.0-dev.39

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.
@@ -1,8 +1,13 @@
1
- import { EntityManager, type AnyEntity, type ConnectionType, type EntityData, type EntityName, type EntityRepository, type GetRepository, type QueryResult, type FilterQuery, type LoggingOptions, type RawQueryFragment } from '@mikro-orm/core';
1
+ import { type EntitySchemaWithMeta, EntityManager, type AnyEntity, type ConnectionType, type EntityData, type EntityName, type EntityRepository, type GetRepository, type QueryResult, type FilterQuery, type LoggingOptions, type RawQueryFragment } from '@mikro-orm/core';
2
2
  import type { AbstractSqlDriver } from './AbstractSqlDriver.js';
3
3
  import type { NativeQueryBuilder } from './query/NativeQueryBuilder.js';
4
4
  import type { QueryBuilder } from './query/QueryBuilder.js';
5
5
  import type { SqlEntityRepository } from './SqlEntityRepository.js';
6
+ import type { Kysely } from 'kysely';
7
+ import type { InferKyselyDB } from './typings.js';
8
+ export interface GetKyselyOptions {
9
+ type?: ConnectionType;
10
+ }
6
11
  /**
7
12
  * @inheritDoc
8
13
  */
@@ -18,8 +23,10 @@ export declare class SqlEntityManager<Driver extends AbstractSqlDriver = Abstrac
18
23
  /**
19
24
  * Returns configured Kysely instance.
20
25
  */
21
- getKysely(type?: ConnectionType): import("kysely").Kysely<any>;
26
+ getKysely<TDB = undefined, TOptions extends GetKyselyOptions = GetKyselyOptions>(options?: TOptions): Kysely<TDB extends undefined ? InferKyselyDB<EntitiesFromManager<this>, TOptions> : TDB>;
22
27
  execute<T extends QueryResult | EntityData<AnyEntity> | EntityData<AnyEntity>[] = EntityData<AnyEntity>[]>(query: string | NativeQueryBuilder | RawQueryFragment, params?: any[], method?: 'all' | 'get' | 'run', loggerContext?: LoggingOptions): Promise<T>;
23
28
  getRepository<T extends object, U extends EntityRepository<T> = SqlEntityRepository<T>>(entityName: EntityName<T>): GetRepository<T, U>;
24
29
  protected applyDiscriminatorCondition<Entity extends object>(entityName: string, where: FilterQuery<Entity>): FilterQuery<Entity>;
25
30
  }
31
+ type EntitiesFromManager<TEntityManager extends EntityManager<any>> = NonNullable<TEntityManager['~entities']> extends any[] ? (Extract<NonNullable<TEntityManager['~entities']>[number], EntitySchemaWithMeta>) : never;
32
+ export {};
@@ -19,8 +19,8 @@ export class SqlEntityManager extends EntityManager {
19
19
  /**
20
20
  * Returns configured Kysely instance.
21
21
  */
22
- getKysely(type) {
23
- return this.getConnection(type).getClient();
22
+ getKysely(options = {}) {
23
+ return this.getConnection(options.type).getClient();
24
24
  }
25
25
  async execute(query, params = [], method = 'all', loggerContext) {
26
26
  return this.getDriver().execute(query, params, method, this.getContext(false).getTransactionContext(), loggerContext);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikro-orm/knex",
3
- "version": "7.0.0-dev.38",
3
+ "version": "7.0.0-dev.39",
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
  "type": "module",
6
6
  "exports": {
@@ -57,6 +57,6 @@
57
57
  "@mikro-orm/core": "^6.5.8"
58
58
  },
59
59
  "peerDependencies": {
60
- "@mikro-orm/core": "7.0.0-dev.38"
60
+ "@mikro-orm/core": "7.0.0-dev.39"
61
61
  }
62
62
  }
package/typings.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- import type { DeferMode, CheckCallback, Dictionary, EntityProperty, GroupOperator, RawQueryFragment, QBFilterQuery, QueryOrderMap, Type, QueryFlag, AnyEntity, EntityName } from '@mikro-orm/core';
1
+ import type { DeferMode, CheckCallback, Dictionary, EntityProperty, GroupOperator, RawQueryFragment, QBFilterQuery, QueryOrderMap, Type, QueryFlag, AnyEntity, EntityName, EntitySchemaWithMeta, Primary, PrimaryProperty, Opt } from '@mikro-orm/core';
2
2
  import type { JoinType, QueryType } from './query/enums.js';
3
3
  import type { DatabaseSchema } from './schema/DatabaseSchema.js';
4
4
  import type { DatabaseTable } from './schema/DatabaseTable.js';
5
5
  import type { QueryBuilder } from './query/QueryBuilder.js';
6
6
  import type { NativeQueryBuilder } from './query/NativeQueryBuilder.js';
7
+ import type { Generated, Kysely } from 'kysely';
7
8
  export interface Table {
8
9
  table_name: string;
9
10
  schema_name?: string;
@@ -189,4 +190,81 @@ export interface ICriteriaNode<T extends object> {
189
190
  getPath(addIndex?: boolean): string;
190
191
  getPivotPath(path: string): string;
191
192
  }
193
+ export type MaybeReturnType<T> = T extends (...args: any[]) => infer R ? R : T;
194
+ export type InferEntityProperties<Schema> = Schema extends EntitySchemaWithMeta<any, any, any, any, infer Properties> ? Properties : never;
195
+ export type InferKyselyDB<TEntities extends {
196
+ name: string;
197
+ }, TOptions = {}> = MapValueAsTable<MapByName<TEntities>, TOptions>;
198
+ export type InferDBFromKysely<TKysely extends Kysely<any>> = TKysely extends Kysely<infer TDB> ? TDB : never;
199
+ type PreferStringLiteral<TCandidate, TFallback> = [
200
+ TCandidate
201
+ ] extends [never] ? TFallback : string extends TCandidate ? TFallback : TCandidate extends string ? TCandidate : TFallback;
202
+ export type MapByName<T extends {
203
+ name: string;
204
+ tableName?: string;
205
+ }> = {
206
+ [P in T as PreferStringLiteral<NonNullable<P['tableName']>, P['name']>]: P;
207
+ };
208
+ export type MapValueAsTable<TMap extends Record<string, any>, TOptions = {}> = {
209
+ [K in keyof TMap as TransformName<K, 'underscore'>]: InferKyselyTable<TMap[K], 'underscore'>;
210
+ };
211
+ export type InferKyselyTable<TSchema extends EntitySchemaWithMeta, TNamingStrategy extends 'underscore' | 'entity' = 'underscore', TProcessOnCreate extends boolean = false> = ExcludeNever<{
212
+ -readonly [K in keyof InferEntityProperties<TSchema> as TransformColumnName<K, TNamingStrategy, MaybeReturnType<InferEntityProperties<TSchema>[K]>>]: InferColumnValue<MaybeReturnType<InferEntityProperties<TSchema>[K]>, TProcessOnCreate>;
213
+ }>;
214
+ type TransformName<TName, TNamingStrategy extends 'underscore' | 'entity'> = TNamingStrategy extends 'underscore' ? TName extends string ? SnakeCase<TName> : TName : TName;
215
+ type TransformColumnName<TName, TNamingStrategy extends 'underscore' | 'entity', TBuilder> = TNamingStrategy extends 'entity' ? TName : TBuilder extends {
216
+ '~options': {
217
+ fieldName: string;
218
+ };
219
+ } ? TBuilder['~options']['fieldName'] : TName extends string ? MaybeJoinColumnName<SnakeCase<TName>, TBuilder> : never;
220
+ type MaybeJoinColumnName<TName extends string, TBuilder> = TBuilder extends {
221
+ '~type'?: {
222
+ value: infer Value;
223
+ };
224
+ '~options': {
225
+ kind: 'm:1';
226
+ };
227
+ } ? PrimaryProperty<Value> extends string ? `${TName}_${SnakeCase<PrimaryProperty<Value>>}` : never : TBuilder extends {
228
+ '~type'?: {
229
+ value: infer Value;
230
+ };
231
+ '~options': {
232
+ kind: '1:1';
233
+ owner: true;
234
+ };
235
+ } ? PrimaryProperty<Value> extends string ? `${TName}_${SnakeCase<PrimaryProperty<Value>>}` : never : TName;
236
+ export type SnakeCase<TName extends string> = TName extends `${infer P1}${infer P2}` ? P2 extends Uncapitalize<P2> ? `${Uncapitalize<P1>}${SnakeCase<P2>}` : `${Uncapitalize<P1>}_${SnakeCase<Uncapitalize<P2>>}` : TName;
237
+ type InferColumnValue<TBuilder, TProcessOnCreate extends boolean> = TBuilder extends {
238
+ '~type'?: {
239
+ value: infer Value;
240
+ };
241
+ '~options': infer TOptions;
242
+ } ? MaybeNever<MaybeGenerated<MaybeJoinKey<Value, TOptions>, TOptions, TProcessOnCreate>, TOptions> : never;
243
+ type MaybeGenerated<TValue, TOptions, TProcessOnCreate extends boolean> = TOptions extends {
244
+ nullable: true;
245
+ } ? (TValue | null) : TOptions extends {
246
+ autoincrement: true;
247
+ } ? Generated<TValue> : TOptions extends {
248
+ default: true;
249
+ } ? Generated<TValue> : TOptions extends {
250
+ defaultRaw: true;
251
+ } ? Generated<TValue> : TProcessOnCreate extends false ? TValue : TOptions extends {
252
+ onCreate: Function;
253
+ } ? Generated<TValue> : TValue;
254
+ type MaybeJoinKey<TValue, TOptions> = TOptions extends {
255
+ kind: 'm:1';
256
+ } ? UnwrapOpt<Primary<TValue>> : TOptions extends {
257
+ kind: '1:1';
258
+ } ? TOptions extends {
259
+ owner: true;
260
+ } ? UnwrapOpt<Primary<TValue>> : never : TValue;
261
+ type UnwrapOpt<TValue> = TValue extends Opt<infer OriginalValue> ? OriginalValue : TValue;
262
+ type MaybeNever<TValue, TOptions> = TOptions extends {
263
+ persist: true;
264
+ } ? never : TOptions extends {
265
+ kind: 'm:n';
266
+ } ? never : TValue;
267
+ type ExcludeNever<TMap extends Record<string, any>> = {
268
+ [K in keyof TMap as TMap[K] extends never ? never : K]: TMap[K];
269
+ };
192
270
  export {};