n8n-editor-ui 1.47.0 → 1.47.2
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 +79 -79
- package/dist/assets/{AuthView-BgFWzBDm.js → AuthView-B_jZMnGj.js} +2 -2
- package/dist/assets/{AuthView-BgFWzBDm.js.map → AuthView-B_jZMnGj.js.map} +1 -1
- package/dist/assets/{CanvasControls-m_3acPPd.js → CanvasControls-ns1B0A0j.js} +2 -2
- package/dist/assets/{CanvasControls-m_3acPPd.js.map → CanvasControls-ns1B0A0j.js.map} +1 -1
- package/dist/assets/{ChangePasswordView-CN6JWR-N.js → ChangePasswordView-BDsuHv0B.js} +2 -2
- package/dist/assets/{ChangePasswordView-CN6JWR-N.js.map → ChangePasswordView-BDsuHv0B.js.map} +1 -1
- package/dist/assets/{CollectionParameter-DHmcKhO-.js → CollectionParameter-Br-xtutZ.js} +2 -2
- package/dist/assets/CollectionParameter-Br-xtutZ.js.map +1 -0
- package/dist/assets/{CredentialsView-D9TXjOnK.js → CredentialsView-DnJ_jhDo.js} +2 -2
- package/dist/assets/{CredentialsView-D9TXjOnK.js.map → CredentialsView-DnJ_jhDo.js.map} +1 -1
- package/dist/assets/{ErrorView-CYag8fsg.js → ErrorView-BfV5e5ko.js} +2 -2
- package/dist/assets/{ErrorView-CYag8fsg.js.map → ErrorView-BfV5e5ko.js.map} +1 -1
- package/dist/assets/{ExecutionsFilter-Cf35yNfd.js → ExecutionsFilter-0XcXH83H.js} +2 -2
- package/dist/assets/{ExecutionsFilter-Cf35yNfd.js.map → ExecutionsFilter-0XcXH83H.js.map} +1 -1
- package/dist/assets/{ExecutionsView-ztrgLYNP.js → ExecutionsView-aFiZuLVt.js} +2 -2
- package/dist/assets/{ExecutionsView-ztrgLYNP.js.map → ExecutionsView-aFiZuLVt.js.map} +1 -1
- package/dist/assets/{ForgotMyPasswordView-C-0yB-bx.js → ForgotMyPasswordView-64X9tXq4.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-C-0yB-bx.js.map → ForgotMyPasswordView-64X9tXq4.js.map} +1 -1
- package/dist/assets/MainHeader-Ch0Iz_7s.js +2 -0
- package/dist/assets/{MainHeader-CMxbwL4C.js.map → MainHeader-Ch0Iz_7s.js.map} +1 -1
- package/dist/assets/{MainSidebar-BuwaBgG9.js → MainSidebar-3ee-tTgz.js} +2 -2
- package/dist/assets/{MainSidebar-BuwaBgG9.js.map → MainSidebar-3ee-tTgz.js.map} +1 -1
- package/dist/assets/{NodeCreation-B7Uimsok.js → NodeCreation-PrQGENrl.js} +3 -3
- package/dist/assets/{NodeCreation-B7Uimsok.js.map → NodeCreation-PrQGENrl.js.map} +1 -1
- package/dist/assets/{NodeCreator-IRjqf3_R.js → NodeCreator-DlK1669m.js} +2 -2
- package/dist/assets/{NodeCreator-IRjqf3_R.js.map → NodeCreator-DlK1669m.js.map} +1 -1
- package/dist/assets/{NodeDetailsView-CSnjluIR.js → NodeDetailsView-DcV7LI-g.js} +4 -4
- package/dist/assets/{NodeDetailsView-CSnjluIR.js.map → NodeDetailsView-DcV7LI-g.js.map} +1 -1
- package/dist/assets/{NodeView-DMzj-gox.css → NodeView--67hs6V6.css} +1 -1
- package/dist/assets/NodeView-D_kbUfVN.js +3 -0
- package/dist/assets/NodeView-D_kbUfVN.js.map +1 -0
- package/dist/assets/{NodeView.v2-DyU_S0rY.js → NodeView.v2-D_Wbnl01.js} +3 -3
- package/dist/assets/{NodeView.v2-DyU_S0rY.js.map → NodeView.v2-D_Wbnl01.js.map} +1 -1
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-C1N0EZCM.js → ProjectCardBadge.vue_vue_type_script_setup_true_lang-6oVL0vKx.js} +2 -2
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-C1N0EZCM.js.map → ProjectCardBadge.vue_vue_type_script_setup_true_lang-6oVL0vKx.js.map} +1 -1
- package/dist/assets/{ProjectSettings-CbNlX27g.js → ProjectSettings-CfcplqBX.js} +2 -2
- package/dist/assets/{ProjectSettings-CbNlX27g.js.map → ProjectSettings-CfcplqBX.js.map} +1 -1
- package/dist/assets/{ProjectTabs-Cx2VWeba.js → ProjectTabs-5ZO9YR8J.js} +2 -2
- package/dist/assets/{ProjectTabs-Cx2VWeba.js.map → ProjectTabs-5ZO9YR8J.js.map} +1 -1
- package/dist/assets/{PushConnectionTracker-C_r8Zv-p.js → PushConnectionTracker-Bp-RjnYr.js} +2 -2
- package/dist/assets/{PushConnectionTracker-C_r8Zv-p.js.map → PushConnectionTracker-Bp-RjnYr.js.map} +1 -1
- package/dist/assets/{ResourcesListLayout-CKSHiUAP.js → ResourcesListLayout-B4W1PSHT.js} +2 -2
- package/dist/assets/{ResourcesListLayout-CKSHiUAP.js.map → ResourcesListLayout-B4W1PSHT.js.map} +1 -1
- package/dist/assets/{RunDataAi-BVqsN7UN.js → RunDataAi-C3XiqNZa.js} +2 -2
- package/dist/assets/{RunDataAi-BVqsN7UN.js.map → RunDataAi-C3XiqNZa.js.map} +1 -1
- package/dist/assets/{RunDataJson-6Yfwd78r.js → RunDataJson-CMcOD-78.js} +3 -3
- package/dist/assets/{RunDataJson-6Yfwd78r.js.map → RunDataJson-CMcOD-78.js.map} +1 -1
- package/dist/assets/{RunDataJsonActions-5ig3g4km.js → RunDataJsonActions-BQBpmtOi.js} +2 -2
- package/dist/assets/{RunDataJsonActions-5ig3g4km.js.map → RunDataJsonActions-BQBpmtOi.js.map} +1 -1
- package/dist/assets/{RunDataSchema-CrW957BW.js → RunDataSchema-CF4YH-8y.js} +3 -3
- package/dist/assets/{RunDataSchema-CrW957BW.js.map → RunDataSchema-CF4YH-8y.js.map} +1 -1
- package/dist/assets/{RunDataSearch-BrIWOZXO.js → RunDataSearch-DwB8g_cE.js} +2 -2
- package/dist/assets/{RunDataSearch-BrIWOZXO.js.map → RunDataSearch-DwB8g_cE.js.map} +1 -1
- package/dist/assets/RunDataTable-BVAuNDP9.js +2 -0
- package/dist/assets/{RunDataTable-B01U16vv.js.map → RunDataTable-BVAuNDP9.js.map} +1 -1
- package/dist/assets/{SamlOnboarding-CfbBlTNm.js → SamlOnboarding-Csd8l-7T.js} +2 -2
- package/dist/assets/{SamlOnboarding-CfbBlTNm.js.map → SamlOnboarding-Csd8l-7T.js.map} +1 -1
- package/dist/assets/{SettingsApiView-CuliNEKo.js → SettingsApiView-DnvdV7dx.js} +2 -2
- package/dist/assets/{SettingsApiView-CuliNEKo.js.map → SettingsApiView-DnvdV7dx.js.map} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-CeY4uqH-.js → SettingsCommunityNodesView-C11a_Ybs.js} +2 -2
- package/dist/assets/{SettingsCommunityNodesView-CeY4uqH-.js.map → SettingsCommunityNodesView-C11a_Ybs.js.map} +1 -1
- package/dist/assets/{SettingsExternalSecrets-CE7ObFx_.js → SettingsExternalSecrets-IIReUcRG.js} +2 -2
- package/dist/assets/{SettingsExternalSecrets-CE7ObFx_.js.map → SettingsExternalSecrets-IIReUcRG.js.map} +1 -1
- package/dist/assets/{SettingsFakeDoorView-DQqNf_Q9.js → SettingsFakeDoorView-BOUfBJS8.js} +2 -2
- package/dist/assets/{SettingsFakeDoorView-DQqNf_Q9.js.map → SettingsFakeDoorView-BOUfBJS8.js.map} +1 -1
- package/dist/assets/{SettingsLdapView-9hy5C87y.js → SettingsLdapView-BaSjQ4cy.js} +2 -2
- package/dist/assets/{SettingsLdapView-9hy5C87y.js.map → SettingsLdapView-BaSjQ4cy.js.map} +1 -1
- package/dist/assets/{SettingsLogStreamingView-Cc0h5DhT.js → SettingsLogStreamingView-COGhA1hN.js} +2 -2
- package/dist/assets/{SettingsLogStreamingView-Cc0h5DhT.js.map → SettingsLogStreamingView-COGhA1hN.js.map} +1 -1
- package/dist/assets/{SettingsPersonalView-Cs82ezMX.js → SettingsPersonalView-BJGgPTwa.js} +2 -2
- package/dist/assets/{SettingsPersonalView-Cs82ezMX.js.map → SettingsPersonalView-BJGgPTwa.js.map} +1 -1
- package/dist/assets/{SettingsSourceControl-Dr7R-QpH.js → SettingsSourceControl-DkdSLuvp.js} +2 -2
- package/dist/assets/{SettingsSourceControl-Dr7R-QpH.js.map → SettingsSourceControl-DkdSLuvp.js.map} +1 -1
- package/dist/assets/{SettingsSso-Di6lHXV2.js → SettingsSso-DA9AOKH5.js} +2 -2
- package/dist/assets/{SettingsSso-Di6lHXV2.js.map → SettingsSso-DA9AOKH5.js.map} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-g86Q7EQY.js → SettingsUsageAndPlan-BVPtlthH.js} +2 -2
- package/dist/assets/{SettingsUsageAndPlan-g86Q7EQY.js.map → SettingsUsageAndPlan-BVPtlthH.js.map} +1 -1
- package/dist/assets/{SettingsUsersView-dOWjUJTW.js → SettingsUsersView-BuKt4ZDO.js} +2 -2
- package/dist/assets/{SettingsUsersView-dOWjUJTW.js.map → SettingsUsersView-BuKt4ZDO.js.map} +1 -1
- package/dist/assets/{SettingsView-DQ0hQWFt.js → SettingsView-DJ78VuiY.js} +2 -2
- package/dist/assets/{SettingsView-DQ0hQWFt.js.map → SettingsView-DJ78VuiY.js.map} +1 -1
- package/dist/assets/{SetupView-CqT8d0D8.js → SetupView-C70Dkfed.js} +2 -2
- package/dist/assets/{SetupView-CqT8d0D8.js.map → SetupView-C70Dkfed.js.map} +1 -1
- package/dist/assets/{SetupWorkflowCredentialsButton-BR-ObOqw.js → SetupWorkflowCredentialsButton-CEQ1LrFl.js} +2 -2
- package/dist/assets/{SetupWorkflowCredentialsButton-BR-ObOqw.js.map → SetupWorkflowCredentialsButton-CEQ1LrFl.js.map} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-DHHtk6_-.js → SetupWorkflowFromTemplateView-BUzzXtBr.js} +2 -2
- package/dist/assets/{SetupWorkflowFromTemplateView-DHHtk6_-.js.map → SetupWorkflowFromTemplateView-BUzzXtBr.js.map} +1 -1
- package/dist/assets/{SigninView-2eLLF8DU.js → SigninView-B3CNL-yp.js} +2 -2
- package/dist/assets/{SigninView-2eLLF8DU.js.map → SigninView-B3CNL-yp.js.map} +1 -1
- package/dist/assets/{SignoutView-BQyCyjsK.js → SignoutView-svcLavkC.js} +2 -2
- package/dist/assets/{SignoutView-BQyCyjsK.js.map → SignoutView-svcLavkC.js.map} +1 -1
- package/dist/assets/{SignupView-ByYEkUpW.js → SignupView-DJWRTPKF.js} +2 -2
- package/dist/assets/{SignupView-ByYEkUpW.js.map → SignupView-DJWRTPKF.js.map} +1 -1
- package/dist/assets/{TemplateDetails-I6WMCxGm.js → TemplateDetails-BnbiWxo-.js} +2 -2
- package/dist/assets/{TemplateDetails-I6WMCxGm.js.map → TemplateDetails-BnbiWxo-.js.map} +1 -1
- package/dist/assets/{TemplateList-DRf0Cbhg.js → TemplateList-By-t2s0M.js} +2 -2
- package/dist/assets/{TemplateList-DRf0Cbhg.js.map → TemplateList-By-t2s0M.js.map} +1 -1
- package/dist/assets/{TemplatesCollectionView-BYkDe49v.js → TemplatesCollectionView-D2L1fmSc.js} +2 -2
- package/dist/assets/{TemplatesCollectionView-BYkDe49v.js.map → TemplatesCollectionView-D2L1fmSc.js.map} +1 -1
- package/dist/assets/{TemplatesSearchView-CiZ7aZcy.js → TemplatesSearchView-Bmr6Nd6g.js} +2 -2
- package/dist/assets/{TemplatesSearchView-CiZ7aZcy.js.map → TemplatesSearchView-Bmr6Nd6g.js.map} +1 -1
- package/dist/assets/{TemplatesView-zULLoEwu.js → TemplatesView-BbunSn-s.js} +2 -2
- package/dist/assets/{TemplatesView-zULLoEwu.js.map → TemplatesView-BbunSn-s.js.map} +1 -1
- package/dist/assets/{TemplatesWorkflowView-DptRLbdX.js → TemplatesWorkflowView-XxBIlMWY.js} +2 -2
- package/dist/assets/{TemplatesWorkflowView-DptRLbdX.js.map → TemplatesWorkflowView-XxBIlMWY.js.map} +1 -1
- package/dist/assets/{VariablesView-NcNcsjHY.js → VariablesView-ZY5xLmKI.js} +2 -2
- package/dist/assets/{VariablesView-NcNcsjHY.js.map → VariablesView-ZY5xLmKI.js.map} +1 -1
- package/dist/assets/{WorkerView-dtJzfgCM.js → WorkerView-DV19-i1-.js} +2 -2
- package/dist/assets/{WorkerView-dtJzfgCM.js.map → WorkerView-DV19-i1-.js.map} +1 -1
- package/dist/assets/{WorkflowActivator-D6Zad1X2.js → WorkflowActivator-BXWURYao.js} +2 -2
- package/dist/assets/{WorkflowActivator-D6Zad1X2.js.map → WorkflowActivator-BXWURYao.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsInfoAccordion-C86A1CHv.js → WorkflowExecutionsInfoAccordion-aldNazgt.js} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-C86A1CHv.js.map → WorkflowExecutionsInfoAccordion-aldNazgt.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsLandingPage-DAfHDMth.js → WorkflowExecutionsLandingPage-CaAameTk.js} +2 -2
- package/dist/assets/{WorkflowExecutionsLandingPage-DAfHDMth.js.map → WorkflowExecutionsLandingPage-CaAameTk.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsPreview-C_EBlNX6.js → WorkflowExecutionsPreview-Bb-wJtr-.js} +2 -2
- package/dist/assets/WorkflowExecutionsPreview-Bb-wJtr-.js.map +1 -0
- package/dist/assets/WorkflowExecutionsView-D7nlOP1-.js +2 -0
- package/dist/assets/WorkflowExecutionsView-D7nlOP1-.js.map +1 -0
- package/dist/assets/{WorkflowHistory-DkdQ1koF.js → WorkflowHistory-C6zCGFoY.js} +2 -2
- package/dist/assets/{WorkflowHistory-DkdQ1koF.js.map → WorkflowHistory-C6zCGFoY.js.map} +1 -1
- package/dist/assets/{WorkflowOnboardingView-BPMBW_hz.js → WorkflowOnboardingView-Bu_Oqtr7.js} +2 -2
- package/dist/assets/{WorkflowOnboardingView-BPMBW_hz.js.map → WorkflowOnboardingView-Bu_Oqtr7.js.map} +1 -1
- package/dist/assets/{WorkflowPreview-CLzyAzmJ.js → WorkflowPreview-CVwpKdpj.js} +2 -2
- package/dist/assets/{WorkflowPreview-CLzyAzmJ.js.map → WorkflowPreview-CVwpKdpj.js.map} +1 -1
- package/dist/assets/{WorkflowsView-CzJx_-P5.js → WorkflowsView-DVeAZ2zW.js} +2 -2
- package/dist/assets/{WorkflowsView-CzJx_-P5.js.map → WorkflowsView-DVeAZ2zW.js.map} +1 -1
- package/dist/assets/{cloud-CRMEbZfJ.js → cloud-BRhZDk2r.js} +2 -2
- package/dist/assets/{cloud-CRMEbZfJ.js.map → cloud-BRhZDk2r.js.map} +1 -1
- package/dist/assets/{collaboration.store-Co5wlk8y.js → collaboration.store-Ol7bcCFc.js} +2 -2
- package/dist/assets/{collaboration.store-Co5wlk8y.js.map → collaboration.store-Ol7bcCFc.js.map} +1 -1
- package/dist/assets/index-1OxaEeO3.js +341 -0
- package/dist/assets/index-1OxaEeO3.js.map +1 -0
- package/dist/assets/{nodeCreator.store-CTXKjjQB.js → nodeCreator.store-FIsc3SCx.js} +2 -2
- package/dist/assets/{nodeCreator.store-CTXKjjQB.js.map → nodeCreator.store-FIsc3SCx.js.map} +1 -1
- package/dist/assets/{templateActions-CIRsIG2W.js → templateActions-w_1vSarr.js} +2 -2
- package/dist/assets/{templateActions-CIRsIG2W.js.map → templateActions-w_1vSarr.js.map} +1 -1
- package/dist/assets/{useExecutionDebugging-BzC-1xF-.js → useExecutionDebugging-EHinBq_u.js} +2 -2
- package/dist/assets/{useExecutionDebugging-BzC-1xF-.js.map → useExecutionDebugging-EHinBq_u.js.map} +1 -1
- package/dist/assets/{useExecutionHelpers-C2K8pfbF.js → useExecutionHelpers-LeKoU_T-.js} +2 -2
- package/dist/assets/{useExecutionHelpers-C2K8pfbF.js.map → useExecutionHelpers-LeKoU_T-.js.map} +1 -1
- package/dist/assets/{usePushConnection-EMXpPhl-.js → usePushConnection-PQgFeT_8.js} +2 -2
- package/dist/assets/{usePushConnection-EMXpPhl-.js.map → usePushConnection-PQgFeT_8.js.map} +1 -1
- package/dist/assets/{useUserHelpers-Bn_ZV9Jv.js → useUserHelpers-DZtbUAMm.js} +2 -2
- package/dist/assets/{useUserHelpers-Bn_ZV9Jv.js.map → useUserHelpers-DZtbUAMm.js.map} +1 -1
- package/dist/assets/{useWorkflowActivate-BwVActuc.js → useWorkflowActivate-npf1npdP.js} +2 -2
- package/dist/assets/{useWorkflowActivate-BwVActuc.js.map → useWorkflowActivate-npf1npdP.js.map} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/dist/assets/CollectionParameter-DHmcKhO-.js.map +0 -1
- package/dist/assets/MainHeader-CMxbwL4C.js +0 -2
- package/dist/assets/NodeView-C-hQ3_xD.js +0 -3
- package/dist/assets/NodeView-C-hQ3_xD.js.map +0 -1
- package/dist/assets/RunDataTable-B01U16vv.js +0 -2
- package/dist/assets/WorkflowExecutionsPreview-C_EBlNX6.js.map +0 -1
- package/dist/assets/WorkflowExecutionsView-Nm1Oo9El.js +0 -2
- package/dist/assets/WorkflowExecutionsView-Nm1Oo9El.js.map +0 -1
- package/dist/assets/index-Dtri_pSJ.js +0 -341
- package/dist/assets/index-Dtri_pSJ.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{N as _,aA as Y,aB as Z,_ as F,aC as ee}from"./n8n-4UEsHtUL.js";import{aK as te,u as ne,x as oe,a4 as q,j as G,ao as Q}from"./index-
|
|
1
|
+
import{N as _,aA as Y,aB as Z,_ as F,aC as ee}from"./n8n-4UEsHtUL.js";import{aK as te,u as ne,x as oe,a4 as q,j as G,ao as Q}from"./index-1OxaEeO3.js";import{G as W,af as se,r as E,b as ae,ag as B,l as y,m as g,p as w,I as p,U as v,T as h,u as U,M as H,a2 as re,R as j,F as L,a7 as K,e as O,O as R,S as x,d as ie,J as le}from"./vendor-Dv5OeN6t.js";import{D as ue}from"./lodash-es-CZ1inz46.js";import"./axios-Mm4CS0gO.js";import"./esprima-next-nhoSXAeq.js";import"./luxon-CLwAIbs0.js";import"./pinia-sugP77Im.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const z=n=>({type:"json",data:n,parsed:!1}),X={[_.AiLanguageModel](n){const o=n.response??n;if(!o)throw new Error("No response from Language Model");return Array.isArray(o==null?void 0:o.messages)&&(o==null?void 0:o.messages.length)===1&&typeof(o==null?void 0:o.messages[0])=="string"?{type:"text",data:o.messages[0],parsed:!0}:o.messages&&Array.isArray(o.messages)?X[_.AiMemory](n):o.generations?{type:"json",data:o.generations.map(a=>a!=null&&a.text?a.text:Array.isArray(a)?a.map(M=>M.text??M).join(`
|
|
2
2
|
|
|
3
3
|
`).trim():a),parsed:!0}:{type:"json",data:o,parsed:!0}},[_.AiTool]:z,[_.AiAgent]:z,[_.AiMemory](n){var b;const o=n.chatHistory??n.messages??((b=n==null?void 0:n.response)==null?void 0:b.chat_history);return Array.isArray(o)?{type:"markdown",data:o.map(a=>{var M;if(a.type==="constructor"&&((M=a.id)!=null&&M.includes("messages"))&&a.kwargs){let s=a.kwargs.content;return Array.isArray(s)&&(s=s.map(D=>{const{type:S,image_url:f}=D;return S==="image_url"&&typeof f=="object"&&typeof f.url=="string"?``:typeof f=="string"?``:D.text}).join(`
|
|
4
4
|
`)),Object.keys(a.kwargs.additional_kwargs).length&&(s+=` (${JSON.stringify(a.kwargs.additional_kwargs)})`),a.id.includes("HumanMessage")?s=`**Human:** ${String(s).trim()}`:a.id.includes("AIMessage")?s=`**AI:** ${s}`:a.id.includes("SystemMessage")&&(s=`**System Message:** ${s}`),n.action&&typeof n.action!="object"&&n.action!=="getMessages"&&(s=`## Action: ${n.action}
|
|
@@ -10,4 +10,4 @@ ${s}`),s}return""}).join(`
|
|
|
10
10
|
`),parsed:!0}}},ce=()=>({parseAiRunData:(o,b)=>{if([_.AiChain,_.Main].includes(b))return o.map(s=>({raw:s.json,parsedContent:null}));const N=o.map(s=>!Y(s.binary)?s.binary:s.json),a=X[b];return a?N.filter(s=>s!==void 0).map(s=>({raw:s,parsedContent:a(s)})):[{raw:N.filter(s=>s!==void 0),parsedContent:null}]}});var J=W({name:"VueMarkdown",props:{source:{type:String,required:!0},options:{type:Object,required:!1}},data:function(){return{md:null}},computed:{content:function(){var n,o=this.source;return(n=this.md)===null||n===void 0?void 0:n.render(o)}},created:function(){var n;this.md=new Z((n=this.options)!==null&&n!==void 0?n:{})},render:function(){return se("div",{innerHTML:this.content})}});const de=["data-content-type"],pe=["textContent"],me=W({__name:"AiRunContentBlock",props:{runData:{}},setup(n){const o=n,b=oe(),N=te(),{showMessage:a}=ne(),M=ce(),s=E(r()),D=E(!1),S=E(!1),f=E(void 0);function r(){return!{input:[_.AiDocument,_.AiTextSplitter],output:[_.AiDocument,_.AiEmbedding,_.AiTextSplitter,_.AiVectorStore]}[o.runData.inOut].includes(o.runData.type)}function T(e){return e.data?M.parseAiRunData(e.data,e.type):void 0}function $(e){return typeof e!="string"?!1:[/^# .+/gm,/\*{1,2}.+\*{1,2}/g,/\[.+\]\(.+\)/g,/```[\s\S]+```/g].some(u=>u.test(e))}function k(e){return"```json\n"+e+"\n```"}function A(e){return $(e)?e:Array.isArray(e)&&e.length&&typeof e[0]!="number"?e.map(u=>A(u)).join(`
|
|
11
11
|
|
|
12
12
|
`).trim():k(typeof e=="string"?e:JSON.stringify(e,null,2))}function t(e){S.value=!!e.find(i=>{var u;return((u=i.parsedContent)==null?void 0:u.parsed)===!0})}function c(){s.value=!s.value}function m(e){try{N.copy(JSON.stringify(e,void 0,2)),a({title:b.baseText("generic.copiedToClipboard"),type:"success"})}catch{}}return ae(()=>{f.value=T(o.runData),f.value&&t(f.value)}),(e,i)=>{const u=B("font-awesome-icon"),l=B("el-switch"),C=B("n8n-icon-button");return y(),g("div",{class:p(e.$style.block)},[w("header",{class:p(e.$style.blockHeader),onClick:c},[w("button",{class:p(e.$style.blockToggle)},[v(u,{icon:s.value?"angle-down":"angle-up",size:"lg"},null,8,["icon"])],2),w("p",{class:p(e.$style.blockTitle)},h(U(ue)(e.runData.inOut)),3),S.value?(y(),H(l,{key:0,modelValue:D.value,"onUpdate:modelValue":i[0]||(i[0]=d=>D.value=d),class:p(e.$style.rawSwitch),"active-text":"RAW JSON",onClick:i[1]||(i[1]=re(()=>{},["stop"]))},null,8,["modelValue","class"])):j("",!0)],2),w("main",{class:p({[e.$style.blockContent]:!0,[e.$style.blockContentExpanded]:s.value})},[(y(!0),g(L,null,K(f.value,({parsedContent:d,raw:I},V)=>(y(),g("div",{key:V,class:p(e.$style.contentText),"data-content-type":d==null?void 0:d.type},[d&&!D.value?(y(),g(L,{key:0},[d.type==="json"?(y(),H(U(J),{key:0,source:A(d.data),class:p(e.$style.markdown)},null,8,["source","class"])):j("",!0),d.type==="markdown"?(y(),H(U(J),{key:1,source:d.data,class:p(e.$style.markdown)},null,8,["source","class"])):j("",!0),d.type==="text"?(y(),g("p",{key:2,class:p(e.$style.runText),textContent:h(d.data)},null,10,pe)):j("",!0)],64)):(y(),g("div",{key:1,class:p(e.$style.rawContent)},[v(C,{size:"small",class:p(e.$style.copyToClipboard),type:"secondary",title:e.$locale.baseText("nodeErrorView.copyToClipboard"),icon:"copy",onClick:P=>m(I)},null,8,["class","title","onClick"]),v(U(J),{source:A(I),class:p(e.$style.markdown)},null,8,["source","class"])],2))],10,de))),128))],2)],2)}}}),ye="_copyToClipboard_1bt7e_1",fe="_rawContent_1bt7e_7",_e="_markdown_1bt7e_11",ke="_contentText_1bt7e_35",ge="_block_1bt7e_40",Te="_blockContent_1bt7e_48",be="_blockContentExpanded_1bt7e_52",he="_runText_1bt7e_56",ve="_rawSwitch_1bt7e_61",we="_blockHeader_1bt7e_68",$e="_blockTitle_1bt7e_80",Ae="_blockToggle_1bt7e_85",Ce={copyToClipboard:ye,rawContent:fe,markdown:_e,contentText:ke,block:ge,blockContent:Te,blockContentExpanded:be,runText:he,rawSwitch:ve,blockHeader:we,blockTitle:$e,blockToggle:Ae},Me={$style:Ce},Se=F(me,[["__cssModules",Me]]),Ie={key:0},je={key:1},De=w("br",null,null,-1),Ne=W({__name:"RunDataAiContent",props:{inputData:{},contentIndex:{}},setup(n){const o=n,b=q(),N=G(),a=O(()=>{var T,$;return($=(T=S.value)==null?void 0:T.data)==null?void 0:$.reduce((k,A)=>{var c,m;const t=((c=A.json)==null?void 0:c.tokenUsage)??((m=A.json)==null?void 0:m.tokenUsageEstimate);return t?{completionTokens:k.completionTokens+t.completionTokens,promptTokens:k.promptTokens+t.promptTokens,totalTokens:k.totalTokens+t.totalTokens}:k},{completionTokens:0,promptTokens:0,totalTokens:0})}),M=O(()=>{var r,T;return(T=(r=S.value)==null?void 0:r.data)==null?void 0:T.some($=>{var k;return(k=$.json)==null?void 0:k.tokenUsageEstimate})});function s(r){return M.value?`~${r}`:r.toString()}function D(r){const T=N.getNodeByName(o.inputData.node),$=b.getNodeType((T==null?void 0:T.type)??"");return{startTimeMs:r.metadata.startTime,executionTimeMs:r.metadata.executionTime,node:$,type:r.inOut,connectionType:r.type}}const S=O(()=>o.inputData.data.find(r=>r.inOut==="output")),f=O(()=>{if(S.value!==void 0)return D(S.value)});return(r,T)=>{var t,c,m,e,i,u;const $=B("n8n-tooltip"),k=B("n8n-text"),A=B("n8n-info-tip");return y(),g("div",{class:p(r.$style.container)},[w("header",{class:p(r.$style.header)},[(t=f.value)!=null&&t.node?(y(),H(Q,{key:0,class:p(r.$style.nodeIcon),"node-type":f.value.node,size:20},null,8,["class","node-type"])):j("",!0),w("div",{class:p(r.$style.headerWrap)},[w("p",{class:p(r.$style.title)},h(r.inputData.node),3),w("ul",{class:p(r.$style.meta)},[(c=f.value)!=null&&c.startTimeMs?(y(),g("li",Ie,h((m=f.value)==null?void 0:m.executionTimeMs)+"ms",1)):j("",!0),(e=f.value)!=null&&e.startTimeMs?(y(),g("li",je,[v($,null,{content:R(()=>{var l;return[x(h(new Date((l=f.value)==null?void 0:l.startTimeMs).toLocaleString()),1)]}),default:R(()=>{var l;return[x(" "+h(r.$locale.baseText("runData.aiContentBlock.startedAt",{interpolate:{startTime:new Date((l=f.value)==null?void 0:l.startTimeMs).toLocaleTimeString()}})),1)]}),_:1})])):j("",!0),(((i=a.value)==null?void 0:i.totalTokens)??0)>0?(y(),g("li",{key:2,class:p(r.$style.tokensUsage)},[x(h(r.$locale.baseText("runData.aiContentBlock.tokens",{interpolate:{count:s(((u=a.value)==null?void 0:u.totalTokens)??0)}}))+" ",1),v(A,{type:"tooltip",theme:"info-light","tooltip-placement":"right"},{default:R(()=>[w("div",null,[v(k,{bold:!0,size:"small"},{default:R(()=>{var l;return[x(h(r.$locale.baseText("runData.aiContentBlock.tokens.prompt"))+" "+h(r.$locale.baseText("runData.aiContentBlock.tokens",{interpolate:{count:s(((l=a.value)==null?void 0:l.promptTokens)??0)}})),1)]}),_:1}),De,v(k,{bold:!0,size:"small"},{default:R(()=>{var l;return[x(h(r.$locale.baseText("runData.aiContentBlock.tokens.completion"))+" "+h(r.$locale.baseText("runData.aiContentBlock.tokens",{interpolate:{count:s(((l=a.value)==null?void 0:l.completionTokens)??0)}})),1)]}),_:1})])]),_:1})],2)):j("",!0)],2)],2)],2),(y(!0),g(L,null,K(o.inputData.data,(l,C)=>(y(),g("main",{key:C,class:p(r.$style.content)},[v(Se,{"run-data":l},null,8,["run-data"])],2))),128))],2)}}}),Re="_container_dypaw_2",Be="_nodeIcon_dypaw_5",ze="_header_dypaw_8",xe="_headerWrap_dypaw_14",Oe="_title_dypaw_18",Ee="_meta_dypaw_25",Ue="_tokensUsage_dypaw_41",Ve={container:Re,nodeIcon:Be,header:ze,headerWrap:xe,title:Oe,meta:Ee,tokensUsage:Ue},He={$style:Ve},Le=F(Ne,[["__cssModules",He]]),We=["data-tree-depth"],Pe=["onClick"],Je=["textContent"],Fe=W({__name:"RunDataAi",props:{node:{},runIndex:{default:0},hideTitle:{type:Boolean},slim:{type:Boolean}},setup(n){const o=n,b=G(),N=q(),a=E([]);function M(t){return a.value.some(c=>c.node===t.node&&c.runIndex===t.runIndex)}function s(t,c,m){const e=b.getWorkflowResultDataByNodeName(t.node);if(!(e!=null&&e[t.runIndex]))return[];const i=e[t.runIndex];if(!i)return[];const u=[];function l(C,d){C&&Object.keys(C).map(I=>{u.push({data:C[I][0],inOut:d,type:I,metadata:{executionTime:i.executionTime,startTime:i.startTime}})})}return c&&l(i.inputOverride,"input"),l(i.data,"output"),u}function D(t){t.expanded=!t.expanded}function S(t){var m;if(!((m=k.value)==null?void 0:m.find(e=>e.node===t.node&&e.runIndex===t.runIndex))){a.value=[];return}a.value=[{node:t.node,runIndex:t.runIndex,data:s({node:t.node,runIndex:t.runIndex},!0)}]}function f(t){const c=b.getNodeByName(t);return c?N.getNodeType(c==null?void 0:c.type):null}function r(){A.value.length&&A.value[0].children.length&&S(A.value[0].children[0])}const T=(t,c,m,e=[])=>{var i,u;return{node:t,id:t,depth:c,startTime:((u=(i=m==null?void 0:m.data)==null?void 0:i.metadata)==null?void 0:u.startTime)??0,runIndex:(m==null?void 0:m.runIndex)??0,children:e}};function $(t,c){var C;const{connectionsByDestinationNode:m}=b.getCurrentWorkflow(),e=m[t],i=((C=k.value)==null?void 0:C.filter(d=>d.node===t))??[];if(!e)return i.map(d=>T(t,c,d));const l=Object.keys(e).filter(d=>d!==_.Main).flatMap(d=>e[d][0].flatMap(I=>$(I.node,c+1)));return i.length?i.map(d=>T(t,c,d,l)):(l.sort((d,I)=>d.startTime-I.startTime),[T(t,c,void 0,l)])}const k=O(()=>{var e;const t=b.getWorkflowResultDataByNodeName(o.node.name);if(!t||!Array.isArray(t))return;const c=(e=t[o.runIndex].metadata)==null?void 0:e.subRun;if(!Array.isArray(c))return;const m=c.flatMap(i=>s(i,!1).map(u=>({...i,data:u})));return m.sort((i,u)=>{var d,I,V,P;const l=((I=(d=i.data)==null?void 0:d.metadata)==null?void 0:I.startTime)||0,C=((P=(V=u.data)==null?void 0:V.metadata)==null?void 0:P.startTime)||0;return l-C}),m}),A=O(()=>{const t=o.node;return $(t.name,0)||[]});return ie(()=>o.runIndex,r,{immediate:!0}),(t,c)=>{const m=B("font-awesome-icon"),e=B("n8n-tooltip"),i=B("n8n-text");return k.value?(y(),g("div",{key:0,class:p(t.$style.container)},[w("div",{class:p({[t.$style.tree]:!0,[t.$style.slim]:t.slim})},[v(U(ee),{data:A.value,props:{label:"node"},"default-expand-all":"",indent:12,"expand-on-click-node":!1,"data-test-id":"lm-chat-logs-tree",onNodeClick:S},{default:R(({node:u,data:l})=>[w("div",{class:p({[t.$style.treeNode]:!0,[t.$style.isSelected]:M(l)}),"data-tree-depth":l.depth,style:le({"--item-depth":l.depth})},[l.children.length?(y(),g("button",{key:0,class:p(t.$style.treeToggle),onClick:C=>D(u)},[v(m,{icon:u.expanded?"angle-down":"angle-up"},null,8,["icon"])],10,Pe)):j("",!0),v(e,{disabled:!t.slim,placement:"right"},{content:R(()=>[x(h(u.label),1)]),default:R(()=>[w("span",{class:p(t.$style.leafLabel)},[v(Q,{"node-type":f(l.node),size:17},null,8,["node-type"]),t.slim?j("",!0):(y(),g("span",{key:0,textContent:h(u.label)},null,8,Je))],2)]),_:2},1032,["disabled"])],14,We)]),_:1},8,["data"])],2),w("div",{class:p(t.$style.runData)},[a.value.length===0?(y(),g("div",{key:0,class:p(t.$style.empty)},[v(i,{size:"large"},{default:R(()=>[x(h(t.$locale.baseText("ndv.output.ai.empty",{interpolate:{node:o.node.name}})),1)]),_:1})],2)):j("",!0),(y(!0),g(L,null,K(a.value,(u,l)=>(y(),g("div",{key:`${u.node}__${u.runIndex}__index`,"data-test-id":"lm-chat-logs-entry"},[v(Le,{"input-data":u,"content-index":l},null,8,["input-data","content-index"])]))),128))],2)],2)):j("",!0)}}}),Ke="_treeToggle_z0rh6_1",qe="_leafLabel_z0rh6_9",Ge="_empty_z0rh6_15",Qe="_title_z0rh6_19",Xe="_tree_z0rh6_1",Ye="_slim_z0rh6_32",Ze="_runData_z0rh6_36",et="_container_z0rh6_42",tt="_isSelected_z0rh6_69",nt="_treeNode_z0rh6_73",ot={treeToggle:Ke,leafLabel:qe,empty:Ge,title:Qe,tree:Xe,slim:Ye,runData:Ze,container:et,isSelected:tt,treeNode:nt},st={$style:ot},Bt=F(Fe,[["__cssModules",st]]);export{Bt as default};
|
|
13
|
-
//# sourceMappingURL=RunDataAi-
|
|
13
|
+
//# sourceMappingURL=RunDataAi-C3XiqNZa.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunDataAi-BVqsN7UN.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 (\n\t\t\t\t\t\t\texecData.action &&\n\t\t\t\t\t\t\ttypeof execData.action !== 'object' &&\n\t\t\t\t\t\t\texecData.action !== 'getMessages'\n\t\t\t\t\t\t) {\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","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-C3XiqNZa.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 (\n\t\t\t\t\t\t\texecData.action &&\n\t\t\t\t\t\t\ttypeof execData.action !== 'object' &&\n\t\t\t\t\t\t\texecData.action !== 'getMessages'\n\t\t\t\t\t\t) {\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","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,3 +1,3 @@
|
|
|
1
|
-
const __vite__fileDeps=["assets/RunDataJsonActions-
|
|
2
|
-
import{e as b,_ as P}from"./n8n-4UEsHtUL.js";import{V as v}from"./vue-json-pretty-Cqx2Hpq3.js";import{D as _}from"./NodeDetailsView-
|
|
3
|
-
//# sourceMappingURL=RunDataJson-
|
|
1
|
+
const __vite__fileDeps=["assets/RunDataJsonActions-BQBpmtOi.js","assets/pinia-sugP77Im.js","assets/n8n-4UEsHtUL.js","assets/axios-Mm4CS0gO.js","assets/esprima-next-nhoSXAeq.js","assets/luxon-CLwAIbs0.js","assets/vendor-Dv5OeN6t.js","assets/lodash-es-CZ1inz46.js","assets/n8n-C4uNEd0H.css","assets/jsonpath-rUxBTvsX.js","assets/index-1OxaEeO3.js","assets/flatted-DN8lQ2XG.js","assets/@vueuse/core-BBHtM40w.js","assets/@n8n/permissions-BxxteU-C.js","assets/dateformat-CIxnBJXX.js","assets/vue-i18n-Delvyc9x.js","assets/uuid-SoommWqA.js","assets/@n8n/codemirror-lang-sql-DBO6T13I.js","assets/@lezer/common-B6ct0j_v.js","assets/prettier-bS6l4Vb1.js","assets/@jsplumb/util-DS-9vq_E.js","assets/@jsplumb/core-CVBraiyY.js","assets/@jsplumb/common-CF-b-6-M.js","assets/@jsplumb/connector-bezier-BGU0Ovbw.js","assets/@jsplumb/browser-ui-BVF2KoJK.js","assets/codemirror-lang-html-n8n-CWDO6_kP.js","assets/@n8n/codemirror-lang-Dl0FW_KM.js","assets/fast-json-stable-stringify-BOfzoJX1.js","assets/timeago.js-CiyKClrF.js","assets/qrcode.vue-BGkPba5A.js","assets/vue3-touch-events-mV0oX_Sl.js","assets/chart.js-343vZi4M.js","assets/index-BhLXy8h2.css","assets/RunDataJsonActions-BAzswsWH.css"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]);
|
|
2
|
+
import{e as b,_ as P}from"./n8n-4UEsHtUL.js";import{V as v}from"./vue-json-pretty-Cqx2Hpq3.js";import{D as _}from"./NodeDetailsView-DcV7LI-g.js";import{et as J,j,K as k,dO as S,s as w,es as M,aA as N,a3 as E}from"./index-1OxaEeO3.js";import{m as $}from"./pinia-sugP77Im.js";import{M as A,T}from"./TextWithHighlights-kUoC0rXY.js";import{G as R,r as d,aK as C,ag as o,l as s,m as V,M as r,O as p,R as u,aM as H,U as l,I as m}from"./vendor-Dv5OeN6t.js";import"./axios-Mm4CS0gO.js";import"./esprima-next-nhoSXAeq.js";import"./luxon-CLwAIbs0.js";import"./lodash-es-CZ1inz46.js";import"./file-saver-By8WREO3.js";import"./dateFormatter-CfbOITvW.js";import"./dateformat-CIxnBJXX.js";import"./RunDataAi-C3XiqNZa.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./@n8n/permissions-BxxteU-C.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";import"./useWorkflowActivate-npf1npdP.js";const I=C(async()=>await b(()=>import("./RunDataJsonActions-BQBpmtOi.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]))),O=R({name:"RunDataJson",components:{VueJsonPretty:v,Draggable:_,RunDataJsonActions:I,MappingPill:A,TextWithHighlights:T},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 e=E(),a=d(J),n=d(null),h=d("json");return{externalHooks:e,selectedJsonPath:a,draggingPath:n,displayMode:h}},computed:{...$(k,j),jsonData(){return S(this.inputData)},highlight(){return this.ndvStore.highlightDraggables}},methods:{getShortKey(e){return e?w(e.dataset.name||"",16,2):""},getJsonParameterPath(e){const a=e.replace(/^(\["?\d"?])/,"");return M({nodeName:this.node.name,distanceFromActive:this.distanceFromActive,path:a})},onDragStart(e){e!=null&&e.dataset.path&&(this.draggingPath=e.dataset.path),this.ndvStore.resetMappingTelemetry()},onDragEnd(e){this.draggingPath=null;const a=this.ndvStore.mappingTelemetry,n={src_node_type:this.node.type,src_field_name:e.dataset.name||"",src_nodes_back:this.distanceFromActive,src_run_index:this.runIndex,src_runs_total:this.totalRuns,src_field_nest_level:e.dataset.depth||0,src_view:"json",src_element:e,success:!1,...a};setTimeout(()=>{this.externalHooks.run("runDataJson.onDragEnd",n),this.$telemetry.track("User dragged data for mapping",n,{withPostHog:!0})},1e3)},getContent(e){return N(e)?`"${e}"`:JSON.stringify(e)},getListItemName(e){return e.replace(/^(\["?\d"?]\.?)/g,"")}}}),F="_jsonDisplay_uww64_1",K="_mappable_uww64_19",B="_highlight_uww64_25",W="_dragged_uww64_26",q={jsonDisplay:F,mappable:K,highlight:B,dragged:W};function L(e,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([e.$style.jsonDisplay,{[e.$style.highlight]:e.highlight}])},[(s(),r(H,null,{default:p(()=>[e.editMode.enabled?u("",!0):(s(),r(c,{key:0,node:e.node,"push-ref":e.pushRef,"display-mode":e.displayMode,"distance-from-active":e.distanceFromActive,"selected-json-path":e.selectedJsonPath,"json-data":e.jsonData,"pane-type":e.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:!e.mappingEnabled,onDragstart:e.onDragStart,onDragend:e.onDragEnd},{preview:p(({canDrop:t,el:g})=>[g?(s(),r(y,{key:0,html:e.getShortKey(g),"can-drop":t},null,8,["html","can-drop"])):u("",!0)]),default:p(()=>[l(f,{data:e.jsonData,deep:10,"show-length":!0,"selected-value":e.selectedJsonPath,"root-path":"","selectable-type":"single",class:"json-data","onUpdate:selectedValue":a[0]||(a[0]=t=>e.selectedJsonPath=t)},{renderNodeKey:p(({node:t})=>[l(i,{content:e.getContent(t.key),search:e.search,"data-target":"mappable","data-value":e.getJsonParameterPath(t.path),"data-name":t.key,"data-path":t.path,"data-depth":t.level,class:m({[e.$style.mappable]:e.mappingEnabled,[e.$style.dragged]:e.draggingPath===t.path})},null,8,["content","search","data-value","data-name","data-path","data-depth","class"])]),renderNodeValue:p(({node:t})=>[isNaN(t.index)?(s(),r(i,{key:0,content:e.getContent(t.content),search:e.search},null,8,["content","search"])):(s(),r(i,{key:1,content:e.getContent(t.content),search:e.search,"data-target":"mappable","data-value":e.getJsonParameterPath(t.path),"data-name":e.getListItemName(t.path),"data-path":t.path,"data-depth":t.level,class:m([{[e.$style.mappable]:e.mappingEnabled,[e.$style.dragged]:e.draggingPath===t.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:q},$e=P(O,[["render",L],["__cssModules",U]]);export{$e as default};
|
|
3
|
+
//# sourceMappingURL=RunDataJson-CMcOD-78.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\t--color-line-break: var(--color-code-line-break);\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-6Yfwd78r.js"}
|
|
1
|
+
{"version":3,"mappings":";69CA+FA,MAAMA,EAAqBC,EAC1B,SAAY,MAAMC,EAAA,WAAO,kCAAqC,iHAC/D,EAEAC,EAAeC,EAAgB,CAC9B,KAAM,cACN,WAAY,CACX,cAAAC,EACA,UAAAC,EACA,mBAAAN,EACA,YAAAO,EACA,mBAAAC,CACD,EACA,MAAO,CACN,SAAU,CACT,KAAM,OACN,QAAS,KAAO,GACjB,EACA,QAAS,CACR,KAAM,MACP,EACA,SAAU,CACT,KAAM,MACP,EACA,KAAM,CACL,KAAM,OACN,SAAU,EACX,EACA,UAAW,CACV,KAAM,MACN,SAAU,EACX,EACA,eAAgB,CACf,KAAM,OACP,EACA,mBAAoB,CACnB,KAAM,OACN,SAAU,EACX,EACA,SAAU,CACT,KAAM,MACP,EACA,UAAW,CACV,KAAM,MACP,EACA,OAAQ,CACP,KAAM,MACP,CACD,EACA,OAAQ,CACP,MAAMC,EAAgBC,IAEhBC,EAAmBC,EAAIC,CAAmB,EAC1CC,EAAeF,EAAmB,IAAI,EACtCG,EAAcH,EAAI,MAAM,EAEvB,OACN,cAAAH,EACA,iBAAAE,EACA,aAAAG,EACA,YAAAC,CAAA,CAEF,EACA,SAAU,CACT,GAAGC,EAAUC,EAAaC,CAAiB,EAC3C,UAA0B,CAClB,OAAAC,EAAoB,KAAK,SAAS,CAC1C,EACA,WAAqB,CACpB,OAAO,KAAK,SAAS,mBACtB,CACD,EACA,QAAS,CACR,YAAYC,EAAyB,CACpC,OAAKA,EAIEC,EAAQD,EAAG,QAAQ,MAAQ,GAAI,GAAI,CAAC,EAHnC,EAIT,EACA,qBAAqBE,EAAsB,CAC1C,MAAMC,EAAUD,EAAK,QAAQ,eAAgB,EAAE,EAE/C,OAAOE,EAAoB,CAC1B,SAAU,KAAK,KAAK,KACpB,mBAAoB,KAAK,mBACzB,KAAMD,CAAA,CACN,CACF,EACA,YAAYH,EAAiB,CACxBA,GAAA,MAAAA,EAAI,QAAQ,OACV,kBAAeA,EAAG,QAAQ,MAGhC,KAAK,SAAS,uBACf,EACA,UAAUA,EAAiB,CAC1B,KAAK,aAAe,KACd,MAAAK,EAAmB,KAAK,SAAS,iBACjCC,EAAmB,CACxB,cAAe,KAAK,KAAK,KACzB,eAAgBN,EAAG,QAAQ,MAAQ,GACnC,eAAgB,KAAK,mBACrB,cAAe,KAAK,SACpB,eAAgB,KAAK,UACrB,qBAAsBA,EAAG,QAAQ,OAAS,EAC1C,SAAU,OACV,YAAaA,EACb,QAAS,GACT,GAAGK,CAAA,EAGJ,WAAW,IAAM,CACX,KAAK,cAAc,IAAI,wBAAyBC,CAAgB,EAChE,gBAAW,MAAM,gCAAiCA,EAAkB,CACxE,YAAa,GACb,GACC,GAAI,CACR,EACA,WAAWC,EAAwB,CAC3B,OAAAC,EAASD,CAAK,EAAI,IAAIA,CAAK,IAAM,KAAK,UAAUA,CAAK,CAC7D,EACA,gBAAgBL,EAAsB,CAC9B,OAAAA,EAAK,QAAQ,mBAAoB,EAAE,CAC3C,CACD,CACD,CAAC,+QA5NAO,EAwEM,yCAvEL,CAWWC,EAAA,qBAAAA,EAAA,kBAAAA,EAAA,oBATcC,EAAAC,EAAA,MADxB,QAAAC,EAAA,KAAAH,EAHH,iBAAAI,EAAA,UAKe,EAAAH,EAAAI,EAAA,CACV,MACA,KAAAL,EAAA,KACA,WAAAA,EAAA,QACA,eAAkBA,EAAA,YAClB,uBAAWM,EAAQ,mBACnB,qBAAWC,EAAQ,6BAAAP,EAAA,SAXxB,YAAAA,EAAA,4HAcE,SAECQ,EAA0B,CACzB,eACA,kBAAWC,WACX,SAAO,CAAEC,2CAEC,UAAOV,EAAA,wBACjB,QAAAW,EAAqE,GAAArB,CAAA,KAAAA,GAAAsB,EAAA,EAAzBX,EAAAY,EAAA,CAAI,WAAAb,EAAA,YAAAV,CAAA,EAtBpD,WAAAqB,CAAA,EAuEmB,6BAAAP,EAAA,SA9CV,QAAAD,EAAEG,IAAQ,CACNQ,EAAAC,EAAA,CACR,KAAAf,EAAA,SACA,QACD,cAAY,GACZ,iBAAeA,EAAC,iBAChB,YAAM,GACL,6CAEU,yBAaRgB,EAb6B,KAAAA,EAAA,GAAAC,GAAAjB,EAAA,iBAAAiB,EAAA,GAEpBC,4BAAmB,CAAAJ,EACpBK,EAAM,CACf,UAAW,WAAWC,EAAA,KACrB,OAAUpB,EAAA,OACV,cAAW,WACX,aAAWA,EAAK,qBAAIoB,EAAA,MACpB,YAAUA,EAAM,IAChB,YA3CPA,EAAA,KA2CwBC,aAAeD,EAAGE,MAAwBD,MAAOE,EAAUvC,kFAMpE,UAAe,UACzB,SADiC,gFACjC,CAIE,MAAAoC,KAAA,CAtDP,MAAAA,EAAA,QAAAR,MAoD2BY,EAAY,CAChC,cAAAxB,EAAA,WAAAoB,EAAA,SAEF,OAAApB,EAAA,QAvDL,+BAAAY,EAAA,IAyD2BY,EAAY,CAChC,MACD,UAAW,WAAWJ,EAAA,SACrB,OAAUpB,EAAA,OACV,cAAWyB,WACX,aAAWzB,EAAK,qBAAIoB,EAAA,MACpB,YAAUpB,EAAM,gBAAMoB,EAAA,MACtB,YAhEPA,EAAA,KAgEwBC,aAAkBC,QAAwBD,MAAOE,EAAUvC,KAIvE,OAAe,UAAAgB,EAAA,gBAAAA,EAAA,gBAAAA,EAAA,eAAAoB,EAAA,uBApE3B","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\t--color-line-break: var(--color-code-line-break);\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-CMcOD-78.js"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{s as v,m as g}from"./pinia-sugP77Im.js";import{j as
|
|
2
|
-
//# sourceMappingURL=RunDataJsonActions-
|
|
1
|
+
import{s as v,m as g}from"./pinia-sugP77Im.js";import{j as T}from"./jsonpath-rUxBTvsX.js";import{et as h,K as y,ap as S,aK as b,a6 as J,u as $,n as C,j as D,a4 as x,dQ as k,dO as j,eB as P,x as N}from"./index-1OxaEeO3.js";import{G as I,ag as l,l as d,m as O,M as f,O as r,U as p,S as m,T as u,p as R,I as V}from"./vendor-Dv5OeN6t.js";import{_ as A}from"./n8n-4UEsHtUL.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const B=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(x,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=k(this.pinnedData.data.value):t=j(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)}}}),G="_actionsGroup_wlnwy_1",M={actionsGroup:G},q={class:"el-dropdown-link"};function E(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(),O("div",{class:V(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]=H=>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(()=>[m(u(t.i18n.baseText("runData.copyValue")),1)]),_:1}),p(c,{command:{command:"itemPath"},divided:""},{default:r(()=>[m(u(t.i18n.baseText("runData.copyItemPath")),1)]),_:1}),p(c,{command:{command:"parameterPath"}},{default:r(()=>[m(u(t.i18n.baseText("runData.copyParameterPath")),1)]),_:1})]),_:1})]),default:r(()=>[R("span",q,[p(i,{title:t.i18n.baseText("runData.copyToClipboard"),icon:"copy",type:"tertiary",circle:!1},null,8,["title"])])]),_:1},8,["onCommand"]))],2)}const F={$style:M},gt=A(B,[["render",E],["__cssModules",F]]);export{gt as default};
|
|
2
|
+
//# sourceMappingURL=RunDataJsonActions-BQBpmtOi.js.map
|
package/dist/assets/{RunDataJsonActions-5ig3g4km.js.map → RunDataJsonActions-BQBpmtOi.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunDataJsonActions-5ig3g4km.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-BQBpmtOi.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,3 +1,3 @@
|
|
|
1
|
-
import{s as
|
|
2
|
-
`),(g,d)=>(s(),n(A,{key:`line-${d}`},[d>0?(s(),n("span",{key:0,class:o(e.$style.newLine)},"\\n",2)):p("",!0),P(B(g),1)],64))),128))],2)):p("",!0),e.level>0&&l.value?(s(),n("input",{key:2,id:e.subKey,type:"checkbox",checked:""},null,8,Z)):p("",!0),e.level>0&&l.value?(s(),n("label",{key:3,class:o(e.$style.toggle),for:e.subKey},[S(j,{icon:"angle-up"})],10,x)):p("",!0),l.value?(s(),n("div",{key:4,class:o({[e.$style.sub]:!0,[e.$style.flat]:c.value})},[(s(!0),n(A,null,
|
|
3
|
-
//# sourceMappingURL=RunDataSchema-
|
|
1
|
+
import{s as V,es as L,eu as C,K as W,O as H,bM as K,a3 as O,dp as z}from"./index-1OxaEeO3.js";import{T as w,M as J}from"./TextWithHighlights-kUoC0rXY.js";import{G as F,e as r,ag as T,l as s,m as n,I as o,p as I,U as S,M as h,R as p,F as A,a7 as M,S as P,T as B,J as U,r as q,O as D,u as G}from"./vendor-Dv5OeN6t.js";import{_ as N}from"./n8n-4UEsHtUL.js";import{D as Q}from"./NodeDetailsView-DcV7LI-g.js";import"./pinia-sugP77Im.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";import"./file-saver-By8WREO3.js";import"./vue-json-pretty-Cqx2Hpq3.js";import"./dateFormatter-CfbOITvW.js";import"./RunDataAi-C3XiqNZa.js";import"./useWorkflowActivate-npf1npdP.js";const X=["title"],Y=["data-value","data-name","data-path","data-depth"],Z=["id"],x=["for"],ee=F({__name:"RunDataSchemaItem",props:{schema:{},level:{},parent:{},subKey:{},paneType:{},mappingEnabled:{type:Boolean},draggingPath:{},distanceFromActive:{},node:{},search:{}},setup(b){const a=b,l=r(()=>Array.isArray(a.schema.value)),y=r(()=>l.value?a.schema.value:[]),m=r(()=>{var e;return((e=a.parent)==null?void 0:e.type)==="array"}),c=r(()=>a.level===0&&Array.isArray(a.schema.value)&&a.schema.value.every(e=>!Array.isArray(e.value))),v=r(()=>m.value?`[${a.schema.key}]`:a.schema.key),k=r(()=>m.value?`${a.schema.type}[${a.schema.key}]`:a.schema.key),_=r(()=>Array.isArray(a.schema.value)?"":V(a.schema.value,600,0)),f=r(()=>a.draggingPath===a.schema.path),t=e=>L({nodeName:a.node.name,distanceFromActive:a.distanceFromActive,path:e}),i=e=>`${e*.033}s`,u=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 C(e),""}};return(e,$)=>{var E;const j=T("font-awesome-icon"),R=T("run-data-schema-item",!0);return s(),n("div",{class:o(e.$style.item),"data-test-id":"run-data-schema-item"},[e.level>0||e.level===0&&!l.value?(s(),n("div",{key:0,title:e.schema.type,class:o({[e.$style.pill]:!0,[e.$style.mappable]:e.mappingEnabled,[e.$style.highlight]:f.value})},[I("span",{class:o(e.$style.label),"data-value":t(e.schema.path),"data-name":k.value,"data-path":e.schema.path,"data-depth":e.level,"data-target":"mappable"},[S(j,{icon:u(e.schema.type),size:"sm"},null,8,["icon"]),m.value?(s(),h(w,{key:0,content:(E=a.parent)==null?void 0:E.key,search:a.search},null,8,["content","search"])):p("",!0),v.value?(s(),h(w,{key:1,class:o({[e.$style.arrayIndex]:m.value}),content:v.value,search:a.search},null,8,["class","content","search"])):p("",!0)],10,Y)],10,X)):p("",!0),_.value?(s(),n("span",{key:1,class:o(e.$style.text)},[(s(!0),n(A,null,M(_.value.split(`
|
|
2
|
+
`),(g,d)=>(s(),n(A,{key:`line-${d}`},[d>0?(s(),n("span",{key:0,class:o(e.$style.newLine)},"\\n",2)):p("",!0),P(B(g),1)],64))),128))],2)):p("",!0),e.level>0&&l.value?(s(),n("input",{key:2,id:e.subKey,type:"checkbox",checked:""},null,8,Z)):p("",!0),e.level>0&&l.value?(s(),n("label",{key:3,class:o(e.$style.toggle),for:e.subKey},[S(j,{icon:"angle-up"})],10,x)):p("",!0),l.value?(s(),n("div",{key:4,class:o({[e.$style.sub]:!0,[e.$style.flat]:c.value})},[(s(!0),n(A,null,M(y.value,(g,d)=>(s(),h(R,{key:`${g.type}-${e.level}-${d}`,schema:g,level:e.level+1,parent:e.schema,"pane-type":e.paneType,"sub-key":`${e.paneType}_${g.type}-${e.level}-${d}`,"mapping-enabled":e.mappingEnabled,"dragging-path":e.draggingPath,"distance-from-active":e.distanceFromActive,node:e.node,style:U({transitionDelay:i(d)}),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)}}}),ae="_item_jk6di_1",te="_sub_jk6di_14",se="_toggle_jk6di_20",ne="_flat_jk6di_41",re="_pill_jk6di_51",oe="_mappable_jk6di_51",le="_label_jk6di_90",ie="_arrayIndex_jk6di_95",pe="_text_jk6di_101",ce="_newLine_jk6di_110",me={item:ae,sub:te,toggle:se,flat:ne,pill:re,mappable:oe,label:le,arrayIndex:ie,text:pe,newLine:ce},ue={$style:me},de=N(ee,[["__cssModules",ue]]),he=F({__name:"RunDataSchema",props:{data:{},mappingEnabled:{type:Boolean},distanceFromActive:{default:0},runIndex:{},totalRuns:{},paneType:{},node:{},search:{}},setup(b){const a=b,l=q(""),y=W(),{getSchemaForExecutionData:m}=K(),c=r(()=>m(a.data)),v=r(()=>{const t=c.value.type==="object"||c.value.type==="array",i=Array.isArray(c.value.value)&&c.value.value.length===0;return t&&i}),k=r(()=>y.highlightDraggables),_=t=>{var i;(i=t==null?void 0:t.dataset)!=null&&i.path&&(l.value=t.dataset.path),y.resetMappingTelemetry()},f=t=>{l.value="",setTimeout(()=>{var e;const i=y.mappingTelemetry,u={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,...i};O().run("runDataJson.onDragEnd",u),z.track("User dragged data for mapping",u,{withPostHog:!0})},1e3)};return(t,i)=>{const u=T("n8n-info-tip");return s(),n("div",{class:o([t.$style.schemaWrapper,{highlightSchema:k.value}])},[v.value?(s(),h(u,{key:0},{default:D(()=>[P(B(G(H).baseText("dataMapping.schemaView.emptyData")),1)]),_:1})):(s(),h(Q,{key:1,type:"mapping","target-data-key":"mappable",disabled:!t.mappingEnabled,onDragstart:_,onDragend:f},{preview:D(({canDrop:e,el:$})=>[$?(s(),h(J,{key:0,html:$.outerHTML,"can-drop":e},null,8,["html","can-drop"])):p("",!0)]),default:D(()=>[I("div",{class:o(t.$style.schema)},[S(de,{schema:c.value,level:0,parent:null,"pane-type":t.paneType,"sub-key":`${c.value.type}-0-0`,"mapping-enabled":t.mappingEnabled,"dragging-path":l.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},aa=N(he,[["__cssModules",_e]]);export{aa as default};
|
|
3
|
+
//# sourceMappingURL=RunDataSchema-CF4YH-8y.js.map
|