UNPKG

n8n-editor-ui

Version:

Workflow Editor UI for n8n

193 lines (192 loc) 7.82 kB
import { o as __toESM } from "./chunk-6z4oVpB-.js"; import { C as computed, D as createElementBlock, E as createCommentVNode, Gt as unref, M as createVNode, P as defineComponent, T as createBlock, _ as Fragment, et as openBlock, it as renderList, vn as normalizeClass } from "./vue.runtime.esm-bundler-tP5dCd7J.js"; import { _t as useI18n } from "./_MapCache-ficiegRb.js"; import { vt as require_utils, xt as N8nIconButton_default } from "./src-DgvumQTi.js"; import { t as __plugin_vue_export_helper_default } from "./_plugin-vue_export-helper-BwBpWJRZ.js"; import { w as require_lib } from "./truncate-B1HVeveJ.js"; import { v as useToast } from "./builder.store-sBTWwxRU.js"; import { t as useClipboard } from "./useClipboard-CyG-SBdG.js"; import { t as VueMarkdown_default } from "./VueMarkdown-D9lDzMKr.js"; import { n as splitTextBySearch, t as TextWithHighlights_default } from "./TextWithHighlights-DjzuDrgO.js"; import { t as core_default } from "./core-BbiIkN91.js"; var import_lib = /* @__PURE__ */ __toESM(require_lib()); var import_utils = /* @__PURE__ */ __toESM(require_utils()); function getReferencedData(taskData) { const returnData = []; function addFunction(data, inOut) { if (!data) return; Object.keys(data).map((type) => { returnData.push({ data: data[type][0], inOut, type, source: taskData.source, metadata: { executionTime: taskData.executionTime, startTime: taskData.startTime, subExecution: taskData.metadata?.subExecution } }); }); } addFunction(taskData.inputOverride, "input"); addFunction(taskData.data, "output"); return returnData; } function createHtmlFragmentWithSearchHighlight(text, search) { const escaped = (0, import_lib.escapeHtml)(text); return search ? splitTextBySearch(escaped, search).map((part) => part.isMatched ? `<mark>${part.content}</mark>` : part.content).join("") : escaped; } function createSearchHighlightPlugin(search) { return (md) => { md.renderer.rules.text = (tokens, idx) => createHtmlFragmentWithSearchHighlight(tokens[idx].content, search); md.renderer.rules.code_inline = (tokens, idx, _, __, slf) => `<code${slf.renderAttrs(tokens[idx])}>${createHtmlFragmentWithSearchHighlight(tokens[idx].content, search)}</code>`; md.renderer.rules.code_block = (tokens, idx, _, __, slf) => `<pre${slf.renderAttrs(tokens[idx])}><code>${createHtmlFragmentWithSearchHighlight(tokens[idx].content, search)}</code></pre>\n`; md.renderer.rules.fence = (tokens, idx, options, _, slf) => { const token = tokens[idx]; const info = token.info ? (0, import_utils.unescapeAll)(token.info).trim() : ""; let langName = ""; let langAttrs = ""; if (info) { const arr = info.split(/(\s+)/g); langName = arr[0]; langAttrs = arr.slice(2).join(""); } const highlighted = options.highlight?.(token.content, langName, langAttrs) ?? createHtmlFragmentWithSearchHighlight(token.content, search); if (highlighted.indexOf("<pre") === 0) return highlighted + "\n"; return `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\n`; }; }; } var _hoisted_1 = ["data-content-type"]; var RunDataParsedAiContent_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({ __name: "RunDataParsedAiContent", props: { content: {}, compact: { type: Boolean, default: false }, search: {}, renderType: {} }, setup(__props) { const i18n = useI18n(); const clipboard = useClipboard(); const { showMessage } = useToast(); const vueMarkdownPlugins = computed(() => [createSearchHighlightPlugin(__props.search)]); function isJsonString(text) { try { JSON.parse(text); return true; } catch (e) { return false; } } const markdownOptions = { highlight(str, lang) { if (lang && core_default.getLanguage(lang)) try { return core_default.highlight(str, { language: lang }).value; } catch {} } }; function isMarkdown(jsonMarkdown) { if (typeof jsonMarkdown !== "string") return false; return [ /^# .+/gm, /\*{1,2}.+\*{1,2}/g, /\[.+\]\(.+\)/g, /```[\s\S]+```/g ].some((pattern) => pattern.test(jsonMarkdown)); } function formatToJsonMarkdown(data) { return "```json\n" + data + "\n```"; } function jsonToMarkdown(data) { if (isMarkdown(data)) return data; if (Array.isArray(data) && data.length && typeof data[0] !== "number") return data.map((item) => jsonToMarkdown(item)).join("\n\n").trim(); if (typeof data === "string") { if (isJsonString(data)) return formatToJsonMarkdown(data); return data; } return formatToJsonMarkdown(JSON.stringify(data, null, 2)); } function onCopyToClipboard(object) { try { clipboard.copy(JSON.stringify(object, void 0, 2)); showMessage({ title: i18n.baseText("generic.copiedToClipboard"), type: "success" }); } catch {} } return (_ctx, _cache) => { return openBlock(), createElementBlock("div", { class: normalizeClass([_ctx.$style.component, _ctx.compact ? _ctx.$style.compact : ""]) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.content, ({ parsedContent, raw }, index) => { return openBlock(), createElementBlock("div", { key: index, class: normalizeClass(_ctx.$style.contentText), "data-content-type": parsedContent?.type }, [parsedContent && _ctx.renderType === "rendered" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [parsedContent.type === "json" ? (openBlock(), createBlock(unref(VueMarkdown_default), { key: 0, source: jsonToMarkdown(parsedContent.data), class: normalizeClass(_ctx.$style.markdown), options: markdownOptions, plugins: vueMarkdownPlugins.value }, null, 8, [ "source", "class", "plugins" ])) : parsedContent.type === "markdown" ? (openBlock(), createBlock(unref(VueMarkdown_default), { key: 1, source: parsedContent.data, class: normalizeClass(_ctx.$style.markdown), options: markdownOptions, plugins: vueMarkdownPlugins.value }, null, 8, [ "source", "class", "plugins" ])) : parsedContent.type === "text" ? (openBlock(), createBlock(TextWithHighlights_default, { key: 2, class: normalizeClass(_ctx.$style.runText), content: String(parsedContent.data), search: _ctx.search }, null, 8, [ "class", "content", "search" ])) : createCommentVNode("", true)], 64)) : (openBlock(), createElementBlock("div", { key: 1, class: normalizeClass(_ctx.$style.rawContent) }, [createVNode(unref(N8nIconButton_default), { size: "small", class: normalizeClass(_ctx.$style.copyToClipboard), type: "secondary", title: unref(i18n).baseText("nodeErrorView.copyToClipboard"), icon: "files", onClick: ($event) => onCopyToClipboard(raw) }, null, 8, [ "class", "title", "onClick" ]), createVNode(unref(VueMarkdown_default), { source: jsonToMarkdown(raw), class: normalizeClass(_ctx.$style.markdown), plugins: vueMarkdownPlugins.value }, null, 8, [ "source", "class", "plugins" ])], 2))], 10, _hoisted_1); }), 128))], 2); }; } }); var RunDataParsedAiContent_vue_vue_type_style_index_0_lang_module_default = { runText: "_runText_1dyxh_123", markdown: "_markdown_1dyxh_128", compact: "_compact_1dyxh_151", copyToClipboard: "_copyToClipboard_1dyxh_159", rawContent: "_rawContent_1dyxh_169", contentText: "_contentText_1dyxh_173" }; var RunDataParsedAiContent_default = /* @__PURE__ */ __plugin_vue_export_helper_default(RunDataParsedAiContent_vue_vue_type_script_setup_true_lang_default, [["__cssModules", { "$style": RunDataParsedAiContent_vue_vue_type_style_index_0_lang_module_default }]]); export { getReferencedData as n, RunDataParsedAiContent_default as t };