{"version":3,"file":"fetchLinkedDocuments.cjs","sources":["../../../src/lib/fetchLinkedDocuments.ts"],"sourcesContent":["import {\n\tAnyRegularField,\n\tClient,\n\tCustomTypeModel,\n\tCustomTypeModelField,\n\tCustomTypeModelFieldType,\n\tCustomTypeModelGroupField,\n\tCustomTypeModelSlice,\n\tCustomTypeModelSliceType,\n\tCustomTypeModelSliceZoneField,\n\tGroupField,\n\tLinkField,\n\tPrismicDocument,\n\tSharedSlice,\n\tSharedSliceModel,\n\tSliceZone,\n} from \"@prismicio/client\";\n\nimport type { PluginOptions, RepositoryConfig } from \"../types\";\n\nimport { usePrismicPreviewStore } from \"../usePrismicPreviewStore\";\n\nimport { normalizeDocument } from \"./normalizeDocument\";\n\nconst extractLinkedDocumentIDsFromField = async (\n\tlooseValue: AnyRegularField | GroupField | SliceZone,\n\tlooseModel: CustomTypeModelField,\n\tsharedSliceModels: SharedSliceModel[],\n): Promise<string[]> => {\n\tswitch (looseModel.type) {\n\t\tcase CustomTypeModelFieldType.Slices: {\n\t\t\tconst value = looseValue as SliceZone;\n\n\t\t\treturn (\n\t\t\t\tawait 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\tif (sliceModel.type === CustomTypeModelSliceType.Slice) {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\t\t\t\t\textractLinkedDocumentIDsFromFields(\n\t\t\t\t\t\t\t\t\t\t\tslice.primary,\n\t\t\t\t\t\t\t\t\t\t\tsliceModel[\"non-repeat\"] || {},\n\t\t\t\t\t\t\t\t\t\t\tsharedSliceModels,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t...slice.items.map(async (item) => {\n\t\t\t\t\t\t\t\t\t\t\treturn extractLinkedDocumentIDsFromFields(\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\tsliceModel.repeat || {},\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);\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).flat();\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 variationModel = sharedSliceModels\n\t\t\t\t\t\t\t\t\t.find((m) => m.id === slice.slice_type)\n\t\t\t\t\t\t\t\t\t?.variations.find((m) => m.id === typedSlice.variation);\n\n\t\t\t\t\t\t\t\tif (variationModel) {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\t\t\t\t\t\textractLinkedDocumentIDsFromFields(\n\t\t\t\t\t\t\t\t\t\t\t\tslice.primary,\n\t\t\t\t\t\t\t\t\t\t\t\tvariationModel.primary || {},\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),\n\t\t\t\t\t\t\t\t\t\t\t...slice.items.map(async (item) => {\n\t\t\t\t\t\t\t\t\t\t\t\treturn extractLinkedDocumentIDsFromFields(\n\t\t\t\t\t\t\t\t\t\t\t\t\titem,\n\t\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\tsharedSliceModels,\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).flat();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\treturn [];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn [];\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t).flat();\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Group: {\n\t\t\tconst value = looseValue as GroupField;\n\n\t\t\treturn (\n\t\t\t\tawait 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 extractLinkedDocumentIDsFromFields(\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\tsharedSliceModels,\n\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t).flat();\n\t\t}\n\n\t\tcase CustomTypeModelFieldType.Link: {\n\t\t\tconst value = looseValue as LinkField;\n\n\t\t\tif (\"id\" in value && !value.isBroken) {\n\t\t\t\treturn [value.id];\n\t\t\t}\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn [];\n\t\t}\n\t}\n};\n\nconst extractLinkedDocumentIDsFromFields = async (\n\tfields: Record<string, AnyRegularField | GroupField | SliceZone>,\n\tmodels: Record<string, CustomTypeModelField>,\n\tsharedSliceModels: SharedSliceModel[],\n): Promise<string[]> => {\n\tconst fieldNames = Object.keys(models);\n\n\treturn (\n\t\tawait Promise.all(\n\t\t\tfieldNames.map(async (fieldName) => {\n\t\t\t\treturn extractLinkedDocumentIDsFromField(\n\t\t\t\t\tfields[fieldName],\n\t\t\t\t\tmodels[fieldName],\n\t\t\t\t\tsharedSliceModels,\n\t\t\t\t);\n\t\t\t}),\n\t\t)\n\t).flat();\n};\n\nconst extractLinkedDocumentIDs = async (\n\tdocument: PrismicDocument,\n\tcustomTypeModels: CustomTypeModel[],\n\tsharedSliceModels: SharedSliceModel[],\n): Promise<string[]> => {\n\tconst model = customTypeModels.find(\n\t\t(customTypeModel) => customTypeModel.id === document.type,\n\t);\n\n\tif (model) {\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\tconst linkedIDs = await extractLinkedDocumentIDsFromFields(\n\t\t\tdocument.data,\n\t\t\tfieldModels,\n\t\t\tsharedSliceModels,\n\t\t);\n\n\t\tconst alternateLanguageIDs = document.alternate_languages.map(\n\t\t\t(alternateLanguage) => {\n\t\t\t\treturn alternateLanguage.id;\n\t\t\t},\n\t\t);\n\t\tlinkedIDs.push(...alternateLanguageIDs);\n\n\t\treturn linkedIDs;\n\t} else {\n\t\treturn [];\n\t}\n};\n\nexport const fetchLinkedDocuments = async (\n\tdocuments: PrismicDocument[],\n\tclient: Client,\n\tpluginOptions: PluginOptions,\n\trepositoryConfig: RepositoryConfig,\n\tcustomTypeModels: CustomTypeModel[],\n\tsharedSliceModels: SharedSliceModel[],\n\tabortController: AbortController,\n\titerationCount = 0,\n\tmaximumIterationCount = 3,\n\taggregateAlreadyFetchedIDs: string[] = [],\n): Promise<void> => {\n\tif (iterationCount >= maximumIterationCount) {\n\t\tconsole.warn(\n\t\t\t`The maximum depth to which gatsby-plugin-prismic-previews will fetch linked documents (${maximumIterationCount} levels deep) was reached. Any Link field's \\`document\\` property nested below ${maximumIterationCount} levels deep will return undefined.`,\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst alreadyFetchedIDs = [\n\t\t...aggregateAlreadyFetchedIDs,\n\t\t...documents.map((doc) => doc.id),\n\t];\n\n\tconst ids = (\n\t\tawait Promise.all(\n\t\t\tdocuments.map(async (doc) => {\n\t\t\t\treturn extractLinkedDocumentIDs(\n\t\t\t\t\tdoc,\n\t\t\t\t\tcustomTypeModels,\n\t\t\t\t\tsharedSliceModels,\n\t\t\t\t);\n\t\t\t}),\n\t\t)\n\t).flat();\n\n\tconst prunedIDs = ids.filter((id) => !alreadyFetchedIDs.includes(id));\n\n\tif (prunedIDs.length > 0) {\n\t\tconst fetchedLinkedDocuments = await client.getAllByIDs(\n\t\t\t[...new Set(prunedIDs)],\n\t\t\t{ signal: abortController.signal },\n\t\t);\n\n\t\tawait Promise.all([\n\t\t\tPromise.all(\n\t\t\t\tfetchedLinkedDocuments.map(async (doc) => {\n\t\t\t\t\tconst model = customTypeModels.find(\n\t\t\t\t\t\t(customTypeModel) => customTypeModel.id === doc.type,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (model) {\n\t\t\t\t\t\tconst normalizedDocument = await normalizeDocument(\n\t\t\t\t\t\t\tdoc,\n\t\t\t\t\t\t\tmodel,\n\t\t\t\t\t\t\tsharedSliceModels,\n\t\t\t\t\t\t\tpluginOptions,\n\t\t\t\t\t\t\trepositoryConfig,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst state = usePrismicPreviewStore.getState();\n\t\t\t\t\t\tstate.addDocument(normalizedDocument);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t),\n\t\t\tfetchLinkedDocuments(\n\t\t\t\tfetchedLinkedDocuments,\n\t\t\t\tclient,\n\t\t\t\tpluginOptions,\n\t\t\t\trepositoryConfig,\n\t\t\t\tcustomTypeModels,\n\t\t\t\tsharedSliceModels,\n\t\t\t\tabortController,\n\t\t\t\titerationCount + 1,\n\t\t\t\tmaximumIterationCount,\n\t\t\t\t[...alreadyFetchedIDs, ...prunedIDs],\n\t\t\t),\n\t\t]);\n\t}\n};\n"],"names":["CustomTypeModelFieldType","CustomTypeModelSliceType","client","normalizeDocument","usePrismicPreviewStore"],"mappings":"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"}