fix(core): fix folder-based discovery for multiple entities in single file #5464
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Describe the bug
After upgrading from
v5
tov6
, initializing ORM doesn't work, throwing following stack trace:We went together with @Ruby184 through code and found out that that it was caused by
this.metadata.set(name, Utils.copy(MetadataStorage.getMetadata(name, path), false));
inMetadataDiscovery.discoverDirectories
function.this.metadata
isconst name = this.namingStrategy.getClassName(filename);
used, which overwrites local metadata, when iterating multiple entities in file.Resolution:
Global metadata initialisation (
MetadataStorage.getMetadata(entity.meta.className, filepath)
) is important if the user usesEntitySchema
andTsMorphMetadataProvider
for entities definition, so as a solution we moved this code to theMetadataDiscovery.getSchema
function and refactored theMetadataDiscovery.prepare
function to returnEntitySchema
even if it is located inEntitySchema.REGISTRY
.However, we are not sure, that setting metadata locally is necessary
because they will be overwritten latter in the
MetadataDiscovery.discoverDirectories
function as follows:Reproduction
What driver are you using?
None
MikroORM version
6.2.1
Node.js version
v20.11.1
Operating system
Mac OS Sonoma 14.4.1 (23E224)
Validations