UNPKG

@prismicio/client

Version:

The official JavaScript + TypeScript client library for Prismic

156 lines (154 loc) 6.17 kB
const require_richText = require('../types/value/richText.cjs'); const require_link = require('../types/value/link.cjs'); const require_Asset = require('../types/migration/Asset.cjs'); const require_Document = require('../types/migration/Document.cjs'); const require_isFilled = require('../helpers/isFilled.cjs'); const require_isMigrationValue = require('./isMigrationValue.cjs'); const require_getOptionalLinkProperties = require('./getOptionalLinkProperties.cjs'); //#region src/lib/resolveMigrationDocumentData.ts /** * Resolves a migration content relationship to a content relationship field. * * @param relation - Content relationship to resolve. * * @returns Resolved content relationship field. */ async function resolveMigrationContentRelationship(relation) { if (typeof relation === "function") return resolveMigrationContentRelationship(await relation()); if (relation instanceof require_Document.PrismicMigrationDocument) return relation.document.id ? { link_type: require_link.LinkType.Document, id: relation.document.id } : { link_type: require_link.LinkType.Any }; const optionalLinkProperties = relation && "link_type" in relation ? require_getOptionalLinkProperties.getOptionalLinkProperties(relation) : void 0; if (relation) { if (require_isMigrationValue.contentRelationship(relation.id) || typeof relation.id !== "string") return { ...optionalLinkProperties, ...await resolveMigrationContentRelationship(relation.id) }; return { ...optionalLinkProperties, link_type: require_link.LinkType.Document, id: relation.id }; } return { ...optionalLinkProperties, link_type: require_link.LinkType.Any }; } /** * Resolves a migration image to an image field. * * @param migrationAsset - Asset to resolve. * @param migration - Migration instance. * @param withThumbnails - Whether to include thumbnails. * * @returns Resolved image field. */ const resolveMigrationImage = (image$1, migration, withThumbnails) => { var _migration$_assets$ge; const { id: master,...thumbnails } = image$1 instanceof require_Asset.PrismicMigrationAsset ? { id: image$1 } : image$1; const asset = (_migration$_assets$ge = migration._assets.get(master.config.id)) === null || _migration$_assets$ge === void 0 ? void 0 : _migration$_assets$ge.asset; const maybeInitialField = master.originalField; if (asset) { const parameters = ((maybeInitialField === null || maybeInitialField === void 0 ? void 0 : maybeInitialField.url) || asset.url).split("?")[1]; const url = `${asset.url.split("?")[0]}${parameters ? `?${parameters}` : ""}`; const dimensions = { width: asset.width, height: asset.height }; const edit = maybeInitialField && "edit" in maybeInitialField ? maybeInitialField === null || maybeInitialField === void 0 ? void 0 : maybeInitialField.edit : { x: 0, y: 0, zoom: 1, background: "transparent" }; const alt = master.config.alt || asset.alt || null; const resolvedThumbnails = {}; if (withThumbnails) for (const [name, thumbnail] of Object.entries(thumbnails)) { const resolvedThumbnail = resolveMigrationImage(thumbnail, migration); if (resolvedThumbnail) resolvedThumbnails[name] = resolvedThumbnail; } return { id: asset.id, url, dimensions, edit, alt, copyright: asset.credits || null, ...resolvedThumbnails }; } }; /** * Resolves a migration rich text image node to a regular rich text image node. * * @param rtImageNode - Migration rich text image node to resolve. * @param migration - Migration instance. * * @returns Resolved rich text image node. */ const resolveMigrationRTImageNode = async (rtImageNode$1, migration) => { const image$1 = resolveMigrationImage(rtImageNode$1.id, migration); if (image$1) { const linkTo = await resolveMigrationDocumentData(rtImageNode$1.linkTo, migration); return { ...image$1, type: require_richText.RichTextNodeType.image, linkTo: require_isFilled.link(linkTo) ? linkTo : void 0 }; } }; /** * Resolves a migration link to media to a regular link to media field. * * @param linkToMedia - Migration link to media to resolve. * @param migration - Migration instance. * * @returns Resolved link to media field. */ const resolveMigrationLinkToMedia = (linkToMedia$1, migration) => { var _migration$_assets$ge2; const asset = (_migration$_assets$ge2 = migration._assets.get(linkToMedia$1.id.config.id)) === null || _migration$_assets$ge2 === void 0 ? void 0 : _migration$_assets$ge2.asset; const optionalLinkProperties = require_getOptionalLinkProperties.getOptionalLinkProperties(linkToMedia$1); if (asset) return { ...optionalLinkProperties, id: asset.id, link_type: require_link.LinkType.Media }; return { ...optionalLinkProperties, link_type: require_link.LinkType.Any }; }; /** * Resolves a migration document data to actual data ready to be sent to the * Migration API. * * @param input - Migration link to media to resolve. * @param migration - Migration instance. * * @returns Resolved data. */ async function resolveMigrationDocumentData(input, migration) { if (require_isMigrationValue.contentRelationship(input)) return resolveMigrationContentRelationship(input); if (require_isMigrationValue.image(input)) return resolveMigrationImage(input, migration, true); if (require_isMigrationValue.linkToMedia(input)) return resolveMigrationLinkToMedia(input, migration); if (require_isMigrationValue.rtImageNode(input)) return resolveMigrationRTImageNode(input, migration); if (typeof input === "function") return await resolveMigrationDocumentData(await input(), migration); if (Array.isArray(input)) { const res = []; for (const element of input) res.push(await resolveMigrationDocumentData(element, migration)); return res.filter(Boolean); } if (input && typeof input === "object") { const res = {}; for (const key in input) res[key] = await resolveMigrationDocumentData(input[key], migration); return res; } return input; } //#endregion exports.resolveMigrationContentRelationship = resolveMigrationContentRelationship; exports.resolveMigrationDocumentData = resolveMigrationDocumentData; //# sourceMappingURL=resolveMigrationDocumentData.cjs.map