@mikro-orm/core 7.0.0-dev.28 → 7.0.0-dev.280
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 +67 -60
- package/EntityManager.js +275 -257
- package/MikroORM.d.ts +44 -35
- package/MikroORM.js +109 -143
- package/README.md +2 -0
- package/cache/FileCacheAdapter.d.ts +1 -2
- package/cache/FileCacheAdapter.js +18 -11
- package/cache/GeneratedCacheAdapter.d.ts +0 -1
- package/cache/GeneratedCacheAdapter.js +0 -2
- package/cache/index.d.ts +0 -1
- package/cache/index.js +0 -1
- package/connections/Connection.d.ts +12 -5
- package/connections/Connection.js +21 -12
- package/drivers/DatabaseDriver.d.ts +25 -16
- package/drivers/DatabaseDriver.js +118 -35
- package/drivers/IDatabaseDriver.d.ts +75 -23
- package/entity/BaseEntity.d.ts +63 -4
- package/entity/BaseEntity.js +0 -3
- package/entity/Collection.d.ts +101 -29
- package/entity/Collection.js +436 -104
- package/entity/EntityAssigner.js +17 -17
- package/entity/EntityFactory.d.ts +7 -1
- package/entity/EntityFactory.js +87 -55
- package/entity/EntityHelper.d.ts +2 -2
- package/entity/EntityHelper.js +50 -17
- package/entity/EntityLoader.d.ts +11 -10
- package/entity/EntityLoader.js +213 -82
- package/entity/EntityRepository.d.ts +28 -8
- package/entity/EntityRepository.js +8 -2
- package/entity/PolymorphicRef.d.ts +12 -0
- package/entity/PolymorphicRef.js +18 -0
- package/entity/Reference.d.ts +1 -5
- package/entity/Reference.js +15 -11
- package/entity/WrappedEntity.d.ts +3 -8
- package/entity/WrappedEntity.js +2 -7
- package/entity/defineEntity.d.ts +512 -310
- package/entity/defineEntity.js +134 -290
- package/entity/index.d.ts +2 -2
- package/entity/index.js +2 -2
- package/entity/utils.d.ts +6 -1
- package/entity/utils.js +34 -1
- package/entity/validators.d.ts +11 -0
- package/entity/validators.js +65 -0
- package/enums.d.ts +8 -6
- package/enums.js +2 -1
- package/errors.d.ts +20 -10
- package/errors.js +55 -23
- package/events/EventManager.d.ts +2 -1
- package/events/EventManager.js +19 -11
- package/hydration/Hydrator.js +1 -2
- package/hydration/ObjectHydrator.d.ts +4 -4
- package/hydration/ObjectHydrator.js +79 -34
- package/index.d.ts +2 -2
- package/index.js +1 -2
- package/logging/DefaultLogger.d.ts +1 -1
- package/logging/DefaultLogger.js +1 -0
- package/logging/SimpleLogger.d.ts +1 -1
- package/logging/colors.d.ts +1 -1
- package/logging/colors.js +7 -6
- package/logging/index.d.ts +1 -0
- package/logging/index.js +1 -0
- package/logging/inspect.d.ts +2 -0
- package/logging/inspect.js +11 -0
- package/metadata/EntitySchema.d.ts +47 -23
- package/metadata/EntitySchema.js +92 -33
- package/metadata/MetadataDiscovery.d.ts +64 -9
- package/metadata/MetadataDiscovery.js +782 -325
- package/metadata/MetadataProvider.d.ts +11 -2
- package/metadata/MetadataProvider.js +46 -2
- package/metadata/MetadataStorage.d.ts +13 -11
- package/metadata/MetadataStorage.js +71 -38
- package/metadata/MetadataValidator.d.ts +32 -9
- package/metadata/MetadataValidator.js +196 -41
- package/metadata/discover-entities.d.ts +5 -0
- package/metadata/discover-entities.js +40 -0
- package/metadata/index.d.ts +1 -1
- package/metadata/index.js +1 -1
- package/metadata/types.d.ts +577 -0
- package/metadata/types.js +1 -0
- package/naming-strategy/AbstractNamingStrategy.d.ts +16 -4
- package/naming-strategy/AbstractNamingStrategy.js +20 -2
- package/naming-strategy/EntityCaseNamingStrategy.d.ts +3 -3
- package/naming-strategy/EntityCaseNamingStrategy.js +6 -5
- package/naming-strategy/MongoNamingStrategy.d.ts +3 -3
- package/naming-strategy/MongoNamingStrategy.js +6 -6
- package/naming-strategy/NamingStrategy.d.ts +28 -4
- package/naming-strategy/UnderscoreNamingStrategy.d.ts +3 -3
- package/naming-strategy/UnderscoreNamingStrategy.js +6 -6
- package/not-supported.d.ts +2 -0
- package/not-supported.js +4 -0
- package/package.json +22 -11
- package/platforms/ExceptionConverter.js +1 -1
- package/platforms/Platform.d.ts +10 -15
- package/platforms/Platform.js +21 -44
- package/serialization/EntitySerializer.d.ts +6 -3
- package/serialization/EntitySerializer.js +46 -26
- package/serialization/EntityTransformer.js +33 -21
- package/serialization/SerializationContext.d.ts +6 -6
- package/serialization/SerializationContext.js +3 -3
- package/types/ArrayType.d.ts +1 -1
- package/types/ArrayType.js +2 -3
- package/types/BigIntType.js +1 -1
- package/types/BlobType.d.ts +0 -1
- package/types/BlobType.js +0 -3
- package/types/BooleanType.d.ts +1 -0
- package/types/BooleanType.js +3 -0
- package/types/DecimalType.js +2 -2
- package/types/DoubleType.js +1 -1
- package/types/EnumArrayType.js +1 -2
- package/types/JsonType.d.ts +1 -1
- package/types/JsonType.js +7 -2
- package/types/TinyIntType.js +1 -1
- package/types/Type.d.ts +2 -4
- package/types/Type.js +3 -3
- package/types/Uint8ArrayType.d.ts +0 -1
- package/types/Uint8ArrayType.js +1 -4
- package/types/index.d.ts +1 -1
- package/typings.d.ts +412 -155
- package/typings.js +99 -44
- package/unit-of-work/ChangeSet.d.ts +4 -6
- package/unit-of-work/ChangeSet.js +4 -5
- package/unit-of-work/ChangeSetComputer.d.ts +3 -8
- package/unit-of-work/ChangeSetComputer.js +41 -20
- package/unit-of-work/ChangeSetPersister.d.ts +13 -12
- package/unit-of-work/ChangeSetPersister.js +94 -36
- package/unit-of-work/CommitOrderCalculator.d.ts +12 -10
- package/unit-of-work/CommitOrderCalculator.js +13 -13
- package/unit-of-work/IdentityMap.d.ts +12 -0
- package/unit-of-work/IdentityMap.js +39 -1
- package/unit-of-work/UnitOfWork.d.ts +27 -3
- package/unit-of-work/UnitOfWork.js +248 -90
- package/utils/AbstractMigrator.d.ts +101 -0
- package/utils/AbstractMigrator.js +305 -0
- package/utils/AbstractSchemaGenerator.d.ts +5 -5
- package/utils/AbstractSchemaGenerator.js +28 -17
- package/utils/AsyncContext.d.ts +6 -0
- package/utils/AsyncContext.js +42 -0
- package/utils/Configuration.d.ts +795 -213
- package/utils/Configuration.js +151 -196
- package/utils/ConfigurationLoader.d.ts +1 -54
- package/utils/ConfigurationLoader.js +1 -352
- package/utils/Cursor.d.ts +0 -3
- package/utils/Cursor.js +24 -11
- package/utils/DataloaderUtils.d.ts +10 -5
- package/utils/DataloaderUtils.js +29 -12
- package/utils/EntityComparator.d.ts +16 -9
- package/utils/EntityComparator.js +154 -56
- package/utils/QueryHelper.d.ts +18 -6
- package/utils/QueryHelper.js +76 -23
- package/utils/RawQueryFragment.d.ts +28 -34
- package/utils/RawQueryFragment.js +35 -71
- package/utils/RequestContext.js +2 -2
- package/utils/TransactionContext.js +2 -2
- package/utils/TransactionManager.js +9 -6
- package/utils/Utils.d.ts +15 -128
- package/utils/Utils.js +80 -397
- package/utils/clone.js +8 -23
- package/utils/env-vars.d.ts +7 -0
- package/utils/env-vars.js +97 -0
- package/utils/fs-utils.d.ts +34 -0
- package/utils/fs-utils.js +196 -0
- package/utils/index.d.ts +1 -3
- package/utils/index.js +1 -3
- package/utils/upsert-utils.d.ts +9 -4
- package/utils/upsert-utils.js +46 -3
- package/decorators/Check.d.ts +0 -3
- package/decorators/Check.js +0 -13
- package/decorators/CreateRequestContext.d.ts +0 -3
- package/decorators/CreateRequestContext.js +0 -32
- package/decorators/Embeddable.d.ts +0 -8
- package/decorators/Embeddable.js +0 -11
- package/decorators/Embedded.d.ts +0 -12
- package/decorators/Embedded.js +0 -18
- package/decorators/Entity.d.ts +0 -33
- package/decorators/Entity.js +0 -12
- package/decorators/Enum.d.ts +0 -9
- package/decorators/Enum.js +0 -16
- package/decorators/Filter.d.ts +0 -2
- package/decorators/Filter.js +0 -8
- package/decorators/Formula.d.ts +0 -4
- package/decorators/Formula.js +0 -15
- package/decorators/Indexed.d.ts +0 -19
- package/decorators/Indexed.js +0 -20
- package/decorators/ManyToMany.d.ts +0 -42
- package/decorators/ManyToMany.js +0 -14
- package/decorators/ManyToOne.d.ts +0 -34
- package/decorators/ManyToOne.js +0 -14
- package/decorators/OneToMany.d.ts +0 -28
- package/decorators/OneToMany.js +0 -17
- package/decorators/OneToOne.d.ts +0 -28
- package/decorators/OneToOne.js +0 -7
- package/decorators/PrimaryKey.d.ts +0 -8
- package/decorators/PrimaryKey.js +0 -20
- package/decorators/Property.d.ts +0 -250
- package/decorators/Property.js +0 -32
- package/decorators/Transactional.d.ts +0 -14
- package/decorators/Transactional.js +0 -28
- package/decorators/hooks.d.ts +0 -16
- package/decorators/hooks.js +0 -47
- package/decorators/index.d.ts +0 -17
- package/decorators/index.js +0 -17
- package/entity/ArrayCollection.d.ts +0 -118
- package/entity/ArrayCollection.js +0 -407
- package/entity/EntityValidator.d.ts +0 -19
- package/entity/EntityValidator.js +0 -150
- package/metadata/ReflectMetadataProvider.d.ts +0 -8
- package/metadata/ReflectMetadataProvider.js +0 -44
- package/utils/resolveContextProvider.d.ts +0 -10
- package/utils/resolveContextProvider.js +0 -28
package/utils/Configuration.js
CHANGED
|
@@ -1,141 +1,133 @@
|
|
|
1
|
-
import { FileCacheAdapter } from '../cache/FileCacheAdapter.js';
|
|
2
1
|
import { NullCacheAdapter } from '../cache/NullCacheAdapter.js';
|
|
3
2
|
import { ObjectHydrator } from '../hydration/ObjectHydrator.js';
|
|
4
3
|
import { NullHighlighter } from '../utils/NullHighlighter.js';
|
|
5
4
|
import { DefaultLogger } from '../logging/DefaultLogger.js';
|
|
6
5
|
import { colors } from '../logging/colors.js';
|
|
7
6
|
import { Utils } from '../utils/Utils.js';
|
|
8
|
-
import {
|
|
7
|
+
import { MetadataProvider } from '../metadata/MetadataProvider.js';
|
|
9
8
|
import { NotFoundError } from '../errors.js';
|
|
10
9
|
import { RequestContext } from './RequestContext.js';
|
|
11
10
|
import { DataloaderType, FlushMode, LoadStrategy, PopulateHint } from '../enums.js';
|
|
12
11
|
import { MemoryCacheAdapter } from '../cache/MemoryCacheAdapter.js';
|
|
13
12
|
import { EntityComparator } from './EntityComparator.js';
|
|
13
|
+
import { setEnv } from './env-vars.js';
|
|
14
|
+
const DEFAULTS = {
|
|
15
|
+
pool: {},
|
|
16
|
+
entities: [],
|
|
17
|
+
entitiesTs: [],
|
|
18
|
+
extensions: [],
|
|
19
|
+
subscribers: [],
|
|
20
|
+
filters: {},
|
|
21
|
+
discovery: {
|
|
22
|
+
warnWhenNoEntities: true,
|
|
23
|
+
checkDuplicateTableNames: true,
|
|
24
|
+
checkDuplicateFieldNames: true,
|
|
25
|
+
checkDuplicateEntities: true,
|
|
26
|
+
checkNonPersistentCompositeProps: true,
|
|
27
|
+
inferDefaultValues: true,
|
|
28
|
+
},
|
|
29
|
+
validateRequired: true,
|
|
30
|
+
context: (name) => RequestContext.getEntityManager(name),
|
|
31
|
+
contextName: 'default',
|
|
32
|
+
allowGlobalContext: false,
|
|
33
|
+
// eslint-disable-next-line no-console
|
|
34
|
+
logger: console.log.bind(console),
|
|
35
|
+
colors: true,
|
|
36
|
+
findOneOrFailHandler: (entityName, where) => NotFoundError.findOneFailed(entityName, where),
|
|
37
|
+
findExactlyOneOrFailHandler: (entityName, where) => NotFoundError.findExactlyOneFailed(entityName, where),
|
|
38
|
+
baseDir: globalThis.process?.cwd?.(),
|
|
39
|
+
hydrator: ObjectHydrator,
|
|
40
|
+
flushMode: FlushMode.AUTO,
|
|
41
|
+
loadStrategy: LoadStrategy.BALANCED,
|
|
42
|
+
dataloader: DataloaderType.NONE,
|
|
43
|
+
populateWhere: PopulateHint.ALL,
|
|
44
|
+
ignoreUndefinedInQuery: false,
|
|
45
|
+
onQuery: (sql) => sql,
|
|
46
|
+
autoJoinOneToOneOwner: true,
|
|
47
|
+
autoJoinRefsForFilters: true,
|
|
48
|
+
filtersOnRelations: true,
|
|
49
|
+
propagationOnPrototype: true,
|
|
50
|
+
populateAfterFlush: true,
|
|
51
|
+
serialization: {
|
|
52
|
+
includePrimaryKeys: true,
|
|
53
|
+
},
|
|
54
|
+
assign: {
|
|
55
|
+
updateNestedEntities: true,
|
|
56
|
+
updateByPrimaryKey: true,
|
|
57
|
+
mergeObjectProperties: false,
|
|
58
|
+
mergeEmbeddedProperties: true,
|
|
59
|
+
ignoreUndefined: false,
|
|
60
|
+
},
|
|
61
|
+
persistOnCreate: true,
|
|
62
|
+
upsertManaged: true,
|
|
63
|
+
forceEntityConstructor: false,
|
|
64
|
+
forceUndefined: false,
|
|
65
|
+
forceUtcTimezone: true,
|
|
66
|
+
processOnCreateHooksEarly: true,
|
|
67
|
+
ensureDatabase: true,
|
|
68
|
+
ensureIndexes: false,
|
|
69
|
+
batchSize: 300,
|
|
70
|
+
debug: false,
|
|
71
|
+
ignoreDeprecations: false,
|
|
72
|
+
verbose: false,
|
|
73
|
+
driverOptions: {},
|
|
74
|
+
migrations: {
|
|
75
|
+
tableName: 'mikro_orm_migrations',
|
|
76
|
+
glob: '!(*.d).{js,ts,cjs}',
|
|
77
|
+
silent: false,
|
|
78
|
+
transactional: true,
|
|
79
|
+
allOrNothing: true,
|
|
80
|
+
dropTables: true,
|
|
81
|
+
safe: false,
|
|
82
|
+
snapshot: true,
|
|
83
|
+
emit: 'ts',
|
|
84
|
+
fileName: (timestamp, name) => `Migration${timestamp}${name ? '_' + name : ''}`,
|
|
85
|
+
},
|
|
86
|
+
schemaGenerator: {
|
|
87
|
+
createForeignKeyConstraints: true,
|
|
88
|
+
ignoreSchema: [],
|
|
89
|
+
skipTables: [],
|
|
90
|
+
skipViews: [],
|
|
91
|
+
skipColumns: {},
|
|
92
|
+
},
|
|
93
|
+
embeddables: {
|
|
94
|
+
prefixMode: 'relative',
|
|
95
|
+
},
|
|
96
|
+
entityGenerator: {
|
|
97
|
+
forceUndefined: true,
|
|
98
|
+
undefinedDefaults: false,
|
|
99
|
+
scalarTypeInDecorator: false,
|
|
100
|
+
bidirectionalRelations: true,
|
|
101
|
+
identifiedReferences: true,
|
|
102
|
+
scalarPropertiesForRelations: 'never',
|
|
103
|
+
entityDefinition: 'defineEntity',
|
|
104
|
+
decorators: 'legacy',
|
|
105
|
+
enumMode: 'dictionary',
|
|
106
|
+
/* v8 ignore next */
|
|
107
|
+
fileName: (className) => className,
|
|
108
|
+
onlyPurePivotTables: false,
|
|
109
|
+
outputPurePivotTables: false,
|
|
110
|
+
readOnlyPivotTables: false,
|
|
111
|
+
useCoreBaseEntity: false,
|
|
112
|
+
},
|
|
113
|
+
metadataCache: {},
|
|
114
|
+
resultCache: {
|
|
115
|
+
adapter: MemoryCacheAdapter,
|
|
116
|
+
expiration: 1000, // 1s
|
|
117
|
+
options: {},
|
|
118
|
+
},
|
|
119
|
+
metadataProvider: MetadataProvider,
|
|
120
|
+
highlighter: new NullHighlighter(),
|
|
121
|
+
seeder: {
|
|
122
|
+
defaultSeeder: 'DatabaseSeeder',
|
|
123
|
+
glob: '!(*.d).{js,ts}',
|
|
124
|
+
emit: 'ts',
|
|
125
|
+
fileName: (className) => className,
|
|
126
|
+
},
|
|
127
|
+
preferReadReplicas: true,
|
|
128
|
+
dynamicImportProvider: /* v8 ignore next */ (id) => import(id),
|
|
129
|
+
};
|
|
14
130
|
export class Configuration {
|
|
15
|
-
static DEFAULTS = {
|
|
16
|
-
pool: {},
|
|
17
|
-
entities: [],
|
|
18
|
-
entitiesTs: [],
|
|
19
|
-
extensions: [],
|
|
20
|
-
subscribers: [],
|
|
21
|
-
filters: {},
|
|
22
|
-
discovery: {
|
|
23
|
-
warnWhenNoEntities: true,
|
|
24
|
-
requireEntitiesArray: false,
|
|
25
|
-
checkDuplicateTableNames: true,
|
|
26
|
-
checkDuplicateFieldNames: true,
|
|
27
|
-
checkDuplicateEntities: true,
|
|
28
|
-
checkNonPersistentCompositeProps: true,
|
|
29
|
-
alwaysAnalyseProperties: true,
|
|
30
|
-
disableDynamicFileAccess: false,
|
|
31
|
-
inferDefaultValues: true,
|
|
32
|
-
},
|
|
33
|
-
strict: false,
|
|
34
|
-
validate: false,
|
|
35
|
-
validateRequired: true,
|
|
36
|
-
context: (name) => RequestContext.getEntityManager(name),
|
|
37
|
-
contextName: 'default',
|
|
38
|
-
allowGlobalContext: false,
|
|
39
|
-
// eslint-disable-next-line no-console
|
|
40
|
-
logger: console.log.bind(console),
|
|
41
|
-
colors: true,
|
|
42
|
-
findOneOrFailHandler: (entityName, where) => NotFoundError.findOneFailed(entityName, where),
|
|
43
|
-
findExactlyOneOrFailHandler: (entityName, where) => NotFoundError.findExactlyOneFailed(entityName, where),
|
|
44
|
-
baseDir: process.cwd(),
|
|
45
|
-
hydrator: ObjectHydrator,
|
|
46
|
-
flushMode: FlushMode.AUTO,
|
|
47
|
-
loadStrategy: LoadStrategy.JOINED,
|
|
48
|
-
dataloader: DataloaderType.NONE,
|
|
49
|
-
populateWhere: PopulateHint.ALL,
|
|
50
|
-
connect: true,
|
|
51
|
-
ignoreUndefinedInQuery: false,
|
|
52
|
-
onQuery: sql => sql,
|
|
53
|
-
autoJoinOneToOneOwner: true,
|
|
54
|
-
autoJoinRefsForFilters: true,
|
|
55
|
-
propagationOnPrototype: true,
|
|
56
|
-
populateAfterFlush: true,
|
|
57
|
-
serialization: {
|
|
58
|
-
includePrimaryKeys: true,
|
|
59
|
-
},
|
|
60
|
-
assign: {
|
|
61
|
-
updateNestedEntities: true,
|
|
62
|
-
updateByPrimaryKey: true,
|
|
63
|
-
mergeObjectProperties: false,
|
|
64
|
-
mergeEmbeddedProperties: true,
|
|
65
|
-
ignoreUndefined: false,
|
|
66
|
-
},
|
|
67
|
-
persistOnCreate: true,
|
|
68
|
-
upsertManaged: true,
|
|
69
|
-
forceEntityConstructor: false,
|
|
70
|
-
forceUndefined: false,
|
|
71
|
-
processOnCreateHooksEarly: false,
|
|
72
|
-
ensureDatabase: true,
|
|
73
|
-
ensureIndexes: false,
|
|
74
|
-
batchSize: 300,
|
|
75
|
-
hashAlgorithm: 'md5',
|
|
76
|
-
debug: false,
|
|
77
|
-
ignoreDeprecations: false,
|
|
78
|
-
verbose: false,
|
|
79
|
-
driverOptions: {},
|
|
80
|
-
migrations: {
|
|
81
|
-
tableName: 'mikro_orm_migrations',
|
|
82
|
-
path: './migrations',
|
|
83
|
-
glob: '!(*.d).{js,ts,cjs}',
|
|
84
|
-
silent: false,
|
|
85
|
-
transactional: true,
|
|
86
|
-
disableForeignKeys: false,
|
|
87
|
-
allOrNothing: true,
|
|
88
|
-
dropTables: true,
|
|
89
|
-
safe: false,
|
|
90
|
-
snapshot: true,
|
|
91
|
-
emit: 'ts',
|
|
92
|
-
fileName: (timestamp, name) => `Migration${timestamp}${name ? '_' + name : ''}`,
|
|
93
|
-
},
|
|
94
|
-
schemaGenerator: {
|
|
95
|
-
disableForeignKeys: false,
|
|
96
|
-
createForeignKeyConstraints: true,
|
|
97
|
-
ignoreSchema: [],
|
|
98
|
-
skipTables: [],
|
|
99
|
-
skipColumns: {},
|
|
100
|
-
},
|
|
101
|
-
embeddables: {
|
|
102
|
-
prefixMode: 'relative',
|
|
103
|
-
},
|
|
104
|
-
entityGenerator: {
|
|
105
|
-
forceUndefined: true,
|
|
106
|
-
undefinedDefaults: false,
|
|
107
|
-
bidirectionalRelations: false,
|
|
108
|
-
identifiedReferences: false,
|
|
109
|
-
scalarTypeInDecorator: false,
|
|
110
|
-
scalarPropertiesForRelations: 'never',
|
|
111
|
-
fileName: (className) => className,
|
|
112
|
-
onlyPurePivotTables: false,
|
|
113
|
-
outputPurePivotTables: false,
|
|
114
|
-
readOnlyPivotTables: false,
|
|
115
|
-
useCoreBaseEntity: false,
|
|
116
|
-
},
|
|
117
|
-
metadataCache: {
|
|
118
|
-
pretty: false,
|
|
119
|
-
adapter: FileCacheAdapter,
|
|
120
|
-
options: { cacheDir: process.cwd() + '/temp' },
|
|
121
|
-
},
|
|
122
|
-
resultCache: {
|
|
123
|
-
adapter: MemoryCacheAdapter,
|
|
124
|
-
expiration: 1000, // 1s
|
|
125
|
-
options: {},
|
|
126
|
-
},
|
|
127
|
-
metadataProvider: ReflectMetadataProvider,
|
|
128
|
-
highlighter: new NullHighlighter(),
|
|
129
|
-
seeder: {
|
|
130
|
-
path: './seeders',
|
|
131
|
-
defaultSeeder: 'DatabaseSeeder',
|
|
132
|
-
glob: '!(*.d).{js,ts}',
|
|
133
|
-
emit: 'ts',
|
|
134
|
-
fileName: (className) => className,
|
|
135
|
-
},
|
|
136
|
-
preferReadReplicas: true,
|
|
137
|
-
dynamicImportProvider: /* v8 ignore next */ (id) => import(id),
|
|
138
|
-
};
|
|
139
131
|
options;
|
|
140
132
|
logger;
|
|
141
133
|
driver;
|
|
@@ -144,11 +136,9 @@ export class Configuration {
|
|
|
144
136
|
extensions = new Map();
|
|
145
137
|
constructor(options, validate = true) {
|
|
146
138
|
if (options.dynamicImportProvider) {
|
|
147
|
-
|
|
139
|
+
globalThis.dynamicImportProvider = options.dynamicImportProvider;
|
|
148
140
|
}
|
|
149
|
-
this.options = Utils.mergeConfig({},
|
|
150
|
-
this.options.baseDir = Utils.absolutePath(this.options.baseDir);
|
|
151
|
-
this.options.preferTs ??= options.preferTs;
|
|
141
|
+
this.options = Utils.mergeConfig({}, DEFAULTS, options);
|
|
152
142
|
if (validate) {
|
|
153
143
|
this.validateOptions();
|
|
154
144
|
}
|
|
@@ -160,11 +150,14 @@ export class Configuration {
|
|
|
160
150
|
highlighter: this.options.highlighter,
|
|
161
151
|
writer: this.options.logger,
|
|
162
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
|
+
}
|
|
163
157
|
if (this.options.driver) {
|
|
164
158
|
this.driver = new this.options.driver(this);
|
|
165
159
|
this.platform = this.driver.getPlatform();
|
|
166
160
|
this.platform.setConfig(this);
|
|
167
|
-
this.detectSourceFolder(options);
|
|
168
161
|
this.init(validate);
|
|
169
162
|
}
|
|
170
163
|
}
|
|
@@ -194,7 +187,7 @@ export class Configuration {
|
|
|
194
187
|
* Resets the configuration to its default value
|
|
195
188
|
*/
|
|
196
189
|
reset(key) {
|
|
197
|
-
this.options[key] =
|
|
190
|
+
this.options[key] = DEFAULTS[key];
|
|
198
191
|
}
|
|
199
192
|
/**
|
|
200
193
|
* Gets Logger instance.
|
|
@@ -208,15 +201,6 @@ export class Configuration {
|
|
|
208
201
|
}
|
|
209
202
|
return this.options.dataloader;
|
|
210
203
|
}
|
|
211
|
-
/**
|
|
212
|
-
* Gets current client URL (connection string).
|
|
213
|
-
*/
|
|
214
|
-
getClientUrl(hidePassword = false) {
|
|
215
|
-
if (hidePassword) {
|
|
216
|
-
return this.options.clientUrl.replace(/\/\/([^:]+):(.+)@/, '//$1:*****@');
|
|
217
|
-
}
|
|
218
|
-
return this.options.clientUrl;
|
|
219
|
-
}
|
|
220
204
|
getSchema(skipDefaultSchema = false) {
|
|
221
205
|
if (skipDefaultSchema && this.options.schema === this.platform.getDefaultSchemaName()) {
|
|
222
206
|
return undefined;
|
|
@@ -237,7 +221,7 @@ export class Configuration {
|
|
|
237
221
|
return this.cache.get(name);
|
|
238
222
|
}
|
|
239
223
|
const ext = this.extensions.get(name);
|
|
240
|
-
/* v8 ignore next
|
|
224
|
+
/* v8 ignore next */
|
|
241
225
|
if (!ext) {
|
|
242
226
|
return undefined;
|
|
243
227
|
}
|
|
@@ -260,7 +244,7 @@ export class Configuration {
|
|
|
260
244
|
* Gets instance of Comparator. (cached)
|
|
261
245
|
*/
|
|
262
246
|
getComparator(metadata) {
|
|
263
|
-
return this.getCachedService(EntityComparator, metadata, this.platform);
|
|
247
|
+
return this.getCachedService(EntityComparator, metadata, this.platform, this);
|
|
264
248
|
}
|
|
265
249
|
/**
|
|
266
250
|
* Gets instance of MetadataProvider. (cached)
|
|
@@ -272,7 +256,7 @@ export class Configuration {
|
|
|
272
256
|
* Gets instance of metadata CacheAdapter. (cached)
|
|
273
257
|
*/
|
|
274
258
|
getMetadataCacheAdapter() {
|
|
275
|
-
return this.getCachedService(this.options.metadataCache.adapter, this.options.metadataCache.options, this.options.baseDir, this.options.metadataCache.pretty
|
|
259
|
+
return this.getCachedService(this.options.metadataCache.adapter, this.options.metadataCache.options, this.options.baseDir, this.options.metadataCache.pretty);
|
|
276
260
|
}
|
|
277
261
|
/**
|
|
278
262
|
* Gets instance of CacheAdapter for result cache. (cached)
|
|
@@ -297,8 +281,7 @@ export class Configuration {
|
|
|
297
281
|
*/
|
|
298
282
|
getCachedService(cls, ...args) {
|
|
299
283
|
if (!this.cache.has(cls.name)) {
|
|
300
|
-
|
|
301
|
-
this.cache.set(cls.name, new Class(...args));
|
|
284
|
+
this.cache.set(cls.name, new cls(...args));
|
|
302
285
|
}
|
|
303
286
|
return this.cache.get(cls.name);
|
|
304
287
|
}
|
|
@@ -306,26 +289,25 @@ export class Configuration {
|
|
|
306
289
|
this.cache.clear();
|
|
307
290
|
}
|
|
308
291
|
init(validate) {
|
|
309
|
-
|
|
310
|
-
|
|
292
|
+
const useCache = this.getMetadataProvider().useCache();
|
|
293
|
+
const metadataCache = this.options.metadataCache;
|
|
294
|
+
if (!useCache) {
|
|
295
|
+
metadataCache.adapter = NullCacheAdapter;
|
|
311
296
|
}
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
if (!
|
|
316
|
-
|
|
317
|
-
}
|
|
318
|
-
if (!('implicitTransactions' in this.options)) {
|
|
319
|
-
this.options.implicitTransactions = this.platform.usesImplicitTransactions();
|
|
297
|
+
metadataCache.enabled ??= useCache;
|
|
298
|
+
this.options.clientUrl ??= this.platform.getDefaultClientUrl();
|
|
299
|
+
this.options.implicitTransactions ??= this.platform.usesImplicitTransactions();
|
|
300
|
+
if (validate && metadataCache.enabled && !metadataCache.adapter) {
|
|
301
|
+
throw new Error('No metadata cache adapter specified, please fill in `metadataCache.adapter` option or use the async MikroORM.init() method which can autoload it.');
|
|
320
302
|
}
|
|
321
303
|
try {
|
|
322
|
-
const url = new URL(this.
|
|
304
|
+
const url = new URL(this.options.clientUrl);
|
|
323
305
|
if (url.pathname) {
|
|
324
306
|
this.options.dbName = this.get('dbName', decodeURIComponent(url.pathname).substring(1));
|
|
325
307
|
}
|
|
326
308
|
}
|
|
327
309
|
catch {
|
|
328
|
-
const url = this.
|
|
310
|
+
const url = this.options.clientUrl.match(/:\/\/.*\/([^?]+)/);
|
|
329
311
|
if (url) {
|
|
330
312
|
this.options.dbName = this.get('dbName', decodeURIComponent(url[1]));
|
|
331
313
|
}
|
|
@@ -333,16 +315,15 @@ export class Configuration {
|
|
|
333
315
|
if (validate && !this.options.dbName && this.options.clientUrl) {
|
|
334
316
|
throw new Error("No database specified, `clientUrl` option provided but it's missing the pathname.");
|
|
335
317
|
}
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
}
|
|
339
|
-
if (!this.options.charset) {
|
|
340
|
-
this.options.charset = this.platform.getDefaultCharset();
|
|
341
|
-
}
|
|
318
|
+
this.options.schema ??= this.platform.getDefaultSchemaName();
|
|
319
|
+
this.options.charset ??= this.platform.getDefaultCharset();
|
|
342
320
|
Object.keys(this.options.filters).forEach(key => {
|
|
343
321
|
this.options.filters[key].default ??= true;
|
|
344
322
|
});
|
|
345
|
-
|
|
323
|
+
if (!this.options.filtersOnRelations) {
|
|
324
|
+
this.options.autoJoinRefsForFilters ??= false;
|
|
325
|
+
}
|
|
326
|
+
this.options.subscribers = [...this.options.subscribers].map(subscriber => {
|
|
346
327
|
return subscriber.constructor.name === 'Function' ? new subscriber() : subscriber;
|
|
347
328
|
});
|
|
348
329
|
this.sync();
|
|
@@ -351,40 +332,11 @@ export class Configuration {
|
|
|
351
332
|
}
|
|
352
333
|
}
|
|
353
334
|
sync() {
|
|
354
|
-
|
|
335
|
+
setEnv('MIKRO_ORM_COLORS', this.options.colors);
|
|
355
336
|
this.logger.setDebugMode(this.options.debug);
|
|
356
337
|
}
|
|
357
|
-
/**
|
|
358
|
-
* Checks if `src` folder exists, it so, tries to adjust the migrations and seeders paths automatically to use it.
|
|
359
|
-
* If there is a `dist` or `build` folder, it will be used for the JS variant (`path` option), while the `src` folder will be
|
|
360
|
-
* used for the TS variant (`pathTs` option).
|
|
361
|
-
*
|
|
362
|
-
* If the default folder exists (e.g. `/migrations`), the config will respect that, so this auto-detection should not
|
|
363
|
-
* break existing projects, only help with the new ones.
|
|
364
|
-
*/
|
|
365
|
-
detectSourceFolder(options) {
|
|
366
|
-
if (!Utils.pathExistsSync(this.options.baseDir + '/src')) {
|
|
367
|
-
return;
|
|
368
|
-
}
|
|
369
|
-
const migrationsPathExists = Utils.pathExistsSync(this.options.baseDir + '/' + this.options.migrations.path);
|
|
370
|
-
const seedersPathExists = Utils.pathExistsSync(this.options.baseDir + '/' + this.options.seeder.path);
|
|
371
|
-
const distDir = Utils.pathExistsSync(this.options.baseDir + '/dist');
|
|
372
|
-
const buildDir = Utils.pathExistsSync(this.options.baseDir + '/build');
|
|
373
|
-
// if neither `dist` nor `build` exist, we use the `src` folder as it might be a JS project without building, but with `src` folder
|
|
374
|
-
const path = distDir ? './dist' : (buildDir ? './build' : './src');
|
|
375
|
-
// only if the user did not provide any values and if the default path does not exist
|
|
376
|
-
if (!options.migrations?.path && !options.migrations?.pathTs && !migrationsPathExists) {
|
|
377
|
-
this.options.migrations.path = `${path}/migrations`;
|
|
378
|
-
this.options.migrations.pathTs = './src/migrations';
|
|
379
|
-
}
|
|
380
|
-
// only if the user did not provide any values and if the default path does not exist
|
|
381
|
-
if (!options.seeder?.path && !options.seeder?.pathTs && !seedersPathExists) {
|
|
382
|
-
this.options.seeder.path = `${path}/seeders`;
|
|
383
|
-
this.options.seeder.pathTs = './src/seeders';
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
338
|
validateOptions() {
|
|
387
|
-
/* v8 ignore next
|
|
339
|
+
/* v8 ignore next */
|
|
388
340
|
if ('type' in this.options) {
|
|
389
341
|
throw new Error('The `type` option has been removed in v6, please fill in the `driver` option instead or use `defineConfig` helper (to define your ORM config) or `MikroORM` class (to call the `init` method) exported from the driver package (e.g. `import { defineConfig } from \'@mikro-orm/mysql\'; export default defineConfig({ ... })`).');
|
|
390
342
|
}
|
|
@@ -397,6 +349,9 @@ export class Configuration {
|
|
|
397
349
|
if (this.options.entities.length === 0 && this.options.discovery.warnWhenNoEntities) {
|
|
398
350
|
throw new Error('No entities found, please use `entities` option');
|
|
399
351
|
}
|
|
352
|
+
if (typeof this.options.driverOptions === 'function' && this.options.driverOptions.constructor.name === 'AsyncFunction') {
|
|
353
|
+
throw new Error('`driverOptions` callback cannot be async');
|
|
354
|
+
}
|
|
400
355
|
}
|
|
401
356
|
}
|
|
402
357
|
/**
|
|
@@ -1,54 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import type { EntityManagerType, IDatabaseDriver } from '../drivers/IDatabaseDriver.js';
|
|
3
|
-
import type { Dictionary } from '../typings.js';
|
|
4
|
-
import { Configuration, type Options } from './Configuration.js';
|
|
5
|
-
/**
|
|
6
|
-
* @internal
|
|
7
|
-
*/
|
|
8
|
-
export declare class ConfigurationLoader {
|
|
9
|
-
/**
|
|
10
|
-
* Gets a named configuration
|
|
11
|
-
*
|
|
12
|
-
* @param contextName Load a config with the given `contextName` value. Used when config file exports array or factory function. Setting it to "default" matches also config objects without `contextName` set.
|
|
13
|
-
* @param paths Array of possible paths for a configuration file. Files will be checked in order, and the first existing one will be used. Defaults to the output of {@link ConfigurationLoader.getConfigPaths}.
|
|
14
|
-
* @param options Additional options to augment the final configuration with.
|
|
15
|
-
*/
|
|
16
|
-
static getConfiguration<D extends IDatabaseDriver = IDatabaseDriver, EM extends D[typeof EntityManagerType] & EntityManager = EntityManager>(contextName: string, paths?: string[], options?: Partial<Options>): Promise<Configuration<D, EM>>;
|
|
17
|
-
/**
|
|
18
|
-
* Gets the default config from the default paths
|
|
19
|
-
*
|
|
20
|
-
* @deprecated Prefer to explicitly set the `contextName` at the first argument. This signature is available for backwards compatibility, and may be removed in v7.
|
|
21
|
-
*/
|
|
22
|
-
static getConfiguration<D extends IDatabaseDriver = IDatabaseDriver, EM extends D[typeof EntityManagerType] & EntityManager = EntityManager>(): Promise<Configuration<D, EM>>;
|
|
23
|
-
/**
|
|
24
|
-
* Gets default configuration out of the default paths, and possibly from `process.argv`
|
|
25
|
-
*
|
|
26
|
-
* @param validate Whether to validate the final configuration.
|
|
27
|
-
* @param options Additional options to augment the final configuration with (just before validation).
|
|
28
|
-
*
|
|
29
|
-
* @deprecated Use the other overloads of this method. This signature will be removed in v7.
|
|
30
|
-
*/
|
|
31
|
-
static getConfiguration<D extends IDatabaseDriver = IDatabaseDriver, EM extends D[typeof EntityManagerType] & EntityManager = EntityManager>(validate: boolean, options?: Partial<Options>): Promise<Configuration<D, EM>>;
|
|
32
|
-
static getConfigFile(paths: string[]): Promise<[string, unknown] | []>;
|
|
33
|
-
static getPackageConfig(basePath?: string): Dictionary;
|
|
34
|
-
static getSettings(): Settings;
|
|
35
|
-
static configPathsFromArg(): string[] | undefined;
|
|
36
|
-
static getConfigPaths(): string[];
|
|
37
|
-
static isESM(): boolean;
|
|
38
|
-
static registerTypeScriptSupport(configPath?: string): Promise<boolean>;
|
|
39
|
-
static registerDotenv<D extends IDatabaseDriver>(options?: Options<D>): void;
|
|
40
|
-
static loadEnvironmentVars<D extends IDatabaseDriver>(): Promise<Partial<Options<D>>>;
|
|
41
|
-
static loadEnvironmentVarsSync<D extends IDatabaseDriver>(): Partial<Options<D>>;
|
|
42
|
-
static getORMPackages(): Set<string>;
|
|
43
|
-
/** @internal */
|
|
44
|
-
static commonJSCompat(options: Partial<Options>): void;
|
|
45
|
-
static getORMPackageVersion(name: string): string | undefined;
|
|
46
|
-
static checkPackageVersion(): string;
|
|
47
|
-
}
|
|
48
|
-
export interface Settings {
|
|
49
|
-
alwaysAllowTs?: boolean;
|
|
50
|
-
verbose?: boolean;
|
|
51
|
-
preferTs?: boolean;
|
|
52
|
-
tsConfigPath?: string;
|
|
53
|
-
configPaths?: string[];
|
|
54
|
-
}
|
|
1
|
+
export {};
|