gatsby-source-prismic
Version:
Gatsby source plugin for building websites using Prismic as a data source
1 lines • 25.8 kB
Source Map (JSON)
{"version":3,"file":"fieldModelToGraphQLConfig.cjs","sources":["../../../src/lib/fieldModelToGraphQLConfig.ts"],"sourcesContent":["import {\n\tContentRelationshipField,\n\tCustomTypeModelField,\n\tCustomTypeModelFieldType,\n\tCustomTypeModelLinkSelectType,\n\tCustomTypeModelSliceType,\n\tGeoPointField,\n\tImageField,\n\tKeyTextField,\n\tLinkField,\n\tLinkToMediaField,\n\tSharedSlice,\n\tSharedSliceModel,\n\tSlice,\n\tisFilled,\n} from \"@prismicio/client\";\nimport type { NodePluginArgs } from \"gatsby\";\nimport type { ObjectTypeComposerFieldConfigAsObjectDefinition } from \"graphql-compose\";\n\nimport type { PluginOptions } from \"../types\";\n\nimport { buildImageObjectType } from \"./buildImageObjectType\";\nimport { defaultTransformFieldName } from \"./defaultTransformFieldName\";\nimport { fieldModelsRecordToGraphQLType } from \"./fieldModelsRecordToGraphQLType\";\nimport { fmtLog } from \"./fmtLog\";\nimport { pascalCase } from \"./pascalCase\";\n\nexport type FieldModelToGraphQLConfigArgs = {\n\tpath: string[];\n\tmodel: CustomTypeModelField;\n\tsharedSliceModels: SharedSliceModel[];\n\tgatsbyNodeArgs: NodePluginArgs;\n\tpluginOptions: PluginOptions;\n};\n\nexport const fieldModelToGraphQLConfig = (\n\targs: FieldModelToGraphQLConfigArgs,\n):\n\t| ObjectTypeComposerFieldConfigAsObjectDefinition<\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tany,\n\t\t\tRecord<string, unknown>\n\t >\n\t| undefined => {\n\tswitch (args.model.type) {\n\t\tcase CustomTypeModelFieldType.Boolean: {\n\t\t\treturn {\n\t\t\t\ttype: \"Boolean\",\n\t\t\t\tdescription: \"A Boolean field.\",\n\t\t\t};\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Color: {\n\t\t\treturn {\n\t\t\t\ttype: \"String\",\n\t\t\t\tdescription: \"A Color field.\",\n\t\t\t};\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Date: {\n\t\t\treturn {\n\t\t\t\ttype: \"Date\",\n\t\t\t\tdescription: \"A Date field.\",\n\t\t\t\textensions: { dateformat: {} },\n\t\t\t};\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Embed: {\n\t\t\treturn {\n\t\t\t\ttype: pascalCase(\n\t\t\t\t\t\"Prismic\",\n\t\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\t\"EmbedField\",\n\t\t\t\t),\n\t\t\t\tdescription: \"An Embed field.\",\n\t\t\t\textensions: { link: {} },\n\t\t\t};\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.GeoPoint: {\n\t\t\treturn {\n\t\t\t\ttype: \"PrismicGeoPointField\",\n\t\t\t\tdescription: \"A GeoPoint field.\",\n\t\t\t\tresolve: (\n\t\t\t\t\tsource,\n\t\t\t\t\t_args,\n\t\t\t\t\t_context,\n\t\t\t\t\tinfo,\n\t\t\t\t): GeoPointField<\"filled\"> | null => {\n\t\t\t\t\tconst field = source[info.fieldName] as GeoPointField;\n\n\t\t\t\t\tif (isFilled.geoPoint(field)) {\n\t\t\t\t\t\treturn field;\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\n\t\tcase CustomTypeModelFieldType.Group: {\n\t\t\tconst type = fieldModelsRecordToGraphQLType({\n\t\t\t\t...args,\n\t\t\t\tmodels: args.model.config?.fields || {},\n\t\t\t});\n\t\t\ttype.config.name = pascalCase(\n\t\t\t\t\"Prismic\",\n\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\targs.path.join(\" \"),\n\t\t\t\t\"Item\",\n\t\t\t);\n\t\t\ttype.config.description = \"An item for a Group field.\";\n\n\t\t\targs.gatsbyNodeArgs.actions.createTypes(type);\n\n\t\t\treturn {\n\t\t\t\ttype: `[${type.config.name}!]!`,\n\t\t\t\tdescription: \"A Group field.\",\n\t\t\t};\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Image: {\n\t\t\tif (\n\t\t\t\targs.model.config?.thumbnails &&\n\t\t\t\targs.model.config.thumbnails.length > 0\n\t\t\t) {\n\t\t\t\tconst type = buildImageObjectType({\n\t\t\t\t\tschema: args.gatsbyNodeArgs.schema,\n\t\t\t\t\tcache: args.gatsbyNodeArgs.cache,\n\t\t\t\t\tpluginOptions: args.pluginOptions,\n\t\t\t\t});\n\t\t\t\ttype.config.name = pascalCase(\n\t\t\t\t\t\"Prismic\",\n\t\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\targs.path.join(\" \"),\n\t\t\t\t\t\"ImageField\",\n\t\t\t\t);\n\n\t\t\t\tconst thumbnailsType = args.gatsbyNodeArgs.schema.buildObjectType({\n\t\t\t\t\tname: pascalCase(\n\t\t\t\t\t\t\"Prismic\",\n\t\t\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\t\targs.path.join(\" \"),\n\t\t\t\t\t\t\"ImageFieldThumbnails\",\n\t\t\t\t\t),\n\t\t\t\t\tdescription: \"Thumbnails for an image field.\",\n\t\t\t\t\tfields: {},\n\t\t\t\t});\n\n\t\t\t\tfor (const thumbnailModel of args.model.config.thumbnails) {\n\t\t\t\t\tif (thumbnailsType.config.fields) {\n\t\t\t\t\t\tconst transformedThumbnailName = args.pluginOptions\n\t\t\t\t\t\t\t.transformFieldName\n\t\t\t\t\t\t\t? args.pluginOptions.transformFieldName(thumbnailModel.name)\n\t\t\t\t\t\t\t: defaultTransformFieldName(thumbnailModel.name);\n\n\t\t\t\t\t\tthumbnailsType.config.fields[transformedThumbnailName] = {\n\t\t\t\t\t\t\ttype: pascalCase(\n\t\t\t\t\t\t\t\t\"Prismic\",\n\t\t\t\t\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\t\t\t\t\"ImageField\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (type.config.fields) {\n\t\t\t\t\ttype.config.fields.thumbnails = {\n\t\t\t\t\t\ttype: `${thumbnailsType.config.name}!`,\n\t\t\t\t\t\tdescription: \"Thumbnails for the image field.\",\n\t\t\t\t\t\tresolve: (source: ImageField) => {\n\t\t\t\t\t\t\treturn source;\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\targs.gatsbyNodeArgs.actions.createTypes(thumbnailsType);\n\t\t\t\targs.gatsbyNodeArgs.actions.createTypes(type);\n\n\t\t\t\treturn {\n\t\t\t\t\ttype: type.config.name,\n\t\t\t\t\tdescription: \"An Image field with thumbnails.\",\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\ttype: pascalCase(\n\t\t\t\t\t\t\"Prismic\",\n\t\t\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\t\t\"ImageField\",\n\t\t\t\t\t),\n\t\t\t\t\tdescription: \"An Image field.\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Link: {\n\t\t\tconst type = pascalCase(\n\t\t\t\t\"Prismic\",\n\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\"LinkField\",\n\t\t\t);\n\n\t\t\tswitch (args.model.config?.select) {\n\t\t\t\tcase CustomTypeModelLinkSelectType.Document: {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tdescription: \"A Content Relationship field.\",\n\t\t\t\t\t\tresolve: (\n\t\t\t\t\t\t\tsource: Record<string, unknown>,\n\t\t\t\t\t\t\t_args,\n\t\t\t\t\t\t\t_context,\n\t\t\t\t\t\t\tinfo,\n\t\t\t\t\t\t): ContentRelationshipField<\"filled\"> | null => {\n\t\t\t\t\t\t\tconst field = source[info.fieldName] as ContentRelationshipField;\n\n\t\t\t\t\t\t\tif (isFilled.contentRelationship(field)) {\n\t\t\t\t\t\t\t\treturn field;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase CustomTypeModelLinkSelectType.Media: {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tdescription: `A Link to Media field.\\n\\nTo download linked files locally and populate the \\`localFile\\` field, add the following path to \\`gatsby-source-prismic\\`'s \\`shouldDownloadFiles\\` option:\\n\\n\\`\"${args.path.join(\n\t\t\t\t\t\t\t\".\",\n\t\t\t\t\t\t)}\": true,\\``,\n\t\t\t\t\t\tresolve: (\n\t\t\t\t\t\t\tsource: Record<string, unknown>,\n\t\t\t\t\t\t\t_args,\n\t\t\t\t\t\t\t_context,\n\t\t\t\t\t\t\tinfo,\n\t\t\t\t\t\t): LinkToMediaField<\"filled\"> | null => {\n\t\t\t\t\t\t\tconst field = source[info.fieldName] as LinkToMediaField;\n\n\t\t\t\t\t\t\tif (isFilled.linkToMedia(field)) {\n\t\t\t\t\t\t\t\treturn field;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tcase null:\n\t\t\t\tdefault: {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tdescription: `A Link field.\\n\\nTo download linked files locally and populate the \\`localFile\\` field, add the following path to \\`gatsby-source-prismic\\`'s \\`shouldDownloadFiles\\` option:\\n\\n\\`\"${args.path.join(\n\t\t\t\t\t\t\t\".\",\n\t\t\t\t\t\t)}\": true,\\``,\n\t\t\t\t\t\tresolve: (\n\t\t\t\t\t\t\tsource: Record<string, unknown>,\n\t\t\t\t\t\t\t_args,\n\t\t\t\t\t\t\t_context,\n\t\t\t\t\t\t\tinfo,\n\t\t\t\t\t\t): LinkField<\"filled\"> | null => {\n\t\t\t\t\t\t\tconst field = source[info.fieldName] as LinkField;\n\n\t\t\t\t\t\t\tif (isFilled.link(field)) {\n\t\t\t\t\t\t\t\treturn field;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t}\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\tcase CustomTypeModelFieldType.Number: {\n\t\t\treturn {\n\t\t\t\ttype: \"Float\",\n\t\t\t\tdescription: \"A Number field.\",\n\t\t\t};\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Select: {\n\t\t\tif (args.model.config?.default_value !== undefined) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"String\",\n\t\t\t\t\tdescription: `A Select field with a default value. **Default value**: ${args.model.config.default_value}`,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"String\",\n\t\t\t\t\tdescription: \"A Select field without a default value.\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Slices: {\n\t\t\tlet choiceTypeNames: string[] = [];\n\n\t\t\tif (args.model.config?.choices) {\n\t\t\t\tfor (const sliceType in args.model.config.choices) {\n\t\t\t\t\tconst model = args.model.config.choices[sliceType];\n\n\t\t\t\t\tswitch (model.type) {\n\t\t\t\t\t\tcase CustomTypeModelSliceType.SharedSlice: {\n\t\t\t\t\t\t\tconst sharedSliceModel = args.sharedSliceModels.find((model) => {\n\t\t\t\t\t\t\t\treturn model.id === sliceType;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (sharedSliceModel) {\n\t\t\t\t\t\t\t\tfor (const variation of sharedSliceModel.variations) {\n\t\t\t\t\t\t\t\t\tchoiceTypeNames = [\n\t\t\t\t\t\t\t\t\t\t...choiceTypeNames,\n\t\t\t\t\t\t\t\t\t\tpascalCase(\n\t\t\t\t\t\t\t\t\t\t\t\"Prismic\",\n\t\t\t\t\t\t\t\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\t\t\t\t\t\t\tsliceType,\n\t\t\t\t\t\t\t\t\t\t\t\"Slice\",\n\t\t\t\t\t\t\t\t\t\t\tvariation.id,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcase CustomTypeModelSliceType.Slice: {\n\t\t\t\t\t\t\tconst type = args.gatsbyNodeArgs.schema.buildObjectType({\n\t\t\t\t\t\t\t\tname: pascalCase(\n\t\t\t\t\t\t\t\t\t\"Prismic\",\n\t\t\t\t\t\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\t\t\t\t\targs.path.join(\" \"),\n\t\t\t\t\t\t\t\t\tsliceType,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\tfields: {\n\t\t\t\t\t\t\t\t\tid: {\n\t\t\t\t\t\t\t\t\t\ttype: \"ID!\",\n\t\t\t\t\t\t\t\t\t\tresolve: (source: Slice | SharedSlice): string => {\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\tsource.id ||\n\t\t\t\t\t\t\t\t\t\t\t\targs.gatsbyNodeArgs.createNodeId(\n\t\t\t\t\t\t\t\t\t\t\t\t\targs.gatsbyNodeArgs.createContentDigest(source),\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tslice_type: {\n\t\t\t\t\t\t\t\t\t\ttype: \"String!\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tslice_label: {\n\t\t\t\t\t\t\t\t\t\ttype: \"String\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tinterfaces: [\"PrismicSlice\"],\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tmodel[\"non-repeat\"] &&\n\t\t\t\t\t\t\t\tObject.keys(model[\"non-repeat\"]).length > 0\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst primaryType = fieldModelsRecordToGraphQLType({\n\t\t\t\t\t\t\t\t\t...args,\n\t\t\t\t\t\t\t\t\tpath: [...args.path, sliceType, \"primary\"],\n\t\t\t\t\t\t\t\t\tmodels: model[\"non-repeat\"],\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\targs.gatsbyNodeArgs.actions.createTypes(primaryType);\n\n\t\t\t\t\t\t\t\tif (type.config.fields) {\n\t\t\t\t\t\t\t\t\ttype.config.fields.primary = {\n\t\t\t\t\t\t\t\t\t\ttype: `${primaryType.config.name}!`,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (model.repeat && Object.keys(model.repeat).length > 0) {\n\t\t\t\t\t\t\t\tconst itemType = fieldModelsRecordToGraphQLType({\n\t\t\t\t\t\t\t\t\t...args,\n\t\t\t\t\t\t\t\t\tpath: [...args.path, sliceType, \"items\"],\n\t\t\t\t\t\t\t\t\tmodels: model.repeat,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\titemType.config.name = pascalCase(\n\t\t\t\t\t\t\t\t\t\"Prismic\",\n\t\t\t\t\t\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\t\t\t\t\targs.path.join(\" \"),\n\t\t\t\t\t\t\t\t\tsliceType,\n\t\t\t\t\t\t\t\t\t\"item\",\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\targs.gatsbyNodeArgs.actions.createTypes(itemType);\n\n\t\t\t\t\t\t\t\tif (type.config.fields) {\n\t\t\t\t\t\t\t\t\ttype.config.fields.items = {\n\t\t\t\t\t\t\t\t\t\ttype: `[${itemType.config.name}!]!`,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\targs.gatsbyNodeArgs.actions.createTypes(type);\n\n\t\t\t\t\t\t\tchoiceTypeNames = [...choiceTypeNames, type.config.name];\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\tfmtLog(\n\t\t\t\t\t\t\t\t\targs.pluginOptions.repositoryName,\n\t\t\t\t\t\t\t\t\t`Legacy Slices are not supported, but were found at this field: ${args.path.join(\n\t\t\t\t\t\t\t\t\t\t\".\",\n\t\t\t\t\t\t\t\t\t)}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (choiceTypeNames.length > 0) {\n\t\t\t\tconst type = args.gatsbyNodeArgs.schema.buildUnionType({\n\t\t\t\t\tname: pascalCase(\n\t\t\t\t\t\t\"Prismic\",\n\t\t\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\t\targs.path.join(\" \"),\n\t\t\t\t\t),\n\t\t\t\t\ttypes: choiceTypeNames,\n\t\t\t\t\tresolveType: (source: Slice | SharedSlice) => {\n\t\t\t\t\t\tif (\"variation\" in source) {\n\t\t\t\t\t\t\treturn pascalCase(\n\t\t\t\t\t\t\t\t\"Prismic\",\n\t\t\t\t\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\t\t\t\tsource.slice_type,\n\t\t\t\t\t\t\t\t\"Slice\",\n\t\t\t\t\t\t\t\tsource.variation,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn pascalCase(\n\t\t\t\t\t\t\t\t\"Prismic\",\n\t\t\t\t\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\t\t\t\targs.path.join(\" \"),\n\t\t\t\t\t\t\t\tsource.slice_type,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\targs.gatsbyNodeArgs.actions.createTypes(type);\n\n\t\t\t\treturn {\n\t\t\t\t\ttype: `[${type.config.name}!]!`,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t// If the Slice Zone does not contain any\n\t\t\t\t// choices, exclude the Slice Zone field from\n\t\t\t\t// the schema. Returning `undefined` here will\n\t\t\t\t// exclude the field in\n\t\t\t\t// `fieldMOdelsRecordToGraphQLType()`.\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.StructuredText: {\n\t\t\tconst type = `${pascalCase(\n\t\t\t\t\"Prismic\",\n\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\"RichTextField\",\n\t\t\t)}!`;\n\n\t\t\tif (\n\t\t\t\targs.model.config &&\n\t\t\t\t\"single\" in args.model.config &&\n\t\t\t\targs.model.config.single &&\n\t\t\t\targs.model.config.single\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.every((blockType) => /^heading/.test(blockType))\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\ttype,\n\t\t\t\t\tdescription: \"A Title field.\",\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\ttype,\n\t\t\t\t\tdescription: \"A Rich Text field.\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Text: {\n\t\t\treturn {\n\t\t\t\ttype: \"String\",\n\t\t\t\tdescription: \"A Key Text field.\",\n\t\t\t\t// TODO: Restore this resolver.\n\t\t\t\tresolve: (\n\t\t\t\t\tsource,\n\t\t\t\t\t_args,\n\t\t\t\t\t_context,\n\t\t\t\t\tinfo,\n\t\t\t\t): KeyTextField<\"filled\"> | null => {\n\t\t\t\t\tconst field = source[info.fieldName] as KeyTextField;\n\n\t\t\t\t\tif (isFilled.keyText(field)) {\n\t\t\t\t\t\treturn field;\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\n\t\tcase CustomTypeModelFieldType.Timestamp: {\n\t\t\treturn {\n\t\t\t\ttype: \"Date\",\n\t\t\t\tdescription: \"A Timestamp field.\",\n\t\t\t\textensions: { dateformat: {} },\n\t\t\t};\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Integration: {\n\t\t\tif (!args.model.config?.catalog) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tfmtLog(\n\t\t\t\t\t\targs.pluginOptions.repositoryName,\n\t\t\t\t\t\t`Integration fields must have a catalog configured, but none was found for this field: ${args.path.join(\n\t\t\t\t\t\t\t\".\",\n\t\t\t\t\t\t)}`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst type = args.gatsbyNodeArgs.schema.buildObjectType({\n\t\t\t\tname: pascalCase(\n\t\t\t\t\t\"Prismic\",\n\t\t\t\t\targs.pluginOptions.typePrefix,\n\t\t\t\t\targs.model.config.catalog,\n\t\t\t\t\t\"IntegrationItem\",\n\t\t\t\t),\n\t\t\t\tdescription: `An Integration Fields field connected to the \\`${args.model.config.catalog}\\` catalog.`,\n\t\t\t\tfields: {\n\t\t\t\t\t// At least one field must be defined to supress a graphql-compose error.\n\t\t\t\t\tid: \"ID!\",\n\t\t\t\t},\n\t\t\t\tinterfaces: [\"Node\"],\n\t\t\t\textensions: { infer: true },\n\t\t\t});\n\n\t\t\targs.gatsbyNodeArgs.actions.createTypes(type);\n\n\t\t\treturn {\n\t\t\t\ttype: type.config.name,\n\t\t\t\tdescription: `An Integration Fields field connected to the \\`${args.model.config.catalog}\\` catalog.`,\n\t\t\t\textensions: { link: {} },\n\t\t\t};\n\t\t}\n\n\t\tdefault: {\n\t\t\tconst dotPath = args.path.join(\".\");\n\n\t\t\targs.gatsbyNodeArgs.reporter.info(\n\t\t\t\tfmtLog(\n\t\t\t\t\targs.pluginOptions.repositoryName,\n\t\t\t\t\t`An unknown field type \"${args.model.type}\" was found at ${dotPath}. A generic JSON type will be used. You can manually override the type using Gatsby's createSchemaCustomization API in your site's gatsby-node.js.`,\n\t\t\t\t),\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\ttype: \"JSON\",\n\t\t\t\tdescription: `This field's type is unknown (\"${args.model.type}\"). A generic \\`JSON\\` type is used. You can manually override the type using Gatsby's [\\`createSchemaCustomization\\`](https://www.gatsbyjs.com/docs/reference/graphql-data-layer/schema-customization/) Node API in your site's \\`gatsby-node.js\\`.`,\n\t\t\t};\n\t\t}\n\t}\n};\n"],"names":["CustomTypeModelFieldType","pascalCase","isFilled","fieldModelsRecordToGraphQLType","buildImageObjectType","defaultTransformFieldName","CustomTypeModelLinkSelectType","CustomTypeModelSliceType","model","fmtLog"],"mappings":"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"}