node-red-contrib-knx-ultimate 2.1.23 → 2.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,9 +6,13 @@
6
6
 
7
7
  # CHANGELOG
8
8
 
9
+ <p>
10
+ <b>Version 2.1.24</b> - July 2023<br/>
11
+ - Hue Light: fix brightness not sending true/false to the KNX switch status, if no brightness GA present. Set the RBE filter on that.<br/>
12
+ </p>
9
13
  <p>
10
14
  <b>Version 2.1.23</b> - July 2023<br/>
11
- - NEW: Hue Light: Update KNX Switch Status on HUE brighness change, now is the default.<br/>
15
+ - Hue Light: Update KNX Switch Status on HUE brighness change, now is the default.<br/>
12
16
  </p>
13
17
  <p>
14
18
  <b>Version 2.1.22</b> - July 2023<br/>
@@ -61,7 +61,7 @@
61
61
  GADaylightSensor: { value: "" },
62
62
  dptDaylightSensor: { value: "" },
63
63
 
64
- updateSwitchStatusOnBrightness: { value: "yes" },
64
+ updateSwitchStatusOnBrightness: { value: "yes" },
65
65
 
66
66
  hueDevice: { value: "" }
67
67
  },
@@ -775,7 +775,7 @@
775
775
  <div id="tabs-1">
776
776
  <p>
777
777
  <div class="form-row">
778
- <label for="node-input-nameLightSwitch" style="width:100px;"><i class="fa fa-play-circle-o"></i> <span data-i18n="knxUltimateHueLight.node-input-nameLightSwitch"></span></label>
778
+ <label for="node-input-nameLightSwitch" style="width:110px;"><i class="fa fa-play-circle-o"></i> <span data-i18n="knxUltimateHueLight.node-input-nameLightSwitch"></span></label>
779
779
 
780
780
  <label for="node-input-GALightSwitch" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightSwitch"></span></label>
781
781
  <input type="text" id="node-input-GALightSwitch" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
@@ -784,10 +784,10 @@
784
784
  <select id="node-input-dptLightSwitch" style="width:140px;"></select>
785
785
 
786
786
  <label for="node-input-nameLightSwitch" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
787
- <input type="text" id="node-input-nameLightSwitch" style="width:200px;margin-left: 5px; text-align: left;">
787
+ <input type="text" id="node-input-nameLightSwitch" style="width:190px;margin-left: 5px; text-align: left;">
788
788
  </div>
789
789
  <div class="form-row">
790
- <label for="node-input-nameLightState" style="width:100px;"><i class="fa fa-play-circle-o"></i> Switch Status</label>
790
+ <label for="node-input-nameLightState" style="width:110px;"><i class="fa fa-play-circle-o"></i> Switch Status</label>
791
791
 
792
792
  <label for="node-input-GALightState" style="width:20px;">GA</label>
793
793
  <input type="text" id="node-input-GALightState" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
@@ -796,10 +796,10 @@
796
796
  <select id="node-input-dptLightState" style="width:140px;"></select>
797
797
 
798
798
  <label for="node-input-nameLightState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
799
- <input type="text" id="node-input-nameLightState" style="width:200px;margin-left: 5px; text-align: left;">
799
+ <input type="text" id="node-input-nameLightState" style="width:190px;margin-left: 5px; text-align: left;">
800
800
  </div>
801
801
  <div class="form-row">
802
- <label for="node-input-colorAtSwitchOnDayTime" style="width:250px">
802
+ <label for="node-input-colorAtSwitchOnDayTime" style="width:260px">
803
803
  <i class="fa fa-sun-o"></i> Switch On - color/brightness
804
804
  </label>
805
805
  <input type="text" id="node-input-colorAtSwitchOnDayTime" placeholder='Leave blank or, for example, {"red":255, "green":255, "blue":255}'
@@ -813,14 +813,14 @@
813
813
  </div>
814
814
  <div id="DivEnableDayNightLighting">
815
815
  <div class="form-row">
816
- <label for="node-input-colorAtSwitchOnNightTime" style="width:250px">
816
+ <label for="node-input-colorAtSwitchOnNightTime" style="width:260px">
817
817
  <i class="fa fa-moon-o"></i> Switch On - color/brightness at Night
818
818
  </label>
819
819
  <input type="text" id="node-input-colorAtSwitchOnNightTime" placeholder='Example {"red":100, "green":0, "blue":50}'
820
820
  style="width:260px">
821
821
  </div>
