diff --git a/CHANGELOG.md b/CHANGELOG.md index b453108b3..9bb84978a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,12 @@ Nodes - Add expand editor button to Template node - Update catch/status nodes to use selectNodes api and treeList +#### 0.20.7: Maintenance Release + + - Update jsonata to 1.6.5 which should fix #2183 + - Ensure the subflow stop promise is waiting for before restarting + - Properly escape node types in palette + #### 0.20.6: Maintenance Release - Revealing node position needs to account for zoom level Fixes #2172 diff --git a/package.json b/package.json index 400fc0902..92bc8020d 100644 --- a/package.json +++ b/package.json @@ -37,38 +37,35 @@ "cron": "1.7.1", "denque": "1.4.1", "express": "4.17.1", - "express-session": "1.16.1", - "fs-extra": "8.0.1", + "express-session": "1.16.2", + "fs-extra": "8.1.0", "fs.notify": "0.0.4", - "hash-sum": "1.0.2", + "hash-sum": "2.0.0", "https-proxy-agent": "2.2.1", "i18next": "15.1.2", - "iconv-lite": "0.4.24", + "iconv-lite": "0.5.0", "is-utf8": "0.2.1", "js-yaml": "3.13.1", "json-stringify-safe": "5.0.1", - "jsonata": "1.6.4", + "jsonata": "1.6.5", "media-typer": "1.1.0", "memorystore": "1.6.1", "mime": "2.4.4", "mqtt": "2.18.8", "multer": "1.4.1", "mustache": "3.0.1", - "node-red-node-email": "^1.4.0", - "node-red-node-feedparser": "^0.1.14", "node-red-node-rbe": "^0.2.4", "node-red-node-sentiment": "^0.1.3", "node-red-node-tail": "^0.0.2", - "node-red-node-twitter": "^1.1.4", "nopt": "4.0.1", "oauth2orize": "1.11.0", "on-headers": "1.0.2", "passport": "0.4.0", "passport-http-bearer": "1.0.1", "passport-oauth2-client-password": "0.1.2", - "raw-body": "2.4.0", + "raw-body": "2.4.1", "request": "2.88.0", - "semver": "6.1.1", + "semver": "6.2.0", "uglify-js": "3.6.0", "when": "3.7.8", "ws": "6.2.1", @@ -78,7 +75,7 @@ "bcrypt": "3.0.6" }, "devDependencies": { - "grunt": "~1.0.3", + "grunt": "~1.0.4", "grunt-chmod": "~1.1.1", "grunt-cli": "~1.3.2", "grunt-concurrent": "~2.3.1", @@ -112,7 +109,7 @@ "wdio-mocha-framework": "^0.6.4", "wdio-spec-reporter": "^0.1.5", "webdriverio": "^4.14.1", - "node-red-node-test-helper": "^0.2.2", + "node-red-node-test-helper": "^0.2.3", "jsdoc-nr-template": "node-red/jsdoc-nr-template" }, "engines": { diff --git a/packages/node_modules/@node-red/editor-api/lib/auth/tokens.js b/packages/node_modules/@node-red/editor-api/lib/auth/tokens.js index 31c12d228..6e867d7df 100644 --- a/packages/node_modules/@node-red/editor-api/lib/auth/tokens.js +++ b/packages/node_modules/@node-red/editor-api/lib/auth/tokens.js @@ -56,7 +56,7 @@ function expireSessions() { } if (nextExpiry < Number.MAX_SAFE_INTEGER) { // Allow 5 seconds grace - expiryTimeout = setTimeout(expireSessions,(nextExpiry - Date.now()) + 5000) + expiryTimeout = setTimeout(expireSessions,Math.min(2147483647,(nextExpiry - Date.now()) + 5000)) } if (modified) { return storage.saveSessions(sessions); @@ -129,7 +129,7 @@ module.exports = { sessions[accessToken] = session; if (!expiryTimeout) { - expiryTimeout = setTimeout(expireSessions,(accessTokenExpiresAt - Date.now()) + 5000) + expiryTimeout = setTimeout(expireSessions,Math.min(2147483647,(accessTokenExpiresAt - Date.now()) + 5000)) } return storage.saveSessions(sessions).then(function() { diff --git a/packages/node_modules/@node-red/editor-api/package.json b/packages/node_modules/@node-red/editor-api/package.json index 8497fd8b6..e4b3b1f69 100644 --- a/packages/node_modules/@node-red/editor-api/package.json +++ b/packages/node_modules/@node-red/editor-api/package.json @@ -22,7 +22,7 @@ "body-parser": "1.19.0", "clone": "2.1.2", "cors": "2.8.5", - "express-session": "1.16.1", + "express-session": "1.16.2", "express": "4.17.1", "memorystore": "1.6.1", "mime": "2.4.4", @@ -35,6 +35,6 @@ "ws": "6.2.1" }, "optionalDependencies": { - "bcrypt": "3.0.5" + "bcrypt": "3.0.6" } } diff --git a/packages/node_modules/@node-red/editor-client/src/js/nodes.js b/packages/node_modules/@node-red/editor-client/src/js/nodes.js index 62949efce..63027aed1 100644 --- a/packages/node_modules/@node-red/editor-client/src/js/nodes.js +++ b/packages/node_modules/@node-red/editor-client/src/js/nodes.js @@ -17,6 +17,8 @@ RED.nodes = (function() { var node_defs = {}; var nodes = []; + var nodeTabMap = {}; + var configNodes = {}; var links = []; var defaultWorkspace; @@ -213,6 +215,11 @@ RED.nodes = (function() { n.i = nextId+1; } nodes.push(n); + if (nodeTabMap[n.z]) { + nodeTabMap[n.z][n.id] = n; + } else { + console.warn("Node added to unknown tab/subflow:",n); + } } RED.events.emit('nodes:add',n); } @@ -246,6 +253,9 @@ RED.nodes = (function() { node = getNode(id); if (node) { nodes.splice(nodes.indexOf(node),1); + if (nodeTabMap[node.z]) { + delete nodeTabMap[node.z][node.id]; + } removedLinks = links.filter(function(l) { return (l.source === node) || (l.target === node); }); removedLinks.forEach(function(l) {links.splice(links.indexOf(l), 1); }); var updatedConfigNode = false; @@ -300,6 +310,8 @@ RED.nodes = (function() { function addWorkspace(ws,targetIndex) { workspaces[ws.id] = ws; + nodeTabMap[ws.id] = {}; + ws._def = RED.nodes.getType('tab'); if (targetIndex === undefined) { workspacesOrder.push(ws.id); @@ -312,6 +324,7 @@ RED.nodes = (function() { } function removeWorkspace(id) { delete workspaces[id]; + delete nodeTabMap[ws.id]; workspacesOrder.splice(workspacesOrder.indexOf(id),1); var removedNodes = []; @@ -357,6 +370,8 @@ RED.nodes = (function() { sf.name = subflowName; } subflows[sf.id] = sf; + nodeTabMap[sf.id] = {}; + RED.nodes.registerType("subflow:"+sf.id, { defaults:{ name:{value:""}, @@ -393,6 +408,7 @@ RED.nodes = (function() { } function removeSubflow(sf) { delete subflows[sf.id]; + delete nodeTabMap[sf.id]; registry.removeNodeType("subflow:"+sf.id); } @@ -1266,12 +1282,13 @@ RED.nodes = (function() { // TODO: supports filter.z|type function filterNodes(filter) { var result = []; + var searchSet = nodes; + if (filter.hasOwnProperty("z") && Object.hasOwnProperty("values") && nodeTabMap.hasOwnProperty(filter.z) ) { + searchSet = Object.values(nodeTabMap[filter.z]); + } - for (var n=0;n", { + class: "form-row" + }).appendTo(dialogForm); + $("