matterbridge-example-dynamic-platform 1.2.0-edge.10 → 1.2.0-edge.11
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/dist/appliances.js
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
-
import { MatterbridgeEndpoint, MatterbridgeServer, MatterbridgeOnOffServer, RefrigeratorTag, PositionTag, laundryWasher, laundryDryer, dishwasher, refrigerator, temperatureControlledCabinetCooler, oven, temperatureControlledCabinetHeater, microwaveOven, extractorHood, cooktop, cookSurface, } from 'matterbridge';
|
1
|
+
import { MatterbridgeEndpoint, MatterbridgeServer, MatterbridgeOnOffServer, RefrigeratorTag, PositionTag, laundryWasher, laundryDryer, dishwasher, refrigerator, temperatureControlledCabinetCooler, oven, temperatureControlledCabinetHeater, microwaveOven, extractorHood, cooktop, cookSurface, powerSource, } from 'matterbridge';
|
2
2
|
import { ClusterBehavior } from 'matterbridge/matter';
|
3
3
|
import { OperationalState, TemperatureControl, DishwasherMode, LaundryWasherControls, LaundryWasherMode, LaundryDryerControls, OvenMode, ModeBase, RefrigeratorAndTemperatureControlledCabinetMode, MicrowaveOvenMode, MicrowaveOvenControl, OvenCavityOperationalState, } from 'matterbridge/matter/clusters';
|
4
4
|
import { DishwasherAlarmServer, LaundryDryerControlsServer, LaundryWasherControlsServer, MicrowaveOvenControlBehavior, MicrowaveOvenModeServer, OperationalStateBehavior, TemperatureControlBehavior, } from 'matterbridge/matter/behaviors';
|
5
5
|
export class Appliances extends MatterbridgeEndpoint {
|
6
6
|
constructor(deviceType, name, serial) {
|
7
|
-
super(deviceType, { uniqueStorageKey: `${name}-${serial}` }, true);
|
7
|
+
super([deviceType, powerSource], { uniqueStorageKey: `${name}-${serial}` }, true);
|
8
8
|
if (deviceType.code === laundryWasher.code) {
|
9
9
|
this.createDefaultIdentifyClusterServer();
|
10
10
|
this.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Laundry Washer');
|
11
|
+
this.createDefaultPowerSourceWiredClusterServer();
|
11
12
|
this.createDeadFrontOnOffClusterServer();
|
12
13
|
this.createLevelTemperatureControlClusterServer(3, ['Cold', '30°', '40°', '60°', '80°']);
|
13
14
|
this.createDefaultLaundryWasherModeClusterServer();
|
@@ -17,6 +18,7 @@ export class Appliances extends MatterbridgeEndpoint {
|
|
17
18
|
else if (deviceType.code === laundryDryer.code) {
|
18
19
|
this.createDefaultIdentifyClusterServer();
|
19
20
|
this.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Laundry Dryer');
|
21
|
+
this.createDefaultPowerSourceWiredClusterServer();
|
20
22
|
this.createDeadFrontOnOffClusterServer();
|
21
23
|
this.createLevelTemperatureControlClusterServer(3, ['Cold', '30°', '40°', '60°', '80°']);
|
22
24
|
this.createDefaultLaundryWasherModeClusterServer();
|
@@ -26,6 +28,7 @@ export class Appliances extends MatterbridgeEndpoint {
|
|
26
28
|
else if (deviceType.code === dishwasher.code) {
|
27
29
|
this.createDefaultIdentifyClusterServer();
|
28
30
|
this.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Dishwasher');
|
31
|
+
this.createDefaultPowerSourceWiredClusterServer();
|
29
32
|
this.createDeadFrontOnOffClusterServer();
|
30
33
|
this.createLevelTemperatureControlClusterServer(1, ['Cold', '30°', '40°', '60°']);
|
31
34
|
this.createDefaultDishwasherModeClusterServer();
|
@@ -35,6 +38,7 @@ export class Appliances extends MatterbridgeEndpoint {
|
|
35
38
|
else if (deviceType.name === refrigerator.name) {
|
36
39
|
this.createDefaultIdentifyClusterServer();
|
37
40
|
this.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Refrigerator');
|
41
|
+
this.createDefaultPowerSourceWiredClusterServer();
|
38
42
|
const refrigerator = this.addChildDeviceType('Refrigerator', temperatureControlledCabinetCooler, { tagList: [{ mfgCode: null, namespaceId: RefrigeratorTag.Refrigerator.namespaceId, tag: RefrigeratorTag.Refrigerator.tag, label: RefrigeratorTag.Refrigerator.label }] }, true);
|
39
43
|
refrigerator.log.logName = `Refrigerator (cabinet Refrigerator)`;
|
40
44
|
refrigerator.createDefaultIdentifyClusterServer();
|
@@ -51,6 +55,7 @@ export class Appliances extends MatterbridgeEndpoint {
|
|
51
55
|
else if (deviceType.name === oven.name) {
|
52
56
|
this.createDefaultIdentifyClusterServer();
|
53
57
|
this.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Oven');
|
58
|
+
this.createDefaultPowerSourceWiredClusterServer();
|
54
59
|
const cabinettop = this.addChildDeviceType('Oven (top)', temperatureControlledCabinetHeater, { tagList: [{ mfgCode: null, namespaceId: PositionTag.Top.namespaceId, tag: PositionTag.Top.tag, label: PositionTag.Top.label }] }, true);
|
55
60
|
cabinettop.log.logName = `Oven (top)`;
|
56
61
|
cabinettop.createDefaultIdentifyClusterServer();
|
@@ -67,6 +72,7 @@ export class Appliances extends MatterbridgeEndpoint {
|
|
67
72
|
else if (deviceType.name === microwaveOven.name) {
|
68
73
|
this.createDefaultIdentifyClusterServer();
|
69
74
|
this.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Microwave Oven');
|
75
|
+
this.createDefaultPowerSourceWiredClusterServer();
|
70
76
|
this.createDefaultOperationalStateClusterServer(OperationalState.OperationalStateEnum.Stopped);
|
71
77
|
this.createDefaultMicrowaveOvenModeClusterServer();
|
72
78
|
this.createDefaultMicrowaveOvenControlClusterServer();
|
@@ -74,6 +80,7 @@ export class Appliances extends MatterbridgeEndpoint {
|
|
74
80
|
else if (deviceType.name === extractorHood.name) {
|
75
81
|
this.createDefaultIdentifyClusterServer();
|
76
82
|
this.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Extractor Hood');
|
83
|
+
this.createDefaultPowerSourceWiredClusterServer();
|
77
84
|
this.createBaseFanControlClusterServer();
|
78
85
|
this.createDefaultHepaFilterMonitoringClusterServer();
|
79
86
|
this.createDefaultActivatedCarbonFilterMonitoringClusterServer();
|
@@ -81,6 +88,7 @@ export class Appliances extends MatterbridgeEndpoint {
|
|
81
88
|
else if (deviceType.name === cooktop.name) {
|
82
89
|
this.createDefaultIdentifyClusterServer();
|
83
90
|
this.createDefaultBasicInformationClusterServer(name, serial, 0xfff1, 'Matterbridge', 0x8000, 'Cooktop');
|
91
|
+
this.createDefaultPowerSourceWiredClusterServer();
|
84
92
|
this.createOffOnlyOnOffClusterServer(true);
|
85
93
|
const cookSurface1 = this.addChildDeviceType('Surface 1', cookSurface, { tagList: [{ mfgCode: null, namespaceId: PositionTag.Left.namespaceId, tag: PositionTag.Left.tag, label: PositionTag.Left.label }] }, true);
|
86
94
|
cookSurface1.log.logName = `Cook surface (right)`;
|
package/dist/platform.js
CHANGED
@@ -738,8 +738,9 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
738
738
|
this.valve?.addCommandHandler('identify', async ({ request: { identifyTime } }) => {
|
739
739
|
this.valve?.log.info(`Command identify called identifyTime:${identifyTime}`);
|
740
740
|
});
|
741
|
-
this.fan = new MatterbridgeEndpoint([fanDevice, bridgedNode], { uniqueStorageKey: 'Fan' }, this.config.debug)
|
741
|
+
this.fan = new MatterbridgeEndpoint([fanDevice, bridgedNode, powerSource], { uniqueStorageKey: 'Fan' }, this.config.debug)
|
742
742
|
.createDefaultBridgedDeviceBasicInformationClusterServer('Fan', 'serial_980545631228', 0xfff1, 'Matterbridge', 'Matterbridge Fan', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion)
|
743
|
+
.createDefaultPowerSourceWiredClusterServer()
|
743
744
|
.addRequiredClusterServers();
|
744
745
|
this.setSelectDevice(this.fan.serialNumber ?? '', this.fan.deviceName ?? '', undefined, 'hub');
|
745
746
|
if (this.validateDevice(this.fan.deviceName ?? '')) {
|
@@ -786,8 +787,9 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
786
787
|
if (isValidNumber(newValue, 0, 100))
|
787
788
|
await this.fan?.setAttribute(FanControl.Cluster.id, 'speedCurrent', newValue, this.fan?.log);
|
788
789
|
}, this.fan.log);
|
789
|
-
this.waterLeak = new MatterbridgeEndpoint([waterLeakDetector, bridgedNode], { uniqueStorageKey: 'Water leak detector' }, this.config.debug)
|
790
|
+
this.waterLeak = new MatterbridgeEndpoint([waterLeakDetector, bridgedNode, powerSource], { uniqueStorageKey: 'Water leak detector' }, this.config.debug)
|
790
791
|
.createDefaultBridgedDeviceBasicInformationClusterServer('Water leak detector', 'serial_98745631222', 0xfff1, 'Matterbridge', 'Matterbridge WaterLeakDetector', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion)
|
792
|
+
.createDefaultPowerSourceRechargeableBatteryClusterServer()
|
791
793
|
.createDefaultBooleanStateClusterServer(false)
|
792
794
|
.addRequiredClusterServers()
|
793
795
|
.addOptionalClusterServers();
|
@@ -799,8 +801,9 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
799
801
|
else {
|
800
802
|
this.waterLeak = undefined;
|
801
803
|
}
|
802
|
-
this.waterFreeze = new MatterbridgeEndpoint([waterFreezeDetector, bridgedNode], { uniqueStorageKey: 'Water freeze detector' }, this.config.debug)
|
804
|
+
this.waterFreeze = new MatterbridgeEndpoint([waterFreezeDetector, bridgedNode, powerSource], { uniqueStorageKey: 'Water freeze detector' }, this.config.debug)
|
803
805
|
.createDefaultBridgedDeviceBasicInformationClusterServer('Water freeze detector', 'serial_98745631223', 0xfff1, 'Matterbridge', 'Matterbridge WaterFreezeDetector', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion)
|
806
|
+
.createDefaultPowerSourceRechargeableBatteryClusterServer()
|
804
807
|
.createDefaultBooleanStateClusterServer(false)
|
805
808
|
.addRequiredClusterServers()
|
806
809
|
.addOptionalClusterServers();
|
@@ -812,8 +815,9 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
812
815
|
else {
|
813
816
|
this.waterFreeze = undefined;
|
814
817
|
}
|
815
|
-
this.rain = new MatterbridgeEndpoint([rainSensor, bridgedNode], { uniqueStorageKey: 'Rain sensor' }, this.config.debug)
|
818
|
+
this.rain = new MatterbridgeEndpoint([rainSensor, bridgedNode, powerSource], { uniqueStorageKey: 'Rain sensor' }, this.config.debug)
|
816
819
|
.createDefaultBridgedDeviceBasicInformationClusterServer('Rain sensor', 'serial_98745631224', 0xfff1, 'Matterbridge', 'Matterbridge RainSensor', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion)
|
820
|
+
.createDefaultPowerSourceRechargeableBatteryClusterServer()
|
817
821
|
.createDefaultIdentifyClusterServer()
|
818
822
|
.createDefaultBooleanStateClusterServer(false)
|
819
823
|
.createDefaultBooleanStateConfigurationClusterServer();
|
@@ -825,10 +829,11 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
825
829
|
else {
|
826
830
|
this.rain = undefined;
|
827
831
|
}
|
828
|
-
this.smokeCo = new MatterbridgeEndpoint([smokeCoAlarm, bridgedNode], { uniqueStorageKey: 'SmokeCo alarm sensor' }, this.config.debug)
|
832
|
+
this.smokeCo = new MatterbridgeEndpoint([smokeCoAlarm, bridgedNode, powerSource], { uniqueStorageKey: 'SmokeCo alarm sensor' }, this.config.debug)
|
829
833
|
.createDefaultBridgedDeviceBasicInformationClusterServer('SmokeCo alarm sensor', 'serial_94745631225', 0xfff1, 'Matterbridge', 'Matterbridge SmokeCoAlarm', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion)
|
830
834
|
.createDefaultIdentifyClusterServer()
|
831
|
-
.createDefaultSmokeCOAlarmClusterServer(SmokeCoAlarm.AlarmState.Normal, SmokeCoAlarm.AlarmState.Normal)
|
835
|
+
.createDefaultSmokeCOAlarmClusterServer(SmokeCoAlarm.AlarmState.Normal, SmokeCoAlarm.AlarmState.Normal)
|
836
|
+
.createDefaultPowerSourceReplaceableBatteryClusterServer();
|
832
837
|
if (this.config.enableConcentrationMeasurements === true)
|
833
838
|
this.smokeCo.createDefaultCarbonMonoxideConcentrationMeasurementClusterServer(100);
|
834
839
|
this.setSelectDevice(this.smokeCo.serialNumber ?? '', this.smokeCo.deviceName ?? '', undefined, 'hub');
|
@@ -839,10 +844,11 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
839
844
|
else {
|
840
845
|
this.smokeCo = undefined;
|
841
846
|
}
|
842
|
-
this.smokeOnly = new MatterbridgeEndpoint([smokeCoAlarm, bridgedNode], { uniqueStorageKey: 'Smoke
|
843
|
-
.createDefaultBridgedDeviceBasicInformationClusterServer('Smoke
|
847
|
+
this.smokeOnly = new MatterbridgeEndpoint([smokeCoAlarm, bridgedNode, powerSource], { uniqueStorageKey: 'Smoke alarm sensor' }, this.config.debug)
|
848
|
+
.createDefaultBridgedDeviceBasicInformationClusterServer('Smoke alarm sensor', 'serial_94755661225', 0xfff1, 'Matterbridge', 'Matterbridge SmokeCoAlarm', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion)
|
844
849
|
.createDefaultIdentifyClusterServer()
|
845
|
-
.createSmokeOnlySmokeCOAlarmClusterServer(SmokeCoAlarm.AlarmState.Normal)
|
850
|
+
.createSmokeOnlySmokeCOAlarmClusterServer(SmokeCoAlarm.AlarmState.Normal)
|
851
|
+
.createDefaultPowerSourceReplaceableBatteryClusterServer();
|
846
852
|
this.setSelectDevice(this.smokeOnly.serialNumber ?? '', this.smokeOnly.deviceName ?? '', undefined, 'hub');
|
847
853
|
if (this.validateDevice(this.smokeOnly.deviceName ?? '')) {
|
848
854
|
await this.registerDevice(this.smokeOnly);
|
@@ -851,10 +857,11 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
851
857
|
else {
|
852
858
|
this.smokeOnly = undefined;
|
853
859
|
}
|
854
|
-
this.coOnly = new MatterbridgeEndpoint([smokeCoAlarm, bridgedNode], { uniqueStorageKey: 'Co
|
855
|
-
.createDefaultBridgedDeviceBasicInformationClusterServer('Co
|
860
|
+
this.coOnly = new MatterbridgeEndpoint([smokeCoAlarm, bridgedNode, powerSource], { uniqueStorageKey: 'Co alarm sensor' }, this.config.debug)
|
861
|
+
.createDefaultBridgedDeviceBasicInformationClusterServer('Co alarm sensor', 'serial_947456317488', 0xfff1, 'Matterbridge', 'Matterbridge SmokeCoAlarm', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion)
|
856
862
|
.createDefaultIdentifyClusterServer()
|
857
|
-
.createCoOnlySmokeCOAlarmClusterServer(SmokeCoAlarm.AlarmState.Normal)
|
863
|
+
.createCoOnlySmokeCOAlarmClusterServer(SmokeCoAlarm.AlarmState.Normal)
|
864
|
+
.createDefaultPowerSourceReplaceableBatteryClusterServer();
|
858
865
|
if (this.config.enableConcentrationMeasurements === true)
|
859
866
|
this.coOnly.createDefaultCarbonMonoxideConcentrationMeasurementClusterServer(100);
|
860
867
|
this.setSelectDevice(this.coOnly.serialNumber ?? '', this.coOnly.deviceName ?? '', undefined, 'hub');
|
@@ -865,8 +872,9 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
865
872
|
else {
|
866
873
|
this.coOnly = undefined;
|
867
874
|
}
|
868
|
-
this.airQuality = new MatterbridgeEndpoint([airQualitySensor, bridgedNode], { uniqueStorageKey: 'Air quality sensor' }, this.config.debug)
|
875
|
+
this.airQuality = new MatterbridgeEndpoint([airQualitySensor, bridgedNode, powerSource], { uniqueStorageKey: 'Air quality sensor' }, this.config.debug)
|
869
876
|
.createDefaultBridgedDeviceBasicInformationClusterServer('Air quality sensor', 'serial_987484318322', 0xfff1, 'Matterbridge', 'Matterbridge Air Quality Sensor', parseInt(this.version.replace(/\D/g, '')), this.version === '' ? 'Unknown' : this.version, parseInt(this.matterbridge.matterbridgeVersion.replace(/\D/g, '')), this.matterbridge.matterbridgeVersion)
|
877
|
+
.createDefaultPowerSourceReplaceableBatteryClusterServer(50, PowerSource.BatChargeLevel.Warning, 2900, 'CR2450', 1)
|
870
878
|
.addRequiredClusterServers()
|
871
879
|
.addClusterServers([TemperatureMeasurement.Cluster.id, RelativeHumidityMeasurement.Cluster.id]);
|
872
880
|
if (this.config.enableConcentrationMeasurements === true) {
|
@@ -940,12 +948,14 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
940
948
|
this.bridgedDevices.set(dishwasherDevice.deviceName ?? '', dishwasherDevice);
|
941
949
|
}
|
942
950
|
const refrigeratorDevice = new Appliances(refrigerator, 'Refrigerator', '9987654322');
|
951
|
+
refrigeratorDevice.addFixedLabel('composed', 'Refrigerator');
|
943
952
|
this.setSelectDevice(refrigeratorDevice.serialNumber ?? '', refrigeratorDevice.deviceName ?? '', undefined, 'hub');
|
944
953
|
if (this.validateDevice(refrigeratorDevice.deviceName ?? '')) {
|
945
954
|
await this.registerDevice(refrigeratorDevice);
|
946
955
|
this.bridgedDevices.set(refrigeratorDevice.deviceName ?? '', refrigeratorDevice);
|
947
956
|
}
|
948
957
|
const ovenDevice = new Appliances(oven, 'Oven', '1298867891');
|
958
|
+
ovenDevice.addFixedLabel('composed', 'Oven');
|
949
959
|
this.setSelectDevice(ovenDevice.serialNumber ?? '', ovenDevice.deviceName ?? '', undefined, 'hub');
|
950
960
|
if (this.validateDevice(ovenDevice.deviceName ?? '')) {
|
951
961
|
await this.registerDevice(ovenDevice);
|
@@ -973,7 +983,6 @@ export class ExampleMatterbridgeDynamicPlatform extends MatterbridgeDynamicPlatf
|
|
973
983
|
async onConfigure() {
|
974
984
|
await super.onConfigure();
|
975
985
|
this.log.info('onConfigure called');
|
976
|
-
this.log.notice('<iframe width="500" height="500" src="https://www.youtube.com/embed/DLzxrzFCyOs?hl=en_US&version=3&rel=0&autoplay=1" frameborder="1" allowfullscreen></iframe>');
|
977
986
|
await this.switch?.setAttribute(OnOff.Cluster.id, 'onOff', this.intervalOnOff, this.switch.log);
|
978
987
|
await this.mountedOnOffSwitch?.setAttribute(OnOff.Cluster.id, 'onOff', this.intervalOnOff, this.mountedOnOffSwitch.log);
|
979
988
|
this.switch?.log.info(`Set switch initial onOff to ${this.intervalOnOff}`);
|
@@ -40,7 +40,7 @@
|
|
40
40
|
"default": true
|
41
41
|
},
|
42
42
|
"enableConcentrationMeasurements": {
|
43
|
-
"description": "Enable the ConcentrationMeasurements in the Air Quality device and SmokeCoSensor
|
43
|
+
"description": "Enable the ConcentrationMeasurements in the Air Quality device and SmokeCoSensor device (Apple Home 18.4 will discard these devices when enabled)",
|
44
44
|
"type": "boolean",
|
45
45
|
"default": true
|
46
46
|
},
|
package/npm-shrinkwrap.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "matterbridge-example-dynamic-platform",
|
3
|
-
"version": "1.2.0-edge.
|
3
|
+
"version": "1.2.0-edge.11",
|
4
4
|
"lockfileVersion": 3,
|
5
5
|
"requires": true,
|
6
6
|
"packages": {
|
7
7
|
"": {
|
8
8
|
"name": "matterbridge-example-dynamic-platform",
|
9
|
-
"version": "1.2.0-edge.
|
9
|
+
"version": "1.2.0-edge.11",
|
10
10
|
"license": "MIT",
|
11
11
|
"dependencies": {
|
12
12
|
"node-ansi-logger": "3.0.1",
|