@mikro-orm/core 7.0.0-rc.3 → 7.0.1-dev.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/EntityManager.d.ts +2 -15
- package/EntityManager.js +155 -152
- package/MikroORM.d.ts +4 -6
- package/MikroORM.js +20 -20
- package/README.md +5 -4
- package/cache/FileCacheAdapter.d.ts +1 -5
- package/cache/FileCacheAdapter.js +22 -22
- package/cache/GeneratedCacheAdapter.d.ts +1 -1
- package/cache/GeneratedCacheAdapter.js +6 -6
- package/cache/MemoryCacheAdapter.d.ts +1 -2
- package/cache/MemoryCacheAdapter.js +8 -8
- package/cache/index.d.ts +1 -1
- package/cache/index.js +0 -1
- package/connections/Connection.d.ts +1 -0
- package/connections/Connection.js +27 -11
- package/drivers/DatabaseDriver.d.ts +0 -2
- package/drivers/DatabaseDriver.js +2 -4
- package/entity/Collection.d.ts +1 -9
- package/entity/Collection.js +95 -105
- package/entity/EntityFactory.d.ts +1 -8
- package/entity/EntityFactory.js +48 -48
- package/entity/EntityLoader.d.ts +1 -3
- package/entity/EntityLoader.js +36 -39
- package/entity/Reference.d.ts +1 -2
- package/entity/Reference.js +11 -11
- package/entity/WrappedEntity.d.ts +4 -2
- package/entity/defineEntity.d.ts +18 -73
- package/enums.d.ts +2 -1
- package/enums.js +1 -0
- package/errors.d.ts +11 -11
- package/errors.js +3 -13
- package/events/EventManager.d.ts +1 -4
- package/events/EventManager.js +25 -22
- package/events/index.d.ts +1 -1
- package/events/index.js +0 -1
- package/exceptions.js +8 -6
- package/hydration/ObjectHydrator.d.ts +1 -2
- package/hydration/ObjectHydrator.js +16 -16
- package/logging/DefaultLogger.js +3 -2
- package/logging/Logger.d.ts +2 -1
- package/logging/colors.js +1 -1
- package/logging/index.d.ts +1 -1
- package/logging/index.js +0 -1
- package/metadata/EntitySchema.d.ts +1 -1
- package/metadata/MetadataDiscovery.d.ts +1 -9
- package/metadata/MetadataDiscovery.js +162 -149
- package/metadata/MetadataStorage.d.ts +1 -5
- package/metadata/MetadataStorage.js +36 -36
- package/metadata/discover-entities.js +1 -1
- package/metadata/index.d.ts +1 -1
- package/metadata/index.js +0 -1
- package/naming-strategy/AbstractNamingStrategy.js +1 -1
- package/naming-strategy/EntityCaseNamingStrategy.js +1 -1
- package/naming-strategy/index.d.ts +1 -1
- package/naming-strategy/index.js +0 -1
- package/package.json +1 -1
- package/platforms/Platform.d.ts +23 -1
- package/platforms/Platform.js +57 -4
- package/serialization/EntitySerializer.js +1 -1
- package/serialization/EntityTransformer.js +4 -1
- package/serialization/SerializationContext.d.ts +4 -8
- package/serialization/SerializationContext.js +20 -15
- package/types/UuidType.d.ts +2 -0
- package/types/UuidType.js +14 -2
- package/types/index.d.ts +2 -1
- package/typings.d.ts +12 -1
- package/unit-of-work/ChangeSetComputer.d.ts +1 -6
- package/unit-of-work/ChangeSetComputer.js +21 -21
- package/unit-of-work/ChangeSetPersister.d.ts +1 -9
- package/unit-of-work/ChangeSetPersister.js +52 -52
- package/unit-of-work/CommitOrderCalculator.d.ts +1 -4
- package/unit-of-work/CommitOrderCalculator.js +13 -13
- package/unit-of-work/IdentityMap.d.ts +2 -5
- package/unit-of-work/IdentityMap.js +18 -18
- package/unit-of-work/UnitOfWork.d.ts +5 -19
- package/unit-of-work/UnitOfWork.js +182 -174
- package/utils/AbstractMigrator.d.ts +1 -1
- package/utils/AbstractMigrator.js +7 -7
- package/utils/Configuration.d.ts +90 -189
- package/utils/Configuration.js +94 -78
- package/utils/Cursor.d.ts +3 -3
- package/utils/Cursor.js +4 -4
- package/utils/EntityComparator.d.ts +8 -15
- package/utils/EntityComparator.js +49 -49
- package/utils/QueryHelper.d.ts +16 -1
- package/utils/QueryHelper.js +70 -24
- package/utils/RawQueryFragment.d.ts +4 -4
- package/utils/TransactionManager.js +1 -2
- package/utils/Utils.d.ts +1 -1
- package/utils/Utils.js +5 -4
- package/utils/clone.js +5 -0
- package/utils/fs-utils.d.ts +3 -17
- package/utils/fs-utils.js +1 -1
- package/utils/upsert-utils.js +1 -1
package/entity/defineEntity.d.ts
CHANGED
|
@@ -508,48 +508,35 @@ export declare class OneToManyOptionsBuilderOnlyMappedBy<Value extends object> e
|
|
|
508
508
|
type EntityTarget = {
|
|
509
509
|
'~entity': any;
|
|
510
510
|
} | EntityClass;
|
|
511
|
-
declare const propertyBuilders:
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
511
|
+
declare const propertyBuilders: PropertyBuilders;
|
|
512
|
+
type PropertyBuildersOverrideKeys = 'bigint' | 'array' | 'decimal' | 'json' | 'datetime' | 'time' | 'enum';
|
|
513
|
+
export type PropertyBuilders = {
|
|
514
|
+
[K in Exclude<keyof typeof types, PropertyBuildersOverrideKeys>]: () => UniversalPropertyOptionsBuilder<InferPropertyValueType<(typeof types)[K]>, EmptyOptions, IncludeKeysForProperty>;
|
|
515
|
+
} & {
|
|
516
|
+
bigint: <Mode extends 'bigint' | 'number' | 'string' = 'bigint'>(mode?: Mode) => UniversalPropertyOptionsBuilder<InferPropertyValueType<typeof types.bigint<Mode>>, EmptyOptions, IncludeKeysForProperty>;
|
|
517
|
+
array: <T = string>(toJsValue?: (i: string) => T, toDbValue?: (i: T) => string) => UniversalPropertyOptionsBuilder<InferPropertyValueType<typeof types.array<T>>, EmptyOptions, IncludeKeysForProperty>;
|
|
518
|
+
decimal: <Mode extends 'number' | 'string' = 'string'>(mode?: Mode) => UniversalPropertyOptionsBuilder<InferPropertyValueType<typeof types.decimal<Mode>>, EmptyOptions, IncludeKeysForProperty>;
|
|
515
519
|
json: <T>() => UniversalPropertyOptionsBuilder<T, EmptyOptions, IncludeKeysForProperty>;
|
|
516
520
|
formula: <T>(formula: string | FormulaCallback<any>) => UniversalPropertyOptionsBuilder<T, EmptyOptions, IncludeKeysForProperty>;
|
|
517
|
-
datetime: (length?: number) => UniversalPropertyOptionsBuilder<
|
|
518
|
-
time: (length?: number) => UniversalPropertyOptionsBuilder<
|
|
521
|
+
datetime: (length?: number) => UniversalPropertyOptionsBuilder<InferPropertyValueType<typeof types.datetime>, EmptyOptions, IncludeKeysForProperty>;
|
|
522
|
+
time: (length?: number) => UniversalPropertyOptionsBuilder<InferPropertyValueType<typeof types.time>, EmptyOptions, IncludeKeysForProperty>;
|
|
519
523
|
type: <T extends PropertyValueType>(type: T) => UniversalPropertyOptionsBuilder<InferPropertyValueType<T>, EmptyOptions, IncludeKeysForProperty>;
|
|
520
524
|
enum: <const T extends (number | string)[] | (() => Dictionary)>(items?: T) => UniversalPropertyOptionsBuilder<T extends () => Dictionary ? ValueOf<ReturnType<T>> : T extends (infer Value)[] ? Value : T, EmptyOptions, IncludeKeysForEnumOptions>;
|
|
521
525
|
embedded: <Target extends EntityTarget | EntityTarget[]>(target: Target) => PropertyChain<InferEntity<Target extends (infer T)[] ? T : Target>, EmptyOptions & {
|
|
522
|
-
kind:
|
|
526
|
+
kind: 'embedded';
|
|
523
527
|
}>;
|
|
524
528
|
manyToMany: <Target extends EntityTarget>(target: Target) => PropertyChain<InferEntity<Target>, EmptyOptions & {
|
|
525
|
-
kind:
|
|
529
|
+
kind: 'm:n';
|
|
526
530
|
}>;
|
|
527
531
|
manyToOne: <Target extends EntityTarget | EntityTarget[]>(target: Target) => PropertyChain<InferEntity<Target extends (infer T)[] ? T : Target>, EmptyOptions & {
|
|
528
|
-
kind:
|
|
532
|
+
kind: 'm:1';
|
|
529
533
|
}>;
|
|
530
534
|
oneToMany: <Target extends EntityTarget>(target: Target) => PropertyChain<InferEntity<Target>, EmptyOptions & {
|
|
531
|
-
kind:
|
|
535
|
+
kind: '1:m';
|
|
532
536
|
}>;
|
|
533
537
|
oneToOne: <Target extends EntityTarget | EntityTarget[]>(target: Target) => PropertyChain<InferEntity<Target extends (infer T)[] ? T : Target>, EmptyOptions & {
|
|
534
|
-
kind:
|
|
538
|
+
kind: '1:1';
|
|
535
539
|
}>;
|
|
536
|
-
date: () => UniversalPropertyOptionsBuilder<string, EmptyOptions, IncludeKeysForProperty>;
|
|
537
|
-
blob: () => UniversalPropertyOptionsBuilder<NonNullable<Buffer<ArrayBufferLike> | Uint8Array<ArrayBufferLike> | null>, EmptyOptions, IncludeKeysForProperty>;
|
|
538
|
-
uint8array: () => UniversalPropertyOptionsBuilder<Uint8Array<ArrayBufferLike>, EmptyOptions, IncludeKeysForProperty>;
|
|
539
|
-
enumArray: () => UniversalPropertyOptionsBuilder<(string | number)[], EmptyOptions, IncludeKeysForProperty>;
|
|
540
|
-
integer: () => UniversalPropertyOptionsBuilder<number, EmptyOptions, IncludeKeysForProperty>;
|
|
541
|
-
smallint: () => UniversalPropertyOptionsBuilder<number, EmptyOptions, IncludeKeysForProperty>;
|
|
542
|
-
tinyint: () => UniversalPropertyOptionsBuilder<number, EmptyOptions, IncludeKeysForProperty>;
|
|
543
|
-
mediumint: () => UniversalPropertyOptionsBuilder<number, EmptyOptions, IncludeKeysForProperty>;
|
|
544
|
-
float: () => UniversalPropertyOptionsBuilder<number, EmptyOptions, IncludeKeysForProperty>;
|
|
545
|
-
double: () => UniversalPropertyOptionsBuilder<NonNullable<string | number>, EmptyOptions, IncludeKeysForProperty>;
|
|
546
|
-
boolean: () => UniversalPropertyOptionsBuilder<NonNullable<boolean | null | undefined>, EmptyOptions, IncludeKeysForProperty>;
|
|
547
|
-
character: () => UniversalPropertyOptionsBuilder<string, EmptyOptions, IncludeKeysForProperty>;
|
|
548
|
-
string: () => UniversalPropertyOptionsBuilder<string, EmptyOptions, IncludeKeysForProperty>;
|
|
549
|
-
uuid: () => UniversalPropertyOptionsBuilder<string, EmptyOptions, IncludeKeysForProperty>;
|
|
550
|
-
text: () => UniversalPropertyOptionsBuilder<string, EmptyOptions, IncludeKeysForProperty>;
|
|
551
|
-
interval: () => UniversalPropertyOptionsBuilder<string, EmptyOptions, IncludeKeysForProperty>;
|
|
552
|
-
unknown: () => UniversalPropertyOptionsBuilder<{}, EmptyOptions, IncludeKeysForProperty>;
|
|
553
540
|
};
|
|
554
541
|
/** Own keys + base entity keys (when TBase is not `never`). Guards against `keyof never = string | number | symbol`. */
|
|
555
542
|
type AllKeys<TProperties, TBase> = keyof TProperties | (IsNever<TBase> extends true ? never : keyof TBase);
|
|
@@ -559,7 +546,7 @@ export interface EntityMetadataWithProperties<TName extends string, TTableName e
|
|
|
559
546
|
extends?: {
|
|
560
547
|
'~entity': TBase;
|
|
561
548
|
} | EntityCtor<TBase>;
|
|
562
|
-
properties: TProperties | ((properties:
|
|
549
|
+
properties: TProperties | ((properties: PropertyBuilders) => TProperties);
|
|
563
550
|
primaryKeys?: TPK & InferPrimaryKey<TProperties>[];
|
|
564
551
|
hooks?: DefineEntityHooks;
|
|
565
552
|
repository?: () => TRepository;
|
|
@@ -595,53 +582,11 @@ export declare function defineEntity<const TEntity = any, const TProperties exte
|
|
|
595
582
|
className?: TClassName;
|
|
596
583
|
tableName?: TTableName;
|
|
597
584
|
extends?: TBase;
|
|
598
|
-
properties: TProperties | ((properties:
|
|
585
|
+
properties: TProperties | ((properties: PropertyBuilders) => TProperties);
|
|
599
586
|
hooks?: DefineEntityHooks<TEntity>;
|
|
600
587
|
}): EntitySchemaWithMeta<TClassName, TTableName, TEntity, TBase, TProperties, TClass>;
|
|
601
588
|
export declare namespace defineEntity {
|
|
602
|
-
var properties:
|
|
603
|
-
bigint: <Mode extends "bigint" | "number" | "string" = "bigint">(mode?: Mode) => UniversalPropertyOptionsBuilder<(Mode extends "bigint" ? bigint : Mode extends "number" ? number : string) & {}, EmptyOptions, IncludeKeysForProperty>;
|
|
604
|
-
array: <T = string>(toJsValue?: (i: string) => T, toDbValue?: (i: T) => string) => UniversalPropertyOptionsBuilder<T[], EmptyOptions, IncludeKeysForProperty>;
|
|
605
|
-
decimal: <Mode extends "number" | "string" = "string">(mode?: Mode) => UniversalPropertyOptionsBuilder<NonNullable<Mode extends "number" ? number : string>, EmptyOptions, IncludeKeysForProperty>;
|
|
606
|
-
json: <T>() => UniversalPropertyOptionsBuilder<T, EmptyOptions, IncludeKeysForProperty>;
|
|
607
|
-
formula: <T>(formula: string | FormulaCallback<any>) => UniversalPropertyOptionsBuilder<T, EmptyOptions, IncludeKeysForProperty>;
|
|
608
|
-
datetime: (length?: number) => UniversalPropertyOptionsBuilder<Date, EmptyOptions, IncludeKeysForProperty>;
|
|
609
|
-
time: (length?: number) => UniversalPropertyOptionsBuilder<any, EmptyOptions, IncludeKeysForProperty>;
|
|
610
|
-
type: <T extends PropertyValueType>(type: T) => UniversalPropertyOptionsBuilder<InferPropertyValueType<T>, EmptyOptions, IncludeKeysForProperty>;
|
|
611
|
-
enum: <const T extends (number | string)[] | (() => Dictionary)>(items?: T) => UniversalPropertyOptionsBuilder<T extends () => Dictionary ? ValueOf<ReturnType<T>> : T extends (infer Value)[] ? Value : T, EmptyOptions, IncludeKeysForEnumOptions>;
|
|
612
|
-
embedded: <Target extends EntityTarget | EntityTarget[]>(target: Target) => PropertyChain<InferEntity<Target extends (infer T)[] ? T : Target>, EmptyOptions & {
|
|
613
|
-
kind: "embedded";
|
|
614
|
-
}>;
|
|
615
|
-
manyToMany: <Target extends EntityTarget>(target: Target) => PropertyChain<InferEntity<Target>, EmptyOptions & {
|
|
616
|
-
kind: "m:n";
|
|
617
|
-
}>;
|
|
618
|
-
manyToOne: <Target extends EntityTarget | EntityTarget[]>(target: Target) => PropertyChain<InferEntity<Target extends (infer T)[] ? T : Target>, EmptyOptions & {
|
|
619
|
-
kind: "m:1";
|
|
620
|
-
}>;
|
|
621
|
-
oneToMany: <Target extends EntityTarget>(target: Target) => PropertyChain<InferEntity<Target>, EmptyOptions & {
|
|
622
|
-
kind: "1:m";
|
|
623
|
-
}>;
|
|
624
|
-
oneToOne: <Target extends EntityTarget | EntityTarget[]>(target: Target) => PropertyChain<InferEntity<Target extends (infer T)[] ? T : Target>, EmptyOptions & {
|
|
625
|
-
kind: "1:1";
|
|
626
|
-
}>;
|
|
627
|
-
date: () => UniversalPropertyOptionsBuilder<string, EmptyOptions, IncludeKeysForProperty>;
|
|
628
|
-
blob: () => UniversalPropertyOptionsBuilder<NonNullable<Buffer<ArrayBufferLike> | Uint8Array<ArrayBufferLike> | null>, EmptyOptions, IncludeKeysForProperty>;
|
|
629
|
-
uint8array: () => UniversalPropertyOptionsBuilder<Uint8Array<ArrayBufferLike>, EmptyOptions, IncludeKeysForProperty>;
|
|
630
|
-
enumArray: () => UniversalPropertyOptionsBuilder<(string | number)[], EmptyOptions, IncludeKeysForProperty>;
|
|
631
|
-
integer: () => UniversalPropertyOptionsBuilder<number, EmptyOptions, IncludeKeysForProperty>;
|
|
632
|
-
smallint: () => UniversalPropertyOptionsBuilder<number, EmptyOptions, IncludeKeysForProperty>;
|
|
633
|
-
tinyint: () => UniversalPropertyOptionsBuilder<number, EmptyOptions, IncludeKeysForProperty>;
|
|
634
|
-
mediumint: () => UniversalPropertyOptionsBuilder<number, EmptyOptions, IncludeKeysForProperty>;
|
|
635
|
-
float: () => UniversalPropertyOptionsBuilder<number, EmptyOptions, IncludeKeysForProperty>;
|
|
636
|
-
double: () => UniversalPropertyOptionsBuilder<NonNullable<string | number>, EmptyOptions, IncludeKeysForProperty>;
|
|
637
|
-
boolean: () => UniversalPropertyOptionsBuilder<NonNullable<boolean | null | undefined>, EmptyOptions, IncludeKeysForProperty>;
|
|
638
|
-
character: () => UniversalPropertyOptionsBuilder<string, EmptyOptions, IncludeKeysForProperty>;
|
|
639
|
-
string: () => UniversalPropertyOptionsBuilder<string, EmptyOptions, IncludeKeysForProperty>;
|
|
640
|
-
uuid: () => UniversalPropertyOptionsBuilder<string, EmptyOptions, IncludeKeysForProperty>;
|
|
641
|
-
text: () => UniversalPropertyOptionsBuilder<string, EmptyOptions, IncludeKeysForProperty>;
|
|
642
|
-
interval: () => UniversalPropertyOptionsBuilder<string, EmptyOptions, IncludeKeysForProperty>;
|
|
643
|
-
unknown: () => UniversalPropertyOptionsBuilder<{}, EmptyOptions, IncludeKeysForProperty>;
|
|
644
|
-
};
|
|
589
|
+
var properties: PropertyBuilders;
|
|
645
590
|
}
|
|
646
591
|
export { propertyBuilders as p };
|
|
647
592
|
type EntityHookValue<T, K extends keyof EventSubscriber<T>> = (keyof T | NonNullable<EventSubscriber<T>[K]>)[];
|
package/enums.d.ts
CHANGED
|
@@ -45,7 +45,8 @@ export declare enum QueryOperator {
|
|
|
45
45
|
$size = "size",// collection operators, sql only
|
|
46
46
|
$hasKey = "?",// postgres only, json
|
|
47
47
|
$hasKeys = "?&",// postgres only, json
|
|
48
|
-
$hasSomeKeys = "?|"
|
|
48
|
+
$hasSomeKeys = "?|",// postgres only, json
|
|
49
|
+
$elemMatch = "elemMatch"
|
|
49
50
|
}
|
|
50
51
|
export declare const ARRAY_OPERATORS: string[];
|
|
51
52
|
export declare const JSON_KEY_OPERATORS: string[];
|
package/enums.js
CHANGED
|
@@ -48,6 +48,7 @@ export var QueryOperator;
|
|
|
48
48
|
QueryOperator["$hasKey"] = "?";
|
|
49
49
|
QueryOperator["$hasKeys"] = "?&";
|
|
50
50
|
QueryOperator["$hasSomeKeys"] = "?|";
|
|
51
|
+
QueryOperator["$elemMatch"] = "elemMatch";
|
|
51
52
|
})(QueryOperator || (QueryOperator = {}));
|
|
52
53
|
export const ARRAY_OPERATORS = ['$eq', '$gt', '$gte', '$lt', '$lte', '$ne', '$overlap', '$contains', '$contained'];
|
|
53
54
|
export const JSON_KEY_OPERATORS = ['$hasKey', '$hasKeys', '$hasSomeKeys'];
|
package/errors.d.ts
CHANGED
|
@@ -56,17 +56,17 @@ export declare class MetadataError<T extends AnyEntity = AnyEntity> extends Vali
|
|
|
56
56
|
static duplicateFieldName(entityName: EntityName, names: [string, string][]): MetadataError;
|
|
57
57
|
static multipleDecorators(entityName: string, propertyName: string): MetadataError;
|
|
58
58
|
static missingMetadata(entity: string): MetadataError;
|
|
59
|
-
static invalidPrimaryKey(meta: EntityMetadata, prop: EntityProperty, requiredName: string): MetadataError
|
|
60
|
-
static invalidManyToManyWithPivotEntity(meta1: EntityMetadata, prop1: EntityProperty, meta2: EntityMetadata, prop2: EntityProperty): MetadataError
|
|
61
|
-
static targetIsAbstract(meta: EntityMetadata, prop: EntityProperty): MetadataError
|
|
62
|
-
static nonPersistentCompositeProp(meta: EntityMetadata, prop: EntityProperty): MetadataError
|
|
63
|
-
static propertyTargetsEntityType(meta: EntityMetadata, prop: EntityProperty, target: EntityMetadata): MetadataError
|
|
64
|
-
static fromMissingOption(meta: EntityMetadata, prop: EntityProperty, option: string): MetadataError
|
|
65
|
-
static targetKeyOnManyToMany(meta: EntityMetadata, prop: EntityProperty): MetadataError
|
|
66
|
-
static targetKeyNotUnique(meta: EntityMetadata, prop: EntityProperty, target?: EntityMetadata): MetadataError
|
|
67
|
-
static targetKeyNotFound(meta: EntityMetadata, prop: EntityProperty, target?: EntityMetadata): MetadataError
|
|
68
|
-
static incompatiblePolymorphicTargets(meta: EntityMetadata, prop: EntityProperty, target1: EntityMetadata, target2: EntityMetadata, reason: string): MetadataError
|
|
69
|
-
static dangerousPropertyName(meta: EntityMetadata, prop: EntityProperty): MetadataError
|
|
59
|
+
static invalidPrimaryKey(meta: EntityMetadata, prop: EntityProperty, requiredName: string): MetadataError;
|
|
60
|
+
static invalidManyToManyWithPivotEntity(meta1: EntityMetadata, prop1: EntityProperty, meta2: EntityMetadata, prop2: EntityProperty): MetadataError;
|
|
61
|
+
static targetIsAbstract(meta: EntityMetadata, prop: EntityProperty): MetadataError;
|
|
62
|
+
static nonPersistentCompositeProp(meta: EntityMetadata, prop: EntityProperty): MetadataError;
|
|
63
|
+
static propertyTargetsEntityType(meta: EntityMetadata, prop: EntityProperty, target: EntityMetadata): MetadataError;
|
|
64
|
+
static fromMissingOption(meta: EntityMetadata, prop: EntityProperty, option: string): MetadataError;
|
|
65
|
+
static targetKeyOnManyToMany(meta: EntityMetadata, prop: EntityProperty): MetadataError;
|
|
66
|
+
static targetKeyNotUnique(meta: EntityMetadata, prop: EntityProperty, target?: EntityMetadata): MetadataError;
|
|
67
|
+
static targetKeyNotFound(meta: EntityMetadata, prop: EntityProperty, target?: EntityMetadata): MetadataError;
|
|
68
|
+
static incompatiblePolymorphicTargets(meta: EntityMetadata, prop: EntityProperty, target1: EntityMetadata, target2: EntityMetadata, reason: string): MetadataError;
|
|
69
|
+
static dangerousPropertyName(meta: EntityMetadata, prop: EntityProperty): MetadataError;
|
|
70
70
|
static viewEntityWithoutExpression(meta: EntityMetadata): MetadataError;
|
|
71
71
|
static mixedInheritanceStrategies(root: EntityMetadata, child: EntityMetadata): MetadataError;
|
|
72
72
|
static tptNotSupportedByDriver(meta: EntityMetadata): MetadataError;
|
package/errors.js
CHANGED
|
@@ -34,19 +34,12 @@ export class ValidationError extends Error {
|
|
|
34
34
|
return new ValidationError(`Entity ${entity.constructor.name} is not managed. An entity is managed if its fetched from the database or registered as new through EntityManager.persist()`);
|
|
35
35
|
}
|
|
36
36
|
static notEntity(owner, prop, data) {
|
|
37
|
-
const type = Object.prototype.toString
|
|
38
|
-
.call(data)
|
|
39
|
-
.match(/\[object (\w+)]/)[1]
|
|
40
|
-
.toLowerCase();
|
|
37
|
+
const type = /\[object (\w+)]/.exec(Object.prototype.toString.call(data))[1].toLowerCase();
|
|
41
38
|
return new ValidationError(`Entity of type ${prop.type} expected for property ${owner.constructor.name}.${prop.name}, ${inspect(data)} of type ${type} given. If you are using Object.assign(entity, data), use em.assign(entity, data) instead.`);
|
|
42
39
|
}
|
|
43
40
|
static notDiscoveredEntity(data, meta, action = 'persist') {
|
|
44
41
|
/* v8 ignore next */
|
|
45
|
-
const type = meta?.className ??
|
|
46
|
-
Object.prototype.toString
|
|
47
|
-
.call(data)
|
|
48
|
-
.match(/\[object (\w+)]/)[1]
|
|
49
|
-
.toLowerCase();
|
|
42
|
+
const type = meta?.className ?? /\[object (\w+)]/.exec(Object.prototype.toString.call(data))[1].toLowerCase();
|
|
50
43
|
let err = `Trying to ${action} not discovered entity of type ${type}.`;
|
|
51
44
|
if (meta) {
|
|
52
45
|
err += ` Entity with this name was discovered, but not the prototype you are passing to the ORM. If using EntitySchema, be sure to point to the implementation via \`class\`.`;
|
|
@@ -63,10 +56,7 @@ export class ValidationError extends Error {
|
|
|
63
56
|
return new ValidationError(`Invalid enum array items provided in ${entityName}: ${inspect(invalid)}`);
|
|
64
57
|
}
|
|
65
58
|
static invalidType(type, value, mode) {
|
|
66
|
-
const valueType = Object.prototype.toString
|
|
67
|
-
.call(value)
|
|
68
|
-
.match(/\[object (\w+)]/)[1]
|
|
69
|
-
.toLowerCase();
|
|
59
|
+
const valueType = /\[object (\w+)]/.exec(Object.prototype.toString.call(value))[1].toLowerCase();
|
|
70
60
|
if (value instanceof Date) {
|
|
71
61
|
value = value.toISOString();
|
|
72
62
|
}
|
package/events/EventManager.d.ts
CHANGED
|
@@ -2,10 +2,7 @@ import type { EntityMetadata } from '../typings.js';
|
|
|
2
2
|
import type { EventArgs, EventSubscriber, FlushEventArgs, TransactionEventArgs } from './EventSubscriber.js';
|
|
3
3
|
import { EventType, type TransactionEventType } from '../enums.js';
|
|
4
4
|
export declare class EventManager {
|
|
5
|
-
private
|
|
6
|
-
private readonly entities;
|
|
7
|
-
private readonly cache;
|
|
8
|
-
private readonly subscribers;
|
|
5
|
+
#private;
|
|
9
6
|
constructor(subscribers: Iterable<EventSubscriber>);
|
|
10
7
|
registerSubscriber(subscriber: EventSubscriber): void;
|
|
11
8
|
getSubscribers(): Set<EventSubscriber>;
|
package/events/EventManager.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
import { Utils } from '../utils/Utils.js';
|
|
2
2
|
import { EventType, EventTypeMap } from '../enums.js';
|
|
3
3
|
export class EventManager {
|
|
4
|
-
listeners = {};
|
|
5
|
-
entities = new Map();
|
|
6
|
-
cache = new Map();
|
|
7
|
-
subscribers = new Set();
|
|
4
|
+
#listeners = {};
|
|
5
|
+
#entities = new Map();
|
|
6
|
+
#cache = new Map();
|
|
7
|
+
#subscribers = new Set();
|
|
8
8
|
constructor(subscribers) {
|
|
9
9
|
for (const subscriber of subscribers) {
|
|
10
10
|
this.registerSubscriber(subscriber);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
registerSubscriber(subscriber) {
|
|
14
|
-
if (this
|
|
14
|
+
if (this.#subscribers.has(subscriber)) {
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
17
|
-
this
|
|
18
|
-
this
|
|
19
|
-
this
|
|
17
|
+
this.#subscribers.add(subscriber);
|
|
18
|
+
this.#entities.set(subscriber, this.getSubscribedEntities(subscriber));
|
|
19
|
+
this.#cache.clear();
|
|
20
20
|
Utils.keys(EventType)
|
|
21
21
|
.filter(event => event in subscriber)
|
|
22
22
|
.forEach(event => {
|
|
23
|
-
this
|
|
24
|
-
this
|
|
23
|
+
this.#listeners[event] ??= new Set();
|
|
24
|
+
this.#listeners[event].add(subscriber);
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
getSubscribers() {
|
|
28
|
-
return this
|
|
28
|
+
return this.#subscribers;
|
|
29
29
|
}
|
|
30
30
|
dispatchEvent(event, args, meta) {
|
|
31
31
|
const listeners = [];
|
|
@@ -38,39 +38,42 @@ export class EventManager {
|
|
|
38
38
|
const handler = typeof hook === 'function' ? hook : (entity[hook] ?? prototypeHook);
|
|
39
39
|
return handler.bind(entity);
|
|
40
40
|
}));
|
|
41
|
-
for (const listener of this
|
|
42
|
-
const entities = this
|
|
41
|
+
for (const listener of this.#listeners[event] ?? new Set()) {
|
|
42
|
+
const entities = this.#entities.get(listener);
|
|
43
43
|
if (entities.size === 0 || !entity || entities.has(entity.constructor.name)) {
|
|
44
44
|
listeners.push(listener[event].bind(listener));
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
if (event === EventType.onInit) {
|
|
48
|
-
|
|
48
|
+
for (const listener of listeners) {
|
|
49
|
+
void listener(args);
|
|
50
|
+
}
|
|
51
|
+
return;
|
|
49
52
|
}
|
|
50
53
|
return Utils.runSerial(listeners, listener => listener(args));
|
|
51
54
|
}
|
|
52
55
|
hasListeners(event, meta) {
|
|
53
56
|
const cacheKey = meta._id + EventTypeMap[event];
|
|
54
|
-
if (this
|
|
55
|
-
return this
|
|
57
|
+
if (this.#cache.has(cacheKey)) {
|
|
58
|
+
return this.#cache.get(cacheKey);
|
|
56
59
|
}
|
|
57
60
|
const hasHooks = meta.hooks[event]?.length;
|
|
58
61
|
if (hasHooks) {
|
|
59
|
-
this
|
|
62
|
+
this.#cache.set(cacheKey, true);
|
|
60
63
|
return true;
|
|
61
64
|
}
|
|
62
|
-
for (const listener of this
|
|
63
|
-
const entities = this
|
|
65
|
+
for (const listener of this.#listeners[event] ?? new Set()) {
|
|
66
|
+
const entities = this.#entities.get(listener);
|
|
64
67
|
if (entities.size === 0 || entities.has(meta.className)) {
|
|
65
|
-
this
|
|
68
|
+
this.#cache.set(cacheKey, true);
|
|
66
69
|
return true;
|
|
67
70
|
}
|
|
68
71
|
}
|
|
69
|
-
this
|
|
72
|
+
this.#cache.set(cacheKey, false);
|
|
70
73
|
return false;
|
|
71
74
|
}
|
|
72
75
|
clone() {
|
|
73
|
-
return new EventManager(this
|
|
76
|
+
return new EventManager(this.#subscribers);
|
|
74
77
|
}
|
|
75
78
|
getSubscribedEntities(listener) {
|
|
76
79
|
if (!listener.getSubscribedEntities) {
|
package/events/index.d.ts
CHANGED
package/events/index.js
CHANGED
package/exceptions.js
CHANGED
|
@@ -12,12 +12,14 @@ export class DriverException extends Error {
|
|
|
12
12
|
Object.getOwnPropertyNames(previous).forEach(k => (this[k] = previous[k]));
|
|
13
13
|
this.name = this.constructor.name;
|
|
14
14
|
Error.captureStackTrace(this, this.constructor);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
.stack
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
if (previous.stack) {
|
|
16
|
+
this.stack +=
|
|
17
|
+
'\n\n' +
|
|
18
|
+
previous.stack
|
|
19
|
+
.split('\n')
|
|
20
|
+
.filter(l => l.trim().startsWith('at '))
|
|
21
|
+
.join('\n');
|
|
22
|
+
}
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
25
|
/**
|
|
@@ -3,8 +3,7 @@ import { Hydrator } from './Hydrator.js';
|
|
|
3
3
|
import type { EntityFactory } from '../entity/EntityFactory.js';
|
|
4
4
|
type EntityHydrator<T extends object> = (entity: T, data: EntityData<T>, factory: EntityFactory, newEntity: boolean, convertCustomTypes: boolean, schema?: string, parentSchema?: string, normalizeAccessors?: boolean) => void;
|
|
5
5
|
export declare class ObjectHydrator extends Hydrator {
|
|
6
|
-
private
|
|
7
|
-
private tmpIndex;
|
|
6
|
+
#private;
|
|
8
7
|
/**
|
|
9
8
|
* @inheritDoc
|
|
10
9
|
*/
|
|
@@ -7,13 +7,13 @@ import { ReferenceKind } from '../enums.js';
|
|
|
7
7
|
import { Raw } from '../utils/RawQueryFragment.js';
|
|
8
8
|
import { ValidationError } from '../errors.js';
|
|
9
9
|
export class ObjectHydrator extends Hydrator {
|
|
10
|
-
hydrators = {
|
|
10
|
+
#hydrators = {
|
|
11
11
|
'full~true': new Map(),
|
|
12
12
|
'full~false': new Map(),
|
|
13
13
|
'reference~true': new Map(),
|
|
14
14
|
'reference~false': new Map(),
|
|
15
15
|
};
|
|
16
|
-
tmpIndex = 0;
|
|
16
|
+
#tmpIndex = 0;
|
|
17
17
|
/**
|
|
18
18
|
* @inheritDoc
|
|
19
19
|
*/
|
|
@@ -41,7 +41,7 @@ export class ObjectHydrator extends Hydrator {
|
|
|
41
41
|
*/
|
|
42
42
|
getEntityHydrator(meta, type, normalizeAccessors = false) {
|
|
43
43
|
const key = `${type}~${normalizeAccessors}`;
|
|
44
|
-
const exists = this
|
|
44
|
+
const exists = this.#hydrators[key].get(meta.class);
|
|
45
45
|
if (exists) {
|
|
46
46
|
return exists;
|
|
47
47
|
}
|
|
@@ -67,11 +67,11 @@ export class ObjectHydrator extends Hydrator {
|
|
|
67
67
|
const entityKey = path.map(k => this.wrap(k)).join('');
|
|
68
68
|
const tz = this.platform.getTimezone();
|
|
69
69
|
const convertorKey = path
|
|
70
|
-
.filter(k =>
|
|
70
|
+
.filter(k => !/\[idx_\d+]/.exec(k))
|
|
71
71
|
.map(k => this.safeKey(k))
|
|
72
72
|
.join('_');
|
|
73
73
|
const ret = [];
|
|
74
|
-
const idx = this
|
|
74
|
+
const idx = this.#tmpIndex++;
|
|
75
75
|
const nullVal = this.config.get('forceUndefined') ? 'undefined' : 'null';
|
|
76
76
|
if (prop.getter && !prop.setter && prop.persist === false) {
|
|
77
77
|
return [];
|
|
@@ -150,7 +150,7 @@ export class ObjectHydrator extends Hydrator {
|
|
|
150
150
|
const keyOption = prop.targetKey ? `, key: '${prop.targetKey}'` : '';
|
|
151
151
|
if (prop.polymorphic) {
|
|
152
152
|
// For polymorphic: target class from discriminator map, PK from data.id
|
|
153
|
-
const discriminatorMapKey = this.safeKey(`discriminatorMap_${prop.name}_${this
|
|
153
|
+
const discriminatorMapKey = this.safeKey(`discriminatorMap_${prop.name}_${this.#tmpIndex++}`);
|
|
154
154
|
context.set(discriminatorMapKey, prop.discriminatorMap);
|
|
155
155
|
ret.push(` const targetClass = ${discriminatorMapKey}[data${dataKey}.discriminator];`);
|
|
156
156
|
ret.push(` if (!targetClass) throw new ValidationError(\`Unknown discriminator value '\${data${dataKey}.discriminator}' for polymorphic relation '${prop.name}'. Valid values: \${Object.keys(${discriminatorMapKey}).join(', ')}\`);`);
|
|
@@ -163,7 +163,7 @@ export class ObjectHydrator extends Hydrator {
|
|
|
163
163
|
}
|
|
164
164
|
else {
|
|
165
165
|
// For regular: fixed target class, PK is the data itself
|
|
166
|
-
const targetKey = this.safeKey(`${prop.targetMeta.tableName}_${this
|
|
166
|
+
const targetKey = this.safeKey(`${prop.targetMeta.tableName}_${this.#tmpIndex++}`);
|
|
167
167
|
context.set(targetKey, prop.targetMeta.class);
|
|
168
168
|
if (prop.ref) {
|
|
169
169
|
ret.push(` entity${entityKey} = Reference.create(factory.createReference(${targetKey}, data${dataKey}, { merge: true, convertCustomTypes, normalizeAccessors, schema${keyOption} }));`);
|
|
@@ -179,7 +179,7 @@ export class ObjectHydrator extends Hydrator {
|
|
|
179
179
|
hydrateTargetExpr = `data${dataKey}.constructor`;
|
|
180
180
|
}
|
|
181
181
|
else {
|
|
182
|
-
const targetKey = this.safeKey(`${prop.targetMeta.tableName}_${this
|
|
182
|
+
const targetKey = this.safeKey(`${prop.targetMeta.tableName}_${this.#tmpIndex++}`);
|
|
183
183
|
context.set(targetKey, prop.targetMeta.class);
|
|
184
184
|
hydrateTargetExpr = targetKey;
|
|
185
185
|
}
|
|
@@ -238,7 +238,7 @@ export class ObjectHydrator extends Hydrator {
|
|
|
238
238
|
};
|
|
239
239
|
const registerEmbeddedPrototype = (prop, path) => {
|
|
240
240
|
const convertorKey = path
|
|
241
|
-
.filter(k =>
|
|
241
|
+
.filter(k => !/\[idx_\d+]/.exec(k))
|
|
242
242
|
.map(k => this.safeKey(k))
|
|
243
243
|
.join('_');
|
|
244
244
|
if (prop.targetMeta?.polymorphs) {
|
|
@@ -287,7 +287,7 @@ export class ObjectHydrator extends Hydrator {
|
|
|
287
287
|
else {
|
|
288
288
|
ret.push(` const embeddedData = {`);
|
|
289
289
|
for (const childProp of Object.values(prop.embeddedProps)) {
|
|
290
|
-
const key = childProp.embedded[1]
|
|
290
|
+
const key = /^\w+$/.exec(childProp.embedded[1]) ? childProp.embedded[1] : `'${childProp.embedded[1]}'`;
|
|
291
291
|
ret.push(` ${key}: data${this.wrap(childProp.name)},`);
|
|
292
292
|
}
|
|
293
293
|
ret.push(` };`);
|
|
@@ -323,7 +323,7 @@ export class ObjectHydrator extends Hydrator {
|
|
|
323
323
|
});
|
|
324
324
|
}
|
|
325
325
|
else {
|
|
326
|
-
const targetKey = this.safeKey(`${prop.targetMeta.tableName}_${this
|
|
326
|
+
const targetKey = this.safeKey(`${prop.targetMeta.tableName}_${this.#tmpIndex++}`);
|
|
327
327
|
context.set(targetKey, prop.targetMeta.class);
|
|
328
328
|
ret.push(` if (entity${entityKey} == null) {`);
|
|
329
329
|
ret.push(` entity${entityKey} = factory.createEmbeddable(${targetKey}, embeddedData, { newEntity, convertCustomTypes, normalizeAccessors });`);
|
|
@@ -352,7 +352,7 @@ export class ObjectHydrator extends Hydrator {
|
|
|
352
352
|
const hydrateEmbeddedArray = (prop, path, dataKey) => {
|
|
353
353
|
const entityKey = path.map(k => this.wrap(k)).join('');
|
|
354
354
|
const ret = [];
|
|
355
|
-
const idx = this
|
|
355
|
+
const idx = this.#tmpIndex++;
|
|
356
356
|
registerEmbeddedPrototype(prop, path);
|
|
357
357
|
parseObjectEmbeddable(prop, dataKey, ret);
|
|
358
358
|
ret.push(` if (Array.isArray(data${dataKey})) {`);
|
|
@@ -402,7 +402,7 @@ export class ObjectHydrator extends Hydrator {
|
|
|
402
402
|
`${lines.join('\n')}\n}`;
|
|
403
403
|
const fnKey = `hydrator-${meta.uniqueName}-${type}-${normalizeAccessors}`;
|
|
404
404
|
const hydrator = Utils.createFunction(context, code, this.config.get('compiledFunctions'), fnKey);
|
|
405
|
-
this
|
|
405
|
+
this.#hydrators[key].set(meta.class, hydrator);
|
|
406
406
|
return hydrator;
|
|
407
407
|
}
|
|
408
408
|
createCollectionItemMapper(prop, context) {
|
|
@@ -415,7 +415,7 @@ export class ObjectHydrator extends Hydrator {
|
|
|
415
415
|
lines.push(` value = { ...value, ['${prop2.name}']: Reference.wrapReference(entity, { ref: ${prop2.ref} }) };`);
|
|
416
416
|
lines.push(` }`);
|
|
417
417
|
}
|
|
418
|
-
const targetKey = this.safeKey(`${prop.targetMeta.tableName}_${this
|
|
418
|
+
const targetKey = this.safeKey(`${prop.targetMeta.tableName}_${this.#tmpIndex++}`);
|
|
419
419
|
context.set(targetKey, prop.targetMeta.class);
|
|
420
420
|
lines.push(` if (isPrimaryKey(value, ${meta.compositePK})) return factory.createReference(${targetKey}, value, { convertCustomTypes, schema, normalizeAccessors, merge: true });`);
|
|
421
421
|
lines.push(` if (value && value.__entity) return value;`);
|
|
@@ -424,10 +424,10 @@ export class ObjectHydrator extends Hydrator {
|
|
|
424
424
|
return lines;
|
|
425
425
|
}
|
|
426
426
|
wrap(key) {
|
|
427
|
-
if (
|
|
427
|
+
if (/^\[.*]$/.exec(key)) {
|
|
428
428
|
return key;
|
|
429
429
|
}
|
|
430
|
-
return
|
|
430
|
+
return /^\w+$/.exec(key) ? `.${key}` : `['${key}']`;
|
|
431
431
|
}
|
|
432
432
|
safeKey(key) {
|
|
433
433
|
return key.replace(/\W/g, '_');
|
package/logging/DefaultLogger.js
CHANGED
|
@@ -68,7 +68,8 @@ export class DefaultLogger {
|
|
|
68
68
|
* @inheritDoc
|
|
69
69
|
*/
|
|
70
70
|
logQuery(context) {
|
|
71
|
-
|
|
71
|
+
const namespace = context.namespace ?? 'query';
|
|
72
|
+
if (!this.isEnabled(namespace, context)) {
|
|
72
73
|
return;
|
|
73
74
|
}
|
|
74
75
|
/* v8 ignore next */
|
|
@@ -86,7 +87,7 @@ export class DefaultLogger {
|
|
|
86
87
|
if (this.usesReplicas && context.connection) {
|
|
87
88
|
msg += colors.cyan(` (via ${context.connection.type} connection '${context.connection.name}')`);
|
|
88
89
|
}
|
|
89
|
-
return this.log(
|
|
90
|
+
return this.log(namespace, msg, context);
|
|
90
91
|
}
|
|
91
92
|
static create(options) {
|
|
92
93
|
return new DefaultLogger(options);
|
package/logging/Logger.d.ts
CHANGED
|
@@ -22,10 +22,11 @@ export interface Logger {
|
|
|
22
22
|
setDebugMode(debugMode: boolean | LoggerNamespace[]): void;
|
|
23
23
|
isEnabled(namespace: LoggerNamespace, context?: LogContext): boolean;
|
|
24
24
|
}
|
|
25
|
-
export type LoggerNamespace = 'query' | 'query-params' | 'schema' | 'discovery' | 'info' | 'deprecated';
|
|
25
|
+
export type LoggerNamespace = 'query' | 'query-params' | 'schema' | 'discovery' | 'info' | 'deprecated' | 'slow-query';
|
|
26
26
|
export interface LogContext extends Dictionary {
|
|
27
27
|
query?: string;
|
|
28
28
|
label?: string;
|
|
29
|
+
namespace?: LoggerNamespace;
|
|
29
30
|
params?: readonly unknown[];
|
|
30
31
|
took?: number;
|
|
31
32
|
results?: number;
|
package/logging/colors.js
CHANGED
|
@@ -2,7 +2,7 @@ import { getEnv } from '../utils/env-vars.js';
|
|
|
2
2
|
const bool = (k) => ['true', 't', '1'].includes(getEnv(k)?.toLowerCase() ?? '');
|
|
3
3
|
const boolIfDefined = (k) => (getEnv(k) != null ? bool(k) : true);
|
|
4
4
|
const enabled = () => !bool('NO_COLOR') && !bool('MIKRO_ORM_NO_COLOR') && boolIfDefined('FORCE_COLOR') && boolIfDefined('MIKRO_ORM_COLORS');
|
|
5
|
-
const wrap = (fn) => (text) =>
|
|
5
|
+
const wrap = (fn) => (text) => enabled() ? fn(text) : text;
|
|
6
6
|
/** @internal */
|
|
7
7
|
export const colors = {
|
|
8
8
|
red: wrap((text) => `\x1B[31m${text}\x1B[39m`),
|
package/logging/index.d.ts
CHANGED
package/logging/index.js
CHANGED
|
@@ -47,7 +47,7 @@ export declare class EntitySchema<Entity = any, Base = never, Class extends Enti
|
|
|
47
47
|
* When schema links the entity class via `class` option, this registry allows the lookup from opposite side,
|
|
48
48
|
* so we can use the class in `entities` option just like the EntitySchema instance.
|
|
49
49
|
*/
|
|
50
|
-
static REGISTRY: Map<
|
|
50
|
+
static REGISTRY: Map<AnyEntity, EntitySchema>;
|
|
51
51
|
/** @internal Type-level marker for fast entity type inference */
|
|
52
52
|
readonly '~entity': Entity;
|
|
53
53
|
private readonly _meta;
|
|
@@ -4,15 +4,7 @@ import { MetadataStorage } from './MetadataStorage.js';
|
|
|
4
4
|
import { EntitySchema } from './EntitySchema.js';
|
|
5
5
|
import type { Platform } from '../platforms/Platform.js';
|
|
6
6
|
export declare class MetadataDiscovery {
|
|
7
|
-
private
|
|
8
|
-
private readonly platform;
|
|
9
|
-
private readonly config;
|
|
10
|
-
private readonly namingStrategy;
|
|
11
|
-
private readonly metadataProvider;
|
|
12
|
-
private readonly logger;
|
|
13
|
-
private readonly schemaHelper;
|
|
14
|
-
private readonly validator;
|
|
15
|
-
private readonly discovered;
|
|
7
|
+
#private;
|
|
16
8
|
constructor(metadata: MetadataStorage, platform: Platform, config: Configuration);
|
|
17
9
|
discover(preferTs?: boolean): Promise<MetadataStorage>;
|
|
18
10
|
discoverSync(): MetadataStorage;
|