typia
Version:
Superfast runtime validators with only one line
70 lines • 3.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MetadataComponents = void 0;
const Writable_1 = require("../../typings/Writable");
const Metadata_1 = require("./Metadata");
const MetadataAliasType_1 = require("./MetadataAliasType");
const MetadataArrayType_1 = require("./MetadataArrayType");
const MetadataObjectType_1 = require("./MetadataObjectType");
const MetadataProperty_1 = require("./MetadataProperty");
const MetadataTupleType_1 = require("./MetadataTupleType");
class MetadataComponents {
constructor(props) {
this.aliases = props.aliases;
this.objects = props.objects;
this.arrays = props.arrays;
this.tuples = props.tuples;
this.dictionary = props.dictionary;
}
static from(json) {
// INITIALIZE COMPONENTS
const dictionary = {
objects: new Map(json.objects.map((obj) => [
obj.name,
MetadataObjectType_1.MetadataObjectType._From_without_properties(obj),
])),
aliases: new Map(json.aliases.map((alias) => [
alias.name,
MetadataAliasType_1.MetadataAliasType._From_without_value(alias),
])),
arrays: new Map(json.arrays.map((arr) => [
arr.name,
MetadataArrayType_1.MetadataArrayType._From_without_value(arr),
])),
tuples: new Map(json.tuples.map((tpl) => [
tpl.name,
MetadataTupleType_1.MetadataTupleType._From_without_elements(tpl),
])),
};
// CONSTRUCT METADATA OF THEM
for (const obj of json.objects)
dictionary.objects
.get(obj.name)
.properties.push(...obj.properties.map((prop) => MetadataProperty_1.MetadataProperty.from(prop, dictionary)));
for (const alias of json.aliases)
(0, Writable_1.Writable)(dictionary.aliases.get(alias.name)).value = Metadata_1.Metadata.from(alias.value, dictionary);
for (const array of json.arrays)
(0, Writable_1.Writable)(dictionary.arrays.get(array.name)).value = Metadata_1.Metadata.from(array.value, dictionary);
for (const tuple of json.tuples)
(0, Writable_1.Writable)(dictionary.tuples.get(tuple.name)).elements =
tuple.elements.map((elem) => Metadata_1.Metadata.from(elem, dictionary));
// FINALIZE
return new MetadataComponents({
aliases: [...dictionary.aliases.values()],
objects: [...dictionary.objects.values()],
arrays: [...dictionary.arrays.values()],
tuples: [...dictionary.tuples.values()],
dictionary,
});
}
toJSON() {
return {
aliases: this.aliases.map((alias) => alias.toJSON()),
objects: this.objects.map((object) => object.toJSON()),
arrays: this.arrays.map((array) => array.toJSON()),
tuples: this.tuples.map((tuple) => tuple.toJSON()),
};
}
}
exports.MetadataComponents = MetadataComponents;
//# sourceMappingURL=MetadataComponents.js.map