@node-red/registry 3.0.2 → 3.1.0-beta.2
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 +27 -40
- package/lib/localfilesystem.js +20 -10
- package/lib/registry.js +10 -3
- package/package.json +5 -5
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
|
-
|
|
50
|
-
|
|
51
|
-
for (
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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].
|
|
152
|
-
|
|
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) {
|
package/lib/localfilesystem.js
CHANGED
|
@@ -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
|
|
110
|
-
if(
|
|
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,
|
|
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(
|
|
145
|
-
dir = path.join(
|
|
146
|
-
files = [path.basename(
|
|
147
|
-
moduleName = (
|
|
148
|
-
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 ?
|
|
173
|
-
const pkg =
|
|
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
|
-
|
|
189
|
-
for (var setName in module.nodes) {
|
|
188
|
+
for (const setName in module.nodes) {
|
|
190
189
|
if (module.nodes.hasOwnProperty(setName)) {
|
|
191
|
-
|
|
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.2",
|
|
3
|
+
"version": "3.1.0-beta.2",
|
|
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.2",
|
|
19
|
+
"@node-red/util": "3.1.0-beta.2",
|
|
20
20
|
"clone": "2.1.2",
|
|
21
21
|
"fs-extra": "10.1.0",
|
|
22
|
-
"semver": "7.3.
|
|
23
|
-
"tar": "6.1.
|
|
24
|
-
"uglify-js": "3.
|
|
22
|
+
"semver": "7.3.8",
|
|
23
|
+
"tar": "6.1.13",
|
|
24
|
+
"uglify-js": "3.17.4"
|
|
25
25
|
}
|
|
26
26
|
}
|