822
822
  <div class="form-row">
823
- <label for="node-input-nameDaylightSensor" style="width:100px;"><i class="fa fa-clock-o"></i> Day/Night</label>
823
+ <label for="node-input-nameDaylightSensor" style="width:110px;"><i class="fa fa-clock-o"></i> Day/Night</label>
824
824
 
825
825
  <label for="node-input-GADaylightSensor" style="width:20px;">GA</label>
826
826
  <input type="text" id="node-input-GADaylightSensor" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
@@ -829,7 +829,7 @@
829
829
  <select id="node-input-dptDaylightSensor" style="width:140px;"></select>
830
830
 
831
831
  <label for="node-input-nameDaylightSensor" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
832
- <input type="text" id="node-input-nameDaylightSensor" style="width:200px;margin-left: 5px; text-align: left;">
832
+ <input type="text" id="node-input-nameDaylightSensor" style="width:190px;margin-left: 5px; text-align: left;">
833
833
  </div>
834
834
  <div class="form-row">
835
835
  <label style="width:170px" for="node-input-invertDayNight">
@@ -844,7 +844,7 @@
844
844
  <div id="tabs-2">
845
845
  <p>
846
846
  <div class="form-row">
847
- <label for="node-input-nameLightDIM" style="width:100px;"><i class="fa fa-play-circle-o"></i>&nbspDimming</label>
847
+ <label for="node-input-nameLightDIM" style="width:110px;"><i class="fa fa-play-circle-o"></i>&nbspDimming</label>
848
848
 
849
849
  <label for="node-input-GALightDIM" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
850
850
  <input type="text" id="node-input-GALightDIM" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
@@ -853,10 +853,10 @@
853
853
  <select id="node-input-dptLightDIM" style="width:140px;"></select>
854
854
 
855
855
  <label for="node-input-nameLightDIM" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
856
- <input type="text" id="node-input-nameLightDIM" style="width:200px;margin-left: 5px; text-align: left;">
856
+ <input type="text" id="node-input-nameLightDIM" style="width:190px;margin-left: 5px; text-align: left;">
857
857
  </div>
858
858
  <div class="form-row">
859
- <label for="node-input-nameLightBrightness" style="width:100px;"><i class="fa fa-play-circle-o"></i>&nbspBrightness</label>
859
+ <label for="node-input-nameLightBrightness" style="width:110px;"><i class="fa fa-play-circle-o"></i>&nbspBrightness</label>
860
860
 
861
861
  <label for="node-input-GALightBrightness" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
862
862
  <input type="text" id="node-input-GALightBrightness" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
@@ -865,11 +865,11 @@
865
865
  <select id="node-input-dptLightBrightness" style="width:140px;"></select>
866
866
 
867
867
  <label for="node-input-nameLightBrightness" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
868
- <input type="text" id="node-input-nameLightBrightness" style="width:200px;margin-left: 5px; text-align: left;">
868
+ <input type="text" id="node-input-nameLightBrightness" style="width:190px;margin-left: 5px; text-align: left;">
869
869
  </div>
870
870
 
871
871
  <div class="form-row">
872
- <label for="node-input-nameLightBrightnessState" style="width:100px;"><i class="fa fa-play-circle-o"></i> Brightness Status</label>
872
+ <label for="node-input-nameLightBrightnessState" style="width:110px;"><i class="fa fa-play-circle-o"></i> Brightness Status</label>
873
873
 
874
874
  <label for="node-input-GALightBrightnessState" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
875
875
  <input type="text" id="node-input-GALightBrightnessState" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
@@ -878,14 +878,14 @@
878
878
  <select id="node-input-dptLightBrightnessState" style="width:140px;"></select>
879
879
 
880
880
  <label for="node-input-nameLightBrightnessState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
881
- <input type="text" id="node-input-nameLightBrightnessState" style="width:200px;margin-left: 5px; text-align: left;">
881
+ <input type="text" id="node-input-nameLightBrightnessState" style="width:190px;margin-left: 5px; text-align: left;">
882
882
  </div>
883
883
  </p>
884
884
  </div>
885
885
  <div id="tabs-3">
886
886
  <p>
887
887
  <div class="form-row">
888
- <label for="node-input-nameLightHSV" style="width:100px;"><i class="fa fa-play-circle-o"></i> Tunable white</label>
888
+ <label for="node-input-nameLightHSV" style="width:110px;"><i class="fa fa-play-circle-o"></i> Tunable white</label>
889
889
 
