From 66a704af55b2cc78e304549f5199f45f682b032b Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Thu, 15 Jul 2021 15:37:12 +0100 Subject: [PATCH] Fallback to 'require' if on node < 12.17 --- .../nodes/core/function/10-function.js | 2 +- .../@node-red/registry/lib/externalModules.js | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/nodes/core/function/10-function.js b/packages/node_modules/@node-red/nodes/core/function/10-function.js index b229c0767..6b131b097 100644 --- a/packages/node_modules/@node-red/nodes/core/function/10-function.js +++ b/packages/node_modules/@node-red/nodes/core/function/10-function.js @@ -494,7 +494,7 @@ module.exports = function(RED) { node.error(err); } }).catch(err => { - throw new Error(RED._("function.error.externalModuleLoadError")); + node.error(RED._("function.error.externalModuleLoadError")); }); } RED.nodes.registerType("function",FunctionNode, { diff --git a/packages/node_modules/@node-red/registry/lib/externalModules.js b/packages/node_modules/@node-red/registry/lib/externalModules.js index 3458d4312..470d09a29 100644 --- a/packages/node_modules/@node-red/registry/lib/externalModules.js +++ b/packages/node_modules/@node-red/registry/lib/externalModules.js @@ -26,6 +26,12 @@ let installEnabled = true; let installAllowList = ['*']; let installDenyList = []; +let IMPORT_SUPPORTED = true; +const nodeVersionParts = process.versions.node.split(".").map(v => parseInt(v)); +if (nodeVersionParts[0] < 12 || (nodeVersionParts[0] === 12 && nodeVersionParts[1] < 17)) { + IMPORT_SUPPORTED = false; +} + function getInstallDir() { return path.resolve(settings.userDir || process.env.NODE_RED_HOME || "."); } @@ -102,6 +108,18 @@ function requireModule(module) { return require(moduleDir); } function importModule(module) { + if (!IMPORT_SUPPORTED) { + // On Node < 12.17 - fall back to try a require + return new Promise((resolve, reject) => { + try { + const mod = requireModule(module); + resolve(mod); + } catch(err) { + reject(err); + } + }); + } + if (!registryUtil.checkModuleAllowed( module, null,installAllowList,installDenyList)) { const e = new Error("Module not allowed"); e.code = "module_not_allowed";