UNPKG

@itxch/contentful-import

Version:

This tool allows you to import JSON dump exported by contentful-export

53 lines (49 loc) 1.89 kB
import { payloadSchema } from "./schema.js"; import { getEntityName } from "contentful-batch-libs/dist/get-entity-name.js"; const attachEntityName = (details, payload) => { details.map((detail) => { if (detail.path.length >= 2) { detail.entity = getEntityName(payload[detail.path[0]][detail.path[1]]); } return detail; }); }; const countInvalidEntities = (validationData) => { const entityCount = validationData.reduce((entities, currentDetail) => { if (!entities[currentDetail.path[0]]) { entities[currentDetail.path[0]] = 1; } else { entities[currentDetail.path[0]]++; } return entities; }, {}); return Object.keys(entityCount).map((key) => `${key}:${entityCount[key]}`); }; const assertPayload = (payload) => { const result = payloadSchema.validate(payload, { allowUnknown: true, abortEarly: false }); if (result.error) { attachEntityName(result.error.details, payload); const invalidEntityCount = countInvalidEntities(result.error.details).join(", "); result.error.message = `${invalidEntityCount} - Get further details in the error log file`; delete result.error._original; throw result.error; } }; const assertDefaultLocale = (source, destination) => { const sourceDefaultLocale = source.locales.find((locale) => locale.default === true); const destinationDefaultLocale = destination.locales.find((locale) => locale.default === true); if (!sourceDefaultLocale || !destinationDefaultLocale) { return; } if (sourceDefaultLocale.code !== destinationDefaultLocale.code) { throw new Error(` Please make sure the destination space have the same default locale as the source Default locale for source space : ${sourceDefaultLocale.code} Default locale for destination space: ${destinationDefaultLocale.code} `); } }; export { assertDefaultLocale, assertPayload };