{"version":3,"file":"normalizeDocument.cjs","sources":["../../../src/lib/normalizeDocument.ts"],"sourcesContent":["import {\n\tAnyRegularField,\n\tCustomTypeModel,\n\tCustomTypeModelField,\n\tCustomTypeModelFieldType,\n\tCustomTypeModelGroupField,\n\tCustomTypeModelImageField,\n\tCustomTypeModelSlice,\n\tCustomTypeModelSliceType,\n\tCustomTypeModelSliceZoneField,\n\tGroupField,\n\tImageField,\n\tImageFieldImage,\n\tLinkField,\n\tPrismicDocument,\n\tRichTextField,\n\tSharedSlice,\n\tSharedSliceModel,\n\tSliceZone,\n\tasHTML,\n\tasLink,\n\tasText,\n\tisFilled,\n} from \"@prismicio/client\";\nimport { IUrlBuilderArgs, getImageData } from \"gatsby-plugin-image\";\nimport { ImgixURLParams, buildURL } from \"imgix-url-builder\";\n\nimport type {\n\tNormalizedDocument,\n\tPluginOptions,\n\tRepositoryConfig,\n} from \"../types\";\n\nimport { DEFAULT_IMGIX_PARAMS } from \"../constants\";\n\nimport { getDocument } from \"./getDocument\";\nimport { hasOwnProperty } from \"./hasOwnProperty\";\nimport { pascalCase } from \"./pascalCase\";\nimport { uuid } from \"./uuid\";\n\n// TODO: Consider changing the lazy-loading property design (currently using\n// getters) to only call the getter once (i.e. cache the result, like\n// memoization)\n\nconst defaultTransformFieldName = (fieldName: string): string => {\n\treturn fieldName.replace(/-/g, \"_\");\n};\n\nconst withDocumentProxy = <\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tTTarget extends Record<any, any>,\n>(\n\ttarget: TTarget,\n\trepositoryConfig: RepositoryConfig,\n): TTarget => {\n\treturn new Proxy(target, {\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop === \"document\") {\n\t\t\t\tif (hasOwnProperty(target, \"id\") && typeof target.id === \"string\") {\n\t\t\t\t\treturn getDocument(target.id) || null;\n\t\t\t\t}\n\t\t\t} else if (prop === \"url\") {\n\t\t\t\tif (hasOwnProperty(target, \"id\") && typeof target.id === \"string\") {\n\t\t\t\t\tconst document = getDocument(target.id);\n\n\t\t\t\t\tif (document) {\n\t\t\t\t\t\treturn asLink(document.raw, {\n\t\t\t\t\t\t\tlinkResolver: repositoryConfig.linkResolver,\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\treturn Reflect.get(target, prop, receiver);\n\t\t},\n\t});\n};\n\ntype ImgixGatsbyImageDataUrlBuilderArgs = IUrlBuilderArgs<{\n\timageImgixParams?: ImgixURLParams;\n}>;\n\nconst imgixGatsbyImageDataUrlBuilder = (\n\targs: ImgixGatsbyImageDataUrlBuilderArgs,\n) => {\n\treturn buildURL(args.baseUrl, {\n\t\t...DEFAULT_IMGIX_PARAMS,\n\t\t...args.options.imageImgixParams,\n\t\tfm: args.format && args.format !== \"auto\" ? args.format : undefined,\n\t\tw: args.width,\n\t\th: args.height,\n\t});\n};\n\nconst normalizeImageField = (\n\timage: ImageFieldImage,\n\tpluginOptions: PluginOptions,\n) => {\n\treturn {\n\t\t...image,\n\t\tget url() {\n\t\t\tif (isFilled.image(image)) {\n\t\t\t\treturn buildURL(image.url, {\n\t\t\t\t\t...DEFAULT_IMGIX_PARAMS,\n\t\t\t\t\t...pluginOptions.imageImgixParams,\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\tget gatsbyImageData() {\n\t\t\tif (isFilled.image(image)) {\n\t\t\t\treturn getImageData({\n\t\t\t\t\tbaseUrl: image.url,\n\t\t\t\t\tsourceWidth: image.dimensions.width,\n\t\t\t\t\tsourceHeight: image.dimensions.height,\n\t\t\t\t\turlBuilder: imgixGatsbyImageDataUrlBuilder,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\timageImgixParams: pluginOptions.imageImgixParams,\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\tget localFile() {\n\t\t\tif (isFilled.image(image)) {\n\t\t\t\treturn {\n\t\t\t\t\tpublicURL: image.url,\n\t\t\t\t\tchildImageSharp: {\n\t\t\t\t\t\tget gatsbyImageData() {\n\t\t\t\t\t\t\treturn getImageData({\n\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\tbaseUrl: image.url!,\n\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\tsourceWidth: image.dimensions!.width,\n\t\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\t\t\t\t\tsourceHeight: image.dimensions!.height,\n\t\t\t\t\t\t\t\turlBuilder: imgixGatsbyImageDataUrlBuilder,\n\t\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\t\timageImgixParams: pluginOptions.imageImgixParams,\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} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t};\n};\n\nconst normalizeField = async (\n\tlooseModel: CustomTypeModelField | undefined,\n\tlooseValue: AnyRegularField | GroupField | SliceZone,\n\tpath: string[],\n\tsharedSliceModels: SharedSliceModel[],\n\trepositoryConfig: RepositoryConfig,\n\tpluginOptions: PluginOptions,\n) => {\n\tswitch (looseModel?.type) {\n\t\tcase CustomTypeModelFieldType.Slices: {\n\t\t\tconst value = looseValue as SliceZone;\n\n\t\t\tif (isFilled.sliceZone(value)) {\n\t\t\t\treturn await Promise.all(\n\t\t\t\t\tvalue.map(async (slice) => {\n\t\t\t\t\t\tconst model = looseModel as CustomTypeModelSliceZoneField;\n\t\t\t\t\t\tconst sliceModel = model.config?.choices?.[slice.slice_type] as\n\t\t\t\t\t\t\t| CustomTypeModelSlice\n\t\t\t\t\t\t\t| SharedSliceModel\n\t\t\t\t\t\t\t| undefined;\n\n\t\t\t\t\t\tif (sliceModel) {\n\t\t\t\t\t\t\tconst result: Omit<typeof slice, \"primary\" | \"items\"> & {\n\t\t\t\t\t\t\t\t__typename: string;\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\tprimary: Record<string, unknown>;\n\t\t\t\t\t\t\t\titems: Record<string, unknown>[];\n\t\t\t\t\t\t\t} = {\n\t\t\t\t\t\t\t\t...slice,\n\t\t\t\t\t\t\t\tid: uuid(),\n\t\t\t\t\t\t\t\t__typename: pascalCase(\n\t\t\t\t\t\t\t\t\t\"Prismic\",\n\t\t\t\t\t\t\t\t\tpluginOptions.typePrefix,\n\t\t\t\t\t\t\t\t\t...path,\n\t\t\t\t\t\t\t\t\tslice.slice_type,\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 (sliceModel.type === CustomTypeModelSliceType.Slice) {\n\t\t\t\t\t\t\t\tresult.primary = await normalizeFields(\n\t\t\t\t\t\t\t\t\tslice.primary,\n\t\t\t\t\t\t\t\t\tsliceModel[\"non-repeat\"] || {},\n\t\t\t\t\t\t\t\t\t[...path, slice.slice_type, \"primary\"],\n\t\t\t\t\t\t\t\t\tsharedSliceModels,\n\t\t\t\t\t\t\t\t\trepositoryConfig,\n\t\t\t\t\t\t\t\t\tpluginOptions,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tresult.items = await Promise.all(\n\t\t\t\t\t\t\t\t\tslice.items.map(async (item) => {\n\t\t\t\t\t\t\t\t\t\treturn await normalizeFields(\n\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\tsliceModel.repeat || {},\n\t\t\t\t\t\t\t\t\t\t\t[...path, slice.slice_type, \"item\"],\n\t\t\t\t\t\t\t\t\t\t\tsharedSliceModels,\n\t\t\t\t\t\t\t\t\t\t\trepositoryConfig,\n\t\t\t\t\t\t\t\t\t\t\tpluginOptions,\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} else if (\n\t\t\t\t\t\t\t\tsliceModel.type === CustomTypeModelSliceType.SharedSlice\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst typedSlice = slice as SharedSlice;\n\t\t\t\t\t\t\t\tconst sharedSliceModel = sharedSliceModels.find(\n\t\t\t\t\t\t\t\t\t(m) => m.id === slice.slice_type,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst variationModel = sharedSliceModel?.variations.find(\n\t\t\t\t\t\t\t\t\t(m) => m.id === typedSlice.variation,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tif (sharedSliceModel && variationModel) {\n\t\t\t\t\t\t\t\t\tresult.__typename = pascalCase(\n\t\t\t\t\t\t\t\t\t\t\"Prismic\",\n\t\t\t\t\t\t\t\t\t\tpluginOptions.typePrefix,\n\t\t\t\t\t\t\t\t\t\tsharedSliceModel.id,\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tresult.primary = await normalizeFields(\n\t\t\t\t\t\t\t\t\t\tslice.primary,\n\t\t\t\t\t\t\t\t\t\tvariationModel.primary || {},\n\t\t\t\t\t\t\t\t\t\t[...path, slice.slice_type, \"primary\"],\n\t\t\t\t\t\t\t\t\t\tsharedSliceModels,\n\t\t\t\t\t\t\t\t\t\trepositoryConfig,\n\t\t\t\t\t\t\t\t\t\tpluginOptions,\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tresult.items = await Promise.all(\n\t\t\t\t\t\t\t\t\t\tslice.items.map(async (item) => {\n\t\t\t\t\t\t\t\t\t\t\treturn await normalizeFields(\n\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\t\t\t\t\t\tvariationModel.items || {},\n\t\t\t\t\t\t\t\t\t\t\t\t[...path, slice.slice_type, \"item\"],\n\t\t\t\t\t\t\t\t\t\t\t\tsharedSliceModels,\n\t\t\t\t\t\t\t\t\t\t\t\trepositoryConfig,\n\t\t\t\t\t\t\t\t\t\t\t\tpluginOptions,\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}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn slice;\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Group: {\n\t\t\tconst value = looseValue as GroupField;\n\n\t\t\tif (isFilled.group(value)) {\n\t\t\t\treturn await Promise.all(\n\t\t\t\t\tvalue.map(async (item) => {\n\t\t\t\t\t\tconst model = looseModel as CustomTypeModelGroupField;\n\n\t\t\t\t\t\treturn await normalizeFields(\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tmodel.config?.fields || {},\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\tsharedSliceModels,\n\t\t\t\t\t\t\trepositoryConfig,\n\t\t\t\t\t\t\tpluginOptions,\n\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Link: {\n\t\t\tconst value = looseValue as LinkField;\n\n\t\t\tconst result: Omit<typeof value, \"url\"> & {\n\t\t\t\tid?: string;\n\t\t\t\turl: string | null;\n\t\t\t\ttarget?: string | null;\n\t\t\t\traw: typeof value;\n\t\t\t\tdocument?: unknown;\n\t\t\t\tlocalFile: { publicURL: string } | null;\n\t\t\t} = {\n\t\t\t\t...value,\n\t\t\t\ttarget:\n\t\t\t\t\t\"target\" in value && value.target ? value.target || null : undefined,\n\t\t\t\turl:\n\t\t\t\t\tasLink(value, { linkResolver: repositoryConfig.linkResolver }) ??\n\t\t\t\t\tnull,\n\t\t\t\traw: value,\n\t\t\t\tlocalFile: null,\n\t\t\t};\n\n\t\t\tif (value.link_type === \"Media\" && \"url\" in value && value.url) {\n\t\t\t\tresult.localFile = {\n\t\t\t\t\tpublicURL: value.url,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn withDocumentProxy(result, repositoryConfig);\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.StructuredText: {\n\t\t\tconst value = looseValue as RichTextField;\n\n\t\t\treturn {\n\t\t\t\tget html() {\n\t\t\t\t\tif (isFilled.richText(value)) {\n\t\t\t\t\t\treturn asHTML(value, {\n\t\t\t\t\t\t\tlinkResolver: repositoryConfig.linkResolver,\n\t\t\t\t\t\t\tserializer: repositoryConfig.htmlSerializer,\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\tget text() {\n\t\t\t\t\tif (isFilled.richText(value)) {\n\t\t\t\t\t\treturn asText(value);\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\trichText: value,\n\t\t\t\traw: value,\n\t\t\t};\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Image: {\n\t\t\tconst value = looseValue as ImageField<string>;\n\n\t\t\tconst result = {\n\t\t\t\t...normalizeImageField(value, pluginOptions),\n\t\t\t\tget thumbnails() {\n\t\t\t\t\tconst model = looseModel as CustomTypeModelImageField;\n\t\t\t\t\tconst transformFieldName =\n\t\t\t\t\t\trepositoryConfig.transformFieldName || defaultTransformFieldName;\n\n\t\t\t\t\tif (model.config?.thumbnails) {\n\t\t\t\t\t\tconst thumbnails: Record<\n\t\t\t\t\t\t\tstring,\n\t\t\t\t\t\t\tReturnType<typeof normalizeImageField>\n\t\t\t\t\t\t> = {};\n\n\t\t\t\t\t\tfor (const thumbnailModel of model.config.thumbnails) {\n\t\t\t\t\t\t\tconst transformedThumbnailName = transformFieldName(\n\t\t\t\t\t\t\t\tthumbnailModel.name,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tthumbnails[transformedThumbnailName] = normalizeImageField(\n\t\t\t\t\t\t\t\tvalue[thumbnailModel.name],\n\t\t\t\t\t\t\t\tpluginOptions,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn thumbnails;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\n\t\t\treturn result;\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn looseValue;\n\t\t}\n\t}\n};\n\nconst normalizeFields = async (\n\tfields: Record<string, AnyRegularField | GroupField | SliceZone>,\n\tmodels: Record<string, CustomTypeModelField>,\n\tpath: string[],\n\tsharedSliceModels: SharedSliceModel[],\n\trepositoryConfig: RepositoryConfig,\n\tpluginOptions: PluginOptions,\n) => {\n\tconst result: Record<string, unknown> = {};\n\n\tconst fieldNames = Object.keys(models);\n\n\tawait Promise.all(\n\t\tfieldNames.map(async (fieldName) => {\n\t\t\tif (fieldName !== \"uid\") {\n\t\t\t\tconst transformFieldName =\n\t\t\t\t\trepositoryConfig.transformFieldName || defaultTransformFieldName;\n\t\t\t\tconst transformedFieldName = transformFieldName(fieldName);\n\n\t\t\t\tresult[transformedFieldName] = await normalizeField(\n\t\t\t\t\tmodels[fieldName],\n\t\t\t\t\tfields[fieldName],\n\t\t\t\t\t[...path, fieldName],\n\t\t\t\t\tsharedSliceModels,\n\t\t\t\t\trepositoryConfig,\n\t\t\t\t\tpluginOptions,\n\t\t\t\t);\n\t\t\t}\n\t\t}),\n\t);\n\n\treturn result;\n};\n\nexport const normalizeDocument = async (\n\tdocument: PrismicDocument,\n\tmodel: CustomTypeModel,\n\tsharedSliceModels: SharedSliceModel[],\n\trepositoryConfig: RepositoryConfig,\n\tpluginOptions: PluginOptions,\n): Promise<NormalizedDocument> => {\n\tconst normalizedDocument = {\n\t\t...document,\n\t\t__typename: pascalCase(\"Prismic\", pluginOptions.typePrefix, model.id),\n\t\t_previewable: document.id,\n\t\tprismicId: document.id,\n\t\tid: uuid(),\n\t\turl:\n\t\t\tasLink(document, { linkResolver: repositoryConfig.linkResolver }) ?? null,\n\t\tdataRaw: document.data,\n\t\traw: document,\n\t\talternate_languages: document.alternate_languages.map(\n\t\t\t(alternateLanguage) => {\n\t\t\t\treturn withDocumentProxy(alternateLanguage, repositoryConfig);\n\t\t\t},\n\t\t),\n\t};\n\n\tif (Object.keys(document.data).length > 0) {\n\t\tconst fieldModels: CustomTypeModel[\"json\"][string] = Object.assign(\n\t\t\t{},\n\t\t\t...Object.values(model.json),\n\t\t);\n\n\t\tnormalizedDocument.data = await normalizeFields(\n\t\t\tdocument.data,\n\t\t\tfieldModels,\n\t\t\t[model.id, \"data\"],\n\t\t\tsharedSliceModels,\n\t\t\trepositoryConfig,\n\t\t\tpluginOptions,\n\t\t);\n\t}\n\n\treturn normalizedDocument;\n};\n"],"names":["target","hasOwnProperty","getDocument","asLink","buildURL","DEFAULT_IMGIX_PARAMS","isFilled","getImageData","CustomTypeModelFieldType","uuid","pascalCase","CustomTypeModelSliceType","asHTML","asText"],"mappings":"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"}