mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Merge branch 'master' into dev
This commit is contained in:
		
							
								
								
									
										56
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,3 +1,59 @@ | ||||
| #### 1.0.6: Maintenance Release | ||||
|  | ||||
| Runtime | ||||
|  | ||||
|  - Update to JSONata 1.8.3 | ||||
|  - #2536 Handle clone of null in utils | ||||
|  | ||||
| Editor | ||||
|  | ||||
|  - Prevent button label wrapping in typedInput | ||||
|  - Handle error objects when reporting in palette manager | ||||
|  | ||||
| Nodes | ||||
|  | ||||
|  - Inject: Revert to cron 1.7.2 | ||||
|  - UDP: when reusing input socket honour the broadcast mode. | ||||
|  | ||||
| #### 1.0.5: Maintenance Release | ||||
|  | ||||
| Runtime | ||||
|  | ||||
|  - #2500 Support for context stores using JSONata and evaluateNodeProperty() | ||||
|  - Add better handling of host-key-verify error with projects | ||||
|  - #2517 Handle false values in $env() properly | ||||
|  - #2514 Ensure complete node scope is remapped in subflows | ||||
|  - #2513 Flows/subflows must preinitialise their context objects | ||||
|  - Clear node.close timeout to avoid unnecessary work on restart | ||||
|  - #2532 Set flow.disabled when disabled property is false | ||||
|  - #2522 Ensure file context does not write 'undefined' to store | ||||
|  | ||||
| Editor | ||||
|  | ||||
|  - #2489 Fix XPath in UI tests | ||||
|  - #2504 Fix paletteCategories order | ||||
|  - #2501 Add page objects for UI testing | ||||
|  - #2494 Check node props when deciding if pasted node can splice links | ||||
|  - #2521 Don't double-sanitize node name in debug sidebar | ||||
|  - #2519 German i18n updates | ||||
|  - #2523 Update nodeTabMap when replacing unknown nodes | ||||
|  - Update TypedInput to use flexbox and remove resizing code | ||||
|  - Handle nodes with no wires array | ||||
|  - Do not collapse whitespace in Debug string messages | ||||
|  | ||||
| Nodes | ||||
|  | ||||
|  - File: Remove old legacy wording from file node info to stop confusing users. | ||||
|  - Join: Ensure join node handles missing buffer joiner when not in string mode | ||||
|  - Exec: make exec node logging consistent with itself. (only be verbose when in verbose mode) | ||||
|  - Trigger: reset default timeout value when switching away from wait for reset | ||||
|  - Join: Fix join to not crash on appending invalid types to buffer. | ||||
|  - MQTT out: Add warning if topic contains + or # | ||||
|  - #2502 WebSocket i18n update | ||||
|  - #2508 Add Japanese translation for join node | ||||
|  - TCP out: tidy up select of which rows to display | ||||
|  | ||||
|  | ||||
| #### 1.0.4: Maintenance Release | ||||
|  | ||||
| Runtime | ||||
|   | ||||
							
								
								
									
										16
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								package.json
									
									
									
									
									
								
							| @@ -32,9 +32,9 @@ | ||||
