@ai-stack/payloadcms 3.76.0-beta.1 → 3.76.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. package/dist/ai/core/generateObject.js +1 -4
  2. package/dist/ai/core/generateObject.js.map +1 -1
  3. package/dist/ai/core/generateText.js +1 -5
  4. package/dist/ai/core/generateText.js.map +1 -1
  5. package/dist/ai/core/media/generateMedia.js +1 -4
  6. package/dist/ai/core/media/generateMedia.js.map +1 -1
  7. package/dist/ai/core/media/image/generateImage.js +4 -14
  8. package/dist/ai/core/media/image/generateImage.js.map +1 -1
  9. package/dist/ai/core/media/image/handlers/multimodal.js +7 -24
  10. package/dist/ai/core/media/image/handlers/multimodal.js.map +1 -1
  11. package/dist/ai/core/media/image/handlers/standard.js +7 -2
  12. package/dist/ai/core/media/image/handlers/standard.js.map +1 -1
  13. package/dist/ai/core/media/speech/generateSpeech.js +2 -3
  14. package/dist/ai/core/media/speech/generateSpeech.js.map +1 -1
  15. package/dist/ai/core/media/types.d.ts +2 -3
  16. package/dist/ai/core/media/types.js.map +1 -1
  17. package/dist/ai/core/streamObject.js +0 -3
  18. package/dist/ai/core/streamObject.js.map +1 -1
  19. package/dist/ai/core/streamText.js +1 -4
  20. package/dist/ai/core/streamText.js.map +1 -1
  21. package/dist/ai/core/types.d.ts +2 -2
  22. package/dist/ai/core/types.js.map +1 -1
  23. package/dist/ai/providers/blocks/anthropic.js +2 -44
  24. package/dist/ai/providers/blocks/anthropic.js.map +1 -1
  25. package/dist/ai/providers/blocks/elevenlabs.js +4 -109
  26. package/dist/ai/providers/blocks/elevenlabs.js.map +1 -1
  27. package/dist/ai/providers/blocks/fal.js +2 -120
  28. package/dist/ai/providers/blocks/fal.js.map +1 -1
  29. package/dist/ai/providers/blocks/google.js +6 -240
  30. package/dist/ai/providers/blocks/google.js.map +1 -1
  31. package/dist/ai/providers/blocks/openai-compatible.js +2 -146
  32. package/dist/ai/providers/blocks/openai-compatible.js.map +1 -1
  33. package/dist/ai/providers/blocks/openai.js +2 -202
  34. package/dist/ai/providers/blocks/openai.js.map +1 -1
  35. package/dist/ai/providers/blocks/xai.js +2 -55
  36. package/dist/ai/providers/blocks/xai.js.map +1 -1
  37. package/dist/ai/providers/index.d.ts +1 -1
  38. package/dist/ai/providers/index.js +0 -2
  39. package/dist/ai/providers/index.js.map +1 -1
  40. package/dist/ai/providers/registry.d.ts +24 -28
  41. package/dist/ai/providers/registry.js +184 -138
  42. package/dist/ai/providers/registry.js.map +1 -1
  43. package/dist/ai/providers/types.d.ts +12 -33
  44. package/dist/ai/providers/types.js +0 -1
  45. package/dist/ai/providers/types.js.map +1 -1
  46. package/dist/ai/schemas/lexicalJsonSchema.js +1 -1
  47. package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -1
  48. package/dist/ai/utilities/filterEditorSchemaByNodes.js.map +1 -0
  49. package/dist/ai/utilities/generateFileNameByPrompt.js.map +1 -0
  50. package/dist/ai/utilities/isObjectSchema.js.map +1 -0
  51. package/dist/ai/{utils → utilities}/nodeToSchemaMap.js +6 -6
  52. package/dist/ai/utilities/nodeToSchemaMap.js.map +1 -0
  53. package/dist/ai/{prompts.d.ts → utilities/prompts.d.ts} +1 -1
  54. package/dist/ai/utilities/prompts.js.map +1 -0
  55. package/dist/ai/utilities/systemGenerate.js.map +1 -0
  56. package/dist/collections/AIJobs.js +3 -12
  57. package/dist/collections/AIJobs.js.map +1 -1
  58. package/dist/collections/AIProviders.js +56 -29
  59. package/dist/collections/AIProviders.js.map +1 -1
  60. package/dist/collections/Instructions.js +91 -59
  61. package/dist/collections/Instructions.js.map +1 -1
  62. package/dist/collections/shared.d.ts +30 -0
  63. package/dist/collections/shared.js +15 -0
  64. package/dist/collections/shared.js.map +1 -0
  65. package/dist/endpoints/fetchFields.js +14 -6
  66. package/dist/endpoints/fetchFields.js.map +1 -1
  67. package/dist/endpoints/fetchVoices.js +1 -1
  68. package/dist/endpoints/fetchVoices.js.map +1 -1
  69. package/dist/endpoints/generate.d.ts +7 -0
  70. package/dist/endpoints/generate.js +268 -0
  71. package/dist/endpoints/generate.js.map +1 -0
  72. package/dist/endpoints/index.js +9 -639
  73. package/dist/endpoints/index.js.map +1 -1
  74. package/dist/endpoints/promptMentions.d.ts +2 -0
  75. package/dist/endpoints/promptMentions.js +166 -0
  76. package/dist/endpoints/promptMentions.js.map +1 -0
  77. package/dist/endpoints/upload.d.ts +7 -0
  78. package/dist/endpoints/upload.js +294 -0
  79. package/dist/endpoints/upload.js.map +1 -0
  80. package/dist/endpoints/videogenWebhook.d.ts +7 -0
  81. package/dist/endpoints/videogenWebhook.js +132 -0
  82. package/dist/endpoints/videogenWebhook.js.map +1 -0
  83. package/dist/exports/client.d.ts +2 -1
  84. package/dist/exports/client.js +2 -1
  85. package/dist/exports/client.js.map +1 -1
  86. package/dist/exports/fields.d.ts +2 -1
  87. package/dist/exports/fields.js +2 -1
  88. package/dist/exports/fields.js.map +1 -1
  89. package/dist/fields/ArrayComposeField/ArrayComposeField.js +1 -1
  90. package/dist/fields/ArrayComposeField/ArrayComposeField.js.map +1 -1
  91. package/dist/fields/ArrayComposeField/ArrayComposeField.jsx +1 -1
  92. package/dist/fields/ComposeField/ComposeField.d.ts +1 -0
  93. package/dist/fields/ComposeField/ComposeField.js +18 -8
  94. package/dist/fields/ComposeField/ComposeField.js.map +1 -1
  95. package/dist/fields/ComposeField/ComposeField.jsx +12 -7
  96. package/dist/fields/LexicalEditor/feature.server.js +1 -1
  97. package/dist/fields/LexicalEditor/feature.server.js.map +1 -1
  98. package/dist/fields/PromptEditorField/feature.client.d.ts +1 -0
  99. package/dist/fields/PromptEditorField/feature.client.js +173 -0
  100. package/dist/fields/PromptEditorField/feature.client.js.map +1 -0
  101. package/dist/fields/PromptEditorField/feature.client.jsx +148 -0
  102. package/dist/fields/PromptEditorField/feature.server.d.ts +1 -0
  103. package/dist/fields/PromptEditorField/feature.server.js +30 -0
  104. package/dist/fields/PromptEditorField/feature.server.js.map +1 -0
  105. package/dist/fields/PromptField.d.ts +4 -0
  106. package/dist/fields/PromptField.js +18 -0
  107. package/dist/fields/PromptField.js.map +1 -0
  108. package/dist/fields/SelectField/SelectField.js +0 -1
  109. package/dist/fields/SelectField/SelectField.js.map +1 -1
  110. package/dist/fields/SelectField/SelectField.jsx +0 -1
  111. package/dist/index.d.ts +4 -3
  112. package/dist/index.js +4 -2
  113. package/dist/index.js.map +1 -1
  114. package/dist/libraries/handlebars/helpers.js +2 -2
  115. package/dist/libraries/handlebars/helpers.js.map +1 -1
  116. package/dist/libraries/handlebars/replacePlaceholders.js +5 -1
  117. package/dist/libraries/handlebars/replacePlaceholders.js.map +1 -1
  118. package/dist/payload-ai.d.ts +5 -19
  119. package/dist/plugin.js +18 -21
  120. package/dist/plugin.js.map +1 -1
  121. package/dist/providers/FieldProvider/FieldProvider.js +11 -20
  122. package/dist/providers/FieldProvider/FieldProvider.js.map +1 -1
  123. package/dist/providers/FieldProvider/FieldProvider.jsx +8 -18
  124. package/dist/providers/InstructionsProvider/InstructionsProvider.js +5 -2
  125. package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
  126. package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +5 -2
  127. package/dist/translations/de.json +47 -0
  128. package/dist/translations/en.json +45 -2
  129. package/dist/translations/es.json +45 -2
  130. package/dist/translations/fa.json +45 -2
  131. package/dist/translations/fr.json +46 -3
  132. package/dist/translations/hi.json +47 -0
  133. package/dist/translations/index.d.ts +88 -26
  134. package/dist/translations/index.js +18 -32
  135. package/dist/translations/index.js.map +1 -1
  136. package/dist/translations/ja.json +47 -0
  137. package/dist/translations/nb.json +47 -0
  138. package/dist/translations/nl.json +47 -0
  139. package/dist/translations/pl.json +45 -2
  140. package/dist/translations/pt.json +47 -0
  141. package/dist/translations/ru.json +45 -2
  142. package/dist/translations/th.json +47 -0
  143. package/dist/translations/translation-schema.json +184 -11
  144. package/dist/translations/uk.json +45 -2
  145. package/dist/translations/zh.json +47 -0
  146. package/dist/types.d.ts +64 -28
  147. package/dist/types.js.map +1 -1
  148. package/dist/ui/Compose/Compose.js +42 -79
  149. package/dist/ui/Compose/Compose.js.map +1 -1
  150. package/dist/ui/Compose/Compose.jsx +32 -86
  151. package/dist/ui/Compose/ComposePlaceholder.js +1 -1
  152. package/dist/ui/Compose/ComposePlaceholder.js.map +1 -1
  153. package/dist/ui/Compose/ComposePlaceholder.jsx +1 -1
  154. package/dist/ui/Compose/{compose.module.css → compose.module.scss} +3 -5
  155. package/dist/ui/Compose/hooks/menu/Item.d.ts +1 -1
  156. package/dist/ui/Compose/hooks/menu/Item.js +7 -3
  157. package/dist/ui/Compose/hooks/menu/Item.js.map +1 -1
  158. package/dist/ui/Compose/hooks/menu/Item.jsx +11 -5
  159. package/dist/ui/Compose/hooks/menu/TranslateMenu.js +15 -5
  160. package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -1
  161. package/dist/ui/Compose/hooks/menu/TranslateMenu.jsx +11 -5
  162. package/dist/ui/Compose/hooks/menu/items.d.ts +8 -8
  163. package/dist/ui/Compose/hooks/menu/itemsMap.d.ts +2 -1
  164. package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -1
  165. package/dist/ui/Compose/hooks/menu/types.d.ts +21 -0
  166. package/dist/ui/Compose/hooks/menu/types.js +3 -0
  167. package/dist/ui/Compose/hooks/menu/types.js.map +1 -0
  168. package/dist/ui/Compose/hooks/menu/useMenu.d.ts +2 -2
  169. package/dist/ui/Compose/hooks/menu/useMenu.js +45 -23
  170. package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
  171. package/dist/ui/Compose/hooks/menu/useMenu.jsx +43 -23
  172. package/dist/ui/Compose/hooks/mergeGeneratedValue.d.ts +14 -0
  173. package/dist/ui/Compose/hooks/mergeGeneratedValue.js +38 -0
  174. package/dist/ui/Compose/hooks/mergeGeneratedValue.js.map +1 -0
  175. package/dist/ui/Compose/hooks/useGenerate.js +37 -12
  176. package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
  177. package/dist/ui/Compose/hooks/useGenerateUpload.js +66 -24
  178. package/dist/ui/Compose/hooks/useGenerateUpload.js.map +1 -1
  179. package/dist/ui/Compose/hooks/useHistory.js +1 -1
  180. package/dist/ui/Compose/hooks/useHistory.js.map +1 -1
  181. package/dist/ui/Compose/hooks/useStreamingUpdate.js +4 -4
  182. package/dist/ui/Compose/hooks/useStreamingUpdate.js.map +1 -1
  183. package/dist/ui/ConfigDashboard/configDashboard.module.css +94 -0
  184. package/dist/ui/ConfigDashboard/index.js +27 -92
  185. package/dist/ui/ConfigDashboard/index.js.map +1 -1
  186. package/dist/ui/ConfigDashboard/index.jsx +24 -77
  187. package/dist/ui/DynamicModelSelect/index.js +6 -27
  188. package/dist/ui/DynamicModelSelect/index.js.map +1 -1
  189. package/dist/ui/DynamicModelSelect/index.jsx +6 -29
  190. package/dist/ui/DynamicProviderSelect/index.js +6 -27
  191. package/dist/ui/DynamicProviderSelect/index.js.map +1 -1
  192. package/dist/ui/DynamicProviderSelect/index.jsx +6 -29
  193. package/dist/ui/DynamicVoiceSelect/index.js +34 -83
  194. package/dist/ui/DynamicVoiceSelect/index.js.map +1 -1
  195. package/dist/ui/DynamicVoiceSelect/index.jsx +16 -53
  196. package/dist/ui/GlobalProviderOptions/index.d.ts +2 -0
  197. package/dist/ui/GlobalProviderOptions/index.js +118 -0
  198. package/dist/ui/GlobalProviderOptions/index.js.map +1 -0
  199. package/dist/ui/GlobalProviderOptions/index.jsx +60 -0
  200. package/dist/ui/Icons/Icons.js +1 -1
  201. package/dist/ui/Icons/Icons.js.map +1 -1
  202. package/dist/ui/Icons/Icons.jsx +1 -1
  203. package/dist/ui/Icons/LottieAnimation.js +1 -1
  204. package/dist/ui/Icons/LottieAnimation.js.map +1 -1
  205. package/dist/ui/Icons/LottieAnimation.jsx +1 -1
  206. package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.d.ts +12 -0
  207. package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.js +166 -0
  208. package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.js.map +1 -0
  209. package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.jsx +83 -0
  210. package/dist/ui/InstructionProviderOptions/index.d.ts +2 -0
  211. package/dist/ui/InstructionProviderOptions/index.js +157 -0
  212. package/dist/ui/InstructionProviderOptions/index.js.map +1 -0
  213. package/dist/ui/InstructionProviderOptions/index.jsx +92 -0
  214. package/dist/ui/VoicesFetcher/index.js.map +1 -1
  215. package/dist/ui/hooks/useAISettings.d.ts +26 -0
  216. package/dist/ui/hooks/useAISettings.js +73 -0
  217. package/dist/ui/hooks/useAISettings.js.map +1 -0
  218. package/dist/ui/providerOptions/updateProviderOptionsValue.d.ts +6 -0
  219. package/dist/ui/providerOptions/updateProviderOptionsValue.js +50 -0
  220. package/dist/ui/providerOptions/updateProviderOptionsValue.js.map +1 -0
  221. package/dist/ui/shared/handleSelectChange.d.ts +5 -0
  222. package/dist/ui/shared/handleSelectChange.js +12 -0
  223. package/dist/ui/shared/handleSelectChange.js.map +1 -0
  224. package/dist/ui/shared/types.d.ts +11 -0
  225. package/dist/ui/shared/types.js +5 -0
  226. package/dist/ui/shared/types.js.map +1 -0
  227. package/dist/utilities/ai/resolveEffectiveInstructionSettings.d.ts +15 -0
  228. package/dist/utilities/ai/resolveEffectiveInstructionSettings.js +136 -0
  229. package/dist/utilities/ai/resolveEffectiveInstructionSettings.js.map +1 -0
  230. package/dist/{endpoints → utilities}/buildPromptUtils.js +14 -5
  231. package/dist/utilities/buildPromptUtils.js.map +1 -0
  232. package/dist/utilities/buildSmartPrompt.js +3 -3
  233. package/dist/utilities/buildSmartPrompt.js.map +1 -1
  234. package/dist/utilities/fields/fieldToJsonSchema.js.map +1 -0
  235. package/dist/utilities/fields/getFieldBySchemaPath.js.map +1 -0
  236. package/dist/utilities/fields/getFieldInfo.js.map +1 -0
  237. package/dist/utilities/{updateFieldsConfig.js → fields/updateFieldsConfig.js} +8 -3
  238. package/dist/utilities/fields/updateFieldsConfig.js.map +1 -0
  239. package/dist/utilities/images/extractImageData.js.map +1 -0
  240. package/dist/utilities/images/extractPromptAttachments.js.map +1 -0
  241. package/dist/utilities/{fetchImages.d.ts → images/fetchImages.d.ts} +1 -1
  242. package/dist/utilities/images/fetchImages.js +49 -0
  243. package/dist/utilities/images/fetchImages.js.map +1 -0
  244. package/dist/utilities/images/resolveImageReferences.js +183 -0
  245. package/dist/utilities/images/resolveImageReferences.js.map +1 -0
  246. package/dist/utilities/init/autoSetupProviders.d.ts +3 -0
  247. package/dist/utilities/init/autoSetupProviders.js +216 -0
  248. package/dist/utilities/init/autoSetupProviders.js.map +1 -0
  249. package/dist/utilities/lexical/editorSchemaValidator.js.map +1 -0
  250. package/dist/utilities/lexical/lexicalToHTML.js.map +1 -0
  251. package/dist/utilities/lexical/lexicalToPromptTemplate.d.ts +2 -0
  252. package/dist/utilities/lexical/lexicalToPromptTemplate.js +50 -0
  253. package/dist/utilities/lexical/lexicalToPromptTemplate.js.map +1 -0
  254. package/dist/utilities/lexical/setSafeLexicalState.js.map +1 -0
  255. package/dist/utilities/lexical/stringToLexicalJSON.d.ts +2 -0
  256. package/dist/utilities/lexical/stringToLexicalJSON.js +39 -0
  257. package/dist/utilities/lexical/stringToLexicalJSON.js.map +1 -0
  258. package/dist/utilities/sanitizeLog.d.ts +1 -0
  259. package/dist/utilities/sanitizeLog.js +39 -0
  260. package/dist/utilities/sanitizeLog.js.map +1 -0
  261. package/dist/utilities/seedProperties.js +54 -22
  262. package/dist/utilities/seedProperties.js.map +1 -1
  263. package/package.json +36 -2
  264. package/dist/ai/analyse.d.ts +0 -1
  265. package/dist/ai/analyse.js +0 -3
  266. package/dist/ai/analyse.js.map +0 -1
  267. package/dist/ai/index.d.ts +0 -11
  268. package/dist/ai/index.js +0 -25
  269. package/dist/ai/index.js.map +0 -1
  270. package/dist/ai/prompts.js.map +0 -1
  271. package/dist/ai/utils/filterEditorSchemaByNodes.js.map +0 -1
  272. package/dist/ai/utils/generateFileNameByPrompt.js.map +0 -1
  273. package/dist/ai/utils/isObjectSchema.js.map +0 -1
  274. package/dist/ai/utils/nodeToSchemaMap.js.map +0 -1
  275. package/dist/ai/utils/systemGenerate.js.map +0 -1
  276. package/dist/endpoints/buildPromptUtils.js.map +0 -1
  277. package/dist/endpoints/chat.d.ts +0 -4
  278. package/dist/fields/PromptEditorField/PromptEditorField.d.ts +0 -3
  279. package/dist/fields/PromptEditorField/PromptEditorField.js +0 -217
  280. package/dist/fields/PromptEditorField/PromptEditorField.js.map +0 -1
  281. package/dist/fields/PromptEditorField/PromptEditorField.jsx +0 -160
  282. package/dist/ui/AIConfigDashboard/index.d.ts +0 -2
  283. package/dist/ui/AIConfigDashboard/index.js +0 -224
  284. package/dist/ui/AIConfigDashboard/index.js.map +0 -1
  285. package/dist/ui/AIConfigDashboard/index.jsx +0 -175
  286. package/dist/ui/ProviderOptionsEditor/index.d.ts +0 -7
  287. package/dist/ui/ProviderOptionsEditor/index.js +0 -291
  288. package/dist/ui/ProviderOptionsEditor/index.js.map +0 -1
  289. package/dist/ui/ProviderOptionsEditor/index.jsx +0 -210
  290. package/dist/utilities/editorSchemaValidator.js.map +0 -1
  291. package/dist/utilities/extractImageData.js.map +0 -1
  292. package/dist/utilities/extractPromptAttachments.js.map +0 -1
  293. package/dist/utilities/fetchImages.js +0 -38
  294. package/dist/utilities/fetchImages.js.map +0 -1
  295. package/dist/utilities/fieldToJsonSchema.js.map +0 -1
  296. package/dist/utilities/getFieldBySchemaPath.js.map +0 -1
  297. package/dist/utilities/getFieldInfo.js.map +0 -1
  298. package/dist/utilities/getProviderOptionsFields.d.ts +0 -16
  299. package/dist/utilities/getProviderOptionsFields.js +0 -80
  300. package/dist/utilities/getProviderOptionsFields.js.map +0 -1
  301. package/dist/utilities/isPluginActivated.d.ts +0 -2
  302. package/dist/utilities/isPluginActivated.js +0 -5
  303. package/dist/utilities/isPluginActivated.js.map +0 -1
  304. package/dist/utilities/lexicalToHTML.js.map +0 -1
  305. package/dist/utilities/resolveImageReferences.js +0 -167
  306. package/dist/utilities/resolveImageReferences.js.map +0 -1
  307. package/dist/utilities/schemaConverter.d.ts +0 -3
  308. package/dist/utilities/schemaConverter.js +0 -93
  309. package/dist/utilities/schemaConverter.js.map +0 -1
  310. package/dist/utilities/setSafeLexicalState.js.map +0 -1
  311. package/dist/utilities/updateFieldsConfig.js.map +0 -1
  312. /package/dist/ai/{utils → utilities}/filterEditorSchemaByNodes.d.ts +0 -0
  313. /package/dist/ai/{utils → utilities}/filterEditorSchemaByNodes.js +0 -0
  314. /package/dist/ai/{utils → utilities}/generateFileNameByPrompt.d.ts +0 -0
  315. /package/dist/ai/{utils → utilities}/generateFileNameByPrompt.js +0 -0
  316. /package/dist/ai/{utils → utilities}/isObjectSchema.d.ts +0 -0
  317. /package/dist/ai/{utils → utilities}/isObjectSchema.js +0 -0
  318. /package/dist/ai/{utils → utilities}/nodeToSchemaMap.d.ts +0 -0
  319. /package/dist/ai/{prompts.js → utilities/prompts.js} +0 -0
  320. /package/dist/ai/{utils → utilities}/systemGenerate.d.ts +0 -0
  321. /package/dist/ai/{utils → utilities}/systemGenerate.js +0 -0
  322. /package/dist/ui/Icons/{icons.module.css → icons.module.scss} +0 -0
  323. /package/dist/{endpoints → utilities}/buildPromptUtils.d.ts +0 -0
  324. /package/dist/utilities/{fieldToJsonSchema.d.ts → fields/fieldToJsonSchema.d.ts} +0 -0
  325. /package/dist/utilities/{fieldToJsonSchema.js → fields/fieldToJsonSchema.js} +0 -0
  326. /package/dist/utilities/{getFieldBySchemaPath.d.ts → fields/getFieldBySchemaPath.d.ts} +0 -0
  327. /package/dist/utilities/{getFieldBySchemaPath.js → fields/getFieldBySchemaPath.js} +0 -0
  328. /package/dist/utilities/{getFieldInfo.d.ts → fields/getFieldInfo.d.ts} +0 -0
  329. /package/dist/utilities/{getFieldInfo.js → fields/getFieldInfo.js} +0 -0
  330. /package/dist/utilities/{updateFieldsConfig.d.ts → fields/updateFieldsConfig.d.ts} +0 -0
  331. /package/dist/utilities/{extractImageData.d.ts → images/extractImageData.d.ts} +0 -0
  332. /package/dist/utilities/{extractImageData.js → images/extractImageData.js} +0 -0
  333. /package/dist/utilities/{extractPromptAttachments.d.ts → images/extractPromptAttachments.d.ts} +0 -0
  334. /package/dist/utilities/{extractPromptAttachments.js → images/extractPromptAttachments.js} +0 -0
  335. /package/dist/utilities/{resolveImageReferences.d.ts → images/resolveImageReferences.d.ts} +0 -0
  336. /package/dist/utilities/{editorSchemaValidator.d.ts → lexical/editorSchemaValidator.d.ts} +0 -0
  337. /package/dist/utilities/{editorSchemaValidator.js → lexical/editorSchemaValidator.js} +0 -0
  338. /package/dist/utilities/{lexicalToHTML.d.ts → lexical/lexicalToHTML.d.ts} +0 -0
  339. /package/dist/utilities/{lexicalToHTML.js → lexical/lexicalToHTML.js} +0 -0
  340. /package/dist/utilities/{setSafeLexicalState.d.ts → lexical/setSafeLexicalState.d.ts} +0 -0
  341. /package/dist/utilities/{setSafeLexicalState.js → lexical/setSafeLexicalState.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/getFieldBySchemaPath.ts"],"sourcesContent":["import type { ClientCollectionConfig, CollectionConfig, Field } from 'payload'\n\ntype AnyCollectionConfig = ClientCollectionConfig | CollectionConfig\n\n/**\n * Resolve a Payload field definition by a full schemaPath like:\n * \"{collectionSlug}.fieldA.subFieldB.blockSlug.innerField\"\n *\n * Notes:\n * - Tabs are a UI construct and are not part of schemaPath (fields inside tabs are at the same level).\n * - Blocks include the block slug as part of the path (we must consume it between the block field and its inner fields).\n * - Rows are skipped by this plugin&#39;s schema path mapping; support added defensively.\n */\nexport const getFieldBySchemaPath = (\n collectionConfig: AnyCollectionConfig,\n schemaPath: string,\n): Field | null => {\n if (!collectionConfig || !schemaPath) {\n return null\n }\n\n const parts = schemaPath.split('.')\n if (!parts.length) {\n return null\n }\n\n // Strip the collection slug prefix if present\n const [collectionSlug, ...rest] = parts\n const pathParts =\n collectionSlug === collectionConfig.slug ? rest.filter(Boolean) : parts.filter(Boolean)\n\n if (!pathParts.length) {\n return null\n }\n\n const findInFields = (fields: Field[], segments: string[]): Field | null => {\n if (!segments.length) {\n return null\n }\n\n const [current, ...remaining] = segments\n\n // First, try to match a field by name\n for (const field of fields) {\n // Tabs do not contribute to path segments; search inside all tabs with the same segments\n if ((field as any).tabs) {\n const tabs = (field as any).tabs as Array<{ fields?: Field[] }>\n for (const tab of tabs) {\n const foundInTab =\n tab.fields && tab.fields.length ? findInFields(tab.fields, segments) : null\n if (foundInTab) {\n return foundInTab\n }\n }\n }\n\n // Handle unnamed groups and collapsibles (they don't contribute to path)\n // Groups without names are just wrappers, their children are at the same path level\n if ((field as any).type === 'group' && !(field as any).name && (field as any).fields) {\n const foundInUnnamedGroup = findInFields((field as any).fields, segments)\n if (foundInUnnamedGroup) {\n return foundInUnnamedGroup\n }\n }\n\n // Handle unnamed collapsibles similarly\n if ((field as any).type === 'collapsible' && (field as any).fields) {\n const foundInCollapsible = findInFields((field as any).fields, segments)\n if (foundInCollapsible) {\n return foundInCollapsible\n }\n }\n\n if ((field as any).name === current) {\n // If this is the last segment, we found the target field\n if (remaining.length === 0) {\n return field\n }\n\n // Recurse into composite field types\n if ((field as any).fields && Array.isArray((field as any).fields)) {\n const found = findInFields((field as any).fields, remaining)\n if (found) {\n return found\n }\n }\n\n if ((field as any).blocks && Array.isArray((field as any).blocks)) {\n // Next segment should be a block slug, then continue into block fields\n if (!remaining.length) {\n return field\n } // path stops at block container (unlikely for our mapping)\n const [blockSlug, ...afterBlock] = remaining\n const blocks = (field as any).blocks as Array<{ fields: Field[]; slug: string }>\n const block = blocks.find((b) => b.slug === blockSlug)\n if (block) {\n const found = findInFields(block.fields, afterBlock)\n if (found) {\n return found\n }\n }\n }\n }\n }\n\n // Not found at this level\n return null\n }\n\n const rootFields = (collectionConfig as any).fields as Field[] | undefined\n if (!rootFields || !Array.isArray(rootFields)) {\n return null\n }\n\n return findInFields(rootFields, pathParts)\n}\n"],"names":["getFieldBySchemaPath","collectionConfig","schemaPath","parts","split","length","collectionSlug","rest","pathParts","slug","filter","Boolean","findInFields","fields","segments","current","remaining","field","tabs","tab","foundInTab","type","name","foundInUnnamedGroup","foundInCollapsible","Array","isArray","found","blocks","blockSlug","afterBlock","block","find","b","rootFields"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/getFieldInfo.ts"],"sourcesContent":["import type { BasePayload } from 'payload'\n\nimport { getFieldBySchemaPath } from './getFieldBySchemaPath.js'\n\nexport const getFieldInfo = (collections: BasePayload['collections'], schemaPath: string) => {\n let fieldInfo = null\n //TODO: Only run below for enabled collections\n for (const collectionsKey in collections) {\n const collection = collections[collectionsKey]\n fieldInfo = getFieldBySchemaPath(collection.config, schemaPath)\n if (fieldInfo) {\n return fieldInfo\n }\n }\n}\n"],"names":["getFieldBySchemaPath","getFieldInfo","collections","schemaPath","fieldInfo","collectionsKey","collection","config"],"mappings":"AAEA,SAASA,oBAAoB,QAAQ,4BAA2B;AAEhE,OAAO,MAAMC,eAAe,CAACC,aAAyCC;IACpE,IAAIC,YAAY;IAChB,8CAA8C;IAC9C,IAAK,MAAMC,kBAAkBH,YAAa;QACxC,MAAMI,aAAaJ,WAAW,CAACG,eAAe;QAC9CD,YAAYJ,qBAAqBM,WAAWC,MAAM,EAAEJ;QACpD,IAAIC,WAAW;YACb,OAAOA;QACT;IACF;AACF,EAAC"}
@@ -1,16 +0,0 @@
1
- import type { Field } from 'payload';
2
- type UseCase = 'image' | 'text' | 'tts' | 'video';
3
- /**
4
- * Extract provider options fields for a given provider and use case.
5
- * Returns the inner fields of the {useCase}ProviderOptions group.
6
- */
7
- export declare function getProviderOptionsFields(providerSlug: string, useCase: UseCase): Field[];
8
- /**
9
- * Get the default values from provider options fields
10
- */
11
- export declare function getProviderOptionsDefaults(providerSlug: string, useCase: UseCase): Record<string, unknown>;
12
- /**
13
- * Check if a provider supports a given use case
14
- */
15
- export declare function providerSupportsUseCase(providerSlug: string, useCase: UseCase): boolean;
16
- export {};
@@ -1,80 +0,0 @@
1
- import { allProviderBlocks } from '../ai/providers/blocks/index.js';
2
- /**
3
- * Get the provider options field group name for a given use case
4
- */ function getOptionsGroupName(useCase) {
5
- return `${useCase}ProviderOptions`;
6
- }
7
- /**
8
- * Find a field by name within a block's fields, searching through tabs
9
- */ function findFieldInBlock(block, fieldName) {
10
- const searchFields = (fields)=>{
11
- for (const field of fields){
12
- if ('name' in field && field.name === fieldName) {
13
- return field;
14
- }
15
- if (field.type === 'tabs' && 'tabs' in field) {
16
- for (const tab of field.tabs){
17
- const found = searchFields(tab.fields);
18
- if (found) {
19
- return found;
20
- }
21
- }
22
- }
23
- if (field.type === 'group' && 'fields' in field) {
24
- const found = searchFields(field.fields);
25
- if (found) {
26
- return found;
27
- }
28
- }
29
- }
30
- return undefined;
31
- };
32
- return searchFields(block.fields);
33
- }
34
- /**
35
- * Extract provider options fields for a given provider and use case.
36
- * Returns the inner fields of the {useCase}ProviderOptions group.
37
- */ export function getProviderOptionsFields(providerSlug, useCase) {
38
- const block = allProviderBlocks.find((b)=>b.slug === providerSlug);
39
- if (!block) {
40
- return [];
41
- }
42
- const groupName = getOptionsGroupName(useCase);
43
- const optionsGroup = findFieldInBlock(block, groupName);
44
- if (optionsGroup && optionsGroup.type === 'group' && 'fields' in optionsGroup) {
45
- return optionsGroup.fields;
46
- }
47
- return [];
48
- }
49
- /**
50
- * Get the default values from provider options fields
51
- */ export function getProviderOptionsDefaults(providerSlug, useCase) {
52
- const fields = getProviderOptionsFields(providerSlug, useCase);
53
- const defaults = {};
54
- for (const field of fields){
55
- if ('name' in field && 'defaultValue' in field && field.defaultValue !== undefined) {
56
- defaults[field.name] = field.defaultValue;
57
- }
58
- // Handle nested groups (like voice_settings in ElevenLabs)
59
- if (field.type === 'group' && 'fields' in field && 'name' in field) {
60
- const nestedDefaults = {};
61
- for (const nestedField of field.fields){
62
- if ('name' in nestedField && 'defaultValue' in nestedField && nestedField.defaultValue !== undefined) {
63
- nestedDefaults[nestedField.name] = nestedField.defaultValue;
64
- }
65
- }
66
- if (Object.keys(nestedDefaults).length > 0) {
67
- defaults[field.name] = nestedDefaults;
68
- }
69
- }
70
- }
71
- return defaults;
72
- }
73
- /**
74
- * Check if a provider supports a given use case
75
- */ export function providerSupportsUseCase(providerSlug, useCase) {
76
- const fields = getProviderOptionsFields(providerSlug, useCase);
77
- return fields.length > 0;
78
- }
79
-
80
- //# sourceMappingURL=getProviderOptionsFields.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/getProviderOptionsFields.ts"],"sourcesContent":["import type { Block, ClientField, Field } from 'payload'\n\nimport { allProviderBlocks } from '../ai/providers/blocks/index.js'\n\ntype UseCase = 'image' | 'text' | 'tts' | 'video'\n\n/**\n * Get the provider options field group name for a given use case\n */\nfunction getOptionsGroupName(useCase: UseCase): string {\n return `${useCase}ProviderOptions`\n}\n\n/**\n * Find a field by name within a block's fields, searching through tabs\n */\nfunction findFieldInBlock(block: Block, fieldName: string): Field | undefined {\n const searchFields = (fields: Field[]): Field | undefined => {\n for (const field of fields) {\n if ('name' in field && field.name === fieldName) {\n return field\n }\n if (field.type === 'tabs' && 'tabs' in field) {\n for (const tab of field.tabs) {\n const found = searchFields(tab.fields)\n if (found) {return found}\n }\n }\n if (field.type === 'group' && 'fields' in field) {\n const found = searchFields(field.fields)\n if (found) {return found}\n }\n }\n return undefined\n }\n \n return searchFields(block.fields)\n}\n\n/**\n * Extract provider options fields for a given provider and use case.\n * Returns the inner fields of the {useCase}ProviderOptions group.\n */\nexport function getProviderOptionsFields(\n providerSlug: string,\n useCase: UseCase\n): Field[] {\n const block = allProviderBlocks.find((b) => b.slug === providerSlug)\n if (!block) {\n return []\n }\n\n const groupName = getOptionsGroupName(useCase)\n const optionsGroup = findFieldInBlock(block, groupName)\n\n if (optionsGroup && optionsGroup.type === 'group' && 'fields' in optionsGroup) {\n return optionsGroup.fields\n }\n\n return []\n}\n\n/**\n * Get the default values from provider options fields\n */\nexport function getProviderOptionsDefaults(\n providerSlug: string,\n useCase: UseCase\n): Record<string, unknown> {\n const fields = getProviderOptionsFields(providerSlug, useCase)\n const defaults: Record<string, unknown> = {}\n\n for (const field of fields) {\n if ('name' in field && 'defaultValue' in field && field.defaultValue !== undefined) {\n defaults[field.name] = field.defaultValue\n }\n // Handle nested groups (like voice_settings in ElevenLabs)\n if (field.type === 'group' && 'fields' in field && 'name' in field) {\n const nestedDefaults: Record<string, unknown> = {}\n for (const nestedField of field.fields) {\n if ('name' in nestedField && 'defaultValue' in nestedField && nestedField.defaultValue !== undefined) {\n nestedDefaults[nestedField.name] = nestedField.defaultValue\n }\n }\n if (Object.keys(nestedDefaults).length > 0) {\n defaults[field.name] = nestedDefaults\n }\n }\n }\n\n return defaults\n}\n\n/**\n * Check if a provider supports a given use case\n */\nexport function providerSupportsUseCase(providerSlug: string, useCase: UseCase): boolean {\n const fields = getProviderOptionsFields(providerSlug, useCase)\n return fields.length > 0\n}\n"],"names":["allProviderBlocks","getOptionsGroupName","useCase","findFieldInBlock","block","fieldName","searchFields","fields","field","name","type","tab","tabs","found","undefined","getProviderOptionsFields","providerSlug","find","b","slug","groupName","optionsGroup","getProviderOptionsDefaults","defaults","defaultValue","nestedDefaults","nestedField","Object","keys","length","providerSupportsUseCase"],"mappings":"AAEA,SAASA,iBAAiB,QAAQ,kCAAiC;AAInE;;CAEC,GACD,SAASC,oBAAoBC,OAAgB;IAC3C,OAAO,CAAC,EAAEA,QAAQ,eAAe,CAAC;AACpC;AAEA;;CAEC,GACD,SAASC,iBAAiBC,KAAY,EAAEC,SAAiB;IACvD,MAAMC,eAAe,CAACC;QACpB,KAAK,MAAMC,SAASD,OAAQ;YAC1B,IAAI,UAAUC,SAASA,MAAMC,IAAI,KAAKJ,WAAW;gBAC/C,OAAOG;YACT;YACA,IAAIA,MAAME,IAAI,KAAK,UAAU,UAAUF,OAAO;gBAC5C,KAAK,MAAMG,OAAOH,MAAMI,IAAI,CAAE;oBAC5B,MAAMC,QAAQP,aAAaK,IAAIJ,MAAM;oBACrC,IAAIM,OAAO;wBAAC,OAAOA;oBAAK;gBAC1B;YACF;YACA,IAAIL,MAAME,IAAI,KAAK,WAAW,YAAYF,OAAO;gBAC/C,MAAMK,QAAQP,aAAaE,MAAMD,MAAM;gBACvC,IAAIM,OAAO;oBAAC,OAAOA;gBAAK;YAC1B;QACF;QACA,OAAOC;IACT;IAEA,OAAOR,aAAaF,MAAMG,MAAM;AAClC;AAEA;;;CAGC,GACD,OAAO,SAASQ,yBACdC,YAAoB,EACpBd,OAAgB;IAEhB,MAAME,QAAQJ,kBAAkBiB,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKH;IACvD,IAAI,CAACZ,OAAO;QACV,OAAO,EAAE;IACX;IAEA,MAAMgB,YAAYnB,oBAAoBC;IACtC,MAAMmB,eAAelB,iBAAiBC,OAAOgB;IAE7C,IAAIC,gBAAgBA,aAAaX,IAAI,KAAK,WAAW,YAAYW,cAAc;QAC7E,OAAOA,aAAad,MAAM;IAC5B;IAEA,OAAO,EAAE;AACX;AAEA;;CAEC,GACD,OAAO,SAASe,2BACdN,YAAoB,EACpBd,OAAgB;IAEhB,MAAMK,SAASQ,yBAAyBC,cAAcd;IACtD,MAAMqB,WAAoC,CAAC;IAE3C,KAAK,MAAMf,SAASD,OAAQ;QAC1B,IAAI,UAAUC,SAAS,kBAAkBA,SAASA,MAAMgB,YAAY,KAAKV,WAAW;YAClFS,QAAQ,CAACf,MAAMC,IAAI,CAAC,GAAGD,MAAMgB,YAAY;QAC3C;QACA,2DAA2D;QAC3D,IAAIhB,MAAME,IAAI,KAAK,WAAW,YAAYF,SAAS,UAAUA,OAAO;YAClE,MAAMiB,iBAA0C,CAAC;YACjD,KAAK,MAAMC,eAAelB,MAAMD,MAAM,CAAE;gBACtC,IAAI,UAAUmB,eAAe,kBAAkBA,eAAeA,YAAYF,YAAY,KAAKV,WAAW;oBACpGW,cAAc,CAACC,YAAYjB,IAAI,CAAC,GAAGiB,YAAYF,YAAY;gBAC7D;YACF;YACA,IAAIG,OAAOC,IAAI,CAACH,gBAAgBI,MAAM,GAAG,GAAG;gBAC1CN,QAAQ,CAACf,MAAMC,IAAI,CAAC,GAAGgB;YACzB;QACF;IACF;IAEA,OAAOF;AACT;AAEA;;CAEC,GACD,OAAO,SAASO,wBAAwBd,YAAoB,EAAEd,OAAgB;IAC5E,MAAMK,SAASQ,yBAAyBC,cAAcd;IACtD,OAAOK,OAAOsB,MAAM,GAAG;AACzB"}
@@ -1,2 +0,0 @@
1
- import type { PluginConfig } from '../types.js';
2
- export declare const isPluginActivated: (pluginConfig: PluginConfig) => boolean;
@@ -1,5 +0,0 @@
1
- export const isPluginActivated = (pluginConfig)=>{
2
- return !!pluginConfig;
3
- };
4
-
5
- //# sourceMappingURL=isPluginActivated.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/isPluginActivated.ts"],"sourcesContent":["import type { PluginConfig } from '../types.js'\n\nexport const isPluginActivated = (pluginConfig: PluginConfig) => {\n return !!pluginConfig\n}\n"],"names":["isPluginActivated","pluginConfig"],"mappings":"AAEA,OAAO,MAAMA,oBAAoB,CAACC;IAChC,OAAO,CAAC,CAACA;AACX,EAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/lexicalToHTML.ts"],"sourcesContent":["import type { SerializedEditorState } from 'lexical'\n\nimport {\n consolidateHTMLConverters,\n convertLexicalToHTML,\n type SanitizedServerEditorConfig,\n} from '@payloadcms/richtext-lexical'\n\nexport async function lexicalToHTML(\n editorData: SerializedEditorState,\n editorConfig: SanitizedServerEditorConfig,\n) {\n return await convertLexicalToHTML({\n converters: consolidateHTMLConverters({ editorConfig }),\n data: editorData,\n })\n}\n"],"names":["consolidateHTMLConverters","convertLexicalToHTML","lexicalToHTML","editorData","editorConfig","converters","data"],"mappings":"AAEA,SACEA,yBAAyB,EACzBC,oBAAoB,QAEf,+BAA8B;AAErC,OAAO,eAAeC,cACpBC,UAAiC,EACjCC,YAAyC;IAEzC,OAAO,MAAMH,qBAAqB;QAChCI,YAAYL,0BAA0B;YAAEI;QAAa;QACrDE,MAAMH;IACR;AACF"}
@@ -1,167 +0,0 @@
1
- /**
2
- * Retrieves a nested value from an object using dot-notation path.
3
- * For example, getNestedValue(obj, 'a.b.c') returns obj.a.b.c
4
- */ function getNestedValue(obj, path) {
5
- return path.split('.').reduce((current, key)=>{
6
- if (current && typeof current === 'object' && key in current) {
7
- return current[key];
8
- }
9
- return undefined;
10
- }, obj);
11
- }
12
- /**
13
- * Parses and resolves image references in prompts.
14
- *
15
- * Supports two formats:
16
- * - @fieldName - for single upload fields
17
- * - @collection.fieldName - schema path format (collection prefix is stripped)
18
- * - @fieldName:filename.jpg - for specific images in hasMany fields
19
- *
20
- * @param prompt - The prompt text containing @field references
21
- * @param contextData - The document data to resolve field values from
22
- * @param req - Payload request object for fetching media
23
- * @param collectionSlug - Optional collection slug to strip from schema path references
24
- * @returns Processed prompt with references removed and array of resolved images
25
- */ export async function resolveImageReferences(prompt, contextData, req, collectionSlug) {
26
- // Pattern matches: @fieldName or @fieldName:filename.ext (filename can have spaces)
27
- // The filename part matches everything up to and including an image extension
28
- const pattern = /@([\w.]+)(?::(.+?\.(?:png|jpe?g|webp|gif)))?/gi;
29
- const references = [];
30
- let match;
31
- // Extract all image references
32
- while((match = pattern.exec(prompt)) !== null){
33
- references.push({
34
- fieldName: match[1],
35
- filename: match[2],
36
- fullMatch: match[0]
37
- });
38
- }
39
- if (references.length === 0) {
40
- return {
41
- images: [],
42
- processedPrompt: prompt
43
- };
44
- }
45
- const resolvedImages = [];
46
- let processedPrompt = prompt;
47
- // Resolve each reference
48
- for (const ref of references){
49
- try {
50
- // Strip collection prefix from schema path if it matches the current collection
51
- // e.g., "characters.ortho3d.frame" becomes "ortho3d.frame" when collectionSlug is "characters"
52
- let fieldPath = ref.fieldName;
53
- if (collectionSlug && fieldPath.startsWith(`${collectionSlug}.`)) {
54
- fieldPath = fieldPath.slice(collectionSlug.length + 1);
55
- }
56
- const fieldValue = getNestedValue(contextData, fieldPath);
57
- if (!fieldValue) {
58
- req.payload.logger.warn(`Image reference @${ref.fieldName} not found in document context`);
59
- continue;
60
- }
61
- // Handle single upload field (value is an ID or object)
62
- if (!ref.filename) {
63
- const mediaDoc = await resolveMediaDocument(fieldValue, req);
64
- if (mediaDoc) {
65
- resolvedImages.push(formatImageData(mediaDoc));
66
- }
67
- } else {
68
- const mediaDoc = await resolveMediaFromArray(fieldValue, ref.filename, req);
69
- if (mediaDoc) {
70
- resolvedImages.push(formatImageData(mediaDoc));
71
- }
72
- }
73
- // Remove the reference from the prompt
74
- processedPrompt = processedPrompt.replace(ref.fullMatch, '');
75
- } catch (error) {
76
- req.payload.logger.error(error, `Error resolving image reference: ${ref.fullMatch}`);
77
- }
78
- }
79
- // Clean up extra whitespace from removed references
80
- processedPrompt = processedPrompt.replace(/\s+/g, ' ').trim();
81
- return {
82
- images: resolvedImages,
83
- processedPrompt
84
- };
85
- }
86
- /**
87
- * Resolves a single media document from an ID or populated object
88
- */ async function resolveMediaDocument(value, req) {
89
- // If it's already a populated object with required fields
90
- if (typeof value === 'object' && value !== null && 'url' in value) {
91
- return value;
92
- }
93
- // If it's an ID string, fetch the media document
94
- if (typeof value === 'string' || typeof value === 'number') {
95
- try {
96
- // Try to find which collection this media belongs to
97
- // First, check the common 'media' collection
98
- const collections = [
99
- 'media',
100
- 'uploads'
101
- ];
102
- for (const collectionSlug of collections){
103
- try {
104
- const mediaDoc = await req.payload.findByID({
105
- id: value,
106
- collection: collectionSlug,
107
- req
108
- });
109
- if (mediaDoc) {
110
- return mediaDoc;
111
- }
112
- } catch (_ignore) {
113
- continue;
114
- }
115
- }
116
- } catch (error) {
117
- req.payload.logger.error(error, 'Error fetching media document');
118
- }
119
- }
120
- return null;
121
- }
122
- /**
123
- * Resolves a specific media document from an array by matching filename
124
- */ async function resolveMediaFromArray(arrayValue, filename, req) {
125
- if (!Array.isArray(arrayValue)) {
126
- return null;
127
- }
128
- // Search through array for matching filename
129
- for (const item of arrayValue){
130
- const mediaDoc = await resolveMediaDocument(item, req);
131
- if (mediaDoc && matchesFilename(mediaDoc, filename)) {
132
- return mediaDoc;
133
- }
134
- }
135
- return null;
136
- }
137
- /**
138
- * Checks if a media document matches the given filename
139
- */ function matchesFilename(mediaDoc, filename) {
140
- const docFilename = mediaDoc.filename || mediaDoc.name;
141
- if (!docFilename) {
142
- return false;
143
- }
144
- // Case-insensitive match
145
- return docFilename.toLowerCase() === filename.toLowerCase();
146
- }
147
- /**
148
- * Formats media document into the expected image data structure
149
- */ function formatImageData(mediaDoc) {
150
- return {
151
- image: {
152
- name: mediaDoc.filename || mediaDoc.name || 'unknown',
153
- type: extractFileExtension(mediaDoc.filename || mediaDoc.name || ''),
154
- mimeType: mediaDoc.mimeType || mediaDoc.mimetype,
155
- thumbnailURL: mediaDoc.thumbnailURL,
156
- url: mediaDoc.url
157
- }
158
- };
159
- }
160
- /**
161
- * Extracts file extension from filename
162
- */ function extractFileExtension(filename) {
163
- const match = filename.match(/\.([^.]+)$/);
164
- return match ? match[1].toLowerCase() : 'unknown';
165
- }
166
-
167
- //# sourceMappingURL=resolveImageReferences.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/resolveImageReferences.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\ninterface ImageReference {\n fieldName: string\n filename?: string\n fullMatch: string\n}\n\nexport interface ResolvedImage {\n image: {\n mimeType?: string\n name: string\n thumbnailURL?: string\n type: string\n url: string\n }\n}\n\ninterface ResolveImageReferencesResult {\n images: ResolvedImage[]\n processedPrompt: string\n}\n\n/**\n * Retrieves a nested value from an object using dot-notation path.\n * For example, getNestedValue(obj, 'a.b.c') returns obj.a.b.c\n */\nfunction getNestedValue(obj: Record<string, unknown>, path: string): unknown {\n return path.split('.').reduce((current, key) => {\n if (current && typeof current === 'object' && key in current) {\n return (current as Record<string, unknown>)[key]\n }\n return undefined\n }, obj as unknown)\n}\n\n/**\n * Parses and resolves image references in prompts.\n * \n * Supports two formats:\n * - @fieldName - for single upload fields\n * - @collection.fieldName - schema path format (collection prefix is stripped)\n * - @fieldName:filename.jpg - for specific images in hasMany fields\n * \n * @param prompt - The prompt text containing @field references\n * @param contextData - The document data to resolve field values from\n * @param req - Payload request object for fetching media\n * @param collectionSlug - Optional collection slug to strip from schema path references\n * @returns Processed prompt with references removed and array of resolved images\n */\nexport async function resolveImageReferences(\n prompt: string,\n contextData: Record<string, unknown>,\n req: PayloadRequest,\n collectionSlug?: string,\n): Promise<ResolveImageReferencesResult> {\n // Pattern matches: @fieldName or @fieldName:filename.ext (filename can have spaces)\n // The filename part matches everything up to and including an image extension\n const pattern = /@([\\w.]+)(?::(.+?\\.(?:png|jpe?g|webp|gif)))?/gi\n const references: ImageReference[] = []\n let match: null | RegExpExecArray\n\n // Extract all image references\n while ((match = pattern.exec(prompt)) !== null) {\n references.push({\n fieldName: match[1],\n filename: match[2],\n fullMatch: match[0],\n })\n }\n\n if (references.length === 0) {\n return { images: [], processedPrompt: prompt }\n }\n\n const resolvedImages: ResolvedImage[] = []\n let processedPrompt = prompt\n\n // Resolve each reference\n for (const ref of references) {\n try {\n // Strip collection prefix from schema path if it matches the current collection\n // e.g., \"characters.ortho3d.frame\" becomes \"ortho3d.frame\" when collectionSlug is \"characters\"\n let fieldPath = ref.fieldName\n if (collectionSlug && fieldPath.startsWith(`${collectionSlug}.`)) {\n fieldPath = fieldPath.slice(collectionSlug.length + 1)\n }\n\n const fieldValue = getNestedValue(contextData, fieldPath)\n\n if (!fieldValue) {\n req.payload.logger.warn(\n `Image reference @${ref.fieldName} not found in document context`,\n )\n continue\n }\n\n // Handle single upload field (value is an ID or object)\n if (!ref.filename) {\n const mediaDoc = await resolveMediaDocument(fieldValue, req)\n if (mediaDoc) {\n resolvedImages.push(formatImageData(mediaDoc))\n }\n }\n // Handle hasMany field with filename\n else {\n const mediaDoc = await resolveMediaFromArray(fieldValue, ref.filename, req)\n if (mediaDoc) {\n resolvedImages.push(formatImageData(mediaDoc))\n }\n }\n\n // Remove the reference from the prompt\n processedPrompt = processedPrompt.replace(ref.fullMatch, '')\n } catch (error) {\n req.payload.logger.error(\n error,\n `Error resolving image reference: ${ref.fullMatch}`,\n )\n }\n }\n\n // Clean up extra whitespace from removed references\n processedPrompt = processedPrompt.replace(/\\s+/g, ' ').trim()\n\n return {\n images: resolvedImages,\n processedPrompt,\n }\n}\n\n/**\n * Resolves a single media document from an ID or populated object\n */\nasync function resolveMediaDocument(\n value: unknown,\n req: PayloadRequest,\n): Promise<null | Record<string, unknown>> {\n // If it's already a populated object with required fields\n if (typeof value === 'object' && value !== null && 'url' in value) {\n return value as Record<string, unknown>\n }\n\n // If it's an ID string, fetch the media document\n if (typeof value === 'string' || typeof value === 'number') {\n try {\n // Try to find which collection this media belongs to\n // First, check the common 'media' collection\n const collections = ['media', 'uploads']\n\n for (const collectionSlug of collections) {\n try {\n const mediaDoc = await req.payload.findByID({\n id: value,\n collection: collectionSlug,\n req,\n })\n if (mediaDoc) {\n return mediaDoc as Record<string, unknown>\n }\n } catch (_ignore) {\n // Continue to next collection\n continue\n }\n }\n } catch (error) {\n req.payload.logger.error(error, 'Error fetching media document')\n }\n }\n\n return null\n}\n\n/**\n * Resolves a specific media document from an array by matching filename\n */\nasync function resolveMediaFromArray(\n arrayValue: unknown,\n filename: string,\n req: PayloadRequest,\n): Promise<null | Record<string, unknown>> {\n if (!Array.isArray(arrayValue)) {\n return null\n }\n\n // Search through array for matching filename\n for (const item of arrayValue) {\n const mediaDoc = await resolveMediaDocument(item, req)\n\n if (mediaDoc && matchesFilename(mediaDoc, filename)) {\n return mediaDoc\n }\n }\n\n return null\n}\n\n/**\n * Checks if a media document matches the given filename\n */\nfunction matchesFilename(mediaDoc: Record<string, unknown>, filename: string): boolean {\n const docFilename = mediaDoc.filename || mediaDoc.name\n\n if (!docFilename) {\n return false\n }\n\n // Case-insensitive match\n return (docFilename as string).toLowerCase() === filename.toLowerCase()\n}\n\n/**\n * Formats media document into the expected image data structure\n */\nfunction formatImageData(mediaDoc: Record<string, unknown>): ResolvedImage {\n return {\n image: {\n name: (mediaDoc.filename || mediaDoc.name || 'unknown') as string,\n type: extractFileExtension((mediaDoc.filename || mediaDoc.name || '') as string),\n mimeType: (mediaDoc.mimeType || mediaDoc.mimetype) as string | undefined,\n thumbnailURL: mediaDoc.thumbnailURL as string | undefined,\n url: mediaDoc.url as string,\n },\n }\n}\n\n/**\n * Extracts file extension from filename\n */\nfunction extractFileExtension(filename: string): string {\n const match = filename.match(/\\.([^.]+)$/)\n return match ? match[1].toLowerCase() : 'unknown'\n}\n"],"names":["getNestedValue","obj","path","split","reduce","current","key","undefined","resolveImageReferences","prompt","contextData","req","collectionSlug","pattern","references","match","exec","push","fieldName","filename","fullMatch","length","images","processedPrompt","resolvedImages","ref","fieldPath","startsWith","slice","fieldValue","payload","logger","warn","mediaDoc","resolveMediaDocument","formatImageData","resolveMediaFromArray","replace","error","trim","value","collections","findByID","id","collection","_ignore","arrayValue","Array","isArray","item","matchesFilename","docFilename","name","toLowerCase","image","type","extractFileExtension","mimeType","mimetype","thumbnailURL","url"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Field } from 'payload';
2
- import { z } from 'zod';
3
- export declare function convertPayloadSchemaToZod(fields: Field[]): z.ZodObject<any>;
@@ -1,93 +0,0 @@
1
- import { z } from 'zod';
2
- export function convertPayloadSchemaToZod(fields) {
3
- const shape = {};
4
- for (const field of fields){
5
- if ('name' in field && field.name) {
6
- // Handle simple fields with names
7
- switch(field.type){
8
- case 'array':
9
- if (field.fields) {
10
- shape[field.name] = z.array(convertPayloadSchemaToZod(field.fields));
11
- if (!field.required) {
12
- shape[field.name] = shape[field.name].optional();
13
- }
14
- if (field.admin?.description) {
15
- shape[field.name] = shape[field.name].describe(field.admin.description);
16
- }
17
- }
18
- break;
19
- case 'checkbox':
20
- shape[field.name] = z.boolean();
21
- if (!field.required) {
22
- shape[field.name] = shape[field.name].optional();
23
- }
24
- if (field.admin?.description) {
25
- shape[field.name] = shape[field.name].describe(field.admin.description);
26
- }
27
- break;
28
- case 'code':
29
- case 'email':
30
- case 'radio':
31
- case 'select':
32
- case 'text':
33
- case 'textarea':
34
- shape[field.name] = z.string();
35
- if (field.required) {
36
- // keep it required
37
- } else {
38
- shape[field.name] = shape[field.name].optional();
39
- }
40
- // Add description if available
41
- if (field.admin?.description) {
42
- shape[field.name] = shape[field.name].describe(field.admin.description);
43
- }
44
- break;
45
- case 'date':
46
- shape[field.name] = z.string().datetime();
47
- if (!field.required) {
48
- shape[field.name] = shape[field.name].optional();
49
- }
50
- if (field.admin?.description) {
51
- shape[field.name] = shape[field.name].describe(field.admin.description);
52
- }
53
- break;
54
- case 'group':
55
- if (field.fields) {
56
- shape[field.name] = convertPayloadSchemaToZod(field.fields);
57
- if (!field.required) {
58
- shape[field.name] = shape[field.name].optional();
59
- }
60
- if (field.admin?.description) {
61
- shape[field.name] = shape[field.name].describe(field.admin.description);
62
- }
63
- }
64
- break;
65
- case 'json':
66
- shape[field.name] = z.any();
67
- if (field.admin?.description) {
68
- shape[field.name] = shape[field.name].describe(field.admin.description);
69
- }
70
- break;
71
- case 'number':
72
- shape[field.name] = z.number();
73
- if (!field.required) {
74
- shape[field.name] = shape[field.name].optional();
75
- }
76
- if (field.admin?.description) {
77
- shape[field.name] = shape[field.name].describe(field.admin.description);
78
- }
79
- break;
80
- }
81
- } else {
82
- // Handle fields without names (row, collapsible, etc.) that flatten into parent
83
- if (field.type === 'row' || field.type === 'collapsible') {
84
- const subSchema = convertPayloadSchemaToZod(field.fields);
85
- // Merge subSchema shape into current shape
86
- Object.assign(shape, subSchema.shape);
87
- }
88
- }
89
- }
90
- return z.object(shape);
91
- }
92
-
93
- //# sourceMappingURL=schemaConverter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/schemaConverter.ts"],"sourcesContent":["import type { Field } from 'payload'\n\nimport { z } from 'zod'\n\nexport function convertPayloadSchemaToZod(fields: Field[]): z.ZodObject<any> {\n const shape: Record<string, z.ZodTypeAny> = {}\n\n for (const field of fields) {\n if ('name' in field && field.name) {\n // Handle simple fields with names\n switch (field.type) {\n case 'array':\n if (field.fields) {\n shape[field.name] = z.array(convertPayloadSchemaToZod(field.fields))\n if (!field.required) {\n shape[field.name] = shape[field.name].optional()\n }\n if (field.admin?.description) {\n shape[field.name] = shape[field.name].describe(field.admin.description as string)\n }\n }\n break\n case 'checkbox':\n shape[field.name] = z.boolean()\n if (!field.required) {\n shape[field.name] = shape[field.name].optional()\n }\n if (field.admin?.description) {\n shape[field.name] = shape[field.name].describe(field.admin.description as string)\n }\n break\n case 'code':\n case 'email':\n case 'radio':\n case 'select':\n case 'text':\n case 'textarea':\n shape[field.name] = z.string()\n if (field.required) {\n // keep it required\n } else {\n shape[field.name] = shape[field.name].optional()\n }\n // Add description if available\n if (field.admin?.description) {\n shape[field.name] = shape[field.name].describe(field.admin.description as string)\n }\n break\n case 'date':\n shape[field.name] = z.string().datetime()\n if (!field.required) {\n shape[field.name] = shape[field.name].optional()\n }\n if (field.admin?.description) {\n shape[field.name] = shape[field.name].describe(field.admin.description as string)\n }\n break\n case 'group':\n if (field.fields) {\n shape[field.name] = convertPayloadSchemaToZod(field.fields)\n if (!field.required) {\n shape[field.name] = shape[field.name].optional()\n }\n if (field.admin?.description) {\n shape[field.name] = shape[field.name].describe(field.admin.description as string)\n }\n }\n break\n case 'json':\n shape[field.name] = z.any()\n if (field.admin?.description) {\n shape[field.name] = shape[field.name].describe(field.admin.description as string)\n }\n break\n case 'number':\n shape[field.name] = z.number()\n if (!field.required) {\n shape[field.name] = shape[field.name].optional()\n }\n if (field.admin?.description) {\n shape[field.name] = shape[field.name].describe(field.admin.description as string)\n }\n break\n // Add more types as needed\n }\n } else {\n // Handle fields without names (row, collapsible, etc.) that flatten into parent\n if (field.type === 'row' || field.type === 'collapsible') {\n const subSchema = convertPayloadSchemaToZod(field.fields)\n // Merge subSchema shape into current shape\n Object.assign(shape, subSchema.shape)\n }\n }\n }\n\n return z.object(shape)\n}\n"],"names":["z","convertPayloadSchemaToZod","fields","shape","field","name","type","array","required","optional","admin","description","describe","boolean","string","datetime","any","number","subSchema","Object","assign","object"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/setSafeLexicalState.ts"],"sourcesContent":["import type { LexicalEditor } from 'lexical'\n\nconst sanitizeLexicalState = (state: any): any => {\n // 1. Ensure root exists and is valid\n if (!state || typeof state !== 'object') {\n return null\n }\n\n // If no root, or root is not an object, it's invalid\n if (!state.root || typeof state.root !== 'object') {\n return null\n }\n\n // 2. Clone to avoid mutation\n const cleanState = JSON.parse(JSON.stringify(state))\n\n // 3. Ensure root has required props\n cleanState.root.type = 'root'\n cleanState.root.format = cleanState.root.format || 'left'\n cleanState.root.indent = cleanState.root.indent || 0\n cleanState.root.version = cleanState.root.version || 1\n\n // 4. Recursive sanitizer for children\n const sanitizeNode = (node: any): any => {\n if (!node || typeof node !== 'object') {\n return null\n }\n\n // Must have a type. If streaming incomplete node (type is missing/empty), discard it.\n if (!node.type || typeof node.type !== 'string') {\n return null\n }\n\n // Default version if missing\n node.version = node.version || 1\n\n // If node has children, sanitize them\n if (Array.isArray(node.children)) {\n node.children = node.children\n .map(sanitizeNode)\n .filter((child: any) => child !== null)\n } else {\n // Ensure children is at least an empty array if it's supposed to be there? \n // Actually lots of leaf nodes don't have children. \n // But Root, Paragraph, etc do. \n // Let's safe-guard standard ElementNodes:\n if (['heading', 'link', 'list', 'listitem', 'paragraph', 'quote', 'root'].includes(node.type)) {\n node.children = node.children || []\n }\n }\n\n // Specific node fixes\n if (node.type === 'text') {\n // Text nodes must have text prop\n if (typeof node.text !== 'string') {\n // If text is missing, it might be incomplete. \n // We can either discard or default to empty string.\n // For streaming, empty string is safer than discarding early if we want to show cursor?\n node.text = node.text || ''\n }\n node.mode = node.mode ?? 0\n node.style = node.style || ''\n node.detail = node.detail ?? 0\n }\n\n return node\n }\n\n // 5. Sanitize root's children\n if (Array.isArray(cleanState.root.children)) {\n cleanState.root.children = cleanState.root.children\n .map(sanitizeNode)\n .filter((child: any) => child !== null)\n } else {\n cleanState.root.children = []\n }\n\n return cleanState\n}\n\nexport const setSafeLexicalState = (state: unknown, editorInstance: LexicalEditor) => {\n try {\n const validState = sanitizeLexicalState(state)\n \n if (!validState) {\n return\n }\n\n const editorState = editorInstance.parseEditorState(validState)\n if (editorState.isEmpty()) {\n return\n }\n\n editorInstance.setEditorState(editorState)\n } catch (_error) {\n // Silently catch errors during streaming to avoid console noise.\n // Lexical's parseEditorState is very strict and will throw if the\n // object structure is even slightly incomplete during the stream.\n }\n}\n\n"],"names":["sanitizeLexicalState","state","root","cleanState","JSON","parse","stringify","type","format","indent","version","sanitizeNode","node","Array","isArray","children","map","filter","child","includes","text","mode","style","detail","setSafeLexicalState","editorInstance","validState","editorState","parseEditorState","isEmpty","setEditorState","_error"],"mappings":"AAEA,MAAMA,uBAAuB,CAACC;IAC5B,qCAAqC;IACrC,IAAI,CAACA,SAAS,OAAOA,UAAU,UAAU;QACvC,OAAO;IACT;IAEA,qDAAqD;IACrD,IAAI,CAACA,MAAMC,IAAI,IAAI,OAAOD,MAAMC,IAAI,KAAK,UAAU;QACjD,OAAO;IACT;IAEA,6BAA6B;IAC7B,MAAMC,aAAaC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACL;IAE7C,oCAAoC;IACpCE,WAAWD,IAAI,CAACK,IAAI,GAAG;IACvBJ,WAAWD,IAAI,CAACM,MAAM,GAAGL,WAAWD,IAAI,CAACM,MAAM,IAAI;IACnDL,WAAWD,IAAI,CAACO,MAAM,GAAGN,WAAWD,IAAI,CAACO,MAAM,IAAI;IACnDN,WAAWD,IAAI,CAACQ,OAAO,GAAGP,WAAWD,IAAI,CAACQ,OAAO,IAAI;IAErD,sCAAsC;IACtC,MAAMC,eAAe,CAACC;QACpB,IAAI,CAACA,QAAQ,OAAOA,SAAS,UAAU;YACrC,OAAO;QACT;QAEA,sFAAsF;QACtF,IAAI,CAACA,KAAKL,IAAI,IAAI,OAAOK,KAAKL,IAAI,KAAK,UAAU;YAC/C,OAAO;QACT;QAEA,6BAA6B;QAC7BK,KAAKF,OAAO,GAAGE,KAAKF,OAAO,IAAI;QAE/B,sCAAsC;QACtC,IAAIG,MAAMC,OAAO,CAACF,KAAKG,QAAQ,GAAG;YAChCH,KAAKG,QAAQ,GAAGH,KAAKG,QAAQ,CAC1BC,GAAG,CAACL,cACJM,MAAM,CAAC,CAACC,QAAeA,UAAU;QACtC,OAAO;YACL,4EAA4E;YAC5E,oDAAoD;YACpD,gCAAgC;YAChC,0CAA0C;YAC1C,IAAI;gBAAC;gBAAW;gBAAQ;gBAAQ;gBAAY;gBAAa;gBAAS;aAAO,CAACC,QAAQ,CAACP,KAAKL,IAAI,GAAG;gBAC7FK,KAAKG,QAAQ,GAAGH,KAAKG,QAAQ,IAAI,EAAE;YACrC;QACF;QAEA,sBAAsB;QACtB,IAAIH,KAAKL,IAAI,KAAK,QAAQ;YACxB,iCAAiC;YACjC,IAAI,OAAOK,KAAKQ,IAAI,KAAK,UAAU;gBACjC,+CAA+C;gBAC/C,oDAAoD;gBACpD,wFAAwF;gBACxFR,KAAKQ,IAAI,GAAGR,KAAKQ,IAAI,IAAI;YAC3B;YACAR,KAAKS,IAAI,GAAGT,KAAKS,IAAI,IAAI;YACzBT,KAAKU,KAAK,GAAGV,KAAKU,KAAK,IAAI;YAC3BV,KAAKW,MAAM,GAAGX,KAAKW,MAAM,IAAI;QAC/B;QAEA,OAAOX;IACT;IAEA,8BAA8B;IAC9B,IAAIC,MAAMC,OAAO,CAACX,WAAWD,IAAI,CAACa,QAAQ,GAAG;QAC3CZ,WAAWD,IAAI,CAACa,QAAQ,GAAGZ,WAAWD,IAAI,CAACa,QAAQ,CAChDC,GAAG,CAACL,cACJM,MAAM,CAAC,CAACC,QAAeA,UAAU;IACtC,OAAO;QACLf,WAAWD,IAAI,CAACa,QAAQ,GAAG,EAAE;IAC/B;IAEA,OAAOZ;AACT;AAEA,OAAO,MAAMqB,sBAAsB,CAACvB,OAAgBwB;IAClD,IAAI;QACF,MAAMC,aAAa1B,qBAAqBC;QAExC,IAAI,CAACyB,YAAY;YACf;QACF;QAEA,MAAMC,cAAcF,eAAeG,gBAAgB,CAACF;QACpD,IAAIC,YAAYE,OAAO,IAAI;YACzB;QACF;QAEAJ,eAAeK,cAAc,CAACH;IAChC,EAAE,OAAOI,QAAQ;IACf,iEAAiE;IACjE,kEAAkE;IAClE,kEAAkE;IACpE;AACF,EAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utilities/updateFieldsConfig.ts"],"sourcesContent":["import type { CollectionConfig, GlobalConfig } from 'payload'\n\ninterface UpdateFieldsConfig {\n schemaPathMap: Record<string, any>\n updatedCollectionConfig: CollectionConfig | GlobalConfig\n}\n\nexport const updateFieldsConfig = (collectionConfig: CollectionConfig | GlobalConfig): UpdateFieldsConfig => {\n let schemaPathMap = {}\n\n function updateField(field: any, parentPath = ''): any {\n const currentPath = field.name\n ? parentPath\n ? `${parentPath}.${field.name}`\n : field.name\n : parentPath\n const currentSchemaPath = `${collectionConfig.slug}.${currentPath}`\n\n // Disabled fields/ field types\n if (\n field.admin?.disabled ||\n field.admin?.readOnly ||\n field.admin?.hidden ||\n field.type === 'row'\n ) {\n return field\n }\n\n // Map field path for global fieldInstructionsMap to load related instructions\n // This is done due to save extra API call to get instructions when Field components are loaded in admin\n // Doing is will only call instructions data when user clicks on settings\n if (['array', 'richText', 'text', 'textarea', 'upload'].includes(field.type)) {\n schemaPathMap = {\n ...schemaPathMap,\n [currentSchemaPath]: {\n type: field.type,\n custom: field.custom,\n label: field.label || field.name,\n relationTo: field.relationTo,\n },\n }\n }\n\n // Inject AI actions, richText is not included here as it has to be explicitly defined by user\n // Array fields also get AI injection for bulk generation\n if (['array', 'text', 'textarea', 'upload'].includes(field.type)) {\n let customField = {}\n\n // Custom fields don't fully adhere to the Payload schema, making it difficult to\n // determine which components support injecting ComposeField as a Description.\n if (field.admin?.components?.Field || field.admin?.components?.Description) {\n // TODO: If a field already provides its own Description, we still inject our ComposeField\n // by overriding Description. If you need both, consider composing your own wrapper.\n customField = {}\n }\n\n // Array fields use ArrayComposeField (always visible) since they don't have focus events\n // Other fields use ComposeField with focus-dependent visibility\n const componentPath = field.type === 'array'\n ? '@ai-stack/payloadcms/fields#ArrayComposeField'\n : '@ai-stack/payloadcms/fields#ComposeField'\n\n return {\n ...field,\n admin: {\n ...field.admin,\n components: {\n ...(field.admin?.components || {}),\n Description: {\n clientProps: {\n schemaPath: currentSchemaPath,\n },\n path: componentPath,\n },\n ...customField,\n },\n },\n }\n }\n\n if (field.fields) {\n return {\n ...field,\n fields: field.fields.map((subField: any) => updateField(subField, currentPath)),\n }\n }\n\n if (field.tabs) {\n return {\n ...field,\n tabs: field.tabs.map((tab: any) => {\n return {\n ...tab,\n // Tabs are a UI construct and should not add to the schema path\n fields: (tab.fields || []).map((subField: any) => updateField(subField, parentPath)),\n }\n }),\n }\n }\n\n if (field.blocks) {\n return {\n ...field,\n blocks: field.blocks.map((block: any) => ({\n ...block,\n fields: block.fields.map((subField: any) =>\n updateField(subField, `${currentPath}.${block.slug}`),\n ),\n })),\n }\n }\n\n return field\n }\n\n const updatedCollectionConfig = {\n ...collectionConfig,\n fields: collectionConfig.fields.map((field) => updateField(field)),\n }\n\n return {\n schemaPathMap,\n updatedCollectionConfig,\n }\n}\n"],"names":["updateFieldsConfig","collectionConfig","schemaPathMap","updateField","field","parentPath","currentPath","name","currentSchemaPath","slug","admin","disabled","readOnly","hidden","type","includes","custom","label","relationTo","customField","components","Field","Description","componentPath","clientProps","schemaPath","path","fields","map","subField","tabs","tab","blocks","block","updatedCollectionConfig"],"mappings":"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"}
File without changes
File without changes
File without changes