From 034c70f6abf93f105b4d06cabdbebe2e21db8c93 Mon Sep 17 00:00:00 2001 From: Jan Oberhauser Date: Mon, 24 Jun 2019 12:47:44 +0200 Subject: [PATCH] Make n8n work with older node versions (<10) --- packages/cli/commands/start.ts | 1 - packages/cli/src/LoadNodesAndCredentials.ts | 25 +++++++++++++------ .../nodes-base/nodes/ReadBinaryFile.node.ts | 9 +++++-- .../nodes-base/nodes/ReadBinaryFiles.node.ts | 11 ++++++-- .../nodes-base/nodes/WriteBinaryFile.node.ts | 10 ++++++-- 5 files changed, 41 insertions(+), 15 deletions(-) diff --git a/packages/cli/commands/start.ts b/packages/cli/commands/start.ts index 083c507fe8..3e8f965382 100644 --- a/packages/cli/commands/start.ts +++ b/packages/cli/commands/start.ts @@ -1,6 +1,5 @@ import Vorpal = require('vorpal'); import { Args } from 'vorpal'; -import { randomBytes } from 'crypto'; import * as config from 'config'; const open = require('open'); diff --git a/packages/cli/src/LoadNodesAndCredentials.ts b/packages/cli/src/LoadNodesAndCredentials.ts index 4f66510b04..a7ea301253 100644 --- a/packages/cli/src/LoadNodesAndCredentials.ts +++ b/packages/cli/src/LoadNodesAndCredentials.ts @@ -10,12 +10,21 @@ import { IN8nConfigNodes, } from './'; -import { promises as fs } from 'fs'; -import * as path from 'path'; -import * as glob from 'glob-promise'; - import * as config from 'config'; +import { + access as fsAccess, + readdir as fsReaddir, + readFile as fsReadFile, + stat as fsStat, + } from 'fs'; +import * as glob from 'glob-promise'; +import * as path from 'path'; +import { promisify } from "util"; +const fsAccessAsync = promisify(fsAccess); +const fsReaddirAsync = promisify(fsReaddir); +const fsReadFileAsync = promisify(fsReadFile); +const fsStatAsync = promisify(fsStat); class LoadNodesAndCredentialsClass { @@ -43,7 +52,7 @@ class LoadNodesAndCredentialsClass { ]; for (const checkPath of checkPaths) { try { - await fs.access(checkPath); + await fsAccessAsync(checkPath); // Folder exists, so use it. this.nodeModulesPath = path.dirname(checkPath); break; @@ -96,13 +105,13 @@ class LoadNodesAndCredentialsClass { */ async getN8nNodePackages(): Promise { const packages: string[] = []; - for (const file of await fs.readdir(this.nodeModulesPath)) { + for (const file of await fsReaddirAsync(this.nodeModulesPath)) { if (file.indexOf('n8n-nodes-') !== 0) { continue; } // Check if it is really a folder - if (!(await fs.stat(path.join(this.nodeModulesPath, file))).isDirectory()) { + if (!(await fsStatAsync(path.join(this.nodeModulesPath, file))).isDirectory()) { continue; } @@ -219,7 +228,7 @@ class LoadNodesAndCredentialsClass { const packagePath = path.join(this.nodeModulesPath, packageName); // Read the data from the package.json file to see if any n8n data is defiend - const packageFileString = await fs.readFile(path.join(packagePath, 'package.json'), 'utf8'); + const packageFileString = await fsReadFileAsync(path.join(packagePath, 'package.json'), 'utf8'); const packageFile = JSON.parse(packageFileString); if (!packageFile.hasOwnProperty('n8n')) { return; diff --git a/packages/nodes-base/nodes/ReadBinaryFile.node.ts b/packages/nodes-base/nodes/ReadBinaryFile.node.ts index 0c5ef325ee..37e68e9e4b 100644 --- a/packages/nodes-base/nodes/ReadBinaryFile.node.ts +++ b/packages/nodes-base/nodes/ReadBinaryFile.node.ts @@ -5,7 +5,12 @@ import { INodeType, } from 'n8n-workflow'; -import { promises as fs } from 'fs'; +import { + readFile as fsReadFile, +} from 'fs'; +import { promisify } from "util"; + +const fsReadFileAsync = promisify(fsReadFile); export class ReadBinaryFile implements INodeType { @@ -55,7 +60,7 @@ export class ReadBinaryFile implements INodeType { let data; try { - data = await fs.readFile(filePath) as Buffer; + data = await fsReadFileAsync(filePath) as Buffer; } catch (error) { if (error.code === 'ENOENT') { throw new Error(`The file "${filePath}" could not be found.`); diff --git a/packages/nodes-base/nodes/ReadBinaryFiles.node.ts b/packages/nodes-base/nodes/ReadBinaryFiles.node.ts index a2e77dd194..86213add94 100644 --- a/packages/nodes-base/nodes/ReadBinaryFiles.node.ts +++ b/packages/nodes-base/nodes/ReadBinaryFiles.node.ts @@ -4,10 +4,17 @@ import { INodeType, INodeTypeDescription, } from 'n8n-workflow'; -import { promises as fs } from 'fs'; import * as glob from 'glob-promise'; import * as path from 'path'; +import { + readFile as fsReadFile, +} from 'fs'; +import { promisify } from "util"; + +const fsReadFileAsync = promisify(fsReadFile); + + export class ReadBinaryFiles implements INodeType { description: INodeTypeDescription = { displayName: 'Read Binary Files', @@ -56,7 +63,7 @@ export class ReadBinaryFiles implements INodeType { let data: Buffer; let fileName: string; for (const filePath of files) { - data = await fs.readFile(filePath) as Buffer; + data = await fsReadFileAsync(filePath) as Buffer; fileName = path.parse(filePath).base; item = { diff --git a/packages/nodes-base/nodes/WriteBinaryFile.node.ts b/packages/nodes-base/nodes/WriteBinaryFile.node.ts index 3512a79438..fbb8b2170d 100644 --- a/packages/nodes-base/nodes/WriteBinaryFile.node.ts +++ b/packages/nodes-base/nodes/WriteBinaryFile.node.ts @@ -8,7 +8,13 @@ import { INodeExecutionData, INodeType, } from 'n8n-workflow'; -import { promises as fs } from 'fs'; + +import { + writeFile as fsWriteFile, +} from 'fs'; +import { promisify } from "util"; + +const fsWriteFileAsync = promisify(fsWriteFile); export class WriteBinaryFile implements INodeType { @@ -62,7 +68,7 @@ export class WriteBinaryFile implements INodeType { } // Write the file to disk - await fs.writeFile(fileName, Buffer.from(item.binary[dataPropertyName].data, BINARY_ENCODING), 'binary'); + await fsWriteFileAsync(fileName, Buffer.from(item.binary[dataPropertyName].data, BINARY_ENCODING), 'binary'); if (item.json === undefined) { item.json = {};