mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Restore ability to add nodes by filename
This commit is contained in:
@@ -115,6 +115,7 @@ module.exports = {
|
||||
getNode: flows.get,
|
||||
eachNode: flows.eachNode,
|
||||
|
||||
addFile: registry.addFile,
|
||||
addModule: registry.addModule,
|
||||
removeModule: removeModule,
|
||||
|
||||
|
@@ -36,6 +36,12 @@ function load(defaultNodesDir,disableNodePathScan) {
|
||||
return loader.load(defaultNodesDir,disableNodePathScan);
|
||||
}
|
||||
|
||||
function addFile(file) {
|
||||
var info = "node-red/"+path.basename(file).replace(/^\d+-/,"").replace(/\.js$/,"");
|
||||
return loader.addFile(file).then(function() {
|
||||
return registry.getNodeInfo(info);
|
||||
});
|
||||
}
|
||||
function addModule(module) {
|
||||
return loader.addModule(module).then(function() {
|
||||
return registry.getModuleInfo(module);
|
||||
@@ -43,13 +49,15 @@ function addModule(module) {
|
||||
}
|
||||
|
||||
function enableNodeSet(typeOrId) {
|
||||
registry.enableNodeSet(typeOrId);
|
||||
var nodeSet = registry.getNodeInfo(typeOrId);
|
||||
if (!nodeSet.loaded) {
|
||||
loader.loadNodeSet(nodeSet);
|
||||
return registry.getNodeInfo(typeOrId);
|
||||
}
|
||||
return nodeSet;
|
||||
return registry.enableNodeSet(typeOrId).then(function() {
|
||||
var nodeSet = registry.getNodeInfo(typeOrId);
|
||||
if (!nodeSet.loaded) {
|
||||
return loader.loadNodeSet(registry.getFullNodeInfo(typeOrId)).then(function() {
|
||||
return registry.getNodeInfo(typeOrId);
|
||||
});
|
||||
}
|
||||
return when.resolve(nodeSet);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
@@ -71,6 +79,7 @@ module.exports = {
|
||||
enableNode: enableNodeSet,
|
||||
disableNode: registry.disableNodeSet,
|
||||
|
||||
addFile: addFile,
|
||||
addModule: addModule,
|
||||
removeModule: registry.removeModule,
|
||||
|
||||
|
@@ -45,7 +45,7 @@ function loadNodeFiles(nodeFiles) {
|
||||
for (var module in nodeFiles) {
|
||||
/* istanbul ignore else */
|
||||
if (nodeFiles.hasOwnProperty(module)) {
|
||||
if (!registry.getModuleInfo(module)) {
|
||||
if (module == "node-red" || !registry.getModuleInfo(module)) {
|
||||
var first = true;
|
||||
for (var node in nodeFiles[module].nodes) {
|
||||
/* istanbul ignore else */
|
||||
@@ -174,6 +174,7 @@ function loadNodeSet(node) {
|
||||
var nodeFn = path.basename(node.file);
|
||||
if (!node.enabled) {
|
||||
return when.resolve(node);
|
||||
} else {
|
||||
}
|
||||
try {
|
||||
var loadPromise = null;
|
||||
@@ -228,7 +229,9 @@ function addModule(module) {
|
||||
}
|
||||
var nodes = [];
|
||||
if (registry.getModuleInfo(module)) {
|
||||
return when.reject(new Error("Module already loaded"));
|
||||
var e = new Error("Module already loaded");
|
||||
e.code = "module_already_loaded";
|
||||
return when.reject(e);
|
||||
}
|
||||
try {
|
||||
var moduleFiles = localfilesystem.getModuleFiles(module);
|
||||
@@ -238,9 +241,38 @@ function addModule(module) {
|
||||
}
|
||||
}
|
||||
|
||||
function addFile(file) {
|
||||
if (!settings.available()) {
|
||||
throw new Error("Settings unavailable");
|
||||
}
|
||||
var info = registry.getNodeInfo("node-red/"+path.basename(file).replace(/^\d+-/,"").replace(/\.js$/,""));
|
||||
if (info) {
|
||||
var err = new Error("File already loaded");
|
||||
err.code = "file_already_loaded";
|
||||
return when.reject(err);
|
||||
}
|
||||
var nodeFiles = localfilesystem.getLocalFile(file);
|
||||
if (nodeFiles) {
|
||||
var fileObj = {};
|
||||
fileObj[nodeFiles.module] = {
|
||||
name: nodeFiles.module,
|
||||
version: nodeFiles.version,
|
||||
nodes: {}
|
||||
};
|
||||
fileObj[nodeFiles.module].nodes[nodeFiles.name] = nodeFiles;
|
||||
|
||||
return loadNodeFiles(fileObj);
|
||||
} else {
|
||||
var e = new Error();
|
||||
e.code = 404;
|
||||
return when.reject(e);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
init: init,
|
||||
load: load,
|
||||
addModule: addModule,
|
||||
addFile: addFile,
|
||||
loadNodeSet: loadNodeSet
|
||||
}
|
||||
|
@@ -34,6 +34,26 @@ function init(_settings,_defaultNodesDir,_disableNodePathScan) {
|
||||
}
|
||||
}
|
||||
|
||||
function getLocalFile(file) {
|
||||
if (settings.nodesExcludes) {
|
||||
for (var i=0;i<settings.nodesExcludes.length;i++) {
|
||||
if (settings.nodesExcludes[i] == path.basename(file)) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fs.existsSync(file.replace(/\.js$/,".html"))) {
|
||||
return {
|
||||
file: file,
|
||||
module: "node-red",
|
||||
name: path.basename(file).replace(/^\d+-/,"").replace(/\.js$/,""),
|
||||
version: settings.version
|
||||
};
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Synchronously walks the directory looking for node files.
|
||||
@@ -54,24 +74,9 @@ function getLocalNodeFiles(dir) {
|
||||
var stats = fs.statSync(path.join(dir,fn));
|
||||
if (stats.isFile()) {
|
||||
if (/\.js$/.test(fn)) {
|
||||
var valid = true;
|
||||
if (settings.nodesExcludes) {
|
||||
for (var i=0;i<settings.nodesExcludes.length;i++) {
|
||||
if (settings.nodesExcludes[i] == fn) {
|
||||
valid = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
valid = valid && fs.existsSync(path.join(dir,fn.replace(/\.js$/,".html")));
|
||||
|
||||
if (valid) {
|
||||
result.push({
|
||||
file: path.join(dir,fn),
|
||||
module: "node-red",
|
||||
name: path.basename(fn).replace(/^\d+-/,"").replace(/\.js$/,""),
|
||||
version: settings.version
|
||||
});
|
||||
var info = getLocalFile(path.join(dir,fn));
|
||||
if (info) {
|
||||
result.push(info);
|
||||
}
|
||||
}
|
||||
} else if (stats.isDirectory()) {
|
||||
@@ -256,5 +261,6 @@ function getModuleFiles(module) {
|
||||
module.exports = {
|
||||
init: init,
|
||||
getNodeFiles: getNodeFiles,
|
||||
getLocalFile: getLocalFile,
|
||||
getModuleFiles: getModuleFiles
|
||||
}
|
||||
|
@@ -47,7 +47,7 @@ function init(_settings) {
|
||||
|
||||
function filterNodeInfo(n) {
|
||||
var r = {
|
||||
id: n.id,
|
||||
id: n.id||n.module+"/"+n.name,
|
||||
name: n.name,
|
||||
types: n.types,
|
||||
enabled: n.enabled
|
||||
@@ -220,7 +220,6 @@ function getNodeInfo(typeOrId) {
|
||||
if (nodeTypeToId[typeOrId]) {
|
||||
id = nodeTypeToId[typeOrId];
|
||||
}
|
||||
|
||||
/* istanbul ignore else */
|
||||
if (id) {
|
||||
var module = moduleConfigs[getModule(id)];
|
||||
@@ -239,6 +238,23 @@ function getNodeInfo(typeOrId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
function getFullNodeInfo(typeOrId) {
|
||||
// Used by index.enableNodeSet so that .file can be retrieved to pass
|
||||
// to loader.loadNodeSet
|
||||
var id = typeOrId;
|
||||
if (nodeTypeToId[typeOrId]) {
|
||||
id = nodeTypeToId[typeOrId];
|
||||
}
|
||||
/* istanbul ignore else */
|
||||
if (id) {
|
||||
var module = moduleConfigs[getModule(id)];
|
||||
if (module) {
|
||||
return module.nodes[getNode(id)];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function getNodeList(filter) {
|
||||
var list = [];
|
||||
for (var module in moduleConfigs) {
|
||||
@@ -380,22 +396,18 @@ function enableNodeSet(typeOrId) {
|
||||
if (nodeTypeToId[typeOrId]) {
|
||||
id = nodeTypeToId[typeOrId];
|
||||
}
|
||||
|
||||
var config;
|
||||
try {
|
||||
config = moduleConfigs[getModule(id)].nodes[getNode(id)];
|
||||
delete config.err;
|
||||
config.enabled = true;
|
||||
//if (!config.loaded) {
|
||||
// // TODO: honour the promise this returns
|
||||
// loadNodeModule(config);
|
||||
//}
|
||||
nodeConfigCache = null;
|
||||
saveNodeList();
|
||||
return saveNodeList().then(function() {
|
||||
return filterNodeInfo(config);
|
||||
});
|
||||
} catch (err) {
|
||||
throw new Error("Unrecognised id: "+typeOrId);
|
||||
}
|
||||
return filterNodeInfo(config);
|
||||
}
|
||||
|
||||
function disableNodeSet(typeOrId) {
|
||||
@@ -412,11 +424,12 @@ function disableNodeSet(typeOrId) {
|
||||
// TODO: persist setting
|
||||
config.enabled = false;
|
||||
nodeConfigCache = null;
|
||||
saveNodeList();
|
||||
return saveNodeList().then(function() {
|
||||
return filterNodeInfo(config);
|
||||
});
|
||||
} catch (err) {
|
||||
throw new Error("Unrecognised id: "+id);
|
||||
}
|
||||
return filterNodeInfo(config);
|
||||
}
|
||||
|
||||
function cleanModuleList() {
|
||||
@@ -472,6 +485,7 @@ var registry = module.exports = {
|
||||
removeModule: removeModule,
|
||||
|
||||
getNodeInfo: getNodeInfo,
|
||||
getFullNodeInfo: getFullNodeInfo,
|
||||
getNodeList: getNodeList,
|
||||
getModuleList: getModuleList,
|
||||
getModuleInfo: getModuleInfo,
|
||||
|
Reference in New Issue
Block a user