diff --git a/packages/@n8n/task-runner/src/js-task-runner/__tests__/result-validation.test.ts b/packages/@n8n/task-runner/src/js-task-runner/__tests__/result-validation.test.ts index 7112468863..324ff6f749 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/__tests__/result-validation.test.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/__tests__/result-validation.test.ts @@ -28,6 +28,7 @@ describe('result validation', () => { ['binary', {}], ['pairedItem', {}], ['error', {}], + ['index', {}], // temporarily allowed until refactored out ])( 'should not throw an error if the output item has %s key in addition to json', (key, value) => { diff --git a/packages/@n8n/task-runner/src/js-task-runner/result-validation.ts b/packages/@n8n/task-runner/src/js-task-runner/result-validation.ts index 4453521bf7..17c4df9a6e 100644 --- a/packages/@n8n/task-runner/src/js-task-runner/result-validation.ts +++ b/packages/@n8n/task-runner/src/js-task-runner/result-validation.ts @@ -4,7 +4,19 @@ import type { INodeExecutionData } from 'n8n-workflow'; import { ValidationError } from './errors/validation-error'; import { isObject } from './obj-utils'; -export const REQUIRED_N8N_ITEM_KEYS = new Set(['json', 'binary', 'pairedItem', 'error']); +export const REQUIRED_N8N_ITEM_KEYS = new Set([ + 'json', + 'binary', + 'pairedItem', + 'error', + + /** + * The `index` key was added accidentally to Function, FunctionItem, Gong, + * Execute Workflow, and ToolWorkflowV2, so we need to allow it temporarily. + * Once we stop using it in all nodes, we can stop allowing the `index` key. + */ + 'index', +]); function validateTopLevelKeys(item: INodeExecutionData, itemIndex: number) { for (const key in item) { diff --git a/packages/nodes-base/nodes/Code/Sandbox.ts b/packages/nodes-base/nodes/Code/Sandbox.ts index e11a078f54..b3e3057d23 100644 --- a/packages/nodes-base/nodes/Code/Sandbox.ts +++ b/packages/nodes-base/nodes/Code/Sandbox.ts @@ -22,7 +22,19 @@ export interface SandboxContext extends IWorkflowDataProxyData { helpers: IExecuteFunctions['helpers']; } -export const REQUIRED_N8N_ITEM_KEYS = new Set(['json', 'binary', 'pairedItem', 'error']); +export const REQUIRED_N8N_ITEM_KEYS = new Set([ + 'json', + 'binary', + 'pairedItem', + 'error', + + /** + * The `index` key was added accidentally to Function, FunctionItem, Gong, + * Execute Workflow, and ToolWorkflowV2, so we need to allow it temporarily. + * Once we stop using it in all nodes, we can stop allowing the `index` key. + */ + 'index', +]); export function getSandboxContext( this: IExecuteFunctions | ISupplyDataFunctions, diff --git a/packages/nodes-base/nodes/Code/test/Code.node.test.ts b/packages/nodes-base/nodes/Code/test/Code.node.test.ts index 486b6b673d..595e4d177e 100644 --- a/packages/nodes-base/nodes/Code/test/Code.node.test.ts +++ b/packages/nodes-base/nodes/Code/test/Code.node.test.ts @@ -40,6 +40,13 @@ describe('Code Node unit test', () => { [{ json: { count: 42 } }], [{ json: { count: 42 } }], ], + + // temporarily allowed until refactored out + 'should handle an index key': [ + [{ json: { count: 42 }, index: 0 }], + [{ json: { count: 42 }, index: 0 }], + ], + 'should handle when returned data is not an array': [ { json: { count: 42 } }, [{ json: { count: 42 } }],