UNPKG

@kontent-ai/delivery-sdk

Version:
120 lines 4.53 kB
import { codenameHelper } from '../utilities'; import { ElementMapper } from './element.mapper'; export class ItemMapper { constructor(config) { this.config = config; this.elementMapper = new ElementMapper(config); } /** * Maps single item to its proper strongly typed model from the given response * @param response Response used to map the item * @param queryConfig Query configuration */ mapSingleItemFromResponse(response) { const mapResult = this.mapItems({ mainItems: [response.item], linkedItems: Object.values(response.modular_content) }); return { item: mapResult.items[0], linkedItems: mapResult.linkedItems }; } /** * Maps multiple items to their strongly typed model from the given response * @param response Response used to map the item * @param queryConfig Query configuration */ mapMultipleItemsFromResponse(response) { const mapResult = this.mapItems({ mainItems: response.items, linkedItems: Object.values(response.modular_content) }); return mapResult; } /** * Maps item contracts to full models */ mapItems(data) { const processedItems = {}; const preparedItems = {}; const processingStartedForCodenames = []; const mappedMainItems = []; const mappedLinkedItems = {}; const itemsToResolve = [...data.mainItems, ...data.linkedItems]; // first prepare reference for all items for (const item of itemsToResolve) { preparedItems[codenameHelper.escapeCodenameInCodenameIndexer(item.system.codename)] = { item: this.createContentItem(item), rawItem: item }; } // then resolve main items for (const item of data.mainItems) { const itemResult = this.mapItem({ item: preparedItems[codenameHelper.escapeCodenameInCodenameIndexer(item.system.codename)], processedItems: processedItems, preparedItems: preparedItems, processingStartedForCodenames: processingStartedForCodenames }); mappedMainItems.push(itemResult.item); } // and linked items for (const item of data.linkedItems) { const itemResult = this.mapItem({ item: preparedItems[codenameHelper.escapeCodenameInCodenameIndexer(item.system.codename)], processedItems: processedItems, preparedItems: preparedItems, processingStartedForCodenames: processingStartedForCodenames }); mappedLinkedItems[item.system.codename] = itemResult.item; } return { items: mappedMainItems, linkedItems: mappedLinkedItems }; } /** * Maps item contract to full model */ mapItem(data) { if (!data.item) { throw Error(`Could not map item because its undefined`); } const result = this.elementMapper.mapElements({ dataToMap: data.item, preparedItems: data.preparedItems, processingStartedForCodenames: [], processedItems: data.processedItems }); if (!result) { throw Error(`Mapping of content item '${data.item.item.system.codename}' failed`); } return { item: result.item, processedItems: result.processedItems, preparedItems: result.preparedItems, processingStartedForCodenames: result.processingStartedForCodenames }; } createContentItem(item) { var _a, _b; const contentItem = { elements: {}, system: { codename: item.system.codename, collection: item.system.collection, id: item.system.id, language: item.system.language, lastModified: item.system.last_modified, name: item.system.name, sitemapLocations: item.system.sitemap_locations, type: item.system.type, workflowStep: (_a = item.system.workflow_step) !== null && _a !== void 0 ? _a : null, workflow: (_b = item.system.workflow) !== null && _b !== void 0 ? _b : null } }; return contentItem; } } //# sourceMappingURL=item.mapper.js.map