@mikro-orm/core 7.0.0-dev.221 → 7.0.0-dev.223
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/hydration/ObjectHydrator.js +2 -1
- package/index.d.ts +1 -1
- package/package.json +1 -1
- package/typings.d.ts +1 -0
- package/utils/Configuration.d.ts +11 -3
- package/utils/Configuration.js +5 -3
- package/utils/EntityComparator.d.ts +3 -1
- package/utils/EntityComparator.js +16 -8
- package/utils/Utils.d.ts +2 -2
- package/utils/Utils.js +5 -2
|
@@ -354,7 +354,8 @@ export class ObjectHydrator extends Hydrator {
|
|
|
354
354
|
const code = `// compiled hydrator for entity ${meta.className} (${type + normalizeAccessors ? ' normalized' : ''})\n`
|
|
355
355
|
+ `return function(entity, data, factory, newEntity, convertCustomTypes, schema, parentSchema, normalizeAccessors) {\n`
|
|
356
356
|
+ `${lines.join('\n')}\n}`;
|
|
357
|
-
const
|
|
357
|
+
const fnKey = `hydrator-${meta.uniqueName}-${type}-${normalizeAccessors}`;
|
|
358
|
+
const hydrator = Utils.createFunction(context, code, this.config.get('compiledFunctions'), fnKey);
|
|
358
359
|
this.hydrators[key].set(meta.class, hydrator);
|
|
359
360
|
return hydrator;
|
|
360
361
|
}
|
package/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @module core
|
|
4
4
|
*/
|
|
5
5
|
export { EntityMetadata, PrimaryKeyProp, EntityRepositoryType, OptionalProps, EagerProps, HiddenProps, Config } from './typings.js';
|
|
6
|
-
export type { Constructor, ConnectionType, Dictionary, Primary, IPrimaryKey, ObjectQuery, FilterQuery, IWrappedEntity, EntityName, EntityData, Highlighter, MaybePromise, AnyEntity, EntityClass, EntityProperty, PopulateOptions, Populate, Loaded, New, LoadedReference, LoadedCollection, IMigrator, IMigrationGenerator, MigratorEvent, GetRepository, MigrationObject, DeepPartial, PrimaryProperty, Cast, IsUnknown, EntityDictionary, EntityDTO, MigrationDiff, GenerateOptions, FilterObject, IEntityGenerator, ISeedManager, RequiredEntityData, CheckCallback, IndexCallback, FormulaCallback, FormulaTable, SimpleColumnMeta, Rel, Ref, ScalarRef, EntityRef, ISchemaGenerator, UmzugMigration, MigrateOptions, MigrationResult, MigrationRow, EntityKey, EntityValue, EntityDataValue, FilterKey, EntityType, FromEntityType, Selected, IsSubset, EntityProps, ExpandProperty, ExpandScalar, FilterItemValue, ExpandQuery, Scalar, ExpandHint, FilterValue, MergeLoaded, MergeSelected, TypeConfig, AnyString, ClearDatabaseOptions, CreateSchemaOptions, EnsureDatabaseOptions, UpdateSchemaOptions, DropSchemaOptions, RefreshDatabaseOptions, AutoPath, UnboxArray, MetadataProcessor, ImportsResolver, RequiredNullable, DefineConfig, Opt, Hidden, EntitySchemaWithMeta, InferEntity, CheckConstraint, GeneratedColumnCallback, FilterDef, EntityCtor, Subquery, } from './typings.js';
|
|
6
|
+
export type { CompiledFunctions, Constructor, ConnectionType, Dictionary, Primary, IPrimaryKey, ObjectQuery, FilterQuery, IWrappedEntity, EntityName, EntityData, Highlighter, MaybePromise, AnyEntity, EntityClass, EntityProperty, PopulateOptions, Populate, Loaded, New, LoadedReference, LoadedCollection, IMigrator, IMigrationGenerator, MigratorEvent, GetRepository, MigrationObject, DeepPartial, PrimaryProperty, Cast, IsUnknown, EntityDictionary, EntityDTO, MigrationDiff, GenerateOptions, FilterObject, IEntityGenerator, ISeedManager, RequiredEntityData, CheckCallback, IndexCallback, FormulaCallback, FormulaTable, SimpleColumnMeta, Rel, Ref, ScalarRef, EntityRef, ISchemaGenerator, UmzugMigration, MigrateOptions, MigrationResult, MigrationRow, EntityKey, EntityValue, EntityDataValue, FilterKey, EntityType, FromEntityType, Selected, IsSubset, EntityProps, ExpandProperty, ExpandScalar, FilterItemValue, ExpandQuery, Scalar, ExpandHint, FilterValue, MergeLoaded, MergeSelected, TypeConfig, AnyString, ClearDatabaseOptions, CreateSchemaOptions, EnsureDatabaseOptions, UpdateSchemaOptions, DropSchemaOptions, RefreshDatabaseOptions, AutoPath, UnboxArray, MetadataProcessor, ImportsResolver, RequiredNullable, DefineConfig, Opt, Hidden, EntitySchemaWithMeta, InferEntity, CheckConstraint, GeneratedColumnCallback, FilterDef, EntityCtor, Subquery, } from './typings.js';
|
|
7
7
|
export * from './enums.js';
|
|
8
8
|
export * from './errors.js';
|
|
9
9
|
export * from './exceptions.js';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mikro-orm/core",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "7.0.0-dev.
|
|
4
|
+
"version": "7.0.0-dev.223",
|
|
5
5
|
"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.",
|
|
6
6
|
"exports": {
|
|
7
7
|
"./package.json": "./package.json",
|
package/typings.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export type Constructor<T = unknown> = new (...args: any[]) => T;
|
|
|
22
22
|
export type Dictionary<T = any> = {
|
|
23
23
|
[k: string]: T;
|
|
24
24
|
};
|
|
25
|
+
export type CompiledFunctions = Record<string, (...args: any[]) => any>;
|
|
25
26
|
export type EntityKey<T = unknown, B extends boolean = false> = string & {
|
|
26
27
|
[K in keyof T]-?: CleanKeys<T, K, B> extends never ? never : K;
|
|
27
28
|
}[keyof T];
|
package/utils/Configuration.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { NamingStrategy } from '../naming-strategy/NamingStrategy.js';
|
|
2
2
|
import { type CacheAdapter, type SyncCacheAdapter } from '../cache/CacheAdapter.js';
|
|
3
3
|
import type { EntityRepository } from '../entity/EntityRepository.js';
|
|
4
|
-
import type { AnyEntity, Constructor, Dictionary, EnsureDatabaseOptions, EntityClass, EntityMetadata, FilterDef, GenerateOptions, Highlighter, HydratorConstructor, IHydrator, IMigrationGenerator, IPrimaryKey, MaybePromise, Migration, MigrationObject } from '../typings.js';
|
|
4
|
+
import type { AnyEntity, CompiledFunctions, Constructor, Dictionary, EnsureDatabaseOptions, EntityClass, EntityMetadata, FilterDef, GenerateOptions, Highlighter, HydratorConstructor, IHydrator, IMigrationGenerator, IPrimaryKey, MaybePromise, Migration, MigrationObject } from '../typings.js';
|
|
5
5
|
import { ObjectHydrator } from '../hydration/ObjectHydrator.js';
|
|
6
6
|
import { NullHighlighter } from '../utils/NullHighlighter.js';
|
|
7
7
|
import { type Logger, type LoggerNamespace, type LoggerOptions } from '../logging/Logger.js';
|
|
@@ -83,7 +83,6 @@ declare const DEFAULTS: {
|
|
|
83
83
|
readonly glob: "!(*.d).{js,ts,cjs}";
|
|
84
84
|
readonly silent: false;
|
|
85
85
|
readonly transactional: true;
|
|
86
|
-
readonly disableForeignKeys: false;
|
|
87
86
|
readonly allOrNothing: true;
|
|
88
87
|
readonly dropTables: true;
|
|
89
88
|
readonly safe: false;
|
|
@@ -92,7 +91,6 @@ declare const DEFAULTS: {
|
|
|
92
91
|
readonly fileName: (timestamp: string, name?: string) => string;
|
|
93
92
|
};
|
|
94
93
|
readonly schemaGenerator: {
|
|
95
|
-
readonly disableForeignKeys: false;
|
|
96
94
|
readonly createForeignKeyConstraints: true;
|
|
97
95
|
readonly ignoreSchema: readonly [];
|
|
98
96
|
readonly skipTables: readonly [];
|
|
@@ -682,6 +680,12 @@ export interface Options<Driver extends IDatabaseDriver = IDatabaseDriver, EM ex
|
|
|
682
680
|
* @default ObjectHydrator
|
|
683
681
|
*/
|
|
684
682
|
hydrator?: HydratorConstructor;
|
|
683
|
+
/**
|
|
684
|
+
* Pre-generated compiled functions for hydration and comparison.
|
|
685
|
+
* Use the `compile` CLI command to create these functions.
|
|
686
|
+
* Enables deployment to runtimes that prohibit `new Function`/eval (e.g. Cloudflare Workers).
|
|
687
|
+
*/
|
|
688
|
+
compiledFunctions?: CompiledFunctions;
|
|
685
689
|
/**
|
|
686
690
|
* Default loading strategy for relations.
|
|
687
691
|
* - `'joined'`: Use SQL JOINs (single query, may cause cartesian product)
|
|
@@ -842,6 +846,10 @@ export interface Options<Driver extends IDatabaseDriver = IDatabaseDriver, EM ex
|
|
|
842
846
|
* @default false
|
|
843
847
|
*/
|
|
844
848
|
disableForeignKeys?: boolean;
|
|
849
|
+
/**
|
|
850
|
+
* Try to disable foreign key checks during `schema.clear()`. Enabled by default for MySQL/MariaDB.
|
|
851
|
+
*/
|
|
852
|
+
disableForeignKeysForClear?: boolean;
|
|
845
853
|
/**
|
|
846
854
|
* Generate foreign key constraints.
|
|
847
855
|
* @default true
|
package/utils/Configuration.js
CHANGED
|
@@ -76,7 +76,6 @@ const DEFAULTS = {
|
|
|
76
76
|
glob: '!(*.d).{js,ts,cjs}',
|
|
77
77
|
silent: false,
|
|
78
78
|
transactional: true,
|
|
79
|
-
disableForeignKeys: false,
|
|
80
79
|
allOrNothing: true,
|
|
81
80
|
dropTables: true,
|
|
82
81
|
safe: false,
|
|
@@ -85,7 +84,6 @@ const DEFAULTS = {
|
|
|
85
84
|
fileName: (timestamp, name) => `Migration${timestamp}${name ? '_' + name : ''}`,
|
|
86
85
|
},
|
|
87
86
|
schemaGenerator: {
|
|
88
|
-
disableForeignKeys: false,
|
|
89
87
|
createForeignKeyConstraints: true,
|
|
90
88
|
ignoreSchema: [],
|
|
91
89
|
skipTables: [],
|
|
@@ -152,6 +150,10 @@ export class Configuration {
|
|
|
152
150
|
highlighter: this.options.highlighter,
|
|
153
151
|
writer: this.options.logger,
|
|
154
152
|
});
|
|
153
|
+
const cf = this.options.compiledFunctions;
|
|
154
|
+
if (cf && cf.__version !== Utils.getORMVersion()) {
|
|
155
|
+
this.logger.warn('discovery', `Compiled functions were generated with MikroORM v${cf.__version ?? 'unknown'}, but the current version is v${Utils.getORMVersion()}. Please regenerate with \`npx mikro-orm compile\`.`);
|
|
156
|
+
}
|
|
155
157
|
if (this.options.driver) {
|
|
156
158
|
this.driver = new this.options.driver(this);
|
|
157
159
|
this.platform = this.driver.getPlatform();
|
|
@@ -242,7 +244,7 @@ export class Configuration {
|
|
|
242
244
|
* Gets instance of Comparator. (cached)
|
|
243
245
|
*/
|
|
244
246
|
getComparator(metadata) {
|
|
245
|
-
return this.getCachedService(EntityComparator, metadata, this.platform);
|
|
247
|
+
return this.getCachedService(EntityComparator, metadata, this.platform, this);
|
|
246
248
|
}
|
|
247
249
|
/**
|
|
248
250
|
* Gets instance of MetadataProvider. (cached)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { EntityData, EntityDictionary, EntityMetadata, EntityName, EntityProperty, IMetadataStorage } from '../typings.js';
|
|
2
2
|
import type { Platform } from '../platforms/Platform.js';
|
|
3
|
+
import type { Configuration } from './Configuration.js';
|
|
3
4
|
type Comparator<T> = (a: T, b: T, options?: {
|
|
4
5
|
includeInverseSides?: boolean;
|
|
5
6
|
}) => EntityData<T>;
|
|
@@ -9,6 +10,7 @@ type CompositeKeyPart = string | CompositeKeyPart[];
|
|
|
9
10
|
export declare class EntityComparator {
|
|
10
11
|
private readonly metadata;
|
|
11
12
|
private readonly platform;
|
|
13
|
+
private readonly config?;
|
|
12
14
|
private readonly comparators;
|
|
13
15
|
private readonly mappers;
|
|
14
16
|
private readonly snapshotGenerators;
|
|
@@ -16,7 +18,7 @@ export declare class EntityComparator {
|
|
|
16
18
|
private readonly pkGettersConverted;
|
|
17
19
|
private readonly pkSerializers;
|
|
18
20
|
private tmpIndex;
|
|
19
|
-
constructor(metadata: IMetadataStorage, platform: Platform);
|
|
21
|
+
constructor(metadata: IMetadataStorage, platform: Platform, config?: Configuration | undefined);
|
|
20
22
|
/**
|
|
21
23
|
* Computes difference between two entities.
|
|
22
24
|
*/
|
|
@@ -7,6 +7,7 @@ import { EntityIdentifier } from '../entity/EntityIdentifier.js';
|
|
|
7
7
|
export class EntityComparator {
|
|
8
8
|
metadata;
|
|
9
9
|
platform;
|
|
10
|
+
config;
|
|
10
11
|
comparators = new Map();
|
|
11
12
|
mappers = new Map();
|
|
12
13
|
snapshotGenerators = new Map();
|
|
@@ -14,9 +15,10 @@ export class EntityComparator {
|
|
|
14
15
|
pkGettersConverted = new Map();
|
|
15
16
|
pkSerializers = new Map();
|
|
16
17
|
tmpIndex = 0;
|
|
17
|
-
constructor(metadata, platform) {
|
|
18
|
+
constructor(metadata, platform, config) {
|
|
18
19
|
this.metadata = metadata;
|
|
19
20
|
this.platform = platform;
|
|
21
|
+
this.config = config;
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
24
|
* Computes difference between two entities.
|
|
@@ -88,9 +90,10 @@ export class EntityComparator {
|
|
|
88
90
|
}
|
|
89
91
|
lines.push(` return entity${this.wrap(pk)};`);
|
|
90
92
|
}
|
|
91
|
-
const code = `// compiled pk
|
|
93
|
+
const code = `// compiled pk getter for entity ${meta.className}\n`
|
|
92
94
|
+ `return function(entity) {\n${lines.join('\n')}\n}`;
|
|
93
|
-
const
|
|
95
|
+
const fnKey = `pkGetter-${meta.uniqueName}`;
|
|
96
|
+
const pkSerializer = Utils.createFunction(context, code, this.config?.get('compiledFunctions'), fnKey);
|
|
94
97
|
this.pkGetters.set(meta, pkSerializer);
|
|
95
98
|
return pkSerializer;
|
|
96
99
|
}
|
|
@@ -140,7 +143,8 @@ export class EntityComparator {
|
|
|
140
143
|
}
|
|
141
144
|
const code = `// compiled pk getter (with converted custom types) for entity ${meta.className}\n`
|
|
142
145
|
+ `return function(entity) {\n${lines.join('\n')}\n}`;
|
|
143
|
-
const
|
|
146
|
+
const fnKey = `pkGetterConverted-${meta.uniqueName}`;
|
|
147
|
+
const pkSerializer = Utils.createFunction(context, code, this.config?.get('compiledFunctions'), fnKey);
|
|
144
148
|
this.pkGettersConverted.set(meta, pkSerializer);
|
|
145
149
|
return pkSerializer;
|
|
146
150
|
}
|
|
@@ -192,7 +196,8 @@ export class EntityComparator {
|
|
|
192
196
|
}
|
|
193
197
|
const code = `// compiled pk serializer for entity ${meta.className}\n`
|
|
194
198
|
+ `return function(entity) {\n${lines.join('\n')}\n}`;
|
|
195
|
-
const
|
|
199
|
+
const fnKey = `pkSerializer-${meta.uniqueName}`;
|
|
200
|
+
const pkSerializer = Utils.createFunction(context, code, this.config?.get('compiledFunctions'), fnKey);
|
|
196
201
|
this.pkSerializers.set(meta, pkSerializer);
|
|
197
202
|
return pkSerializer;
|
|
198
203
|
}
|
|
@@ -221,7 +226,8 @@ export class EntityComparator {
|
|
|
221
226
|
})
|
|
222
227
|
.forEach(prop => lines.push(this.getPropertySnapshot(meta, prop, context, this.wrap(prop.name), this.wrap(prop.name), [prop.name])));
|
|
223
228
|
const code = `return function(entity) {\n const ret = {};\n${lines.join('\n')}\n return ret;\n}`;
|
|
224
|
-
const
|
|
229
|
+
const fnKey = `snapshotGenerator-${meta.uniqueName}`;
|
|
230
|
+
const snapshotGenerator = Utils.createFunction(context, code, this.config?.get('compiledFunctions'), fnKey);
|
|
225
231
|
this.snapshotGenerators.set(meta, snapshotGenerator);
|
|
226
232
|
return snapshotGenerator;
|
|
227
233
|
}
|
|
@@ -369,7 +375,8 @@ export class EntityComparator {
|
|
|
369
375
|
lines.push(` for (let k in result) { if (Object.hasOwn(result, k) && !mapped[k] && ret[k] === undefined) ret[k] = result[k]; }`);
|
|
370
376
|
const code = `// compiled mapper for entity ${meta.className}\n`
|
|
371
377
|
+ `return function(result) {\n const ret = {};\n${lines.join('\n')}\n return ret;\n}`;
|
|
372
|
-
const
|
|
378
|
+
const fnKey = `resultMapper-${meta.uniqueName}`;
|
|
379
|
+
const resultMapper = Utils.createFunction(context, code, this.config?.get('compiledFunctions'), fnKey);
|
|
373
380
|
this.mappers.set(meta, resultMapper);
|
|
374
381
|
return resultMapper;
|
|
375
382
|
}
|
|
@@ -588,7 +595,8 @@ export class EntityComparator {
|
|
|
588
595
|
lines.push(`}`);
|
|
589
596
|
const code = `// compiled comparator for entity ${meta.className}\n`
|
|
590
597
|
+ `return function(last, current, options) {\n const diff = {};\n${lines.join('\n')}\n return diff;\n}`;
|
|
591
|
-
const
|
|
598
|
+
const fnKey = `comparator-${meta.uniqueName}`;
|
|
599
|
+
const comparator = Utils.createFunction(context, code, this.config?.get('compiledFunctions'), fnKey);
|
|
592
600
|
this.comparators.set(meta, comparator);
|
|
593
601
|
return comparator;
|
|
594
602
|
}
|
package/utils/Utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Dictionary, EntityData, EntityDictionary, EntityKey, EntityMetadata, EntityName, EntityProperty, Primary } from '../typings.js';
|
|
1
|
+
import type { CompiledFunctions, Dictionary, EntityData, EntityDictionary, EntityKey, EntityMetadata, EntityName, EntityProperty, Primary } from '../typings.js';
|
|
2
2
|
import type { Collection } from '../entity/Collection.js';
|
|
3
3
|
import type { Platform } from '../platforms/Platform.js';
|
|
4
4
|
import type { ScalarReference } from '../entity/Reference.js';
|
|
@@ -143,7 +143,7 @@ export declare class Utils {
|
|
|
143
143
|
static isOperator(key: PropertyKey, includeGroupOperators?: boolean): boolean;
|
|
144
144
|
static hasNestedKey(object: unknown, key: string): boolean;
|
|
145
145
|
static getORMVersion(): string;
|
|
146
|
-
static createFunction(context: Map<string, any>, code: string): any;
|
|
146
|
+
static createFunction(context: Map<string, any>, code: string, compiledFunctions?: CompiledFunctions, key?: string): any;
|
|
147
147
|
static callCompiledFunction<T extends unknown[], R>(fn: (...args: T) => R, ...args: T): R;
|
|
148
148
|
static unwrapProperty<T>(entity: T, meta: EntityMetadata<T>, prop: EntityProperty<T>, payload?: boolean): [unknown, number[]][];
|
|
149
149
|
static setPayloadProperty<T>(entity: EntityDictionary<T>, meta: EntityMetadata<T>, prop: EntityProperty<T>, value: unknown, idx: number[]): void;
|
package/utils/Utils.js
CHANGED
|
@@ -123,7 +123,7 @@ export function parseJsonSafe(value) {
|
|
|
123
123
|
}
|
|
124
124
|
export class Utils {
|
|
125
125
|
static PK_SEPARATOR = '~~~';
|
|
126
|
-
static #ORM_VERSION = '7.0.0-dev.
|
|
126
|
+
static #ORM_VERSION = '7.0.0-dev.223';
|
|
127
127
|
/**
|
|
128
128
|
* Checks if the argument is instance of `Object`. Returns false for arrays.
|
|
129
129
|
*/
|
|
@@ -666,7 +666,10 @@ export class Utils {
|
|
|
666
666
|
static getORMVersion() {
|
|
667
667
|
return this.#ORM_VERSION;
|
|
668
668
|
}
|
|
669
|
-
static createFunction(context, code) {
|
|
669
|
+
static createFunction(context, code, compiledFunctions, key) {
|
|
670
|
+
if (key && compiledFunctions?.[key]) {
|
|
671
|
+
return compiledFunctions[key](...context.values());
|
|
672
|
+
}
|
|
670
673
|
try {
|
|
671
674
|
return new Function(...context.keys(), `'use strict';\n` + code)(...context.values());
|
|
672
675
|
/* v8 ignore next */
|