From 82b2552d10beee972cef8fd457dc3a403aba9307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Tue, 28 Jun 2022 15:27:25 +0200 Subject: [PATCH] :zap: General improvements Improve explanatory comments, correct typings, make param names consistent, and simplify execute block. --- credentials/ExampleCredentials.credentials.ts | 18 ++++++------- nodes/ExampleNode/ExampleNode.node.ts | 19 +++++-------- nodes/HttpBin/HttpBin.node.ts | 14 +++++----- ...Descriptions.ts => HttpVerbDescription.ts} | 27 ++++++++++--------- 4 files changed, 36 insertions(+), 42 deletions(-) rename nodes/HttpBin/{HttpVerbDescriptions.ts => HttpVerbDescription.ts} (86%) diff --git a/credentials/ExampleCredentials.credentials.ts b/credentials/ExampleCredentials.credentials.ts index 2484f47..038f97e 100644 --- a/credentials/ExampleCredentials.credentials.ts +++ b/credentials/ExampleCredentials.credentials.ts @@ -1,22 +1,22 @@ -import { ICredentialType, NodePropertyTypes } from 'n8n-workflow'; +import { ICredentialType, INodeProperties } from 'n8n-workflow'; export class ExampleCredentials implements ICredentialType { name = 'exampleCredentials'; displayName = 'Example Credentials'; - properties = [ - // The credentials to get from user and save encrypted. - // Properties can be defined exactly in the same way - // as node properties. + properties: INodeProperties[] = [ + // Credential data to request from the user, saved in encrypted format. + // Credential properties are defined exactly like node properties. { - displayName: 'User', - name: 'user', - type: 'string' as NodePropertyTypes, + displayName: 'Base URL', + name: 'url', + type: 'string', default: '', + placeholder: 'https://example.com', }, { displayName: 'Access Token', name: 'accessToken', - type: 'string' as NodePropertyTypes, + type: 'string', default: '', }, ]; diff --git a/nodes/ExampleNode/ExampleNode.node.ts b/nodes/ExampleNode/ExampleNode.node.ts index 3bbadf4..770d495 100644 --- a/nodes/ExampleNode/ExampleNode.node.ts +++ b/nodes/ExampleNode/ExampleNode.node.ts @@ -10,20 +10,18 @@ export class ExampleNode implements INodeType { description: 'Basic Example Node', defaults: { name: 'Example Node', - color: '#772244', }, inputs: ['main'], outputs: ['main'], properties: [ - // Node properties which the user gets displayed and - // can change on the node. + // Node properties that the user can see and change on the node. { displayName: 'My String', name: 'myString', type: 'string', default: '', placeholder: 'Placeholder value', - description: 'The description text', + description: 'This is a description', }, ], }; @@ -31,15 +29,12 @@ export class ExampleNode implements INodeType { async execute(this: IExecuteFunctions): Promise { const items = this.getInputData(); - let item: INodeExecutionData; - let myString: string; - - // Iterates over all input items and add the key "myString" with the - // value the parameter "myString" resolves to. - // (This could be a different value for each item in case it contains an expression) + // The node iterates over all input items and adds the key "myString" with the + // value the parameter "myString" resolves to. (This could be a different value + // for each item in case it contains an expression.) for (let itemIndex = 0; itemIndex < items.length; itemIndex++) { - myString = this.getNodeParameter('myString', itemIndex, '') as string; - item = items[itemIndex]; + const myString = this.getNodeParameter('myString', itemIndex, '') as string; + const item = items[itemIndex]; item.json['myString'] = myString; } diff --git a/nodes/HttpBin/HttpBin.node.ts b/nodes/HttpBin/HttpBin.node.ts index 00eaee7..7fad43d 100644 --- a/nodes/HttpBin/HttpBin.node.ts +++ b/nodes/HttpBin/HttpBin.node.ts @@ -1,11 +1,10 @@ -/* eslint-disable n8n-nodes-base/filesystem-wrong-node-filename */ import { INodeType, INodeTypeDescription } from 'n8n-workflow'; -import { httpVerbFields, httpVerbOperations } from './HttpVerbDescriptions'; +import { httpVerbFields, httpVerbOperations } from './HttpVerbDescription'; export class HttpBin implements INodeType { description: INodeTypeDescription = { displayName: 'HttpBin', - name: 'httpbin', + name: 'httpBin', icon: 'file:httpbin.svg', group: ['transform'], version: 1, @@ -36,11 +35,10 @@ export class HttpBin implements INodeType { * * [Resource & Operation] * - * * https://docs.n8n.io/integrations/creating-nodes/code/create-first-node/#resources-and-operations * - * In our example, the operations are separated into their own file (HTTPVerbDescription) - * to keep this class easy to read + * In our example, the operations are separated into their own file (HTTPVerbDescription.ts) + * to keep this class easy to read. * */ properties: [ @@ -52,10 +50,10 @@ export class HttpBin implements INodeType { options: [ { name: 'HTTP Verb', - value: 'httpverbs', + value: 'httpVerb', }, ], - default: 'httpverbs', + default: 'httpVerb', }, ...httpVerbOperations, diff --git a/nodes/HttpBin/HttpVerbDescriptions.ts b/nodes/HttpBin/HttpVerbDescription.ts similarity index 86% rename from nodes/HttpBin/HttpVerbDescriptions.ts rename to nodes/HttpBin/HttpVerbDescription.ts index 80efc5b..95bc8a1 100644 --- a/nodes/HttpBin/HttpVerbDescriptions.ts +++ b/nodes/HttpBin/HttpVerbDescription.ts @@ -1,15 +1,16 @@ import { INodeProperties } from 'n8n-workflow'; -// This maps the operations to when the Resource option HTTP Verbs is selected +// When the resource `httpVerb` is selected, this `operation` parameter will be shown. export const httpVerbOperations: INodeProperties[] = [ { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, + displayOptions: { show: { - resource: ['httpverbs'], + resource: ['httpVerb'], }, }, options: [ @@ -38,8 +39,8 @@ export const httpVerbOperations: INodeProperties[] = [ }, ]; -// Here we define what to show when the GET Operation is selected -// We do that by adding operation: ["get"], to "displayOptions.show" +// Here we define what to show when the `get` operation is selected. +// We do that by adding `operation: ["get"]` to `displayOptions.show` const getOperation: INodeProperties[] = [ { name: 'typeofData', @@ -48,7 +49,7 @@ const getOperation: INodeProperties[] = [ displayName: 'Type of Data', displayOptions: { show: { - resource: ['httpverbs'], + resource: ['httpVerb'], operation: ['get'], }, }, @@ -68,7 +69,7 @@ const getOperation: INodeProperties[] = [ displayName: 'Query Parameters', displayOptions: { show: { - resource: ['httpverbs'], + resource: ['httpVerb'], operation: ['get'], }, }, @@ -109,8 +110,8 @@ const getOperation: INodeProperties[] = [ }, ]; -// Here we define what to show when the DELETE Operation is selected -// We do that by adding operation: ["delete"], to "displayOptions.show" +// Here we define what to show when the DELETE Operation is selected. +// We do that by adding `operation: ["delete"]` to `displayOptions.show` const deleteOperation: INodeProperties[] = [ { name: 'typeofData', @@ -119,7 +120,7 @@ const deleteOperation: INodeProperties[] = [ displayName: 'Type of Data', displayOptions: { show: { - resource: ['httpverbs'], + resource: ['httpVerb'], operation: ['delete'], }, }, @@ -143,7 +144,7 @@ const deleteOperation: INodeProperties[] = [ displayName: 'Query Parameters', displayOptions: { show: { - resource: ['httpverbs'], + resource: ['httpVerb'], operation: ['delete'], typeofData: ['queryParameter'], }, @@ -190,7 +191,7 @@ const deleteOperation: INodeProperties[] = [ displayName: 'JSON Object', displayOptions: { show: { - resource: ['httpverbs'], + resource: ['httpVerb'], operation: ['delete'], typeofData: ['jsonData'], }, @@ -234,12 +235,12 @@ const deleteOperation: INodeProperties[] = [ export const httpVerbFields: INodeProperties[] = [ /* -------------------------------------------------------------------------- */ - /* Http Verbs:Get */ + /* httpVerb:get */ /* -------------------------------------------------------------------------- */ ...getOperation, /* -------------------------------------------------------------------------- */ - /* Http Verbs:Delete */ + /* httpVerb:delete */ /* -------------------------------------------------------------------------- */ ...deleteOperation, ];