UNPKG

@becklyn/contentful-adapter

Version:

[![CI](https://github.com/Becklyn-Studios/contentful-adapter/actions/workflows/ci.yml/badge.svg)](https://github.com/Becklyn-Studios/contentful-adapter/actions/workflows/ci.yml)

126 lines (125 loc) 5.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.normalizeDataForDataConfig = exports.normalizeDataForComponent = exports.normalizeData = exports.normalizePageData = void 0; const ui_types_1 = require("@becklyn/ui-types"); const util_1 = require("./util"); const asset_1 = require("./asset"); const rte_1 = require("./rte"); const reference_1 = require("./reference"); const relation_1 = require("./relation"); const api_1 = require("../contentful/api"); const headline_1 = require("./headline"); const normalizePageData = async (pageData, service) => { return await (0, exports.normalizeData)(pageData, service); }; exports.normalizePageData = normalizePageData; const normalizeData = async (data, service) => { if ("Asset" === data.sys.type) { return (0, asset_1.normalizeAssetData)(data, service); } if ("Link" === data.sys.type) { // load missing data const newData = await (0, api_1.findOneEntryBySys)(data.sys, service.client, { depth: 10 }); if (null === newData) { return null; } return (0, exports.normalizeData)(newData, service); } const contentType = data.sys.contentType.sys.id; for (let i = 0; i < service.allUiComponents.length; i++) { const component = service.allUiComponents[i]; if (component.contentType === contentType) { return await (0, exports.normalizeDataForComponent)(data, component, service); } } return null; }; exports.normalizeData = normalizeData; const normalizeDataForComponent = async (data, component, service) => { const dataConfig = component.data; if (!dataConfig) { return null; } return await (0, exports.normalizeDataForDataConfig)(data, dataConfig, service); }; exports.normalizeDataForComponent = normalizeDataForComponent; const normalizeDataForDataConfig = async (data, dataConfig, service) => { if (!data.fields) { // load missing data const newData = await (0, api_1.findOneEntryBySys)(data.sys, service.client, { depth: 10 }); if (null === newData) { return null; } data = newData; } const fieldNames = (0, util_1.getDataFieldNames)(data, dataConfig); const outputData = {}; addThemeToData(outputData, data, service); addVersionToData(outputData, data, service); addAnchorDataToData(outputData, data, service); outputData["id"] = (0, util_1.getIdFromData)(data); outputData["componentKey"] = (0, util_1.getComponentKeyFromData)(data, service); for (let i = 0; i < fieldNames.length; i++) { const fieldName = fieldNames[i]; const dataType = dataConfig[fieldName]; if (dataType) { const normalizer = "string" === typeof dataType ? service.getCustomNormalizer(dataType) : null; const fieldData = (0, util_1.getValueOfField)(data.fields[fieldName], service.locale); outputData[fieldName] = normalizer ? await normalizer(fieldData !== null && fieldData !== void 0 ? fieldData : null, service, data) : await getDataValue(fieldData !== null && fieldData !== void 0 ? fieldData : null, dataType, service); } } return outputData; }; exports.normalizeDataForDataConfig = normalizeDataForDataConfig; const addThemeToData = (outputData, data, service) => { if (!data || !data.fields || !data.fields.theme) { return; } const themeFieldData = (0, util_1.getValueOfField)(data.fields.theme, service.locale); if (!themeFieldData) { return; } outputData["theme"] = service.getThemeValue(themeFieldData); }; const addVersionToData = (outputData, data, service) => { if (!data || !data.fields || !data.fields.version) { return; } const versionFieldData = (0, util_1.getValueOfField)(data.fields.version, service.locale); if (!versionFieldData) { return; } outputData["version"] = service.getVersionValue(versionFieldData); }; const addAnchorDataToData = (outputData, data, service) => { if (data && data.fields && data.fields.anchor) { outputData["anchor"] = (0, util_1.getValueOfField)(data.fields.anchor, service.locale); } if (data && data.fields && data.fields.anchorLabel) { outputData["anchorLabel"] = (0, util_1.getValueOfField)(data.fields.anchorLabel, service.locale); } }; const getDataValue = async (data, dataType, service) => { switch (dataType) { case ui_types_1.TYPE_RAW: return data; case ui_types_1.TYPE_STRING: return "string" === typeof data ? data : null; case ui_types_1.TYPE_BOOL: return "boolean" === typeof data ? data : null; case ui_types_1.TYPE_NUMBER: return "number" === typeof data ? data : null; case ui_types_1.TYPE_RTE: return await (0, rte_1.getRteData)(data, service); case ui_types_1.TYPE_HEADLINE: return (0, headline_1.getHeadlineString)(data); case ui_types_1.TYPE_ASSET: return await (0, asset_1.normalizeAssetData)(data, service); case ui_types_1.TYPE_LABELED_LINK: return await (0, reference_1.normalizeLabeledLink)(data, service); default: return await (0, relation_1.normalizeRelationTypeData)(dataType, data, service); } };