@node-red/registry 5.0.0-beta.6 → 5.0.0
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/externalModules.js +0 -1
- package/lib/installer.js +5 -5
- package/lib/loader.js +56 -29
- package/package.json +3 -3
package/lib/externalModules.js
CHANGED
|
@@ -274,7 +274,6 @@ async function installModule(moduleDetails) {
|
|
|
274
274
|
let extraArgs = triggerPayload.args || [];
|
|
275
275
|
let args = [npmCli, 'install', ...extraArgs, '--', installSpec]
|
|
276
276
|
log.trace(`${process.execPath} ${npmCli} ${JSON.stringify(args)}`);
|
|
277
|
-
console.log('HIT EM ONE')
|
|
278
277
|
return exec.run(process.execPath, args, { cwd: installDir },true)
|
|
279
278
|
} else {
|
|
280
279
|
log.trace("skipping npm install");
|
package/lib/installer.js
CHANGED
|
@@ -147,8 +147,7 @@ async function installModule(module,version,url) {
|
|
|
147
147
|
var isExisting = false;
|
|
148
148
|
if (url) {
|
|
149
149
|
if (pkgurlRe.test(url) || localtgzRe.test(url)) {
|
|
150
|
-
|
|
151
|
-
installName = localtgzRe.test(url) && slashRe.test(url) ? `"${url}"` : url;
|
|
150
|
+
installName = url;
|
|
152
151
|
isRegistryPackage = false;
|
|
153
152
|
} else {
|
|
154
153
|
log.warn(log._("server.install.install-failed-url",{name:module,url:url}));
|
|
@@ -504,12 +503,13 @@ async function getTarballModuleInfo(tarball) {
|
|
|
504
503
|
|
|
505
504
|
function uninstallModule(module) {
|
|
506
505
|
// This function is called when the admin api is called to remove a module.
|
|
507
|
-
// A check in
|
|
506
|
+
// A check in nodes.js#removeModule verifies the module being removed is already in the registry
|
|
508
507
|
// as a user module. As such, we can have confidence that the `module` passed here is
|
|
509
|
-
// a valid and recognised module name.
|
|
508
|
+
// a valid and recognised module name. But lets not rely 100% on that.
|
|
510
509
|
activePromise = activePromise.then(() => {
|
|
511
510
|
return new Promise((resolve,reject) => {
|
|
512
|
-
|
|
511
|
+
// Ensure its a valid package name and nothing has slipped through other checks
|
|
512
|
+
if (!validateNpmPackageName(module).validForOldPackages) {
|
|
513
513
|
reject(new Error(log._("server.install.invalid")));
|
|
514
514
|
return;
|
|
515
515
|
}
|
package/lib/loader.js
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
var fs = require("fs-extra");
|
|
18
18
|
var path = require("path");
|
|
19
19
|
var semver = require("semver");
|
|
20
|
+
const { pathToFileURL } = require('node:url');
|
|
20
21
|
|
|
21
22
|
var localfilesystem = require("./localfilesystem");
|
|
22
23
|
var registry = require("./registry");
|
|
@@ -66,7 +67,7 @@ function loadModuleTypeFiles(module, type) {
|
|
|
66
67
|
moduleFn = parts.slice(0,nmi+2).join(path.sep);
|
|
67
68
|
}
|
|
68
69
|
if (!moduleFn) {
|
|
69
|
-
// shortcut - skip calling statSync on empty string
|
|
70
|
+
// shortcut - skip calling statSync on empty string
|
|
70
71
|
break; // Module not found, don't attempt to load its nodes
|
|
71
72
|
}
|
|
72
73
|
try {
|
|
@@ -356,34 +357,23 @@ function loadNodeSet(node) {
|
|
|
356
357
|
} else {
|
|
357
358
|
}
|
|
358
359
|
try {
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
return node;
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
if (loadPromise == null) {
|
|
378
|
-
node.enabled = true;
|
|
379
|
-
node.loaded = true;
|
|
380
|
-
loadPromise = Promise.resolve(node);
|
|
381
|
-
}
|
|
382
|
-
return loadPromise;
|
|
360
|
+
const modulePath = pathToFileURL(node.file).href;
|
|
361
|
+
const importPromise = import(modulePath);
|
|
362
|
+
return importPromise
|
|
363
|
+
.then(function(moduleNamespaceObject) {
|
|
364
|
+
// CJS will always have default, ESM might have default. (details in note below)
|
|
365
|
+
let r = moduleNamespaceObject.default ? moduleNamespaceObject.default : moduleNamespaceObject;
|
|
366
|
+
// Babel related workaround, references in comment below.
|
|
367
|
+
r = r.__esModule ? r.default : r;
|
|
368
|
+
return createLoadPromise(node, r);
|
|
369
|
+
})
|
|
370
|
+
.catch(function(err) {
|
|
371
|
+
node.err = err;
|
|
372
|
+
return Promise.resolve(node);
|
|
373
|
+
});
|
|
383
374
|
} catch(err) {
|
|
384
375
|
node.err = err;
|
|
385
376
|
var stack = err.stack;
|
|
386
|
-
var message;
|
|
387
377
|
if (stack) {
|
|
388
378
|
var filePath = node.file;
|
|
389
379
|
try {
|
|
@@ -403,6 +393,45 @@ function loadNodeSet(node) {
|
|
|
403
393
|
}
|
|
404
394
|
return Promise.resolve(node);
|
|
405
395
|
}
|
|
396
|
+
|
|
397
|
+
// Notes on default:
|
|
398
|
+
// https://nodejs.org/api/esm.html#import-expressions
|
|
399
|
+
// "When importing CommonJS modules, the module.exports object is provided as the default export."
|
|
400
|
+
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import
|
|
401
|
+
// "The module namespace object is a sealed object ... with the default export available as a key called `default`."
|
|
402
|
+
|
|
403
|
+
// Notes on __esModule:
|
|
404
|
+
// Workaround originally added in commit 326f3469, merged in pull request #3669.
|
|
405
|
+
// Related links:
|
|
406
|
+
// https://github.com/nodejs/node/issues/40891
|
|
407
|
+
// https://github.com/evanw/esbuild/issues/1591
|
|
408
|
+
// https://babeljs.io/docs/babel-plugin-transform-modules-commonjs
|
|
409
|
+
// https://stackoverflow.com/questions/50943704/whats-the-purpose-of-object-definepropertyexports-esmodule-value-0
|
|
410
|
+
|
|
411
|
+
function createLoadPromise(node, r) {
|
|
412
|
+
var loadPromise = null;
|
|
413
|
+
if (typeof r === "function") {
|
|
414
|
+
|
|
415
|
+
var red = registryUtil.createNodeApi(node);
|
|
416
|
+
var promise = r(red);
|
|
417
|
+
if (promise != null && typeof promise.then === "function") {
|
|
418
|
+
loadPromise = promise.then(function () {
|
|
419
|
+
node.enabled = true;
|
|
420
|
+
node.loaded = true;
|
|
421
|
+
return node;
|
|
422
|
+
}).catch(function (err) {
|
|
423
|
+
node.err = err;
|
|
424
|
+
return node;
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
if (loadPromise == null) {
|
|
429
|
+
node.enabled = true;
|
|
430
|
+
node.loaded = true;
|
|
431
|
+
loadPromise = Promise.resolve(node);
|
|
432
|
+
}
|
|
433
|
+
return loadPromise;
|
|
434
|
+
}
|
|
406
435
|
}
|
|
407
436
|
|
|
408
437
|
async function loadPlugin(plugin) {
|
|
@@ -435,7 +464,6 @@ async function loadPlugin(plugin) {
|
|
|
435
464
|
console.log(err);
|
|
436
465
|
plugin.err = err;
|
|
437
466
|
var stack = err.stack;
|
|
438
|
-
var message;
|
|
439
467
|
if (stack) {
|
|
440
468
|
var i = stack.indexOf(plugin.file);
|
|
441
469
|
if (i > -1) {
|
|
@@ -449,7 +477,7 @@ async function loadPlugin(plugin) {
|
|
|
449
477
|
return plugin;
|
|
450
478
|
}
|
|
451
479
|
}
|
|
452
|
-
|
|
480
|
+
|
|
453
481
|
function loadNodeSetList(nodes) {
|
|
454
482
|
var promises = [];
|
|
455
483
|
nodes.forEach(function(node) {
|
|
@@ -471,7 +499,6 @@ function addModule(module) {
|
|
|
471
499
|
if (!settings.available()) {
|
|
472
500
|
throw new Error("Settings unavailable");
|
|
473
501
|
}
|
|
474
|
-
var nodes = [];
|
|
475
502
|
var existingInfo = registry.getModuleInfo(module);
|
|
476
503
|
if (existingInfo) {
|
|
477
504
|
// TODO: nls
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@node-red/registry",
|
|
3
|
-
"version": "5.0.0
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
}
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@node-red/util": "5.0.0
|
|
19
|
+
"@node-red/util": "5.0.0",
|
|
20
20
|
"clone": "2.1.2",
|
|
21
21
|
"fs-extra": "11.3.0",
|
|
22
|
-
"npm": "11.
|
|
22
|
+
"npm": "11.16.0",
|
|
23
23
|
"semver": "7.7.4",
|
|
24
24
|
"tar": "7.5.12",
|
|
25
25
|
"uglify-js": "3.19.3",
|