UNPKG

@prismicio/client

Version:

The official JavaScript + TypeScript client library for Prismic

155 lines (153 loc) 5.76 kB
import { RichTextNodeType } from "../types/value/richText.js"; import { LinkType } from "../types/value/link.js"; import { PrismicMigrationAsset } from "../types/migration/Asset.js"; import { PrismicMigrationDocument } from "../types/migration/Document.js"; import { link } from "../helpers/isFilled.js"; import { contentRelationship, image, linkToMedia, rtImageNode } from "./isMigrationValue.js"; import { getOptionalLinkProperties } from "./getOptionalLinkProperties.js"; //#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 PrismicMigrationDocument) return relation.document.id ? { link_type: LinkType.Document, id: relation.document.id } : { link_type: LinkType.Any }; const optionalLinkProperties = relation && "link_type" in relation ? getOptionalLinkProperties(relation) : void 0; if (relation) { if (contentRelationship(relation.id) || typeof relation.id !== "string") return { ...optionalLinkProperties, ...await resolveMigrationContentRelationship(relation.id) }; return { ...optionalLinkProperties, link_type: LinkType.Document, id: relation.id }; } return { ...optionalLinkProperties, link_type: 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 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: RichTextNodeType.image, linkTo: 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 = getOptionalLinkProperties(linkToMedia$1); if (asset) return { ...optionalLinkProperties, id: asset.id, link_type: LinkType.Media }; return { ...optionalLinkProperties, link_type: 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 (contentRelationship(input)) return resolveMigrationContentRelationship(input); if (image(input)) return resolveMigrationImage(input, migration, true); if (linkToMedia(input)) return resolveMigrationLinkToMedia(input, migration); if (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 export { resolveMigrationContentRelationship, resolveMigrationDocumentData }; //# sourceMappingURL=resolveMigrationDocumentData.js.map