890
890
  <label for="node-input-GALightHSV" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
891
891
  <input type="text" id="node-input-GALightHSV" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
@@ -894,10 +894,10 @@
894
894
  <select id="node-input-dptLightHSV" style="width:140px;"></select>
895
895
 
896
896
  <label for="node-input-nameLightHSV" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
897
- <input type="text" id="node-input-nameLightHSV" style="width:200px;margin-left: 5px; text-align: left;">
897
+ <input type="text" id="node-input-nameLightHSV" style="width:190px;margin-left: 5px; text-align: left;">
898
898
  </div>
899
899
  <div class="form-row">
900
- <label for="node-input-nameLightHSVState" style="width:100px;"><i class="fa fa-play-circle-o"></i> Tunable white Status</label>
900
+ <label for="node-input-nameLightHSVState" style="width:110px;"><i class="fa fa-play-circle-o"></i> Tunable white Status</label>
901
901
 
902
902
  <label for="node-input-GALightHSVState" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
903
903
  <input type="text" id="node-input-GALightHSVState" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
@@ -906,14 +906,14 @@
906
906
  <select id="node-input-dptLightHSVState" style="width:140px;"></select>
907
907
 
908
908
  <label for="node-input-nameLightHSVState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
909
- <input type="text" id="node-input-nameLightHSVState" style="width:200px;margin-left: 5px; text-align: left;">
909
+ <input type="text" id="node-input-nameLightHSVState" style="width:190px;margin-left: 5px; text-align: left;">
910
910
  </div>
911
911
  </p>
912
912
  </div>
913
913
  <div id="tabs-4">
914
914
  <p>
915
915
  <div class="form-row">
916
- <label for="node-input-nameLightColor" style="width:100px;"><i class="fa fa-play-circle-o"></i>&nbspColor</label>
916
+ <label for="node-input-nameLightColor" style="width:110px;"><i class="fa fa-play-circle-o"></i>&nbspColor</label>
917
917
 
918
918
  <label for="node-input-GALightColor" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
919
919
  <input type="text" id="node-input-GALightColor" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
@@ -922,10 +922,10 @@
922
922
  <select id="node-input-dptLightColor" style="width:140px;"></select>
923
923
 
924
924
  <label for="node-input-nameLightColor" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
925
- <input type="text" id="node-input-nameLightColor" style="width:200px;margin-left: 5px; text-align: left;">
925
+ <input type="text" id="node-input-nameLightColor" style="width:190px;margin-left: 5px; text-align: left;">
926
926
  </div>
927
927
  <div class="form-row">
928
- <label for="node-input-nameLightColorState" style="width:100px;"><i class="fa fa-play-circle-o"></i> Color Status</label>
928
+ <label for="node-input-nameLightColorState" style="width:110px;"><i class="fa fa-play-circle-o"></i> Color Status</label>
929
929
 
930
930
  <label for="node-input-GALightColorState" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
931
931
  <input type="text" id="node-input-GALightColorState" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
@@ -934,7 +934,7 @@
934
934
  <select id="node-input-dptLightColorState" style="width:140px;"></select>
935
935
 
936
936
  <label for="node-input-nameLightColorState" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
937
- <input type="text" id="node-input-nameLightColorState" style="width:200px;margin-left: 5px; text-align: left;">
937
+ <input type="text" id="node-input-nameLightColorState" style="width:190px;margin-left: 5px; text-align: left;">
938
938
  </div>
939
939
  </p>
940
940
  </div>
@@ -942,7 +942,7 @@
942
942
  <div id="tabs-5">
943
943
  <p>
944
944
  <div class="form-row">
945
- <label for="node-input-nameLightBlink" style="width:100px;"><i class="fa fa-play-circle-o"></i> Blink</label>
945
+ <label for="node-input-nameLightBlink" style="width:110px;"><i class="fa fa-play-circle-o"></i> Blink</label>
946
946
 
947
947
  <label for="node-input-GALightBlink" style="width:20px;"><span data-i18n="knxUltimateHueLight.node-input-GALightState"></span></label>
948
948
  <input type="text" id="node-input-GALightBlink" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
@@ -951,11 +951,11 @@
951
951
  <select id="node-input-dptLightBlink" style="width:140px;"></select>
952
952
 
953
953
  <label for="node-input-nameLightBlink" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
