changed rules property to be stored as a JSON string

This commit is contained in:
Niko Vujić
2025-12-31 10:29:00 +01:00
parent e07341fa05
commit 7c9c1ddf3a
4 changed files with 52 additions and 27 deletions

View File

@@ -5,7 +5,7 @@ RED.nodes.registerType('xilica-listen', {
defaults: {
name: { value: "" },
connection: { value: "", type: "xilica-connection" },
rules: { value: [] }
rules: { value: "[]" }
},
inputs: 1,
outputs: 1,
@@ -18,17 +18,12 @@ RED.nodes.registerType('xilica-listen', {
},
oneditprepare: function () {
var node = this;
var rules = node.rules || [];
if (typeof rules === "string") {
var rules;
try {
rules = JSON.parse(rules);
rules = node.rules ? JSON.parse(node.rules) : [];
} catch (e) {
rules = [];
}
}
if (!Array.isArray(rules)) {
rules = [];
}
$("#node-input-rules").editableList({
addItem: function (container, index, rule) {
@@ -118,7 +113,7 @@ RED.nodes.registerType('xilica-listen', {
rules.push(rule);
});
this.rules = rules;
this.rules = JSON.stringify(rules);
}
});
</script>

View File

@@ -54,7 +54,15 @@ module.exports = function (RED) {
RED.nodes.createNode(this, config);
const node = this;
node.rules = Array.isArray(config.rules) ? config.rules : [];
let storedRules = config.rules;
if (typeof storedRules === "string") {
try {
storedRules = JSON.parse(storedRules);
} catch (e) {
storedRules = [];
}
}
node.rules = Array.isArray(storedRules) ? storedRules : [];
node.on("input", (msg, send, done) => {
send =
@@ -76,7 +84,17 @@ module.exports = function (RED) {
return;
}
const rules = Array.isArray(msg.rules) ? msg.rules : node.rules;
let rules = msg.rules || node.rules;
if (typeof rules === "string") {
try {
rules = JSON.parse(rules);
} catch (e) {
rules = [];
}
}
if (!Array.isArray(rules)) {
rules = [];
}
const names = buildControlNamesFromRules(rules);
const matchAll = names.length === 0;
const allowed = new Set(names);
@@ -139,4 +157,3 @@ module.exports = function (RED) {
RED.nodes.registerType("xilica-listen", XilicaListen);
};

View File

@@ -6,7 +6,7 @@ RED.nodes.registerType('xilica-subscribe', {
name: { value: "" },
action: { value: "subscribe" },
connection: { value: "", type: "xilica-connection" },
rules: { value: [] },
rules: { value: "[]" },
transport: { value: "TCP" }
},
inputs: 1,
@@ -21,17 +21,12 @@ RED.nodes.registerType('xilica-subscribe', {
},
oneditprepare: function () {
var node = this;
var rules = node.rules || [];
if (typeof rules === "string") {
var rules;
try {
rules = JSON.parse(rules);
rules = node.rules ? JSON.parse(node.rules) : [];
} catch (e) {
rules = [];
}
}
if (!Array.isArray(rules)) {
rules = [];
}
$("#node-input-rules").editableList({
addItem: function (container, index, rule) {
@@ -121,7 +116,7 @@ RED.nodes.registerType('xilica-subscribe', {
rules.push(rule);
});
this.rules = rules;
this.rules = JSON.stringify(rules);
}
});
</script>

View File

@@ -65,7 +65,15 @@ module.exports = function (RED) {
const node = this;
node.action = config.action || "subscribe";
node.rules = Array.isArray(config.rules) ? config.rules : [];
let storedRules = config.rules;
if (typeof storedRules === "string") {
try {
storedRules = JSON.parse(storedRules);
} catch (e) {
storedRules = [];
}
}
node.rules = Array.isArray(storedRules) ? storedRules : [];
node.transport = config.transport || "TCP";
node.connectionConfig = RED.nodes.getNode(config.connection);
@@ -78,7 +86,17 @@ module.exports = function (RED) {
done = done || function () {};
const action = normaliseAction(msg.action || node.action);
const rules = Array.isArray(msg.rules) ? msg.rules : node.rules;
let rules = msg.rules || node.rules;
if (typeof rules === "string") {
try {
rules = JSON.parse(rules);
} catch (e) {
rules = [];
}
}
if (!Array.isArray(rules)) {
rules = [];
}
const transport =
typeof msg.transport === "string" && msg.transport.trim().length