@prismicio/client
Version:
The official JavaScript + TypeScript client library for Prismic
97 lines (95 loc) • 4.7 kB
text/typescript
import { SharedSlice } from "../value/sharedSlice.cjs";
import { FilledContentRelationshipField } from "../value/contentRelationship.cjs";
import { AnyOEmbed, EmbedField, OEmbedExtra } from "../value/embed.cjs";
import { FilledImageFieldImage } from "../value/image.cjs";
import { FilledLinkToMediaField } from "../value/linkToMedia.cjs";
import { RTImageNode } from "../value/richText.cjs";
import { PrismicDocument, PrismicDocumentWithUID } from "../value/document.cjs";
import { MigrationContentRelationship } from "./ContentRelationship.cjs";
import { MigrationImage, MigrationLinkToMedia, MigrationRTImageNode } from "./Asset.cjs";
//#region src/types/migration/Document.d.ts
/**
* A utility type that extends any fields in a record with their migration
* fields equivalent.
*
* @typeParam T - Type of the record to extend.
*/
type InjectMigrationSpecificTypes<T> = T extends RTImageNode ? T | (Omit<T, "linkTo"> & InjectMigrationSpecificTypes<Pick<T, "linkTo">>) | MigrationRTImageNode | undefined : T extends FilledImageFieldImage ? T | MigrationImage | undefined : T extends FilledLinkToMediaField ? T | MigrationLinkToMedia | undefined : T extends FilledContentRelationshipField ? T | MigrationContentRelationship : T extends EmbedField<AnyOEmbed & OEmbedExtra, "filled"> ? T | Pick<T, "embed_url"> : T extends SharedSlice ? T | InjectMigrationSpecificTypes<Omit<T, "id" | "slice_label" | "version">> : T extends Record<any, any> ? { [P in keyof T]: InjectMigrationSpecificTypes<T[P]> } : T extends Array<infer U> ? Array<InjectMigrationSpecificTypes<U>> : T;
/**
* A utility type that ties the type and data of a Prismic document, creating a
* strict union.
*/
type TiedDocumentTypeAndData<TDocument extends PrismicDocument> = TDocument extends PrismicDocument<infer TData, infer TType> ? {
/**
* Type of the document.
*/
type: TType;
/**
* Data contained in the document.
*/
data: InjectMigrationSpecificTypes<TData>;
} & (TDocument extends PrismicDocumentWithUID ? Pick<TDocument, "uid"> : Partial<Pick<TDocument, "uid">>) : never;
/**
* A pending Prismic document to be created with the Migration API.
*
* @typeParam TDocument - Type of the Prismic document.
*/
type PendingPrismicDocument<TDocument extends PrismicDocument = PrismicDocument> = Pick<TDocument, "lang"> & Partial<Pick<TDocument, "tags">> & TiedDocumentTypeAndData<TDocument>;
/**
* An existing Prismic document to be updated with the Migration API.
*
* @typeParam TDocument - Type of the Prismic document.
*/
type ExistingPrismicDocument<TDocument extends PrismicDocument = PrismicDocument> = Omit<TDocument, "uid" | "type" | "data"> & TiedDocumentTypeAndData<TDocument>;
/**
* A Prismic document to be sent to the Migration API.
*
* @typeParam TDocument - Type of the Prismic document.
*/
type MigrationDocument<TDocument extends PrismicDocument = PrismicDocument> = PendingPrismicDocument<TDocument> | ExistingPrismicDocument<TDocument>;
/**
* A Prismic migration document instance.
*
* @typeParam TDocument - Type of the Prismic document.
*/
declare class PrismicMigrationDocument<TDocument extends PrismicDocument = PrismicDocument> {
/**
* The document to be sent to the Migration API.
*/
document: MigrationDocument<TDocument> & Partial<Pick<TDocument, "id">>;
/**
* The name of the document displayed in the editor.
*/
title?: string;
/**
* The link to the master language document to relate the document to if any.
*/
masterLanguageDocument?: MigrationContentRelationship;
/**
* Original Prismic document when the migration document came from another
* Prismic repository.
*
* @remarks
* When migrating a document from another repository, one might want to alter
* it with migration specific types, hence accepting an
* `ExistingPrismicDocument` instead of a regular `PrismicDocument`.
*/
originalPrismicDocument?: ExistingPrismicDocument<PrismicDocument>;
/**
* Creates a Prismic migration document instance.
*
* @param document - The document to be sent to the Migration API.
* @param title - The name of the document displayed in the editor.
* @param params - Parameters to create/update the document with on the
* Migration API.
*
* @returns A Prismic migration document instance.
*/
constructor(document: MigrationDocument<TDocument>, title?: string, params?: {
masterLanguageDocument?: MigrationContentRelationship;
originalPrismicDocument?: ExistingPrismicDocument<PrismicDocument>;
});
}
//#endregion
export { ExistingPrismicDocument, InjectMigrationSpecificTypes, PendingPrismicDocument, PrismicMigrationDocument };
//# sourceMappingURL=Document.d.cts.map