n8n-editor-ui 1.43.0 → 1.43.1
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/.turbo/turbo-build.log +72 -72
- package/dist/assets/{AuthView-wAV15F8m.js → AuthView-k9-4l8d2.js} +2 -2
- package/dist/assets/{AuthView-wAV15F8m.js.map → AuthView-k9-4l8d2.js.map} +1 -1
- package/dist/assets/{CanvasControls-gKuuF9YF.js → CanvasControls-4_78UsoA.js} +2 -2
- package/dist/assets/{CanvasControls-gKuuF9YF.js.map → CanvasControls-4_78UsoA.js.map} +1 -1
- package/dist/assets/{ChangePasswordView-lW3AftTZ.js → ChangePasswordView-WZx2sxAq.js} +2 -2
- package/dist/assets/{ChangePasswordView-lW3AftTZ.js.map → ChangePasswordView-WZx2sxAq.js.map} +1 -1
- package/dist/assets/{CollectionParameter-DTYD_Lcf.js → CollectionParameter-DDWzNH-Y.js} +2 -2
- package/dist/assets/CollectionParameter-DDWzNH-Y.js.map +1 -0
- package/dist/assets/{CredentialsView-R7OKepMF.js → CredentialsView-pP5cOmCw.js} +2 -2
- package/dist/assets/{CredentialsView-R7OKepMF.js.map → CredentialsView-pP5cOmCw.js.map} +1 -1
- package/dist/assets/{ExecutionsFilter-NfToJM9y.js → ExecutionsFilter-Zq0mjSZf.js} +2 -2
- package/dist/assets/{ExecutionsFilter-NfToJM9y.js.map → ExecutionsFilter-Zq0mjSZf.js.map} +1 -1
- package/dist/assets/{ExecutionsView-i3z4OWwK.js → ExecutionsView-2RUbEKrf.js} +2 -2
- package/dist/assets/{ExecutionsView-i3z4OWwK.js.map → ExecutionsView-2RUbEKrf.js.map} +1 -1
- package/dist/assets/{ForgotMyPasswordView-OicEjBTM.js → ForgotMyPasswordView-ZBwhNj_M.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-OicEjBTM.js.map → ForgotMyPasswordView-ZBwhNj_M.js.map} +1 -1
- package/dist/assets/{MainHeader-VEoGw9mF.js → MainHeader-__zJO-m7.js} +2 -2
- package/dist/assets/{MainHeader-VEoGw9mF.js.map → MainHeader-__zJO-m7.js.map} +1 -1
- package/dist/assets/{MainSidebar-9VtAlHw5.js → MainSidebar-7XGRE24x.js} +2 -2
- package/dist/assets/{MainSidebar-9VtAlHw5.js.map → MainSidebar-7XGRE24x.js.map} +1 -1
- package/dist/assets/{NodeCreation-yGH6whwu.js → NodeCreation-BmkaaGqL.js} +3 -3
- package/dist/assets/{NodeCreation-yGH6whwu.js.map → NodeCreation-BmkaaGqL.js.map} +1 -1
- package/dist/assets/{NodeCreator-uo45xC8F.js → NodeCreator-iBjoivu6.js} +2 -2
- package/dist/assets/{NodeCreator-uo45xC8F.js.map → NodeCreator-iBjoivu6.js.map} +1 -1
- package/dist/assets/{NodeList-mBvddp-7.js → NodeList-qt_5gC5-.js} +2 -2
- package/dist/assets/{NodeList-mBvddp-7.js.map → NodeList-qt_5gC5-.js.map} +1 -1
- package/dist/assets/NodeView-qN4Zuw87.js +9 -0
- package/dist/assets/NodeView-qN4Zuw87.js.map +1 -0
- package/dist/assets/{NodeView-XB-d5jgs.css → NodeView-sEzPscdT.css} +1 -1
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-YOVpN0pD.js → ProjectCardBadge.vue_vue_type_script_setup_true_lang-tfIcNjaC.js} +2 -2
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-YOVpN0pD.js.map → ProjectCardBadge.vue_vue_type_script_setup_true_lang-tfIcNjaC.js.map} +1 -1
- package/dist/assets/{ProjectSettings-ZDAhIwhQ.js → ProjectSettings-B-H5G2EN.js} +2 -2
- package/dist/assets/{ProjectSettings-ZDAhIwhQ.js.map → ProjectSettings-B-H5G2EN.js.map} +1 -1
- package/dist/assets/{ProjectTabs-L2yrOMy6.js → ProjectTabs-A5hdgqW2.js} +2 -2
- package/dist/assets/{ProjectTabs-L2yrOMy6.js.map → ProjectTabs-A5hdgqW2.js.map} +1 -1
- package/dist/assets/{PushConnectionTracker-GgAPUiGC.js → PushConnectionTracker-1875-61J.js} +2 -2
- package/dist/assets/{PushConnectionTracker-GgAPUiGC.js.map → PushConnectionTracker-1875-61J.js.map} +1 -1
- package/dist/assets/{ResourcesListLayout-S53Q3neu.js → ResourcesListLayout-zQLxB7dP.js} +2 -2
- package/dist/assets/{ResourcesListLayout-S53Q3neu.js.map → ResourcesListLayout-zQLxB7dP.js.map} +1 -1
- package/dist/assets/{RunDataAi-jJ9KfOCF.js → RunDataAi-sZalPI5G.js} +2 -2
- package/dist/assets/{RunDataAi-jJ9KfOCF.js.map → RunDataAi-sZalPI5G.js.map} +1 -1
- package/dist/assets/{RunDataJson-52-sD-ud.js → RunDataJson-Wjq8QCxZ.js} +3 -3
- package/dist/assets/{RunDataJson-52-sD-ud.js.map → RunDataJson-Wjq8QCxZ.js.map} +1 -1
- package/dist/assets/{RunDataJsonActions-Zjaa2Qdn.js → RunDataJsonActions-s5miC4iz.js} +2 -2
- package/dist/assets/{RunDataJsonActions-Zjaa2Qdn.js.map → RunDataJsonActions-s5miC4iz.js.map} +1 -1
- package/dist/assets/{RunDataSchema-iNj_tX9n.js → RunDataSchema-s4wg-kE7.js} +2 -2
- package/dist/assets/{RunDataSchema-iNj_tX9n.js.map → RunDataSchema-s4wg-kE7.js.map} +1 -1
- package/dist/assets/{RunDataSearch-6GGyQrwT.js → RunDataSearch-jtcvkqv3.js} +2 -2
- package/dist/assets/{RunDataSearch-6GGyQrwT.js.map → RunDataSearch-jtcvkqv3.js.map} +1 -1
- package/dist/assets/{RunDataTable-f5gLoK65.js → RunDataTable-ViMJNYSP.js} +2 -2
- package/dist/assets/{RunDataTable-f5gLoK65.js.map → RunDataTable-ViMJNYSP.js.map} +1 -1
- package/dist/assets/{SamlOnboarding--QQ0CjBZ.js → SamlOnboarding-ImP6fnp5.js} +2 -2
- package/dist/assets/{SamlOnboarding--QQ0CjBZ.js.map → SamlOnboarding-ImP6fnp5.js.map} +1 -1
- package/dist/assets/{SettingsApiView-XqezQtu_.js → SettingsApiView-mtjfmBn2.js} +2 -2
- package/dist/assets/{SettingsApiView-XqezQtu_.js.map → SettingsApiView-mtjfmBn2.js.map} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-qmLS2FT2.js → SettingsCommunityNodesView-3ZbERy3i.js} +2 -2
- package/dist/assets/{SettingsCommunityNodesView-qmLS2FT2.js.map → SettingsCommunityNodesView-3ZbERy3i.js.map} +1 -1
- package/dist/assets/{SettingsExternalSecrets--1U82XVJ.js → SettingsExternalSecrets-RZSTXpBn.js} +2 -2
- package/dist/assets/{SettingsExternalSecrets--1U82XVJ.js.map → SettingsExternalSecrets-RZSTXpBn.js.map} +1 -1
- package/dist/assets/{SettingsFakeDoorView-7i_qMtlE.js → SettingsFakeDoorView-woDCBRrk.js} +2 -2
- package/dist/assets/{SettingsFakeDoorView-7i_qMtlE.js.map → SettingsFakeDoorView-woDCBRrk.js.map} +1 -1
- package/dist/assets/{SettingsLdapView-uwXk-BOB.js → SettingsLdapView-VGtviAVN.js} +2 -2
- package/dist/assets/{SettingsLdapView-uwXk-BOB.js.map → SettingsLdapView-VGtviAVN.js.map} +1 -1
- package/dist/assets/{SettingsLogStreamingView-9iFeBG5H.js → SettingsLogStreamingView--Mm-atCG.js} +2 -2
- package/dist/assets/{SettingsLogStreamingView-9iFeBG5H.js.map → SettingsLogStreamingView--Mm-atCG.js.map} +1 -1
- package/dist/assets/{SettingsPersonalView-wv1eEj4o.js → SettingsPersonalView-5sWpXI6Q.js} +2 -2
- package/dist/assets/{SettingsPersonalView-wv1eEj4o.js.map → SettingsPersonalView-5sWpXI6Q.js.map} +1 -1
- package/dist/assets/{SettingsSourceControl-Q_7vZyBx.js → SettingsSourceControl-XlFUiK_r.js} +2 -2
- package/dist/assets/{SettingsSourceControl-Q_7vZyBx.js.map → SettingsSourceControl-XlFUiK_r.js.map} +1 -1
- package/dist/assets/{SettingsSso-9-1iByXJ.js → SettingsSso-RaxUMYEI.js} +2 -2
- package/dist/assets/{SettingsSso-9-1iByXJ.js.map → SettingsSso-RaxUMYEI.js.map} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-Es866y16.js → SettingsUsageAndPlan-hZIuBr2_.js} +2 -2
- package/dist/assets/{SettingsUsageAndPlan-Es866y16.js.map → SettingsUsageAndPlan-hZIuBr2_.js.map} +1 -1
- package/dist/assets/{SettingsUsersView-wmmQr7i0.js → SettingsUsersView-Y7yTA_F4.js} +2 -2
- package/dist/assets/{SettingsUsersView-wmmQr7i0.js.map → SettingsUsersView-Y7yTA_F4.js.map} +1 -1
- package/dist/assets/{SettingsView-oYe3uTRj.js → SettingsView-rKKZ6L11.js} +2 -2
- package/dist/assets/{SettingsView-oYe3uTRj.js.map → SettingsView-rKKZ6L11.js.map} +1 -1
- package/dist/assets/{SetupView-KGS1CEsN.js → SetupView-vgQT3oJU.js} +2 -2
- package/dist/assets/{SetupView-KGS1CEsN.js.map → SetupView-vgQT3oJU.js.map} +1 -1
- package/dist/assets/{SetupWorkflowCredentialsButton-Ccl5HCte.js → SetupWorkflowCredentialsButton-QGvaG01Z.js} +2 -2
- package/dist/assets/{SetupWorkflowCredentialsButton-Ccl5HCte.js.map → SetupWorkflowCredentialsButton-QGvaG01Z.js.map} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-_ayHH-IZ.js → SetupWorkflowFromTemplateView-8kV0zT9M.js} +2 -2
- package/dist/assets/{SetupWorkflowFromTemplateView-_ayHH-IZ.js.map → SetupWorkflowFromTemplateView-8kV0zT9M.js.map} +1 -1
- package/dist/assets/{SigninView-Gc6N_vLo.js → SigninView-9HcFtYYH.js} +2 -2
- package/dist/assets/{SigninView-Gc6N_vLo.js.map → SigninView-9HcFtYYH.js.map} +1 -1
- package/dist/assets/SignoutView-aFW_4GHN.js +2 -0
- package/dist/assets/SignoutView-aFW_4GHN.js.map +1 -0
- package/dist/assets/{SignupView-TUYaR1Nz.js → SignupView-pWu_Kk45.js} +2 -2
- package/dist/assets/{SignupView-TUYaR1Nz.js.map → SignupView-pWu_Kk45.js.map} +1 -1
- package/dist/assets/{TemplateDetails-s0HGsSP9.js → TemplateDetails-PaDbF87J.js} +2 -2
- package/dist/assets/{TemplateDetails-s0HGsSP9.js.map → TemplateDetails-PaDbF87J.js.map} +1 -1
- package/dist/assets/{TemplateList--L3zJ5wK.js → TemplateList-M4LBpjOe.js} +2 -2
- package/dist/assets/{TemplateList--L3zJ5wK.js.map → TemplateList-M4LBpjOe.js.map} +1 -1
- package/dist/assets/{TemplatesCollectionView-d1seBq10.js → TemplatesCollectionView-RBv7X4Gh.js} +2 -2
- package/dist/assets/{TemplatesCollectionView-d1seBq10.js.map → TemplatesCollectionView-RBv7X4Gh.js.map} +1 -1
- package/dist/assets/{TemplatesInfoCarousel-XG1W0SLa.js → TemplatesInfoCarousel-e2wgfGBn.js} +2 -2
- package/dist/assets/{TemplatesInfoCarousel-XG1W0SLa.js.map → TemplatesInfoCarousel-e2wgfGBn.js.map} +1 -1
- package/dist/assets/{TemplatesSearchView-OYEX_uZ1.js → TemplatesSearchView-FkqpvNK2.js} +2 -2
- package/dist/assets/{TemplatesSearchView-OYEX_uZ1.js.map → TemplatesSearchView-FkqpvNK2.js.map} +1 -1
- package/dist/assets/{TemplatesView-RFX1Nriq.js → TemplatesView-bbDzQ95P.js} +2 -2
- package/dist/assets/{TemplatesView-RFX1Nriq.js.map → TemplatesView-bbDzQ95P.js.map} +1 -1
- package/dist/assets/{TemplatesWorkflowView-t6Xqg5xY.js → TemplatesWorkflowView-7-rFNLp9.js} +2 -2
- package/dist/assets/{TemplatesWorkflowView-t6Xqg5xY.js.map → TemplatesWorkflowView-7-rFNLp9.js.map} +1 -1
- package/dist/assets/{VariablesView-ZV3cuGWP.js → VariablesView-qHyda1UV.js} +2 -2
- package/dist/assets/{VariablesView-ZV3cuGWP.js.map → VariablesView-qHyda1UV.js.map} +1 -1
- package/dist/assets/{WorkerView-PvV1tbob.js → WorkerView-B0yhM0J1.js} +2 -2
- package/dist/assets/{WorkerView-PvV1tbob.js.map → WorkerView-B0yhM0J1.js.map} +1 -1
- package/dist/assets/{WorkflowActivator-TncK9t4c.js → WorkflowActivator-VjkeCh0z.js} +2 -2
- package/dist/assets/{WorkflowActivator-TncK9t4c.js.map → WorkflowActivator-VjkeCh0z.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsInfoAccordion-AnHjUFE3.js → WorkflowExecutionsInfoAccordion-3GkCvE9Q.js} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-AnHjUFE3.js.map → WorkflowExecutionsInfoAccordion-3GkCvE9Q.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsLandingPage-oxT4cL0I.js → WorkflowExecutionsLandingPage-O_YbgvYB.js} +2 -2
- package/dist/assets/{WorkflowExecutionsLandingPage-oxT4cL0I.js.map → WorkflowExecutionsLandingPage-O_YbgvYB.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsPreview-S4t3V3mn.js → WorkflowExecutionsPreview-6bNa2avB.js} +2 -2
- package/dist/assets/{WorkflowExecutionsPreview-S4t3V3mn.js.map → WorkflowExecutionsPreview-6bNa2avB.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsView-2SiI_dZv.js → WorkflowExecutionsView-e12KrPNp.js} +2 -2
- package/dist/assets/{WorkflowExecutionsView-2SiI_dZv.js.map → WorkflowExecutionsView-e12KrPNp.js.map} +1 -1
- package/dist/assets/{WorkflowHistory-tlNmMBC4.js → WorkflowHistory-XyI7xi5R.js} +2 -2
- package/dist/assets/{WorkflowHistory-tlNmMBC4.js.map → WorkflowHistory-XyI7xi5R.js.map} +1 -1
- package/dist/assets/{WorkflowOnboardingView-sQP7Ib3w.js → WorkflowOnboardingView-wfo0sagy.js} +2 -2
- package/dist/assets/{WorkflowOnboardingView-sQP7Ib3w.js.map → WorkflowOnboardingView-wfo0sagy.js.map} +1 -1
- package/dist/assets/{WorkflowsView-77fg2wMF.js → WorkflowsView-zWdxjaUV.js} +2 -2
- package/dist/assets/{WorkflowsView-77fg2wMF.js.map → WorkflowsView-zWdxjaUV.js.map} +1 -1
- package/dist/assets/{cloud-k5hx0-AG.js → cloud-FHxD5S8r.js} +2 -2
- package/dist/assets/{cloud-k5hx0-AG.js.map → cloud-FHxD5S8r.js.map} +1 -1
- package/dist/assets/{collaboration.store-nJkMa2Yk.js → collaboration.store-aa4nebcL.js} +2 -2
- package/dist/assets/{collaboration.store-nJkMa2Yk.js.map → collaboration.store-aa4nebcL.js.map} +1 -1
- package/dist/assets/{index-OLvpAx8p.js → index-6ulnOLCO.js} +4 -4
- package/dist/assets/{index-OLvpAx8p.js.map → index-6ulnOLCO.js.map} +1 -1
- package/dist/assets/{templateActions-4mG5U0Gi.js → templateActions-9fUm8Xpc.js} +2 -2
- package/dist/assets/{templateActions-4mG5U0Gi.js.map → templateActions-9fUm8Xpc.js.map} +1 -1
- package/dist/assets/{useExecutionDebugging-PDsNeD99.js → useExecutionDebugging-QUE85fFt.js} +2 -2
- package/dist/assets/{useExecutionDebugging-PDsNeD99.js.map → useExecutionDebugging-QUE85fFt.js.map} +1 -1
- package/dist/assets/{useExecutionHelpers-z0jWdDj0.js → useExecutionHelpers-5nDBsYfy.js} +2 -2
- package/dist/assets/{useExecutionHelpers-z0jWdDj0.js.map → useExecutionHelpers-5nDBsYfy.js.map} +1 -1
- package/dist/assets/{usePushConnection-5HhKaz1I.js → usePushConnection-FzHJLOiR.js} +2 -2
- package/dist/assets/{usePushConnection-5HhKaz1I.js.map → usePushConnection-FzHJLOiR.js.map} +1 -1
- package/dist/assets/{useWorkflowActivate--rX-aMfx.js → useWorkflowActivate-rx_C76SX.js} +2 -2
- package/dist/assets/{useWorkflowActivate--rX-aMfx.js.map → useWorkflowActivate-rx_C76SX.js.map} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/dist/assets/CollectionParameter-DTYD_Lcf.js.map +0 -1
- package/dist/assets/NodeView-vh3Qdfdh.js +0 -9
- package/dist/assets/NodeView-vh3Qdfdh.js.map +0 -1
- package/dist/assets/SignoutView-zep-aWVN.js +0 -2
- package/dist/assets/SignoutView-zep-aWVN.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunDataAi-jJ9KfOCF.js","sources":["../../src/components/RunDataAi/useAiContentParsers.ts","../../../../node_modules/.pnpm/vue-markdown-render@2.0.1_typescript@5.4.2/node_modules/vue-markdown-render/dist/VueMarkdown.js","../../src/components/RunDataAi/AiRunContentBlock.vue","../../src/components/RunDataAi/RunDataAiContent.vue","../../src/components/RunDataAi/RunDataAi.vue"],"sourcesContent":["import type { IDataObject, INodeExecutionData } from 'n8n-workflow';\nimport { isObjectEmpty, NodeConnectionType } from 'n8n-workflow';\n\ninterface MemoryMessage {\n\tlc: number;\n\ttype: string;\n\tid: string[];\n\tkwargs: {\n\t\tcontent: unknown;\n\t\tadditional_kwargs: Record<string, unknown>;\n\t};\n}\ninterface LmGeneration {\n\ttext: string;\n\tmessage: MemoryMessage;\n}\n\ntype ExcludedKeys = NodeConnectionType.Main | NodeConnectionType.AiChain;\ntype AllowedEndpointType = Exclude<NodeConnectionType, ExcludedKeys>;\n\nconst fallbackParser = (execData: IDataObject) => ({\n\ttype: 'json' as 'json' | 'text' | 'markdown',\n\tdata: execData,\n\tparsed: false,\n});\n\nconst outputTypeParsers: {\n\t[key in AllowedEndpointType]: (execData: IDataObject) => {\n\t\ttype: 'json' | 'text' | 'markdown';\n\t\tdata: unknown;\n\t\tparsed: boolean;\n\t};\n} = {\n\t[NodeConnectionType.AiLanguageModel](execData: IDataObject) {\n\t\tconst response = (execData.response as IDataObject) ?? execData;\n\t\tif (!response) throw new Error('No response from Language Model');\n\n\t\t// Simple LLM output — single string message item\n\t\tif (\n\t\t\tArray.isArray(response?.messages) &&\n\t\t\tresponse?.messages.length === 1 &&\n\t\t\ttypeof response?.messages[0] === 'string'\n\t\t) {\n\t\t\treturn {\n\t\t\t\ttype: 'text',\n\t\t\t\tdata: response.messages[0],\n\t\t\t\tparsed: true,\n\t\t\t};\n\t\t}\n\t\t// Use the memory parser if the response is a memory-like(chat) object\n\t\tif (response.messages && Array.isArray(response.messages)) {\n\t\t\treturn outputTypeParsers[NodeConnectionType.AiMemory](execData);\n\t\t}\n\t\tif (response.generations) {\n\t\t\tconst generations = response.generations as LmGeneration[];\n\n\t\t\tconst content = generations.map((generation) => {\n\t\t\t\tif (generation?.text) return generation.text;\n\n\t\t\t\tif (Array.isArray(generation)) {\n\t\t\t\t\treturn generation\n\t\t\t\t\t\t.map((item: LmGeneration) => item.text ?? item)\n\t\t\t\t\t\t.join('\\n\\n')\n\t\t\t\t\t\t.trim();\n\t\t\t\t}\n\n\t\t\t\treturn generation;\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\ttype: 'json',\n\t\t\t\tdata: content,\n\t\t\t\tparsed: true,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\ttype: 'json',\n\t\t\tdata: response,\n\t\t\tparsed: true,\n\t\t};\n\t},\n\t[NodeConnectionType.AiTool]: fallbackParser,\n\t[NodeConnectionType.AiAgent]: fallbackParser,\n\t[NodeConnectionType.AiMemory](execData: IDataObject) {\n\t\tconst chatHistory =\n\t\t\texecData.chatHistory ??\n\t\t\texecData.messages ??\n\t\t\t(execData?.response as IDataObject)?.chat_history;\n\t\tif (Array.isArray(chatHistory)) {\n\t\t\tconst responseText = chatHistory\n\t\t\t\t.map((content: MemoryMessage) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tcontent.type === 'constructor' &&\n\t\t\t\t\t\tcontent.id?.includes('messages') &&\n\t\t\t\t\t\tcontent.kwargs\n\t\t\t\t\t) {\n\t\t\t\t\t\tinterface MessageContent {\n\t\t\t\t\t\t\ttype: string;\n\t\t\t\t\t\t\ttext?: string;\n\t\t\t\t\t\t\timage_url?:\n\t\t\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\t\t\turl: string;\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t| string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet message = content.kwargs.content;\n\t\t\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t\t\tmessage = (message as MessageContent[])\n\t\t\t\t\t\t\t\t.map((item) => {\n\t\t\t\t\t\t\t\t\tconst { type, image_url } = item;\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\ttype === 'image_url' &&\n\t\t\t\t\t\t\t\t\t\ttypeof image_url === 'object' &&\n\t\t\t\t\t\t\t\t\t\ttypeof image_url.url === 'string'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\treturn ``;\n\t\t\t\t\t\t\t\t\t} else if (typeof image_url === 'string') {\n\t\t\t\t\t\t\t\t\t\treturn ``;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn item.text;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (Object.keys(content.kwargs.additional_kwargs).length) {\n\t\t\t\t\t\t\tmessage += ` (${JSON.stringify(content.kwargs.additional_kwargs)})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (content.id.includes('HumanMessage')) {\n\t\t\t\t\t\t\tmessage = `**Human:** ${String(message).trim()}`;\n\t\t\t\t\t\t} else if (content.id.includes('AIMessage')) {\n\t\t\t\t\t\t\tmessage = `**AI:** ${message}`;\n\t\t\t\t\t\t} else if (content.id.includes('SystemMessage')) {\n\t\t\t\t\t\t\tmessage = `**System Message:** ${message}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (execData.action && execData.action !== 'getMessages') {\n\t\t\t\t\t\t\tmessage = `## Action: ${execData.action}\\n\\n${message}`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn message;\n\t\t\t\t\t}\n\t\t\t\t\treturn '';\n\t\t\t\t})\n\t\t\t\t.join('\\n\\n');\n\n\t\t\treturn {\n\t\t\t\ttype: 'markdown',\n\t\t\t\tdata: responseText,\n\t\t\t\tparsed: true,\n\t\t\t};\n\t\t}\n\n\t\treturn fallbackParser(execData);\n\t},\n\t[NodeConnectionType.AiOutputParser]: fallbackParser,\n\t[NodeConnectionType.AiRetriever]: fallbackParser,\n\t[NodeConnectionType.AiVectorStore](execData: IDataObject) {\n\t\tif (execData.documents) {\n\t\t\treturn {\n\t\t\t\ttype: 'json',\n\t\t\t\tdata: execData.documents,\n\t\t\t\tparsed: true,\n\t\t\t};\n\t\t}\n\n\t\treturn fallbackParser(execData);\n\t},\n\t[NodeConnectionType.AiEmbedding](execData: IDataObject) {\n\t\tif (execData.documents) {\n\t\t\treturn {\n\t\t\t\ttype: 'json',\n\t\t\t\tdata: execData.documents,\n\t\t\t\tparsed: true,\n\t\t\t};\n\t\t}\n\n\t\treturn fallbackParser(execData);\n\t},\n\t[NodeConnectionType.AiDocument](execData: IDataObject) {\n\t\tif (execData.documents) {\n\t\t\treturn {\n\t\t\t\ttype: 'json',\n\t\t\t\tdata: execData.documents,\n\t\t\t\tparsed: true,\n\t\t\t};\n\t\t}\n\n\t\treturn fallbackParser(execData);\n\t},\n\t[NodeConnectionType.AiTextSplitter](execData: IDataObject) {\n\t\tconst arrayData = Array.isArray(execData.response)\n\t\t\t? execData.response\n\t\t\t: [execData.textSplitter];\n\t\treturn {\n\t\t\ttype: 'text',\n\t\t\tdata: arrayData.join('\\n\\n'),\n\t\t\tparsed: true,\n\t\t};\n\t},\n};\nexport type ParsedAiContent = Array<{\n\traw: IDataObject | IDataObject[];\n\tparsedContent: {\n\t\ttype: 'json' | 'text' | 'markdown';\n\t\tdata: unknown;\n\t\tparsed: boolean;\n\t} | null;\n}>;\n\nexport const useAiContentParsers = () => {\n\tconst parseAiRunData = (\n\t\texecutionData: INodeExecutionData[],\n\t\tendpointType: NodeConnectionType,\n\t): ParsedAiContent => {\n\t\tif ([NodeConnectionType.AiChain, NodeConnectionType.Main].includes(endpointType)) {\n\t\t\treturn executionData.map((data) => ({ raw: data.json, parsedContent: null }));\n\t\t}\n\n\t\tconst contentJson = executionData.map((node) => {\n\t\t\tconst hasBinarData = !isObjectEmpty(node.binary);\n\t\t\treturn hasBinarData ? node.binary : node.json;\n\t\t});\n\n\t\tconst parser = outputTypeParsers[endpointType as AllowedEndpointType];\n\t\tif (!parser)\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\traw: contentJson.filter((item): item is IDataObject => item !== undefined),\n\t\t\t\t\tparsedContent: null,\n\t\t\t\t},\n\t\t\t];\n\n\t\tconst parsedOutput = contentJson\n\t\t\t.filter((c): c is IDataObject => c !== undefined)\n\t\t\t.map((c) => ({ raw: c, parsedContent: parser(c) }));\n\t\treturn parsedOutput;\n\t};\n\n\treturn {\n\t\tparseAiRunData,\n\t};\n};\n","import { h, defineComponent } from 'vue';\nimport MarkdownIt from 'markdown-it';\nvar VueMarkdown = defineComponent({\n name: 'VueMarkdown',\n props: {\n source: {\n type: String,\n required: true,\n },\n options: {\n type: Object,\n required: false,\n },\n },\n data: function () {\n return {\n md: null,\n };\n },\n computed: {\n content: function () {\n var _a;\n var src = this.source;\n return (_a = this.md) === null || _a === void 0 ? void 0 : _a.render(src);\n },\n },\n created: function () {\n var _a;\n this.md = new MarkdownIt((_a = this.options) !== null && _a !== void 0 ? _a : {});\n },\n render: function () {\n return h('div', { innerHTML: this.content });\n },\n});\nexport default VueMarkdown;\n//# sourceMappingURL=VueMarkdown.js.map","<template>\n\t<div :class=\"$style.block\">\n\t\t<header :class=\"$style.blockHeader\" @click=\"onBlockHeaderClick\">\n\t\t\t<button :class=\"$style.blockToggle\">\n\t\t\t\t<font-awesome-icon :icon=\"isExpanded ? 'angle-down' : 'angle-up'\" size=\"lg\" />\n\t\t\t</button>\n\t\t\t<p :class=\"$style.blockTitle\">{{ capitalize(runData.inOut) }}</p>\n\t\t\t<!-- @click.stop to prevent event from bubbling to blockHeader and toggling expanded state when clicking on rawSwitch -->\n\t\t\t<el-switch\n\t\t\t\tv-if=\"contentParsed\"\n\t\t\t\tv-model=\"isShowRaw\"\n\t\t\t\t:class=\"$style.rawSwitch\"\n\t\t\t\tactive-text=\"RAW JSON\"\n\t\t\t\t@click.stop\n\t\t\t/>\n\t\t</header>\n\t\t<main\n\t\t\t:class=\"{\n\t\t\t\t[$style.blockContent]: true,\n\t\t\t\t[$style.blockContentExpanded]: isExpanded,\n\t\t\t}\"\n\t\t>\n\t\t\t<div\n\t\t\t\tv-for=\"({ parsedContent, raw }, index) in parsedRun\"\n\t\t\t\t:key=\"index\"\n\t\t\t\t:class=\"$style.contentText\"\n\t\t\t\t:data-content-type=\"parsedContent?.type\"\n\t\t\t>\n\t\t\t\t<template v-if=\"parsedContent && !isShowRaw\">\n\t\t\t\t\t<template v-if=\"parsedContent.type === 'json'\">\n\t\t\t\t\t\t<VueMarkdown\n\t\t\t\t\t\t\t:source=\"jsonToMarkdown(parsedContent.data as JsonMarkdown)\"\n\t\t\t\t\t\t\t:class=\"$style.markdown\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-if=\"parsedContent.type === 'markdown'\">\n\t\t\t\t\t\t<VueMarkdown :source=\"parsedContent.data\" :class=\"$style.markdown\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<p\n\t\t\t\t\t\tv-if=\"parsedContent.type === 'text'\"\n\t\t\t\t\t\t:class=\"$style.runText\"\n\t\t\t\t\t\tv-text=\"parsedContent.data\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<!-- We weren't able to parse text or raw switch -->\n\t\t\t\t<template v-else>\n\t\t\t\t\t<div :class=\"$style.rawContent\">\n\t\t\t\t\t\t<n8n-icon-button\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t:class=\"$style.copyToClipboard\"\n\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t:title=\"$locale.baseText('nodeErrorView.copyToClipboard')\"\n\t\t\t\t\t\t\ticon=\"copy\"\n\t\t\t\t\t\t\t@click=\"onCopyToClipboard(raw)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<VueMarkdown :source=\"jsonToMarkdown(raw as JsonMarkdown)\" :class=\"$style.markdown\" />\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</main>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { IAiDataContent } from '@/Interface';\nimport { capitalize } from 'lodash-es';\nimport { ref, onMounted } from 'vue';\nimport type { ParsedAiContent } from './useAiContentParsers';\nimport { useAiContentParsers } from './useAiContentParsers';\nimport VueMarkdown from 'vue-markdown-render';\nimport { useClipboard } from '@/composables/useClipboard';\nimport { useI18n } from '@/composables/useI18n';\nimport { useToast } from '@/composables/useToast';\nimport { NodeConnectionType, type IDataObject } from 'n8n-workflow';\n\nconst props = defineProps<{\n\trunData: IAiDataContent;\n}>();\n\nconst i18n = useI18n();\nconst clipboard = useClipboard();\nconst { showMessage } = useToast();\nconst contentParsers = useAiContentParsers();\n\n// eslint-disable-next-line @typescript-eslint/no-use-before-define\nconst isExpanded = ref(getInitialExpandedState());\nconst isShowRaw = ref(false);\nconst contentParsed = ref(false);\nconst parsedRun = ref(undefined as ParsedAiContent | undefined);\nfunction getInitialExpandedState() {\n\tconst collapsedTypes = {\n\t\tinput: [NodeConnectionType.AiDocument, NodeConnectionType.AiTextSplitter],\n\t\toutput: [\n\t\t\tNodeConnectionType.AiDocument,\n\t\t\tNodeConnectionType.AiEmbedding,\n\t\t\tNodeConnectionType.AiTextSplitter,\n\t\t\tNodeConnectionType.AiVectorStore,\n\t\t],\n\t};\n\n\treturn !collapsedTypes[props.runData.inOut].includes(props.runData.type);\n}\n\nfunction parseAiRunData(run: IAiDataContent) {\n\tif (!run.data) {\n\t\treturn;\n\t}\n\tconst parsedData = contentParsers.parseAiRunData(run.data, run.type);\n\n\treturn parsedData;\n}\n\nfunction isMarkdown(content: JsonMarkdown): boolean {\n\tif (typeof content !== 'string') return false;\n\tconst markdownPatterns = [\n\t\t/^# .+/gm, // headers\n\t\t/\\*{1,2}.+\\*{1,2}/g, // emphasis and strong\n\t\t/\\[.+\\]\\(.+\\)/g, // links\n\t\t/```[\\s\\S]+```/g, // code blocks\n\t];\n\n\treturn markdownPatterns.some((pattern) => pattern.test(content));\n}\n\nfunction formatToJsonMarkdown(data: string): string {\n\treturn '```json\\n' + data + '\\n```';\n}\n\ntype JsonMarkdown = string | object | Array<string | object>;\n\nfunction jsonToMarkdown(data: JsonMarkdown): string {\n\tif (isMarkdown(data)) return data as string;\n\n\tif (Array.isArray(data) && data.length && typeof data[0] !== 'number') {\n\t\tconst markdownArray = data.map((item: JsonMarkdown) => jsonToMarkdown(item));\n\n\t\treturn markdownArray.join('\\n\\n').trim();\n\t}\n\n\tif (typeof data === 'string') {\n\t\treturn formatToJsonMarkdown(data);\n\t}\n\n\treturn formatToJsonMarkdown(JSON.stringify(data, null, 2));\n}\n\nfunction setContentParsed(content: ParsedAiContent): void {\n\tcontentParsed.value = !!content.find((item) => {\n\t\tif (item.parsedContent?.parsed === true) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t});\n}\n\nfunction onBlockHeaderClick() {\n\tisExpanded.value = !isExpanded.value;\n}\n\nfunction onCopyToClipboard(content: IDataObject | IDataObject[]) {\n\ttry {\n\t\tvoid clipboard.copy(JSON.stringify(content, undefined, 2));\n\t\tshowMessage({\n\t\t\ttitle: i18n.baseText('generic.copiedToClipboard'),\n\t\t\ttype: 'success',\n\t\t});\n\t} catch (err) {}\n}\n\nonMounted(() => {\n\tparsedRun.value = parseAiRunData(props.runData);\n\tif (parsedRun.value) {\n\t\tsetContentParsed(parsedRun.value);\n\t}\n});\n</script>\n\n<style lang=\"scss\" module>\n.copyToClipboard {\n\tposition: absolute;\n\tright: var(--spacing-s);\n\ttop: var(--spacing-s);\n}\n.rawContent {\n\tposition: relative;\n}\n.markdown {\n\t& {\n\t\twhite-space: pre-wrap;\n\n\t\th1 {\n\t\t\tfont-size: var(--font-size-xl);\n\t\t\tline-height: var(--font-line-height-xloose);\n\t\t}\n\n\t\th2 {\n\t\t\tfont-size: var(--font-size-l);\n\t\t\tline-height: var(--font-line-height-loose);\n\t\t}\n\n\t\th3 {\n\t\t\tfont-size: var(--font-size-m);\n\t\t\tline-height: var(--font-line-height-regular);\n\t\t}\n\n\t\tpre {\n\t\t\tbackground-color: var(--color-foreground-light);\n\t\t\tborder-radius: var(--border-radius-base);\n\t\t\tline-height: var(--font-line-height-xloose);\n\t\t\tpadding: var(--spacing-s);\n\t\t\tfont-size: var(--font-size-s);\n\t\t\twhite-space: pre-wrap;\n\t\t}\n\t}\n}\n.contentText {\n\tpadding-top: var(--spacing-s);\n\tfont-size: var(--font-size-xs);\n\t// max-height: 100%;\n}\n.block {\n\tborder: 1px solid var(--color-foreground-base);\n\tbackground: var(--color-background-xlight);\n\tpadding: var(--spacing-xs);\n\tborder-radius: 4px;\n\tmargin-bottom: var(--spacing-2xs);\n}\n.blockContent {\n\theight: 0;\n\toverflow: hidden;\n\n\t&.blockContentExpanded {\n\t\theight: auto;\n\t}\n}\n.runText {\n\tline-height: var(--font-line-height-regular);\n\twhite-space: pre-line;\n}\n.rawSwitch {\n\tmargin-left: auto;\n\n\t& * {\n\t\tfont-size: var(--font-size-2xs);\n\t}\n}\n.blockHeader {\n\tdisplay: flex;\n\tgap: var(--spacing-xs);\n\tcursor: pointer;\n\t/* This hack is needed to make the whole surface of header clickable */\n\tmargin: calc(-1 * var(--spacing-xs));\n\tpadding: var(--spacing-xs);\n\n\t& * {\n\t\tuser-select: none;\n\t}\n}\n.blockTitle {\n\tfont-size: var(--font-size-2xs);\n\tcolor: var(--color-text-dark);\n}\n.blockToggle {\n\tborder: none;\n\tbackground: none;\n\tpadding: 0;\n\tcolor: var(--color-text-base);\n}\n</style>\n","<template>\n\t<div :class=\"$style.container\">\n\t\t<header :class=\"$style.header\">\n\t\t\t<NodeIcon\n\t\t\t\tv-if=\"runMeta?.node\"\n\t\t\t\t:class=\"$style.nodeIcon\"\n\t\t\t\t:node-type=\"runMeta.node\"\n\t\t\t\t:size=\"20\"\n\t\t\t/>\n\t\t\t<div :class=\"$style.headerWrap\">\n\t\t\t\t<p :class=\"$style.title\">\n\t\t\t\t\t{{ inputData.node }}\n\t\t\t\t</p>\n\t\t\t\t<ul :class=\"$style.meta\">\n\t\t\t\t\t<li v-if=\"runMeta?.startTimeMs\">{{ runMeta?.executionTimeMs }}ms</li>\n\t\t\t\t\t<li v-if=\"runMeta?.startTimeMs\">\n\t\t\t\t\t\t<n8n-tooltip>\n\t\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t\t{{ new Date(runMeta?.startTimeMs).toLocaleString() }}\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t$locale.baseText('runData.aiContentBlock.startedAt', {\n\t\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\t\tstartTime: new Date(runMeta?.startTimeMs).toLocaleTimeString(),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li v-if=\"(consumedTokensSum?.totalTokens ?? 0) > 0\" :class=\"$style.tokensUsage\">\n\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t$locale.baseText('runData.aiContentBlock.tokens', {\n\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\tcount: formatTokenUsageCount(consumedTokensSum?.totalTokens ?? 0),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}}\n\t\t\t\t\t\t<n8n-info-tip type=\"tooltip\" theme=\"info-light\" tooltip-placement=\"right\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<n8n-text :bold=\"true\" size=\"small\">\n\t\t\t\t\t\t\t\t\t{{ $locale.baseText('runData.aiContentBlock.tokens.prompt') }}\n\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t$locale.baseText('runData.aiContentBlock.tokens', {\n\t\t\t\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\t\t\t\tcount: formatTokenUsageCount(consumedTokensSum?.promptTokens ?? 0),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<n8n-text :bold=\"true\" size=\"small\">\n\t\t\t\t\t\t\t\t\t{{ $locale.baseText('runData.aiContentBlock.tokens.completion') }}\n\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t$locale.baseText('runData.aiContentBlock.tokens', {\n\t\t\t\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\t\t\t\tcount: formatTokenUsageCount(consumedTokensSum?.completionTokens ?? 0),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</n8n-info-tip>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</header>\n\n\t\t<main v-for=\"(run, index) in props.inputData.data\" :key=\"index\" :class=\"$style.content\">\n\t\t\t<AiRunContentBlock :run-data=\"run\" />\n\t\t</main>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { IAiData, IAiDataContent } from '@/Interface';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { INodeExecutionData, INodeTypeDescription, NodeConnectionType } from 'n8n-workflow';\nimport { computed } from 'vue';\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport AiRunContentBlock from './AiRunContentBlock.vue';\n\ninterface RunMeta {\n\tstartTimeMs: number;\n\texecutionTimeMs: number;\n\tnode: INodeTypeDescription | null;\n\ttype: 'input' | 'output';\n\tconnectionType: NodeConnectionType;\n}\nconst props = defineProps<{\n\tinputData: IAiData;\n\tcontentIndex: number;\n}>();\n\nconst nodeTypesStore = useNodeTypesStore();\nconst workflowsStore = useWorkflowsStore();\n\ntype TokenUsageData = {\n\tcompletionTokens: number;\n\tpromptTokens: number;\n\ttotalTokens: number;\n};\n\nconst consumedTokensSum = computed(() => {\n\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\tconst tokenUsage = outputRun.value?.data?.reduce(\n\t\t(acc: TokenUsageData, curr: INodeExecutionData) => {\n\t\t\tconst tokenUsageData = (curr.json?.tokenUsage ??\n\t\t\t\tcurr.json?.tokenUsageEstimate) as TokenUsageData;\n\n\t\t\tif (!tokenUsageData) return acc;\n\n\t\t\treturn {\n\t\t\t\tcompletionTokens: acc.completionTokens + tokenUsageData.completionTokens,\n\t\t\t\tpromptTokens: acc.promptTokens + tokenUsageData.promptTokens,\n\t\t\t\ttotalTokens: acc.totalTokens + tokenUsageData.totalTokens,\n\t\t\t};\n\t\t},\n\t\t{\n\t\t\tcompletionTokens: 0,\n\t\t\tpromptTokens: 0,\n\t\t\ttotalTokens: 0,\n\t\t},\n\t);\n\n\treturn tokenUsage;\n});\n\nconst usingTokensEstimates = computed(() => {\n\treturn outputRun.value?.data?.some((d) => d.json?.tokenUsageEstimate);\n});\n\nfunction formatTokenUsageCount(count: number) {\n\treturn usingTokensEstimates.value ? `~${count}` : count.toString();\n}\nfunction extractRunMeta(run: IAiDataContent) {\n\tconst uiNode = workflowsStore.getNodeByName(props.inputData.node);\n\tconst nodeType = nodeTypesStore.getNodeType(uiNode?.type ?? '');\n\n\tconst runMeta: RunMeta = {\n\t\tstartTimeMs: run.metadata.startTime,\n\t\texecutionTimeMs: run.metadata.executionTime,\n\t\tnode: nodeType,\n\t\ttype: run.inOut,\n\t\tconnectionType: run.type,\n\t};\n\n\treturn runMeta;\n}\n\nconst outputRun = computed(() => {\n\treturn props.inputData.data.find((r) => r.inOut === 'output');\n});\n\nconst runMeta = computed(() => {\n\tif (outputRun.value === undefined) {\n\t\treturn;\n\t}\n\treturn extractRunMeta(outputRun.value);\n});\n</script>\n\n<style type=\"scss\" module>\n.container {\n\tpadding: 0 var(--spacing-s) var(--spacing-s);\n}\n.nodeIcon {\n\tmargin-top: calc(var(--spacing-3xs) * -1);\n}\n.header {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--spacing-3xs);\n\tmargin-bottom: var(--spacing-s);\n}\n.headerWrap {\n\tdisplay: flex;\n\tflex-direction: column;\n}\n.title {\n\tdisplay: flex;\n\talign-items: center;\n\tfont-size: var(--font-size-s);\n\tgap: var(--spacing-3xs);\n\tcolor: var(--color-text-dark);\n}\n.meta {\n\tlist-style: none;\n\tdisplay: flex;\n\talign-items: center;\n\tflex-wrap: wrap;\n\tfont-size: var(--font-size-xs);\n\n\t& > li:not(:last-child) {\n\t\tborder-right: 1px solid var(--color-text-base);\n\t\tpadding-right: var(--spacing-3xs);\n\t}\n\n\t& > li:not(:first-child) {\n\t\tpadding-left: var(--spacing-3xs);\n\t}\n}\n.tokensUsage {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--spacing-3xs);\n}\n</style>\n","<template>\n\t<div v-if=\"aiData\" :class=\"$style.container\">\n\t\t<div :class=\"{ [$style.tree]: true, [$style.slim]: slim }\">\n\t\t\t<ElTree\n\t\t\t\t:data=\"executionTree\"\n\t\t\t\t:props=\"{ label: 'node' }\"\n\t\t\t\tdefault-expand-all\n\t\t\t\t:indent=\"12\"\n\t\t\t\t:expand-on-click-node=\"false\"\n\t\t\t\tdata-test-id=\"lm-chat-logs-tree\"\n\t\t\t\t@node-click=\"onItemClick\"\n\t\t\t>\n\t\t\t\t<template #default=\"{ node, data }\">\n\t\t\t\t\t<div\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t[$style.treeNode]: true,\n\t\t\t\t\t\t\t[$style.isSelected]: isTreeNodeSelected(data),\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:data-tree-depth=\"data.depth\"\n\t\t\t\t\t\t:style=\"{ '--item-depth': data.depth }\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tv-if=\"data.children.length\"\n\t\t\t\t\t\t\t:class=\"$style.treeToggle\"\n\t\t\t\t\t\t\t@click=\"toggleTreeItem(node)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<font-awesome-icon :icon=\"node.expanded ? 'angle-down' : 'angle-up'\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<n8n-tooltip :disabled=\"!slim\" placement=\"right\">\n\t\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t\t{{ node.label }}\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<span :class=\"$style.leafLabel\">\n\t\t\t\t\t\t\t\t<NodeIcon :node-type=\"getNodeType(data.node)!\" :size=\"17\" />\n\t\t\t\t\t\t\t\t<span v-if=\"!slim\" v-text=\"node.label\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</ElTree>\n\t\t</div>\n\t\t<div :class=\"$style.runData\">\n\t\t\t<div v-if=\"selectedRun.length === 0\" :class=\"$style.empty\">\n\t\t\t\t<n8n-text size=\"large\">\n\t\t\t\t\t{{\n\t\t\t\t\t\t$locale.baseText('ndv.output.ai.empty', {\n\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\tnode: props.node.name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-for=\"(data, index) in selectedRun\"\n\t\t\t\t:key=\"`${data.node}__${data.runIndex}__index`\"\n\t\t\t\tdata-test-id=\"lm-chat-logs-entry\"\n\t\t\t>\n\t\t\t\t<RunDataAiContent :input-data=\"data\" :content-index=\"index\" />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { Ref } from 'vue';\nimport { computed, ref, watch } from 'vue';\nimport type { ITaskSubRunMetadata, ITaskDataConnections } from 'n8n-workflow';\nimport { NodeConnectionType } from 'n8n-workflow';\nimport type { IAiData, IAiDataContent, INodeUi } from '@/Interface';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport RunDataAiContent from './RunDataAiContent.vue';\nimport { ElTree } from 'element-plus';\n\ninterface AIResult {\n\tnode: string;\n\trunIndex: number;\n\tdata: IAiDataContent | undefined;\n}\ninterface TreeNode {\n\tnode: string;\n\tid: string;\n\tchildren: TreeNode[];\n\tdepth: number;\n\tstartTime: number;\n\trunIndex: number;\n}\nexport interface Props {\n\tnode: INodeUi;\n\trunIndex: number;\n\thideTitle?: boolean;\n\tslim?: boolean;\n}\nconst props = withDefaults(defineProps<Props>(), { runIndex: 0 });\nconst workflowsStore = useWorkflowsStore();\nconst nodeTypesStore = useNodeTypesStore();\nconst selectedRun: Ref<IAiData[]> = ref([]);\n\nfunction isTreeNodeSelected(node: TreeNode) {\n\treturn selectedRun.value.some((run) => run.node === node.node && run.runIndex === node.runIndex);\n}\n\nfunction getReferencedData(\n\treference: ITaskSubRunMetadata,\n\twithInput: boolean,\n\twithOutput: boolean,\n): IAiDataContent[] {\n\tconst resultData = workflowsStore.getWorkflowResultDataByNodeName(reference.node);\n\n\tif (!resultData?.[reference.runIndex]) {\n\t\treturn [];\n\t}\n\n\tconst taskData = resultData[reference.runIndex];\n\n\tif (!taskData) {\n\t\treturn [];\n\t}\n\n\tconst returnData: IAiDataContent[] = [];\n\n\tfunction addFunction(data: ITaskDataConnections | undefined, inOut: 'input' | 'output') {\n\t\tif (!data) {\n\t\t\treturn;\n\t\t}\n\n\t\tObject.keys(data).map((type) => {\n\t\t\treturnData.push({\n\t\t\t\tdata: data[type][0],\n\t\t\t\tinOut,\n\t\t\t\ttype: type as NodeConnectionType,\n\t\t\t\tmetadata: {\n\t\t\t\t\texecutionTime: taskData.executionTime,\n\t\t\t\t\tstartTime: taskData.startTime,\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t}\n\n\tif (withInput) {\n\t\taddFunction(taskData.inputOverride, 'input');\n\t}\n\tif (withOutput) {\n\t\taddFunction(taskData.data, 'output');\n\t}\n\n\treturn returnData;\n}\n\nfunction toggleTreeItem(node: { expanded: boolean }) {\n\tnode.expanded = !node.expanded;\n}\n\nfunction onItemClick(data: TreeNode) {\n\tconst matchingRun = aiData.value?.find(\n\t\t(run) => run.node === data.node && run.runIndex === data.runIndex,\n\t);\n\tif (!matchingRun) {\n\t\tselectedRun.value = [];\n\n\t\treturn;\n\t}\n\tselectedRun.value = [\n\t\t{\n\t\t\tnode: data.node,\n\t\t\trunIndex: data.runIndex,\n\t\t\tdata: getReferencedData(\n\t\t\t\t{\n\t\t\t\t\tnode: data.node,\n\t\t\t\t\trunIndex: data.runIndex,\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t\ttrue,\n\t\t\t),\n\t\t},\n\t];\n}\n\nfunction getNodeType(nodeName: string) {\n\tconst node = workflowsStore.getNodeByName(nodeName);\n\tif (!node) {\n\t\treturn null;\n\t}\n\tconst nodeType = nodeTypesStore.getNodeType(node?.type);\n\n\treturn nodeType;\n}\n\nfunction selectFirst() {\n\tif (executionTree.value.length && executionTree.value[0].children.length) {\n\t\tonItemClick(executionTree.value[0].children[0]);\n\t}\n}\n\nconst createNode = (\n\tnodeName: string,\n\tcurrentDepth: number,\n\tr?: AIResult,\n\tchildren: TreeNode[] = [],\n): TreeNode => ({\n\tnode: nodeName,\n\tid: nodeName,\n\tdepth: currentDepth,\n\tstartTime: r?.data?.metadata?.startTime ?? 0,\n\trunIndex: r?.runIndex ?? 0,\n\tchildren,\n});\n\nfunction getTreeNodeData(nodeName: string, currentDepth: number): TreeNode[] {\n\tconst { connectionsByDestinationNode } = workflowsStore.getCurrentWorkflow();\n\tconst connections = connectionsByDestinationNode[nodeName];\n\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\tconst resultData = aiData.value?.filter((data) => data.node === nodeName) ?? [];\n\n\tif (!connections) {\n\t\treturn resultData.map((d) => createNode(nodeName, currentDepth, d));\n\t}\n\n\tconst nonMainConnectionsKeys = Object.keys(connections).filter(\n\t\t(key) => key !== NodeConnectionType.Main,\n\t);\n\tconst children = nonMainConnectionsKeys.flatMap((key) =>\n\t\tconnections[key][0].flatMap((node) => getTreeNodeData(node.node, currentDepth + 1)),\n\t);\n\n\tif (resultData.length) {\n\t\treturn resultData.map((r) => createNode(nodeName, currentDepth, r, children));\n\t}\n\n\tchildren.sort((a, b) => a.startTime - b.startTime);\n\n\treturn [createNode(nodeName, currentDepth, undefined, children)];\n}\n\nconst aiData = computed<AIResult[] | undefined>(() => {\n\tconst resultData = workflowsStore.getWorkflowResultDataByNodeName(props.node.name);\n\n\tif (!resultData || !Array.isArray(resultData)) {\n\t\treturn;\n\t}\n\n\tconst subRun = resultData[props.runIndex].metadata?.subRun;\n\tif (!Array.isArray(subRun)) {\n\t\treturn;\n\t}\n\t// Extend the subRun with the data and sort by adding execution time + startTime and comparing them\n\tconst subRunWithData = subRun.flatMap((run) =>\n\t\tgetReferencedData(run, false, true).map((data) => ({ ...run, data })),\n\t);\n\n\tsubRunWithData.sort((a, b) => {\n\t\tconst aTime = a.data?.metadata?.startTime || 0;\n\t\tconst bTime = b.data?.metadata?.startTime || 0;\n\t\treturn aTime - bTime;\n\t});\n\n\treturn subRunWithData;\n});\n\nconst executionTree = computed<TreeNode[]>(() => {\n\tconst rootNode = props.node;\n\n\tconst tree = getTreeNodeData(rootNode.name, 0);\n\treturn tree || [];\n});\n\nwatch(() => props.runIndex, selectFirst, { immediate: true });\n</script>\n\n<style lang=\"scss\" module>\n.treeToggle {\n\tborder: none;\n\tbackground-color: transparent;\n\tpadding: 0 var(--spacing-3xs);\n\tmargin: 0 calc(-1 * var(--spacing-3xs));\n\tcursor: pointer;\n}\n.leafLabel {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--spacing-3xs);\n}\n.empty {\n\tpadding: var(--spacing-l);\n}\n.title {\n\tfont-size: var(--font-size-s);\n\tmargin-bottom: var(--spacing-xs);\n}\n.tree {\n\tflex-shrink: 0;\n\tmin-width: 12.8rem;\n\theight: 100%;\n\tborder-right: 1px solid var(--color-foreground-base);\n\tpadding-right: var(--spacing-xs);\n\tpadding-left: var(--spacing-2xs);\n\t&.slim {\n\t\tmin-width: auto;\n\t}\n}\n.runData {\n\twidth: 100%;\n\theight: 100%;\n\toverflow: auto;\n}\n.container {\n\theight: 100%;\n\tpadding: 0 var(--spacing-xs);\n\tdisplay: flex;\n\n\t:global(.el-tree > .el-tree-node) {\n\t\tposition: relative;\n\t\t&:after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\ttop: 2rem;\n\t\t\tbottom: 1.2rem;\n\t\t\tleft: 0.75rem;\n\t\t\twidth: 0.125rem;\n\t\t\tbackground-color: var(--color-foreground-base);\n\t\t}\n\t}\n\t:global(.el-tree-node__expand-icon) {\n\t\tdisplay: none;\n\t}\n\t:global(.el-tree) {\n\t\tmargin-left: calc(-1 * var(--spacing-xs));\n\t}\n\t:global(.el-tree-node__content) {\n\t\tmargin-left: var(--spacing-xs);\n\t}\n}\n.isSelected {\n\tbackground-color: var(--color-foreground-base);\n}\n.treeNode {\n\tdisplay: inline-flex;\n\tborder-radius: var(--border-radius-base);\n\talign-items: center;\n\tgap: var(--spacing-3xs);\n\tpadding: var(--spacing-4xs) var(--spacing-3xs);\n\tfont-size: var(--font-size-xs);\n\tcolor: var(--color-text-dark);\n\tmargin-bottom: var(--spacing-3xs);\n\tcursor: pointer;\n\n\t&:hover {\n\t\tbackground-color: var(--color-foreground-base);\n\t}\n\t&[data-tree-depth='0'] {\n\t\tmargin-left: calc(-1 * var(--spacing-2xs));\n\t}\n\n\t&:after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tmargin: auto;\n\t\tbackground-color: var(--color-foreground-base);\n\t\theight: 0.125rem;\n\t\tleft: 0.75rem;\n\t\twidth: calc(var(--item-depth) * 0.625rem);\n\t}\n}\n</style>\n"],"names":["fallbackParser","execData","outputTypeParsers","NodeConnectionType","response","generation","item","chatHistory","_a","content","message","type","image_url","useAiContentParsers","executionData","endpointType","data","contentJson","node","isObjectEmpty","parser","c","VueMarkdown","defineComponent","src","MarkdownIt","h","VueMarkdown$1","props","__props","i18n","useI18n","clipboard","useClipboard","showMessage","useToast","contentParsers","isExpanded","ref","getInitialExpandedState","isShowRaw","contentParsed","parsedRun","parseAiRunData","run","isMarkdown","pattern","formatToJsonMarkdown","jsonToMarkdown","setContentParsed","onBlockHeaderClick","onCopyToClipboard","onMounted","nodeTypesStore","useNodeTypesStore","workflowsStore","useWorkflowsStore","consumedTokensSum","computed","_b","outputRun","acc","curr","tokenUsageData","usingTokensEstimates","d","formatTokenUsageCount","count","extractRunMeta","uiNode","nodeType","runMeta","selectedRun","isTreeNodeSelected","getReferencedData","reference","withInput","withOutput","resultData","taskData","returnData","addFunction","inOut","toggleTreeItem","onItemClick","aiData","getNodeType","nodeName","selectFirst","executionTree","createNode","currentDepth","r","children","getTreeNodeData","connectionsByDestinationNode","connections","key","a","b","subRun","subRunWithData","aTime","bTime","_d","_c","rootNode","watch"],"mappings":"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","x_google_ignoreList":[1]}
|
|
1
|
+
{"version":3,"file":"RunDataAi-sZalPI5G.js","sources":["../../src/components/RunDataAi/useAiContentParsers.ts","../../../../node_modules/.pnpm/vue-markdown-render@2.0.1_typescript@5.4.2/node_modules/vue-markdown-render/dist/VueMarkdown.js","../../src/components/RunDataAi/AiRunContentBlock.vue","../../src/components/RunDataAi/RunDataAiContent.vue","../../src/components/RunDataAi/RunDataAi.vue"],"sourcesContent":["import type { IDataObject, INodeExecutionData } from 'n8n-workflow';\nimport { isObjectEmpty, NodeConnectionType } from 'n8n-workflow';\n\ninterface MemoryMessage {\n\tlc: number;\n\ttype: string;\n\tid: string[];\n\tkwargs: {\n\t\tcontent: unknown;\n\t\tadditional_kwargs: Record<string, unknown>;\n\t};\n}\ninterface LmGeneration {\n\ttext: string;\n\tmessage: MemoryMessage;\n}\n\ntype ExcludedKeys = NodeConnectionType.Main | NodeConnectionType.AiChain;\ntype AllowedEndpointType = Exclude<NodeConnectionType, ExcludedKeys>;\n\nconst fallbackParser = (execData: IDataObject) => ({\n\ttype: 'json' as 'json' | 'text' | 'markdown',\n\tdata: execData,\n\tparsed: false,\n});\n\nconst outputTypeParsers: {\n\t[key in AllowedEndpointType]: (execData: IDataObject) => {\n\t\ttype: 'json' | 'text' | 'markdown';\n\t\tdata: unknown;\n\t\tparsed: boolean;\n\t};\n} = {\n\t[NodeConnectionType.AiLanguageModel](execData: IDataObject) {\n\t\tconst response = (execData.response as IDataObject) ?? execData;\n\t\tif (!response) throw new Error('No response from Language Model');\n\n\t\t// Simple LLM output — single string message item\n\t\tif (\n\t\t\tArray.isArray(response?.messages) &&\n\t\t\tresponse?.messages.length === 1 &&\n\t\t\ttypeof response?.messages[0] === 'string'\n\t\t) {\n\t\t\treturn {\n\t\t\t\ttype: 'text',\n\t\t\t\tdata: response.messages[0],\n\t\t\t\tparsed: true,\n\t\t\t};\n\t\t}\n\t\t// Use the memory parser if the response is a memory-like(chat) object\n\t\tif (response.messages && Array.isArray(response.messages)) {\n\t\t\treturn outputTypeParsers[NodeConnectionType.AiMemory](execData);\n\t\t}\n\t\tif (response.generations) {\n\t\t\tconst generations = response.generations as LmGeneration[];\n\n\t\t\tconst content = generations.map((generation) => {\n\t\t\t\tif (generation?.text) return generation.text;\n\n\t\t\t\tif (Array.isArray(generation)) {\n\t\t\t\t\treturn generation\n\t\t\t\t\t\t.map((item: LmGeneration) => item.text ?? item)\n\t\t\t\t\t\t.join('\\n\\n')\n\t\t\t\t\t\t.trim();\n\t\t\t\t}\n\n\t\t\t\treturn generation;\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\ttype: 'json',\n\t\t\t\tdata: content,\n\t\t\t\tparsed: true,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\ttype: 'json',\n\t\t\tdata: response,\n\t\t\tparsed: true,\n\t\t};\n\t},\n\t[NodeConnectionType.AiTool]: fallbackParser,\n\t[NodeConnectionType.AiAgent]: fallbackParser,\n\t[NodeConnectionType.AiMemory](execData: IDataObject) {\n\t\tconst chatHistory =\n\t\t\texecData.chatHistory ??\n\t\t\texecData.messages ??\n\t\t\t(execData?.response as IDataObject)?.chat_history;\n\t\tif (Array.isArray(chatHistory)) {\n\t\t\tconst responseText = chatHistory\n\t\t\t\t.map((content: MemoryMessage) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tcontent.type === 'constructor' &&\n\t\t\t\t\t\tcontent.id?.includes('messages') &&\n\t\t\t\t\t\tcontent.kwargs\n\t\t\t\t\t) {\n\t\t\t\t\t\tinterface MessageContent {\n\t\t\t\t\t\t\ttype: string;\n\t\t\t\t\t\t\ttext?: string;\n\t\t\t\t\t\t\timage_url?:\n\t\t\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\t\t\turl: string;\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t| string;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet message = content.kwargs.content;\n\t\t\t\t\t\tif (Array.isArray(message)) {\n\t\t\t\t\t\t\tmessage = (message as MessageContent[])\n\t\t\t\t\t\t\t\t.map((item) => {\n\t\t\t\t\t\t\t\t\tconst { type, image_url } = item;\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\ttype === 'image_url' &&\n\t\t\t\t\t\t\t\t\t\ttypeof image_url === 'object' &&\n\t\t\t\t\t\t\t\t\t\ttypeof image_url.url === 'string'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\treturn ``;\n\t\t\t\t\t\t\t\t\t} else if (typeof image_url === 'string') {\n\t\t\t\t\t\t\t\t\t\treturn ``;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn item.text;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (Object.keys(content.kwargs.additional_kwargs).length) {\n\t\t\t\t\t\t\tmessage += ` (${JSON.stringify(content.kwargs.additional_kwargs)})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (content.id.includes('HumanMessage')) {\n\t\t\t\t\t\t\tmessage = `**Human:** ${String(message).trim()}`;\n\t\t\t\t\t\t} else if (content.id.includes('AIMessage')) {\n\t\t\t\t\t\t\tmessage = `**AI:** ${message}`;\n\t\t\t\t\t\t} else if (content.id.includes('SystemMessage')) {\n\t\t\t\t\t\t\tmessage = `**System Message:** ${message}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (execData.action && execData.action !== 'getMessages') {\n\t\t\t\t\t\t\tmessage = `## Action: ${execData.action}\\n\\n${message}`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn message;\n\t\t\t\t\t}\n\t\t\t\t\treturn '';\n\t\t\t\t})\n\t\t\t\t.join('\\n\\n');\n\n\t\t\treturn {\n\t\t\t\ttype: 'markdown',\n\t\t\t\tdata: responseText,\n\t\t\t\tparsed: true,\n\t\t\t};\n\t\t}\n\n\t\treturn fallbackParser(execData);\n\t},\n\t[NodeConnectionType.AiOutputParser]: fallbackParser,\n\t[NodeConnectionType.AiRetriever]: fallbackParser,\n\t[NodeConnectionType.AiVectorStore](execData: IDataObject) {\n\t\tif (execData.documents) {\n\t\t\treturn {\n\t\t\t\ttype: 'json',\n\t\t\t\tdata: execData.documents,\n\t\t\t\tparsed: true,\n\t\t\t};\n\t\t}\n\n\t\treturn fallbackParser(execData);\n\t},\n\t[NodeConnectionType.AiEmbedding](execData: IDataObject) {\n\t\tif (execData.documents) {\n\t\t\treturn {\n\t\t\t\ttype: 'json',\n\t\t\t\tdata: execData.documents,\n\t\t\t\tparsed: true,\n\t\t\t};\n\t\t}\n\n\t\treturn fallbackParser(execData);\n\t},\n\t[NodeConnectionType.AiDocument](execData: IDataObject) {\n\t\tif (execData.documents) {\n\t\t\treturn {\n\t\t\t\ttype: 'json',\n\t\t\t\tdata: execData.documents,\n\t\t\t\tparsed: true,\n\t\t\t};\n\t\t}\n\n\t\treturn fallbackParser(execData);\n\t},\n\t[NodeConnectionType.AiTextSplitter](execData: IDataObject) {\n\t\tconst arrayData = Array.isArray(execData.response)\n\t\t\t? execData.response\n\t\t\t: [execData.textSplitter];\n\t\treturn {\n\t\t\ttype: 'text',\n\t\t\tdata: arrayData.join('\\n\\n'),\n\t\t\tparsed: true,\n\t\t};\n\t},\n};\nexport type ParsedAiContent = Array<{\n\traw: IDataObject | IDataObject[];\n\tparsedContent: {\n\t\ttype: 'json' | 'text' | 'markdown';\n\t\tdata: unknown;\n\t\tparsed: boolean;\n\t} | null;\n}>;\n\nexport const useAiContentParsers = () => {\n\tconst parseAiRunData = (\n\t\texecutionData: INodeExecutionData[],\n\t\tendpointType: NodeConnectionType,\n\t): ParsedAiContent => {\n\t\tif ([NodeConnectionType.AiChain, NodeConnectionType.Main].includes(endpointType)) {\n\t\t\treturn executionData.map((data) => ({ raw: data.json, parsedContent: null }));\n\t\t}\n\n\t\tconst contentJson = executionData.map((node) => {\n\t\t\tconst hasBinarData = !isObjectEmpty(node.binary);\n\t\t\treturn hasBinarData ? node.binary : node.json;\n\t\t});\n\n\t\tconst parser = outputTypeParsers[endpointType as AllowedEndpointType];\n\t\tif (!parser)\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\traw: contentJson.filter((item): item is IDataObject => item !== undefined),\n\t\t\t\t\tparsedContent: null,\n\t\t\t\t},\n\t\t\t];\n\n\t\tconst parsedOutput = contentJson\n\t\t\t.filter((c): c is IDataObject => c !== undefined)\n\t\t\t.map((c) => ({ raw: c, parsedContent: parser(c) }));\n\t\treturn parsedOutput;\n\t};\n\n\treturn {\n\t\tparseAiRunData,\n\t};\n};\n","import { h, defineComponent } from 'vue';\nimport MarkdownIt from 'markdown-it';\nvar VueMarkdown = defineComponent({\n name: 'VueMarkdown',\n props: {\n source: {\n type: String,\n required: true,\n },\n options: {\n type: Object,\n required: false,\n },\n },\n data: function () {\n return {\n md: null,\n };\n },\n computed: {\n content: function () {\n var _a;\n var src = this.source;\n return (_a = this.md) === null || _a === void 0 ? void 0 : _a.render(src);\n },\n },\n created: function () {\n var _a;\n this.md = new MarkdownIt((_a = this.options) !== null && _a !== void 0 ? _a : {});\n },\n render: function () {\n return h('div', { innerHTML: this.content });\n },\n});\nexport default VueMarkdown;\n//# sourceMappingURL=VueMarkdown.js.map","<template>\n\t<div :class=\"$style.block\">\n\t\t<header :class=\"$style.blockHeader\" @click=\"onBlockHeaderClick\">\n\t\t\t<button :class=\"$style.blockToggle\">\n\t\t\t\t<font-awesome-icon :icon=\"isExpanded ? 'angle-down' : 'angle-up'\" size=\"lg\" />\n\t\t\t</button>\n\t\t\t<p :class=\"$style.blockTitle\">{{ capitalize(runData.inOut) }}</p>\n\t\t\t<!-- @click.stop to prevent event from bubbling to blockHeader and toggling expanded state when clicking on rawSwitch -->\n\t\t\t<el-switch\n\t\t\t\tv-if=\"contentParsed\"\n\t\t\t\tv-model=\"isShowRaw\"\n\t\t\t\t:class=\"$style.rawSwitch\"\n\t\t\t\tactive-text=\"RAW JSON\"\n\t\t\t\t@click.stop\n\t\t\t/>\n\t\t</header>\n\t\t<main\n\t\t\t:class=\"{\n\t\t\t\t[$style.blockContent]: true,\n\t\t\t\t[$style.blockContentExpanded]: isExpanded,\n\t\t\t}\"\n\t\t>\n\t\t\t<div\n\t\t\t\tv-for=\"({ parsedContent, raw }, index) in parsedRun\"\n\t\t\t\t:key=\"index\"\n\t\t\t\t:class=\"$style.contentText\"\n\t\t\t\t:data-content-type=\"parsedContent?.type\"\n\t\t\t>\n\t\t\t\t<template v-if=\"parsedContent && !isShowRaw\">\n\t\t\t\t\t<template v-if=\"parsedContent.type === 'json'\">\n\t\t\t\t\t\t<VueMarkdown\n\t\t\t\t\t\t\t:source=\"jsonToMarkdown(parsedContent.data as JsonMarkdown)\"\n\t\t\t\t\t\t\t:class=\"$style.markdown\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-if=\"parsedContent.type === 'markdown'\">\n\t\t\t\t\t\t<VueMarkdown :source=\"parsedContent.data\" :class=\"$style.markdown\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<p\n\t\t\t\t\t\tv-if=\"parsedContent.type === 'text'\"\n\t\t\t\t\t\t:class=\"$style.runText\"\n\t\t\t\t\t\tv-text=\"parsedContent.data\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<!-- We weren't able to parse text or raw switch -->\n\t\t\t\t<template v-else>\n\t\t\t\t\t<div :class=\"$style.rawContent\">\n\t\t\t\t\t\t<n8n-icon-button\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t:class=\"$style.copyToClipboard\"\n\t\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\t\t:title=\"$locale.baseText('nodeErrorView.copyToClipboard')\"\n\t\t\t\t\t\t\ticon=\"copy\"\n\t\t\t\t\t\t\t@click=\"onCopyToClipboard(raw)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<VueMarkdown :source=\"jsonToMarkdown(raw as JsonMarkdown)\" :class=\"$style.markdown\" />\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</main>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { IAiDataContent } from '@/Interface';\nimport { capitalize } from 'lodash-es';\nimport { ref, onMounted } from 'vue';\nimport type { ParsedAiContent } from './useAiContentParsers';\nimport { useAiContentParsers } from './useAiContentParsers';\nimport VueMarkdown from 'vue-markdown-render';\nimport { useClipboard } from '@/composables/useClipboard';\nimport { useI18n } from '@/composables/useI18n';\nimport { useToast } from '@/composables/useToast';\nimport { NodeConnectionType, type IDataObject } from 'n8n-workflow';\n\nconst props = defineProps<{\n\trunData: IAiDataContent;\n}>();\n\nconst i18n = useI18n();\nconst clipboard = useClipboard();\nconst { showMessage } = useToast();\nconst contentParsers = useAiContentParsers();\n\n// eslint-disable-next-line @typescript-eslint/no-use-before-define\nconst isExpanded = ref(getInitialExpandedState());\nconst isShowRaw = ref(false);\nconst contentParsed = ref(false);\nconst parsedRun = ref(undefined as ParsedAiContent | undefined);\nfunction getInitialExpandedState() {\n\tconst collapsedTypes = {\n\t\tinput: [NodeConnectionType.AiDocument, NodeConnectionType.AiTextSplitter],\n\t\toutput: [\n\t\t\tNodeConnectionType.AiDocument,\n\t\t\tNodeConnectionType.AiEmbedding,\n\t\t\tNodeConnectionType.AiTextSplitter,\n\t\t\tNodeConnectionType.AiVectorStore,\n\t\t],\n\t};\n\n\treturn !collapsedTypes[props.runData.inOut].includes(props.runData.type);\n}\n\nfunction parseAiRunData(run: IAiDataContent) {\n\tif (!run.data) {\n\t\treturn;\n\t}\n\tconst parsedData = contentParsers.parseAiRunData(run.data, run.type);\n\n\treturn parsedData;\n}\n\nfunction isMarkdown(content: JsonMarkdown): boolean {\n\tif (typeof content !== 'string') return false;\n\tconst markdownPatterns = [\n\t\t/^# .+/gm, // headers\n\t\t/\\*{1,2}.+\\*{1,2}/g, // emphasis and strong\n\t\t/\\[.+\\]\\(.+\\)/g, // links\n\t\t/```[\\s\\S]+```/g, // code blocks\n\t];\n\n\treturn markdownPatterns.some((pattern) => pattern.test(content));\n}\n\nfunction formatToJsonMarkdown(data: string): string {\n\treturn '```json\\n' + data + '\\n```';\n}\n\ntype JsonMarkdown = string | object | Array<string | object>;\n\nfunction jsonToMarkdown(data: JsonMarkdown): string {\n\tif (isMarkdown(data)) return data as string;\n\n\tif (Array.isArray(data) && data.length && typeof data[0] !== 'number') {\n\t\tconst markdownArray = data.map((item: JsonMarkdown) => jsonToMarkdown(item));\n\n\t\treturn markdownArray.join('\\n\\n').trim();\n\t}\n\n\tif (typeof data === 'string') {\n\t\treturn formatToJsonMarkdown(data);\n\t}\n\n\treturn formatToJsonMarkdown(JSON.stringify(data, null, 2));\n}\n\nfunction setContentParsed(content: ParsedAiContent): void {\n\tcontentParsed.value = !!content.find((item) => {\n\t\tif (item.parsedContent?.parsed === true) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t});\n}\n\nfunction onBlockHeaderClick() {\n\tisExpanded.value = !isExpanded.value;\n}\n\nfunction onCopyToClipboard(content: IDataObject | IDataObject[]) {\n\ttry {\n\t\tvoid clipboard.copy(JSON.stringify(content, undefined, 2));\n\t\tshowMessage({\n\t\t\ttitle: i18n.baseText('generic.copiedToClipboard'),\n\t\t\ttype: 'success',\n\t\t});\n\t} catch (err) {}\n}\n\nonMounted(() => {\n\tparsedRun.value = parseAiRunData(props.runData);\n\tif (parsedRun.value) {\n\t\tsetContentParsed(parsedRun.value);\n\t}\n});\n</script>\n\n<style lang=\"scss\" module>\n.copyToClipboard {\n\tposition: absolute;\n\tright: var(--spacing-s);\n\ttop: var(--spacing-s);\n}\n.rawContent {\n\tposition: relative;\n}\n.markdown {\n\t& {\n\t\twhite-space: pre-wrap;\n\n\t\th1 {\n\t\t\tfont-size: var(--font-size-xl);\n\t\t\tline-height: var(--font-line-height-xloose);\n\t\t}\n\n\t\th2 {\n\t\t\tfont-size: var(--font-size-l);\n\t\t\tline-height: var(--font-line-height-loose);\n\t\t}\n\n\t\th3 {\n\t\t\tfont-size: var(--font-size-m);\n\t\t\tline-height: var(--font-line-height-regular);\n\t\t}\n\n\t\tpre {\n\t\t\tbackground-color: var(--color-foreground-light);\n\t\t\tborder-radius: var(--border-radius-base);\n\t\t\tline-height: var(--font-line-height-xloose);\n\t\t\tpadding: var(--spacing-s);\n\t\t\tfont-size: var(--font-size-s);\n\t\t\twhite-space: pre-wrap;\n\t\t}\n\t}\n}\n.contentText {\n\tpadding-top: var(--spacing-s);\n\tfont-size: var(--font-size-xs);\n\t// max-height: 100%;\n}\n.block {\n\tborder: 1px solid var(--color-foreground-base);\n\tbackground: var(--color-background-xlight);\n\tpadding: var(--spacing-xs);\n\tborder-radius: 4px;\n\tmargin-bottom: var(--spacing-2xs);\n}\n.blockContent {\n\theight: 0;\n\toverflow: hidden;\n\n\t&.blockContentExpanded {\n\t\theight: auto;\n\t}\n}\n.runText {\n\tline-height: var(--font-line-height-regular);\n\twhite-space: pre-line;\n}\n.rawSwitch {\n\tmargin-left: auto;\n\n\t& * {\n\t\tfont-size: var(--font-size-2xs);\n\t}\n}\n.blockHeader {\n\tdisplay: flex;\n\tgap: var(--spacing-xs);\n\tcursor: pointer;\n\t/* This hack is needed to make the whole surface of header clickable */\n\tmargin: calc(-1 * var(--spacing-xs));\n\tpadding: var(--spacing-xs);\n\n\t& * {\n\t\tuser-select: none;\n\t}\n}\n.blockTitle {\n\tfont-size: var(--font-size-2xs);\n\tcolor: var(--color-text-dark);\n}\n.blockToggle {\n\tborder: none;\n\tbackground: none;\n\tpadding: 0;\n\tcolor: var(--color-text-base);\n}\n</style>\n","<template>\n\t<div :class=\"$style.container\">\n\t\t<header :class=\"$style.header\">\n\t\t\t<NodeIcon\n\t\t\t\tv-if=\"runMeta?.node\"\n\t\t\t\t:class=\"$style.nodeIcon\"\n\t\t\t\t:node-type=\"runMeta.node\"\n\t\t\t\t:size=\"20\"\n\t\t\t/>\n\t\t\t<div :class=\"$style.headerWrap\">\n\t\t\t\t<p :class=\"$style.title\">\n\t\t\t\t\t{{ inputData.node }}\n\t\t\t\t</p>\n\t\t\t\t<ul :class=\"$style.meta\">\n\t\t\t\t\t<li v-if=\"runMeta?.startTimeMs\">{{ runMeta?.executionTimeMs }}ms</li>\n\t\t\t\t\t<li v-if=\"runMeta?.startTimeMs\">\n\t\t\t\t\t\t<n8n-tooltip>\n\t\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t\t{{ new Date(runMeta?.startTimeMs).toLocaleString() }}\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t$locale.baseText('runData.aiContentBlock.startedAt', {\n\t\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\t\tstartTime: new Date(runMeta?.startTimeMs).toLocaleTimeString(),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t</li>\n\t\t\t\t\t<li v-if=\"(consumedTokensSum?.totalTokens ?? 0) > 0\" :class=\"$style.tokensUsage\">\n\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t$locale.baseText('runData.aiContentBlock.tokens', {\n\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\tcount: formatTokenUsageCount(consumedTokensSum?.totalTokens ?? 0),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}}\n\t\t\t\t\t\t<n8n-info-tip type=\"tooltip\" theme=\"info-light\" tooltip-placement=\"right\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<n8n-text :bold=\"true\" size=\"small\">\n\t\t\t\t\t\t\t\t\t{{ $locale.baseText('runData.aiContentBlock.tokens.prompt') }}\n\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t$locale.baseText('runData.aiContentBlock.tokens', {\n\t\t\t\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\t\t\t\tcount: formatTokenUsageCount(consumedTokensSum?.promptTokens ?? 0),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<n8n-text :bold=\"true\" size=\"small\">\n\t\t\t\t\t\t\t\t\t{{ $locale.baseText('runData.aiContentBlock.tokens.completion') }}\n\t\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\t\t$locale.baseText('runData.aiContentBlock.tokens', {\n\t\t\t\t\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\t\t\t\t\tcount: formatTokenUsageCount(consumedTokensSum?.completionTokens ?? 0),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t</n8n-text>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</n8n-info-tip>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t</header>\n\n\t\t<main v-for=\"(run, index) in props.inputData.data\" :key=\"index\" :class=\"$style.content\">\n\t\t\t<AiRunContentBlock :run-data=\"run\" />\n\t\t</main>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { IAiData, IAiDataContent } from '@/Interface';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { INodeExecutionData, INodeTypeDescription, NodeConnectionType } from 'n8n-workflow';\nimport { computed } from 'vue';\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport AiRunContentBlock from './AiRunContentBlock.vue';\n\ninterface RunMeta {\n\tstartTimeMs: number;\n\texecutionTimeMs: number;\n\tnode: INodeTypeDescription | null;\n\ttype: 'input' | 'output';\n\tconnectionType: NodeConnectionType;\n}\nconst props = defineProps<{\n\tinputData: IAiData;\n\tcontentIndex: number;\n}>();\n\nconst nodeTypesStore = useNodeTypesStore();\nconst workflowsStore = useWorkflowsStore();\n\ntype TokenUsageData = {\n\tcompletionTokens: number;\n\tpromptTokens: number;\n\ttotalTokens: number;\n};\n\nconst consumedTokensSum = computed(() => {\n\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\tconst tokenUsage = outputRun.value?.data?.reduce(\n\t\t(acc: TokenUsageData, curr: INodeExecutionData) => {\n\t\t\tconst tokenUsageData = (curr.json?.tokenUsage ??\n\t\t\t\tcurr.json?.tokenUsageEstimate) as TokenUsageData;\n\n\t\t\tif (!tokenUsageData) return acc;\n\n\t\t\treturn {\n\t\t\t\tcompletionTokens: acc.completionTokens + tokenUsageData.completionTokens,\n\t\t\t\tpromptTokens: acc.promptTokens + tokenUsageData.promptTokens,\n\t\t\t\ttotalTokens: acc.totalTokens + tokenUsageData.totalTokens,\n\t\t\t};\n\t\t},\n\t\t{\n\t\t\tcompletionTokens: 0,\n\t\t\tpromptTokens: 0,\n\t\t\ttotalTokens: 0,\n\t\t},\n\t);\n\n\treturn tokenUsage;\n});\n\nconst usingTokensEstimates = computed(() => {\n\treturn outputRun.value?.data?.some((d) => d.json?.tokenUsageEstimate);\n});\n\nfunction formatTokenUsageCount(count: number) {\n\treturn usingTokensEstimates.value ? `~${count}` : count.toString();\n}\nfunction extractRunMeta(run: IAiDataContent) {\n\tconst uiNode = workflowsStore.getNodeByName(props.inputData.node);\n\tconst nodeType = nodeTypesStore.getNodeType(uiNode?.type ?? '');\n\n\tconst runMeta: RunMeta = {\n\t\tstartTimeMs: run.metadata.startTime,\n\t\texecutionTimeMs: run.metadata.executionTime,\n\t\tnode: nodeType,\n\t\ttype: run.inOut,\n\t\tconnectionType: run.type,\n\t};\n\n\treturn runMeta;\n}\n\nconst outputRun = computed(() => {\n\treturn props.inputData.data.find((r) => r.inOut === 'output');\n});\n\nconst runMeta = computed(() => {\n\tif (outputRun.value === undefined) {\n\t\treturn;\n\t}\n\treturn extractRunMeta(outputRun.value);\n});\n</script>\n\n<style type=\"scss\" module>\n.container {\n\tpadding: 0 var(--spacing-s) var(--spacing-s);\n}\n.nodeIcon {\n\tmargin-top: calc(var(--spacing-3xs) * -1);\n}\n.header {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--spacing-3xs);\n\tmargin-bottom: var(--spacing-s);\n}\n.headerWrap {\n\tdisplay: flex;\n\tflex-direction: column;\n}\n.title {\n\tdisplay: flex;\n\talign-items: center;\n\tfont-size: var(--font-size-s);\n\tgap: var(--spacing-3xs);\n\tcolor: var(--color-text-dark);\n}\n.meta {\n\tlist-style: none;\n\tdisplay: flex;\n\talign-items: center;\n\tflex-wrap: wrap;\n\tfont-size: var(--font-size-xs);\n\n\t& > li:not(:last-child) {\n\t\tborder-right: 1px solid var(--color-text-base);\n\t\tpadding-right: var(--spacing-3xs);\n\t}\n\n\t& > li:not(:first-child) {\n\t\tpadding-left: var(--spacing-3xs);\n\t}\n}\n.tokensUsage {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--spacing-3xs);\n}\n</style>\n","<template>\n\t<div v-if=\"aiData\" :class=\"$style.container\">\n\t\t<div :class=\"{ [$style.tree]: true, [$style.slim]: slim }\">\n\t\t\t<ElTree\n\t\t\t\t:data=\"executionTree\"\n\t\t\t\t:props=\"{ label: 'node' }\"\n\t\t\t\tdefault-expand-all\n\t\t\t\t:indent=\"12\"\n\t\t\t\t:expand-on-click-node=\"false\"\n\t\t\t\tdata-test-id=\"lm-chat-logs-tree\"\n\t\t\t\t@node-click=\"onItemClick\"\n\t\t\t>\n\t\t\t\t<template #default=\"{ node, data }\">\n\t\t\t\t\t<div\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t[$style.treeNode]: true,\n\t\t\t\t\t\t\t[$style.isSelected]: isTreeNodeSelected(data),\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:data-tree-depth=\"data.depth\"\n\t\t\t\t\t\t:style=\"{ '--item-depth': data.depth }\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tv-if=\"data.children.length\"\n\t\t\t\t\t\t\t:class=\"$style.treeToggle\"\n\t\t\t\t\t\t\t@click=\"toggleTreeItem(node)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<font-awesome-icon :icon=\"node.expanded ? 'angle-down' : 'angle-up'\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<n8n-tooltip :disabled=\"!slim\" placement=\"right\">\n\t\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t\t{{ node.label }}\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<span :class=\"$style.leafLabel\">\n\t\t\t\t\t\t\t\t<NodeIcon :node-type=\"getNodeType(data.node)!\" :size=\"17\" />\n\t\t\t\t\t\t\t\t<span v-if=\"!slim\" v-text=\"node.label\" />\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</ElTree>\n\t\t</div>\n\t\t<div :class=\"$style.runData\">\n\t\t\t<div v-if=\"selectedRun.length === 0\" :class=\"$style.empty\">\n\t\t\t\t<n8n-text size=\"large\">\n\t\t\t\t\t{{\n\t\t\t\t\t\t$locale.baseText('ndv.output.ai.empty', {\n\t\t\t\t\t\t\tinterpolate: {\n\t\t\t\t\t\t\t\tnode: props.node.name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-for=\"(data, index) in selectedRun\"\n\t\t\t\t:key=\"`${data.node}__${data.runIndex}__index`\"\n\t\t\t\tdata-test-id=\"lm-chat-logs-entry\"\n\t\t\t>\n\t\t\t\t<RunDataAiContent :input-data=\"data\" :content-index=\"index\" />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport type { Ref } from 'vue';\nimport { computed, ref, watch } from 'vue';\nimport type { ITaskSubRunMetadata, ITaskDataConnections } from 'n8n-workflow';\nimport { NodeConnectionType } from 'n8n-workflow';\nimport type { IAiData, IAiDataContent, INodeUi } from '@/Interface';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport RunDataAiContent from './RunDataAiContent.vue';\nimport { ElTree } from 'element-plus';\n\ninterface AIResult {\n\tnode: string;\n\trunIndex: number;\n\tdata: IAiDataContent | undefined;\n}\ninterface TreeNode {\n\tnode: string;\n\tid: string;\n\tchildren: TreeNode[];\n\tdepth: number;\n\tstartTime: number;\n\trunIndex: number;\n}\nexport interface Props {\n\tnode: INodeUi;\n\trunIndex: number;\n\thideTitle?: boolean;\n\tslim?: boolean;\n}\nconst props = withDefaults(defineProps<Props>(), { runIndex: 0 });\nconst workflowsStore = useWorkflowsStore();\nconst nodeTypesStore = useNodeTypesStore();\nconst selectedRun: Ref<IAiData[]> = ref([]);\n\nfunction isTreeNodeSelected(node: TreeNode) {\n\treturn selectedRun.value.some((run) => run.node === node.node && run.runIndex === node.runIndex);\n}\n\nfunction getReferencedData(\n\treference: ITaskSubRunMetadata,\n\twithInput: boolean,\n\twithOutput: boolean,\n): IAiDataContent[] {\n\tconst resultData = workflowsStore.getWorkflowResultDataByNodeName(reference.node);\n\n\tif (!resultData?.[reference.runIndex]) {\n\t\treturn [];\n\t}\n\n\tconst taskData = resultData[reference.runIndex];\n\n\tif (!taskData) {\n\t\treturn [];\n\t}\n\n\tconst returnData: IAiDataContent[] = [];\n\n\tfunction addFunction(data: ITaskDataConnections | undefined, inOut: 'input' | 'output') {\n\t\tif (!data) {\n\t\t\treturn;\n\t\t}\n\n\t\tObject.keys(data).map((type) => {\n\t\t\treturnData.push({\n\t\t\t\tdata: data[type][0],\n\t\t\t\tinOut,\n\t\t\t\ttype: type as NodeConnectionType,\n\t\t\t\tmetadata: {\n\t\t\t\t\texecutionTime: taskData.executionTime,\n\t\t\t\t\tstartTime: taskData.startTime,\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t}\n\n\tif (withInput) {\n\t\taddFunction(taskData.inputOverride, 'input');\n\t}\n\tif (withOutput) {\n\t\taddFunction(taskData.data, 'output');\n\t}\n\n\treturn returnData;\n}\n\nfunction toggleTreeItem(node: { expanded: boolean }) {\n\tnode.expanded = !node.expanded;\n}\n\nfunction onItemClick(data: TreeNode) {\n\tconst matchingRun = aiData.value?.find(\n\t\t(run) => run.node === data.node && run.runIndex === data.runIndex,\n\t);\n\tif (!matchingRun) {\n\t\tselectedRun.value = [];\n\n\t\treturn;\n\t}\n\tselectedRun.value = [\n\t\t{\n\t\t\tnode: data.node,\n\t\t\trunIndex: data.runIndex,\n\t\t\tdata: getReferencedData(\n\t\t\t\t{\n\t\t\t\t\tnode: data.node,\n\t\t\t\t\trunIndex: data.runIndex,\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t\ttrue,\n\t\t\t),\n\t\t},\n\t];\n}\n\nfunction getNodeType(nodeName: string) {\n\tconst node = workflowsStore.getNodeByName(nodeName);\n\tif (!node) {\n\t\treturn null;\n\t}\n\tconst nodeType = nodeTypesStore.getNodeType(node?.type);\n\n\treturn nodeType;\n}\n\nfunction selectFirst() {\n\tif (executionTree.value.length && executionTree.value[0].children.length) {\n\t\tonItemClick(executionTree.value[0].children[0]);\n\t}\n}\n\nconst createNode = (\n\tnodeName: string,\n\tcurrentDepth: number,\n\tr?: AIResult,\n\tchildren: TreeNode[] = [],\n): TreeNode => ({\n\tnode: nodeName,\n\tid: nodeName,\n\tdepth: currentDepth,\n\tstartTime: r?.data?.metadata?.startTime ?? 0,\n\trunIndex: r?.runIndex ?? 0,\n\tchildren,\n});\n\nfunction getTreeNodeData(nodeName: string, currentDepth: number): TreeNode[] {\n\tconst { connectionsByDestinationNode } = workflowsStore.getCurrentWorkflow();\n\tconst connections = connectionsByDestinationNode[nodeName];\n\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\tconst resultData = aiData.value?.filter((data) => data.node === nodeName) ?? [];\n\n\tif (!connections) {\n\t\treturn resultData.map((d) => createNode(nodeName, currentDepth, d));\n\t}\n\n\tconst nonMainConnectionsKeys = Object.keys(connections).filter(\n\t\t(key) => key !== NodeConnectionType.Main,\n\t);\n\tconst children = nonMainConnectionsKeys.flatMap((key) =>\n\t\tconnections[key][0].flatMap((node) => getTreeNodeData(node.node, currentDepth + 1)),\n\t);\n\n\tif (resultData.length) {\n\t\treturn resultData.map((r) => createNode(nodeName, currentDepth, r, children));\n\t}\n\n\tchildren.sort((a, b) => a.startTime - b.startTime);\n\n\treturn [createNode(nodeName, currentDepth, undefined, children)];\n}\n\nconst aiData = computed<AIResult[] | undefined>(() => {\n\tconst resultData = workflowsStore.getWorkflowResultDataByNodeName(props.node.name);\n\n\tif (!resultData || !Array.isArray(resultData)) {\n\t\treturn;\n\t}\n\n\tconst subRun = resultData[props.runIndex].metadata?.subRun;\n\tif (!Array.isArray(subRun)) {\n\t\treturn;\n\t}\n\t// Extend the subRun with the data and sort by adding execution time + startTime and comparing them\n\tconst subRunWithData = subRun.flatMap((run) =>\n\t\tgetReferencedData(run, false, true).map((data) => ({ ...run, data })),\n\t);\n\n\tsubRunWithData.sort((a, b) => {\n\t\tconst aTime = a.data?.metadata?.startTime || 0;\n\t\tconst bTime = b.data?.metadata?.startTime || 0;\n\t\treturn aTime - bTime;\n\t});\n\n\treturn subRunWithData;\n});\n\nconst executionTree = computed<TreeNode[]>(() => {\n\tconst rootNode = props.node;\n\n\tconst tree = getTreeNodeData(rootNode.name, 0);\n\treturn tree || [];\n});\n\nwatch(() => props.runIndex, selectFirst, { immediate: true });\n</script>\n\n<style lang=\"scss\" module>\n.treeToggle {\n\tborder: none;\n\tbackground-color: transparent;\n\tpadding: 0 var(--spacing-3xs);\n\tmargin: 0 calc(-1 * var(--spacing-3xs));\n\tcursor: pointer;\n}\n.leafLabel {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--spacing-3xs);\n}\n.empty {\n\tpadding: var(--spacing-l);\n}\n.title {\n\tfont-size: var(--font-size-s);\n\tmargin-bottom: var(--spacing-xs);\n}\n.tree {\n\tflex-shrink: 0;\n\tmin-width: 12.8rem;\n\theight: 100%;\n\tborder-right: 1px solid var(--color-foreground-base);\n\tpadding-right: var(--spacing-xs);\n\tpadding-left: var(--spacing-2xs);\n\t&.slim {\n\t\tmin-width: auto;\n\t}\n}\n.runData {\n\twidth: 100%;\n\theight: 100%;\n\toverflow: auto;\n}\n.container {\n\theight: 100%;\n\tpadding: 0 var(--spacing-xs);\n\tdisplay: flex;\n\n\t:global(.el-tree > .el-tree-node) {\n\t\tposition: relative;\n\t\t&:after {\n\t\t\tcontent: '';\n\t\t\tposition: absolute;\n\t\t\ttop: 2rem;\n\t\t\tbottom: 1.2rem;\n\t\t\tleft: 0.75rem;\n\t\t\twidth: 0.125rem;\n\t\t\tbackground-color: var(--color-foreground-base);\n\t\t}\n\t}\n\t:global(.el-tree-node__expand-icon) {\n\t\tdisplay: none;\n\t}\n\t:global(.el-tree) {\n\t\tmargin-left: calc(-1 * var(--spacing-xs));\n\t}\n\t:global(.el-tree-node__content) {\n\t\tmargin-left: var(--spacing-xs);\n\t}\n}\n.isSelected {\n\tbackground-color: var(--color-foreground-base);\n}\n.treeNode {\n\tdisplay: inline-flex;\n\tborder-radius: var(--border-radius-base);\n\talign-items: center;\n\tgap: var(--spacing-3xs);\n\tpadding: var(--spacing-4xs) var(--spacing-3xs);\n\tfont-size: var(--font-size-xs);\n\tcolor: var(--color-text-dark);\n\tmargin-bottom: var(--spacing-3xs);\n\tcursor: pointer;\n\n\t&:hover {\n\t\tbackground-color: var(--color-foreground-base);\n\t}\n\t&[data-tree-depth='0'] {\n\t\tmargin-left: calc(-1 * var(--spacing-2xs));\n\t}\n\n\t&:after {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tmargin: auto;\n\t\tbackground-color: var(--color-foreground-base);\n\t\theight: 0.125rem;\n\t\tleft: 0.75rem;\n\t\twidth: calc(var(--item-depth) * 0.625rem);\n\t}\n}\n</style>\n"],"names":["fallbackParser","execData","outputTypeParsers","NodeConnectionType","response","generation","item","chatHistory","_a","content","message","type","image_url","useAiContentParsers","executionData","endpointType","data","contentJson","node","isObjectEmpty","parser","c","VueMarkdown","defineComponent","src","MarkdownIt","h","VueMarkdown$1","props","__props","i18n","useI18n","clipboard","useClipboard","showMessage","useToast","contentParsers","isExpanded","ref","getInitialExpandedState","isShowRaw","contentParsed","parsedRun","parseAiRunData","run","isMarkdown","pattern","formatToJsonMarkdown","jsonToMarkdown","setContentParsed","onBlockHeaderClick","onCopyToClipboard","onMounted","nodeTypesStore","useNodeTypesStore","workflowsStore","useWorkflowsStore","consumedTokensSum","computed","_b","outputRun","acc","curr","tokenUsageData","usingTokensEstimates","d","formatTokenUsageCount","count","extractRunMeta","uiNode","nodeType","runMeta","selectedRun","isTreeNodeSelected","getReferencedData","reference","withInput","withOutput","resultData","taskData","returnData","addFunction","inOut","toggleTreeItem","onItemClick","aiData","getNodeType","nodeName","selectFirst","executionTree","createNode","currentDepth","r","children","getTreeNodeData","connectionsByDestinationNode","connections","key","a","b","subRun","subRunWithData","aTime","bTime","_d","_c","rootNode","watch"],"mappings":"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","x_google_ignoreList":[1]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
function __vite__mapDeps(indexes) {
|
|
2
2
|
if (!__vite__mapDeps.viteFileDeps) {
|
|
3
|
-
__vite__mapDeps.viteFileDeps = ["assets/RunDataJsonActions-
|
|
3
|
+
__vite__mapDeps.viteFileDeps = ["assets/RunDataJsonActions-s5miC4iz.js","assets/pinia-hqNpa1CE.js","assets/n8n-roXSR3ff.js","assets/axios-s2RMMPhA.js","assets/esprima-next-ulPLCZ1Z.js","assets/luxon-ZRIU05qF.js","assets/vendor-qzAIxxHa.js","assets/lodash-es-SWsik9tP.js","assets/n8n-QrEoeaP_.css","assets/jsonpath-zohyyC-J.js","assets/index-6ulnOLCO.js","assets/flatted-jPn12Tq4.js","assets/@vueuse/core-3K2u_AzZ.js","assets/@n8n/permissions-1O7vSg-k.js","assets/dateformat-ZLFwQ-J0.js","assets/vue-i18n-COIxmhgq.js","assets/uuid-McvpxQtQ.js","assets/@n8n/codemirror-lang-sql-PDL6jaEc.js","assets/@lezer/common-1hBQ1gIF.js","assets/prettier-XiNuC5bg.js","assets/@jsplumb/util-DR0SB56A.js","assets/@jsplumb/core-MKwKlGip.js","assets/@jsplumb/common-Q5_tv_GT.js","assets/@jsplumb/connector-bezier-3dWY17R5.js","assets/@jsplumb/browser-ui-AlqFM-P6.js","assets/codemirror-lang-html-n8n-m8pcIqw_.js","assets/@n8n/codemirror-lang-uuamtW6H.js","assets/fast-json-stable-stringify-F21sPGMl.js","assets/timeago.js--Bumj2r9.js","assets/qrcode.vue-NS1qgWpD.js","assets/vue3-touch-events-_RfbPMOD.js","assets/chart.js-JtqvIvkt.js","assets/index-DXlv6zSm.css","assets/RunDataJsonActions-QM7MLFh_.css"]
|
|
4
4
|
}
|
|
5
5
|
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
|
|
6
6
|
}
|
|
7
|
-
import{e as b,_ as P}from"./n8n-roXSR3ff.js";import{V as v}from"./vue-json-pretty-nL1cuhMr.js";import{D as _}from"./NodeView-
|
|
8
|
-
//# sourceMappingURL=RunDataJson-
|
|
7
|
+
import{e as b,_ as P}from"./n8n-roXSR3ff.js";import{V as v}from"./vue-json-pretty-nL1cuhMr.js";import{D as _}from"./NodeView-qN4Zuw87.js";import{ek as J,j,K as k,aH as S,s as w,ej as N,bd as $,a3 as E}from"./index-6ulnOLCO.js";import{m as M}from"./pinia-hqNpa1CE.js";import{M as T,_ as A}from"./TextWithHighlights.vue_vue_type_script_setup_true_lang-5UrwIRz-.js";import{G as C,r as d,aJ as R,ag as o,l as s,m as V,M as r,O as p,Q as u,aL as H,T as l,I as m}from"./vendor-qzAIxxHa.js";import"./axios-s2RMMPhA.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./lodash-es-SWsik9tP.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./useExecutionDebugging-QUE85fFt.js";import"./file-saver-A99yC7RV.js";import"./dateFormatter-cvdD716J.js";import"./dateformat-ZLFwQ-J0.js";import"./RunDataAi-sZalPI5G.js";import"./flatted-jPn12Tq4.js";import"./@vueuse/core-3K2u_AzZ.js";import"./@n8n/permissions-1O7vSg-k.js";import"./vue-i18n-COIxmhgq.js";import"./uuid-McvpxQtQ.js";import"./@n8n/codemirror-lang-sql-PDL6jaEc.js";import"./@lezer/common-1hBQ1gIF.js";import"./prettier-XiNuC5bg.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-html-n8n-m8pcIqw_.js";import"./@n8n/codemirror-lang-uuamtW6H.js";import"./fast-json-stable-stringify-F21sPGMl.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-NS1qgWpD.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";import"./useWorkflowActivate-rx_C76SX.js";import"./collaboration.store-aa4nebcL.js";const I=R(async()=>await b(()=>import("./RunDataJsonActions-s5miC4iz.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]))),F=C({name:"RunDataJson",components:{VueJsonPretty:v,Draggable:_,RunDataJsonActions:I,MappingPill:T,TextWithHighlights:A},props:{editMode:{type:Object,default:()=>({})},pushRef:{type:String},paneType:{type:String},node:{type:Object,required:!0},inputData:{type:Array,required:!0},mappingEnabled:{type:Boolean},distanceFromActive:{type:Number,required:!0},runIndex:{type:Number},totalRuns:{type:Number},search:{type:String}},setup(){const t=E(),a=d(J),n=d(null),h=d("json");return{externalHooks:t,selectedJsonPath:a,draggingPath:n,displayMode:h}},computed:{...M(k,j),jsonData(){return S(this.inputData)},highlight(){return this.ndvStore.highlightDraggables}},methods:{getShortKey(t){return t?w(t.dataset.name||"",16,2):""},getJsonParameterPath(t){const a=t.replace(/^(\["?\d"?])/,"");return N({nodeName:this.node.name,distanceFromActive:this.distanceFromActive,path:a})},onDragStart(t){t!=null&&t.dataset.path&&(this.draggingPath=t.dataset.path),this.ndvStore.resetMappingTelemetry()},onDragEnd(t){this.draggingPath=null;const a=this.ndvStore.mappingTelemetry,n={src_node_type:this.node.type,src_field_name:t.dataset.name||"",src_nodes_back:this.distanceFromActive,src_run_index:this.runIndex,src_runs_total:this.totalRuns,src_field_nest_level:t.dataset.depth||0,src_view:"json",src_element:t,success:!1,...a};setTimeout(()=>{this.externalHooks.run("runDataJson.onDragEnd",n),this.$telemetry.track("User dragged data for mapping",n,{withPostHog:!0})},1e3)},getContent(t){return $(t)?`"${t}"`:JSON.stringify(t)},getListItemName(t){return t.replace(/^(\["?\d"?]\.?)/g,"")}}}),O="_jsonDisplay_uww64_1",B="_mappable_uww64_19",K="_highlight_uww64_25",L="_dragged_uww64_26",W={jsonDisplay:O,mappable:B,highlight:K,dragged:L};function q(t,a,n,h,z,G){const c=o("RunDataJsonActions"),y=o("MappingPill"),i=o("TextWithHighlights"),f=o("VueJsonPretty"),D=o("Draggable");return s(),V("div",{class:m([t.$style.jsonDisplay,{[t.$style.highlight]:t.highlight}])},[(s(),r(H,null,{default:p(()=>[t.editMode.enabled?u("",!0):(s(),r(c,{key:0,node:t.node,"push-ref":t.pushRef,"display-mode":t.displayMode,"distance-from-active":t.distanceFromActive,"selected-json-path":t.selectedJsonPath,"json-data":t.jsonData,"pane-type":t.paneType},null,8,["node","push-ref","display-mode","distance-from-active","selected-json-path","json-data","pane-type"]))]),_:1})),l(D,{type:"mapping","target-data-key":"mappable",disabled:!t.mappingEnabled,onDragstart:t.onDragStart,onDragend:t.onDragEnd},{preview:p(({canDrop:e,el:g})=>[g?(s(),r(y,{key:0,html:t.getShortKey(g),"can-drop":e},null,8,["html","can-drop"])):u("",!0)]),default:p(()=>[l(f,{data:t.jsonData,deep:10,"show-length":!0,"selected-value":t.selectedJsonPath,"root-path":"","selectable-type":"single",class:"json-data","onUpdate:selectedValue":a[0]||(a[0]=e=>t.selectedJsonPath=e)},{renderNodeKey:p(({node:e})=>[l(i,{content:t.getContent(e.key),search:t.search,"data-target":"mappable","data-value":t.getJsonParameterPath(e.path),"data-name":e.key,"data-path":e.path,"data-depth":e.level,class:m({[t.$style.mappable]:t.mappingEnabled,[t.$style.dragged]:t.draggingPath===e.path})},null,8,["content","search","data-value","data-name","data-path","data-depth","class"])]),renderNodeValue:p(({node:e})=>[isNaN(e.index)?(s(),r(i,{key:0,content:t.getContent(e.content),search:t.search},null,8,["content","search"])):(s(),r(i,{key:1,content:t.getContent(e.content),search:t.search,"data-target":"mappable","data-value":t.getJsonParameterPath(e.path),"data-name":t.getListItemName(e.path),"data-path":e.path,"data-depth":e.level,class:m([{[t.$style.mappable]:t.mappingEnabled,[t.$style.dragged]:t.draggingPath===e.path},"ph-no-capture"])},null,8,["content","search","data-value","data-name","data-path","data-depth","class"]))]),_:1},8,["data","selected-value"])]),_:1},8,["disabled","onDragstart","onDragend"])],2)}const U={$style:W},At=P(F,[["render",q],["__cssModules",U]]);export{At as default};
|
|
8
|
+
//# sourceMappingURL=RunDataJson-Wjq8QCxZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["RunDataJsonActions","defineAsyncComponent","__vitePreload","_sfc_main","defineComponent","VueJsonPretty","Draggable","MappingPill","TextWithHighlights","externalHooks","useExternalHooks","selectedJsonPath","ref","nonExistingJsonPath","draggingPath","displayMode","mapStores","useNDVStore","useWorkflowsStore","executionDataToJson","el","shorten","path","subPath","getMappedExpression","mappingTelemetry","telemetryPayload","value","isString","_resolveComponent","_ctx","_createBlock","_Suspense","_withCtx","_createCommentVNode","_component_RunDataJsonActions","jsonData","paneType","_component_Draggable","onDragStart","onDragEnd","canDrop","_openBlock","_component_MappingPill","_createVNode","_component_VueJsonPretty","_cache","$event","getContent","search","node","$style","mappingEnabled","_normalizeClass","_component_TextWithHighlights","getListItemName"],"ignoreList":[],"sources":["../../src/components/RunDataJson.vue"],"sourcesContent":["<template>\n\t<div :class=\"[$style.jsonDisplay, { [$style.highlight]: highlight }]\">\n\t\t<Suspense>\n\t\t\t<RunDataJsonActions\n\t\t\t\tv-if=\"!editMode.enabled\"\n\t\t\t\t:node=\"node\"\n\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t:display-mode=\"displayMode\"\n\t\t\t\t:distance-from-active=\"distanceFromActive\"\n\t\t\t\t:selected-json-path=\"selectedJsonPath\"\n\t\t\t\t:json-data=\"jsonData\"\n\t\t\t\t:pane-type=\"paneType\"\n\t\t\t/>\n\t\t</Suspense>\n\t\t<Draggable\n\t\t\ttype=\"mapping\"\n\t\t\ttarget-data-key=\"mappable\"\n\t\t\t:disabled=\"!mappingEnabled\"\n\t\t\t@dragstart=\"onDragStart\"\n\t\t\t@dragend=\"onDragEnd\"\n\t\t>\n\t\t\t<template #preview=\"{ canDrop, el }\">\n\t\t\t\t<MappingPill v-if=\"el\" :html=\"getShortKey(el)\" :can-drop=\"canDrop\" />\n\t\t\t</template>\n\t\t\t<VueJsonPretty\n\t\t\t\t:data=\"jsonData\"\n\t\t\t\t:deep=\"10\"\n\t\t\t\t:show-length=\"true\"\n\t\t\t\t:selected-value=\"selectedJsonPath\"\n\t\t\t\troot-path=\"\"\n\t\t\t\tselectable-type=\"single\"\n\t\t\t\tclass=\"json-data\"\n\t\t\t\t@update:selected-value=\"selectedJsonPath = $event\"\n\t\t\t>\n\t\t\t\t<template #renderNodeKey=\"{ node }\">\n\t\t\t\t\t<TextWithHighlights\n\t\t\t\t\t\t:content=\"getContent(node.key)\"\n\t\t\t\t\t\t:search=\"search\"\n\t\t\t\t\t\tdata-target=\"mappable\"\n\t\t\t\t\t\t:data-value=\"getJsonParameterPath(node.path)\"\n\t\t\t\t\t\t:data-name=\"node.key\"\n\t\t\t\t\t\t:data-path=\"node.path\"\n\t\t\t\t\t\t:data-depth=\"node.level\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t[$style.mappable]: mappingEnabled,\n\t\t\t\t\t\t\t[$style.dragged]: draggingPath === node.path,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<template #renderNodeValue=\"{ node }\">\n\t\t\t\t\t<TextWithHighlights\n\t\t\t\t\t\tv-if=\"isNaN(node.index)\"\n\t\t\t\t\t\t:content=\"getContent(node.content)\"\n\t\t\t\t\t\t:search=\"search\"\n\t\t\t\t\t/>\n\t\t\t\t\t<TextWithHighlights\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\t:content=\"getContent(node.content)\"\n\t\t\t\t\t\t:search=\"search\"\n\t\t\t\t\t\tdata-target=\"mappable\"\n\t\t\t\t\t\t:data-value=\"getJsonParameterPath(node.path)\"\n\t\t\t\t\t\t:data-name=\"getListItemName(node.path)\"\n\t\t\t\t\t\t:data-path=\"node.path\"\n\t\t\t\t\t\t:data-depth=\"node.level\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t[$style.mappable]: mappingEnabled,\n\t\t\t\t\t\t\t[$style.dragged]: draggingPath === node.path,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\tclass=\"ph-no-capture\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t</VueJsonPretty>\n\t\t</Draggable>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineAsyncComponent, defineComponent, ref } from 'vue';\nimport type { PropType } from 'vue';\nimport VueJsonPretty from 'vue-json-pretty';\nimport type { IDataObject, INodeExecutionData } from 'n8n-workflow';\nimport Draggable from '@/components/Draggable.vue';\nimport { executionDataToJson } from '@/utils/nodeTypesUtils';\nimport { isString } from '@/utils/typeGuards';\nimport { shorten } from '@/utils/typesUtils';\nimport type { INodeUi } from '@/Interface';\nimport { mapStores } from 'pinia';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport MappingPill from './MappingPill.vue';\nimport { getMappedExpression } from '@/utils/mappingUtils';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { nonExistingJsonPath } from '@/constants';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport TextWithHighlights from './TextWithHighlights.vue';\n\nconst RunDataJsonActions = defineAsyncComponent(\n\tasync () => await import('@/components/RunDataJsonActions.vue'),\n);\n\nexport default defineComponent({\n\tname: 'RunDataJson',\n\tcomponents: {\n\t\tVueJsonPretty,\n\t\tDraggable,\n\t\tRunDataJsonActions,\n\t\tMappingPill,\n\t\tTextWithHighlights,\n\t},\n\tprops: {\n\t\teditMode: {\n\t\t\ttype: Object as PropType<{ enabled?: boolean; value?: string }>,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t},\n\t\tpaneType: {\n\t\t\ttype: String,\n\t\t},\n\t\tnode: {\n\t\t\ttype: Object as PropType<INodeUi>,\n\t\t\trequired: true,\n\t\t},\n\t\tinputData: {\n\t\t\ttype: Array as PropType<INodeExecutionData[]>,\n\t\t\trequired: true,\n\t\t},\n\t\tmappingEnabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tdistanceFromActive: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\trunIndex: {\n\t\t\ttype: Number,\n\t\t},\n\t\ttotalRuns: {\n\t\t\ttype: Number,\n\t\t},\n\t\tsearch: {\n\t\t\ttype: String,\n\t\t},\n\t},\n\tsetup() {\n\t\tconst externalHooks = useExternalHooks();\n\n\t\tconst selectedJsonPath = ref(nonExistingJsonPath);\n\t\tconst draggingPath = ref<null | string>(null);\n\t\tconst displayMode = ref('json');\n\n\t\treturn {\n\t\t\texternalHooks,\n\t\t\tselectedJsonPath,\n\t\t\tdraggingPath,\n\t\t\tdisplayMode,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNDVStore, useWorkflowsStore),\n\t\tjsonData(): IDataObject[] {\n\t\t\treturn executionDataToJson(this.inputData);\n\t\t},\n\t\thighlight(): boolean {\n\t\t\treturn this.ndvStore.highlightDraggables;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetShortKey(el: HTMLElement): string {\n\t\t\tif (!el) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn shorten(el.dataset.name || '', 16, 2);\n\t\t},\n\t\tgetJsonParameterPath(path: string): string {\n\t\t\tconst subPath = path.replace(/^(\\[\"?\\d\"?])/, ''); // remove item position\n\n\t\t\treturn getMappedExpression({\n\t\t\t\tnodeName: this.node.name,\n\t\t\t\tdistanceFromActive: this.distanceFromActive,\n\t\t\t\tpath: subPath,\n\t\t\t});\n\t\t},\n\t\tonDragStart(el: HTMLElement) {\n\t\t\tif (el?.dataset.path) {\n\t\t\t\tthis.draggingPath = el.dataset.path;\n\t\t\t}\n\n\t\t\tthis.ndvStore.resetMappingTelemetry();\n\t\t},\n\t\tonDragEnd(el: HTMLElement) {\n\t\t\tthis.draggingPath = null;\n\t\t\tconst mappingTelemetry = this.ndvStore.mappingTelemetry;\n\t\t\tconst telemetryPayload = {\n\t\t\t\tsrc_node_type: this.node.type,\n\t\t\t\tsrc_field_name: el.dataset.name || '',\n\t\t\t\tsrc_nodes_back: this.distanceFromActive,\n\t\t\t\tsrc_run_index: this.runIndex,\n\t\t\t\tsrc_runs_total: this.totalRuns,\n\t\t\t\tsrc_field_nest_level: el.dataset.depth || 0,\n\t\t\t\tsrc_view: 'json',\n\t\t\t\tsrc_element: el,\n\t\t\t\tsuccess: false,\n\t\t\t\t...mappingTelemetry,\n\t\t\t};\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tvoid this.externalHooks.run('runDataJson.onDragEnd', telemetryPayload);\n\t\t\t\tthis.$telemetry.track('User dragged data for mapping', telemetryPayload, {\n\t\t\t\t\twithPostHog: true,\n\t\t\t\t});\n\t\t\t}, 1000); // ensure dest data gets set if drop\n\t\t},\n\t\tgetContent(value: unknown): string {\n\t\t\treturn isString(value) ? `\"${value}\"` : JSON.stringify(value);\n\t\t},\n\t\tgetListItemName(path: string): string {\n\t\t\treturn path.replace(/^(\\[\"?\\d\"?]\\.?)/g, '');\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.jsonDisplay {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding-left: var(--spacing-s);\n\tright: 0;\n\toverflow-y: auto;\n\tline-height: 1.5;\n\tword-break: normal;\n\theight: 100%;\n\tpadding-bottom: var(--spacing-3xl);\n\n\t&:hover {\n\t\t/* Shows .actionsGroup element from <run-data-json-actions /> child component */\n\t\t> div:first-child {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t.mappable {\n\t\tcursor: grab;\n\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-json-highlight);\n\t\t}\n\t}\n\n\t&.highlight .mappable,\n\t.dragged {\n\t\t&,\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-primary-tint-2);\n\t\t\tcolor: var(--color-primary);\n\t\t}\n\t}\n}\n</style>\n\n<style lang=\"scss\">\n.vjs-tree {\n\tcolor: var(--color-json-default);\n}\n\n.vjs-tree-node {\n\t&:hover {\n\t\tbackground-color: transparent;\n\t}\n\n\t&.is-highlight {\n\t\tbackground-color: var(--color-json-highlight);\n\t}\n}\n\n.vjs-key,\n.vjs-value {\n\t> span {\n\t\tcolor: var(--color-text-dark);\n\t\tline-height: 1.7;\n\t\tborder-radius: var(--border-radius-base);\n\t}\n}\n\n.vjs-value {\n\t> span {\n\t\tpadding: 0 var(--spacing-5xs) 0 var(--spacing-5xs);\n\t\tmargin-left: var(--spacing-5xs);\n\t}\n}\n\n.vjs-tree .vjs-value-null {\n\t&,\n\tspan {\n\t\tcolor: var(--color-json-null);\n\t}\n}\n\n.vjs-tree .vjs-value-boolean {\n\t&,\n\tspan {\n\t\tcolor: var(--color-json-boolean);\n\t}\n}\n\n.vjs-tree .vjs-value-number {\n\t&,\n\tspan {\n\t\tcolor: var(--color-json-number);\n\t}\n}\n\n.vjs-tree .vjs-value-string {\n\t&,\n\tspan {\n\t\tcolor: var(--color-json-string);\n\t}\n}\n\n.vjs-tree .vjs-key {\n\tcolor: var(--color-json-key);\n}\n\n.vjs-tree .vjs-tree__brackets {\n\tcolor: var(--color-json-brackets);\n}\n\n.vjs-tree .vjs-tree__brackets:hover {\n\tcolor: var(--color-json-brackets-hover);\n}\n\n.vjs-tree .vjs-tree__content.has-line {\n\tborder-left: 1px dotted var(--color-json-line);\n}\n</style>\n"],"file":"assets/RunDataJson-52-sD-ud.js"}
|
|
1
|
+
{"version":3,"mappings":"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","names":["RunDataJsonActions","defineAsyncComponent","__vitePreload","_sfc_main","defineComponent","VueJsonPretty","Draggable","MappingPill","TextWithHighlights","externalHooks","useExternalHooks","selectedJsonPath","ref","nonExistingJsonPath","draggingPath","displayMode","mapStores","useNDVStore","useWorkflowsStore","executionDataToJson","el","shorten","path","subPath","getMappedExpression","mappingTelemetry","telemetryPayload","value","isString","_resolveComponent","_ctx","_createBlock","_Suspense","_withCtx","_createCommentVNode","_component_RunDataJsonActions","jsonData","paneType","_component_Draggable","onDragStart","onDragEnd","canDrop","_openBlock","_component_MappingPill","_createVNode","_component_VueJsonPretty","_cache","$event","getContent","search","node","$style","mappingEnabled","_normalizeClass","_component_TextWithHighlights","getListItemName"],"ignoreList":[],"sources":["../../src/components/RunDataJson.vue"],"sourcesContent":["<template>\n\t<div :class=\"[$style.jsonDisplay, { [$style.highlight]: highlight }]\">\n\t\t<Suspense>\n\t\t\t<RunDataJsonActions\n\t\t\t\tv-if=\"!editMode.enabled\"\n\t\t\t\t:node=\"node\"\n\t\t\t\t:push-ref=\"pushRef\"\n\t\t\t\t:display-mode=\"displayMode\"\n\t\t\t\t:distance-from-active=\"distanceFromActive\"\n\t\t\t\t:selected-json-path=\"selectedJsonPath\"\n\t\t\t\t:json-data=\"jsonData\"\n\t\t\t\t:pane-type=\"paneType\"\n\t\t\t/>\n\t\t</Suspense>\n\t\t<Draggable\n\t\t\ttype=\"mapping\"\n\t\t\ttarget-data-key=\"mappable\"\n\t\t\t:disabled=\"!mappingEnabled\"\n\t\t\t@dragstart=\"onDragStart\"\n\t\t\t@dragend=\"onDragEnd\"\n\t\t>\n\t\t\t<template #preview=\"{ canDrop, el }\">\n\t\t\t\t<MappingPill v-if=\"el\" :html=\"getShortKey(el)\" :can-drop=\"canDrop\" />\n\t\t\t</template>\n\t\t\t<VueJsonPretty\n\t\t\t\t:data=\"jsonData\"\n\t\t\t\t:deep=\"10\"\n\t\t\t\t:show-length=\"true\"\n\t\t\t\t:selected-value=\"selectedJsonPath\"\n\t\t\t\troot-path=\"\"\n\t\t\t\tselectable-type=\"single\"\n\t\t\t\tclass=\"json-data\"\n\t\t\t\t@update:selected-value=\"selectedJsonPath = $event\"\n\t\t\t>\n\t\t\t\t<template #renderNodeKey=\"{ node }\">\n\t\t\t\t\t<TextWithHighlights\n\t\t\t\t\t\t:content=\"getContent(node.key)\"\n\t\t\t\t\t\t:search=\"search\"\n\t\t\t\t\t\tdata-target=\"mappable\"\n\t\t\t\t\t\t:data-value=\"getJsonParameterPath(node.path)\"\n\t\t\t\t\t\t:data-name=\"node.key\"\n\t\t\t\t\t\t:data-path=\"node.path\"\n\t\t\t\t\t\t:data-depth=\"node.level\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t[$style.mappable]: mappingEnabled,\n\t\t\t\t\t\t\t[$style.dragged]: draggingPath === node.path,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t\t<template #renderNodeValue=\"{ node }\">\n\t\t\t\t\t<TextWithHighlights\n\t\t\t\t\t\tv-if=\"isNaN(node.index)\"\n\t\t\t\t\t\t:content=\"getContent(node.content)\"\n\t\t\t\t\t\t:search=\"search\"\n\t\t\t\t\t/>\n\t\t\t\t\t<TextWithHighlights\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\t:content=\"getContent(node.content)\"\n\t\t\t\t\t\t:search=\"search\"\n\t\t\t\t\t\tdata-target=\"mappable\"\n\t\t\t\t\t\t:data-value=\"getJsonParameterPath(node.path)\"\n\t\t\t\t\t\t:data-name=\"getListItemName(node.path)\"\n\t\t\t\t\t\t:data-path=\"node.path\"\n\t\t\t\t\t\t:data-depth=\"node.level\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t[$style.mappable]: mappingEnabled,\n\t\t\t\t\t\t\t[$style.dragged]: draggingPath === node.path,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\tclass=\"ph-no-capture\"\n\t\t\t\t\t/>\n\t\t\t\t</template>\n\t\t\t</VueJsonPretty>\n\t\t</Draggable>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineAsyncComponent, defineComponent, ref } from 'vue';\nimport type { PropType } from 'vue';\nimport VueJsonPretty from 'vue-json-pretty';\nimport type { IDataObject, INodeExecutionData } from 'n8n-workflow';\nimport Draggable from '@/components/Draggable.vue';\nimport { executionDataToJson } from '@/utils/nodeTypesUtils';\nimport { isString } from '@/utils/typeGuards';\nimport { shorten } from '@/utils/typesUtils';\nimport type { INodeUi } from '@/Interface';\nimport { mapStores } from 'pinia';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport MappingPill from './MappingPill.vue';\nimport { getMappedExpression } from '@/utils/mappingUtils';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { nonExistingJsonPath } from '@/constants';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport TextWithHighlights from './TextWithHighlights.vue';\n\nconst RunDataJsonActions = defineAsyncComponent(\n\tasync () => await import('@/components/RunDataJsonActions.vue'),\n);\n\nexport default defineComponent({\n\tname: 'RunDataJson',\n\tcomponents: {\n\t\tVueJsonPretty,\n\t\tDraggable,\n\t\tRunDataJsonActions,\n\t\tMappingPill,\n\t\tTextWithHighlights,\n\t},\n\tprops: {\n\t\teditMode: {\n\t\t\ttype: Object as PropType<{ enabled?: boolean; value?: string }>,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t},\n\t\tpaneType: {\n\t\t\ttype: String,\n\t\t},\n\t\tnode: {\n\t\t\ttype: Object as PropType<INodeUi>,\n\t\t\trequired: true,\n\t\t},\n\t\tinputData: {\n\t\t\ttype: Array as PropType<INodeExecutionData[]>,\n\t\t\trequired: true,\n\t\t},\n\t\tmappingEnabled: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tdistanceFromActive: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\trunIndex: {\n\t\t\ttype: Number,\n\t\t},\n\t\ttotalRuns: {\n\t\t\ttype: Number,\n\t\t},\n\t\tsearch: {\n\t\t\ttype: String,\n\t\t},\n\t},\n\tsetup() {\n\t\tconst externalHooks = useExternalHooks();\n\n\t\tconst selectedJsonPath = ref(nonExistingJsonPath);\n\t\tconst draggingPath = ref<null | string>(null);\n\t\tconst displayMode = ref('json');\n\n\t\treturn {\n\t\t\texternalHooks,\n\t\t\tselectedJsonPath,\n\t\t\tdraggingPath,\n\t\t\tdisplayMode,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNDVStore, useWorkflowsStore),\n\t\tjsonData(): IDataObject[] {\n\t\t\treturn executionDataToJson(this.inputData);\n\t\t},\n\t\thighlight(): boolean {\n\t\t\treturn this.ndvStore.highlightDraggables;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetShortKey(el: HTMLElement): string {\n\t\t\tif (!el) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\treturn shorten(el.dataset.name || '', 16, 2);\n\t\t},\n\t\tgetJsonParameterPath(path: string): string {\n\t\t\tconst subPath = path.replace(/^(\\[\"?\\d\"?])/, ''); // remove item position\n\n\t\t\treturn getMappedExpression({\n\t\t\t\tnodeName: this.node.name,\n\t\t\t\tdistanceFromActive: this.distanceFromActive,\n\t\t\t\tpath: subPath,\n\t\t\t});\n\t\t},\n\t\tonDragStart(el: HTMLElement) {\n\t\t\tif (el?.dataset.path) {\n\t\t\t\tthis.draggingPath = el.dataset.path;\n\t\t\t}\n\n\t\t\tthis.ndvStore.resetMappingTelemetry();\n\t\t},\n\t\tonDragEnd(el: HTMLElement) {\n\t\t\tthis.draggingPath = null;\n\t\t\tconst mappingTelemetry = this.ndvStore.mappingTelemetry;\n\t\t\tconst telemetryPayload = {\n\t\t\t\tsrc_node_type: this.node.type,\n\t\t\t\tsrc_field_name: el.dataset.name || '',\n\t\t\t\tsrc_nodes_back: this.distanceFromActive,\n\t\t\t\tsrc_run_index: this.runIndex,\n\t\t\t\tsrc_runs_total: this.totalRuns,\n\t\t\t\tsrc_field_nest_level: el.dataset.depth || 0,\n\t\t\t\tsrc_view: 'json',\n\t\t\t\tsrc_element: el,\n\t\t\t\tsuccess: false,\n\t\t\t\t...mappingTelemetry,\n\t\t\t};\n\n\t\t\tsetTimeout(() => {\n\t\t\t\tvoid this.externalHooks.run('runDataJson.onDragEnd', telemetryPayload);\n\t\t\t\tthis.$telemetry.track('User dragged data for mapping', telemetryPayload, {\n\t\t\t\t\twithPostHog: true,\n\t\t\t\t});\n\t\t\t}, 1000); // ensure dest data gets set if drop\n\t\t},\n\t\tgetContent(value: unknown): string {\n\t\t\treturn isString(value) ? `\"${value}\"` : JSON.stringify(value);\n\t\t},\n\t\tgetListItemName(path: string): string {\n\t\t\treturn path.replace(/^(\\[\"?\\d\"?]\\.?)/g, '');\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.jsonDisplay {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding-left: var(--spacing-s);\n\tright: 0;\n\toverflow-y: auto;\n\tline-height: 1.5;\n\tword-break: normal;\n\theight: 100%;\n\tpadding-bottom: var(--spacing-3xl);\n\n\t&:hover {\n\t\t/* Shows .actionsGroup element from <run-data-json-actions /> child component */\n\t\t> div:first-child {\n\t\t\topacity: 1;\n\t\t}\n\t}\n\n\t.mappable {\n\t\tcursor: grab;\n\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-json-highlight);\n\t\t}\n\t}\n\n\t&.highlight .mappable,\n\t.dragged {\n\t\t&,\n\t\t&:hover {\n\t\t\tbackground-color: var(--color-primary-tint-2);\n\t\t\tcolor: var(--color-primary);\n\t\t}\n\t}\n}\n</style>\n\n<style lang=\"scss\">\n.vjs-tree {\n\tcolor: var(--color-json-default);\n}\n\n.vjs-tree-node {\n\t&:hover {\n\t\tbackground-color: transparent;\n\t}\n\n\t&.is-highlight {\n\t\tbackground-color: var(--color-json-highlight);\n\t}\n}\n\n.vjs-key,\n.vjs-value {\n\t> span {\n\t\tcolor: var(--color-text-dark);\n\t\tline-height: 1.7;\n\t\tborder-radius: var(--border-radius-base);\n\t}\n}\n\n.vjs-value {\n\t> span {\n\t\tpadding: 0 var(--spacing-5xs) 0 var(--spacing-5xs);\n\t\tmargin-left: var(--spacing-5xs);\n\t}\n}\n\n.vjs-tree .vjs-value-null {\n\t&,\n\tspan {\n\t\tcolor: var(--color-json-null);\n\t}\n}\n\n.vjs-tree .vjs-value-boolean {\n\t&,\n\tspan {\n\t\tcolor: var(--color-json-boolean);\n\t}\n}\n\n.vjs-tree .vjs-value-number {\n\t&,\n\tspan {\n\t\tcolor: var(--color-json-number);\n\t}\n}\n\n.vjs-tree .vjs-value-string {\n\t&,\n\tspan {\n\t\tcolor: var(--color-json-string);\n\t}\n}\n\n.vjs-tree .vjs-key {\n\tcolor: var(--color-json-key);\n}\n\n.vjs-tree .vjs-tree__brackets {\n\tcolor: var(--color-json-brackets);\n}\n\n.vjs-tree .vjs-tree__brackets:hover {\n\tcolor: var(--color-json-brackets-hover);\n}\n\n.vjs-tree .vjs-tree__content.has-line {\n\tborder-left: 1px dotted var(--color-json-line);\n}\n</style>\n"],"file":"assets/RunDataJson-Wjq8QCxZ.js"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{s as v,m as g}from"./pinia-hqNpa1CE.js";import{j as T}from"./jsonpath-zohyyC-J.js";import{ek as h,K as y,aj as S,ae as b,a6 as J,u as $,n as C,j as D,a4 as k,aK as j,aH as x,ep as P,w as N}from"./index-
|
|
2
|
-
//# sourceMappingURL=RunDataJsonActions-
|
|
1
|
+
import{s as v,m as g}from"./pinia-hqNpa1CE.js";import{j as T}from"./jsonpath-zohyyC-J.js";import{ek as h,K as y,aj as S,ae as b,a6 as J,u as $,n as C,j as D,a4 as k,aK as j,aH as x,ep as P,w as N}from"./index-6ulnOLCO.js";import{G as I,ag as l,l as d,m as R,M as f,O as r,R as m,S as u,T as p,p as V,I as O}from"./vendor-qzAIxxHa.js";import{_ as A}from"./n8n-roXSR3ff.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./@vueuse/core-3K2u_AzZ.js";import"./lodash-es-SWsik9tP.js";import"./@n8n/permissions-1O7vSg-k.js";import"./dateformat-ZLFwQ-J0.js";import"./vue-i18n-COIxmhgq.js";import"./uuid-McvpxQtQ.js";import"./luxon-ZRIU05qF.js";import"./@n8n/codemirror-lang-sql-PDL6jaEc.js";import"./@lezer/common-1hBQ1gIF.js";import"./prettier-XiNuC5bg.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-html-n8n-m8pcIqw_.js";import"./@n8n/codemirror-lang-uuamtW6H.js";import"./esprima-next-ulPLCZ1Z.js";import"./fast-json-stable-stringify-F21sPGMl.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-NS1qgWpD.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";const G=I({name:"RunDataJsonActions",props:{node:{type:Object,required:!0},paneType:{type:String},pushRef:{type:String},currentOutputIndex:{type:Number},runIndex:{type:Number},displayMode:{type:String},distanceFromActive:{type:Number},selectedJsonPath:{type:String,default:h},jsonData:{type:Array,required:!0}},setup(){const t=y(),e=N(),o=S(),s=b(),{activeNode:n}=v(t),a=J(n);return{i18n:e,nodeHelpers:o,clipboard:s,pinnedData:a,...$()}},computed:{...g(k,y,D,C),isReadOnlyRoute(){var t,e;return((e=(t=this.$route)==null?void 0:t.meta)==null?void 0:e.readOnlyCanvas)===!0},activeNode(){return this.ndvStore.activeNode},noSelection(){return this.selectedJsonPath===h},normalisedJsonPath(){return this.noSelection?'[""]':this.selectedJsonPath}},methods:{getJsonValue(){let t=T.query(this.jsonData,`$${this.normalisedJsonPath}`)[0];if(this.noSelection){const o=window!==window.parent&&window.parent.location.pathname.includes("/executions");this.pinnedData.hasData.value&&!o?t=j(this.pinnedData.data.value):t=x(this.nodeHelpers.getNodeInputData(this.node,this.runIndex,this.currentOutputIndex))}let e="";return typeof t=="object"?e=JSON.stringify(t,null,2):e=t.toString(),e},getJsonItemPath(){const t=P(this.normalisedJsonPath);let e="",o="";const s=t.split("]"),n=s[0].slice(1);return o=s.slice(1).join("]"),e=`$item(${n}).$node["${this.node.name}"].json`,{path:o,startPath:e}},getJsonParameterPath(){const e=P(this.normalisedJsonPath).split("]").slice(1).join("]");let o=`$node["${this.node.name}"].json`;return this.distanceFromActive===1&&(o="$json"),{path:e,startPath:o}},handleCopyClick(t){var s;let e;if(t.command==="value")e=this.getJsonValue(),this.showToast({title:this.i18n.baseText("runData.copyValue.toast"),message:"",type:"success",duration:2e3});else{let n="",a="";if(t.command==="itemPath"){const i=this.getJsonItemPath();n=i.startPath,a=i.path,this.showToast({title:this.i18n.baseText("runData.copyItemPath.toast"),message:"",type:"success",duration:2e3})}else if(t.command==="parameterPath"){const i=this.getJsonParameterPath();n=i.startPath,a=i.path,this.showToast({title:this.i18n.baseText("runData.copyParameterPath.toast"),message:"",type:"success",duration:2e3})}!a.startsWith("[")&&!a.startsWith(".")&&a&&(a+="."),e=`{{ ${n+a} }}`}const o={value:"selection",itemPath:"item_path",parameterPath:"parameter_path"}[t.command];this.$telemetry.track("User copied ndv data",{node_type:(s=this.activeNode)==null?void 0:s.type,push_ref:this.pushRef,run_index:this.runIndex,view:"json",copy_type:o,workflow_id:this.workflowsStore.workflowId,pane:this.paneType,in_execution_log:this.isReadOnlyRoute}),this.clipboard.copy(e)}}}),B="_actionsGroup_wlnwy_1",H={actionsGroup:B},M={class:"el-dropdown-link"};function q(t,e,o,s,n,a){const i=l("n8n-icon-button"),c=l("el-dropdown-item"),_=l("el-dropdown-menu"),w=l("el-dropdown");return d(),R("div",{class:O(t.$style.actionsGroup)},[t.noSelection?(d(),f(i,{key:0,title:t.i18n.baseText("runData.copyToClipboard"),icon:"copy",type:"tertiary",circle:!1,onClick:e[0]||(e[0]=F=>t.handleCopyClick({command:"value"}))},null,8,["title"])):(d(),f(w,{key:1,trigger:"click",onCommand:t.handleCopyClick},{dropdown:r(()=>[p(_,null,{default:r(()=>[p(c,{command:{command:"value"}},{default:r(()=>[u(m(t.i18n.baseText("runData.copyValue")),1)]),_:1}),p(c,{command:{command:"itemPath"},divided:""},{default:r(()=>[u(m(t.i18n.baseText("runData.copyItemPath")),1)]),_:1}),p(c,{command:{command:"parameterPath"}},{default:r(()=>[u(m(t.i18n.baseText("runData.copyParameterPath")),1)]),_:1})]),_:1})]),default:r(()=>[V("span",M,[p(i,{title:t.i18n.baseText("runData.copyToClipboard"),icon:"copy",type:"tertiary",circle:!1},null,8,["title"])])]),_:1},8,["onCommand"]))],2)}const E={$style:H},gt=A(G,[["render",q],["__cssModules",E]]);export{gt as default};
|
|
2
|
+
//# sourceMappingURL=RunDataJsonActions-s5miC4iz.js.map
|
package/dist/assets/{RunDataJsonActions-Zjaa2Qdn.js.map → RunDataJsonActions-s5miC4iz.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunDataJsonActions-Zjaa2Qdn.js","sources":["../../src/components/RunDataJsonActions.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.actionsGroup\">\n\t\t<n8n-icon-button\n\t\t\tv-if=\"noSelection\"\n\t\t\t:title=\"i18n.baseText('runData.copyToClipboard')\"\n\t\t\ticon=\"copy\"\n\t\t\ttype=\"tertiary\"\n\t\t\t:circle=\"false\"\n\t\t\t@click=\"handleCopyClick({ command: 'value' })\"\n\t\t/>\n\t\t<el-dropdown v-else trigger=\"click\" @command=\"handleCopyClick\">\n\t\t\t<span class=\"el-dropdown-link\">\n\t\t\t\t<n8n-icon-button\n\t\t\t\t\t:title=\"i18n.baseText('runData.copyToClipboard')\"\n\t\t\t\t\ticon=\"copy\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t:circle=\"false\"\n\t\t\t\t/>\n\t\t\t</span>\n\t\t\t<template #dropdown>\n\t\t\t\t<el-dropdown-menu>\n\t\t\t\t\t<el-dropdown-item :command=\"{ command: 'value' }\">\n\t\t\t\t\t\t{{ i18n.baseText('runData.copyValue') }}\n\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t\t<el-dropdown-item :command=\"{ command: 'itemPath' }\" divided>\n\t\t\t\t\t\t{{ i18n.baseText('runData.copyItemPath') }}\n\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t\t<el-dropdown-item :command=\"{ command: 'parameterPath' }\">\n\t\t\t\t\t\t{{ i18n.baseText('runData.copyParameterPath') }}\n\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t</el-dropdown-menu>\n\t\t\t</template>\n\t\t</el-dropdown>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport type { PropType } from 'vue';\nimport { mapStores, storeToRefs } from 'pinia';\nimport jp from 'jsonpath';\nimport type { INodeUi } from '@/Interface';\nimport type { IDataObject } from 'n8n-workflow';\nimport { clearJsonKey, convertPath } from '@/utils/typesUtils';\nimport { executionDataToJson } from '@/utils/nodeTypesUtils';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\nimport { useToast } from '@/composables/useToast';\nimport { useI18n } from '@/composables/useI18n';\nimport { nonExistingJsonPath } from '@/constants';\nimport { useClipboard } from '@/composables/useClipboard';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useSourceControlStore } from '@/stores/sourceControl.store';\nimport { usePinnedData } from '@/composables/usePinnedData';\n\ntype JsonPathData = {\n\tpath: string;\n\tstartPath: string;\n};\n\nexport default defineComponent({\n\tname: 'RunDataJsonActions',\n\tprops: {\n\t\tnode: {\n\t\t\ttype: Object as PropType<INodeUi>,\n\t\t\trequired: true,\n\t\t},\n\t\tpaneType: {\n\t\t\ttype: String,\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t},\n\t\tcurrentOutputIndex: {\n\t\t\ttype: Number,\n\t\t},\n\t\trunIndex: {\n\t\t\ttype: Number,\n\t\t},\n\t\tdisplayMode: {\n\t\t\ttype: String,\n\t\t},\n\t\tdistanceFromActive: {\n\t\t\ttype: Number,\n\t\t},\n\t\tselectedJsonPath: {\n\t\t\ttype: String,\n\t\t\tdefault: nonExistingJsonPath,\n\t\t},\n\t\tjsonData: {\n\t\t\ttype: Array as PropType<IDataObject[]>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup() {\n\t\tconst ndvStore = useNDVStore();\n\t\tconst i18n = useI18n();\n\t\tconst nodeHelpers = useNodeHelpers();\n\t\tconst clipboard = useClipboard();\n\t\tconst { activeNode } = storeToRefs(ndvStore);\n\t\tconst pinnedData = usePinnedData(activeNode);\n\n\t\treturn {\n\t\t\ti18n,\n\t\t\tnodeHelpers,\n\t\t\tclipboard,\n\t\t\tpinnedData,\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNodeTypesStore, useNDVStore, useWorkflowsStore, useSourceControlStore),\n\t\tisReadOnlyRoute() {\n\t\t\treturn this.$route?.meta?.readOnlyCanvas === true;\n\t\t},\n\t\tactiveNode(): INodeUi | null {\n\t\t\treturn this.ndvStore.activeNode;\n\t\t},\n\t\tnoSelection() {\n\t\t\treturn this.selectedJsonPath === nonExistingJsonPath;\n\t\t},\n\t\tnormalisedJsonPath(): string {\n\t\t\treturn this.noSelection ? '[\"\"]' : this.selectedJsonPath;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetJsonValue(): string {\n\t\t\tlet selectedValue = jp.query(this.jsonData, `$${this.normalisedJsonPath}`)[0];\n\t\t\tif (this.noSelection) {\n\t\t\t\tconst inExecutionsFrame =\n\t\t\t\t\twindow !== window.parent && window.parent.location.pathname.includes('/executions');\n\n\t\t\t\tif (this.pinnedData.hasData.value && !inExecutionsFrame) {\n\t\t\t\t\tselectedValue = clearJsonKey(this.pinnedData.data.value as object);\n\t\t\t\t} else {\n\t\t\t\t\tselectedValue = executionDataToJson(\n\t\t\t\t\t\tthis.nodeHelpers.getNodeInputData(this.node, this.runIndex, this.currentOutputIndex),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet value = '';\n\t\t\tif (typeof selectedValue === 'object') {\n\t\t\t\tvalue = JSON.stringify(selectedValue, null, 2);\n\t\t\t} else {\n\t\t\t\tvalue = selectedValue.toString();\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tgetJsonItemPath(): JsonPathData {\n\t\t\tconst newPath = convertPath(this.normalisedJsonPath);\n\t\t\tlet startPath = '';\n\t\t\tlet path = '';\n\n\t\t\tconst pathParts = newPath.split(']');\n\t\t\tconst index = pathParts[0].slice(1);\n\t\t\tpath = pathParts.slice(1).join(']');\n\t\t\tstartPath = `$item(${index}).$node[\"${this.node.name}\"].json`;\n\n\t\t\treturn { path, startPath };\n\t\t},\n\t\tgetJsonParameterPath(): JsonPathData {\n\t\t\tconst newPath = convertPath(this.normalisedJsonPath);\n\t\t\tconst path = newPath.split(']').slice(1).join(']');\n\t\t\tlet startPath = `$node[\"${this.node.name}\"].json`;\n\n\t\t\tif (this.distanceFromActive === 1) {\n\t\t\t\tstartPath = '$json';\n\t\t\t}\n\n\t\t\treturn { path, startPath };\n\t\t},\n\t\thandleCopyClick(commandData: { command: string }) {\n\t\t\tlet value: string;\n\t\t\tif (commandData.command === 'value') {\n\t\t\t\tvalue = this.getJsonValue();\n\n\t\t\t\tthis.showToast({\n\t\t\t\t\ttitle: this.i18n.baseText('runData.copyValue.toast'),\n\t\t\t\t\tmessage: '',\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\tduration: 2000,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tlet startPath = '';\n\t\t\t\tlet path = '';\n\t\t\t\tif (commandData.command === 'itemPath') {\n\t\t\t\t\tconst jsonItemPath = this.getJsonItemPath();\n\t\t\t\t\tstartPath = jsonItemPath.startPath;\n\t\t\t\t\tpath = jsonItemPath.path;\n\n\t\t\t\t\tthis.showToast({\n\t\t\t\t\t\ttitle: this.i18n.baseText('runData.copyItemPath.toast'),\n\t\t\t\t\t\tmessage: '',\n\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\tduration: 2000,\n\t\t\t\t\t});\n\t\t\t\t} else if (commandData.command === 'parameterPath') {\n\t\t\t\t\tconst jsonParameterPath = this.getJsonParameterPath();\n\t\t\t\t\tstartPath = jsonParameterPath.startPath;\n\t\t\t\t\tpath = jsonParameterPath.path;\n\n\t\t\t\t\tthis.showToast({\n\t\t\t\t\t\ttitle: this.i18n.baseText('runData.copyParameterPath.toast'),\n\t\t\t\t\t\tmessage: '',\n\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\tduration: 2000,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (!path.startsWith('[') && !path.startsWith('.') && path) {\n\t\t\t\t\tpath += '.';\n\t\t\t\t}\n\t\t\t\tvalue = `{{ ${startPath + path} }}`;\n\t\t\t}\n\n\t\t\tconst copyType = {\n\t\t\t\tvalue: 'selection',\n\t\t\t\titemPath: 'item_path',\n\t\t\t\tparameterPath: 'parameter_path',\n\t\t\t}[commandData.command];\n\n\t\t\tthis.$telemetry.track('User copied ndv data', {\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\trun_index: this.runIndex,\n\t\t\t\tview: 'json',\n\t\t\t\tcopy_type: copyType,\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpane: this.paneType,\n\t\t\t\tin_execution_log: this.isReadOnlyRoute,\n\t\t\t});\n\n\t\t\tvoid this.clipboard.copy(value);\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.actionsGroup {\n\tposition: sticky;\n\theight: 0;\n\toverflow: visible;\n\tz-index: 10;\n\ttop: 0;\n\tpadding-right: var(--spacing-s);\n\topacity: 0;\n\ttransition: opacity 0.3s ease;\n\ttext-align: right;\n}\n</style>\n"],"names":["_sfc_main","defineComponent","nonExistingJsonPath","ndvStore","useNDVStore","i18n","useI18n","nodeHelpers","useNodeHelpers","clipboard","useClipboard","activeNode","storeToRefs","pinnedData","usePinnedData","useToast","mapStores","useNodeTypesStore","useWorkflowsStore","useSourceControlStore","_b","_a","selectedValue","jp","inExecutionsFrame","clearJsonKey","executionDataToJson","value","newPath","convertPath","startPath","path","pathParts","index","commandData","jsonItemPath","jsonParameterPath","copyType","_resolveComponent","noSelection","_ctx","_openBlock","_createBlock","_component_n8n_icon_button","_cache","$event","_component_el_dropdown","_withCtx","_createVNode","_component_el_dropdown_menu","_component_el_dropdown_item","_createTextVNode","_toDisplayString","_createElementVNode","_hoisted_1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RunDataJsonActions-s5miC4iz.js","sources":["../../src/components/RunDataJsonActions.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.actionsGroup\">\n\t\t<n8n-icon-button\n\t\t\tv-if=\"noSelection\"\n\t\t\t:title=\"i18n.baseText('runData.copyToClipboard')\"\n\t\t\ticon=\"copy\"\n\t\t\ttype=\"tertiary\"\n\t\t\t:circle=\"false\"\n\t\t\t@click=\"handleCopyClick({ command: 'value' })\"\n\t\t/>\n\t\t<el-dropdown v-else trigger=\"click\" @command=\"handleCopyClick\">\n\t\t\t<span class=\"el-dropdown-link\">\n\t\t\t\t<n8n-icon-button\n\t\t\t\t\t:title=\"i18n.baseText('runData.copyToClipboard')\"\n\t\t\t\t\ticon=\"copy\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t:circle=\"false\"\n\t\t\t\t/>\n\t\t\t</span>\n\t\t\t<template #dropdown>\n\t\t\t\t<el-dropdown-menu>\n\t\t\t\t\t<el-dropdown-item :command=\"{ command: 'value' }\">\n\t\t\t\t\t\t{{ i18n.baseText('runData.copyValue') }}\n\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t\t<el-dropdown-item :command=\"{ command: 'itemPath' }\" divided>\n\t\t\t\t\t\t{{ i18n.baseText('runData.copyItemPath') }}\n\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t\t<el-dropdown-item :command=\"{ command: 'parameterPath' }\">\n\t\t\t\t\t\t{{ i18n.baseText('runData.copyParameterPath') }}\n\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t</el-dropdown-menu>\n\t\t\t</template>\n\t\t</el-dropdown>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport type { PropType } from 'vue';\nimport { mapStores, storeToRefs } from 'pinia';\nimport jp from 'jsonpath';\nimport type { INodeUi } from '@/Interface';\nimport type { IDataObject } from 'n8n-workflow';\nimport { clearJsonKey, convertPath } from '@/utils/typesUtils';\nimport { executionDataToJson } from '@/utils/nodeTypesUtils';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\nimport { useToast } from '@/composables/useToast';\nimport { useI18n } from '@/composables/useI18n';\nimport { nonExistingJsonPath } from '@/constants';\nimport { useClipboard } from '@/composables/useClipboard';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useSourceControlStore } from '@/stores/sourceControl.store';\nimport { usePinnedData } from '@/composables/usePinnedData';\n\ntype JsonPathData = {\n\tpath: string;\n\tstartPath: string;\n};\n\nexport default defineComponent({\n\tname: 'RunDataJsonActions',\n\tprops: {\n\t\tnode: {\n\t\t\ttype: Object as PropType<INodeUi>,\n\t\t\trequired: true,\n\t\t},\n\t\tpaneType: {\n\t\t\ttype: String,\n\t\t},\n\t\tpushRef: {\n\t\t\ttype: String,\n\t\t},\n\t\tcurrentOutputIndex: {\n\t\t\ttype: Number,\n\t\t},\n\t\trunIndex: {\n\t\t\ttype: Number,\n\t\t},\n\t\tdisplayMode: {\n\t\t\ttype: String,\n\t\t},\n\t\tdistanceFromActive: {\n\t\t\ttype: Number,\n\t\t},\n\t\tselectedJsonPath: {\n\t\t\ttype: String,\n\t\t\tdefault: nonExistingJsonPath,\n\t\t},\n\t\tjsonData: {\n\t\t\ttype: Array as PropType<IDataObject[]>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup() {\n\t\tconst ndvStore = useNDVStore();\n\t\tconst i18n = useI18n();\n\t\tconst nodeHelpers = useNodeHelpers();\n\t\tconst clipboard = useClipboard();\n\t\tconst { activeNode } = storeToRefs(ndvStore);\n\t\tconst pinnedData = usePinnedData(activeNode);\n\n\t\treturn {\n\t\t\ti18n,\n\t\t\tnodeHelpers,\n\t\t\tclipboard,\n\t\t\tpinnedData,\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useNodeTypesStore, useNDVStore, useWorkflowsStore, useSourceControlStore),\n\t\tisReadOnlyRoute() {\n\t\t\treturn this.$route?.meta?.readOnlyCanvas === true;\n\t\t},\n\t\tactiveNode(): INodeUi | null {\n\t\t\treturn this.ndvStore.activeNode;\n\t\t},\n\t\tnoSelection() {\n\t\t\treturn this.selectedJsonPath === nonExistingJsonPath;\n\t\t},\n\t\tnormalisedJsonPath(): string {\n\t\t\treturn this.noSelection ? '[\"\"]' : this.selectedJsonPath;\n\t\t},\n\t},\n\tmethods: {\n\t\tgetJsonValue(): string {\n\t\t\tlet selectedValue = jp.query(this.jsonData, `$${this.normalisedJsonPath}`)[0];\n\t\t\tif (this.noSelection) {\n\t\t\t\tconst inExecutionsFrame =\n\t\t\t\t\twindow !== window.parent && window.parent.location.pathname.includes('/executions');\n\n\t\t\t\tif (this.pinnedData.hasData.value && !inExecutionsFrame) {\n\t\t\t\t\tselectedValue = clearJsonKey(this.pinnedData.data.value as object);\n\t\t\t\t} else {\n\t\t\t\t\tselectedValue = executionDataToJson(\n\t\t\t\t\t\tthis.nodeHelpers.getNodeInputData(this.node, this.runIndex, this.currentOutputIndex),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet value = '';\n\t\t\tif (typeof selectedValue === 'object') {\n\t\t\t\tvalue = JSON.stringify(selectedValue, null, 2);\n\t\t\t} else {\n\t\t\t\tvalue = selectedValue.toString();\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\t\tgetJsonItemPath(): JsonPathData {\n\t\t\tconst newPath = convertPath(this.normalisedJsonPath);\n\t\t\tlet startPath = '';\n\t\t\tlet path = '';\n\n\t\t\tconst pathParts = newPath.split(']');\n\t\t\tconst index = pathParts[0].slice(1);\n\t\t\tpath = pathParts.slice(1).join(']');\n\t\t\tstartPath = `$item(${index}).$node[\"${this.node.name}\"].json`;\n\n\t\t\treturn { path, startPath };\n\t\t},\n\t\tgetJsonParameterPath(): JsonPathData {\n\t\t\tconst newPath = convertPath(this.normalisedJsonPath);\n\t\t\tconst path = newPath.split(']').slice(1).join(']');\n\t\t\tlet startPath = `$node[\"${this.node.name}\"].json`;\n\n\t\t\tif (this.distanceFromActive === 1) {\n\t\t\t\tstartPath = '$json';\n\t\t\t}\n\n\t\t\treturn { path, startPath };\n\t\t},\n\t\thandleCopyClick(commandData: { command: string }) {\n\t\t\tlet value: string;\n\t\t\tif (commandData.command === 'value') {\n\t\t\t\tvalue = this.getJsonValue();\n\n\t\t\t\tthis.showToast({\n\t\t\t\t\ttitle: this.i18n.baseText('runData.copyValue.toast'),\n\t\t\t\t\tmessage: '',\n\t\t\t\t\ttype: 'success',\n\t\t\t\t\tduration: 2000,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tlet startPath = '';\n\t\t\t\tlet path = '';\n\t\t\t\tif (commandData.command === 'itemPath') {\n\t\t\t\t\tconst jsonItemPath = this.getJsonItemPath();\n\t\t\t\t\tstartPath = jsonItemPath.startPath;\n\t\t\t\t\tpath = jsonItemPath.path;\n\n\t\t\t\t\tthis.showToast({\n\t\t\t\t\t\ttitle: this.i18n.baseText('runData.copyItemPath.toast'),\n\t\t\t\t\t\tmessage: '',\n\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\tduration: 2000,\n\t\t\t\t\t});\n\t\t\t\t} else if (commandData.command === 'parameterPath') {\n\t\t\t\t\tconst jsonParameterPath = this.getJsonParameterPath();\n\t\t\t\t\tstartPath = jsonParameterPath.startPath;\n\t\t\t\t\tpath = jsonParameterPath.path;\n\n\t\t\t\t\tthis.showToast({\n\t\t\t\t\t\ttitle: this.i18n.baseText('runData.copyParameterPath.toast'),\n\t\t\t\t\t\tmessage: '',\n\t\t\t\t\t\ttype: 'success',\n\t\t\t\t\t\tduration: 2000,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (!path.startsWith('[') && !path.startsWith('.') && path) {\n\t\t\t\t\tpath += '.';\n\t\t\t\t}\n\t\t\t\tvalue = `{{ ${startPath + path} }}`;\n\t\t\t}\n\n\t\t\tconst copyType = {\n\t\t\t\tvalue: 'selection',\n\t\t\t\titemPath: 'item_path',\n\t\t\t\tparameterPath: 'parameter_path',\n\t\t\t}[commandData.command];\n\n\t\t\tthis.$telemetry.track('User copied ndv data', {\n\t\t\t\tnode_type: this.activeNode?.type,\n\t\t\t\tpush_ref: this.pushRef,\n\t\t\t\trun_index: this.runIndex,\n\t\t\t\tview: 'json',\n\t\t\t\tcopy_type: copyType,\n\t\t\t\tworkflow_id: this.workflowsStore.workflowId,\n\t\t\t\tpane: this.paneType,\n\t\t\t\tin_execution_log: this.isReadOnlyRoute,\n\t\t\t});\n\n\t\t\tvoid this.clipboard.copy(value);\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.actionsGroup {\n\tposition: sticky;\n\theight: 0;\n\toverflow: visible;\n\tz-index: 10;\n\ttop: 0;\n\tpadding-right: var(--spacing-s);\n\topacity: 0;\n\ttransition: opacity 0.3s ease;\n\ttext-align: right;\n}\n</style>\n"],"names":["_sfc_main","defineComponent","nonExistingJsonPath","ndvStore","useNDVStore","i18n","useI18n","nodeHelpers","useNodeHelpers","clipboard","useClipboard","activeNode","storeToRefs","pinnedData","usePinnedData","useToast","mapStores","useNodeTypesStore","useWorkflowsStore","useSourceControlStore","_b","_a","selectedValue","jp","inExecutionsFrame","clearJsonKey","executionDataToJson","value","newPath","convertPath","startPath","path","pathParts","index","commandData","jsonItemPath","jsonParameterPath","copyType","_resolveComponent","noSelection","_ctx","_openBlock","_createBlock","_component_n8n_icon_button","_cache","$event","_component_el_dropdown","_withCtx","_createVNode","_component_el_dropdown_menu","_component_el_dropdown_item","_createTextVNode","_toDisplayString","_createElementVNode","_hoisted_1"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{s as B,ej as R,el as V,K as C,aF as j,N as K,d1 as W,a3 as z,dM as H}from"./index-
|
|
2
|
-
//# sourceMappingURL=RunDataSchema-
|
|
1
|
+
import{s as B,ej as R,el as V,K as C,aF as j,N as K,d1 as W,a3 as z,dM as H}from"./index-6ulnOLCO.js";import{_ as F,M as J}from"./TextWithHighlights.vue_vue_type_script_setup_true_lang-5UrwIRz-.js";import{G as M,e as n,ag as A,l as s,m as l,I as o,p as I,T as S,M as u,Q as p,R as P,F as L,a7 as q,J as G,r as O,O as D,u as Q,S as U}from"./vendor-qzAIxxHa.js";import{_ as w}from"./n8n-roXSR3ff.js";import{D as X}from"./NodeView-qN4Zuw87.js";import"./pinia-hqNpa1CE.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./@vueuse/core-3K2u_AzZ.js";import"./lodash-es-SWsik9tP.js";import"./@n8n/permissions-1O7vSg-k.js";import"./dateformat-ZLFwQ-J0.js";import"./vue-i18n-COIxmhgq.js";import"./uuid-McvpxQtQ.js";import"./luxon-ZRIU05qF.js";import"./@n8n/codemirror-lang-sql-PDL6jaEc.js";import"./@lezer/common-1hBQ1gIF.js";import"./prettier-XiNuC5bg.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-html-n8n-m8pcIqw_.js";import"./@n8n/codemirror-lang-uuamtW6H.js";import"./esprima-next-ulPLCZ1Z.js";import"./fast-json-stable-stringify-F21sPGMl.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-NS1qgWpD.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";import"./useExecutionDebugging-QUE85fFt.js";import"./file-saver-A99yC7RV.js";import"./vue-json-pretty-nL1cuhMr.js";import"./dateFormatter-cvdD716J.js";import"./RunDataAi-sZalPI5G.js";import"./useWorkflowActivate-rx_C76SX.js";import"./collaboration.store-aa4nebcL.js";const Y=["title"],Z=["data-value","data-name","data-path","data-depth"],x=["id"],ee=["for"],ae=M({__name:"RunDataSchemaItem",props:{schema:{},level:{},parent:{},subKey:{},paneType:{},mappingEnabled:{type:Boolean},draggingPath:{},distanceFromActive:{},node:{},search:{}},setup(v){const a=v,r=n(()=>Array.isArray(a.schema.value)),d=n(()=>r.value?a.schema.value:[]),i=n(()=>{var e;return((e=a.parent)==null?void 0:e.type)==="array"}),h=n(()=>a.level===0&&Array.isArray(a.schema.value)&&a.schema.value.every(e=>!Array.isArray(e.value))),y=n(()=>i.value?`[${a.schema.key}]`:a.schema.key),_=n(()=>i.value?`${a.schema.type}[${a.schema.key}]`:a.schema.key),g=n(()=>Array.isArray(a.schema.value)?"":B(a.schema.value,600,0)),b=n(()=>a.draggingPath===a.schema.path),t=e=>R({nodeName:a.node.name,distanceFromActive:a.distanceFromActive,path:e}),c=e=>`${e*.033}s`,m=e=>{switch(e){case"object":return"cube";case"array":return"list";case"string":case"null":return"font";case"number":return"hashtag";case"boolean":return"check-square";case"function":return"code";case"bigint":return"calculator";case"symbol":return"sun";case"undefined":return"ban";default:return V(e),""}};return(e,f)=>{var T;const E=A("font-awesome-icon"),N=A("run-data-schema-item",!0);return s(),l("div",{class:o(e.$style.item),"data-test-id":"run-data-schema-item"},[e.level>0||e.level===0&&!r.value?(s(),l("div",{key:0,title:e.schema.type,class:o({[e.$style.pill]:!0,[e.$style.mappable]:e.mappingEnabled,[e.$style.highlight]:b.value})},[I("span",{class:o(e.$style.label),"data-value":t(e.schema.path),"data-name":_.value,"data-path":e.schema.path,"data-depth":e.level,"data-target":"mappable"},[S(E,{icon:m(e.schema.type),size:"sm"},null,8,["icon"]),i.value?(s(),u(F,{key:0,content:(T=a.parent)==null?void 0:T.key,search:a.search},null,8,["content","search"])):p("",!0),y.value?(s(),u(F,{key:1,class:o({[e.$style.arrayIndex]:i.value}),content:y.value,search:a.search},null,8,["class","content","search"])):p("",!0)],10,Z)],10,Y)):p("",!0),g.value?(s(),l("span",{key:1,class:o(e.$style.text)},P(g.value),3)):p("",!0),e.level>0&&r.value?(s(),l("input",{key:2,id:e.subKey,type:"checkbox",checked:""},null,8,x)):p("",!0),e.level>0&&r.value?(s(),l("label",{key:3,class:o(e.$style.toggle),for:e.subKey},[S(E,{icon:"angle-up"})],10,ee)):p("",!0),r.value?(s(),l("div",{key:4,class:o({[e.$style.sub]:!0,[e.$style.flat]:h.value})},[(s(!0),l(L,null,q(d.value,(k,$)=>(s(),u(N,{key:`${k.type}-${e.level}-${$}`,schema:k,level:e.level+1,parent:e.schema,"pane-type":e.paneType,"sub-key":`${e.paneType}_${k.type}-${e.level}-${$}`,"mapping-enabled":e.mappingEnabled,"dragging-path":e.draggingPath,"distance-from-active":e.distanceFromActive,node:e.node,style:G({transitionDelay:c($)}),search:e.search},null,8,["schema","level","parent","pane-type","sub-key","mapping-enabled","dragging-path","distance-from-active","node","style","search"]))),128))],2)):p("",!0)],2)}}}),te="_item_x3781_1",se="_sub_x3781_14",ne="_toggle_x3781_20",re="_flat_x3781_41",oe="_pill_x3781_51",le="_mappable_x3781_51",pe="_label_x3781_90",ce="_arrayIndex_x3781_95",ie="_text_x3781_101",me={item:te,sub:se,toggle:ne,flat:re,pill:oe,mappable:le,label:pe,arrayIndex:ce,text:ie},ue={$style:me},de=w(ae,[["__cssModules",ue]]),he=M({__name:"RunDataSchema",props:{data:{},mappingEnabled:{type:Boolean},distanceFromActive:{default:0},runIndex:{},totalRuns:{},paneType:{},node:{},search:{}},setup(v){const a=v,r=O(""),d=C(),{getSchemaForExecutionData:i}=W(),h=n(()=>i(a.data)),y=n(()=>j(a.data)),_=n(()=>d.highlightDraggables),g=t=>{var c;(c=t==null?void 0:t.dataset)!=null&&c.path&&(r.value=t.dataset.path),d.resetMappingTelemetry()},b=t=>{r.value="",setTimeout(()=>{var e;const c=d.mappingTelemetry,m={src_node_type:(e=a.node)==null?void 0:e.type,src_field_name:t.dataset.name||"",src_nodes_back:a.distanceFromActive,src_run_index:a.runIndex,src_runs_total:a.totalRuns,src_field_nest_level:t.dataset.depth||0,src_view:"schema",src_element:t,success:!1,...c};z().run("runDataJson.onDragEnd",m),H.track("User dragged data for mapping",m,{withPostHog:!0})},1e3)};return(t,c)=>{const m=A("n8n-info-tip");return s(),l("div",{class:o([t.$style.schemaWrapper,{highlightSchema:_.value}])},[y.value?(s(),u(m,{key:0},{default:D(()=>[U(P(Q(K).baseText("dataMapping.schemaView.emptyData")),1)]),_:1})):(s(),u(X,{key:1,type:"mapping","target-data-key":"mappable",disabled:!t.mappingEnabled,onDragstart:g,onDragend:b},{preview:D(({canDrop:e,el:f})=>[f?(s(),u(J,{key:0,html:f.outerHTML,"can-drop":e},null,8,["html","can-drop"])):p("",!0)]),default:D(()=>[I("div",{class:o(t.$style.schema)},[S(de,{schema:h.value,level:0,parent:null,"pane-type":t.paneType,"sub-key":`${h.value.type}-0-0`,"mapping-enabled":t.mappingEnabled,"dragging-path":r.value,"distance-from-active":t.distanceFromActive,node:t.node,search:t.search},null,8,["schema","pane-type","sub-key","mapping-enabled","dragging-path","distance-from-active","node","search"])],2)]),_:1},8,["disabled"]))],2)}}}),ye="_schemaWrapper_3g73j_1",ge="_schema_3g73j_1",ve={schemaWrapper:ye,schema:ge},_e={$style:ve},sa=w(he,[["__cssModules",_e]]);export{sa as default};
|
|
2
|
+
//# sourceMappingURL=RunDataSchema-s4wg-kE7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunDataSchema-iNj_tX9n.js","sources":["../../src/components/RunDataSchemaItem.vue","../../src/components/RunDataSchema.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { INodeUi, Schema } from '@/Interface';\nimport { checkExhaustive } from '@/utils/typeGuards';\nimport { shorten } from '@/utils/typesUtils';\nimport { getMappedExpression } from '@/utils/mappingUtils';\nimport TextWithHighlights from './TextWithHighlights.vue';\n\ntype Props = {\n\tschema: Schema;\n\tlevel: number;\n\tparent: Schema | null;\n\tsubKey: string;\n\tpaneType: 'input' | 'output';\n\tmappingEnabled: boolean;\n\tdraggingPath: string;\n\tdistanceFromActive: number;\n\tnode: INodeUi | null;\n\tsearch: string;\n};\n\nconst props = defineProps<Props>();\n\nconst isSchemaValueArray = computed(() => Array.isArray(props.schema.value));\nconst schemaArray = computed(\n\t() => (isSchemaValueArray.value ? props.schema.value : []) as Schema[],\n);\nconst isSchemaParentTypeArray = computed(() => props.parent?.type === 'array');\nconst isFlat = computed(\n\t() =>\n\t\tprops.level === 0 &&\n\t\tArray.isArray(props.schema.value) &&\n\t\tprops.schema.value.every((v) => !Array.isArray(v.value)),\n);\nconst key = computed((): string | undefined => {\n\treturn isSchemaParentTypeArray.value ? `[${props.schema.key}]` : props.schema.key;\n});\nconst schemaName = computed(() =>\n\tisSchemaParentTypeArray.value ? `${props.schema.type}[${props.schema.key}]` : props.schema.key,\n);\nconst text = computed(() =>\n\tArray.isArray(props.schema.value) ? '' : shorten(props.schema.value, 600, 0),\n);\n\nconst dragged = computed(() => props.draggingPath === props.schema.path);\n\nconst getJsonParameterPath = (path: string): string =>\n\tgetMappedExpression({\n\t\tnodeName: props.node!.name,\n\t\tdistanceFromActive: props.distanceFromActive,\n\t\tpath,\n\t});\n\nconst transitionDelay = (i: number) => `${i * 0.033}s`;\n\nconst getIconBySchemaType = (type: Schema['type']): string => {\n\tswitch (type) {\n\t\tcase 'object':\n\t\t\treturn 'cube';\n\t\tcase 'array':\n\t\t\treturn 'list';\n\t\tcase 'string':\n\t\tcase 'null':\n\t\t\treturn 'font';\n\t\tcase 'number':\n\t\t\treturn 'hashtag';\n\t\tcase 'boolean':\n\t\t\treturn 'check-square';\n\t\tcase 'function':\n\t\t\treturn 'code';\n\t\tcase 'bigint':\n\t\t\treturn 'calculator';\n\t\tcase 'symbol':\n\t\t\treturn 'sun';\n\t\tcase 'undefined':\n\t\t\treturn 'ban';\n\t\tdefault:\n\t\t\tcheckExhaustive(type);\n\t\t\treturn '';\n\t}\n};\n</script>\n\n<template>\n\t<div :class=\"$style.item\" data-test-id=\"run-data-schema-item\">\n\t\t<div\n\t\t\tv-if=\"level > 0 || (level === 0 && !isSchemaValueArray)\"\n\t\t\t:title=\"schema.type\"\n\t\t\t:class=\"{\n\t\t\t\t[$style.pill]: true,\n\t\t\t\t[$style.mappable]: mappingEnabled,\n\t\t\t\t[$style.highlight]: dragged,\n\t\t\t}\"\n\t\t>\n\t\t\t<span\n\t\t\t\t:class=\"$style.label\"\n\t\t\t\t:data-value=\"getJsonParameterPath(schema.path)\"\n\t\t\t\t:data-name=\"schemaName\"\n\t\t\t\t:data-path=\"schema.path\"\n\t\t\t\t:data-depth=\"level\"\n\t\t\t\tdata-target=\"mappable\"\n\t\t\t>\n\t\t\t\t<font-awesome-icon :icon=\"getIconBySchemaType(schema.type)\" size=\"sm\" />\n\t\t\t\t<TextWithHighlights\n\t\t\t\t\tv-if=\"isSchemaParentTypeArray\"\n\t\t\t\t\t:content=\"props.parent?.key\"\n\t\t\t\t\t:search=\"props.search\"\n\t\t\t\t/>\n\t\t\t\t<TextWithHighlights\n\t\t\t\t\tv-if=\"key\"\n\t\t\t\t\t:class=\"{ [$style.arrayIndex]: isSchemaParentTypeArray }\"\n\t\t\t\t\t:content=\"key\"\n\t\t\t\t\t:search=\"props.search\"\n\t\t\t\t/>\n\t\t\t</span>\n\t\t</div>\n\t\t<span v-if=\"text\" :class=\"$style.text\">{{ text }}</span>\n\t\t<input v-if=\"level > 0 && isSchemaValueArray\" :id=\"subKey\" type=\"checkbox\" checked />\n\t\t<label v-if=\"level > 0 && isSchemaValueArray\" :class=\"$style.toggle\" :for=\"subKey\">\n\t\t\t<font-awesome-icon icon=\"angle-up\" />\n\t\t</label>\n\t\t<div v-if=\"isSchemaValueArray\" :class=\"{ [$style.sub]: true, [$style.flat]: isFlat }\">\n\t\t\t<run-data-schema-item\n\t\t\t\tv-for=\"(s, i) in schemaArray\"\n\t\t\t\t:key=\"`${s.type}-${level}-${i}`\"\n\t\t\t\t:schema=\"s\"\n\t\t\t\t:level=\"level + 1\"\n\t\t\t\t:parent=\"schema\"\n\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t:sub-key=\"`${paneType}_${s.type}-${level}-${i}`\"\n\t\t\t\t:mapping-enabled=\"mappingEnabled\"\n\t\t\t\t:dragging-path=\"draggingPath\"\n\t\t\t\t:distance-from-active=\"distanceFromActive\"\n\t\t\t\t:node=\"node\"\n\t\t\t\t:style=\"{ transitionDelay: transitionDelay(i) }\"\n\t\t\t\t:search=\"search\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n@import '@/styles/variables';\n\n.item {\n\tdisplay: block;\n\tposition: relative;\n\ttransition: all 0.3s $ease-out-expo;\n\n\t.item {\n\t\tpadding-top: var(--spacing-2xs);\n\t\tpadding-left: var(--spacing-l);\n\t}\n\n\tinput {\n\t\tposition: absolute;\n\t\tleft: -100%;\n\n\t\t~ .sub {\n\t\t\theight: 0;\n\n\t\t\t> .item {\n\t\t\t\ttransform: translateX(-100%);\n\t\t\t}\n\t\t}\n\n\t\t&:checked {\n\t\t\t~ .toggle svg {\n\t\t\t\ttransform: rotate(180deg);\n\t\t\t}\n\n\t\t\t~ .sub {\n\t\t\t\theight: auto;\n\n\t\t\t\t> .item {\n\t\t\t\t\ttransform: translateX(0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&::after {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\tclear: both;\n\t}\n}\n\n.sub {\n\tdisplay: block;\n\toverflow: hidden;\n\ttransition: all 0.2s $ease-out-expo;\n\tclear: both;\n\n\t&.flat {\n\t\t> .item {\n\t\t\tpadding-left: 0;\n\t\t}\n\t}\n\n\t&:nth-of-type(1) {\n\t\t> .item:nth-of-type(1) {\n\t\t\tpadding-top: 0;\n\n\t\t\t.toggle {\n\t\t\t\ttop: -2px;\n\t\t\t}\n\t\t}\n\t}\n}\n\n:global(.highlightSchema) {\n\t.pill.mappable {\n\t\t&,\n\t\t&:hover,\n\t\tspan,\n\t\t&:hover span span {\n\t\t\tcolor: var(--color-primary);\n\t\t\tborder-color: var(--color-primary-tint-1);\n\t\t\tbackground-color: var(--color-primary-tint-3);\n\n\t\t\tsvg {\n\t\t\t\tpath {\n\t\t\t\t\tfill: var(--color-primary);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n.pill {\n\tfloat: left;\n\tdisplay: inline-flex;\n\theight: 24px;\n\tpadding: 0 var(--spacing-3xs);\n\tborder: 1px solid var(--color-foreground-light);\n\tborder-radius: 4px;\n\tbackground-color: var(--color-background-xlight);\n\tfont-size: var(--font-size-2xs);\n\tcolor: var(--color-text-dark);\n\n\tspan {\n\t\tdisplay: flex;\n\t\theight: 100%;\n\t\talign-items: center;\n\n\t\tsvg {\n\t\t\tpath {\n\t\t\t\tfill: var(--color-text-light);\n\t\t\t}\n\t\t}\n\t}\n\n\t&.mappable {\n\t\tcursor: grab;\n\n\t\t&:hover {\n\t\t\t&,\n\t\t\tspan span {\n\t\t\t\tbackground-color: var(--color-background-light);\n\t\t\t\tborder-color: var(--color-foreground-base);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.label {\n\t> span {\n\t\tmargin-left: var(--spacing-3xs);\n\t\tpadding-left: var(--spacing-3xs);\n\t\tborder-left: 1px solid var(--color-foreground-light);\n\n\t\t&.arrayIndex {\n\t\t\tborder: 0;\n\t\t\tpadding-left: 0;\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n}\n\n.text {\n\tdisplay: block;\n\tpadding-top: var(--spacing-4xs);\n\tpadding-left: var(--spacing-2xs);\n\tfont-weight: var(--font-weight-normal);\n\tfont-size: var(--font-size-2xs);\n\toverflow: hidden;\n\tword-break: break-word;\n}\n\n.toggle {\n\tdisplay: flex;\n\tposition: absolute;\n\tpadding: var(--spacing-2xs);\n\tleft: 0;\n\ttop: 5px;\n\tjustify-content: center;\n\talign-items: center;\n\tcursor: pointer;\n\tuser-select: none;\n\tfont-weight: normal;\n\tfont-size: var(--font-size-s);\n\toverflow: hidden;\n\n\tsvg {\n\t\ttransition: all 0.3s $ease-out-expo;\n\t}\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue';\nimport type { INodeUi } from '@/Interface';\nimport RunDataSchemaItem from '@/components/RunDataSchemaItem.vue';\nimport Draggable from '@/components/Draggable.vue';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { telemetry } from '@/plugins/telemetry';\nimport type { IDataObject } from 'n8n-workflow';\nimport { isEmpty } from '@/utils/typesUtils';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { i18n } from '@/plugins/i18n';\nimport MappingPill from './MappingPill.vue';\nimport { useDataSchema } from '@/composables/useDataSchema';\n\ntype Props = {\n\tdata: IDataObject[];\n\tmappingEnabled: boolean;\n\tdistanceFromActive: number;\n\trunIndex: number;\n\ttotalRuns: number;\n\tpaneType: 'input' | 'output';\n\tnode: INodeUi | null;\n\tsearch: string;\n};\n\nconst props = withDefaults(defineProps<Props>(), {\n\tdistanceFromActive: 0,\n});\n\nconst draggingPath = ref<string>('');\nconst ndvStore = useNDVStore();\nconst { getSchemaForExecutionData } = useDataSchema();\n\nconst schema = computed(() => getSchemaForExecutionData(props.data));\n\nconst isDataEmpty = computed(() => isEmpty(props.data));\n\nconst highlight = computed(() => ndvStore.highlightDraggables);\n\nconst onDragStart = (el: HTMLElement) => {\n\tif (el?.dataset?.path) {\n\t\tdraggingPath.value = el.dataset.path;\n\t}\n\n\tndvStore.resetMappingTelemetry();\n};\nconst onDragEnd = (el: HTMLElement) => {\n\tdraggingPath.value = '';\n\n\tsetTimeout(() => {\n\t\tconst mappingTelemetry = ndvStore.mappingTelemetry;\n\t\tconst telemetryPayload = {\n\t\t\tsrc_node_type: props.node?.type,\n\t\t\tsrc_field_name: el.dataset.name || '',\n\t\t\tsrc_nodes_back: props.distanceFromActive,\n\t\t\tsrc_run_index: props.runIndex,\n\t\t\tsrc_runs_total: props.totalRuns,\n\t\t\tsrc_field_nest_level: el.dataset.depth || 0,\n\t\t\tsrc_view: 'schema',\n\t\t\tsrc_element: el,\n\t\t\tsuccess: false,\n\t\t\t...mappingTelemetry,\n\t\t};\n\n\t\tvoid useExternalHooks().run('runDataJson.onDragEnd', telemetryPayload);\n\n\t\ttelemetry.track('User dragged data for mapping', telemetryPayload, { withPostHog: true });\n\t}, 1000); // ensure dest data gets set if drop\n};\n</script>\n\n<template>\n\t<div :class=\"[$style.schemaWrapper, { highlightSchema: highlight }]\">\n\t\t<n8n-info-tip v-if=\"isDataEmpty\">{{\n\t\t\ti18n.baseText('dataMapping.schemaView.emptyData')\n\t\t}}</n8n-info-tip>\n\t\t<Draggable\n\t\t\tv-else\n\t\t\ttype=\"mapping\"\n\t\t\ttarget-data-key=\"mappable\"\n\t\t\t:disabled=\"!mappingEnabled\"\n\t\t\t@dragstart=\"onDragStart\"\n\t\t\t@dragend=\"onDragEnd\"\n\t\t>\n\t\t\t<template #preview=\"{ canDrop, el }\">\n\t\t\t\t<MappingPill v-if=\"el\" :html=\"el.outerHTML\" :can-drop=\"canDrop\" />\n\t\t\t</template>\n\t\t\t<div :class=\"$style.schema\">\n\t\t\t\t<RunDataSchemaItem\n\t\t\t\t\t:schema=\"schema\"\n\t\t\t\t\t:level=\"0\"\n\t\t\t\t\t:parent=\"null\"\n\t\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t\t:sub-key=\"`${schema.type}-0-0`\"\n\t\t\t\t\t:mapping-enabled=\"mappingEnabled\"\n\t\t\t\t\t:dragging-path=\"draggingPath\"\n\t\t\t\t\t:distance-from-active=\"distanceFromActive\"\n\t\t\t\t\t:node=\"node\"\n\t\t\t\t\t:search=\"search\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</Draggable>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.schemaWrapper {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tbottom: 0;\n\tright: 0;\n\toverflow: auto;\n\tline-height: 1.5;\n\tword-break: normal;\n\theight: 100%;\n\twidth: 100%;\n\n\t> div[class*='info'] {\n\t\tpadding: 0 var(--spacing-s);\n\t}\n}\n\n.schema {\n\tdisplay: inline-block;\n\tpadding: 0 var(--spacing-s) var(--spacing-s);\n}\n</style>\n"],"names":["props","__props","isSchemaValueArray","computed","schemaArray","isSchemaParentTypeArray","_a","isFlat","v","key","schemaName","text","shorten","dragged","getJsonParameterPath","path","getMappedExpression","transitionDelay","i","getIconBySchemaType","type","checkExhaustive","draggingPath","ref","ndvStore","useNDVStore","getSchemaForExecutionData","useDataSchema","schema","isDataEmpty","isEmpty","highlight","onDragStart","el","onDragEnd","mappingTelemetry","telemetryPayload","useExternalHooks","telemetry"],"mappings":"m4DAqBA,MAAMA,EAAQC,EAERC,EAAqBC,EAAS,IAAM,MAAM,QAAQH,EAAM,OAAO,KAAK,CAAC,EACrEI,EAAcD,EACnB,IAAOD,EAAmB,MAAQF,EAAM,OAAO,MAAQ,CAAC,CAAA,EAEnDK,EAA0BF,EAAS,IAAM,OAAA,QAAAG,EAAAN,EAAM,SAAN,YAAAM,EAAc,QAAS,QAAO,EACvEC,EAASJ,EACd,IACCH,EAAM,QAAU,GAChB,MAAM,QAAQA,EAAM,OAAO,KAAK,GAChCA,EAAM,OAAO,MAAM,MAAOQ,GAAM,CAAC,MAAM,QAAQA,EAAE,KAAK,CAAC,CAAA,EAEnDC,EAAMN,EAAS,IACbE,EAAwB,MAAQ,IAAIL,EAAM,OAAO,GAAG,IAAMA,EAAM,OAAO,GAC9E,EACKU,EAAaP,EAAS,IAC3BE,EAAwB,MAAQ,GAAGL,EAAM,OAAO,IAAI,IAAIA,EAAM,OAAO,GAAG,IAAMA,EAAM,OAAO,GAAA,EAEtFW,EAAOR,EAAS,IACrB,MAAM,QAAQH,EAAM,OAAO,KAAK,EAAI,GAAKY,EAAQZ,EAAM,OAAO,MAAO,IAAK,CAAC,CAAA,EAGtEa,EAAUV,EAAS,IAAMH,EAAM,eAAiBA,EAAM,OAAO,IAAI,EAEjEc,EAAwBC,GAC7BC,EAAoB,CACnB,SAAUhB,EAAM,KAAM,KACtB,mBAAoBA,EAAM,mBAC1B,KAAAe,CAAA,CACA,EAEIE,EAAmBC,GAAc,GAAGA,EAAI,IAAK,IAE7CC,EAAuBC,GAAiC,CAC7D,OAAQA,EAAM,CACb,IAAK,SACG,MAAA,OACR,IAAK,QACG,MAAA,OACR,IAAK,SACL,IAAK,OACG,MAAA,OACR,IAAK,SACG,MAAA,UACR,IAAK,UACG,MAAA,eACR,IAAK,WACG,MAAA,OACR,IAAK,SACG,MAAA,aACR,IAAK,SACG,MAAA,MACR,IAAK,YACG,MAAA,MACR,QACC,OAAAC,EAAgBD,CAAI,EACb,EACT,CAAA,2sECtDD,MAAMpB,EAAQC,EAIRqB,EAAeC,EAAY,EAAE,EAC7BC,EAAWC,IACX,CAAE,0BAAAC,GAA8BC,IAEhCC,EAASzB,EAAS,IAAMuB,EAA0B1B,EAAM,IAAI,CAAC,EAE7D6B,EAAc1B,EAAS,IAAM2B,EAAQ9B,EAAM,IAAI,CAAC,EAEhD+B,EAAY5B,EAAS,IAAMqB,EAAS,mBAAmB,EAEvDQ,EAAeC,GAAoB,QACpC3B,EAAA2B,GAAA,YAAAA,EAAI,UAAJ,MAAA3B,EAAa,OACHgB,EAAA,MAAQW,EAAG,QAAQ,MAGjCT,EAAS,sBAAsB,CAAA,EAE1BU,EAAaD,GAAoB,CACtCX,EAAa,MAAQ,GAErB,WAAW,IAAM,OAChB,MAAMa,EAAmBX,EAAS,iBAC5BY,EAAmB,CACxB,eAAe9B,EAAAN,EAAM,OAAN,YAAAM,EAAY,KAC3B,eAAgB2B,EAAG,QAAQ,MAAQ,GACnC,eAAgBjC,EAAM,mBACtB,cAAeA,EAAM,SACrB,eAAgBA,EAAM,UACtB,qBAAsBiC,EAAG,QAAQ,OAAS,EAC1C,SAAU,SACV,YAAaA,EACb,QAAS,GACT,GAAGE,CAAA,EAGCE,EAAiB,EAAE,IAAI,wBAAyBD,CAAgB,EAErEE,EAAU,MAAM,gCAAiCF,EAAkB,CAAE,YAAa,GAAM,GACtF,GAAI,CAAA"}
|
|
1
|
+
{"version":3,"file":"RunDataSchema-s4wg-kE7.js","sources":["../../src/components/RunDataSchemaItem.vue","../../src/components/RunDataSchema.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { INodeUi, Schema } from '@/Interface';\nimport { checkExhaustive } from '@/utils/typeGuards';\nimport { shorten } from '@/utils/typesUtils';\nimport { getMappedExpression } from '@/utils/mappingUtils';\nimport TextWithHighlights from './TextWithHighlights.vue';\n\ntype Props = {\n\tschema: Schema;\n\tlevel: number;\n\tparent: Schema | null;\n\tsubKey: string;\n\tpaneType: 'input' | 'output';\n\tmappingEnabled: boolean;\n\tdraggingPath: string;\n\tdistanceFromActive: number;\n\tnode: INodeUi | null;\n\tsearch: string;\n};\n\nconst props = defineProps<Props>();\n\nconst isSchemaValueArray = computed(() => Array.isArray(props.schema.value));\nconst schemaArray = computed(\n\t() => (isSchemaValueArray.value ? props.schema.value : []) as Schema[],\n);\nconst isSchemaParentTypeArray = computed(() => props.parent?.type === 'array');\nconst isFlat = computed(\n\t() =>\n\t\tprops.level === 0 &&\n\t\tArray.isArray(props.schema.value) &&\n\t\tprops.schema.value.every((v) => !Array.isArray(v.value)),\n);\nconst key = computed((): string | undefined => {\n\treturn isSchemaParentTypeArray.value ? `[${props.schema.key}]` : props.schema.key;\n});\nconst schemaName = computed(() =>\n\tisSchemaParentTypeArray.value ? `${props.schema.type}[${props.schema.key}]` : props.schema.key,\n);\nconst text = computed(() =>\n\tArray.isArray(props.schema.value) ? '' : shorten(props.schema.value, 600, 0),\n);\n\nconst dragged = computed(() => props.draggingPath === props.schema.path);\n\nconst getJsonParameterPath = (path: string): string =>\n\tgetMappedExpression({\n\t\tnodeName: props.node!.name,\n\t\tdistanceFromActive: props.distanceFromActive,\n\t\tpath,\n\t});\n\nconst transitionDelay = (i: number) => `${i * 0.033}s`;\n\nconst getIconBySchemaType = (type: Schema['type']): string => {\n\tswitch (type) {\n\t\tcase 'object':\n\t\t\treturn 'cube';\n\t\tcase 'array':\n\t\t\treturn 'list';\n\t\tcase 'string':\n\t\tcase 'null':\n\t\t\treturn 'font';\n\t\tcase 'number':\n\t\t\treturn 'hashtag';\n\t\tcase 'boolean':\n\t\t\treturn 'check-square';\n\t\tcase 'function':\n\t\t\treturn 'code';\n\t\tcase 'bigint':\n\t\t\treturn 'calculator';\n\t\tcase 'symbol':\n\t\t\treturn 'sun';\n\t\tcase 'undefined':\n\t\t\treturn 'ban';\n\t\tdefault:\n\t\t\tcheckExhaustive(type);\n\t\t\treturn '';\n\t}\n};\n</script>\n\n<template>\n\t<div :class=\"$style.item\" data-test-id=\"run-data-schema-item\">\n\t\t<div\n\t\t\tv-if=\"level > 0 || (level === 0 && !isSchemaValueArray)\"\n\t\t\t:title=\"schema.type\"\n\t\t\t:class=\"{\n\t\t\t\t[$style.pill]: true,\n\t\t\t\t[$style.mappable]: mappingEnabled,\n\t\t\t\t[$style.highlight]: dragged,\n\t\t\t}\"\n\t\t>\n\t\t\t<span\n\t\t\t\t:class=\"$style.label\"\n\t\t\t\t:data-value=\"getJsonParameterPath(schema.path)\"\n\t\t\t\t:data-name=\"schemaName\"\n\t\t\t\t:data-path=\"schema.path\"\n\t\t\t\t:data-depth=\"level\"\n\t\t\t\tdata-target=\"mappable\"\n\t\t\t>\n\t\t\t\t<font-awesome-icon :icon=\"getIconBySchemaType(schema.type)\" size=\"sm\" />\n\t\t\t\t<TextWithHighlights\n\t\t\t\t\tv-if=\"isSchemaParentTypeArray\"\n\t\t\t\t\t:content=\"props.parent?.key\"\n\t\t\t\t\t:search=\"props.search\"\n\t\t\t\t/>\n\t\t\t\t<TextWithHighlights\n\t\t\t\t\tv-if=\"key\"\n\t\t\t\t\t:class=\"{ [$style.arrayIndex]: isSchemaParentTypeArray }\"\n\t\t\t\t\t:content=\"key\"\n\t\t\t\t\t:search=\"props.search\"\n\t\t\t\t/>\n\t\t\t</span>\n\t\t</div>\n\t\t<span v-if=\"text\" :class=\"$style.text\">{{ text }}</span>\n\t\t<input v-if=\"level > 0 && isSchemaValueArray\" :id=\"subKey\" type=\"checkbox\" checked />\n\t\t<label v-if=\"level > 0 && isSchemaValueArray\" :class=\"$style.toggle\" :for=\"subKey\">\n\t\t\t<font-awesome-icon icon=\"angle-up\" />\n\t\t</label>\n\t\t<div v-if=\"isSchemaValueArray\" :class=\"{ [$style.sub]: true, [$style.flat]: isFlat }\">\n\t\t\t<run-data-schema-item\n\t\t\t\tv-for=\"(s, i) in schemaArray\"\n\t\t\t\t:key=\"`${s.type}-${level}-${i}`\"\n\t\t\t\t:schema=\"s\"\n\t\t\t\t:level=\"level + 1\"\n\t\t\t\t:parent=\"schema\"\n\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t:sub-key=\"`${paneType}_${s.type}-${level}-${i}`\"\n\t\t\t\t:mapping-enabled=\"mappingEnabled\"\n\t\t\t\t:dragging-path=\"draggingPath\"\n\t\t\t\t:distance-from-active=\"distanceFromActive\"\n\t\t\t\t:node=\"node\"\n\t\t\t\t:style=\"{ transitionDelay: transitionDelay(i) }\"\n\t\t\t\t:search=\"search\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n@import '@/styles/variables';\n\n.item {\n\tdisplay: block;\n\tposition: relative;\n\ttransition: all 0.3s $ease-out-expo;\n\n\t.item {\n\t\tpadding-top: var(--spacing-2xs);\n\t\tpadding-left: var(--spacing-l);\n\t}\n\n\tinput {\n\t\tposition: absolute;\n\t\tleft: -100%;\n\n\t\t~ .sub {\n\t\t\theight: 0;\n\n\t\t\t> .item {\n\t\t\t\ttransform: translateX(-100%);\n\t\t\t}\n\t\t}\n\n\t\t&:checked {\n\t\t\t~ .toggle svg {\n\t\t\t\ttransform: rotate(180deg);\n\t\t\t}\n\n\t\t\t~ .sub {\n\t\t\t\theight: auto;\n\n\t\t\t\t> .item {\n\t\t\t\t\ttransform: translateX(0);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t&::after {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\tclear: both;\n\t}\n}\n\n.sub {\n\tdisplay: block;\n\toverflow: hidden;\n\ttransition: all 0.2s $ease-out-expo;\n\tclear: both;\n\n\t&.flat {\n\t\t> .item {\n\t\t\tpadding-left: 0;\n\t\t}\n\t}\n\n\t&:nth-of-type(1) {\n\t\t> .item:nth-of-type(1) {\n\t\t\tpadding-top: 0;\n\n\t\t\t.toggle {\n\t\t\t\ttop: -2px;\n\t\t\t}\n\t\t}\n\t}\n}\n\n:global(.highlightSchema) {\n\t.pill.mappable {\n\t\t&,\n\t\t&:hover,\n\t\tspan,\n\t\t&:hover span span {\n\t\t\tcolor: var(--color-primary);\n\t\t\tborder-color: var(--color-primary-tint-1);\n\t\t\tbackground-color: var(--color-primary-tint-3);\n\n\t\t\tsvg {\n\t\t\t\tpath {\n\t\t\t\t\tfill: var(--color-primary);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n.pill {\n\tfloat: left;\n\tdisplay: inline-flex;\n\theight: 24px;\n\tpadding: 0 var(--spacing-3xs);\n\tborder: 1px solid var(--color-foreground-light);\n\tborder-radius: 4px;\n\tbackground-color: var(--color-background-xlight);\n\tfont-size: var(--font-size-2xs);\n\tcolor: var(--color-text-dark);\n\n\tspan {\n\t\tdisplay: flex;\n\t\theight: 100%;\n\t\talign-items: center;\n\n\t\tsvg {\n\t\t\tpath {\n\t\t\t\tfill: var(--color-text-light);\n\t\t\t}\n\t\t}\n\t}\n\n\t&.mappable {\n\t\tcursor: grab;\n\n\t\t&:hover {\n\t\t\t&,\n\t\t\tspan span {\n\t\t\t\tbackground-color: var(--color-background-light);\n\t\t\t\tborder-color: var(--color-foreground-base);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.label {\n\t> span {\n\t\tmargin-left: var(--spacing-3xs);\n\t\tpadding-left: var(--spacing-3xs);\n\t\tborder-left: 1px solid var(--color-foreground-light);\n\n\t\t&.arrayIndex {\n\t\t\tborder: 0;\n\t\t\tpadding-left: 0;\n\t\t\tmargin-left: 0;\n\t\t}\n\t}\n}\n\n.text {\n\tdisplay: block;\n\tpadding-top: var(--spacing-4xs);\n\tpadding-left: var(--spacing-2xs);\n\tfont-weight: var(--font-weight-normal);\n\tfont-size: var(--font-size-2xs);\n\toverflow: hidden;\n\tword-break: break-word;\n}\n\n.toggle {\n\tdisplay: flex;\n\tposition: absolute;\n\tpadding: var(--spacing-2xs);\n\tleft: 0;\n\ttop: 5px;\n\tjustify-content: center;\n\talign-items: center;\n\tcursor: pointer;\n\tuser-select: none;\n\tfont-weight: normal;\n\tfont-size: var(--font-size-s);\n\toverflow: hidden;\n\n\tsvg {\n\t\ttransition: all 0.3s $ease-out-expo;\n\t}\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue';\nimport type { INodeUi } from '@/Interface';\nimport RunDataSchemaItem from '@/components/RunDataSchemaItem.vue';\nimport Draggable from '@/components/Draggable.vue';\nimport { useNDVStore } from '@/stores/ndv.store';\nimport { telemetry } from '@/plugins/telemetry';\nimport type { IDataObject } from 'n8n-workflow';\nimport { isEmpty } from '@/utils/typesUtils';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { i18n } from '@/plugins/i18n';\nimport MappingPill from './MappingPill.vue';\nimport { useDataSchema } from '@/composables/useDataSchema';\n\ntype Props = {\n\tdata: IDataObject[];\n\tmappingEnabled: boolean;\n\tdistanceFromActive: number;\n\trunIndex: number;\n\ttotalRuns: number;\n\tpaneType: 'input' | 'output';\n\tnode: INodeUi | null;\n\tsearch: string;\n};\n\nconst props = withDefaults(defineProps<Props>(), {\n\tdistanceFromActive: 0,\n});\n\nconst draggingPath = ref<string>('');\nconst ndvStore = useNDVStore();\nconst { getSchemaForExecutionData } = useDataSchema();\n\nconst schema = computed(() => getSchemaForExecutionData(props.data));\n\nconst isDataEmpty = computed(() => isEmpty(props.data));\n\nconst highlight = computed(() => ndvStore.highlightDraggables);\n\nconst onDragStart = (el: HTMLElement) => {\n\tif (el?.dataset?.path) {\n\t\tdraggingPath.value = el.dataset.path;\n\t}\n\n\tndvStore.resetMappingTelemetry();\n};\nconst onDragEnd = (el: HTMLElement) => {\n\tdraggingPath.value = '';\n\n\tsetTimeout(() => {\n\t\tconst mappingTelemetry = ndvStore.mappingTelemetry;\n\t\tconst telemetryPayload = {\n\t\t\tsrc_node_type: props.node?.type,\n\t\t\tsrc_field_name: el.dataset.name || '',\n\t\t\tsrc_nodes_back: props.distanceFromActive,\n\t\t\tsrc_run_index: props.runIndex,\n\t\t\tsrc_runs_total: props.totalRuns,\n\t\t\tsrc_field_nest_level: el.dataset.depth || 0,\n\t\t\tsrc_view: 'schema',\n\t\t\tsrc_element: el,\n\t\t\tsuccess: false,\n\t\t\t...mappingTelemetry,\n\t\t};\n\n\t\tvoid useExternalHooks().run('runDataJson.onDragEnd', telemetryPayload);\n\n\t\ttelemetry.track('User dragged data for mapping', telemetryPayload, { withPostHog: true });\n\t}, 1000); // ensure dest data gets set if drop\n};\n</script>\n\n<template>\n\t<div :class=\"[$style.schemaWrapper, { highlightSchema: highlight }]\">\n\t\t<n8n-info-tip v-if=\"isDataEmpty\">{{\n\t\t\ti18n.baseText('dataMapping.schemaView.emptyData')\n\t\t}}</n8n-info-tip>\n\t\t<Draggable\n\t\t\tv-else\n\t\t\ttype=\"mapping\"\n\t\t\ttarget-data-key=\"mappable\"\n\t\t\t:disabled=\"!mappingEnabled\"\n\t\t\t@dragstart=\"onDragStart\"\n\t\t\t@dragend=\"onDragEnd\"\n\t\t>\n\t\t\t<template #preview=\"{ canDrop, el }\">\n\t\t\t\t<MappingPill v-if=\"el\" :html=\"el.outerHTML\" :can-drop=\"canDrop\" />\n\t\t\t</template>\n\t\t\t<div :class=\"$style.schema\">\n\t\t\t\t<RunDataSchemaItem\n\t\t\t\t\t:schema=\"schema\"\n\t\t\t\t\t:level=\"0\"\n\t\t\t\t\t:parent=\"null\"\n\t\t\t\t\t:pane-type=\"paneType\"\n\t\t\t\t\t:sub-key=\"`${schema.type}-0-0`\"\n\t\t\t\t\t:mapping-enabled=\"mappingEnabled\"\n\t\t\t\t\t:dragging-path=\"draggingPath\"\n\t\t\t\t\t:distance-from-active=\"distanceFromActive\"\n\t\t\t\t\t:node=\"node\"\n\t\t\t\t\t:search=\"search\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</Draggable>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.schemaWrapper {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tbottom: 0;\n\tright: 0;\n\toverflow: auto;\n\tline-height: 1.5;\n\tword-break: normal;\n\theight: 100%;\n\twidth: 100%;\n\n\t> div[class*='info'] {\n\t\tpadding: 0 var(--spacing-s);\n\t}\n}\n\n.schema {\n\tdisplay: inline-block;\n\tpadding: 0 var(--spacing-s) var(--spacing-s);\n}\n</style>\n"],"names":["props","__props","isSchemaValueArray","computed","schemaArray","isSchemaParentTypeArray","_a","isFlat","v","key","schemaName","text","shorten","dragged","getJsonParameterPath","path","getMappedExpression","transitionDelay","i","getIconBySchemaType","type","checkExhaustive","draggingPath","ref","ndvStore","useNDVStore","getSchemaForExecutionData","useDataSchema","schema","isDataEmpty","isEmpty","highlight","onDragStart","el","onDragEnd","mappingTelemetry","telemetryPayload","useExternalHooks","telemetry"],"mappings":"m4DAqBA,MAAMA,EAAQC,EAERC,EAAqBC,EAAS,IAAM,MAAM,QAAQH,EAAM,OAAO,KAAK,CAAC,EACrEI,EAAcD,EACnB,IAAOD,EAAmB,MAAQF,EAAM,OAAO,MAAQ,CAAC,CAAA,EAEnDK,EAA0BF,EAAS,IAAM,OAAA,QAAAG,EAAAN,EAAM,SAAN,YAAAM,EAAc,QAAS,QAAO,EACvEC,EAASJ,EACd,IACCH,EAAM,QAAU,GAChB,MAAM,QAAQA,EAAM,OAAO,KAAK,GAChCA,EAAM,OAAO,MAAM,MAAOQ,GAAM,CAAC,MAAM,QAAQA,EAAE,KAAK,CAAC,CAAA,EAEnDC,EAAMN,EAAS,IACbE,EAAwB,MAAQ,IAAIL,EAAM,OAAO,GAAG,IAAMA,EAAM,OAAO,GAC9E,EACKU,EAAaP,EAAS,IAC3BE,EAAwB,MAAQ,GAAGL,EAAM,OAAO,IAAI,IAAIA,EAAM,OAAO,GAAG,IAAMA,EAAM,OAAO,GAAA,EAEtFW,EAAOR,EAAS,IACrB,MAAM,QAAQH,EAAM,OAAO,KAAK,EAAI,GAAKY,EAAQZ,EAAM,OAAO,MAAO,IAAK,CAAC,CAAA,EAGtEa,EAAUV,EAAS,IAAMH,EAAM,eAAiBA,EAAM,OAAO,IAAI,EAEjEc,EAAwBC,GAC7BC,EAAoB,CACnB,SAAUhB,EAAM,KAAM,KACtB,mBAAoBA,EAAM,mBAC1B,KAAAe,CAAA,CACA,EAEIE,EAAmBC,GAAc,GAAGA,EAAI,IAAK,IAE7CC,EAAuBC,GAAiC,CAC7D,OAAQA,EAAM,CACb,IAAK,SACG,MAAA,OACR,IAAK,QACG,MAAA,OACR,IAAK,SACL,IAAK,OACG,MAAA,OACR,IAAK,SACG,MAAA,UACR,IAAK,UACG,MAAA,eACR,IAAK,WACG,MAAA,OACR,IAAK,SACG,MAAA,aACR,IAAK,SACG,MAAA,MACR,IAAK,YACG,MAAA,MACR,QACC,OAAAC,EAAgBD,CAAI,EACb,EACT,CAAA,2sECtDD,MAAMpB,EAAQC,EAIRqB,EAAeC,EAAY,EAAE,EAC7BC,EAAWC,IACX,CAAE,0BAAAC,GAA8BC,IAEhCC,EAASzB,EAAS,IAAMuB,EAA0B1B,EAAM,IAAI,CAAC,EAE7D6B,EAAc1B,EAAS,IAAM2B,EAAQ9B,EAAM,IAAI,CAAC,EAEhD+B,EAAY5B,EAAS,IAAMqB,EAAS,mBAAmB,EAEvDQ,EAAeC,GAAoB,QACpC3B,EAAA2B,GAAA,YAAAA,EAAI,UAAJ,MAAA3B,EAAa,OACHgB,EAAA,MAAQW,EAAG,QAAQ,MAGjCT,EAAS,sBAAsB,CAAA,EAE1BU,EAAaD,GAAoB,CACtCX,EAAa,MAAQ,GAErB,WAAW,IAAM,OAChB,MAAMa,EAAmBX,EAAS,iBAC5BY,EAAmB,CACxB,eAAe9B,EAAAN,EAAM,OAAN,YAAAM,EAAY,KAC3B,eAAgB2B,EAAG,QAAQ,MAAQ,GACnC,eAAgBjC,EAAM,mBACtB,cAAeA,EAAM,SACrB,eAAgBA,EAAM,UACtB,qBAAsBiC,EAAG,QAAQ,OAAS,EAC1C,SAAU,SACV,YAAaA,EACb,QAAS,GACT,GAAGE,CAAA,EAGCE,EAAiB,EAAE,IAAI,wBAAyBD,CAAgB,EAErEE,EAAU,MAAM,gCAAiCF,EAAkB,CAAE,YAAa,GAAM,GACtF,GAAI,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{w as E}from"./index-
|
|
2
|
-
//# sourceMappingURL=RunDataSearch-
|
|
1
|
+
import{w as E}from"./index-6ulnOLCO.js";import{G as g,r as c,e as x,b as A,Y as M,ag as h,l as V,M as b,O as z,I as f,T as L,J as O}from"./vendor-qzAIxxHa.js";import{_ as H}from"./n8n-roXSR3ff.js";import"./pinia-hqNpa1CE.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./@vueuse/core-3K2u_AzZ.js";import"./lodash-es-SWsik9tP.js";import"./@n8n/permissions-1O7vSg-k.js";import"./dateformat-ZLFwQ-J0.js";import"./vue-i18n-COIxmhgq.js";import"./uuid-McvpxQtQ.js";import"./luxon-ZRIU05qF.js";import"./@n8n/codemirror-lang-sql-PDL6jaEc.js";import"./@lezer/common-1hBQ1gIF.js";import"./prettier-XiNuC5bg.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-html-n8n-m8pcIqw_.js";import"./@n8n/codemirror-lang-uuamtW6H.js";import"./esprima-next-ulPLCZ1Z.js";import"./fast-json-stable-stringify-F21sPGMl.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-NS1qgWpD.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";const _="34px",B=g({__name:"RunDataSearch",props:{modelValue:{},paneType:{default:"output"},isAreaActive:{type:Boolean,default:!1}},emits:["update:modelValue","focus"],setup(v,{emit:S}){const l=S,n=v,i=E(),o=c(null),s=c(_),r=c(!1),y=x(()=>n.paneType==="input"?i.baseText("ndv.search.placeholder.input"):i.baseText("ndv.search.placeholder.output")),p=e=>{var t,a,u,d;const m=e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement||e.target instanceof HTMLSelectElement||((a=(t=e.target)==null?void 0:t.getAttribute)==null?void 0:a.call(t,"contentEditable"))==="true";e.key==="/"&&n.isAreaActive&&!m&&((u=o.value)==null||u.focus(),(d=o.value)==null||d.select())},T=e=>{l("update:modelValue",e)},I=()=>{var e;r.value=!0,s.value="30%",(e=o.value)==null||e.select(),l("focus")},k=()=>{n.modelValue||(r.value=!1,s.value=_)};return A(()=>{document.addEventListener("keyup",p)}),M(()=>{document.removeEventListener("keyup",p)}),(e,m)=>{const t=h("n8n-icon"),a=h("n8n-input");return V(),b(a,{ref_key:"inputRef",ref:o,"data-test-id":"ndv-search",class:f({[e.$style.ioSearch]:!0,[e.$style.ioSearchOpened]:r.value}),style:O({maxWidth:s.value}),"model-value":e.modelValue,placeholder:y.value,size:"small","onUpdate:modelValue":T,onFocus:I,onBlur:k},{prefix:z(()=>[L(t,{class:f(e.$style.ioSearchIcon),icon:"search"},null,8,["class"])]),_:1},8,["class","style","model-value","placeholder"])}}}),C="_ioSearch_1ekuz_1",R="_ioSearchIcon_1ekuz_5",$="_ioSearchOpened_1ekuz_15",D={ioSearch:C,ioSearchIcon:R,ioSearchOpened:$},U={$style:D},fe=H(B,[["__cssModules",U]]);export{fe as default};
|
|
2
|
+
//# sourceMappingURL=RunDataSearch-jtcvkqv3.js.map
|