|         "clone": "2.1.2", | ||||
|         "content-type": "1.0.4", | ||||
|         "cookie": "0.4.0", | ||||
|         "cookie-parser": "1.4.4", | ||||
|         "cookie-parser": "1.4.5", | ||||
|         "cors": "2.8.5", | ||||
|         "cron": "1.8.2", | ||||
|         "cron": "1.7.2", | ||||
|         "denque": "1.4.1", | ||||
|         "express": "4.17.1", | ||||
|         "express-session": "1.17.0", | ||||
| @@ -47,18 +47,18 @@ | ||||
|         "is-utf8": "0.2.1", | ||||
|         "js-yaml": "3.13.1", | ||||
|         "json-stringify-safe": "5.0.1", | ||||
|         "jsonata": "1.8.1", | ||||
|         "jsonata": "1.8.3", | ||||
|         "lodash.clonedeep": "^4.5.0", | ||||
|         "media-typer": "1.1.0", | ||||
|         "memorystore": "1.6.2", | ||||
|         "mime": "2.4.4", | ||||
|         "mqtt": "2.18.8", | ||||
|         "multer": "1.4.2", | ||||
|         "mustache": "4.0.0", | ||||
|         "mustache": "4.0.1", | ||||
|         "node-red-node-rbe": "^0.2.6", | ||||
|         "node-red-node-sentiment": "^0.1.6", | ||||
|         "node-red-node-tail": "^0.1.0", | ||||
|         "nopt": "4.0.1", | ||||
|         "nopt": "4.0.3", | ||||
|         "oauth2orize": "1.11.0", | ||||
|         "on-headers": "1.0.2", | ||||
|         "passport": "0.4.1", | ||||
| @@ -67,16 +67,16 @@ | ||||
|         "raw-body": "2.4.1", | ||||
|         "request": "2.88.0", | ||||
|         "semver": "6.3.0", | ||||
|         "uglify-js": "3.8.0", | ||||
|         "uglify-js": "3.8.1", | ||||
|         "when": "3.7.8", | ||||
|         "ws": "6.2.1", | ||||
|         "xml2js": "0.4.23" | ||||
|     }, | ||||
|     "optionalDependencies": { | ||||
|         "bcrypt": "3.0.6" | ||||
|         "bcrypt": "3.0.8" | ||||
|     }, | ||||
|     "devDependencies": { | ||||
|         "marked": "0.8.0", | ||||
|         "marked": "0.8.2", | ||||
|         "dompurify": "2.0.8", | ||||
|         "grunt": "~1.0.4", | ||||
|         "grunt-chmod": "~1.1.1", | ||||
|   | ||||
| @@ -26,7 +26,7 @@ | ||||
|         "express": "4.17.1", | ||||
|         "memorystore": "1.6.2", | ||||
|         "mime": "2.4.4", | ||||
|         "mustache": "4.0.0", | ||||
|         "mustache": "4.0.1", | ||||
|         "oauth2orize": "1.11.0", | ||||
|         "passport-http-bearer": "1.0.1", | ||||
|         "passport-oauth2-client-password": "0.1.2", | ||||
|   | ||||
| @@ -1224,7 +1224,7 @@ RED.nodes = (function() { | ||||
|                                     defaults: {}, | ||||
|                                     label: "unknown: "+n.type, | ||||
|                                     labelStyle: "red-ui-flow-node-label-italic", | ||||
|                                     outputs: n.outputs||n.wires.length, | ||||
|                                     outputs: n.outputs|| (n.wires && n.wires.length) || 0, | ||||
|                                     set: registry.getNodeSet("node-red/unknown") | ||||
|                                 } | ||||
|                             } else { | ||||
|   | ||||
| @@ -737,11 +737,13 @@ | ||||
|                             this.optionExpandButton.shown = false; | ||||
|                         } | ||||
|                         if (this.optionSelectTrigger) { | ||||
|                             this.optionSelectTrigger.show(); | ||||
|                             this.optionSelectTrigger.css({"display":"inline-flex"}); | ||||
|                             if (!opt.hasValue) { | ||||
|                                 this.optionSelectTrigger.css({"flex-grow":1}) | ||||
|                                 this.elementDiv.hide(); | ||||
|                                 this.valueLabelContainer.hide(); | ||||
|                             } else { | ||||
|                                 this.optionSelectTrigger.css({"flex-grow":0}) | ||||
|                                 this.elementDiv.show(); | ||||
|                                 this.valueLabelContainer.hide(); | ||||
|                             } | ||||
|   | ||||
| @@ -223,7 +223,11 @@ RED.palette.editor = (function() { | ||||
|                         var setElements = nodeEntry.sets[setName]; | ||||
|                         if (set.err) { | ||||
|                             errorCount++; | ||||
|                             $("<li>").text(set.err).appendTo(nodeEntry.errorList); | ||||
|                             var errMessage = set.err; | ||||
|                             if (set.err.message) { | ||||
|                                 errMessage = set.err.message; | ||||
|                             } | ||||
|                             $("<li>").text(errMessage).appendTo(nodeEntry.errorList); | ||||
|                         } | ||||
|                         if (set.enabled) { | ||||
|                             activeTypeCount += set.types.length; | ||||
|   | ||||
| @@ -217,6 +217,10 @@ | ||||
| .red-ui-debug-msg-type-number { color: $debug-message-text-color-msg-type-number; }; | ||||
| .red-ui-debug-msg-type-number-toggle { cursor: pointer;} | ||||
|  | ||||
| .red-ui-debug-msg-type-string { | ||||
|     white-space: pre-wrap; | ||||
| } | ||||
|  | ||||
| .red-ui-debug-msg-row { | ||||
|     display: block; | ||||
|     padding: 4px 2px 2px; | ||||
|   | ||||
| @@ -760,7 +760,7 @@ button.red-ui-toggleButton.toggle { | ||||
|             .red-ui-typedInput-value-label,.red-ui-typedInput-option-label { | ||||
|                 select,.placeholder-input  { | ||||
|                     margin: 3px; | ||||
|                     height: 26px; | ||||
|                     height: 24px; | ||||
|                     width: calc(100% - 10px); | ||||
|                     padding-left: 3px; | ||||
|                 } | ||||
|   | ||||
| @@ -110,9 +110,9 @@ button.red-ui-typedInput-option-trigger | ||||
|     background: $form-button-background; | ||||
|     height: 32px; | ||||
|     line-height: 30px; | ||||
|     min-width: 23px; | ||||
|     vertical-align: middle; | ||||
|     color: $form-text-color; | ||||
|     white-space: nowrap; | ||||
|     i.red-ui-typedInput-icon { | ||||
|         margin-left: 1px; | ||||
|         margin-right: 2px; | ||||
| @@ -174,25 +174,21 @@ button.red-ui-typedInput-option-trigger { | ||||
|     padding: 0 0 0 0; | ||||
|     position:relative; | ||||
|     flex-grow: 1; | ||||
|     line-height: 32px; | ||||
|     display: inline-flex; | ||||
|     .red-ui-typedInput-option-label { | ||||
|         background:$form-button-background; | ||||
|         color: $form-text-color; | ||||
|         position:absolute; | ||||
|         left:0; | ||||
|         right:23px; | ||||
|         top: 0; | ||||
|         padding: 0 5px 0 8px; | ||||
|         i.red-ui-typedInput-icon { | ||||
|             margin-right: 4px; | ||||
|         } | ||||
|         flex-grow: 1; | ||||
|         padding: 0 0 0 8px; | ||||
|         display:inline-block; | ||||
|     } | ||||
|     .red-ui-typedInput-option-caret { | ||||
|         top: 0; | ||||
|         position: absolute; | ||||
|         right: 0; | ||||
|         bottom: 0; | ||||
|         width: 17px; | ||||
|         padding-left: 5px; | ||||
|         flex-grow: 0; | ||||
|         display:inline-block; | ||||
|         width: 23px; | ||||
|         text-align: center; | ||||
|         height: 100%; | ||||
|         &:before { | ||||
|             content:''; | ||||
|             display: inline-block; | ||||
|   | ||||
| @@ -1,5 +1,10 @@ | ||||
|  | ||||
| <script type="text/html" data-template-name="change"> | ||||
|     <style> | ||||
|         ol#node-input-rule-container .red-ui-typedInput-container { | ||||
|             flex:1; | ||||
|         } | ||||
|     </style> | ||||
|     <div class="form-row"> | ||||
|         <label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label> | ||||
|         <input type="text" id="node-input-name" data-i18n="[placeholder]common.label.name"> | ||||
| @@ -76,11 +81,6 @@ | ||||
|             var replace = this._("change.action.replace"); | ||||
|             var regex = this._("change.label.regex"); | ||||
|  | ||||
|             function resizeRule(rule) { | ||||
|                 var newWidth = rule.width(); | ||||
|                 rule.find('.red-ui-typedInput').typedInput("width",newWidth-130); | ||||
|  | ||||
|             } | ||||
|             $('#node-input-rule-container').css('min-height','150px').css('min-width','450px').editableList({ | ||||
|                 addItem: function(container,i,opt) { | ||||
|                     var rule = opt; | ||||
| @@ -106,10 +106,11 @@ | ||||
|                         overflow: 'hidden', | ||||
|                         whiteSpace: 'nowrap' | ||||
|                     }); | ||||
|                     var row1 = $('<div/>').appendTo(container); | ||||
|                     var row2 = $('<div/>',{style:"margin-top:8px;"}).appendTo(container); | ||||
|                     var row3 = $('<div/>',{style:"margin-top:8px;"}).appendTo(container); | ||||
|                     var row4 = $('<div/>',{style:"margin-top:8px;"}).appendTo(container); | ||||
|                     let fragment = document.createDocumentFragment(); | ||||
|                     var row1 = $('<div/>',{style:"display:flex;"}).appendTo(fragment); | ||||
|                     var row2 = $('<div/>',{style:"display:flex;margin-top:8px;"}).appendTo(fragment); | ||||
|                     var row3 = $('<div/>',{style:"margin-top:8px;"}).appendTo(fragment); | ||||
|                     var row4 = $('<div/>',{style:"display:flex;margin-top:8px;"}).appendTo(fragment); | ||||
|  | ||||
|                     var selectField = $('<select/>',{class:"node-input-rule-type",style:"width:110px; margin-right:10px;"}).appendTo(row1); | ||||
|                     var selectOptions = [{v:"set",l:set},{v:"change",l:change},{v:"delete",l:del},{v:"move",l:move}]; | ||||
| @@ -124,41 +125,82 @@ | ||||
|                     $('<div/>',{style:"display:inline-block;text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) | ||||
|                         .text(to) | ||||
|                         .appendTo(row2); | ||||
|                     var propertyValue = $('<input/>',{class:"node-input-rule-property-value",type:"text"}) | ||||
|  | ||||
|                     function createPropertyValue() { | ||||
|                         return $('<input/>',{class:"node-input-rule-property-value",type:"text"}) | ||||
|                         .appendTo(row2) | ||||
|                         .typedInput({default:'str',types:['msg','flow','global','str','num','bool','json','bin','date','jsonata','env']}); | ||||
|                     } | ||||
|  | ||||
|                     var row3_1 = $('<div/>').appendTo(row3); | ||||
|                     var row3_1 = $('<div/>', {style:"display:flex;"}).appendTo(row3); | ||||
|                     $('<div/>',{style:"display:inline-block;text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) | ||||
|                         .text(search) | ||||
|                         .appendTo(row3_1); | ||||
|                     var fromValue = $('<input/>',{class:"node-input-rule-property-search-value",type:"text"}) | ||||
|  | ||||
|                     function createFromValue() { | ||||
|                         return $('<input/>',{class:"node-input-rule-property-search-value",type:"text"}) | ||||
|                         .appendTo(row3_1) | ||||
|                         .typedInput({default:'str',types:['msg','flow','global','str','re','num','bool','env']}); | ||||
|                     } | ||||
|  | ||||
|                     var row3_2 = $('<div/>',{style:"margin-top:8px;"}).appendTo(row3); | ||||
|                     var row3_2 = $('<div/>',{style:"display:flex;margin-top:8px;"}).appendTo(row3); | ||||
|                     $('<div/>',{style:"display:inline-block;text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) | ||||
|                         .text(replace) | ||||
|                         .appendTo(row3_2); | ||||
|                     var toValue = $('<input/>',{class:"node-input-rule-property-replace-value",type:"text"}) | ||||
|  | ||||
|                     function createToValue() { | ||||
|                         return $('<input/>',{class:"node-input-rule-property-replace-value",type:"text"}) | ||||
|                         .appendTo(row3_2) | ||||
|                         .typedInput({default:'str',types:['msg','flow','global','str','num','bool','json','bin','env']}); | ||||
|                     } | ||||
|  | ||||
|                     $('<div/>',{style:"display:inline-block;text-align:right; width:120px; padding-right:10px; box-sizing:border-box;"}) | ||||
|                         .text(to) | ||||
|                         .appendTo(row4); | ||||
|                     var moveValue = $('<input/>',{class:"node-input-rule-property-move-value",type:"text"}) | ||||
|  | ||||
|                     function createMoveValue() { | ||||
|                         return $('<input/>',{class:"node-input-rule-property-move-value",type:"text"}) | ||||
|                         .appendTo(row4) | ||||
|                         .typedInput({default:'msg',types:['msg','flow','global']}); | ||||
|                     } | ||||
|  | ||||
|                     let propertyValue = null; | ||||
|                     let fromValue = null; | ||||
|                     let toValue = null; | ||||
|                     let moveValue = null; | ||||
|  | ||||
|                     selectField.on("change", function() { | ||||
|                         var width = $("#node-input-rule-container").width(); | ||||
|                         var type = $(this).val(); | ||||
|                         if (propertyValue) { | ||||
|                             propertyValue.typedInput('hide'); | ||||
|                         } | ||||
|                         if (fromValue) { | ||||
|                             fromValue.typedInput('hide'); | ||||
|                         } | ||||
|                         if (toValue) { | ||||
|                             toValue.typedInput('hide'); | ||||
|                         } | ||||
|                         if (moveValue) { | ||||
|                             moveValue.typedInput('hide'); | ||||
|                         } | ||||
|  | ||||
|                         if (type == "set") { | ||||
|                             if(!propertyValue) { | ||||
|                                 propertyValue = createPropertyValue(); | ||||
|                             } | ||||
|                             propertyValue.typedInput('show'); | ||||
|                             row2.show(); | ||||
|                             row3.hide(); | ||||
|                             row4.hide(); | ||||
|                         } else if (type == "change") { | ||||
|                             if(!fromValue) { | ||||
|                                 fromValue = createFromValue(); | ||||
|                             } | ||||
|                             fromValue.typedInput('show'); | ||||
|                             if(!toValue) { | ||||
|                                 toValue = createToValue(); | ||||
|                             } | ||||
|                             toValue.typedInput('show'); | ||||
|                             row2.hide(); | ||||
|                             row3.show(); | ||||
|                             row4.hide(); | ||||
| @@ -167,30 +209,48 @@ | ||||
|                             row3.hide(); | ||||
|                             row4.hide(); | ||||
|                         } else if (type == "move") { | ||||
|                             if(!moveValue) { | ||||
|                                 moveValue = createMoveValue(); | ||||
|                             } | ||||
|                             moveValue.typedInput('show'); | ||||
|                             row2.hide(); | ||||
|                             row3.hide(); | ||||
|                             row4.show(); | ||||
|                         } | ||||
|                         resizeRule(container); | ||||
|                     }); | ||||
|  | ||||
|                     selectField.val(rule.t); | ||||
|                     propertyName.typedInput('value',rule.p); | ||||
|                     propertyName.typedInput('type',rule.pt); | ||||
|                     propertyValue.typedInput('value',rule.to); | ||||
|                     propertyValue.typedInput('type',rule.tot); | ||||
|                     moveValue.typedInput('value',rule.to); | ||||
|                     moveValue.typedInput('type',rule.tot); | ||||
|                     fromValue.typedInput('value',rule.from); | ||||
|                     fromValue.typedInput('type',rule.fromt); | ||||
|                     toValue.typedInput('value',rule.to); | ||||
|                     toValue.typedInput('type',rule.tot); | ||||
|                     if (rule.t == "set") { | ||||
|                         if(!propertyValue) { | ||||
|                             propertyValue = createPropertyValue(); | ||||
|                         } | ||||
|                         propertyValue.typedInput('value',rule.to); | ||||
|                         propertyValue.typedInput('type',rule.tot); | ||||
|                     } | ||||
|                     if (rule.t == "move") { | ||||
|                         if(!moveValue) { | ||||
|                             moveValue = createMoveValue(); | ||||
|                         } | ||||
|                         moveValue.typedInput('value',rule.to); | ||||
|                         moveValue.typedInput('type',rule.tot); | ||||
|                     } | ||||
|                     if (rule.t == "change") { | ||||
|                         if(!fromValue) { | ||||
|                             fromValue = createFromValue(); | ||||
|                         } | ||||
|                         fromValue.typedInput('value',rule.from); | ||||
|                         fromValue.typedInput('type',rule.fromt); | ||||
|                         if (!toValue) { | ||||
|                             toValue = createToValue(); | ||||
|                         } | ||||
|                         toValue.typedInput('value',rule.to); | ||||
|                         toValue.typedInput('type',rule.tot); | ||||
|                     } | ||||
|                     selectField.change(); | ||||
|  | ||||
|                     var newWidth = $("#node-input-rule-container").width(); | ||||
|                     resizeRule(container); | ||||
|                     container[0].appendChild(fragment); | ||||
|                 }, | ||||
|                 resizeItem: resizeRule, | ||||
|                 removable: true, | ||||
|                 sortable: true | ||||
|             }); | ||||
|   | ||||
| @@ -170,15 +170,14 @@ | ||||
|                     $("#node-input-port-row").hide(); | ||||
|                     $("#node-input-host-row").hide(); | ||||
|                     $("#node-input-end-row").hide(); | ||||
|                 } else if (sockettype == "client"){ | ||||
|                     $("#node-input-port-row").show(); | ||||
|                     $("#node-input-host-row").show(); | ||||
|                     $("#node-input-end-row").show(); | ||||
|                 } else { | ||||
|                     $("#node-input-port-row").show(); | ||||
|                     $("#node-input-end-row").show(); | ||||
|                 } | ||||
|  | ||||
|                 if (sockettype == "client") { | ||||
|                     $("#node-input-host-row").show(); | ||||
|                 } else { | ||||
|                     $("#node-input-host-row").hide(); | ||||
|                     $("#node-input-end-row").show(); | ||||
|                 } | ||||
|             }; | ||||
|             updateOptions(); | ||||
|   | ||||
| @@ -180,6 +180,10 @@ module.exports = function(RED) { | ||||
|         node.tout = setTimeout(function() { | ||||
|             if (udpInputPortsInUse[p]) { | ||||
|                 sock = udpInputPortsInUse[p]; | ||||
|                 if (node.multicast != "false") { | ||||
|                     sock.setBroadcast(true); | ||||
|                     sock.setMulticastLoopback(false); | ||||
|                 } | ||||
|                 node.log(RED._("udp.status.re-use",{outport:node.outport,host:node.addr,port:node.port})); | ||||
|                 if (node.iface) { node.status({text:n.iface+" : "+node.iface}); } | ||||
|             } | ||||
|   | ||||
| @@ -19,10 +19,10 @@ | ||||
|         "body-parser": "1.19.0", | ||||
|         "cheerio": "0.22.0", | ||||
|         "content-type": "1.0.4", | ||||
|         "cookie-parser": "1.4.4", | ||||
|         "cookie-parser": "1.4.5", | ||||
|         "cookie": "0.4.0", | ||||
|         "cors": "2.8.5", | ||||
|         "cron": "1.8.2", | ||||
|         "cron": "1.7.2", | ||||
|         "denque": "1.4.1", | ||||
|         "fs-extra": "8.1.0", | ||||
|         "fs.notify": "0.0.4", | ||||
| @@ -33,7 +33,7 @@ | ||||
|         "media-typer": "1.1.0", | ||||
|         "mqtt": "2.18.8", | ||||
|         "multer": "1.4.2", | ||||
|         "mustache": "4.0.0", | ||||
|         "mustache": "4.0.1", | ||||
|         "on-headers": "1.0.2", | ||||
|         "raw-body": "2.4.1", | ||||
|         "request": "2.88.0", | ||||
|   | ||||
| @@ -18,7 +18,7 @@ | ||||
|     "dependencies": { | ||||
|         "@node-red/util": "1.1.0", | ||||
|         "semver": "6.3.0", | ||||
|         "uglify-js": "3.8.0", | ||||
|         "uglify-js": "3.8.1", | ||||
|         "when": "3.7.8" | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -203,10 +203,10 @@ LocalFileSystem.prototype.open = function(){ | ||||
|                 var newContext = self.cache._export(); | ||||
|                 scopes.forEach(function(scope) { | ||||
|                     var storagePath = getStoragePath(self.storageBaseDir,scope); | ||||
|                     var context = newContext[scope]; | ||||
|                     var context = newContext[scope] || {}; | ||||
|                     var stringifiedContext = stringify(context); | ||||
|                     if (stringifiedContext.circular && !self.knownCircularRefs[scope]) { | ||||
|                         log.warn(log._("error-circular",{scope:scope})); | ||||
|                         log.warn(log._("context.localfilesystem.error-circular",{scope:scope})); | ||||
|                         self.knownCircularRefs[scope] = true; | ||||
|                     } else { | ||||
|                         delete self.knownCircularRefs[scope]; | ||||
| @@ -324,7 +324,7 @@ LocalFileSystem.prototype.set = function(scope, key, value, callback) { | ||||
|             } | ||||
|             var stringifiedContext = stringify(obj); | ||||
|             if (stringifiedContext.circular && !self.knownCircularRefs[scope]) { | ||||
|                 log.warn(log._("error-circular",{scope:scope})); | ||||
|                 log.warn(log._("context.localfilesystem.error-circular",{scope:scope})); | ||||
|                 self.knownCircularRefs[scope] = true; | ||||
|             } else { | ||||
|                 delete self.knownCircularRefs[scope]; | ||||
|   | ||||
| @@ -553,7 +553,7 @@ function getFlow(id) { | ||||
|     if (flow.label) { | ||||
|         result.label = flow.label; | ||||
|     } | ||||
|     if (flow.disabled) { | ||||
|     if (flow.hasOwnProperty('disabled')) { | ||||
|         result.disabled = flow.disabled; | ||||
|     } | ||||
|     if (flow.hasOwnProperty('info')) { | ||||
|   | ||||
| @@ -18,7 +18,7 @@ | ||||
|         "clone": "2.1.2", | ||||
|         "i18next": "15.1.2", | ||||
|         "json-stringify-safe": "5.0.1", | ||||
|         "jsonata": "1.8.1", | ||||
|         "jsonata": "1.8.3", | ||||
|         "lodash.clonedeep": "^4.5.0", | ||||
|         "when": "3.7.8" | ||||
|     } | ||||
|   | ||||
							
								
								
									
										2
									
								
								packages/node_modules/node-red/package.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								packages/node_modules/node-red/package.json
									
									
									
									
										vendored
									
									
								
							| @@ -41,7 +41,7 @@ | ||||
|         "fs-extra": "8.1.0", | ||||
|         "node-red-node-rbe": "^0.2.6", | ||||
|         "node-red-node-tail": "^0.1.0", | ||||
|         "nopt": "4.0.1", | ||||
|         "nopt": "4.0.3", | ||||
|         "semver": "6.3.0" | ||||
|     }, | ||||
|     "optionalDependencies": { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user