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)

108 lines (107 loc) 3.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getComponentDataConfig = void 0; const util_1 = require("../data/util"); const getComponentDataConfig = (data) => { if (!data) { return []; } const configs = {}; for (const config of data) { let currentConfig; if (isComponentDataConfig(config)) { const component = config.component; currentConfig = { key: component.key, contentType: config.contentType, data: getDataAndApplyChildConfigs(configs, component.data), }; } else { currentConfig = { key: config.key, contentType: config.key, data: getDataAndApplyChildConfigs(configs, config.data), }; } addConfigToConfigs(configs, currentConfig); } return Object.values(configs); }; exports.getComponentDataConfig = getComponentDataConfig; const addConfigToConfigs = (configs, newConfig) => { if (!configs[newConfig.key]) { configs[newConfig.key] = newConfig; } }; const getDataAndApplyChildConfigs = (configs, dataConfig) => { if (!dataConfig) { return dataConfig; } const cleanConfig = {}; for (const field in dataConfig) { const fieldConfig = dataConfig[field]; if (!(0, util_1.isRelationType)(fieldConfig)) { cleanConfig[field] = fieldConfig; continue; } getRelationTypeAndApplyChildConfigs(configs, cleanConfig, field, fieldConfig); } return cleanConfig; }; const getRelationTypeAndApplyChildConfigs = (configs, cleanConfig, field, fieldConfig) => { if ("string" === typeof fieldConfig.data || !fieldConfig.data) { cleanConfig[field] = { multiple: fieldConfig.multiple, data: fieldConfig.data, }; return; } if ((0, util_1.isBaseComponentConfig)(fieldConfig.data)) { const cleanChildConfig = getDataAndApplyChildConfigs(configs, fieldConfig.data.data); if (cleanChildConfig) { addConfigToConfigs(configs, { key: fieldConfig.data.key, contentType: fieldConfig.data.key, data: cleanChildConfig, }); } cleanConfig[field] = { multiple: fieldConfig.multiple, data: { key: fieldConfig.data.key, data: cleanChildConfig, }, }; return; } let cleanArrayConfig = []; for (const singleConfig of fieldConfig.data) { if ("string" === typeof singleConfig) { cleanArrayConfig = [...cleanArrayConfig, singleConfig]; continue; } const cleanChildConfig = getDataAndApplyChildConfigs(configs, singleConfig.data); if (cleanChildConfig) { addConfigToConfigs(configs, { key: singleConfig.key, contentType: singleConfig.key, data: cleanChildConfig, }); } cleanArrayConfig = [ ...cleanArrayConfig, { key: singleConfig.key, data: cleanChildConfig, }, ]; } cleanConfig[field] = { multiple: fieldConfig.multiple, data: cleanArrayConfig, }; }; const isComponentDataConfig = (data) => { return data.contentType !== undefined; };