@prismicio/client
Version:
The official JavaScript + TypeScript client library for Prismic
156 lines (154 loc) • 6.17 kB
JavaScript
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