diff --git a/red/nodes/registry.js b/red/nodes/registry.js index bd28a00f1..83a7cd798 100644 --- a/red/nodes/registry.js +++ b/red/nodes/registry.js @@ -68,9 +68,11 @@ var registry = (function() { for (var module in moduleConfigs) { if (moduleConfigs.hasOwnProperty(module)) { if (!moduleList[module]) { - moduleList[module] = {}; - moduleList[module].name = module; - moduleList[module].nodes = {}; + moduleList[module] = { + name: module, + version: moduleConfigs[module].version, + nodes: {} + }; } var nodes = moduleConfigs[module].nodes; for(var node in nodes) { @@ -87,7 +89,7 @@ var registry = (function() { } } if (settings.available()) { - return settings.set("modules",moduleList); + return settings.set("nodes",moduleList); } else { return when.reject("Settings unavailable"); } @@ -95,7 +97,7 @@ var registry = (function() { function loadNodeConfigs() { var configs = settings.get("nodes"); - + if (!configs) { return {}; } else if (configs['node-red']) { @@ -108,34 +110,34 @@ var registry = (function() { var nodeConfig = configs[id]; var moduleName; var nodeSetName; - + if (nodeConfig.module) { moduleName = nodeConfig.module; nodeSetName = nodeConfig.name.split(":")[1]; } else { moduleName = "node-red"; - nodeSetName = nodeConfig.name.replace(/^\d+-/,"").replace(/\.js$/,"") + nodeSetName = nodeConfig.name.replace(/^\d+-/,"").replace(/\.js$/,""); } - + if (!newConfigs[moduleName]) { newConfigs[moduleName] = { name: moduleName, nodes:{} - } + }; } newConfigs[moduleName].nodes[nodeSetName] = { name: nodeSetName, types: nodeConfig.types, enabled: nodeConfig.enabled, module: moduleName - } + }; } } settings.set("nodes",newConfigs); return newConfigs; } } - + return { init: function() { if (settings.available()) { @@ -532,7 +534,7 @@ function scanTreeForNodesModules(moduleName) { * @param moduleDir the root directory of the package * @param pkg the module's package.json object */ -function loadNodesFromModule(moduleDir,pkg,version) { +function loadNodesFromModule(moduleDir,pkg) { var nodes = pkg['node-red'].nodes||{}; var results = []; var iconDirs = []; @@ -540,7 +542,7 @@ function loadNodesFromModule(moduleDir,pkg,version) { if (nodes.hasOwnProperty(n)) { var file = path.join(moduleDir,nodes[n]); try { - results.push(loadNodeConfig(file,pkg.name,n,version)); + results.push(loadNodeConfig(file,pkg.name,n,pkg.version)); } catch(err) { } var iconDir = path.join(moduleDir,path.dirname(nodes[n]),"icons"); @@ -625,6 +627,7 @@ function loadNodeConfig(file,module,name,version) { node.err = err.toString(); } } + registry.addNodeSet(id,node,version); return node; } @@ -657,7 +660,7 @@ function load(defaultNodesDir,disableNodePathScan) { var nodes = []; nodeFiles.forEach(function(file) { try { - nodes.push(loadNodeConfig(file,"node-red",path.basename(file).replace(/^\d+-/,"").replace(/\.js$/,""))); + nodes.push(loadNodeConfig(file,"node-red",path.basename(file).replace(/^\d+-/,"").replace(/\.js$/,""),settings.version)); } catch(err) { // } @@ -763,14 +766,14 @@ function addNode(file) { } var nodes = []; try { - nodes.push(loadNodeConfig(file,"node-red",path.basename(file).replace(/^\d+-/,"").replace(/\.js$/,""))); + nodes.push(loadNodeConfig(file,"node-red",path.basename(file).replace(/^\d+-/,"").replace(/\.js$/,""),settings.version)); } catch(err) { return when.reject(err); } return loadNodeList(nodes); } -function addModule(module,version) { +function addModule(module) { if (!settings.available()) { throw new Error("Settings unavailable"); } @@ -785,7 +788,7 @@ function addModule(module,version) { return when.reject(err); } moduleFiles.forEach(function(moduleFile) { - nodes = nodes.concat(loadNodesFromModule(moduleFile.dir,moduleFile.package,version)); + nodes = nodes.concat(loadNodesFromModule(moduleFile.dir,moduleFile.package)); }); return loadNodeList(nodes); } diff --git a/red/server.js b/red/server.js index b6f37fc58..f84458163 100644 --- a/red/server.js +++ b/red/server.js @@ -162,11 +162,8 @@ function installModule(module) { reject(new Error("Install failed")); } } else { - var grandchild = child_process.exec('npm view '+module+' version', function(err, stdin, stdout) { - var version = stdin.replace(/\s/g, ""); - util.log("[red] Installed module: "+module+":"+version); - resolve(redNodes.addModule(module,version).then(reportAddedModules)); - }); + util.log("[red] Installed module: "+module); + resolve(redNodes.addModule(module).then(reportAddedModules)); } }); }); diff --git a/test/red/nodes/registry_spec.js b/test/red/nodes/registry_spec.js index ac671c755..395018618 100644 --- a/test/red/nodes/registry_spec.js +++ b/test/red/nodes/registry_spec.js @@ -301,7 +301,7 @@ describe('NodeRegistry', function() { moduleList.should.be.Array.and.have.length(1); settingsSave.callCount.should.equal(1); - settingsSave.firstCall.args[0].should.be.equal("modules"); + settingsSave.firstCall.args[0].should.be.equal("nodes"); var savedList = settingsSave.firstCall.args[1]; savedList[moduleList[0].name].name.should.equal(moduleList[0].name);