feat(Simulate Node): New node (no-changelog) (#9109)

This commit is contained in:
Michael Kret
2024-05-08 14:02:36 +03:00
committed by GitHub
parent c4bf5b2b92
commit 6b6e8dfc33
15 changed files with 344 additions and 1 deletions

View File

@@ -0,0 +1,79 @@
import { sleep, NodeOperationError, jsonParse } from 'n8n-workflow';
import type {
IDataObject,
ITriggerFunctions,
INodeExecutionData,
INodeType,
INodeTypeDescription,
ITriggerResponse,
} from 'n8n-workflow';
import {
executionDurationProperty,
iconSelector,
jsonOutputProperty,
subtitleProperty,
} from './descriptions';
import { loadOptions } from './methods';
export class SimulateTrigger implements INodeType {
description: INodeTypeDescription = {
hidden: true,
displayName: 'Simulate Trigger',
name: 'simulateTrigger',
subtitle: '={{$parameter.subtitle || undefined}}',
icon: 'fa:arrow-right',
group: ['trigger'],
version: 1,
description: 'Simulate a trigger node',
defaults: {
name: 'Simulate Trigger',
color: '#b0b0b0',
},
inputs: [],
outputs: ['main'],
properties: [
{ ...iconSelector, default: 'n8n-nodes-base.manualTrigger' },
subtitleProperty,
{ ...jsonOutputProperty, displayName: 'Output (JSON)' },
executionDurationProperty,
],
};
methods = { loadOptions };
async trigger(this: ITriggerFunctions): Promise<ITriggerResponse> {
const returnItems: INodeExecutionData[] = [];
let jsonOutput = this.getNodeParameter('jsonOutput', 0);
if (typeof jsonOutput === 'string') {
try {
jsonOutput = jsonParse<IDataObject>(jsonOutput);
} catch (error) {
throw new NodeOperationError(this.getNode(), 'Invalid JSON');
}
}
if (!Array.isArray(jsonOutput)) {
jsonOutput = [jsonOutput];
}
for (const item of jsonOutput as IDataObject[]) {
returnItems.push({ json: item });
}
const executionDuration = this.getNodeParameter('executionDuration', 0) as number;
if (executionDuration > 0) {
await sleep(executionDuration);
}
const manualTriggerFunction = async () => {
this.emit([returnItems]);
};
return {
manualTriggerFunction,
};
}
}