mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Support npm subflow modules
This commit is contained in:
committed by
Nick O'Leary
parent
6e1466e411
commit
9a660f3fe9
@@ -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,
|
||||
|
||||
|
Reference in New Issue
Block a user