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)

61 lines (60 loc) 2.75 kB
"use strict"; 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; };