diff --git a/packages/editor-ui/src/components/CodeNodeEditor/completions/base.completions.ts b/packages/editor-ui/src/components/CodeNodeEditor/completions/base.completions.ts index f03470915b729..ed8687616bbd3 100644 --- a/packages/editor-ui/src/components/CodeNodeEditor/completions/base.completions.ts +++ b/packages/editor-ui/src/components/CodeNodeEditor/completions/base.completions.ts @@ -92,6 +92,10 @@ export const baseCompletions = defineComponent({ label: `${prefix}runIndex`, info: this.$locale.baseText('codeNodeEditor.completer.$runIndex'), }, + { + label: `${prefix}nodeVersion`, + info: this.$locale.baseText('codeNodeEditor.completer.$nodeVersion'), + }, ]; const options: Completion[] = TOP_LEVEL_COMPLETIONS_IN_BOTH_MODES.map(addVarType); diff --git a/packages/editor-ui/src/constants.ts b/packages/editor-ui/src/constants.ts index aedd7743ab79f..0dc74a40a6d95 100644 --- a/packages/editor-ui/src/constants.ts +++ b/packages/editor-ui/src/constants.ts @@ -518,6 +518,7 @@ export const MAPPING_PARAMS = [ '$today', '$vars', '$workflow', + '$nodeVersion', ]; export const DEFAULT_STICKY_HEIGHT = 160; diff --git a/packages/editor-ui/src/plugins/codemirror/completions/constants.ts b/packages/editor-ui/src/plugins/codemirror/completions/constants.ts index cb8b3aeb3fadd..b55fba66e327e 100644 --- a/packages/editor-ui/src/plugins/codemirror/completions/constants.ts +++ b/packages/editor-ui/src/plugins/codemirror/completions/constants.ts @@ -133,6 +133,11 @@ export const ROOT_DOLLAR_COMPLETIONS: Completion[] = [ section: METHODS_SECTION, info: i18n.rootVars.$min, }, + { + label: '$nodeVersion', + section: METADATA_SECTION, + info: i18n.rootVars.$nodeVersion, + }, ]; export const STRING_RECOMMENDED_OPTIONS = [ diff --git a/packages/editor-ui/src/plugins/i18n/index.ts b/packages/editor-ui/src/plugins/i18n/index.ts index 1f2fe1395fb1e..c8c0bab310e8e 100644 --- a/packages/editor-ui/src/plugins/i18n/index.ts +++ b/packages/editor-ui/src/plugins/i18n/index.ts @@ -379,6 +379,7 @@ export class I18nClass { $request: this.baseText('codeNodeEditor.completer.$request'), $response: this.baseText('codeNodeEditor.completer.$response'), $pageCount: this.baseText('codeNodeEditor.completer.$pageCount'), + $nodeVersion: this.baseText('codeNodeEditor.completer.$nodeVersion'), } as const satisfies Record; proxyVars: Record = { diff --git a/packages/editor-ui/src/plugins/i18n/locales/en.json b/packages/editor-ui/src/plugins/i18n/locales/en.json index 548db56c76cd8..82c489b3d3f21 100644 --- a/packages/editor-ui/src/plugins/i18n/locales/en.json +++ b/packages/editor-ui/src/plugins/i18n/locales/en.json @@ -217,6 +217,7 @@ "codeNodeEditor.completer.$prevNode.runIndex": "The run of the node providing input data to the current one", "codeNodeEditor.completer.$runIndex": "The index of the current run of this node", "codeNodeEditor.completer.$today": "A timestamp representing the current day (at midnight, as a Luxon object)", + "codeNodeEditor.completer.$nodeVersion": "The type version of the current node", "codeNodeEditor.completer.$vars": "The variables defined in your instance", "codeNodeEditor.completer.$vars.varName": "Variable set on this n8n instance. All variables evaluate to strings.", "codeNodeEditor.completer.$secrets": "The external secrets connected to your instance", diff --git a/packages/workflow/src/WorkflowDataProxy.ts b/packages/workflow/src/WorkflowDataProxy.ts index e8a1091783fdf..4f29e64670479 100644 --- a/packages/workflow/src/WorkflowDataProxy.ts +++ b/packages/workflow/src/WorkflowDataProxy.ts @@ -995,6 +995,7 @@ export class WorkflowDataProxy { // Before resolving the pairedItem make sure that the requested node comes in the // graph before the current one const activeNode = that.workflow.getNode(that.activeNodeName); + let contextNode = that.contextNodeName; if (activeNode) { const parentMainInputNode = that.workflow.getParentMainInputNode(activeNode); @@ -1281,6 +1282,7 @@ export class WorkflowDataProxy { $thisItem: that.connectionInputData[that.itemIndex], $thisItemIndex: this.itemIndex, $thisRunIndex: this.runIndex, + $nodeVersion: that.workflow.getNode(that.activeNodeName)?.typeVersion, }; return new Proxy(base, {