Skip to content

Commit

Permalink
Store resolved types in discriminatorProperty
Browse files Browse the repository at this point in the history
  • Loading branch information
MatthiasKunnen committed Jan 27, 2021
1 parent 2b780e7 commit 836ec19
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions src/json-inheritance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,23 @@ export interface DiscriminatorPropertyOptions {
export function discriminatorProperty(
{property, types}: DiscriminatorPropertyOptions,
): ObjectInheritanceOptions {
let resolvedTypes: {[k: string]: Serializable<any>} | undefined;
let reverseMapping: Map<Function, string> | undefined;

const getResolvedTypes = () => {
if (resolvedTypes === undefined) {
resolvedTypes = types();
}

return resolvedTypes;
};

// Create a map for O(1) type-to-discriminator-lookup once.
const getReverseMapping = () => {
if (reverseMapping === undefined) {
const reverseMapItems: Array<[Function, string]> = Object.keys(types())
const reverseMapItems: Array<[Function, string]> = Object.keys(getResolvedTypes())
.map(discriminator => {
return [types()[discriminator].prototype.constructor, discriminator];
return [getResolvedTypes()[discriminator].prototype.constructor, discriminator];
});
reverseMapping = new Map<Function, string>(reverseMapItems);
}
Expand All @@ -81,7 +90,7 @@ export function discriminatorProperty(
return result;
},
resolveType: data => {
return types()[data[property]];
return getResolvedTypes()[data[property]];
},
};
}

0 comments on commit 836ec19

Please sign in to comment.