gatsby-source-prismic
Version:
Gatsby source plugin for building websites using Prismic as a data source
81 lines (75 loc) • 2.2 kB
text/typescript
import { ImageFieldImage, isFilled } from "@prismicio/client";
import type {
GatsbyCache,
GatsbyGraphQLObjectType,
NodePluginSchema,
} from "gatsby";
import type { ImgixURLParams } from "imgix-url-builder";
import { buildURL } from "imgix-url-builder";
import { PluginOptions } from "../types";
import { DEFAULT_IMGIX_PARAMS } from "../constants";
import { buildGatsbyImageDataFieldConfig } from "./buildGatsbyImageDataFieldConfig";
import { pascalCase } from "./pascalCase";
type BuildImageObjectTypeConfig = {
schema: NodePluginSchema;
cache: GatsbyCache;
pluginOptions: PluginOptions;
};
export const buildImageObjectType = (
config: BuildImageObjectTypeConfig,
): GatsbyGraphQLObjectType => {
return config.schema.buildObjectType({
name: pascalCase("Prismic", config.pluginOptions.typePrefix, "ImageField"),
description: "An Image field.",
fields: {
alt: {
type: "String",
description: "An alternative text for the image.",
},
copyright: {
type: "String",
description: "Copyright information for the image.",
},
dimensions: {
type: "PrismicImageFieldDimensions",
description: "The image's width and height.",
},
url: {
type: "String",
description: "The image's URL.",
args: {
imgixParams: {
type: "PrismicImgixURLParams",
description:
"Parameters to modify the image output using Imgix's URL API. To learn more, see: https://docs.imgix.com/apis/rendering",
},
},
resolve: (
source: ImageFieldImage,
args: { imgixParams?: ImgixURLParams },
): string | null => {
if (isFilled.imageThumbnail(source)) {
return buildURL(source.url, {
...DEFAULT_IMGIX_PARAMS,
...config.pluginOptions.imageImgixParams,
...args.imgixParams,
});
} else {
return null;
}
},
},
gatsbyImageData: buildGatsbyImageDataFieldConfig({
cache: config.cache,
pluginOptions: config.pluginOptions,
}),
localFile: {
type: "File",
description:
"The locally download image file if the field is configured to download locally.",
extensions: { link: {} },
},
},
interfaces: ["PrismicImageFieldBase"],
});
};