954
- <input type="text" id="node-input-nameLightBlink" style="width:200px;margin-left: 5px; text-align: left;">
954
+ <input type="text" id="node-input-nameLightBlink" style="width:190px;margin-left: 5px; text-align: left;">
955
955
  </div>
956
956
 
957
957
  <div class="form-row">
958
- <label for="node-input-nameLightColorCycle" style="width:100px;"><i class="fa fa-play-circle-o"></i> Color Cycle</label>
958
+ <label for="node-input-nameLightColorCycle" style="width:110px;"><i class="fa fa-play-circle-o"></i> Color Cycle</label>
959
959
 
960
960
  <label for="node-input-GALightColorCycle" style="width:20px;">GA</label>
961
961
  <input type="text" id="node-input-GALightColorCycle" placeholder="Ex: 1/1/1" style="width:70px;margin-left: 5px; text-align: left;">
@@ -964,7 +964,7 @@
964
964
  <select id="node-input-dptLightColorCycle" style="width:140px;"></select>
965
965
 
966
966
  <label for="node-input-nameLightColorCycle" style="width:50px; margin-left: 0px; text-align: right;"><span data-i18n="knxUltimateHueLight.node-input-name"></span></label>
967
- <input type="text" id="node-input-nameLightColorCycle" style="width:200px;margin-left: 5px; text-align: left;">
967
+ <input type="text" id="node-input-nameLightColorCycle" style="width:190px;margin-left: 5px; text-align: left;">
968
968
  </div>
969
969
  </p>
970
970
  </div>
@@ -973,12 +973,12 @@
973
973
  <br/>
974
974
  <b> HUE to KNX</b>
975
975
  <div class="form-row">
976
- <label for="node-input-updateSwitchStatusOnBrightness" style="width:50%;">
977
- <i class="fa fa-tag"></i> Update Switch Status on brightness change
976
+ <label for="node-input-updateSwitchStatusOnBrightness" style="width:400px;">
977
+ <i class="fa fa-tag"></i> Update KNX Switch Status GA on HUE brightness change
978
978
  </label>
979
979
  <select id="node-input-updateSwitchStatusOnBrightness">
980
+ <option value="yes">Yes</option>
980
981
  <option value="no">No</option>
981
- <option value="yes">Yes</option>
982
982
  </select>
983
983
  </div>
984
984
  </p>
@@ -1055,7 +1055,7 @@ HUE to KNX
1055
1055
 
1056
1056
  |Property|Description|
1057
1057
  |--|--|
1058
- | Update Switch Status on brightness change | It updates the *Switch Status* group address on every brightness change. If the brighness is > 0, it sends *true*, otherwise, *false*. Default value is **No**. |
1058
+ | Update KNX Switch Status GA on HUE brightness change | It updates the KNX *Switch Status* group address on every HUE light's brightness change. If the brighness is > 0, it sends *true*, otherwise, *false*. Default value is **Yes**. |
1059
1059
 
1060
1060
  <br/>
1061
1061
 
@@ -204,7 +204,7 @@ module.exports = function (RED) {
204
204
  }
205
205
 
206
206
  // Start dimming tunable white
207
- // mirek: required(integer minimum: 153 maximum: 500)
207
+ // mirek: required(integer minimum: 153, maximum: 500)
208
208
  node.timerDimTunableWhite = undefined
209
209
  node.dimDirectionTunableWhite = {}
210
210
  node.timeoutDimTunableWhite = 0
@@ -240,6 +240,7 @@ module.exports = function (RED) {
240
240
  knxMsgPayload.payload = _event.on.on
241
241
  // Send to KNX bus
242
242
  if (knxMsgPayload.topic !== '' && knxMsgPayload.topic !== undefined) node.server.writeQueueAdd({ grpaddr: knxMsgPayload.topic, payload: knxMsgPayload.payload, dpt: knxMsgPayload.dpt, outputtype: 'write', nodecallerid: node.id })
243
+ if (node.currentHUEDevice !== undefined) node.currentHUEDevice.on = _event.on // Update the internal object representing the current light
243
244
  }
244
245
  }
245
246
  if (_event.hasOwnProperty('color')) {
@@ -249,6 +250,7 @@ module.exports = function (RED) {
249
250
  knxMsgPayload.payload = hueColorConverter.ColorConverter.xyBriToRgb(_event.color.xy.x, _event.color.xy.y, (node.currentHUEDevice !== undefined ? node.currentHUEDevice.dimming.brightness : 100))
250
251
  // Send to KNX bus
251
252
  if (knxMsgPayload.topic !== '' && knxMsgPayload.topic !== undefined) node.server.writeQueueAdd({ grpaddr: knxMsgPayload.topic, payload: knxMsgPayload.payload, dpt: knxMsgPayload.dpt, outputtype: 'write', nodecallerid: node.id })
253
+ if (node.currentHUEDevice !== undefined) node.currentHUEDevice.color = _event.color // Update the internal object representing the current light
252
254
  }
253
255
  }
