@kontent-ai/delivery-sdk
Version:
Official Kontent.AI Delivery API SDK
65 lines • 2.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TypeMapper = void 0;
class TypeMapper {
mapSingleType(response) {
return this.mapType(response);
}
mapMultipleTypes(response) {
return response.types.map((type) => {
return this.mapType(type);
});
}
mapType(type) {
if (!type) {
throw Error(`Cannot map type`);
}
if (!type.elements) {
throw Error(`Cannot map type elements`);
}
const system = {
codename: type.system.codename,
id: type.system.id,
name: type.system.name,
lastModified: type.system.last_modified
};
const elements = [];
const elementNames = Object.getOwnPropertyNames(type.elements);
elementNames.forEach((elementName) => {
const typeElement = type.elements[elementName];
if (!typeElement) {
throw Error(`Cannot find element '${elementName}' on type '${type.system.codename}'`);
}
// use json property as a codename of the type element
const elementCodename = elementName;
// extra properties for certain element types
const options = [];
// some elements can contain options
const rawOptions = typeElement.options;
if (rawOptions) {
if (!Array.isArray(rawOptions)) {
throw Error(`Content type 'options' property has to be an array`);
}
rawOptions.forEach((rawOption) => {
options.push({
codename: rawOption.codename,
name: rawOption.name
});
});
}
elements.push({
codename: elementCodename,
taxonomyGroup: typeElement.taxonomy_group,
options: options,
name: typeElement.name,
type: typeElement.type
});
});
return {
elements: elements,
system: system
};
}
}
exports.TypeMapper = TypeMapper;
//# sourceMappingURL=type.mapper.js.map