@kontent-ai/gatsby-source
Version:
Source plugin providing Kontent.ai data from REST Delivery API
63 lines • 2.95 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getKontentItemLanguageVariantArtifact = exports.alterRichTextElements = exports.addPreferredLanguageProperty = exports.kontentItemsSourceNodes = void 0;
const client_1 = require("./client");
const naming_1 = require("./naming");
const lodash_1 = __importDefault(require("lodash"));
const addPreferredLanguageProperty = (items, language) => {
for (const item of items) {
item[naming_1.PREFERRED_LANGUAGE_IDENTIFIER] = language;
}
return items;
};
exports.addPreferredLanguageProperty = addPreferredLanguageProperty;
const alterRichTextElements = (items) => {
const richTextElements = lodash_1.default.flatMap(items, item => Object.values(item.elements)).filter((element) => element.type === 'rich_text');
for (const element of richTextElements) {
element.links = Object.keys(element.links).map((key) => {
element.links[key]['link_id'] = key;
return element.links[key];
});
element.images = Object.keys(element.images).map(key => {
// key is stored in image_id
return element.images[key];
});
}
};
exports.alterRichTextElements = alterRichTextElements;
const getKontentItemLanguageVariantArtifact = (api, kontentItem, includeRawContent) => {
const nodeIdString = (0, naming_1.getKontentItemNodeStringForId)(kontentItem.system.id, kontentItem[naming_1.PREFERRED_LANGUAGE_IDENTIFIER]);
const nodeData = {
...kontentItem,
id: api.createNodeId(nodeIdString),
children: [],
internal: {
type: (0, naming_1.getKontentItemNodeTypeName)(kontentItem.system.type),
contentDigest: api.createContentDigest(kontentItem),
},
};
if (includeRawContent) {
nodeData.internal.content = JSON.stringify(kontentItem);
}
return nodeData;
};
exports.getKontentItemLanguageVariantArtifact = getKontentItemLanguageVariantArtifact;
const sourceNodes = async (api, options) => {
const kontentItemTypes = new Set();
for (const language of options.languageCodenames) {
const kontentItems = await (0, client_1.loadAllKontentItems)(options, language);
addPreferredLanguageProperty(kontentItems, language);
alterRichTextElements(kontentItems);
for (const kontentItem of kontentItems) {
const nodeData = getKontentItemLanguageVariantArtifact(api, kontentItem, options.includeRawContent);
kontentItemTypes.add(nodeData.internal.type);
api.actions.createNode(nodeData);
}
}
return Array.from(kontentItemTypes);
};
exports.kontentItemsSourceNodes = sourceNodes;
//# sourceMappingURL=sourceNodes.items.js.map