254
256
  if (_event.hasOwnProperty('dimming')) {
@@ -258,16 +260,17 @@ module.exports = function (RED) {
258
260
  knxMsgPayload.payload = _event.dimming.brightness
259
261
  // Send to KNX bus
260
262
  if (knxMsgPayload.topic !== '' && knxMsgPayload.topic !== undefined) node.server.writeQueueAdd({ grpaddr: knxMsgPayload.topic, payload: knxMsgPayload.payload, dpt: knxMsgPayload.dpt, outputtype: 'write', nodecallerid: node.id })
261
-
262
- if (config.updateSwitchStatusOnBrightness === 'yes' || config.updateSwitchStatusOnBrightness === undefined) {
263
- // ISE Connect Hue emulation, send true/false to switch state
264
- knxMsgPayload.topic = config.GALightState
265
- knxMsgPayload.dpt = config.dptLightState
266
- knxMsgPayload.payload = _event.dimming.brightness > 0
263
+ if (node.currentHUEDevice !== undefined) node.currentHUEDevice.dimming = _event.dimming // Update the internal object representing the current light
264
+ }
265
+ if (config.updateSwitchStatusOnBrightness === 'yes' || config.updateSwitchStatusOnBrightness === undefined) {
266
+ // ISE Connect Hue emulation, send true/false to switch state
267
+ knxMsgPayload.topic = config.GALightState
268
+ knxMsgPayload.dpt = config.dptLightState
269
+ knxMsgPayload.payload = _event.dimming.brightness > 0
270
+ if (node.currentHUEDevice === undefined || node.currentHUEDevice.on.on !== knxMsgPayload.payload) { // Check not to have already sent the value
267
271
  // Send to KNX bus
268
272
  if (knxMsgPayload.topic !== '' && knxMsgPayload.topic !== undefined) node.server.writeQueueAdd({ grpaddr: knxMsgPayload.topic, payload: knxMsgPayload.payload, dpt: knxMsgPayload.dpt, outputtype: 'write', nodecallerid: node.id })
269
273
  }
270
-
271
274
  }
272
275
  }
273
276
  if (_event.hasOwnProperty('color_temperature')) {
@@ -280,6 +283,7 @@ module.exports = function (RED) {
280
283
  }
281
284
  // Send to KNX bus
282
285
  if (knxMsgPayload.topic !== '' && knxMsgPayload.topic !== undefined) node.server.writeQueueAdd({ grpaddr: knxMsgPayload.topic, payload: knxMsgPayload.payload, dpt: knxMsgPayload.dpt, outputtype: 'write', nodecallerid: node.id })
286
+ if (node.currentHUEDevice !== undefined) node.currentHUEDevice.color_temperature = _event.color_temperature // Update the internal object representing the current light
283
287
  }
284
288
  }
285
289
  node.setNodeStatusHue({ fill: 'blue', shape: 'ring', text: 'HUE->KNX State', payload: knxMsgPayload.payload })
@@ -298,7 +302,7 @@ module.exports = function (RED) {
298
302
  node.serverHue.removeClient(node)
299
303
  // I must get the light object, to store it in the node.currentHUEDevice variable
300
304
  // I queue the state request, by passing the callback to call whenever the HUE bridge send me the light status async
301
- if (node !== null && node.serverHue !== null && node.serverHue.hueManager !== null) {
305
+ if (node.serverHue !== null && node.serverHue.hueManager !== null) {
302
306
  (async () => {
303
307
  try {
304
308
  await node.serverHue.hueManager.writeHueQueueAdd(config.hueDevice, null, 'getLight', (jLight) => {
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "engines": {
4
4
  "node": ">=16.0.0"
5
5
  },
6
- "version": "2.1.23",
6
+ "version": "2.1.24",
7
7
  "description": "Control your KNX intallation via Node-Red! Single Node KNX IN/OUT with optional ETS group address importer. Easy to use and highly configurable. With integrated Philips HUE devices handling.",
8
8
  "dependencies": {
9
9
  "mkdirp": "3.0.1",