UNPKG

@prismicio/client

Version:

The official JavaScript + TypeScript client library for Prismic

97 lines (95 loc) 4.69 kB
import { SharedSlice } from "../value/sharedSlice.js"; import { FilledContentRelationshipField } from "../value/contentRelationship.js"; import { AnyOEmbed, EmbedField, OEmbedExtra } from "../value/embed.js"; import { FilledImageFieldImage } from "../value/image.js"; import { FilledLinkToMediaField } from "../value/linkToMedia.js"; import { RTImageNode } from "../value/richText.js"; import { PrismicDocument, PrismicDocumentWithUID } from "../value/document.js"; import { MigrationContentRelationship } from "./ContentRelationship.js"; import { MigrationImage, MigrationLinkToMedia, MigrationRTImageNode } from "./Asset.js"; //#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.ts.map