@prismicio/client
Version:
The official JavaScript + TypeScript client library for Prismic
169 lines (168 loc) • 4.59 kB
TypeScript
import type { EmptyObjectField, FieldState } from "./types";
/**
* oEmbed 1.0 possible types.
*
* @see oEmbed specification: {@link https://oembed.com}
*/
export declare const OEmbedType: {
readonly Photo: "photo";
readonly Video: "video";
readonly Link: "link";
readonly Rich: "rich";
};
/**
* oEmbed response base fields. Those are every mandatory fields an oEmbed
* response must feature.
*
* @see oEmbed specification: {@link https://oembed.com}
*/
type OEmbedBase<TType extends (typeof OEmbedType)[keyof typeof OEmbedType]> = {
/**
* oEmbed resource type.
*/
type: TType;
/**
* oEmbed version number, this must be "1.0".
*/
version: string;
};
/**
* oEmbed response extra fields. Those are every non-mandatory and unknown
* fields an oEmbed response can feature.
*
* @see oEmbed specification: {@link https://oembed.com}
*/
export type OEmbedExtra = {
/**
* oEmbed text title, describing the resource.
*/
title?: string | null;
/**
* oEmbed resource author/owner name.
*/
author_name?: string | null;
/**
* oEmbed resource author/owner URL.
*/
author_url?: string | null;
/**
* oEmbed resource provider name.
*/
provider_name?: string | null;
/**
* oEmbed resource provider URL.
*/
provider_url?: string | null;
/**
* oEmbed suggested cache lifetime for the resource, in seconds.
*/
cache_age?: number | null;
/**
* oEmbed resource thumbnail URL.
*/
thumbnail_url?: string | null;
/**
* oEmbed resource thumbnail width.
*/
thumbnail_width?: number | null;
/**
* oEmbed resource thumbnail height.
*/
thumbnail_height?: number | null;
/**
* Providers may optionally include any parameters not specified in this
* document (so long as they use the same key-value format) and consumers may
* choose to ignore these. Consumers must ignore parameters they do not
* understand.
*
* @see oEmbed specification: {@link https://oembed.com}
*/
[key: string]: unknown | null;
};
/**
* oEmbed photo type. Those are every mandatory fields an oEmbed photo response
* must feature.
*
* @see oEmbed specification: {@link https://oembed.com}
*/
export type PhotoOEmbed = OEmbedBase<typeof OEmbedType.Photo> & {
/**
* oEmbed source URL of the image.
*/
url: string;
/**
* oEmbed width in pixels of the image.
*/
width: number;
/**
* oEmbed height in pixels of the image.
*/
height: number;
};
/**
* oEmbed video type. Those are every mandatory fields an oEmbed video response
* must feature.
*
* @see oEmbed specification: {@link https://oembed.com}
*/
export type VideoOEmbed = OEmbedBase<typeof OEmbedType.Video> & {
/**
* oEmbed HTML required to embed a video player.
*/
html: string;
/**
* oEmbed width in pixels required to display the HTML.
*/
width: number;
/**
* oEmbed height in pixels required to display the HTML.
*/
height: number;
};
/**
* oEmbed link type. Those are every mandatory fields an oEmbed link response
* must feature.
*
* @see oEmbed specification: {@link https://oembed.com}
*/
export type LinkOEmbed = OEmbedBase<typeof OEmbedType.Link>;
/**
* oEmbed rich type. Those are every mandatory fields an oEmbed rich response
* must feature.
*
* @see oEmbed specification: {@link https://oembed.com}
*/
export type RichOEmbed = OEmbedBase<typeof OEmbedType.Rich> & {
/**
* oEmbed HTML required to display the resource.
*/
html: string;
/**
* oEmbed width in pixels required to display the HTML.
*/
width: number;
/**
* oEmbed height in pixels required to display the HTML.
*/
height: number;
};
/**
* Any of the possible types of oEmbed response. Those contains only mandatory
* fields their respective oEmbed response type must feature.
*
* @see oEmbed specification: {@link https://oembed.com}
*/
export type AnyOEmbed = PhotoOEmbed | VideoOEmbed | LinkOEmbed | RichOEmbed;
/**
* An embed field.
*
* @typeParam Data - Data provided by the URL's oEmbed provider.
* @typeParam State - State of the field which determines its shape.
*
* @see More details: {@link https://prismic.io/docs/embed}
*/
export type EmbedField<Data extends AnyOEmbed = AnyOEmbed & OEmbedExtra, State extends FieldState = FieldState> = State extends "empty" ? EmptyObjectField : Data & {
embed_url: string;
html: string | null;
};
export {};