mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Merge pull request #3064 from node-red/revert-external-modules-dir
Move externalModules back into the user dir
This commit is contained in:
@@ -26,8 +26,7 @@ async function createUserDir() {
|
||||
}
|
||||
|
||||
async function setupExternalModulesPackage(dependencies) {
|
||||
await fs.ensureDir(path.join(homeDir,"externalModules"))
|
||||
await fs.writeFile(path.join(homeDir,"externalModules","package.json"),`{
|
||||
await fs.writeFile(path.join(homeDir,"package.json"),`{
|
||||
"name": "Node-RED-External-Modules",
|
||||
"description": "These modules are automatically installed by Node-RED to use in Function nodes.",
|
||||
"version": "1.0.0",
|
||||
@@ -68,7 +67,7 @@ describe("externalModules api", function() {
|
||||
exec.run.restore();
|
||||
})
|
||||
it("does nothing when no types are registered",async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
await externalModules.checkFlowDependencies([
|
||||
{type: "function", libs:[{module: "foo"}]}
|
||||
])
|
||||
@@ -76,7 +75,7 @@ describe("externalModules api", function() {
|
||||
});
|
||||
|
||||
it("skips install for modules already installed", async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
externalModules.register("function", "libs");
|
||||
await setupExternalModulesPackage({"foo": "1.2.3", "bar":"2.3.4"});
|
||||
await externalModules.checkFlowDependencies([
|
||||
@@ -86,7 +85,7 @@ describe("externalModules api", function() {
|
||||
})
|
||||
|
||||
it("skips install for built-in modules", async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
externalModules.register("function", "libs");
|
||||
await externalModules.checkFlowDependencies([
|
||||
{type: "function", libs:[{module: "fs"}]}
|
||||
@@ -95,19 +94,17 @@ describe("externalModules api", function() {
|
||||
})
|
||||
|
||||
it("installs missing modules", async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
externalModules.register("function", "libs");
|
||||
fs.existsSync(path.join(homeDir,"externalModules")).should.be.false();
|
||||
await externalModules.checkFlowDependencies([
|
||||
{type: "function", libs:[{module: "foo"}]}
|
||||
])
|
||||
exec.run.called.should.be.true();
|
||||
fs.existsSync(path.join(homeDir,"externalModules")).should.be.true();
|
||||
})
|
||||
|
||||
|
||||
it("calls pre/postInstall hooks", async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
externalModules.register("function", "libs");
|
||||
let receivedPreEvent,receivedPostEvent;
|
||||
hooks.add("preInstall", function(event) { event.args = ["a"]; receivedPreEvent = event; })
|
||||
@@ -122,11 +119,10 @@ describe("externalModules api", function() {
|
||||
receivedPreEvent.should.have.property("version")
|
||||
receivedPreEvent.should.have.property("dir")
|
||||
receivedPreEvent.should.eql(receivedPostEvent)
|
||||
fs.existsSync(path.join(homeDir,"externalModules")).should.be.true();
|
||||
})
|
||||
|
||||
it("skips npm install if preInstall returns false", async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
externalModules.register("function", "libs");
|
||||
let receivedPreEvent,receivedPostEvent;
|
||||
hooks.add("preInstall", function(event) { receivedPreEvent = event; return false })
|
||||
@@ -140,12 +136,11 @@ describe("externalModules api", function() {
|
||||
receivedPreEvent.should.have.property("version")
|
||||
receivedPreEvent.should.have.property("dir")
|
||||
receivedPreEvent.should.eql(receivedPostEvent)
|
||||
fs.existsSync(path.join(homeDir,"externalModules")).should.be.true();
|
||||
})
|
||||
|
||||
|
||||
it("installs missing modules from inside subflow module", async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
externalModules.register("function", "libs");
|
||||
externalModules.registerSubflow("sf", {"flow":[{type: "function", libs:[{module: "foo"}]}]});
|
||||
await externalModules.checkFlowDependencies([
|
||||
@@ -155,7 +150,7 @@ describe("externalModules api", function() {
|
||||
})
|
||||
|
||||
it("reports install fail - 404", async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
externalModules.register("function", "libs");
|
||||
try {
|
||||
await externalModules.checkFlowDependencies([
|
||||
@@ -174,7 +169,7 @@ describe("externalModules api", function() {
|
||||
}
|
||||
})
|
||||
it("reports install fail - target", async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
externalModules.register("function", "libs");
|
||||
try {
|
||||
await externalModules.checkFlowDependencies([
|
||||
@@ -193,7 +188,7 @@ describe("externalModules api", function() {
|
||||
})
|
||||
|
||||
it("reports install fail - unexpected", async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
externalModules.register("function", "libs");
|
||||
try {
|
||||
await externalModules.checkFlowDependencies([
|
||||
@@ -211,7 +206,7 @@ describe("externalModules api", function() {
|
||||
}
|
||||
})
|
||||
it("reports install fail - multiple", async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
externalModules.register("function", "libs");
|
||||
try {
|
||||
await externalModules.checkFlowDependencies([
|
||||
@@ -238,7 +233,7 @@ describe("externalModules api", function() {
|
||||
}
|
||||
})
|
||||
it("reports install fail - install disabled", async function() {
|
||||
externalModules.init({userDir: homeDir, externalModules: {
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}, externalModules: {
|
||||
modules: {
|
||||
allowInstall: false
|
||||
}
|
||||
@@ -262,7 +257,7 @@ describe("externalModules api", function() {
|
||||
})
|
||||
|
||||
it("reports install fail - module disallowed", async function() {
|
||||
externalModules.init({userDir: homeDir, externalModules: {
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}, externalModules: {
|
||||
modules: {
|
||||
denyList: ['foo']
|
||||
}
|
||||
@@ -287,7 +282,7 @@ describe("externalModules api", function() {
|
||||
})
|
||||
|
||||
it("reports install fail - built-in module disallowed", async function() {
|
||||
externalModules.init({userDir: homeDir, externalModules: {
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}, externalModules: {
|
||||
modules: {
|
||||
denyList: ['fs']
|
||||
}
|
||||
@@ -313,12 +308,12 @@ describe("externalModules api", function() {
|
||||
})
|
||||
describe("require", async function() {
|
||||
it("requires built-in modules", async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
const result = externalModules.require("fs")
|
||||
result.should.eql(require("fs"));
|
||||
})
|
||||
it("rejects unknown modules", async function() {
|
||||
externalModules.init({userDir: homeDir});
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
try {
|
||||
externalModules.require("foo")
|
||||
throw new Error("require did not reject after fail")
|
||||
@@ -328,7 +323,7 @@ describe("externalModules api", function() {
|
||||
})
|
||||
|
||||
it("rejects disallowed modules", async function() {
|
||||
externalModules.init({userDir: homeDir, externalModules: {
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}, externalModules: {
|
||||
modules: {
|
||||
denyList: ['fs']
|
||||
}
|
||||
@@ -341,4 +336,36 @@ describe("externalModules api", function() {
|
||||
}
|
||||
})
|
||||
})
|
||||
describe("import", async function() {
|
||||
it("import built-in modules", async function() {
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
const result = await externalModules.import("fs")
|
||||
// `result` won't have the `should` property
|
||||
should.exist(result);
|
||||
should.exist(result.existsSync);
|
||||
})
|
||||
it("rejects unknown modules", async function() {
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}});
|
||||
try {
|
||||
await externalModules.import("foo")
|
||||
throw new Error("import did not reject after fail")
|
||||
} catch(err) {
|
||||
err.should.have.property("code","module_not_allowed");
|
||||
}
|
||||
})
|
||||
|
||||
it("rejects disallowed modules", async function() {
|
||||
externalModules.init({userDir: homeDir, get:()=>{}, set:()=>{}, externalModules: {
|
||||
modules: {
|
||||
denyList: ['fs']
|
||||
}
|
||||
}});
|
||||
try {
|
||||
await externalModules.import("fs")
|
||||
throw new Error("import did not reject after fail")
|
||||
} catch(err) {
|
||||
err.should.have.property("code","module_not_allowed");
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
|
Reference in New Issue
Block a user