@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.
- package/dist/ai/core/generateObject.js +1 -4
- package/dist/ai/core/generateObject.js.map +1 -1
- package/dist/ai/core/generateText.js +1 -5
- package/dist/ai/core/generateText.js.map +1 -1
- package/dist/ai/core/media/generateMedia.js +1 -4
- package/dist/ai/core/media/generateMedia.js.map +1 -1
- package/dist/ai/core/media/image/generateImage.js +4 -14
- package/dist/ai/core/media/image/generateImage.js.map +1 -1
- package/dist/ai/core/media/image/handlers/multimodal.js +7 -24
- package/dist/ai/core/media/image/handlers/multimodal.js.map +1 -1
- package/dist/ai/core/media/image/handlers/standard.js +7 -2
- package/dist/ai/core/media/image/handlers/standard.js.map +1 -1
- package/dist/ai/core/media/speech/generateSpeech.js +2 -3
- package/dist/ai/core/media/speech/generateSpeech.js.map +1 -1
- package/dist/ai/core/media/types.d.ts +2 -3
- package/dist/ai/core/media/types.js.map +1 -1
- package/dist/ai/core/streamObject.js +0 -3
- package/dist/ai/core/streamObject.js.map +1 -1
- package/dist/ai/core/streamText.js +1 -4
- package/dist/ai/core/streamText.js.map +1 -1
- package/dist/ai/core/types.d.ts +2 -2
- package/dist/ai/core/types.js.map +1 -1
- package/dist/ai/providers/blocks/anthropic.js +2 -44
- package/dist/ai/providers/blocks/anthropic.js.map +1 -1
- package/dist/ai/providers/blocks/elevenlabs.js +4 -109
- package/dist/ai/providers/blocks/elevenlabs.js.map +1 -1
- package/dist/ai/providers/blocks/fal.js +2 -120
- package/dist/ai/providers/blocks/fal.js.map +1 -1
- package/dist/ai/providers/blocks/google.js +6 -240
- package/dist/ai/providers/blocks/google.js.map +1 -1
- package/dist/ai/providers/blocks/openai-compatible.js +2 -146
- package/dist/ai/providers/blocks/openai-compatible.js.map +1 -1
- package/dist/ai/providers/blocks/openai.js +2 -202
- package/dist/ai/providers/blocks/openai.js.map +1 -1
- package/dist/ai/providers/blocks/xai.js +2 -55
- package/dist/ai/providers/blocks/xai.js.map +1 -1
- package/dist/ai/providers/index.d.ts +1 -1
- package/dist/ai/providers/index.js +0 -2
- package/dist/ai/providers/index.js.map +1 -1
- package/dist/ai/providers/registry.d.ts +24 -28
- package/dist/ai/providers/registry.js +184 -138
- package/dist/ai/providers/registry.js.map +1 -1
- package/dist/ai/providers/types.d.ts +12 -33
- package/dist/ai/providers/types.js +0 -1
- package/dist/ai/providers/types.js.map +1 -1
- package/dist/ai/schemas/lexicalJsonSchema.js +1 -1
- package/dist/ai/schemas/lexicalJsonSchema.js.map +1 -1
- package/dist/ai/utilities/filterEditorSchemaByNodes.js.map +1 -0
- package/dist/ai/utilities/generateFileNameByPrompt.js.map +1 -0
- package/dist/ai/utilities/isObjectSchema.js.map +1 -0
- package/dist/ai/{utils → utilities}/nodeToSchemaMap.js +6 -6
- package/dist/ai/utilities/nodeToSchemaMap.js.map +1 -0
- package/dist/ai/{prompts.d.ts → utilities/prompts.d.ts} +1 -1
- package/dist/ai/utilities/prompts.js.map +1 -0
- package/dist/ai/utilities/systemGenerate.js.map +1 -0
- package/dist/collections/AIJobs.js +3 -12
- package/dist/collections/AIJobs.js.map +1 -1
- package/dist/collections/AIProviders.js +56 -29
- package/dist/collections/AIProviders.js.map +1 -1
- package/dist/collections/Instructions.js +91 -59
- package/dist/collections/Instructions.js.map +1 -1
- package/dist/collections/shared.d.ts +30 -0
- package/dist/collections/shared.js +15 -0
- package/dist/collections/shared.js.map +1 -0
- package/dist/endpoints/fetchFields.js +14 -6
- package/dist/endpoints/fetchFields.js.map +1 -1
- package/dist/endpoints/fetchVoices.js +1 -1
- package/dist/endpoints/fetchVoices.js.map +1 -1
- package/dist/endpoints/generate.d.ts +7 -0
- package/dist/endpoints/generate.js +268 -0
- package/dist/endpoints/generate.js.map +1 -0
- package/dist/endpoints/index.js +9 -639
- package/dist/endpoints/index.js.map +1 -1
- package/dist/endpoints/promptMentions.d.ts +2 -0
- package/dist/endpoints/promptMentions.js +166 -0
- package/dist/endpoints/promptMentions.js.map +1 -0
- package/dist/endpoints/upload.d.ts +7 -0
- package/dist/endpoints/upload.js +294 -0
- package/dist/endpoints/upload.js.map +1 -0
- package/dist/endpoints/videogenWebhook.d.ts +7 -0
- package/dist/endpoints/videogenWebhook.js +132 -0
- package/dist/endpoints/videogenWebhook.js.map +1 -0
- package/dist/exports/client.d.ts +2 -1
- package/dist/exports/client.js +2 -1
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/fields.d.ts +2 -1
- package/dist/exports/fields.js +2 -1
- package/dist/exports/fields.js.map +1 -1
- package/dist/fields/ArrayComposeField/ArrayComposeField.js +1 -1
- package/dist/fields/ArrayComposeField/ArrayComposeField.js.map +1 -1
- package/dist/fields/ArrayComposeField/ArrayComposeField.jsx +1 -1
- package/dist/fields/ComposeField/ComposeField.d.ts +1 -0
- package/dist/fields/ComposeField/ComposeField.js +18 -8
- package/dist/fields/ComposeField/ComposeField.js.map +1 -1
- package/dist/fields/ComposeField/ComposeField.jsx +12 -7
- package/dist/fields/LexicalEditor/feature.server.js +1 -1
- package/dist/fields/LexicalEditor/feature.server.js.map +1 -1
- package/dist/fields/PromptEditorField/feature.client.d.ts +1 -0
- package/dist/fields/PromptEditorField/feature.client.js +173 -0
- package/dist/fields/PromptEditorField/feature.client.js.map +1 -0
- package/dist/fields/PromptEditorField/feature.client.jsx +148 -0
- package/dist/fields/PromptEditorField/feature.server.d.ts +1 -0
- package/dist/fields/PromptEditorField/feature.server.js +30 -0
- package/dist/fields/PromptEditorField/feature.server.js.map +1 -0
- package/dist/fields/PromptField.d.ts +4 -0
- package/dist/fields/PromptField.js +18 -0
- package/dist/fields/PromptField.js.map +1 -0
- package/dist/fields/SelectField/SelectField.js +0 -1
- package/dist/fields/SelectField/SelectField.js.map +1 -1
- package/dist/fields/SelectField/SelectField.jsx +0 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/libraries/handlebars/helpers.js +2 -2
- package/dist/libraries/handlebars/helpers.js.map +1 -1
- package/dist/libraries/handlebars/replacePlaceholders.js +5 -1
- package/dist/libraries/handlebars/replacePlaceholders.js.map +1 -1
- package/dist/payload-ai.d.ts +5 -19
- package/dist/plugin.js +18 -21
- package/dist/plugin.js.map +1 -1
- package/dist/providers/FieldProvider/FieldProvider.js +11 -20
- package/dist/providers/FieldProvider/FieldProvider.js.map +1 -1
- package/dist/providers/FieldProvider/FieldProvider.jsx +8 -18
- package/dist/providers/InstructionsProvider/InstructionsProvider.js +5 -2
- package/dist/providers/InstructionsProvider/InstructionsProvider.js.map +1 -1
- package/dist/providers/InstructionsProvider/InstructionsProvider.jsx +5 -2
- package/dist/translations/de.json +47 -0
- package/dist/translations/en.json +45 -2
- package/dist/translations/es.json +45 -2
- package/dist/translations/fa.json +45 -2
- package/dist/translations/fr.json +46 -3
- package/dist/translations/hi.json +47 -0
- package/dist/translations/index.d.ts +88 -26
- package/dist/translations/index.js +18 -32
- package/dist/translations/index.js.map +1 -1
- package/dist/translations/ja.json +47 -0
- package/dist/translations/nb.json +47 -0
- package/dist/translations/nl.json +47 -0
- package/dist/translations/pl.json +45 -2
- package/dist/translations/pt.json +47 -0
- package/dist/translations/ru.json +45 -2
- package/dist/translations/th.json +47 -0
- package/dist/translations/translation-schema.json +184 -11
- package/dist/translations/uk.json +45 -2
- package/dist/translations/zh.json +47 -0
- package/dist/types.d.ts +64 -28
- package/dist/types.js.map +1 -1
- package/dist/ui/Compose/Compose.js +42 -79
- package/dist/ui/Compose/Compose.js.map +1 -1
- package/dist/ui/Compose/Compose.jsx +32 -86
- package/dist/ui/Compose/ComposePlaceholder.js +1 -1
- package/dist/ui/Compose/ComposePlaceholder.js.map +1 -1
- package/dist/ui/Compose/ComposePlaceholder.jsx +1 -1
- package/dist/ui/Compose/{compose.module.css → compose.module.scss} +3 -5
- package/dist/ui/Compose/hooks/menu/Item.d.ts +1 -1
- package/dist/ui/Compose/hooks/menu/Item.js +7 -3
- package/dist/ui/Compose/hooks/menu/Item.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/Item.jsx +11 -5
- package/dist/ui/Compose/hooks/menu/TranslateMenu.js +15 -5
- package/dist/ui/Compose/hooks/menu/TranslateMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/TranslateMenu.jsx +11 -5
- package/dist/ui/Compose/hooks/menu/items.d.ts +8 -8
- package/dist/ui/Compose/hooks/menu/itemsMap.d.ts +2 -1
- package/dist/ui/Compose/hooks/menu/itemsMap.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/types.d.ts +21 -0
- package/dist/ui/Compose/hooks/menu/types.js +3 -0
- package/dist/ui/Compose/hooks/menu/types.js.map +1 -0
- package/dist/ui/Compose/hooks/menu/useMenu.d.ts +2 -2
- package/dist/ui/Compose/hooks/menu/useMenu.js +45 -23
- package/dist/ui/Compose/hooks/menu/useMenu.js.map +1 -1
- package/dist/ui/Compose/hooks/menu/useMenu.jsx +43 -23
- package/dist/ui/Compose/hooks/mergeGeneratedValue.d.ts +14 -0
- package/dist/ui/Compose/hooks/mergeGeneratedValue.js +38 -0
- package/dist/ui/Compose/hooks/mergeGeneratedValue.js.map +1 -0
- package/dist/ui/Compose/hooks/useGenerate.js +37 -12
- package/dist/ui/Compose/hooks/useGenerate.js.map +1 -1
- package/dist/ui/Compose/hooks/useGenerateUpload.js +66 -24
- package/dist/ui/Compose/hooks/useGenerateUpload.js.map +1 -1
- package/dist/ui/Compose/hooks/useHistory.js +1 -1
- package/dist/ui/Compose/hooks/useHistory.js.map +1 -1
- package/dist/ui/Compose/hooks/useStreamingUpdate.js +4 -4
- package/dist/ui/Compose/hooks/useStreamingUpdate.js.map +1 -1
- package/dist/ui/ConfigDashboard/configDashboard.module.css +94 -0
- package/dist/ui/ConfigDashboard/index.js +27 -92
- package/dist/ui/ConfigDashboard/index.js.map +1 -1
- package/dist/ui/ConfigDashboard/index.jsx +24 -77
- package/dist/ui/DynamicModelSelect/index.js +6 -27
- package/dist/ui/DynamicModelSelect/index.js.map +1 -1
- package/dist/ui/DynamicModelSelect/index.jsx +6 -29
- package/dist/ui/DynamicProviderSelect/index.js +6 -27
- package/dist/ui/DynamicProviderSelect/index.js.map +1 -1
- package/dist/ui/DynamicProviderSelect/index.jsx +6 -29
- package/dist/ui/DynamicVoiceSelect/index.js +34 -83
- package/dist/ui/DynamicVoiceSelect/index.js.map +1 -1
- package/dist/ui/DynamicVoiceSelect/index.jsx +16 -53
- package/dist/ui/GlobalProviderOptions/index.d.ts +2 -0
- package/dist/ui/GlobalProviderOptions/index.js +118 -0
- package/dist/ui/GlobalProviderOptions/index.js.map +1 -0
- package/dist/ui/GlobalProviderOptions/index.jsx +60 -0
- package/dist/ui/Icons/Icons.js +1 -1
- package/dist/ui/Icons/Icons.js.map +1 -1
- package/dist/ui/Icons/Icons.jsx +1 -1
- package/dist/ui/Icons/LottieAnimation.js +1 -1
- package/dist/ui/Icons/LottieAnimation.js.map +1 -1
- package/dist/ui/Icons/LottieAnimation.jsx +1 -1
- package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.d.ts +12 -0
- package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.js +166 -0
- package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.js.map +1 -0
- package/dist/ui/InstructionProviderOptions/ProviderOptionsTree.jsx +83 -0
- package/dist/ui/InstructionProviderOptions/index.d.ts +2 -0
- package/dist/ui/InstructionProviderOptions/index.js +157 -0
- package/dist/ui/InstructionProviderOptions/index.js.map +1 -0
- package/dist/ui/InstructionProviderOptions/index.jsx +92 -0
- package/dist/ui/VoicesFetcher/index.js.map +1 -1
- package/dist/ui/hooks/useAISettings.d.ts +26 -0
- package/dist/ui/hooks/useAISettings.js +73 -0
- package/dist/ui/hooks/useAISettings.js.map +1 -0
- package/dist/ui/providerOptions/updateProviderOptionsValue.d.ts +6 -0
- package/dist/ui/providerOptions/updateProviderOptionsValue.js +50 -0
- package/dist/ui/providerOptions/updateProviderOptionsValue.js.map +1 -0
- package/dist/ui/shared/handleSelectChange.d.ts +5 -0
- package/dist/ui/shared/handleSelectChange.js +12 -0
- package/dist/ui/shared/handleSelectChange.js.map +1 -0
- package/dist/ui/shared/types.d.ts +11 -0
- package/dist/ui/shared/types.js +5 -0
- package/dist/ui/shared/types.js.map +1 -0
- package/dist/utilities/ai/resolveEffectiveInstructionSettings.d.ts +15 -0
- package/dist/utilities/ai/resolveEffectiveInstructionSettings.js +136 -0
- package/dist/utilities/ai/resolveEffectiveInstructionSettings.js.map +1 -0
- package/dist/{endpoints → utilities}/buildPromptUtils.js +14 -5
- package/dist/utilities/buildPromptUtils.js.map +1 -0
- package/dist/utilities/buildSmartPrompt.js +3 -3
- package/dist/utilities/buildSmartPrompt.js.map +1 -1
- package/dist/utilities/fields/fieldToJsonSchema.js.map +1 -0
- package/dist/utilities/fields/getFieldBySchemaPath.js.map +1 -0
- package/dist/utilities/fields/getFieldInfo.js.map +1 -0
- package/dist/utilities/{updateFieldsConfig.js → fields/updateFieldsConfig.js} +8 -3
- package/dist/utilities/fields/updateFieldsConfig.js.map +1 -0
- package/dist/utilities/images/extractImageData.js.map +1 -0
- package/dist/utilities/images/extractPromptAttachments.js.map +1 -0
- package/dist/utilities/{fetchImages.d.ts → images/fetchImages.d.ts} +1 -1
- package/dist/utilities/images/fetchImages.js +49 -0
- package/dist/utilities/images/fetchImages.js.map +1 -0
- package/dist/utilities/images/resolveImageReferences.js +183 -0
- package/dist/utilities/images/resolveImageReferences.js.map +1 -0
- package/dist/utilities/init/autoSetupProviders.d.ts +3 -0
- package/dist/utilities/init/autoSetupProviders.js +216 -0
- package/dist/utilities/init/autoSetupProviders.js.map +1 -0
- package/dist/utilities/lexical/editorSchemaValidator.js.map +1 -0
- package/dist/utilities/lexical/lexicalToHTML.js.map +1 -0
- package/dist/utilities/lexical/lexicalToPromptTemplate.d.ts +2 -0
- package/dist/utilities/lexical/lexicalToPromptTemplate.js +50 -0
- package/dist/utilities/lexical/lexicalToPromptTemplate.js.map +1 -0
- package/dist/utilities/lexical/setSafeLexicalState.js.map +1 -0
- package/dist/utilities/lexical/stringToLexicalJSON.d.ts +2 -0
- package/dist/utilities/lexical/stringToLexicalJSON.js +39 -0
- package/dist/utilities/lexical/stringToLexicalJSON.js.map +1 -0
- package/dist/utilities/sanitizeLog.d.ts +1 -0
- package/dist/utilities/sanitizeLog.js +39 -0
- package/dist/utilities/sanitizeLog.js.map +1 -0
- package/dist/utilities/seedProperties.js +54 -22
- package/dist/utilities/seedProperties.js.map +1 -1
- package/package.json +36 -2
- package/dist/ai/analyse.d.ts +0 -1
- package/dist/ai/analyse.js +0 -3
- package/dist/ai/analyse.js.map +0 -1
- package/dist/ai/index.d.ts +0 -11
- package/dist/ai/index.js +0 -25
- package/dist/ai/index.js.map +0 -1
- package/dist/ai/prompts.js.map +0 -1
- package/dist/ai/utils/filterEditorSchemaByNodes.js.map +0 -1
- package/dist/ai/utils/generateFileNameByPrompt.js.map +0 -1
- package/dist/ai/utils/isObjectSchema.js.map +0 -1
- package/dist/ai/utils/nodeToSchemaMap.js.map +0 -1
- package/dist/ai/utils/systemGenerate.js.map +0 -1
- package/dist/endpoints/buildPromptUtils.js.map +0 -1
- package/dist/endpoints/chat.d.ts +0 -4
- package/dist/fields/PromptEditorField/PromptEditorField.d.ts +0 -3
- package/dist/fields/PromptEditorField/PromptEditorField.js +0 -217
- package/dist/fields/PromptEditorField/PromptEditorField.js.map +0 -1
- package/dist/fields/PromptEditorField/PromptEditorField.jsx +0 -160
- package/dist/ui/AIConfigDashboard/index.d.ts +0 -2
- package/dist/ui/AIConfigDashboard/index.js +0 -224
- package/dist/ui/AIConfigDashboard/index.js.map +0 -1
- package/dist/ui/AIConfigDashboard/index.jsx +0 -175
- package/dist/ui/ProviderOptionsEditor/index.d.ts +0 -7
- package/dist/ui/ProviderOptionsEditor/index.js +0 -291
- package/dist/ui/ProviderOptionsEditor/index.js.map +0 -1
- package/dist/ui/ProviderOptionsEditor/index.jsx +0 -210
- package/dist/utilities/editorSchemaValidator.js.map +0 -1
- package/dist/utilities/extractImageData.js.map +0 -1
- package/dist/utilities/extractPromptAttachments.js.map +0 -1
- package/dist/utilities/fetchImages.js +0 -38
- package/dist/utilities/fetchImages.js.map +0 -1
- package/dist/utilities/fieldToJsonSchema.js.map +0 -1
- package/dist/utilities/getFieldBySchemaPath.js.map +0 -1
- package/dist/utilities/getFieldInfo.js.map +0 -1
- package/dist/utilities/getProviderOptionsFields.d.ts +0 -16
- package/dist/utilities/getProviderOptionsFields.js +0 -80
- package/dist/utilities/getProviderOptionsFields.js.map +0 -1
- package/dist/utilities/isPluginActivated.d.ts +0 -2
- package/dist/utilities/isPluginActivated.js +0 -5
- package/dist/utilities/isPluginActivated.js.map +0 -1
- package/dist/utilities/lexicalToHTML.js.map +0 -1
- package/dist/utilities/resolveImageReferences.js +0 -167
- package/dist/utilities/resolveImageReferences.js.map +0 -1
- package/dist/utilities/schemaConverter.d.ts +0 -3
- package/dist/utilities/schemaConverter.js +0 -93
- package/dist/utilities/schemaConverter.js.map +0 -1
- package/dist/utilities/setSafeLexicalState.js.map +0 -1
- package/dist/utilities/updateFieldsConfig.js.map +0 -1
- /package/dist/ai/{utils → utilities}/filterEditorSchemaByNodes.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/filterEditorSchemaByNodes.js +0 -0
- /package/dist/ai/{utils → utilities}/generateFileNameByPrompt.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/generateFileNameByPrompt.js +0 -0
- /package/dist/ai/{utils → utilities}/isObjectSchema.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/isObjectSchema.js +0 -0
- /package/dist/ai/{utils → utilities}/nodeToSchemaMap.d.ts +0 -0
- /package/dist/ai/{prompts.js → utilities/prompts.js} +0 -0
- /package/dist/ai/{utils → utilities}/systemGenerate.d.ts +0 -0
- /package/dist/ai/{utils → utilities}/systemGenerate.js +0 -0
- /package/dist/ui/Icons/{icons.module.css → icons.module.scss} +0 -0
- /package/dist/{endpoints → utilities}/buildPromptUtils.d.ts +0 -0
- /package/dist/utilities/{fieldToJsonSchema.d.ts → fields/fieldToJsonSchema.d.ts} +0 -0
- /package/dist/utilities/{fieldToJsonSchema.js → fields/fieldToJsonSchema.js} +0 -0
- /package/dist/utilities/{getFieldBySchemaPath.d.ts → fields/getFieldBySchemaPath.d.ts} +0 -0
- /package/dist/utilities/{getFieldBySchemaPath.js → fields/getFieldBySchemaPath.js} +0 -0
- /package/dist/utilities/{getFieldInfo.d.ts → fields/getFieldInfo.d.ts} +0 -0
- /package/dist/utilities/{getFieldInfo.js → fields/getFieldInfo.js} +0 -0
- /package/dist/utilities/{updateFieldsConfig.d.ts → fields/updateFieldsConfig.d.ts} +0 -0
- /package/dist/utilities/{extractImageData.d.ts → images/extractImageData.d.ts} +0 -0
- /package/dist/utilities/{extractImageData.js → images/extractImageData.js} +0 -0
- /package/dist/utilities/{extractPromptAttachments.d.ts → images/extractPromptAttachments.d.ts} +0 -0
- /package/dist/utilities/{extractPromptAttachments.js → images/extractPromptAttachments.js} +0 -0
- /package/dist/utilities/{resolveImageReferences.d.ts → images/resolveImageReferences.d.ts} +0 -0
- /package/dist/utilities/{editorSchemaValidator.d.ts → lexical/editorSchemaValidator.d.ts} +0 -0
- /package/dist/utilities/{editorSchemaValidator.js → lexical/editorSchemaValidator.js} +0 -0
- /package/dist/utilities/{lexicalToHTML.d.ts → lexical/lexicalToHTML.d.ts} +0 -0
- /package/dist/utilities/{lexicalToHTML.js → lexical/lexicalToHTML.js} +0 -0
- /package/dist/utilities/{setSafeLexicalState.d.ts → lexical/setSafeLexicalState.d.ts} +0 -0
- /package/dist/utilities/{setSafeLexicalState.js → lexical/setSafeLexicalState.js} +0 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { anthropicBlock } from '../../ai/providers/blocks/anthropic.js';
|
|
2
|
+
import { elevenlabsBlock } from '../../ai/providers/blocks/elevenlabs.js';
|
|
3
|
+
import { falBlock } from '../../ai/providers/blocks/fal.js';
|
|
4
|
+
import { googleBlock } from '../../ai/providers/blocks/google.js';
|
|
5
|
+
import { openaiBlock } from '../../ai/providers/blocks/openai.js';
|
|
6
|
+
import { xaiBlock } from '../../ai/providers/blocks/xai.js';
|
|
7
|
+
const findModelsDefault = (block)=>{
|
|
8
|
+
let defaultModels = [];
|
|
9
|
+
const search = (fields)=>{
|
|
10
|
+
for (const f of fields){
|
|
11
|
+
if (f.name === 'models' && Array.isArray(f.defaultValue)) {
|
|
12
|
+
defaultModels = f.defaultValue;
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
if (f.tabs) {
|
|
16
|
+
for (const t of f.tabs){
|
|
17
|
+
if (search(t.fields)) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (f.fields) {
|
|
23
|
+
if (search(f.fields)) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
};
|
|
30
|
+
if (block?.fields) {
|
|
31
|
+
search(block.fields);
|
|
32
|
+
}
|
|
33
|
+
return defaultModels;
|
|
34
|
+
};
|
|
35
|
+
const providerKeys = {
|
|
36
|
+
anthropic: 'ANTHROPIC_API_KEY',
|
|
37
|
+
elevenlabs: 'ELEVENLABS_API_KEY',
|
|
38
|
+
fal: 'FAL_KEY',
|
|
39
|
+
google: [
|
|
40
|
+
'GOOGLE_GENERATIVE_AI_API_KEY',
|
|
41
|
+
'GEMINI_API_KEY'
|
|
42
|
+
],
|
|
43
|
+
openai: 'OPENAI_API_KEY',
|
|
44
|
+
xai: 'XAI_API_KEY'
|
|
45
|
+
};
|
|
46
|
+
export const autoSetupProviders = async (payload, config)=>{
|
|
47
|
+
try {
|
|
48
|
+
const existing = await payload.findGlobal({
|
|
49
|
+
slug: 'ai-providers'
|
|
50
|
+
});
|
|
51
|
+
// Build the default array structure
|
|
52
|
+
let initializedAny = false;
|
|
53
|
+
const providersArray = [];
|
|
54
|
+
const defaults = {
|
|
55
|
+
image: existing.defaults?.image || {
|
|
56
|
+
model: '',
|
|
57
|
+
provider: ''
|
|
58
|
+
},
|
|
59
|
+
text: existing.defaults?.text || {
|
|
60
|
+
model: '',
|
|
61
|
+
provider: ''
|
|
62
|
+
},
|
|
63
|
+
tts: existing.defaults?.tts || {
|
|
64
|
+
model: '',
|
|
65
|
+
provider: ''
|
|
66
|
+
},
|
|
67
|
+
video: existing.defaults?.video || {
|
|
68
|
+
model: '',
|
|
69
|
+
provider: ''
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const { providerOptions } = config;
|
|
73
|
+
// OpenAI Setup
|
|
74
|
+
if (process.env[providerKeys.openai]) {
|
|
75
|
+
const isAlreadyConfigured = existing.providers?.find((p)=>p.blockType === 'openai');
|
|
76
|
+
if (!isAlreadyConfigured) {
|
|
77
|
+
providersArray.push({
|
|
78
|
+
apiKey: process.env[providerKeys.openai],
|
|
79
|
+
blockType: 'openai',
|
|
80
|
+
enabled: true,
|
|
81
|
+
models: findModelsDefault(openaiBlock)
|
|
82
|
+
});
|
|
83
|
+
initializedAny = true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Google Setup
|
|
87
|
+
const googleKey = process.env[providerKeys.google[0]] || process.env[providerKeys.google[1]];
|
|
88
|
+
if (googleKey) {
|
|
89
|
+
const isAlreadyConfigured = existing.providers?.find((p)=>p.blockType === 'google');
|
|
90
|
+
if (!isAlreadyConfigured) {
|
|
91
|
+
providersArray.push({
|
|
92
|
+
apiKey: googleKey,
|
|
93
|
+
blockType: 'google',
|
|
94
|
+
enabled: true,
|
|
95
|
+
models: findModelsDefault(googleBlock)
|
|
96
|
+
});
|
|
97
|
+
initializedAny = true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Anthropic Setup
|
|
101
|
+
if (process.env[providerKeys.anthropic]) {
|
|
102
|
+
const isAlreadyConfigured = existing.providers?.find((p)=>p.blockType === 'anthropic');
|
|
103
|
+
if (!isAlreadyConfigured) {
|
|
104
|
+
providersArray.push({
|
|
105
|
+
apiKey: process.env[providerKeys.anthropic],
|
|
106
|
+
blockType: 'anthropic',
|
|
107
|
+
enabled: true,
|
|
108
|
+
models: findModelsDefault(anthropicBlock)
|
|
109
|
+
});
|
|
110
|
+
initializedAny = true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// ElevenLabs Setup
|
|
114
|
+
if (process.env[providerKeys.elevenlabs]) {
|
|
115
|
+
const isAlreadyConfigured = existing.providers?.find((p)=>p.blockType === 'elevenlabs');
|
|
116
|
+
if (!isAlreadyConfigured) {
|
|
117
|
+
providersArray.push({
|
|
118
|
+
apiKey: process.env[providerKeys.elevenlabs],
|
|
119
|
+
blockType: 'elevenlabs',
|
|
120
|
+
enabled: true,
|
|
121
|
+
models: findModelsDefault(elevenlabsBlock)
|
|
122
|
+
});
|
|
123
|
+
initializedAny = true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// XAI Setup
|
|
127
|
+
if (process.env[providerKeys.xai]) {
|
|
128
|
+
const isAlreadyConfigured = existing.providers?.find((p)=>p.blockType === 'xai');
|
|
129
|
+
if (!isAlreadyConfigured) {
|
|
130
|
+
providersArray.push({
|
|
131
|
+
apiKey: process.env[providerKeys.xai],
|
|
132
|
+
blockType: 'xai',
|
|
133
|
+
enabled: true,
|
|
134
|
+
models: findModelsDefault(xaiBlock)
|
|
135
|
+
});
|
|
136
|
+
initializedAny = true;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Fal Setup
|
|
140
|
+
if (process.env[providerKeys.fal]) {
|
|
141
|
+
const isAlreadyConfigured = existing.providers?.find((p)=>p.blockType === 'fal');
|
|
142
|
+
if (!isAlreadyConfigured) {
|
|
143
|
+
providersArray.push({
|
|
144
|
+
apiKey: process.env[providerKeys.fal],
|
|
145
|
+
blockType: 'fal',
|
|
146
|
+
enabled: true,
|
|
147
|
+
models: findModelsDefault(falBlock)
|
|
148
|
+
});
|
|
149
|
+
initializedAny = true;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Setup defaults globally regardless of whether providers were newly added or not
|
|
153
|
+
const configuredProviders = [
|
|
154
|
+
...existing.providers || [],
|
|
155
|
+
...providersArray
|
|
156
|
+
];
|
|
157
|
+
if (configuredProviders.length > 0) {
|
|
158
|
+
if (!defaults.text.provider && config.generationDefaults?.text) {
|
|
159
|
+
defaults.text.provider = config.generationDefaults.text.provider;
|
|
160
|
+
defaults.text.model = config.generationDefaults.text.model;
|
|
161
|
+
initializedAny = true;
|
|
162
|
+
}
|
|
163
|
+
const providerSchemaByProvider = {};
|
|
164
|
+
for (const [providerName, options] of Object.entries(providerOptions || {})){
|
|
165
|
+
if (options && typeof options === 'object' && !Array.isArray(options)) {
|
|
166
|
+
providerSchemaByProvider[providerName] = options;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (!defaults.image.provider && config.generationDefaults?.image) {
|
|
170
|
+
defaults.image.provider = config.generationDefaults.image.provider;
|
|
171
|
+
defaults.image.model = config.generationDefaults.image.model;
|
|
172
|
+
initializedAny = true;
|
|
173
|
+
}
|
|
174
|
+
if (!defaults.tts.provider && config.generationDefaults?.tts) {
|
|
175
|
+
defaults.tts.provider = config.generationDefaults.tts.provider;
|
|
176
|
+
defaults.tts.model = config.generationDefaults.tts.model;
|
|
177
|
+
defaults.tts.voice = config.generationDefaults.tts.voice;
|
|
178
|
+
initializedAny = true;
|
|
179
|
+
}
|
|
180
|
+
if (!defaults.video.provider && config.generationDefaults?.video) {
|
|
181
|
+
defaults.video.provider = config.generationDefaults.video.provider;
|
|
182
|
+
defaults.video.model = config.generationDefaults.video.model;
|
|
183
|
+
initializedAny = true;
|
|
184
|
+
}
|
|
185
|
+
if (Object.keys(providerSchemaByProvider).length > 0) {
|
|
186
|
+
const schemaForUseCases = JSON.stringify(providerSchemaByProvider);
|
|
187
|
+
const useCases = [
|
|
188
|
+
'text',
|
|
189
|
+
'image',
|
|
190
|
+
'tts',
|
|
191
|
+
'video'
|
|
192
|
+
];
|
|
193
|
+
for (const useCase of useCases){
|
|
194
|
+
if (JSON.stringify(defaults[useCase].schema) !== schemaForUseCases) {
|
|
195
|
+
defaults[useCase].schema = JSON.parse(schemaForUseCases);
|
|
196
|
+
initializedAny = true;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (initializedAny) {
|
|
202
|
+
await payload.updateGlobal({
|
|
203
|
+
slug: 'ai-providers',
|
|
204
|
+
data: {
|
|
205
|
+
defaults,
|
|
206
|
+
providers: configuredProviders
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
payload.logger.info(`— AI Plugin: Auto-setup complete. Handled defaults for seeded providers.`);
|
|
210
|
+
}
|
|
211
|
+
} catch (error) {
|
|
212
|
+
payload.logger.warn(`— AI Plugin: Failed to auto-setup providers: ${error instanceof Error ? error.message : String(error)}`);
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
//# sourceMappingURL=autoSetupProviders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/init/autoSetupProviders.ts"],"sourcesContent":["import type { Payload } from 'payload'\n\nimport type { PluginConfig } from '../../types.js'\n\nimport { anthropicBlock } from '../../ai/providers/blocks/anthropic.js'\nimport { elevenlabsBlock } from '../../ai/providers/blocks/elevenlabs.js'\nimport { falBlock } from '../../ai/providers/blocks/fal.js'\nimport { googleBlock } from '../../ai/providers/blocks/google.js'\nimport { openaiBlock } from '../../ai/providers/blocks/openai.js'\nimport { xaiBlock } from '../../ai/providers/blocks/xai.js'\n\n\nconst findModelsDefault = (block: any): any[] => {\n let defaultModels: any[] = []\n const search = (fields: any[]): boolean => {\n for (const f of fields) {\n if (f.name === 'models' && Array.isArray(f.defaultValue)) {\n defaultModels = f.defaultValue\n return true\n }\n if (f.tabs) {\n for (const t of f.tabs) {\n if (search(t.fields)) {\n return true\n }\n }\n }\n if (f.fields) {\n if (search(f.fields)) {\n return true\n }\n }\n }\n return false\n }\n if (block?.fields) {\n search(block.fields)\n }\n return defaultModels\n}\n\nconst providerKeys = {\n anthropic: 'ANTHROPIC_API_KEY',\n elevenlabs: 'ELEVENLABS_API_KEY',\n fal: 'FAL_KEY',\n google: ['GOOGLE_GENERATIVE_AI_API_KEY', 'GEMINI_API_KEY'],\n openai: 'OPENAI_API_KEY',\n xai: 'XAI_API_KEY',\n}\n\nexport const autoSetupProviders = async (payload: Payload, config: PluginConfig) => {\n try {\n const existing = await payload.findGlobal({ slug: 'ai-providers' })\n\n // Build the default array structure\n let initializedAny = false\n const providersArray: any[] = []\n const defaults = {\n image: existing.defaults?.image || { model: '', provider: '' },\n text: existing.defaults?.text || { model: '', provider: '' },\n tts: existing.defaults?.tts || { model: '', provider: '' },\n video: existing.defaults?.video || { model: '', provider: '' },\n }\n\n const { providerOptions } = config\n\n // OpenAI Setup\n if (process.env[providerKeys.openai]) {\n const isAlreadyConfigured = existing.providers?.find((p: any) => p.blockType === 'openai')\n if (!isAlreadyConfigured) {\n providersArray.push({\n apiKey: process.env[providerKeys.openai],\n blockType: 'openai',\n enabled: true,\n models: findModelsDefault(openaiBlock),\n })\n initializedAny = true\n }\n }\n\n // Google Setup\n const googleKey = process.env[providerKeys.google[0]] || process.env[providerKeys.google[1]]\n if (googleKey) {\n const isAlreadyConfigured = existing.providers?.find((p: any) => p.blockType === 'google')\n if (!isAlreadyConfigured) {\n providersArray.push({\n apiKey: googleKey,\n blockType: 'google',\n enabled: true,\n models: findModelsDefault(googleBlock),\n })\n initializedAny = true\n }\n }\n\n // Anthropic Setup\n if (process.env[providerKeys.anthropic]) {\n const isAlreadyConfigured = existing.providers?.find((p: any) => p.blockType === 'anthropic')\n if (!isAlreadyConfigured) {\n providersArray.push({\n apiKey: process.env[providerKeys.anthropic],\n blockType: 'anthropic',\n enabled: true,\n models: findModelsDefault(anthropicBlock),\n })\n initializedAny = true\n }\n }\n\n // ElevenLabs Setup\n if (process.env[providerKeys.elevenlabs]) {\n const isAlreadyConfigured = existing.providers?.find((p: any) => p.blockType === 'elevenlabs')\n if (!isAlreadyConfigured) {\n providersArray.push({\n apiKey: process.env[providerKeys.elevenlabs],\n blockType: 'elevenlabs',\n enabled: true,\n models: findModelsDefault(elevenlabsBlock),\n })\n initializedAny = true\n }\n }\n\n // XAI Setup\n if (process.env[providerKeys.xai]) {\n const isAlreadyConfigured = existing.providers?.find((p: any) => p.blockType === 'xai')\n if (!isAlreadyConfigured) {\n providersArray.push({\n apiKey: process.env[providerKeys.xai],\n blockType: 'xai',\n enabled: true,\n models: findModelsDefault(xaiBlock),\n })\n initializedAny = true\n }\n }\n\n // Fal Setup\n if (process.env[providerKeys.fal]) {\n const isAlreadyConfigured = existing.providers?.find((p: any) => p.blockType === 'fal')\n if (!isAlreadyConfigured) {\n providersArray.push({\n apiKey: process.env[providerKeys.fal],\n blockType: 'fal',\n enabled: true,\n models: findModelsDefault(falBlock),\n })\n initializedAny = true\n }\n }\n\n // Setup defaults globally regardless of whether providers were newly added or not\n const configuredProviders = [...(existing.providers || []), ...providersArray]\n if (configuredProviders.length > 0) {\n if (!defaults.text.provider && config.generationDefaults?.text) {\n defaults.text.provider = config.generationDefaults.text.provider\n defaults.text.model = config.generationDefaults.text.model\n initializedAny = true\n }\n \n const providerSchemaByProvider: Record<string, unknown> = {}\n for (const [providerName, options] of Object.entries(providerOptions || {})) {\n if (options && typeof options === 'object' && !Array.isArray(options)) {\n providerSchemaByProvider[providerName] = options\n }\n }\n\n if (!defaults.image.provider && config.generationDefaults?.image) {\n defaults.image.provider = config.generationDefaults.image.provider\n defaults.image.model = config.generationDefaults.image.model\n initializedAny = true\n }\n\n if (!defaults.tts.provider && config.generationDefaults?.tts) {\n defaults.tts.provider = config.generationDefaults.tts.provider\n defaults.tts.model = config.generationDefaults.tts.model\n defaults.tts.voice = config.generationDefaults.tts.voice\n initializedAny = true\n }\n\n if (!defaults.video.provider && config.generationDefaults?.video) {\n defaults.video.provider = config.generationDefaults.video.provider\n defaults.video.model = config.generationDefaults.video.model\n initializedAny = true\n }\n\n if (Object.keys(providerSchemaByProvider).length > 0) {\n const schemaForUseCases = JSON.stringify(providerSchemaByProvider)\n const useCases: Array<'image' | 'text' | 'tts' | 'video'> = ['text', 'image', 'tts', 'video']\n\n for (const useCase of useCases) {\n if (JSON.stringify(defaults[useCase].schema) !== schemaForUseCases) {\n defaults[useCase].schema = JSON.parse(schemaForUseCases)\n initializedAny = true\n }\n }\n }\n }\n\n if (initializedAny) {\n await payload.updateGlobal({\n slug: 'ai-providers',\n data: {\n defaults,\n providers: configuredProviders,\n },\n })\n payload.logger.info(\n `— AI Plugin: Auto-setup complete. Handled defaults for seeded providers.`,\n )\n }\n } catch (error) {\n payload.logger.warn(\n `— AI Plugin: Failed to auto-setup providers: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n}\n"],"names":["anthropicBlock","elevenlabsBlock","falBlock","googleBlock","openaiBlock","xaiBlock","findModelsDefault","block","defaultModels","search","fields","f","name","Array","isArray","defaultValue","tabs","t","providerKeys","anthropic","elevenlabs","fal","google","openai","xai","autoSetupProviders","payload","config","existing","findGlobal","slug","initializedAny","providersArray","defaults","image","model","provider","text","tts","video","providerOptions","process","env","isAlreadyConfigured","providers","find","p","blockType","push","apiKey","enabled","models","googleKey","configuredProviders","length","generationDefaults","providerSchemaByProvider","providerName","options","Object","entries","voice","keys","schemaForUseCases","JSON","stringify","useCases","useCase","schema","parse","updateGlobal","data","logger","info","error","warn","Error","message","String"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/lexical/editorSchemaValidator.ts"],"sourcesContent":["import ajvModule from 'ajv'\n\nexport const editorSchemaValidator = (schema: unknown) => {\n const modifiedSchema = JSON.parse(JSON.stringify(schema), function (key: string, value: any) {\n if (key === 'required' && Array.isArray(value)) {\n // Safely access properties from parent\n const parent = this as { properties?: Record<string, any> }\n const parentProperties = parent.properties\n\n if (parentProperties) {\n const requiredFields = ['type'] // type is always required\n\n // Check if this node has children property\n if ('children' in parentProperties) {\n requiredFields.push('children')\n }\n\n // Check if this node has text property\n if ('text' in parentProperties) {\n requiredFields.push('text')\n }\n\n const filteredRequired = value.filter((field) => requiredFields.includes(field))\n return filteredRequired.length ? filteredRequired : undefined\n }\n }\n return value\n })\n\n const Ajv = ajvModule.default\n const ajv = new Ajv()\n\n return ajv.compile(modifiedSchema)\n}\n"],"names":["ajvModule","editorSchemaValidator","schema","modifiedSchema","JSON","parse","stringify","key","value","Array","isArray","parent","parentProperties","properties","requiredFields","push","filteredRequired","filter","field","includes","length","undefined","Ajv","default","ajv","compile"],"mappings":"AAAA,OAAOA,eAAe,MAAK;AAE3B,OAAO,MAAMC,wBAAwB,CAACC;IACpC,MAAMC,iBAAiBC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACJ,SAAS,SAAUK,GAAW,EAAEC,KAAU;QACzF,IAAID,QAAQ,cAAcE,MAAMC,OAAO,CAACF,QAAQ;YAC9C,uCAAuC;YACvC,MAAMG,SAAS,IAAI;YACnB,MAAMC,mBAAmBD,OAAOE,UAAU;YAE1C,IAAID,kBAAkB;gBACpB,MAAME,iBAAiB;oBAAC;iBAAO,CAAC,0BAA0B;;gBAE1D,2CAA2C;gBAC3C,IAAI,cAAcF,kBAAkB;oBAClCE,eAAeC,IAAI,CAAC;gBACtB;gBAEA,uCAAuC;gBACvC,IAAI,UAAUH,kBAAkB;oBAC9BE,eAAeC,IAAI,CAAC;gBACtB;gBAEA,MAAMC,mBAAmBR,MAAMS,MAAM,CAAC,CAACC,QAAUJ,eAAeK,QAAQ,CAACD;gBACzE,OAAOF,iBAAiBI,MAAM,GAAGJ,mBAAmBK;YACtD;QACF;QACA,OAAOb;IACT;IAEA,MAAMc,MAAMtB,UAAUuB,OAAO;IAC7B,MAAMC,MAAM,IAAIF;IAEhB,OAAOE,IAAIC,OAAO,CAACtB;AACrB,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/lexical/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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export const lexicalToPromptTemplate = (editorState)=>{
|
|
2
|
+
if (!editorState || !editorState.root) {
|
|
3
|
+
return '';
|
|
4
|
+
}
|
|
5
|
+
const traverse = (node)=>{
|
|
6
|
+
if (node.type === 'text') {
|
|
7
|
+
return node.text || '';
|
|
8
|
+
}
|
|
9
|
+
if (node.type === 'beautifulMention') {
|
|
10
|
+
const mentionNode = node;
|
|
11
|
+
// Handle # (Field) -> {{value}}
|
|
12
|
+
if (mentionNode.trigger === '#') {
|
|
13
|
+
// If the value contains spaces or special chars, it might need brackets,
|
|
14
|
+
// but usually for Handlebars variable replacement we expect {{field_name}}
|
|
15
|
+
// The value from our endpoint is the full path e.g. "array.0.field"
|
|
16
|
+
// We assume the value is ready for handlebars.
|
|
17
|
+
return `{{${mentionNode.value}}}`;
|
|
18
|
+
}
|
|
19
|
+
// Handle @ (Image) -> @value
|
|
20
|
+
if (mentionNode.trigger === '@') {
|
|
21
|
+
return `@${mentionNode.value}`;
|
|
22
|
+
}
|
|
23
|
+
return mentionNode.value;
|
|
24
|
+
}
|
|
25
|
+
if (node.type === 'paragraph') {
|
|
26
|
+
const childrenContent = node.children?.map(traverse).join('') || '';
|
|
27
|
+
return childrenContent + '\n';
|
|
28
|
+
}
|
|
29
|
+
if (node.children) {
|
|
30
|
+
return node.children.map(traverse).join('');
|
|
31
|
+
}
|
|
32
|
+
return '';
|
|
33
|
+
};
|
|
34
|
+
const rawTemplate = (editorState.root.children || []).map(traverse).join('').trim();
|
|
35
|
+
// Post-process the template to fix nested handlebars syntax
|
|
36
|
+
// Example 1: `{{toHTML {{content}}}}` -> `{{toHTML content}}`
|
|
37
|
+
// Example 2: `{{#each {{array}}}}` -> `{{#each array}}`
|
|
38
|
+
// Matches any handlebar opening `{{` or `{{#` or `{{/` followed by anything, followed by `{{value}}`, followed by `}}`
|
|
39
|
+
// Actually, a simpler regex: replace `{{(` with `{{` is wrong.
|
|
40
|
+
// We want to replace `{{... {{value}} ...}}` with `{{... value ...}}`
|
|
41
|
+
// Regex to find `{{` inside another `{{` `}}` block is tricky.
|
|
42
|
+
// Instead, let's just globally replace `{{` and `}}` that are immediately inside another tag.
|
|
43
|
+
// Let's use a simpler heuristic: if a mention trigger `#` was used, it returned `{{value}}`.
|
|
44
|
+
// If the user typed `{{toHTML `, then inserted `#content`, then typed `}}`, the raw string is `{{toHTML {{content}}}}`.
|
|
45
|
+
// We can just replace `{{` and `}}` if they are surrounded by an outer bracket context.
|
|
46
|
+
// For safety, let's just fix the specific pattern of nested brackets for mentions.
|
|
47
|
+
return rawTemplate.replace(/(\{\{[^{}]*)\{\{([^}]+)\}\}(.*?\}\})/g, '$1$2$3');
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=lexicalToPromptTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/lexical/lexicalToPromptTemplate.ts"],"sourcesContent":["import type { SerializedEditorState, SerializedLexicalNode } from 'lexical'\n\ninterface BeautifulMentionNode extends SerializedLexicalNode {\n data?: Record<string, unknown>\n trigger: string\n value: string\n}\n\nexport const lexicalToPromptTemplate = (editorState: any | SerializedEditorState): string => {\n if (!editorState || !editorState.root) {\n return ''\n }\n\n const traverse = (node: SerializedLexicalNode): string => {\n if (node.type === 'text') {\n return (node as any).text || ''\n }\n\n if (node.type === 'beautifulMention') {\n const mentionNode = node as BeautifulMentionNode\n // Handle # (Field) -> {{value}}\n if (mentionNode.trigger === '#') {\n // If the value contains spaces or special chars, it might need brackets,\n // but usually for Handlebars variable replacement we expect {{field_name}}\n // The value from our endpoint is the full path e.g. \"array.0.field\"\n // We assume the value is ready for handlebars.\n return `{{${mentionNode.value}}}`\n }\n // Handle @ (Image) -> @value\n if (mentionNode.trigger === '@') {\n return `@${mentionNode.value}`\n }\n return mentionNode.value\n }\n\n if (node.type === 'paragraph') {\n const childrenContent = (node as any).children?.map(traverse).join('') || ''\n return childrenContent + '\\n'\n }\n\n if ((node as any).children) {\n return (node as any).children.map(traverse).join('')\n }\n\n return ''\n }\n\n const rawTemplate = (editorState.root.children || []).map(traverse).join('').trim()\n \n // Post-process the template to fix nested handlebars syntax\n // Example 1: `{{toHTML {{content}}}}` -> `{{toHTML content}}`\n // Example 2: `{{#each {{array}}}}` -> `{{#each array}}`\n // Matches any handlebar opening `{{` or `{{#` or `{{/` followed by anything, followed by `{{value}}`, followed by `}}`\n // Actually, a simpler regex: replace `{{(` with `{{` is wrong.\n // We want to replace `{{... {{value}} ...}}` with `{{... value ...}}`\n // Regex to find `{{` inside another `{{` `}}` block is tricky.\n // Instead, let's just globally replace `{{` and `}}` that are immediately inside another tag.\n // Let's use a simpler heuristic: if a mention trigger `#` was used, it returned `{{value}}`.\n // If the user typed `{{toHTML `, then inserted `#content`, then typed `}}`, the raw string is `{{toHTML {{content}}}}`.\n // We can just replace `{{` and `}}` if they are surrounded by an outer bracket context.\n // For safety, let's just fix the specific pattern of nested brackets for mentions.\n return rawTemplate.replace(/(\\{\\{[^{}]*)\\{\\{([^}]+)\\}\\}(.*?\\}\\})/g, '$1$2$3')\n}\n"],"names":["lexicalToPromptTemplate","editorState","root","traverse","node","type","text","mentionNode","trigger","value","childrenContent","children","map","join","rawTemplate","trim","replace"],"mappings":"AAQA,OAAO,MAAMA,0BAA0B,CAACC;IACtC,IAAI,CAACA,eAAe,CAACA,YAAYC,IAAI,EAAE;QACrC,OAAO;IACT;IAEA,MAAMC,WAAW,CAACC;QAChB,IAAIA,KAAKC,IAAI,KAAK,QAAQ;YACxB,OAAO,AAACD,KAAaE,IAAI,IAAI;QAC/B;QAEA,IAAIF,KAAKC,IAAI,KAAK,oBAAoB;YACpC,MAAME,cAAcH;YACpB,gCAAgC;YAChC,IAAIG,YAAYC,OAAO,KAAK,KAAK;gBAC7B,yEAAyE;gBACzE,2EAA2E;gBAC3E,oEAAoE;gBACpE,+CAA+C;gBAC/C,OAAO,CAAC,EAAE,EAAED,YAAYE,KAAK,CAAC,EAAE,CAAC;YACrC;YACA,6BAA6B;YAC7B,IAAIF,YAAYC,OAAO,KAAK,KAAK;gBAC7B,OAAO,CAAC,CAAC,EAAED,YAAYE,KAAK,CAAC,CAAC;YAClC;YACA,OAAOF,YAAYE,KAAK;QAC1B;QAEA,IAAIL,KAAKC,IAAI,KAAK,aAAa;YAC7B,MAAMK,kBAAkB,AAACN,KAAaO,QAAQ,EAAEC,IAAIT,UAAUU,KAAK,OAAO;YAC1E,OAAOH,kBAAkB;QAC3B;QAEA,IAAI,AAACN,KAAaO,QAAQ,EAAE;YAC1B,OAAO,AAACP,KAAaO,QAAQ,CAACC,GAAG,CAACT,UAAUU,IAAI,CAAC;QACnD;QAEA,OAAO;IACT;IAEA,MAAMC,cAAc,AAACb,CAAAA,YAAYC,IAAI,CAACS,QAAQ,IAAI,EAAE,AAAD,EAAGC,GAAG,CAACT,UAAUU,IAAI,CAAC,IAAIE,IAAI;IAEjF,4DAA4D;IAC5D,8DAA8D;IAC9D,wDAAwD;IACxD,uHAAuH;IACvH,+DAA+D;IAC/D,sEAAsE;IACtE,+DAA+D;IAC/D,8FAA8F;IAC9F,6FAA6F;IAC7F,wHAAwH;IACxH,wFAAwF;IACxF,mFAAmF;IACnF,OAAOD,YAAYE,OAAO,CAAC,yCAAyC;AACtE,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/lexical/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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* eslint-disable */ export const stringToLexicalJSON = (text)=>{
|
|
2
|
+
const rootChildren = [];
|
|
3
|
+
const lines = text.split('\n');
|
|
4
|
+
for (const line of lines){
|
|
5
|
+
const children = [];
|
|
6
|
+
if (line.length > 0) {
|
|
7
|
+
children.push({
|
|
8
|
+
detail: 0,
|
|
9
|
+
format: 0,
|
|
10
|
+
mode: 'normal',
|
|
11
|
+
style: '',
|
|
12
|
+
text: line,
|
|
13
|
+
type: 'text',
|
|
14
|
+
version: 1
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
rootChildren.push({
|
|
18
|
+
children,
|
|
19
|
+
direction: 'ltr',
|
|
20
|
+
format: '',
|
|
21
|
+
indent: 0,
|
|
22
|
+
type: 'paragraph',
|
|
23
|
+
version: 1,
|
|
24
|
+
textFormat: 0
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
root: {
|
|
29
|
+
children: rootChildren,
|
|
30
|
+
direction: 'ltr',
|
|
31
|
+
format: '',
|
|
32
|
+
indent: 0,
|
|
33
|
+
type: 'root',
|
|
34
|
+
version: 1
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=stringToLexicalJSON.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utilities/lexical/stringToLexicalJSON.ts"],"sourcesContent":["/* eslint-disable */\nimport type { SerializedEditorState, SerializedParagraphNode, SerializedTextNode } from 'lexical'\n\nexport const stringToLexicalJSON = (text: string): SerializedEditorState => {\n const rootChildren: SerializedParagraphNode[] = []\n\n const lines = text.split('\\n')\n\n for (const line of lines) {\n const children: SerializedTextNode[] = []\n if (line.length > 0) {\n children.push({\n detail: 0,\n format: 0,\n mode: 'normal',\n style: '',\n text: line,\n type: 'text',\n version: 1,\n })\n }\n\n rootChildren.push({\n children,\n direction: 'ltr',\n format: '',\n indent: 0,\n type: 'paragraph',\n version: 1,\n textFormat: 0, \n } as any)\n }\n\n return {\n root: {\n children: rootChildren,\n direction: 'ltr',\n format: '',\n indent: 0,\n type: 'root',\n version: 1,\n },\n }\n}\n"],"names":["stringToLexicalJSON","text","rootChildren","lines","split","line","children","length","push","detail","format","mode","style","type","version","direction","indent","textFormat","root"],"mappings":"AAAA,kBAAkB,GAGlB,OAAO,MAAMA,sBAAsB,CAACC;IAClC,MAAMC,eAA0C,EAAE;IAElD,MAAMC,QAAQF,KAAKG,KAAK,CAAC;IAEzB,KAAK,MAAMC,QAAQF,MAAO;QACxB,MAAMG,WAAiC,EAAE;QACzC,IAAID,KAAKE,MAAM,GAAG,GAAG;YACnBD,SAASE,IAAI,CAAC;gBACZC,QAAQ;gBACRC,QAAQ;gBACRC,MAAM;gBACNC,OAAO;gBACPX,MAAMI;gBACNQ,MAAM;gBACNC,SAAS;YACX;QACF;QAEAZ,aAAaM,IAAI,CAAC;YAChBF;YACAS,WAAW;YACXL,QAAQ;YACRM,QAAQ;YACRH,MAAM;YACNC,SAAS;YACTG,YAAY;QACd;IACF;IAEA,OAAO;QACLC,MAAM;YACJZ,UAAUJ;YACVa,WAAW;YACXL,QAAQ;YACRM,QAAQ;YACRH,MAAM;YACNC,SAAS;QACX;IACF;AACF,EAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const sanitizeLog: (obj: any) => any;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2
|
+
export const sanitizeLog = (obj)=>{
|
|
3
|
+
if (!obj) {
|
|
4
|
+
return obj;
|
|
5
|
+
}
|
|
6
|
+
// Truncate large string data
|
|
7
|
+
if (typeof obj === 'string') {
|
|
8
|
+
return obj.length > 500 ? `${obj.substring(0, 500)}... [truncated ${obj.length - 500} chars]` : obj;
|
|
9
|
+
}
|
|
10
|
+
// Omit buffer/binary data to prevent huge output
|
|
11
|
+
if (typeof Buffer !== 'undefined' && Buffer.isBuffer(obj) || obj instanceof ArrayBuffer || typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView(obj)) {
|
|
12
|
+
return '[Buffer/Binary omitted for logs]';
|
|
13
|
+
}
|
|
14
|
+
// Recurse arrays
|
|
15
|
+
if (Array.isArray(obj)) {
|
|
16
|
+
return obj.map((item)=>sanitizeLog(item));
|
|
17
|
+
}
|
|
18
|
+
// Clone and recurse objects
|
|
19
|
+
if (typeof obj === 'object') {
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
+
const serialized = {};
|
|
22
|
+
for(const key in obj){
|
|
23
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
24
|
+
// Explicitly catch AI SDK objects or large image representations
|
|
25
|
+
if (key === 'base64' || key === 'base64Data' || key === 'uint8Array' || key === 'data') {
|
|
26
|
+
if (typeof obj[key] === 'string' && obj[key].length > 500) {
|
|
27
|
+
serialized[key] = '[Base64 omitted for logs]';
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
serialized[key] = sanitizeLog(obj[key]);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return serialized;
|
|
35
|
+
}
|
|
36
|
+
return obj;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=sanitizeLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/sanitizeLog.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const sanitizeLog = (obj: any): any => {\n if (!obj) {\n return obj\n }\n \n // Truncate large string data\n if (typeof obj === 'string') {\n return obj.length > 500\n ? `${obj.substring(0, 500)}... [truncated ${obj.length - 500} chars]`\n : obj\n }\n \n // Omit buffer/binary data to prevent huge output\n if (\n typeof Buffer !== 'undefined' && Buffer.isBuffer(obj) ||\n obj instanceof ArrayBuffer ||\n (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView(obj))\n ) {\n return '[Buffer/Binary omitted for logs]'\n }\n \n // Recurse arrays\n if (Array.isArray(obj)) {\n return obj.map((item) => sanitizeLog(item))\n }\n \n // Clone and recurse objects\n if (typeof obj === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const serialized: Record<string, any> = {}\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n // Explicitly catch AI SDK objects or large image representations\n if (key === 'base64' || key === 'base64Data' || key === 'uint8Array' || key === 'data') {\n if (typeof obj[key] === 'string' && obj[key].length > 500) {\n serialized[key] = '[Base64 omitted for logs]'\n continue\n }\n }\n serialized[key] = sanitizeLog(obj[key])\n }\n }\n return serialized\n }\n \n return obj\n}\n"],"names":["sanitizeLog","obj","length","substring","Buffer","isBuffer","ArrayBuffer","isView","Array","isArray","map","item","serialized","key","Object","prototype","hasOwnProperty","call"],"mappings":"AAAA,8DAA8D;AAC9D,OAAO,MAAMA,cAAc,CAACC;IAC1B,IAAI,CAACA,KAAK;QACR,OAAOA;IACT;IAEA,6BAA6B;IAC7B,IAAI,OAAOA,QAAQ,UAAU;QAC3B,OAAOA,IAAIC,MAAM,GAAG,MAChB,CAAC,EAAED,IAAIE,SAAS,CAAC,GAAG,KAAK,eAAe,EAAEF,IAAIC,MAAM,GAAG,IAAI,OAAO,CAAC,GACnED;IACN;IAEA,iDAAiD;IACjD,IACE,OAAOG,WAAW,eAAeA,OAAOC,QAAQ,CAACJ,QACjDA,eAAeK,eACd,OAAOA,gBAAgB,eAAeA,YAAYC,MAAM,CAACN,MAC1D;QACA,OAAO;IACT;IAEA,iBAAiB;IACjB,IAAIO,MAAMC,OAAO,CAACR,MAAM;QACtB,OAAOA,IAAIS,GAAG,CAAC,CAACC,OAASX,YAAYW;IACvC;IAEA,4BAA4B;IAC5B,IAAI,OAAOV,QAAQ,UAAU;QAC3B,8DAA8D;QAC9D,MAAMW,aAAkC,CAAC;QACzC,IAAK,MAAMC,OAAOZ,IAAK;YACrB,IAAIa,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAAChB,KAAKY,MAAM;gBAClD,iEAAiE;gBACjE,IAAIA,QAAQ,YAAYA,QAAQ,gBAAgBA,QAAQ,gBAAgBA,QAAQ,QAAQ;oBACtF,IAAI,OAAOZ,GAAG,CAACY,IAAI,KAAK,YAAYZ,GAAG,CAACY,IAAI,CAACX,MAAM,GAAG,KAAK;wBACzDU,UAAU,CAACC,IAAI,GAAG;wBAClB;oBACF;gBACF;gBACAD,UAAU,CAACC,IAAI,GAAGb,YAAYC,GAAG,CAACY,IAAI;YACxC;QACF;QACA,OAAOD;IACT;IAEA,OAAOX;AACT,EAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js';
|
|
2
|
-
import { updateFieldsConfig } from './updateFieldsConfig.js';
|
|
2
|
+
import { updateFieldsConfig } from './fields/updateFieldsConfig.js';
|
|
3
|
+
import { stringToLexicalJSON } from './lexical/stringToLexicalJSON.js';
|
|
3
4
|
export const seedProperties = async ({ enabledCollections, req })=>{
|
|
4
5
|
const { payload } = req;
|
|
5
6
|
if (!enabledCollections || enabledCollections.length === 0) {
|
|
@@ -16,7 +17,11 @@ export const seedProperties = async ({ enabledCollections, req })=>{
|
|
|
16
17
|
// Use the side-effect of getting schemaPathMap from it
|
|
17
18
|
const { schemaPathMap } = updateFieldsConfig(collectionConfig);
|
|
18
19
|
for (const [schemaPath, fieldInfo] of Object.entries(schemaPathMap)){
|
|
19
|
-
const
|
|
20
|
+
const typedFieldInfo = fieldInfo;
|
|
21
|
+
const custom = typedFieldInfo.custom;
|
|
22
|
+
const hasMany = typedFieldInfo.hasMany;
|
|
23
|
+
const relationTo = typedFieldInfo.relationTo;
|
|
24
|
+
const type = typedFieldInfo.type;
|
|
20
25
|
// Check if instruction already exists
|
|
21
26
|
const existingInstruction = await payload.find({
|
|
22
27
|
collection: PLUGIN_INSTRUCTIONS_TABLE,
|
|
@@ -30,39 +35,63 @@ export const seedProperties = async ({ enabledCollections, req })=>{
|
|
|
30
35
|
}
|
|
31
36
|
});
|
|
32
37
|
if (existingInstruction.totalDocs > 0) {
|
|
38
|
+
const doc = existingInstruction.docs[0];
|
|
39
|
+
const currentPrompt = doc.prompt;
|
|
40
|
+
const currentSystem = doc.system;
|
|
41
|
+
let needsUpdate = false;
|
|
42
|
+
const updateData = {};
|
|
43
|
+
if (!!doc.hasMany !== !!hasMany) {
|
|
44
|
+
updateData.hasMany = !!hasMany;
|
|
45
|
+
needsUpdate = true;
|
|
46
|
+
}
|
|
47
|
+
if (!hasMany && !!doc.appendGenerated) {
|
|
48
|
+
// Keep legacy records consistent when field is no longer hasMany.
|
|
49
|
+
updateData.appendGenerated = false;
|
|
50
|
+
needsUpdate = true;
|
|
51
|
+
}
|
|
33
52
|
// If developer has provided custom prompts in the schema, update the existing record
|
|
34
53
|
// but only if the values have actually changed.
|
|
35
|
-
if (custom?.ai?.prompt || custom?.ai?.system) {
|
|
36
|
-
const doc = existingInstruction.docs[0];
|
|
37
|
-
const currentPrompt = doc.prompt;
|
|
38
|
-
const currentSystem = doc.system;
|
|
39
|
-
let needsUpdate = false;
|
|
40
|
-
const updateData = {};
|
|
54
|
+
if (custom?.ai?.prompt || custom?.ai?.system || custom?.ai?.alwaysShow !== undefined || custom?.ai?.appendGenerated !== undefined || custom?.ai?.disabled !== undefined) {
|
|
41
55
|
if (custom?.ai?.prompt && custom.ai.prompt !== currentPrompt) {
|
|
42
|
-
updateData.prompt = custom.ai.prompt;
|
|
56
|
+
updateData.prompt = stringToLexicalJSON(custom.ai.prompt);
|
|
43
57
|
needsUpdate = true;
|
|
44
58
|
}
|
|
45
59
|
if (custom?.ai?.system && custom.ai.system !== currentSystem) {
|
|
46
60
|
updateData.system = custom.ai.system;
|
|
47
61
|
needsUpdate = true;
|
|
48
62
|
}
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
63
|
+
if (custom?.ai?.alwaysShow !== undefined && custom.ai.alwaysShow !== doc.alwaysShow) {
|
|
64
|
+
updateData.alwaysShow = !!custom.ai.alwaysShow;
|
|
65
|
+
needsUpdate = true;
|
|
66
|
+
}
|
|
67
|
+
if (custom?.ai?.disabled !== undefined && custom.ai.disabled !== doc.disabled) {
|
|
68
|
+
updateData.disabled = !!custom.ai.disabled;
|
|
69
|
+
needsUpdate = true;
|
|
70
|
+
}
|
|
71
|
+
if (custom?.ai?.appendGenerated !== undefined) {
|
|
72
|
+
const nextAppendGenerated = !!hasMany && !!custom.ai.appendGenerated;
|
|
73
|
+
if (nextAppendGenerated !== !!doc.appendGenerated) {
|
|
74
|
+
updateData.appendGenerated = nextAppendGenerated;
|
|
75
|
+
needsUpdate = true;
|
|
59
76
|
}
|
|
60
77
|
}
|
|
61
78
|
}
|
|
79
|
+
if (needsUpdate) {
|
|
80
|
+
try {
|
|
81
|
+
await payload.update({
|
|
82
|
+
id: doc.id,
|
|
83
|
+
collection: PLUGIN_INSTRUCTIONS_TABLE,
|
|
84
|
+
data: updateData,
|
|
85
|
+
overrideAccess: true
|
|
86
|
+
});
|
|
87
|
+
} catch (error) {
|
|
88
|
+
payload.logger.error(`— AI Plugin: Failed to update instruction for ${schemaPath}: ${error}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
62
91
|
continue;
|
|
63
92
|
}
|
|
64
93
|
// Use custom prompts if provided, otherwise leave empty
|
|
65
|
-
const prompt = custom?.ai?.prompt
|
|
94
|
+
const prompt = custom?.ai?.prompt ? stringToLexicalJSON(custom.ai.prompt) : undefined;
|
|
66
95
|
const system = custom?.ai?.system || '';
|
|
67
96
|
// Determine model-id based on field type
|
|
68
97
|
let modelId = 'text';
|
|
@@ -80,8 +109,11 @@ export const seedProperties = async ({ enabledCollections, req })=>{
|
|
|
80
109
|
await payload.create({
|
|
81
110
|
collection: PLUGIN_INSTRUCTIONS_TABLE,
|
|
82
111
|
data: {
|
|
83
|
-
|
|
112
|
+
alwaysShow: !!custom?.ai?.alwaysShow,
|
|
113
|
+
appendGenerated: !!hasMany && !!custom?.ai?.appendGenerated,
|
|
114
|
+
disabled: !!custom?.ai?.disabled,
|
|
84
115
|
'field-type': type,
|
|
116
|
+
hasMany: !!hasMany,
|
|
85
117
|
'model-id': modelId,
|
|
86
118
|
prompt,
|
|
87
119
|
'relation-to': relationTo,
|
|
@@ -91,7 +123,7 @@ export const seedProperties = async ({ enabledCollections, req })=>{
|
|
|
91
123
|
overrideAccess: true
|
|
92
124
|
});
|
|
93
125
|
} catch (error) {
|
|
94
|
-
payload.logger.error(
|
|
126
|
+
payload.logger.error(`— AI Plugin: Failed to seed instruction for ${schemaPath}: ${error}`);
|
|
95
127
|
}
|
|
96
128
|
}
|
|
97
129
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/seedProperties.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js'\nimport { updateFieldsConfig } from './updateFieldsConfig.js'\
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/seedProperties.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\n\nimport { PLUGIN_INSTRUCTIONS_TABLE } from '../defaults.js'\nimport { updateFieldsConfig } from './fields/updateFieldsConfig.js'\nimport { stringToLexicalJSON } from './lexical/stringToLexicalJSON.js'\ninterface SeedPropertiesArgs {\n enabledCollections: string[]\n req: PayloadRequest\n}\n\ninterface SchemaPathFieldInfo {\n custom?: {\n ai?: {\n alwaysShow?: boolean\n appendGenerated?: boolean\n disabled?: boolean\n prompt?: string\n system?: string\n }\n }\n hasMany?: boolean\n relationTo?: string\n type: string\n}\n\nexport const seedProperties = async ({ enabledCollections, req }: SeedPropertiesArgs): Promise<void> => {\n const { payload } = req\n\n if (!enabledCollections || enabledCollections.length === 0) {\n return\n }\n\n // Get all collections from payload config\n const allCollections = payload.config.collections\n\n for (const collectionSlug of enabledCollections) {\n const collectionConfig = allCollections.find((c) => c.slug === collectionSlug)\n if (!collectionConfig) {\n continue\n }\n\n // Traverse the collection config effectively using updateFieldsConfig\n // Use the side-effect of getting schemaPathMap from it\n const { schemaPathMap } = updateFieldsConfig(collectionConfig)\n\n for (const [schemaPath, fieldInfo] of Object.entries(schemaPathMap)) {\n const typedFieldInfo = fieldInfo as SchemaPathFieldInfo\n const custom = typedFieldInfo.custom\n const hasMany = typedFieldInfo.hasMany\n const relationTo = typedFieldInfo.relationTo\n const type = typedFieldInfo.type\n\n // Check if instruction already exists\n const existingInstruction = await payload.find({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n depth: 0,\n limit: 1,\n overrideAccess: true,\n where: {\n 'schema-path': {\n equals: schemaPath,\n },\n },\n })\n\n if (existingInstruction.totalDocs > 0) {\n const doc = existingInstruction.docs[0] as any\n const currentPrompt = doc.prompt\n const currentSystem = doc.system\n\n let needsUpdate = false\n const updateData: any = {}\n\n if (!!doc.hasMany !== !!hasMany) {\n updateData.hasMany = !!hasMany\n needsUpdate = true\n }\n if (!hasMany && !!doc.appendGenerated) {\n // Keep legacy records consistent when field is no longer hasMany.\n updateData.appendGenerated = false\n needsUpdate = true\n }\n\n // If developer has provided custom prompts in the schema, update the existing record\n // but only if the values have actually changed.\n if (\n custom?.ai?.prompt ||\n custom?.ai?.system ||\n custom?.ai?.alwaysShow !== undefined ||\n custom?.ai?.appendGenerated !== undefined ||\n custom?.ai?.disabled !== undefined\n ) {\n if (custom?.ai?.prompt && custom.ai.prompt !== currentPrompt) {\n updateData.prompt = stringToLexicalJSON(custom.ai.prompt)\n needsUpdate = true\n }\n if (custom?.ai?.system && custom.ai.system !== currentSystem) {\n updateData.system = custom.ai.system\n needsUpdate = true\n }\n if (custom?.ai?.alwaysShow !== undefined && custom.ai.alwaysShow !== doc.alwaysShow) {\n updateData.alwaysShow = !!custom.ai.alwaysShow\n needsUpdate = true\n }\n if (custom?.ai?.disabled !== undefined && custom.ai.disabled !== doc.disabled) {\n updateData.disabled = !!custom.ai.disabled\n needsUpdate = true\n }\n if (custom?.ai?.appendGenerated !== undefined) {\n const nextAppendGenerated = !!hasMany && !!custom.ai.appendGenerated\n if (nextAppendGenerated !== !!doc.appendGenerated) {\n updateData.appendGenerated = nextAppendGenerated\n needsUpdate = true\n }\n }\n }\n\n if (needsUpdate) {\n try {\n await payload.update({\n id: doc.id,\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n data: updateData,\n overrideAccess: true,\n })\n } catch (error) {\n payload.logger.error(`— AI Plugin: Failed to update instruction for ${schemaPath}: ${error}`)\n }\n }\n continue\n }\n\n // Use custom prompts if provided, otherwise leave empty\n const prompt = custom?.ai?.prompt ? stringToLexicalJSON(custom.ai.prompt) : undefined\n const system = custom?.ai?.system || ''\n\n // Determine model-id based on field type\n let modelId = 'text'\n if (type === 'richText') {\n modelId = 'richtext'\n }\n if (type === 'upload') {\n modelId = 'image'\n } // defaulting to image generation for uploads\n if (type === 'array') {\n modelId = 'array'\n }\n\n // Create new instruction\n try {\n await payload.create({\n collection: PLUGIN_INSTRUCTIONS_TABLE,\n data: {\n alwaysShow: !!custom?.ai?.alwaysShow,\n appendGenerated: !!hasMany && !!custom?.ai?.appendGenerated,\n disabled: !!custom?.ai?.disabled,\n 'field-type': type,\n hasMany: !!hasMany,\n 'model-id': modelId,\n prompt,\n 'relation-to': relationTo,\n 'schema-path': schemaPath,\n system,\n },\n overrideAccess: true,\n })\n } catch (error) {\n payload.logger.error(`— AI Plugin: Failed to seed instruction for ${schemaPath}: ${error}`)\n }\n }\n }\n}\n"],"names":["PLUGIN_INSTRUCTIONS_TABLE","updateFieldsConfig","stringToLexicalJSON","seedProperties","enabledCollections","req","payload","length","allCollections","config","collections","collectionSlug","collectionConfig","find","c","slug","schemaPathMap","schemaPath","fieldInfo","Object","entries","typedFieldInfo","custom","hasMany","relationTo","type","existingInstruction","collection","depth","limit","overrideAccess","where","equals","totalDocs","doc","docs","currentPrompt","prompt","currentSystem","system","needsUpdate","updateData","appendGenerated","ai","alwaysShow","undefined","disabled","nextAppendGenerated","update","id","data","error","logger","modelId","create"],"mappings":"AAEA,SAASA,yBAAyB,QAAQ,iBAAgB;AAC1D,SAASC,kBAAkB,QAAQ,iCAAgC;AACnE,SAASC,mBAAmB,QAAQ,mCAAkC;AAqBtE,OAAO,MAAMC,iBAAiB,OAAO,EAAEC,kBAAkB,EAAEC,GAAG,EAAsB;IAClF,MAAM,EAAEC,OAAO,EAAE,GAAGD;IAEpB,IAAI,CAACD,sBAAsBA,mBAAmBG,MAAM,KAAK,GAAG;QAC1D;IACF;IAEA,0CAA0C;IAC1C,MAAMC,iBAAiBF,QAAQG,MAAM,CAACC,WAAW;IAEjD,KAAK,MAAMC,kBAAkBP,mBAAoB;QAC/C,MAAMQ,mBAAmBJ,eAAeK,IAAI,CAAC,CAACC,IAAMA,EAAEC,IAAI,KAAKJ;QAC/D,IAAI,CAACC,kBAAkB;YACrB;QACF;QAEA,sEAAsE;QACtE,uDAAuD;QACvD,MAAM,EAAEI,aAAa,EAAE,GAAGf,mBAAmBW;QAE7C,KAAK,MAAM,CAACK,YAAYC,UAAU,IAAIC,OAAOC,OAAO,CAACJ,eAAgB;YACnE,MAAMK,iBAAiBH;YACvB,MAAMI,SAASD,eAAeC,MAAM;YACpC,MAAMC,UAAUF,eAAeE,OAAO;YACtC,MAAMC,aAAaH,eAAeG,UAAU;YAC5C,MAAMC,OAAOJ,eAAeI,IAAI;YAEhC,sCAAsC;YACtC,MAAMC,sBAAsB,MAAMpB,QAAQO,IAAI,CAAC;gBAC7Cc,YAAY3B;gBACZ4B,OAAO;gBACPC,OAAO;gBACPC,gBAAgB;gBAChBC,OAAO;oBACL,eAAe;wBACbC,QAAQf;oBACV;gBACF;YACF;YAEA,IAAIS,oBAAoBO,SAAS,GAAG,GAAG;gBACrC,MAAMC,MAAMR,oBAAoBS,IAAI,CAAC,EAAE;gBACvC,MAAMC,gBAAgBF,IAAIG,MAAM;gBAChC,MAAMC,gBAAgBJ,IAAIK,MAAM;gBAEhC,IAAIC,cAAc;gBAClB,MAAMC,aAAkB,CAAC;gBAEzB,IAAI,CAAC,CAACP,IAAIX,OAAO,KAAK,CAAC,CAACA,SAAS;oBAC/BkB,WAAWlB,OAAO,GAAG,CAAC,CAACA;oBACvBiB,cAAc;gBAChB;gBACA,IAAI,CAACjB,WAAW,CAAC,CAACW,IAAIQ,eAAe,EAAE;oBACrC,kEAAkE;oBAClED,WAAWC,eAAe,GAAG;oBAC7BF,cAAc;gBAChB;gBAEA,qFAAqF;gBACrF,gDAAgD;gBAChD,IACElB,QAAQqB,IAAIN,UACZf,QAAQqB,IAAIJ,UACZjB,QAAQqB,IAAIC,eAAeC,aAC3BvB,QAAQqB,IAAID,oBAAoBG,aAChCvB,QAAQqB,IAAIG,aAAaD,WACzB;oBACA,IAAIvB,QAAQqB,IAAIN,UAAUf,OAAOqB,EAAE,CAACN,MAAM,KAAKD,eAAe;wBAC5DK,WAAWJ,MAAM,GAAGnC,oBAAoBoB,OAAOqB,EAAE,CAACN,MAAM;wBACxDG,cAAc;oBAChB;oBACA,IAAIlB,QAAQqB,IAAIJ,UAAUjB,OAAOqB,EAAE,CAACJ,MAAM,KAAKD,eAAe;wBAC5DG,WAAWF,MAAM,GAAGjB,OAAOqB,EAAE,CAACJ,MAAM;wBACpCC,cAAc;oBAChB;oBACA,IAAIlB,QAAQqB,IAAIC,eAAeC,aAAavB,OAAOqB,EAAE,CAACC,UAAU,KAAKV,IAAIU,UAAU,EAAE;wBACnFH,WAAWG,UAAU,GAAG,CAAC,CAACtB,OAAOqB,EAAE,CAACC,UAAU;wBAC9CJ,cAAc;oBAChB;oBACA,IAAIlB,QAAQqB,IAAIG,aAAaD,aAAavB,OAAOqB,EAAE,CAACG,QAAQ,KAAKZ,IAAIY,QAAQ,EAAE;wBAC7EL,WAAWK,QAAQ,GAAG,CAAC,CAACxB,OAAOqB,EAAE,CAACG,QAAQ;wBAC1CN,cAAc;oBAChB;oBACA,IAAIlB,QAAQqB,IAAID,oBAAoBG,WAAW;wBAC7C,MAAME,sBAAsB,CAAC,CAACxB,WAAW,CAAC,CAACD,OAAOqB,EAAE,CAACD,eAAe;wBACpE,IAAIK,wBAAwB,CAAC,CAACb,IAAIQ,eAAe,EAAE;4BACjDD,WAAWC,eAAe,GAAGK;4BAC7BP,cAAc;wBAChB;oBACF;gBACF;gBAEA,IAAIA,aAAa;oBACf,IAAI;wBACF,MAAMlC,QAAQ0C,MAAM,CAAC;4BACnBC,IAAIf,IAAIe,EAAE;4BACVtB,YAAY3B;4BACZkD,MAAMT;4BACNX,gBAAgB;wBAClB;oBACF,EAAE,OAAOqB,OAAO;wBACd7C,QAAQ8C,MAAM,CAACD,KAAK,CAAC,CAAC,8CAA8C,EAAElC,WAAW,EAAE,EAAEkC,MAAM,CAAC;oBAC9F;gBACF;gBACA;YACF;YAEA,wDAAwD;YACxD,MAAMd,SAASf,QAAQqB,IAAIN,SAASnC,oBAAoBoB,OAAOqB,EAAE,CAACN,MAAM,IAAIQ;YAC5E,MAAMN,SAASjB,QAAQqB,IAAIJ,UAAU;YAErC,yCAAyC;YACzC,IAAIc,UAAU;YACd,IAAI5B,SAAS,YAAY;gBACvB4B,UAAU;YACZ;YACA,IAAI5B,SAAS,UAAU;gBACrB4B,UAAU;YACZ,EAAE,6CAA6C;YAC/C,IAAI5B,SAAS,SAAS;gBACpB4B,UAAU;YACZ;YAEA,yBAAyB;YACzB,IAAI;gBACF,MAAM/C,QAAQgD,MAAM,CAAC;oBACnB3B,YAAY3B;oBACZkD,MAAM;wBACJN,YAAY,CAAC,CAACtB,QAAQqB,IAAIC;wBAC1BF,iBAAiB,CAAC,CAACnB,WAAW,CAAC,CAACD,QAAQqB,IAAID;wBAC5CI,UAAU,CAAC,CAACxB,QAAQqB,IAAIG;wBACxB,cAAcrB;wBACdF,SAAS,CAAC,CAACA;wBACX,YAAY8B;wBACZhB;wBACA,eAAeb;wBACf,eAAeP;wBACfsB;oBACF;oBACAT,gBAAgB;gBAClB;YACF,EAAE,OAAOqB,OAAO;gBACd7C,QAAQ8C,MAAM,CAACD,KAAK,CAAC,CAAC,4CAA4C,EAAElC,WAAW,EAAE,EAAEkC,MAAM,CAAC;YAC5F;QACF;IACF;AACF,EAAC"}
|