@becklyn/contentful-adapter
Version:
[](https://github.com/Becklyn-Studios/contentful-adapter/actions/workflows/ci.yml)
126 lines (125 loc) • 5.39 kB
JavaScript
;
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);
}
};