mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Compare commits
	
		
			18 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | b855438af6 | ||
|  | 2ffea143e7 | ||
|  | 61d85b49e6 | ||
|  | 35f617e96c | ||
|  | 6b6ad47c35 | ||
|  | e57183ed0e | ||
|  | ecfd61a822 | ||
|  | 153f87704b | ||
|  | 836f7d2163 | ||
|  | d4d6f71cf4 | ||
|  | 42a9da006e | ||
|  | 2bd5c4f527 | ||
|  | 6a49b5c106 | ||
|  | 23e14d1b72 | ||
|  | f4f11c8884 | ||
|  | 2b220abdb7 | ||
|  | c1d947ebe3 | ||
|  | d695cf392e | 
							
								
								
									
										25
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,3 +1,28 @@ | ||||
| #### 2.1.2: Maintenance Release | ||||
|  | ||||
|  | ||||
| Runtime | ||||
|  | ||||
|  - node-red-pi: Remove bash dependency (#3216) @a16bitsysop | ||||
|  | ||||
| Editor | ||||
|  | ||||
|  - Improved regex for markdown renderer (#3213) @GerwinvBeek | ||||
|  - Fix TypedInput initialisation (#3220) @knolleary | ||||
|  | ||||
| Nodes | ||||
|  | ||||
|  - MQTT: fix datatype in node config not used. fixes #3215 (#3219) @Steve-Mcl | ||||
|  | ||||
| #### 2.1.1: Maintenance Release | ||||
|  | ||||
| Editor | ||||
|  | ||||
|  - Ensure tourGuide popover doesn't fall offscreen (#3212) @knolleary | ||||
|  - Fix issue with old inject nodes that migrated topic to 'string' type (#3210) @knolleary | ||||
|  - Add cache-busting query params to index.mst (#3211) @knolleary | ||||
|  - Fix TypedInput validation of type without options (#3207) @knolleary | ||||
|  | ||||
| #### 2.1.0: Milestone Release | ||||
|  | ||||
| Editor | ||||
|   | ||||
| @@ -583,7 +583,7 @@ module.exports = function(grunt) { | ||||
|     grunt.registerMultiTask('attachCopyright', function() { | ||||
|         var files = this.data.src; | ||||
|         var copyright = "/**\n"+ | ||||
|             " * Copyright JS Foundation and other contributors, http://js.foundation\n"+ | ||||
|             " * Copyright OpenJS Foundation and other contributors, https://openjsf.org/\n"+ | ||||
|             " *\n"+ | ||||
|             " * Licensed under the Apache License, Version 2.0 (the \"License\");\n"+ | ||||
|             " * you may not use this file except in compliance with the License.\n"+ | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "node-red", | ||||
|     "version": "2.1.0", | ||||
|     "version": "2.1.2", | ||||
|     "description": "Low-code programming for event-driven applications", | ||||
|     "homepage": "http://nodered.org", | ||||
|     "license": "Apache-2.0", | ||||
|   | ||||
| @@ -27,7 +27,8 @@ var defaultContext = { | ||||
|         tabicon: { | ||||
|             icon: "red/images/node-red-icon-black.svg", | ||||
|             colour: "#8f0000" | ||||
|         } | ||||
|         }, | ||||
|         version: require(path.join(__dirname,"../../package.json")).version | ||||
|     }, | ||||
|     header: { | ||||
|         title: "Node-RED", | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@node-red/editor-api", | ||||
|     "version": "2.1.0", | ||||
|     "version": "2.1.2", | ||||
|     "license": "Apache-2.0", | ||||
|     "main": "./lib/index.js", | ||||
|     "repository": { | ||||
| @@ -16,8 +16,8 @@ | ||||
|         } | ||||
|     ], | ||||
|     "dependencies": { | ||||
|         "@node-red/util": "2.1.0", | ||||
|         "@node-red/editor-client": "2.1.0", | ||||
|         "@node-red/util": "2.1.2", | ||||
|         "@node-red/editor-client": "2.1.2", | ||||
|         "bcryptjs": "2.4.3", | ||||
|         "body-parser": "1.19.0", | ||||
|         "clone": "2.1.2", | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@node-red/editor-client", | ||||
|     "version": "2.1.0", | ||||
|     "version": "2.1.2", | ||||
|     "license": "Apache-2.0", | ||||
|     "repository": { | ||||
|         "type": "git", | ||||
|   | ||||
| @@ -419,7 +419,8 @@ | ||||
|             } | ||||
|             nlsd = true; | ||||
|             var that = this; | ||||
|  | ||||
|             this.identifier = this.element.attr('id') || "TypedInput-"+Math.floor(Math.random()*100); | ||||
|             if (this.options.debug) { console.log(this.identifier,"Create",{defaultType:this.options.default, value:this.element.val()}) } | ||||
|             this.disarmClick = false; | ||||
|             this.input = $('<input class="red-ui-typedInput-input" type="text"></input>'); | ||||
|             this.input.insertAfter(this.element); | ||||
| @@ -533,9 +534,9 @@ | ||||
|             // explicitly set optionSelectTrigger display to inline-block otherwise jQ sets it to 'inline' | ||||
|             this.optionSelectTrigger = $('<button tabindex="0" class="red-ui-typedInput-option-trigger" style="display:inline-block"><span class="red-ui-typedInput-option-caret"><i class="red-ui-typedInput-icon fa fa-caret-down"></i></span></button>').appendTo(this.uiSelect); | ||||
|             this.optionSelectLabel = $('<span class="red-ui-typedInput-option-label"></span>').prependTo(this.optionSelectTrigger); | ||||
|             RED.popover.tooltip(this.optionSelectLabel,function() { | ||||
|                 return that.optionValue; | ||||
|             }); | ||||
|             // RED.popover.tooltip(this.optionSelectLabel,function() { | ||||
|             //     return that.optionValue; | ||||
|             // }); | ||||
|             this.optionSelectTrigger.on("click", function(event) { | ||||
|                 event.preventDefault(); | ||||
|                 event.stopPropagation(); | ||||
| @@ -556,6 +557,7 @@ | ||||
|             this.optionExpandButtonIcon = $('<i class="red-ui-typedInput-icon fa fa-ellipsis-h"></i>').appendTo(this.optionExpandButton); | ||||
|  | ||||
|             this.type(this.options.default||this.typeList[0].value); | ||||
|             this.typeChanged = !!this.options.default; | ||||
|         }catch(err) { | ||||
|             console.log(err.stack); | ||||
|         } | ||||
| @@ -846,7 +848,10 @@ | ||||
|         }, | ||||
|         value: function(value) { | ||||
|             var that = this; | ||||
|             var opt = this.typeMap[this.propertyType]; | ||||
|             // If the default type has been set to an invalid type, then on first | ||||
|             // creation, the current propertyType will not exist. Default to an | ||||
|             // empty object on the assumption the corrent type will be set shortly | ||||
|             var opt = this.typeMap[this.propertyType] || {}; | ||||
|             if (!arguments.length) { | ||||
|                 var v = this.input.val(); | ||||
|                 if (opt.export) { | ||||
| @@ -854,27 +859,38 @@ | ||||
|                 } | ||||
|                 return v; | ||||
|             } else { | ||||
|                 if (this.options.debug) { console.log(this.identifier,"----- SET VALUE ------",value) } | ||||
|                 var selectedOption = []; | ||||
|                 var valueToCheck = value; | ||||
|                 if (opt.options) { | ||||
|                     var checkValues = [value]; | ||||
|                     if (opt.hasValue && opt.parse) { | ||||
|                         var parts = opt.parse(value); | ||||
|                         if (this.options.debug) { console.log(this.identifier,"new parse",parts) } | ||||
|                         value = parts.value; | ||||
|                         valueToCheck = parts.option || parts.value; | ||||
|                     } | ||||
|  | ||||
|                     var checkValues = [valueToCheck]; | ||||
|                     if (opt.multiple) { | ||||
|                         selectedOption = []; | ||||
|                         checkValues = value.split(","); | ||||
|                         checkValues = valueToCheck.split(","); | ||||
|                     } | ||||
|                     checkValues.forEach(function(value) { | ||||
|                     checkValues.forEach(function(valueToCheck) { | ||||
|                         for (var i=0;i<opt.options.length;i++) { | ||||
|                             var op = opt.options[i]; | ||||
|                             if (typeof op === "string") { | ||||
|                                 if (op === value || op === ""+value) { | ||||
|                                 if (op === valueToCheck || op === ""+valueToCheck) { | ||||
|                                     selectedOption.push(that.activeOptions[op]); | ||||
|                                     break; | ||||
|                                 } | ||||
|                             } else if (op.value === value) { | ||||
|                             } else if (op.value === valueToCheck) { | ||||
|                                 selectedOption.push(op); | ||||
|                                 break; | ||||
|                             } | ||||
|                         } | ||||
|                     }) | ||||
|                     if (this.options.debug) { console.log(this.identifier,"set value to",value) } | ||||
|  | ||||
|                     this.input.val(value); | ||||
|                     if (!opt.multiple) { | ||||
|                         if (selectedOption.length === 0) { | ||||
| @@ -899,15 +915,16 @@ | ||||
|                 return this.propertyType; | ||||
|             } else { | ||||
|                 var that = this; | ||||
|                 if (this.options.debug) { console.log(this.identifier,"----- SET TYPE -----",type) } | ||||
|                 var previousValue = null; | ||||
|                 var opt = this.typeMap[type]; | ||||
|                 if (opt && this.propertyType !== type) { | ||||
|                     // If previousType is !null, then this is a change of the type, rather than the initialisation | ||||
|                     var previousType = this.typeMap[this.propertyType]; | ||||
|                     var typeChanged = !!previousType; | ||||
|                     previousValue = this.input.val(); | ||||
|  | ||||
|                     if (typeChanged) { | ||||
|                     if (this.typeChanged) { | ||||
|                         if (this.options.debug) { console.log(this.identifier,"typeChanged",{previousType,previousValue}) } | ||||
|                         if (previousType.options && opt.hasValue !== true) { | ||||
|                             this.oldValues[previousType.value] = previousValue; | ||||
|                         } else if (previousType.hasValue === false) { | ||||
| @@ -917,27 +934,37 @@ | ||||
|                         } | ||||
|                         if ((opt.options && opt.hasValue !== true) || opt.hasValue === false) { | ||||
|                             if (this.oldValues.hasOwnProperty(opt.value)) { | ||||
|                                 if (this.options.debug) { console.log(this.identifier,"restored previous (1)",this.oldValues[opt.value]) } | ||||
|                                 this.input.val(this.oldValues[opt.value]); | ||||
|                             } else { | ||||
|                             } else if (opt.options) { | ||||
|                                 // No old value for the option type. | ||||
|                                 // It is possible code has called 'value' then 'type' | ||||
|                                 // to set the selected option. This is what the Inject/Switch/Change | ||||
|                                 // nodes did before 2.1. | ||||
|                                 // So we need to be careful to not reset the value if it is a valid option. | ||||
|                                 var validOptions = isOptionValueValid(opt,previousValue); | ||||
|                                 if (previousValue && validOptions) { | ||||
|                                 if (this.options.debug) { console.log(this.identifier,{previousValue,opt,validOptions}) } | ||||
|                                 if ((previousValue || previousValue === '') && validOptions) { | ||||
|                                     if (this.options.debug) { console.log(this.identifier,"restored previous (2)") } | ||||
|                                     this.input.val(previousValue); | ||||
|                                 } else { | ||||
|                                     if (typeof opt.default === "string") { | ||||
|                                         if (this.options.debug) { console.log(this.identifier,"restored previous (3)",opt.default) } | ||||
|                                         this.input.val(opt.default); | ||||
|                                     } else if (Array.isArray(opt.default)) { | ||||
|                                         if (this.options.debug) { console.log(this.identifier,"restored previous (4)",opt.default.join(",")) } | ||||
|                                         this.input.val(opt.default.join(",")) | ||||
|                                     } else { | ||||
|                                         if (this.options.debug) { console.log(this.identifier,"restored previous (5)") } | ||||
|                                         this.input.val(""); | ||||
|                                     } | ||||
|                                 } | ||||
|                             } else { | ||||
|                                 if (this.options.debug) { console.log(this.identifier,"restored default/blank",opt.default||"") } | ||||
|                                 this.input.val(opt.default||"") | ||||
|                             } | ||||
|                         } else { | ||||
|                             if (this.options.debug) { console.log(this.identifier,"restored old/default/blank") } | ||||
|                             this.input.val(this.oldValues.hasOwnProperty("_")?this.oldValues["_"]:(opt.default||"")) | ||||
|                         } | ||||
|                         if (previousType.autoComplete) { | ||||
| @@ -945,6 +972,7 @@ | ||||
|                         } | ||||
|                     } | ||||
|                     this.propertyType = type; | ||||
|                     this.typeChanged = true; | ||||
|                     if (this.typeField) { | ||||
|                         this.typeField.val(type); | ||||
|                     } | ||||
| @@ -1040,7 +1068,8 @@ | ||||
|                             } else { | ||||
|                                 var selectedOption = this.optionValue||opt.options[0]; | ||||
|                                 if (opt.parse) { | ||||
|                                     var parts = opt.parse(this.input.val(),selectedOption); | ||||
|                                     var selectedOptionObj = typeof selectedOption === "string"?{value:selectedOption}:selectedOption | ||||
|                                     var parts = opt.parse(this.input.val(),selectedOptionObj); | ||||
|                                     if (parts.option) { | ||||
|                                         selectedOption = parts.option; | ||||
|                                         if (!this.activeOptions.hasOwnProperty(selectedOption)) { | ||||
| @@ -1064,6 +1093,7 @@ | ||||
|                                         this._updateOptionSelectLabel(this.activeOptions[selectedOption]); | ||||
|                                     } | ||||
|                                 } else if (selectedOption) { | ||||
|                                     if (this.options.debug) { console.log(this.identifier,"HERE",{optionValue:selectedOption.value}) } | ||||
|                                     this.optionValue = selectedOption.value; | ||||
|                                     this._updateOptionSelectLabel(selectedOption); | ||||
|                                 } else { | ||||
|   | ||||
| @@ -348,7 +348,12 @@ RED.tourGuide = (function() { | ||||
|                 maxWidth: maxWidth+"px", | ||||
|                 direction: direction, | ||||
|             }) | ||||
|  | ||||
|             setTimeout(function() { | ||||
|                 var pos = popover.element.position() | ||||
|                 if (pos.left < 0) { | ||||
|                     popover.element.css({left: 0}); | ||||
|                 } | ||||
|             },100); | ||||
|             if (nextButton) { | ||||
|                 setTimeout(function() { | ||||
|                     nextButton.focus(); | ||||
|   | ||||
| @@ -27,7 +27,7 @@ RED.utils = (function() { | ||||
|         level: 'block',                                     // Is this a block-level or inline-level tokenizer? | ||||
|         start(src) { | ||||
|             if (!src) { return null; } | ||||
|             let m = src.match(/:[^:\n]/); | ||||
|             let m = src.match(/:[^:\n]/g); | ||||
|             return m && m.index; // Hint to Marked.js to stop and check for a match | ||||
|         }, | ||||
|         tokenizer(src, tokens) { | ||||
| @@ -53,7 +53,7 @@ RED.utils = (function() { | ||||
|         level: 'inline',           // Is this a block-level or inline-level tokenizer? | ||||
|         start(src) { | ||||
|             if (!src) { return null; } | ||||
|             let m = src.match(/:/); | ||||
|             let m = src.match(/:/g); | ||||
|             return m && m.index;   // Hint to Marked.js to stop and check for a match | ||||
|         }, | ||||
|         tokenizer(src, tokens) { | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
| <meta name="apple-mobile-web-app-capable" content="yes"> | ||||
| <meta name="mobile-web-app-capable" content="yes"> | ||||
| <!-- | ||||
|   Copyright JS Foundation and other contributors, http://js.foundation | ||||
|   Copyright OpenJS Foundation and other contributors, https://openjsf.org/ | ||||
|  | ||||
|   Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|   you may not use this file except in compliance with the License. | ||||
| @@ -24,24 +24,24 @@ | ||||
| <title>{{ page.title }}</title> | ||||
| <link rel="icon" type="image/png" href="{{ page.favicon }}"> | ||||
| <link rel="mask-icon" href="{{ page.tabicon.icon }}" color="{{ page.tabicon.colour }}"> | ||||
| <link rel="stylesheet" href="vendor/jquery/css/base/jquery-ui.min.css"> | ||||
| <link rel="stylesheet" href="vendor/font-awesome/css/font-awesome.min.css"> | ||||
| <link rel="stylesheet" href="red/style.min.css"> | ||||
| <link rel="stylesheet" href="vendor/jquery/css/base/jquery-ui.min.css?v={{ page.version }}"> | ||||
| <link rel="stylesheet" href="vendor/font-awesome/css/font-awesome.min.css?v={{ page.version }}"> | ||||
| <link rel="stylesheet" href="red/style.min.css?v={{ page.version }}"> | ||||
| {{#page.css}} | ||||
| <link rel="stylesheet" href="{{.}}"> | ||||
| {{/page.css}} | ||||
| {{#asset.vendorMonaco}} | ||||
| <link rel="stylesheet" href="vendor/monaco/style.css"> | ||||
| <link rel="stylesheet" href="vendor/monaco/style.css?v={{ page.version }}"> | ||||
| {{/asset.vendorMonaco}} | ||||
| </head> | ||||
| <body spellcheck="false"> | ||||
| <div id="red-ui-editor"></div> | ||||
| <script src="vendor/vendor.js"></script> | ||||
| <script src="vendor/vendor.js?v={{ page.version }}"></script> | ||||
| {{#asset.vendorMonaco}} | ||||
| <script src="{{ asset.vendorMonaco }}"></script> | ||||
| <script src="{{ asset.vendorMonaco }}?v={{ page.version }}"></script> | ||||
| {{/asset.vendorMonaco}} | ||||
| <script src="{{ asset.red }}"></script> | ||||
| <script src="{{ asset.main }}"></script> | ||||
| <script src="{{ asset.red }}?v={{ page.version }}"></script> | ||||
| <script src="{{ asset.main }}?v={{ page.version }}"></script> | ||||
| {{# page.scripts }} | ||||
| <script src="{{.}}"></script> | ||||
| {{/ page.scripts }} | ||||
|   | ||||
| @@ -539,7 +539,7 @@ | ||||
|                     var propertyValue = $('<input/>',{class:"node-input-prop-property-value",type:"text"}) | ||||
|                         .css("width","calc(70% - 30px)") | ||||
|                         .appendTo(row) | ||||
|                         .typedInput({default:prop.vt,types:['flow','global','str','num','bool','json','bin','date','jsonata','env','msg']}); | ||||
|                         .typedInput({default:prop.vt || 'str',types:['flow','global','str','num','bool','json','bin','date','jsonata','env','msg']}); | ||||
|  | ||||
|                     propertyName.typedInput('value',prop.p); | ||||
|                     propertyValue.typedInput('value',prop.v); | ||||
| @@ -562,7 +562,7 @@ | ||||
|                 var topic = { | ||||
|                     p:'topic', | ||||
|                     v: node.topic ? node.topic : '', | ||||
|                     vt:'string' | ||||
|                     vt:'str' | ||||
|                 } | ||||
|                 node.props = [payload,topic]; | ||||
|             } | ||||
| @@ -578,6 +578,11 @@ | ||||
|                         newProp.v =  node.topic ? node.topic : ''; | ||||
|                     } | ||||
|                 } | ||||
|                 if (newProp.vt === "string") { | ||||
|                     // Fix bug in pre 2.1 where an old Inject node might have | ||||
|                     // a migrated rule with type 'string' not 'str' | ||||
|                     newProp.vt = "str"; | ||||
|                 } | ||||
|                 eList.editableList('addItem',newProp); | ||||
|             } | ||||
|  | ||||
|   | ||||
| @@ -1040,7 +1040,7 @@ module.exports = function(RED) { | ||||
|  | ||||
|                             //subscribe to sub.topic & hook up subscriptionHandler | ||||
|                             node.brokerConn.subscribe(sub.topic, options, function (topic, payload, packet) { | ||||
|                                 subscriptionHandler(node, sub.datatype, topic, payload, packet); | ||||
|                                 subscriptionHandler(node, sub.datatype || node.datatype, topic, payload, packet); | ||||
|                             }, node.id); | ||||
|                             node.dynamicSubs[sub.topic] = sub; //save for later unsubscription & 'list' action | ||||
|                         }) | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@node-red/nodes", | ||||
|     "version": "2.1.0", | ||||
|     "version": "2.1.2", | ||||
|     "license": "Apache-2.0", | ||||
|     "repository": { | ||||
|         "type": "git", | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@node-red/registry", | ||||
|     "version": "2.1.0", | ||||
|     "version": "2.1.2", | ||||
|     "license": "Apache-2.0", | ||||
|     "main": "./lib/index.js", | ||||
|     "repository": { | ||||
| @@ -16,7 +16,7 @@ | ||||
|         } | ||||
|     ], | ||||
|     "dependencies": { | ||||
|         "@node-red/util": "2.1.0", | ||||
|         "@node-red/util": "2.1.2", | ||||
|         "clone": "2.1.2", | ||||
|         "fs-extra": "10.0.0", | ||||
|         "semver": "7.3.5", | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@node-red/runtime", | ||||
|     "version": "2.1.0", | ||||
|     "version": "2.1.2", | ||||
|     "license": "Apache-2.0", | ||||
|     "main": "./lib/index.js", | ||||
|     "repository": { | ||||
| @@ -16,8 +16,8 @@ | ||||
|         } | ||||
|     ], | ||||
|     "dependencies": { | ||||
|         "@node-red/registry": "2.1.0", | ||||
|         "@node-red/util": "2.1.0", | ||||
|         "@node-red/registry": "2.1.2", | ||||
|         "@node-red/util": "2.1.2", | ||||
|         "async-mutex": "0.3.2", | ||||
|         "clone": "2.1.2", | ||||
|         "express": "4.17.1", | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@node-red/util", | ||||
|     "version": "2.1.0", | ||||
|     "version": "2.1.2", | ||||
|     "license": "Apache-2.0", | ||||
|     "repository": { | ||||
|         "type": "git", | ||||
|   | ||||
							
								
								
									
										19
									
								
								packages/node_modules/node-red/bin/node-red-pi
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								packages/node_modules/node-red/bin/node-red-pi
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| #!/bin/bash | ||||
| #!/bin/sh | ||||
| # | ||||
| # Copyright JS Foundation and other contributors, http://js.foundation | ||||
| # | ||||
| @@ -29,15 +29,16 @@ do | ||||
| done | ||||
|  | ||||
| # Find the real location of this script | ||||
| CURRENT_PATH=`pwd` | ||||
| SCRIPT_PATH="${BASH_SOURCE[0]}"; | ||||
| CURRENT_PATH=$(pwd) | ||||
| SCRIPT_PATH=$(readlink -f "$0") | ||||
| while [ -h "${SCRIPT_PATH}" ]; do | ||||
|     cd "`dirname "${SCRIPT_PATH}"`" | ||||
|     SCRIPT_PATH="$(readlink "`basename "${SCRIPT_PATH}"`")"; | ||||
|     cd "$(dirname "${SCRIPT_PATH}")" || exit 1 | ||||
|     P=$(basename "${SCRIPT_PATH}") | ||||
|     SCRIPT_PATH=$(readlink "${P}") | ||||
| done | ||||
| cd "`dirname "${SCRIPT_PATH}"`" > /dev/null | ||||
| SCRIPT_PATH="`pwd`"; | ||||
| cd $CURRENT_PATH | ||||
| cd "$(dirname "${SCRIPT_PATH}")" > /dev/null || exit 1 | ||||
| SCRIPT_PATH=$(pwd) | ||||
| cd "$CURRENT_PATH" || exit 1 | ||||
|  | ||||
| # Run Node-RED | ||||
| exec /usr/bin/env node $OPTIONS $SCRIPT_PATH/../red.js $ARGS | ||||
| exec /usr/bin/env node ${OPTIONS} ${SCRIPT_PATH}/../red.js ${ARGS} | ||||
|   | ||||
							
								
								
									
										10
									
								
								packages/node_modules/node-red/package.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								packages/node_modules/node-red/package.json
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "node-red", | ||||
|     "version": "2.1.0", | ||||
|     "version": "2.1.2", | ||||
|     "description": "Low-code programming for event-driven applications", | ||||
|     "homepage": "http://nodered.org", | ||||
|     "license": "Apache-2.0", | ||||
| @@ -31,10 +31,10 @@ | ||||
|         "flow" | ||||
|     ], | ||||
|     "dependencies": { | ||||
|         "@node-red/editor-api": "2.1.0", | ||||
|         "@node-red/runtime": "2.1.0", | ||||
|         "@node-red/util": "2.1.0", | ||||
|         "@node-red/nodes": "2.1.0", | ||||
|         "@node-red/editor-api": "2.1.2", | ||||
|         "@node-red/runtime": "2.1.2", | ||||
|         "@node-red/util": "2.1.2", | ||||
|         "@node-red/nodes": "2.1.2", | ||||
|         "basic-auth": "2.0.1", | ||||
|         "bcryptjs": "2.4.3", | ||||
|         "express": "4.17.1", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user