@becklyn/contentful-adapter
Version:
[](https://github.com/Becklyn-Studios/contentful-adapter/actions/workflows/ci.yml)
61 lines (60 loc) • 2.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getContentfulNormalizerService = void 0;
const api_1 = require("../contentful/api");
const cache_1 = require("../contentful/cache");
const getContentfulNormalizerService = async (config, locale, themeValueMapping = {}, versionValueMapping = {}, referenceResolvers, preview = false, pageContentType = "page") => {
const contentfulClient = (0, api_1.connectToContentfulDeliveryApi)(config.clientConfig, preview);
const pages = await (0, api_1.findAllEntries)(contentfulClient, {
contentType: pageContentType,
select: ["fields.slug", "fields.title"],
});
const pageCache = (0, cache_1.getPageCache)(pages);
let customNormalizers = {};
const internalReferenceResolvers = getInternalReferenceResolvers(referenceResolvers, pageContentType);
return {
allUiComponents: config.components,
client: contentfulClient,
locale,
getThemeValue: (contentfulValue) => {
const mappedValue = themeValueMapping[contentfulValue];
return mappedValue ? mappedValue : contentfulValue;
},
getVersionValue: (contentfulValue) => {
const mappedValue = versionValueMapping[contentfulValue];
return mappedValue ? mappedValue : contentfulValue;
},
pageCache,
resolveInternalReferencePath: async (data) => {
if (!data || !data.sys || !data.sys.contentType) {
return null;
}
const contentType = data.sys.contentType.sys.id;
const resolver = internalReferenceResolvers[contentType];
return resolver ? await resolver(data, pageCache) : null;
},
registerNormalizerType: (dataType, normalizer) => {
if (customNormalizers[dataType]) {
throw new Error(`DataTypeNormalizer for dataType ${dataType} already exists`);
}
customNormalizers[dataType] = normalizer;
},
getCustomNormalizer: (dataType) => {
var _a;
return (_a = customNormalizers[dataType]) !== null && _a !== void 0 ? _a : null;
},
};
};
exports.getContentfulNormalizerService = getContentfulNormalizerService;
const getInternalReferenceResolvers = (resolvers = {}, pageContentType = "page") => {
const referenceResolvers = Object.assign({}, resolvers);
if (!referenceResolvers[pageContentType]) {
referenceResolvers[pageContentType] = async (data, pageCache) => {
if (!data || !data.sys || !data.sys.id) {
return null;
}
return pageCache.getSlugOfPage(data.sys.id);
};
}
return referenceResolvers;
};