@node-red/registry 3.0.1 → 3.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/loader.js CHANGED
@@ -43,37 +43,40 @@ function load(disableNodePathScan) {
43
43
  return loadModuleFiles(modules);
44
44
  }
45
45
 
46
+ function splitPath(p) {
47
+ return path.posix.normalize((p || '').replace(/\\/g, path.sep)).split(path.sep)
48
+ }
46
49
 
47
50
  function loadModuleTypeFiles(module, type) {
48
51
  const things = module[type];
49
- var first = true;
50
- var promises = [];
51
- for (var thingName in things) {
52
+ let first = true;
53
+ const promises = [];
54
+ for (let thingName in things) {
52
55
  /* istanbul ignore else */
53
56
  if (things.hasOwnProperty(thingName)) {
54
57
  if (module.name != "node-red" && first) {
55
58
  // Check the module directory exists
56
59
  first = false;
57
- var fn = things[thingName].file;
58
- var parts = fn.split("/");
59
- var i = parts.length-1;
60
- for (;i>=0;i--) {
61
- if (parts[i] == "node_modules") {
62
- break;
63
- }
60
+ let moduleFn = module.path
61
+ const fn = things[thingName].file
62
+ const parts = splitPath(fn)
63
+ const nmi = parts.indexOf('node_modules')
64
+ if(nmi > -1) {
65
+ moduleFn = parts.slice(0,nmi+2).join(path.sep);
66
+ }
67
+ if (!moduleFn) {
68
+ // shortcut - skip calling statSync on empty string
69
+ break; // Module not found, don't attempt to load its nodes
64
70
  }
65
- var moduleFn = parts.slice(0,i+2).join("/");
66
-
67
71
  try {
68
- var stat = fs.statSync(moduleFn);
72
+ const stat = fs.statSync(moduleFn);
69
73
  } catch(err) {
70
- // Module not found, don't attempt to load its nodes
71
- break;
74
+ break; // Module not found, don't attempt to load its nodes
72
75
  }
73
76
  }
74
77
 
75
78
  try {
76
- var promise;
79
+ let promise;
77
80
  if (type === "nodes") {
78
81
  promise = loadNodeConfig(things[thingName]);
79
82
  } else if (type === "plugins") {
@@ -82,8 +85,7 @@ function loadModuleTypeFiles(module, type) {
82
85
  promises.push(
83
86
  promise.then(
84
87
  (function() {
85
- var m = module.name;
86
- var n = thingName;
88
+ const n = thingName;
87
89
  return function(nodeSet) {
88
90
  things[n] = nodeSet;
89
91
  return nodeSet;
@@ -93,7 +95,6 @@ function loadModuleTypeFiles(module, type) {
93
95
  );
94
96
  } catch(err) {
95
97
  console.log(err)
96
- //
97
98
  }
98
99
  }
99
100
  }
@@ -125,38 +126,24 @@ function loadModuleFiles(modules) {
125
126
  }
126
127
  var pluginList;
127
128
  var nodeList;
128
-
129
129
  return Promise.all(pluginPromises).then(function(results) {
130
130
  pluginList = results.filter(r => !!r);
131
- // Initial plugin load has happened. Ensure modules that provide
132
- // plugins are in the registry now.
133
- for (var module in modules) {
134
- if (modules.hasOwnProperty(module)) {
135
- if (modules[module].plugins && Object.keys(modules[module].plugins).length > 0) {
136
- // Add the modules for plugins
137
- if (!modules[module].err) {
138
- registry.addModule(modules[module]);
139
- }
140
- }
141
- }
142
- }
143
- return loadNodeSetList(pluginList);
144
- }).then(function() {
145
- return Promise.all(nodePromises);
131
+ return Promise.all(nodePromises)
146
132
  }).then(function(results) {
147
133
  nodeList = results.filter(r => !!r);
148
134
  // Initial node load has happened. Ensure remaining modules are in the registry
149
135
  for (var module in modules) {
150
136
  if (modules.hasOwnProperty(module)) {
151
- if (!modules[module].plugins || Object.keys(modules[module].plugins).length === 0) {
152
- if (!modules[module].err) {
153
- registry.addModule(modules[module]);
154
- }
137
+ if (!modules[module].err) {
138
+ registry.addModule(modules[module]);
155
139
  }
156
140
  }
157
141
  }
142
+ }).then(function() {
143
+ return loadNodeSetList(pluginList);
144
+ }).then(function() {
158
145
  return loadNodeSetList(nodeList);
159
- });
146
+ })
160
147
  }
161
148
 
162
149
  async function loadPluginTemplate(plugin) {
@@ -106,8 +106,8 @@ function getLocalNodeFiles(dir, skipValidNodeRedModules) {
106
106
  // when loading local files, if the path is a valid node-red module
107
107
  // dont include it (will be picked up in scanTreeForNodesModules)
108
108
  if(skipValidNodeRedModules && files.indexOf("package.json") >= 0) {
109
- const package = getPackageDetails(dir)
110
- if(package.isNodeRedModule) {
109
+ const packageDetails = getPackageDetails(dir)
110
+ if(packageDetails.isNodeRedModule) {
111
111
  return {files: [], icons: []};
112
112
  }
113
113
  }
@@ -135,17 +135,17 @@ function getLocalNodeFiles(dir, skipValidNodeRedModules) {
135
135
  return {files: result, icons: icons}
136
136
  }
137
137
 
138
- function scanDirForNodesModules(dir,moduleName,package) {
138
+ function scanDirForNodesModules(dir,moduleName,packageDetails) {
139
139
  let results = [];
140
140
  let scopeName;
141
141
  let files
142
142
  try {
143
143
  let isNodeRedModule = false
144
- if(package) {
145
- dir = path.join(package.moduleDir,'..')
146
- files = [path.basename(package.moduleDir)]
147
- moduleName = (package.package ? package.package.name : null) || moduleName
148
- isNodeRedModule = package.isNodeRedModule
144
+ if(packageDetails) {
145
+ dir = path.join(packageDetails.moduleDir,'..')
146
+ files = [path.basename(packageDetails.moduleDir)]
147
+ moduleName = (packageDetails.package ? packageDetails.package.name : null) || moduleName
148
+ isNodeRedModule = packageDetails.isNodeRedModule
149
149
  } else {
150
150
  files = fs.readdirSync(dir);
151
151
  if (moduleName) {
@@ -156,6 +156,16 @@ function scanDirForNodesModules(dir,moduleName,package) {
156
156
  }
157
157
  }
158
158
  }
159
+
160
+ // if we have found a package.json, this IS a node_module, lets see if it is a node-red node
161
+ if (!isNodeRedModule && files.indexOf('package.json') > -1) {
162
+ packageDetails = getPackageDetails(dir) // get package details
163
+ if(packageDetails && packageDetails.isNodeRedModule) {
164
+ isNodeRedModule = true
165
+ files = ['package.json'] // shortcut the file scan
166
+ }
167
+ }
168
+
159
169
  for (let i=0;i<files.length;i++) {
160
170
  let fn = files[i];
161
171
  if (!isNodeRedModule && /^@/.test(fn)) {
@@ -169,8 +179,8 @@ function scanDirForNodesModules(dir,moduleName,package) {
169
179
  } else {
170
180
  if ((isNodeRedModule || (!moduleName || fn == moduleName)) && (isIncluded(fn) && !isExcluded(fn))) {
171
181
  try {
172
- const moduleDir = isNodeRedModule ? package.moduleDir : path.join(dir,fn);
173
- const pkg = package || getPackageDetails(moduleDir)
182
+ const moduleDir = isNodeRedModule ? packageDetails.moduleDir : path.join(dir,fn);
183
+ const pkg = packageDetails || getPackageDetails(moduleDir)
174
184
  if(pkg.error) {
175
185
  throw pkg.error
176
186
  }
package/lib/registry.js CHANGED
@@ -185,10 +185,17 @@ function loadNodeConfigs() {
185
185
  function addModule(module) {
186
186
  moduleNodes[module.name] = [];
187
187
  moduleConfigs[module.name] = module;
188
- // console.log("registry.js.addModule",module.name,"user?",module.user,"usedBy",module.usedBy,"dependencies",module.dependencies)
189
- for (var setName in module.nodes) {
188
+ for (const setName in module.nodes) {
190
189
  if (module.nodes.hasOwnProperty(setName)) {
191
- var set = module.nodes[setName];
190
+ const set = module.nodes[setName];
191
+ if (!set.types) {
192
+ const err = new Error("Set has no types")
193
+ err.code = "set_has_no_types"
194
+ err.details = {
195
+ ...set
196
+ }
197
+ set.err = err
198
+ }
192
199
  moduleNodes[module.name].push(set.name);
193
200
  nodeList.push(set.id);
194
201
  if (!set.err) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@node-red/registry",
3
- "version": "3.0.1",
3
+ "version": "3.1.0-beta.1",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./lib/index.js",
6
6
  "repository": {
@@ -16,11 +16,11 @@
16
16
  }
17
17
  ],
18
18
  "dependencies": {
19
- "@node-red/util": "3.0.1",
19
+ "@node-red/util": "3.1.0-beta.1",
20
20
  "clone": "2.1.2",
21
21
  "fs-extra": "10.1.0",
22
- "semver": "7.3.7",
23
- "tar": "6.1.11",
24
- "uglify-js": "3.16.2"
22
+ "semver": "7.3.8",
23
+ "tar": "6.1.12",
24
+ "uglify-js": "3.17.4"
25
25
  }
26
26
  }