Support npm subflow modules

This commit is contained in:
Nick O'Leary
2020-08-28 16:36:11 +01:00
committed by Nick O'Leary
parent 6e1466e411
commit 9a660f3fe9
13 changed files with 499 additions and 254 deletions

View File

@@ -20,6 +20,7 @@ var fs = require("fs");
var library = require("./library");
const {events} = require("@node-red/util")
var subflows = require("./subflow");
var settings;
var loader;
@@ -27,6 +28,8 @@ var nodeConfigCache = {};
var moduleConfigs = {};
var nodeList = [];
var nodeConstructors = {};
var subflowModules = {};
var nodeTypeToId = {};
var moduleNodes = {};
@@ -36,6 +39,7 @@ function init(_settings,_loader) {
moduleNodes = {};
nodeTypeToId = {};
nodeConstructors = {};
subflowModules = {};
nodeList = [];
nodeConfigCache = {};
}
@@ -225,6 +229,7 @@ function removeNode(id) {
config.types.forEach(function(t) {
var typeId = nodeTypeToId[t];
if (typeId === id) {
delete subflowModules[t];
delete nodeConstructors[t];
delete nodeTypeToId[t];
}
@@ -393,6 +398,27 @@ function registerNodeConstructor(nodeSet,type,constructor) {
events.emit("type-registered",type);
}
function registerSubflow(nodeSet, subflow) {
var nodeSetInfo = getFullNodeInfo(nodeSet);
const result = subflows.register(nodeSet,subflow);
if (subflowModules.hasOwnProperty(result.type)) {
throw new Error(result.type+" already registered");
}
if (nodeSetInfo) {
if (nodeSetInfo.types.indexOf(result.type) === -1) {
nodeSetInfo.types.push(result.type);
nodeTypeToId[result.type] = nodeSetInfo.id;
}
nodeSetInfo.config = result.config;
}
subflowModules[result.type] = result;
events.emit("type-registered",result.type);
return result;
}
function getAllNodeConfigs(lang) {
if (!nodeConfigCache[lang]) {
var result = "";
@@ -447,7 +473,7 @@ function getNodeConstructor(type) {
}
if (!config || (config.enabled && !config.err)) {
return nodeConstructors[type];
return nodeConstructors[type] || subflowModules[type];
}
return null;
}
@@ -457,6 +483,7 @@ function clear() {
moduleConfigs = {};
nodeList = [];
nodeConstructors = {};
subflowModules = {};
nodeTypeToId = {};
}
@@ -613,6 +640,7 @@ var registry = module.exports = {
registerNodeConstructor: registerNodeConstructor,
getNodeConstructor: getNodeConstructor,
registerSubflow: registerSubflow,
addModule: addModule,