Skip to content

Commit

Permalink
fix(mikro): adjust serializeEntity to return the object with id for u…
Browse files Browse the repository at this point in the history
…ninitialized reference
  • Loading branch information
nartc committed Apr 7, 2022
1 parent b767fea commit 62f5c0f
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 25 deletions.
23 changes: 14 additions & 9 deletions packages/mikro/src/lib/mikro.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { classes } from '@automapper/classes';
import type {
Constructor,
Dictionary, Mapping,
MappingStrategyInitializer,
MappingStrategyInitializerOptions,
MetadataIdentifier,
Constructor,
Dictionary,
Mapping,
MappingStrategyInitializer,
MappingStrategyInitializerOptions,
MetadataIdentifier,
} from '@automapper/core';
import {defaultSerializerOptions, MappingClassId} from '@automapper/core';
import { defaultSerializerOptions, MappingClassId } from '@automapper/core';
import { serializeEntity } from './serialize-entity';

export function mikro(
Expand All @@ -22,12 +23,16 @@ export function mikro(
};

if (mergedOptions.preMap === defaultSerializerOptions.preMap) {
mergedOptions.preMap = <TSource extends Dictionary<TSource>, TDestination extends Dictionary<TDestination>>(
mergedOptions.preMap = <
TSource extends Dictionary<TSource>,
TDestination extends Dictionary<TDestination>
>(
source: TSource,
mapping: Mapping<TSource, TDestination>
) => {
const [sourceMetadataObject] = mapping[MappingClassId.identifierMetadata];
return serializeEntity(source, sourceMetadataObject) as TSource;
const [sourceMetadataObject] =
mapping[MappingClassId.identifierMetadata];
return serializeEntity(source, sourceMetadataObject) as TSource;
};
}

Expand Down
35 changes: 19 additions & 16 deletions packages/mikro/src/lib/serialize-entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,34 +26,37 @@ export function serializeEntity(
}

const value = item[key];
const keyMetadata = itemMetadata[key] as Record<string, unknown>;

if (Utils.isCollection(value)) {
result[key] = (value.getSnapshot() || []).map((snapshot) => {
return serializeEntity(
snapshot as AnyEntity,
itemMetadata[key] as Record<string, unknown>,
keyMetadata,
true
);
});
} else {
if (Reference.isReference(value)) {
if (
typeof itemMetadata[key] === 'object' &&
!isEmpty(itemMetadata[key])
) {
result[key] = serializeEntity(
value.getEntity(),
itemMetadata[key] as Record<string, unknown>
);
}
continue;
}

if (Reference.isReference(value)) {
if (!value.isInitialized()) {
result[key] = serializeEntity(
wrap(value).toPOJO(),
keyMetadata
);
continue;
}

result[key] = serializeEntity(
Reference.isReference(value) ? value.getEntity() : value,
itemMetadata[key] as Record<string, unknown>,
typeof itemMetadata[key] === 'object' &&
isEmpty(itemMetadata[key])
value.getEntity(),
keyMetadata,
typeof keyMetadata === 'object' && isEmpty(keyMetadata)
);
continue;
}

result[key] = serializeEntity(value, keyMetadata);
}

if (result['id'] == null && item['id'] != null) {
Expand Down

0 comments on commit 62f5c0f

Please sign in to comment.