{"version":3,"file":"gatsby-node.cjs","sources":["../../src/lib/paramCaseObject.ts","../../src/lib/parseArParam.ts","../../src/constants.ts","../../src/resolvers/resolveFixed.ts","../../src/resolvers/resolveFluid.ts","../../src/lib/generateGatsbyImageDataSource.ts","../../src/graphql/buildFixedFieldConfig.server.ts","../../src/lib/fetchBase64Image.server.ts","../../src/graphql/buildFixedObjectType.server.ts","../../src/graphql/buildFluidFieldConfig.server.ts","../../src/graphql/buildFluidObjectType.server.ts","../../src/graphql/buildGatsbyImageDataPlaceholderEnum.server.ts","../../src/resolvers/resolveGatsbyImageData.server.ts","../../src/graphql/buildGatsbyImageDataFieldConfig.server.ts","../../src/graphql/buildUrlFieldConfig.server.ts","../../src/graphql/buildImgixParamsInputObjectType.server.ts","../../src/lib/fetchImageDimensions.server.ts","../../src/lib/generateImageSourceFromUrl.server.ts","../../src/plugin/constants.ts","../../src/plugin/buildImgixImageObjectType.ts","../../src/plugin/buildQueryObjectType.ts","../../src/plugin/create-schema-customization.ts","../../src/plugin/plugin-options-schema.ts"],"sourcesContent":["import { paramCase } from \"param-case\";\nimport { KebabCase as ParamCase } from \"type-fest\";\n\ntype ParamCaseObject<T extends Record<string, unknown>> = {\n\t[P in keyof T as ParamCase<P>]: T[P];\n};\n\nexport const paramCaseObject = <T extends Record<string, unknown>>(\n\tobj: T,\n): ParamCaseObject<T> => {\n\tconst result = {} as ParamCaseObject<T>;\n\n\tfor (const key in obj) {\n\t\tconst paramKey = paramCase(key) as keyof typeof result;\n\n\t\tresult[paramKey] = obj[key as keyof typeof obj];\n\t}\n\n\treturn result;\n};\n","export const parseArParam = (ar: string): number => {\n\tconst [antecedent, consequent] = ar.split(\":\");\n\n\treturn Number.parseFloat(antecedent) / Number.parseFloat(consequent);\n};\n","import { ImgixParams } from \"./types\";\n\n/**\n * The default width for fixed images.\n */\nexport const DEFAULT_FIXED_WIDTH = 400;\n\n/**\n * The default max width for fluid images.\n */\nexport const DEFAULT_FLUID_MAX_WIDTH = 800;\n\n/**\n * A set of factors used to compute a default setSetBreakpoint argument for fluid images.\n */\nexport const DEFAULT_FLUID_SRC_SET_BREAKPOINT_FACTORS = [0.25, 0.5, 1.5, 2];\n\n/**\n * Default Imgix parameters applied to all images.\n */\nexport const DEFAULT_IMGIX_PARAMS: ImgixParams = {\n\tfit: \"crop\",\n};\n\n/**\n * Default Imgix parameters applied to all placeholder images.\n */\nexport const DEFAULT_PLACEHOLDER_IMGIX_PARAMS: ImgixParams = {\n\tw: 20,\n\th: undefined,\n\tblur: 15,\n\tq: 20,\n};\n\n/**\n * GraphQL type names used for GraphQL type and field builders.\n */\nexport enum GraphQLTypeName {\n\t/**\n\t * Gatsby Image placeholder kinds.\n\t */\n\tGatsbyImageDataPlaceholderEnum = \"GatsbyImageDataPlaceholder\",\n\n\t/**\n\t * Imgix parameters used in Imgix's URL API.\n\t */\n\tImgixParamsInputObject = \"ImgixParams\",\n\n\t/**\n\t * `gatsby-plugin-image` gatsbyImageData objects.\n\t */\n\tGatsbyImageDataObject = \"GatsbyImageData\",\n\n\t/**\n\t * `gatsby-image` fixed objects.\n\t */\n\tFixedObject = \"Fixed\",\n\n\t/**\n\t * `gatsby-image` fluid objects.\n\t */\n\tFluidObject = \"Fluid\",\n}\n\n/**\n * Gatsby Image placeholder kinds.\n *\n * @see Gatsby Image plugin documentation: {@link https://www.gatsbyjs.com/docs/reference/built-in-components/gatsby-plugin-image/#placeholder}\n */\nexport enum GatsbyImageDataPlaceholderKind {\n\tBlurred = \"blurred\",\n\tDominantColor = \"dominantColor\",\n\tNone = \"none\",\n}\n\n/**\n * Gatsby Image layout kinds.\n *\n * @see Gatsby Image plugin documentation: {@link https://www.gatsbyjs.com/docs/reference/built-in-components/gatsby-plugin-image/#layout}\n */\nexport enum GatsbyImageDataLayoutKind {\n\tConstrained = \"constrained\",\n\tFixed = \"fixed\",\n\tFullWidth = \"fullWidth\",\n}\n","import type { FixedObject } from \"gatsby-image\";\nimport ImgixClient from \"@imgix/js-core\";\n\nimport { paramCaseObject } from \"../lib/paramCaseObject\";\nimport { parseArParam } from \"../lib/parseArParam\";\n\nimport { ImageSource, ImgixParams, ImgixClientConfig } from \"../types\";\nimport {\n\tDEFAULT_FIXED_WIDTH,\n\tDEFAULT_IMGIX_PARAMS,\n\tDEFAULT_PLACEHOLDER_IMGIX_PARAMS,\n} from \"../constants\";\n\nexport type FixedArgs = {\n\twidth?: number;\n\theight?: number | null;\n\timgixParams?: ImgixParams;\n\tplaceholderImgixParams?: ImgixParams;\n};\n\nexport type ResolveFluidConfig = {\n\timgixClientConfig?: Partial<ImgixClientConfig>;\n};\n\nexport const resolveFixed = (\n\tsource: ImageSource,\n\toptions: FixedArgs = {},\n\tconfig: ResolveFluidConfig = {},\n): FixedObject => {\n\tconst url = new URL(source.url);\n\tconst filename = decodeURIComponent(url.pathname);\n\tconst client = new ImgixClient({\n\t\tdomain: url.hostname,\n\t\t...config.imgixClientConfig,\n\t});\n\n\tlet aspectRatio = source.width / source.height;\n\tif (typeof options.imgixParams?.ar === \"string\") {\n\t\tconst parsedAr = parseArParam(options.imgixParams.ar);\n\n\t\tif (!Number.isNaN(parsedAr)) {\n\t\t\taspectRatio = parsedAr;\n\t\t}\n\t}\n\n\tlet width = DEFAULT_FIXED_WIDTH;\n\tlet height = Math.round(width / aspectRatio);\n\tif (options.width != null) {\n\t\twidth = options.width;\n\t\tif (options.height != null) {\n\t\t\theight = options.height;\n\t\t} else {\n\t\t\theight = Math.round(width / aspectRatio);\n\t\t}\n\t} else if (options.height != null) {\n\t\theight = options.height;\n\t\tif (options.width != null) {\n\t\t\twidth = options.width;\n\t\t} else {\n\t\t\twidth = Math.round(height * aspectRatio);\n\t\t}\n\t}\n\n\tconst imgixParams: ImgixParams = paramCaseObject({\n\t\t...DEFAULT_IMGIX_PARAMS,\n\t\t...options.imgixParams,\n\t\tw: width,\n\t\th: height,\n\t});\n\n\tconst imgixParamsWebp: ImgixParams = {\n\t\t...imgixParams,\n\t\tfm: \"webp\",\n\t};\n\n\tconst placeholderImgixParams: ImgixParams = paramCaseObject({\n\t\t...DEFAULT_IMGIX_PARAMS,\n\t\t...options.imgixParams,\n\t\t...DEFAULT_PLACEHOLDER_IMGIX_PARAMS,\n\t\t...options.placeholderImgixParams,\n\t});\n\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tbase64: client.buildURL(filename, placeholderImgixParams),\n\t\tsrc: client.buildURL(filename, imgixParams),\n\t\tsrcWebp: client.buildURL(filename, imgixParamsWebp),\n\t\tsrcSet: client.buildSrcSet(filename, imgixParams),\n\t\tsrcSetWebp: client.buildSrcSet(filename, imgixParamsWebp),\n\t};\n};\n","import type { FluidObject } from \"gatsby-image\";\nimport ImgixClient, { SrcSetOptions } from \"@imgix/js-core\";\n\nimport { paramCaseObject } from \"../lib/paramCaseObject\";\nimport { parseArParam } from \"../lib/parseArParam\";\n\nimport { ImageSource, ImgixClientConfig, ImgixParams } from \"../types\";\nimport {\n\tDEFAULT_FLUID_MAX_WIDTH,\n\tDEFAULT_FLUID_SRC_SET_BREAKPOINT_FACTORS,\n\tDEFAULT_IMGIX_PARAMS,\n\tDEFAULT_PLACEHOLDER_IMGIX_PARAMS,\n} from \"../constants\";\n\nexport type FluidArgs = {\n\tmaxWidth?: number;\n\tmaxHeight?: number | null;\n\tsrcSetBreakpoints?: number[];\n\timgixParams?: ImgixParams;\n\tplaceholderImgixParams?: ImgixParams;\n};\n\ntype ResolveFluidConfig = {\n\timgixClientConfig?: Partial<ImgixClientConfig>;\n};\n\nexport const resolveFluid = (\n\tsource: ImageSource,\n\toptions: FluidArgs = {},\n\tconfig: ResolveFluidConfig = {},\n): FluidObject => {\n\tconst url = new URL(source.url);\n\tconst filename = decodeURIComponent(url.pathname);\n\tconst client = new ImgixClient({\n\t\tdomain: url.hostname,\n\t\t...config.imgixClientConfig,\n\t});\n\n\tlet aspectRatio = source.width / source.height;\n\tif (typeof options.imgixParams?.ar === \"string\") {\n\t\tconst parsedAr = parseArParam(options.imgixParams.ar);\n\n\t\tif (!Number.isNaN(parsedAr)) {\n\t\t\taspectRatio = parsedAr;\n\t\t}\n\t} else if (options.maxWidth != null && options.maxHeight != null) {\n\t\taspectRatio = options.maxWidth / options.maxHeight;\n\t}\n\n\tlet maxWidth = DEFAULT_FLUID_MAX_WIDTH;\n\tif (options.maxWidth != null) {\n\t\tmaxWidth = options.maxWidth;\n\t} else if (options.maxHeight != null) {\n\t\tmaxWidth = Math.round(options.maxHeight * aspectRatio);\n\t}\n\n\tconst imgixParams: ImgixParams = paramCaseObject({\n\t\t...DEFAULT_IMGIX_PARAMS,\n\t\t...options.imgixParams,\n\t\tw: maxWidth,\n\t\tar: `${aspectRatio}:1`,\n\t});\n\n\tconst imgixParamsWebp = {\n\t\t...imgixParams,\n\t\tfm: \"webp\",\n\t};\n\n\tconst placeholderImgixParams: ImgixParams = paramCaseObject({\n\t\t...imgixParams,\n\t\t...DEFAULT_PLACEHOLDER_IMGIX_PARAMS,\n\t\t...options.placeholderImgixParams,\n\t});\n\n\tconst srcSetOptions: SrcSetOptions = {\n\t\tmaxWidth,\n\t\twidths:\n\t\t\toptions.srcSetBreakpoints ||\n\t\t\tDEFAULT_FLUID_SRC_SET_BREAKPOINT_FACTORS.map(\n\t\t\t\t(factor) => (options.maxWidth ?? DEFAULT_FLUID_MAX_WIDTH) * factor,\n\t\t\t),\n\t};\n\n\treturn {\n\t\taspectRatio,\n\t\tbase64: client.buildURL(filename, placeholderImgixParams),\n\t\tsrc: client.buildURL(filename, imgixParams),\n\t\tsrcWebp: client.buildURL(filename, imgixParamsWebp),\n\t\tsrcSet: client.buildSrcSet(filename, imgixParams, srcSetOptions),\n\t\tsrcSetWebp: client.buildSrcSet(filename, imgixParamsWebp, srcSetOptions),\n\t\tsizes: \"(min-width: 8192px) 8192px 100vw\",\n\t};\n};\n","import type { IGatsbyImageHelperArgs } from \"gatsby-plugin-image\";\nimport ImgixClient from \"@imgix/js-core\";\n\nimport { DEFAULT_IMGIX_PARAMS } from \"../constants\";\nimport type { ImgixClientConfig, ImgixParams } from \"../types\";\n\n// NOTE: This *server* file can only be imported for types!\nimport type { GatsbyImageDataArgs } from \"../resolvers/resolveGatsbyImageData.server\";\n\nimport { paramCaseObject } from \"./paramCaseObject\";\n\ntype GenerateGatsbyImageDataSourceConig = {\n\timgixClientConfig?: Partial<ImgixClientConfig>;\n};\n\nexport const generateGatsbyImageDataSource = (\n\tconfig: GenerateGatsbyImageDataSourceConig,\n): IGatsbyImageHelperArgs[\"generateImageSource\"] => {\n\treturn (\n\t\tsourceUrl,\n\t\twidth,\n\t\theight,\n\t\tformat,\n\t\t_fit,\n\t\toptions?: GatsbyImageDataArgs,\n\t) => {\n\t\tconst url = new URL(sourceUrl);\n\t\tconst filename = decodeURIComponent(url.pathname);\n\t\tconst client = new ImgixClient({\n\t\t\tdomain: url.hostname,\n\t\t\t...config.imgixClientConfig,\n\t\t});\n\n\t\tconst imgixParams: ImgixParams = paramCaseObject({\n\t\t\t...DEFAULT_IMGIX_PARAMS,\n\t\t\t...options?.imgixParams,\n\t\t\tw: width,\n\t\t\th: height,\n\t\t});\n\n\t\tif (format && format !== \"auto\") {\n\t\t\timgixParams.fm = format;\n\t\t}\n\n\t\treturn {\n\t\t\tsrc: client.buildURL(filename, imgixParams),\n\t\t\twidth,\n\t\t\theight,\n\t\t\tformat,\n\t\t};\n\t};\n};\n","import type { ObjectTypeComposerFieldConfigAsObjectDefinition } from \"graphql-compose\";\n\nimport { GenerateImageSource, ImgixClientConfig, ImgixParams } from \"../types\";\nimport { DEFAULT_FIXED_WIDTH, GraphQLTypeName } from \"../constants\";\nimport { resolveFixed, FixedArgs } from \"../resolvers/resolveFixed\";\n\nexport type BuildFixedFieldConfigConfig<TSource> = {\n\tnamespace: string;\n\tgenerateImageSource: GenerateImageSource<TSource>;\n\tdefaultImgixParams?: ImgixParams;\n\tdefaultPlaceholderImgixParams?: ImgixParams;\n\timgixClientConfig?: Partial<ImgixClientConfig>;\n};\n\nexport const buildFixedFieldConfig = <TSource, TContext>(\n\tconfig: BuildFixedFieldConfigConfig<TSource>,\n): ObjectTypeComposerFieldConfigAsObjectDefinition<\n\tTSource,\n\tTContext,\n\tFixedArgs\n> => {\n\treturn {\n\t\ttype: config.namespace + GraphQLTypeName.FixedObject,\n\t\tdeprecationReason:\n\t\t\t\"`gatsby-image` is replaced by `gatsby-plugin-image`. [See the migration guide](https://www.gatsbyjs.com/docs/reference/release-notes/image-migration-guide/)\",\n\t\t// IMPORTANT: These types must be kept in sync with `FixedArgs`.\n\t\targs: {\n\t\t\twidth: {\n\t\t\t\ttype: \"Int\",\n\t\t\t\tdefaultValue: DEFAULT_FIXED_WIDTH,\n\t\t\t},\n\t\t\theight: {\n\t\t\t\ttype: \"Int\",\n\t\t\t},\n\t\t\timgixParams: {\n\t\t\t\ttype: config.namespace + GraphQLTypeName.ImgixParamsInputObject,\n\t\t\t},\n\t\t\tplaceholderImgixParams: {\n\t\t\t\ttype: config.namespace + GraphQLTypeName.ImgixParamsInputObject,\n\t\t\t},\n\t\t},\n\t\tresolve: async (source, args) => {\n\t\t\tconst imageSource = await config.generateImageSource(source);\n\n\t\t\tif (imageSource !== null) {\n\t\t\t\treturn resolveFixed(\n\t\t\t\t\t{\n\t\t\t\t\t\turl: imageSource.url,\n\t\t\t\t\t\twidth: imageSource.width,\n\t\t\t\t\t\theight: imageSource.height,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t...args,\n\t\t\t\t\t\timgixParams: {\n\t\t\t\t\t\t\t...config.defaultImgixParams,\n\t\t\t\t\t\t\t...args.imgixParams,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tplaceholderImgixParams: {\n\t\t\t\t\t\t\t...config.defaultPlaceholderImgixParams,\n\t\t\t\t\t\t\t...args.placeholderImgixParams,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\timgixClientConfig: config.imgixClientConfig,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t};\n};\n","import type { GatsbyCache } from \"gatsby\";\nimport fetch from \"node-fetch\";\n\ntype FetchBase64ImageConfig = {\n\turl: string;\n\tcache: GatsbyCache;\n};\n\nexport const fetchBase64Image = async (\n\tconfig: FetchBase64ImageConfig,\n): Promise<string> => {\n\tconst cacheKey = `base64___${config.url}`;\n\tconst cacheValue: string | undefined = await config.cache.get(cacheKey);\n\n\tif (cacheValue) {\n\t\treturn cacheValue;\n\t} else {\n\t\tconst res = await fetch(config.url);\n\t\tconst buffer = await res.buffer();\n\t\tconst contentType = res.headers.get(\"content-type\");\n\t\tconst base64 = `data:${contentType};base64,${buffer.toString(\"base64\")}`;\n\n\t\tconfig.cache.set(cacheKey, base64);\n\n\t\treturn base64;\n\t}\n};\n","import type {\n\tNodePluginSchema,\n\tGatsbyCache,\n\tGatsbyGraphQLObjectType,\n} from \"gatsby\";\nimport type { FixedObject } from \"gatsby-image\";\n\nimport { fetchBase64Image } from \"../lib/fetchBase64Image.server\";\n\nimport { GraphQLTypeName } from \"../constants\";\n\nexport type BuildFixedObjectTypeConfig = {\n\tnamespace: string;\n\tschema: NodePluginSchema;\n\tcache: GatsbyCache;\n};\n\nexport const buildFixedObjectType = (\n\tconfig: BuildFixedObjectTypeConfig,\n): GatsbyGraphQLObjectType => {\n\treturn config.schema.buildObjectType({\n\t\tname: config.namespace + GraphQLTypeName.FixedObject,\n\t\tfields: {\n\t\t\tbase64: {\n\t\t\t\ttype: \"String!\",\n\t\t\t\tresolve: async (source: FixedObject | null) => {\n\t\t\t\t\tif (source?.base64 != null) {\n\t\t\t\t\t\treturn await fetchBase64Image({\n\t\t\t\t\t\t\turl: source.base64,\n\t\t\t\t\t\t\tcache: config.cache,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\tsrc: { type: \"String!\" },\n\t\t\tsrcSet: { type: \"String!\" },\n\t\t\tsrcWebp: { type: \"String!\" },\n\t\t\tsrcSetWebp: { type: \"String!\" },\n\t\t\tsizes: { type: \"String!\" },\n\t\t\twidth: { type: \"Int!\" },\n\t\t\theight: { type: \"Int!\" },\n\t\t},\n\t});\n};\n","import type { ObjectTypeComposerFieldConfigAsObjectDefinition } from \"graphql-compose\";\n\nimport { GenerateImageSource, ImgixClientConfig, ImgixParams } from \"../types\";\nimport { DEFAULT_FLUID_MAX_WIDTH, GraphQLTypeName } from \"../constants\";\nimport { resolveFluid, FluidArgs } from \"../resolvers/resolveFluid\";\n\nexport type BuildFluidFieldConfigConfig<TSource> = {\n\tnamespace: string;\n\tgenerateImageSource: GenerateImageSource<TSource>;\n\tdefaultImgixParams?: ImgixParams;\n\tdefaultPlaceholderImgixParams?: ImgixParams;\n\timgixClientConfig?: Partial<ImgixClientConfig>;\n};\n\nexport const buildFluidFieldConfig = <TSource, TContext>(\n\tconfig: BuildFluidFieldConfigConfig<TSource>,\n): ObjectTypeComposerFieldConfigAsObjectDefinition<\n\tTSource,\n\tTContext,\n\tFluidArgs\n> => {\n\treturn {\n\t\ttype: config.namespace + GraphQLTypeName.FluidObject,\n\t\tdeprecationReason:\n\t\t\t\"`gatsby-image` is replaced by `gatsby-plugin-image`. [See the migration guide](https://www.gatsbyjs.com/docs/reference/release-notes/image-migration-guide/)\",\n\t\t// IMPORTANT: These types must be kept in sync with `FluidArgs`.\n\t\targs: {\n\t\t\tmaxWidth: {\n\t\t\t\ttype: \"Int\",\n\t\t\t\tdefaultValue: DEFAULT_FLUID_MAX_WIDTH,\n\t\t\t},\n\t\t\tmaxHeight: {\n\t\t\t\ttype: \"Int\",\n\t\t\t},\n\t\t\tsrcSetBreakpoints: {\n\t\t\t\ttype: \"[Int!]\",\n\t\t\t},\n\t\t\timgixParams: {\n\t\t\t\ttype: config.namespace + GraphQLTypeName.ImgixParamsInputObject,\n\t\t\t},\n\t\t\tplaceholderImgixParams: {\n\t\t\t\ttype: config.namespace + GraphQLTypeName.ImgixParamsInputObject,\n\t\t\t},\n\t\t},\n\t\tresolve: async (source, args) => {\n\t\t\tconst imageSource = await config.generateImageSource(source);\n\n\t\t\tif (imageSource !== null) {\n\t\t\t\treturn resolveFluid(\n\t\t\t\t\t{\n\t\t\t\t\t\turl: imageSource.url,\n\t\t\t\t\t\twidth: imageSource.width,\n\t\t\t\t\t\theight: imageSource.height,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t...args,\n\t\t\t\t\t\timgixParams: {\n\t\t\t\t\t\t\t...config.defaultImgixParams,\n\t\t\t\t\t\t\t...args.imgixParams,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tplaceholderImgixParams: {\n\t\t\t\t\t\t\t...config.defaultPlaceholderImgixParams,\n\t\t\t\t\t\t\t...args.placeholderImgixParams,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\timgixClientConfig: config.imgixClientConfig,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t};\n};\n","import type {\n\tNodePluginSchema,\n\tGatsbyCache,\n\tGatsbyGraphQLObjectType,\n} from \"gatsby\";\nimport type { FluidObject } from \"gatsby-image\";\n\nimport { fetchBase64Image } from \"../lib/fetchBase64Image.server\";\n\nimport { GraphQLTypeName } from \"../constants\";\n\nexport type BuildFluidObjectTypeConfig = {\n\tnamespace: string;\n\tschema: NodePluginSchema;\n\tcache: GatsbyCache;\n};\n\nexport const buildFluidObjectType = (\n\tconfig: BuildFluidObjectTypeConfig,\n): GatsbyGraphQLObjectType => {\n\treturn config.schema.buildObjectType({\n\t\tname: config.namespace + GraphQLTypeName.FluidObject,\n\t\tfields: {\n\t\t\tbase64: {\n\t\t\t\ttype: \"String!\",\n\t\t\t\tresolve: async (source: FluidObject | null) => {\n\t\t\t\t\tif (source?.base64 != null) {\n\t\t\t\t\t\treturn await fetchBase64Image({\n\t\t\t\t\t\t\turl: source.base64,\n\t\t\t\t\t\t\tcache: config.cache,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\tsrc: { type: \"String!\" },\n\t\t\tsrcSet: { type: \"String!\" },\n\t\t\tsrcWebp: { type: \"String!\" },\n\t\t\tsrcSetWebp: { type: \"String!\" },\n\t\t\tsizes: { type: \"String!\" },\n\t\t\taspectRatio: { type: \"Float!\" },\n\t\t},\n\t});\n};\n","import type { NodePluginSchema, GatsbyGraphQLEnumType } from \"gatsby\";\n\nimport { GatsbyImageDataPlaceholderKind, GraphQLTypeName } from \"../constants\";\n\nexport type BuildGatsbyImageDataPlaceholderEnumConfig = {\n\tnamespace: string;\n\tschema: NodePluginSchema;\n};\n\nexport const buildGatsbyImageDataPlaceholderEnum = (\n\tconfig: BuildGatsbyImageDataPlaceholderEnumConfig,\n): GatsbyGraphQLEnumType => {\n\treturn config.schema.buildEnumType({\n\t\tname: config.namespace + GraphQLTypeName.GatsbyImageDataPlaceholderEnum,\n\t\tvalues: {\n\t\t\tBLURRED: {\n\t\t\t\tvalue: GatsbyImageDataPlaceholderKind.Blurred,\n\t\t\t},\n\t\t\tDOMINANT_COLOR: {\n\t\t\t\tvalue: GatsbyImageDataPlaceholderKind.DominantColor,\n\t\t\t},\n\t\t\tNONE: {\n\t\t\t\tvalue: GatsbyImageDataPlaceholderKind.None,\n\t\t\t},\n\t\t},\n\t});\n};\n","import type { GatsbyCache } from \"gatsby\";\nimport {\n\tIGatsbyImageData,\n\tIGatsbyImageHelperArgs,\n\tgenerateImageData,\n\tgetLowResolutionImageURL,\n} from \"gatsby-plugin-image\";\nimport ImgixClient from \"@imgix/js-core\";\nimport fetch from \"node-fetch\";\n\nimport { fetchBase64Image } from \"../lib/fetchBase64Image.server\";\nimport { generateGatsbyImageDataSource } from \"../lib/generateGatsbyImageDataSource\";\nimport { paramCaseObject } from \"../lib/paramCaseObject\";\n\nimport { name as packageName } from \"../../package.json\";\n\nimport {\n\tImageSource,\n\tImgixParams,\n\tImgixPalleteLike,\n\tImgixClientConfig,\n} from \"../types\";\nimport {\n\tDEFAULT_IMGIX_PARAMS,\n\tGatsbyImageDataLayoutKind,\n\tGatsbyImageDataPlaceholderKind,\n} from \"../constants\";\n\nexport type GatsbyImageDataArgs = {\n\tplaceholder?: GatsbyImageDataPlaceholderKind;\n\timgixParams?: ImgixParams;\n\tplaceholderImgixParams?: ImgixParams;\n\tlayout?: GatsbyImageDataLayoutKind;\n};\n\ntype ResolveGatsbyImageDataConfig = {\n\tcache: GatsbyCache;\n\tpluginName?: string;\n\timgixClientConfig?: Partial<ImgixClientConfig>;\n};\n\nexport const resolveGatsbyImageData = async (\n\timage: ImageSource,\n\toptions: GatsbyImageDataArgs = {},\n\tconfig: ResolveGatsbyImageDataConfig,\n): Promise<IGatsbyImageData | null> => {\n\tconst imageDataArgs: IGatsbyImageHelperArgs = {\n\t\tpluginName: config.pluginName || packageName,\n\t\tsourceMetadata: {\n\t\t\twidth: image.width,\n\t\t\theight: image.height,\n\t\t\tformat: \"auto\",\n\t\t},\n\t\tfilename: image.url,\n\t\tgenerateImageSource: generateGatsbyImageDataSource({\n\t\t\timgixClientConfig: config.imgixClientConfig,\n\t\t}),\n\t\toptions,\n\t\tlayout: options.layout,\n\t};\n\n\tif (options.placeholder === GatsbyImageDataPlaceholderKind.Blurred) {\n\t\timageDataArgs.placeholderURL = await fetchBase64Image({\n\t\t\turl: getLowResolutionImageURL(imageDataArgs),\n\t\t\tcache: config.cache,\n\t\t});\n\t}\n\n\tif (options.placeholder === GatsbyImageDataPlaceholderKind.DominantColor) {\n\t\tconst cacheKey = `${GatsbyImageDataPlaceholderKind.DominantColor}___${image.url}`;\n\t\tconst cacheValue: string | undefined = await config.cache.get(cacheKey);\n\n\t\tif (cacheValue) {\n\t\t\timageDataArgs.backgroundColor = cacheValue;\n\t\t} else {\n\t\t\tconst url = new URL(image.url);\n\t\t\tconst filename = decodeURIComponent(url.pathname);\n\t\t\tconst client = new ImgixClient({\n\t\t\t\tdomain: url.hostname,\n\t\t\t\t...config.imgixClientConfig,\n\t\t\t});\n\n\t\t\tconst palleteUrl = client.buildURL(\n\t\t\t\tfilename,\n\t\t\t\tparamCaseObject({\n\t\t\t\t\t...DEFAULT_IMGIX_PARAMS,\n\t\t\t\t\t...options.imgixParams,\n\t\t\t\t\tpalette: \"json\",\n\t\t\t\t}),\n\t\t\t);\n\t\t\tconst res = await fetch(palleteUrl);\n\t\t\tconst json = (await res.json()) as ImgixPalleteLike;\n\n\t\t\tconst dominantColor = json.dominant_colors.vibrant.hex;\n\n\t\t\tconfig.cache.set(cacheKey, dominantColor);\n\n\t\t\timageDataArgs.backgroundColor = dominantColor;\n\t\t}\n\t}\n\n\treturn generateImageData(imageDataArgs);\n};\n","import type { GatsbyCache } from \"gatsby\";\nimport type { ObjectTypeComposerFieldConfigAsObjectDefinition } from \"graphql-compose\";\nimport { getGatsbyImageFieldConfig } from \"gatsby-plugin-image/graphql-utils\";\n\nimport { GenerateImageSource, ImgixClientConfig, ImgixParams } from \"../types\";\nimport { GraphQLTypeName, GatsbyImageDataPlaceholderKind } from \"../constants\";\nimport {\n\tGatsbyImageDataArgs,\n\tresolveGatsbyImageData,\n} from \"../resolvers/resolveGatsbyImageData.server\";\n\nexport type BuildGatsbyImageDataFieldConfigConfig<TSource> = {\n\tnamespace: string;\n\tpluginName: string;\n\tgenerateImageSource: GenerateImageSource<TSource>;\n\tcache: GatsbyCache;\n\tdefaultImgixParams?: ImgixParams;\n\tdefaultPlaceholderImgixParams?: ImgixParams;\n\timgixClientConfig?: Partial<ImgixClientConfig>;\n};\n\nexport const buildGatsbyImageDataFieldConfig = <TSource, TContext>(\n\tconfig: BuildGatsbyImageDataFieldConfigConfig<TSource>,\n): ObjectTypeComposerFieldConfigAsObjectDefinition<\n\tTSource,\n\tTContext,\n\tGatsbyImageDataArgs\n> => {\n\tconst fieldConfig = getGatsbyImageFieldConfig<\n\t\tTSource,\n\t\tTContext,\n\t\tGatsbyImageDataArgs\n\t>(async (source, args) => {\n\t\tconst imageSource = await config.generateImageSource(source);\n\n\t\tif (imageSource !== null) {\n\t\t\treturn resolveGatsbyImageData(\n\t\t\t\t{\n\t\t\t\t\turl: imageSource.url,\n\t\t\t\t\twidth: imageSource.width,\n\t\t\t\t\theight: imageSource.height,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t...args,\n\t\t\t\t\timgixParams: {\n\t\t\t\t\t\t...config.defaultImgixParams,\n\t\t\t\t\t\t...args.imgixParams,\n\t\t\t\t\t},\n\t\t\t\t\tplaceholderImgixParams: {\n\t\t\t\t\t\t...config.defaultPlaceholderImgixParams,\n\t\t\t\t\t\t...args.placeholderImgixParams,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcache: config.cache,\n\t\t\t\t\tpluginName: config.pluginName,\n\t\t\t\t\timgixClientConfig: config.imgixClientConfig,\n\t\t\t\t},\n\t\t\t);\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}) as ObjectTypeComposerFieldConfigAsObjectDefinition<\n\t\tTSource,\n\t\tTContext,\n\t\tGatsbyImageDataArgs\n\t>;\n\n\t// We need to set this separately since the above type case raises the field\n\t// config to a graphql-compose definition. This allows us to reference types\n\t// by name, which is needed for the arguments.\n\tfieldConfig.args = {\n\t\t...(fieldConfig.args as NonNullable<typeof fieldConfig.args>),\n\t\tplaceholder: {\n\t\t\ttype: config.namespace + GraphQLTypeName.GatsbyImageDataPlaceholderEnum,\n\t\t\tdefaultValue: GatsbyImageDataPlaceholderKind.DominantColor,\n\t\t},\n\t\timgixParams: {\n\t\t\ttype: config.namespace + GraphQLTypeName.ImgixParamsInputObject,\n\t\t},\n\t\tplaceholderImgixParams: {\n\t\t\ttype: config.namespace + GraphQLTypeName.ImgixParamsInputObject,\n\t\t},\n\t};\n\n\t// `getGatsbyImageFieldConfig` returns a \"JSON!\" type. This is undesired when\n\t// the source does not contain a value (i.e. null). Here, we are manually\n\t// overriding the type to be nullable.\n\tfieldConfig.type = \"JSON\";\n\n\treturn fieldConfig;\n};\n","import type { ObjectTypeComposerFieldConfigAsObjectDefinition } from \"graphql-compose\";\nimport ImgixClient from \"@imgix/js-core\";\n\nimport { paramCaseObject } from \"../lib/paramCaseObject\";\n\nimport { GenerateImageSource, ImgixClientConfig, ImgixParams } from \"../types\";\nimport { DEFAULT_IMGIX_PARAMS, GraphQLTypeName } from \"../constants\";\n\nexport type UrlArgs = {\n\timgixParams?: ImgixParams;\n};\n\nexport type BuildUrlFieldConfigConfig<TSource> = {\n\tnamespace: string;\n\tgenerateImageSource: GenerateImageSource<TSource>;\n\tdefaultImgixParams?: ImgixParams;\n\timgixClientConfig?: Partial<ImgixClientConfig>;\n};\n\nexport const buildUrlFieldConfig = <TSource, TContext>(\n\tconfig: BuildUrlFieldConfigConfig<TSource>,\n): ObjectTypeComposerFieldConfigAsObjectDefinition<\n\tTSource,\n\tTContext,\n\tUrlArgs\n> => {\n\treturn {\n\t\ttype: \"String\",\n\t\t// IMPORTANT: These types must be kept in sync with `ImgixUrlArgs`.\n\t\targs: {\n\t\t\timgixParams: {\n\t\t\t\ttype: config.namespace + GraphQLTypeName.ImgixParamsInputObject,\n\t\t\t},\n\t\t},\n\t\tresolve: async (source, args) => {\n\t\t\tconst imageSource = await config.generateImageSource(source);\n\n\t\t\tif (imageSource !== null) {\n\t\t\t\tconst url = new URL(imageSource.url);\n\t\t\t\tconst client = new ImgixClient({\n\t\t\t\t\tdomain: url.hostname,\n\t\t\t\t\t...config.imgixClientConfig,\n\t\t\t\t});\n\n\t\t\t\treturn client.buildURL(\n\t\t\t\t\tdecodeURIComponent(url.pathname),\n\t\t\t\t\tparamCaseObject({\n\t\t\t\t\t\t...DEFAULT_IMGIX_PARAMS,\n\t\t\t\t\t\t...config.defaultImgixParams,\n\t\t\t\t\t\t...args.imgixParams,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t};\n};\n","import type { NodePluginSchema, GatsbyGraphQLInputObjectType } from \"gatsby\";\nimport { parameters as imgixParamSpecs } from \"imgix-url-params/dist/parameters.json\";\nimport { camelCase } from \"camel-case\";\n\nimport { GraphQLTypeName } from \"../constants\";\n\nexport type BuildImgixParamsInputObjectTypeConfig = {\n\tnamespace: string;\n\tschema: NodePluginSchema;\n};\n\nexport const buildImgixParamsInputObjectType = (\n\tconfig: BuildImgixParamsInputObjectTypeConfig,\n): GatsbyGraphQLInputObjectType => {\n\tconst fields: GatsbyGraphQLInputObjectType[\"config\"][\"fields\"] = {};\n\n\tfor (const paramKey in imgixParamSpecs) {\n\t\tconst paramSpec = imgixParamSpecs[paramKey as keyof typeof imgixParamSpecs];\n\n\t\tconst normalizedName = camelCase(paramKey);\n\n\t\tconst expects = paramSpec.expects;\n\t\tconst expectsTypes = Array.from(\n\t\t\tnew Set(expects.map((expect) => expect.type)),\n\t\t);\n\n\t\tconst type = expectsTypes.every(\n\t\t\t(type) => type === \"integer\" || type === \"unit_scalar\",\n\t\t)\n\t\t\t? \"Int\"\n\t\t\t: expectsTypes.every(\n\t\t\t\t\t(type) =>\n\t\t\t\t\t\ttype === \"integer\" || type === \"unit_scalar\" || type === \"number\",\n\t\t\t  )\n\t\t\t? \"Float\"\n\t\t\t: expectsTypes.every((type) => type === \"boolean\")\n\t\t\t? \"Boolean\"\n\t\t\t: \"String\";\n\n\t\tconst fieldDefinition: typeof fields[string] = {\n\t\t\ttype,\n\t\t\tdescription:\n\t\t\t\tparamSpec.short_description +\n\t\t\t\t// Ensure the description ends with a period.\n\t\t\t\t(paramSpec.short_description.slice(-1) === \".\" ? \"\" : \".\"),\n\t\t};\n\n\t\t// Add the default value as part of the description. Setting it as a\n\t\t// GraphQL default value will automatically assign it in the final URL.\n\t\t// Doing so would result in a huge number of unwanted params.\n\t\tif (\"default\" in paramSpec) {\n\t\t\tfieldDefinition.description =\n\t\t\t\tfieldDefinition.description + ` Default: \\`${paramSpec.default}\\`.`;\n\t\t}\n\n\t\t// Add Imgix documentation URL as part of the description.\n\t\tif (\"url\" in paramSpec) {\n\t\t\tfieldDefinition.description =\n\t\t\t\tfieldDefinition.description + ` [See docs](${paramSpec.url}).`;\n\t\t}\n\n\t\tfields[normalizedName] = fieldDefinition;\n\n\t\t// Create aliased fields.\n\t\tif (\"aliases\" in paramSpec) {\n\t\t\tfor (const alias of paramSpec.aliases) {\n\t\t\t\tfields[camelCase(alias)] = {\n\t\t\t\t\t...fieldDefinition,\n\t\t\t\t\tdescription: `Alias for \\`${normalizedName}\\`.`,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\treturn config.schema.buildInputObjectType({\n\t\tname: config.namespace + GraphQLTypeName.ImgixParamsInputObject,\n\t\tfields,\n\t});\n};\n","import type { GatsbyCache } from \"gatsby\";\nimport fetch from \"node-fetch\";\n\nimport { ImageSourceDimensions, ImgixJSONDimensionsLike } from \"../types\";\n\ntype FetchImageDimensionsConfig = {\n\turl: string;\n\tcache: GatsbyCache;\n};\n\nexport const fetchImageDimensions = async (\n\tconfig: FetchImageDimensionsConfig,\n): Promise<ImageSourceDimensions> => {\n\tconst cacheKey = `dimensions___${config.url}`;\n\tconst cacheValue: ImageSourceDimensions | undefined = await config.cache.get(\n\t\tcacheKey,\n\t);\n\n\tif (cacheValue) {\n\t\treturn cacheValue;\n\t} else {\n\t\tconst url = new URL(config.url);\n\t\turl.searchParams.set(\"fm\", \"json\");\n\n\t\tconst res = await fetch(url);\n\t\tconst json = (await res.json()) as ImgixJSONDimensionsLike;\n\t\tconst dimensions = {\n\t\t\twidth: json.PixelWidth,\n\t\t\theight: json.PixelHeight,\n\t\t};\n\n\t\tconfig.cache.set(cacheKey, dimensions);\n\n\t\treturn dimensions;\n\t}\n};\n","import { GatsbyCache } from \"gatsby\";\n\nimport { ImageSource } from \"../types\";\n\nimport { fetchImageDimensions } from \"./fetchImageDimensions.server\";\n\ntype GenerateImageSourceFromUrlConfig = {\n\tcache: GatsbyCache;\n};\n\nexport const generateImageSourceFromUrl = async (\n\turl: string,\n\tconfig: GenerateImageSourceFromUrlConfig,\n): Promise<ImageSource | null> => {\n\tconst dimensions = await fetchImageDimensions({\n\t\turl,\n\t\tcache: config.cache,\n\t});\n\n\treturn {\n\t\turl,\n\t\twidth: dimensions.width,\n\t\theight: dimensions.height,\n\t};\n};\n","export const NAMESPACE = \"Imgix\";\n\nexport enum SourceType {\n\tAmazonS3 = \"s3\",\n\tGoogleCloudStorage = \"gcs\",\n\tMicrosoftAzure = \"azure\",\n\tWebFolder = \"webFolder\",\n\tWebProxy = \"webProxy\",\n}\n\n/**\n * GraphQL type names used for GraphQL type and field builders.\n */\nexport enum GraphQLTypeName {\n\t/**\n\t * Collection of Imgix image resolvers.\n\t */\n\tImage = \"Image\",\n}\n","import type {\n\tNodePluginSchema,\n\tGatsbyCache,\n\tGatsbyGraphQLObjectType,\n} from \"gatsby\";\n\nimport { name as packageName } from \"../../package.json\";\n\nimport { ImgixParams, ImgixClientConfig } from \"../index\";\nimport {\n\tbuildUrlFieldConfig,\n\tbuildFixedFieldConfig,\n\tbuildFluidFieldConfig,\n\tbuildGatsbyImageDataFieldConfig,\n} from \"../index.server\";\n\nimport { GraphQLTypeName, NAMESPACE } from \"./constants\";\n\ntype BuildImgixImageObjectTypeConfig = {\n\tnamespace: string;\n\tschema: NodePluginSchema;\n\tcache: GatsbyCache;\n\tdefaultImgixParams?: ImgixParams;\n\tdefaultPlaceholderImgixParams?: ImgixParams;\n\timgixClientConfig?: Partial<ImgixClientConfig>;\n};\n\nexport const buildImgixImageObjectType = (\n\tconfig: BuildImgixImageObjectTypeConfig,\n): GatsbyGraphQLObjectType => {\n\treturn config.schema.buildObjectType({\n\t\tname: config.namespace + GraphQLTypeName.Image,\n\t\tfields: {\n\t\t\t// @ts-expect-error - complex type resolution issue\n\t\t\turl: buildUrlFieldConfig({\n\t\t\t\tnamespace: NAMESPACE,\n\t\t\t\tgenerateImageSource: (source) => source,\n\t\t\t\timgixClientConfig: config.imgixClientConfig,\n\t\t\t}),\n\t\t\t// @ts-expect-error - complex type resolution issue\n\t\t\tfixed: buildFixedFieldConfig({\n\t\t\t\tnamespace: NAMESPACE,\n\t\t\t\tgenerateImageSource: (source) => source,\n\t\t\t\tdefaultImgixParams: config.defaultImgixParams,\n\t\t\t\tdefaultPlaceholderImgixParams: config.defaultImgixParams,\n\t\t\t\timgixClientConfig: config.imgixClientConfig,\n\t\t\t}),\n\t\t\t// @ts-expect-error - complex type resolution issue\n\t\t\tfluid: buildFluidFieldConfig({\n\t\t\t\tnamespace: NAMESPACE,\n\t\t\t\tgenerateImageSource: (source) => source,\n\t\t\t\tdefaultImgixParams: config.defaultImgixParams,\n\t\t\t\tdefaultPlaceholderImgixParams: config.defaultImgixParams,\n\t\t\t\timgixClientConfig: config.imgixClientConfig,\n\t\t\t}),\n\t\t\t// @ts-expect-error - complex type resolution issue\n\t\t\tgatsbyImageData: buildGatsbyImageDataFieldConfig({\n\t\t\t\tnamespace: NAMESPACE,\n\t\t\t\tcache: config.cache,\n\t\t\t\tpluginName: packageName,\n\t\t\t\tgenerateImageSource: (source) => source,\n\t\t\t\tdefaultImgixParams: config.defaultImgixParams,\n\t\t\t\tdefaultPlaceholderImgixParams: config.defaultImgixParams,\n\t\t\t\timgixClientConfig: config.imgixClientConfig,\n\t\t\t}),\n\t\t},\n\t});\n};\n","import type {\n\tNodePluginSchema,\n\tGatsbyCache,\n\tGatsbyGraphQLObjectType,\n} from \"gatsby\";\n\nimport { ImageSource } from \"../index\";\nimport { generateImageSourceFromUrl } from \"../index.server\";\n\nimport { GraphQLTypeName } from \"./constants\";\n\ntype ImgixImageArgs = {\n\turl: string | null;\n\twidth: number | null;\n\theight: number | null;\n};\n\ntype BuildQueryObjectTypeConfig = {\n\tnamespace: string;\n\tschema: NodePluginSchema;\n\tcache: GatsbyCache;\n};\n\nexport const buildQueryObjectType = (\n\tconfig: BuildQueryObjectTypeConfig,\n): GatsbyGraphQLObjectType => {\n\treturn config.schema.buildObjectType({\n\t\tname: \"Query\",\n\t\tfields: {\n\t\t\timgixImage: {\n\t\t\t\ttype: config.namespace + GraphQLTypeName.Image,\n\t\t\t\targs: {\n\t\t\t\t\turl: { type: \"String\" },\n\t\t\t\t\twidth: { type: \"Int\" },\n\t\t\t\t\theight: { type: \"Int\" },\n\t\t\t\t},\n\t\t\t\tresolve: async (\n\t\t\t\t\t_source: void,\n\t\t\t\t\targs: ImgixImageArgs,\n\t\t\t\t): Promise<ImageSource | null> => {\n\t\t\t\t\tconst url = args.url;\n\n\t\t\t\t\tif (url != null) {\n\t\t\t\t\t\tif (args.width != null && args.height != null) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t\twidth: args.width,\n\t\t\t\t\t\t\t\theight: args.height,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn await generateImageSourceFromUrl(url, {\n\t\t\t\t\t\t\t\tcache: config.cache,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t});\n};\n","import { GatsbyNode } from \"gatsby\";\n\nimport {\n\tGenerateImageSource,\n\tImgixClientConfig,\n\tbuildFixedObjectType,\n\tbuildFluidObjectType,\n\tbuildGatsbyImageDataPlaceholderEnum,\n\tbuildImgixParamsInputObjectType,\n\tgenerateImageSourceFromUrl,\n} from \"../index.server\";\n\nimport { NAMESPACE } from \"./constants\";\nimport { GenerateImageSources, PluginOptions } from \"./types\";\nimport { buildImgixImageObjectType } from \"./buildImgixImageObjectType\";\nimport { buildQueryObjectType } from \"./buildQueryObjectType\";\n\nexport const createSchemaCustomization: NonNullable<\n\tGatsbyNode[\"createSchemaCustomization\"]\n> = (args, options: PluginOptions) => {\n\tconst { actions, cache, schema } = args;\n\tconst { createTypes } = actions;\n\n\tconst imgixClientConfig: Partial<ImgixClientConfig> = {\n\t\tdomain: options.domain,\n\t\tsecureURLToken: options.secureURLToken,\n\t\tincludeLibraryParam: !options.disableIxlibParam,\n\t};\n\n\tconst imgixImageObjectType = buildImgixImageObjectType({\n\t\tnamespace: NAMESPACE,\n\t\tcache,\n\t\tschema,\n\t\tdefaultImgixParams: options.defaultImgixParams,\n\t\tdefaultPlaceholderImgixParams: options.defaultImgixParams,\n\t\timgixClientConfig,\n\t});\n\n\tconst baseImgixTypes = [\n\t\tbuildFixedObjectType({\n\t\t\tnamespace: NAMESPACE,\n\t\t\tcache,\n\t\t\tschema,\n\t\t}),\n\t\tbuildFluidObjectType({\n\t\t\tnamespace: NAMESPACE,\n\t\t\tcache,\n\t\t\tschema,\n\t\t}),\n\t\tbuildImgixParamsInputObjectType({\n\t\t\tnamespace: NAMESPACE,\n\t\t\tschema,\n\t\t}),\n\t\tbuildGatsbyImageDataPlaceholderEnum({\n\t\t\tnamespace: NAMESPACE,\n\t\t\tschema,\n\t\t}),\n\t\tbuildQueryObjectType({\n\t\t\tnamespace: NAMESPACE,\n\t\t\tcache,\n\t\t\tschema,\n\t\t}),\n\t\timgixImageObjectType,\n\t];\n\n\tconst userImgixImageFieldTypes = options.fields.map((fieldConfig) => {\n\t\tlet isList = false;\n\t\tlet sourceGenerator:\n\t\t\t| GenerateImageSource<unknown>\n\t\t\t| GenerateImageSources<unknown>;\n\n\t\tif (\"generateImageSource\" in fieldConfig) {\n\t\t\tsourceGenerator = fieldConfig.generateImageSource;\n\t\t} else if (\"generateImageSources\" in fieldConfig) {\n\t\t\tisList = true;\n\t\t\tsourceGenerator = fieldConfig.generateImageSources;\n\t\t} else if (\"getURL\" in fieldConfig) {\n\t\t\tsourceGenerator = async (source) => {\n\t\t\t\tconst url = await fieldConfig.getURL(source);\n\n\t\t\t\tif (url !== null) {\n\t\t\t\t\treturn await generateImageSourceFromUrl(url, { cache });\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t};\n\t\t} else if (\"getURLs\" in fieldConfig) {\n\t\t\tisList = true;\n\t\t\tsourceGenerator = async (source) => {\n\t\t\t\tconst urls = await fieldConfig.getURLs(source);\n\n\t\t\t\treturn await Promise.all(\n\t\t\t\t\turls.map(async (url) => {\n\t\t\t\t\t\tif (url !== null) {\n\t\t\t\t\t\t\treturn await generateImageSourceFromUrl(url, { cache });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\t\t}\n\n\t\treturn schema.buildObjectType({\n\t\t\tname: fieldConfig.nodeType,\n\t\t\tfields: {\n\t\t\t\t[fieldConfig.fieldName]: {\n\t\t\t\t\ttype: isList\n\t\t\t\t\t\t? `[${imgixImageObjectType.config.name}]!`\n\t\t\t\t\t\t: imgixImageObjectType.config.name,\n\t\t\t\t\tresolve: async (source: unknown) => {\n\t\t\t\t\t\treturn await sourceGenerator(source);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t});\n\n\t// Calling `createTypes` one type at a time makes testing easier.\n\tfor (const type of [...baseImgixTypes, ...userImgixImageFieldTypes]) {\n\t\tcreateTypes(type);\n\t}\n};\n","import { GatsbyNode } from \"gatsby\";\n\nimport { SourceType } from \"./constants\";\n\nexport const pluginOptionsSchema: NonNullable<\n\tGatsbyNode[\"pluginOptionsSchema\"]\n> = (args) => {\n\tconst { Joi } = args;\n\n\tconst sourceTypes = Object.values(SourceType).filter(\n\t\t(x) => typeof x === \"string\",\n\t);\n\n\treturn Joi.object({\n\t\tsourceType: Joi.string().allow(...sourceTypes),\n\t\tdomain: Joi.string().when(\"sourceType\", {\n\t\t\tis: SourceType.WebProxy,\n\t\t\tthen: Joi.string().required().messages({\n\t\t\t\t\"any.required\":\n\t\t\t\t\t'\"domain\" is required to route images through Imgix when using a Web Proxy source.',\n\t\t\t}),\n\t\t}),\n\t\tsecureURLToken: Joi.string().when(\"sourceType\", {\n\t\t\tis: SourceType.WebProxy,\n\t\t\tthen: Joi.string().required().messages({\n\t\t\t\t\"any.required\":\n\t\t\t\t\t'\"secureURLToken\" is required to sign Imgix URLs when using a Web Proxy source.',\n\t\t\t}),\n\t\t}),\n\t\tdefaultImgixParams: Joi.object()\n\t\t\t.pattern(Joi.string(), Joi.string())\n\t\t\t.default({}),\n\t\tfields: Joi.array()\n\t\t\t.items(\n\t\t\t\tJoi.object({\n\t\t\t\t\tnodeType: Joi.string().required(),\n\t\t\t\t\tfieldName: Joi.string().required(),\n\t\t\t\t\tgenerateImageSource: Joi.function(),\n\t\t\t\t\tgenerateImageSources: Joi.function(),\n\t\t\t\t\tgetURL: Joi.function(),\n\t\t\t\t\tgetURLs: Joi.function(),\n\t\t\t\t})\n\t\t\t\t\t.xor(\n\t\t\t\t\t\t\"generateImageSource\",\n\t\t\t\t\t\t\"generateImageSources\",\n\t\t\t\t\t\t\"getURL\",\n\t\t\t\t\t\t\"getURLs\",\n\t\t\t\t\t)\n\t\t\t\t\t.messages({\n\t\t\t\t\t\t\"object.xor\":\n\t\t\t\t\t\t\t\"Fields must only contain one of the following: getURL, getURLs, generateImageSource, generateImageSources\",\n\t\t\t\t\t}),\n\t\t\t)\n\t\t\t.default([]),\n\t\tdisableIxlibParam: Joi.boolean().default(false),\n\t});\n};\n"],"names":["paramCase","GraphQLTypeName","ImgixClient","fetch","packageName","getLowResolutionImageURL","generateImageData","getGatsbyImageFieldConfig","imgixParamSpecs","camelCase"],"mappings":"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"}