gatsby-source-prismic
Version:
Gatsby source plugin for building websites using Prismic as a data source
43 lines (37 loc) • 1.12 kB
text/typescript
import * as prismicH from "@prismicio/helpers";
import {
NormalizeConfig,
NormalizerDependencies,
StructuredTextField,
} from "../types";
export const isStructuredTextField = (
value: unknown,
): value is StructuredTextField => {
// We must be very loose here. An image element, for example, does not
// contain a `text` property.
return Array.isArray(value) && value.every((element) => "type" in element);
};
export type NormalizeStructuredTextConfig<
Value extends StructuredTextField = StructuredTextField,
> = NormalizeConfig<Value> &
Pick<NormalizerDependencies, "linkResolver" | "htmlSerializer">;
export type NormalizedStructuredTextValue<Value extends StructuredTextField> = {
html: string;
text: string;
richText: Value;
raw: Value;
};
export const structuredText = <Value extends StructuredTextField>(
config: NormalizeStructuredTextConfig<Value>,
): NormalizedStructuredTextValue<Value> => {
return {
html: prismicH.asHTML(
config.value,
config.linkResolver,
config.htmlSerializer,
),
text: prismicH.asText(config.value),
richText: config.value,
raw: config.value,
};
};