Skip to content

Commit 41ec164

Browse files
authored
Use instanceof helpers for Item and Quantity class instead of instanceof (openhab#365)
This avoids issues with the webpacked version, where instanceof does not work for openhab-js classes. Signed-off-by: Florian Hotze <[email protected]>
1 parent 5d37e80 commit 41ec164

File tree

5 files changed

+69
-24
lines changed

5 files changed

+69
-24
lines changed

src/items/items.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
const osgi = require('../osgi');
88
const utils = require('../utils');
99
const log = require('../log')('items');
10-
const { _toOpenhabPrimitiveType, _isQuantity } = require('../helpers');
10+
const { _toOpenhabPrimitiveType, _isQuantity, _isItem } = require('../helpers');
1111
const { getQuantity, QuantityError } = require('../quantity');
1212

1313
const { UnDefType, OnOffType, events, itemRegistry } = require('@runtime');
@@ -500,7 +500,7 @@ function removeItem (itemOrItemName) {
500500

501501
if (typeof itemOrItemName === 'string') {
502502
itemName = itemOrItemName;
503-
} else if (itemOrItemName instanceof Item) {
503+
} else if (_isItem(itemOrItemName)) {
504504
itemName = itemOrItemName.name;
505505
} else {
506506
log.warn('Item name is undefined (no Item supplied or supplied name is not a string) so cannot be removed');

src/quantity.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const { _isItem } = require('./helpers');
1+
const { _isItem, _isQuantity } = require('./helpers');
22
const QuantityType = Java.type('org.openhab.core.library.types.QuantityType');
33
/**
44
* @type {JavaBigDecimal}
@@ -65,7 +65,7 @@ function _toQtyType (value, errorMsg = 'Argument of wrong type provided, require
6565
} catch (e) {
6666
throw new QuantityError(`Failed to create QuantityType from ${value}: ${e}`);
6767
}
68-
} else if (value instanceof Quantity) {
68+
} else if (_isQuantity(value)) {
6969
value = QuantityType.valueOf(value.rawQtyType.toString()); // Avoid referencing the same underlying QuantityType, so "clone" it
7070
} else {
7171
throw new TypeError(errorMsg);

src/triggers.js

+12-12
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@
99

1010
const log = require('./log')('triggers');
1111
const { randomUUID } = require('./utils');
12+
const { _isItem } = require('./helpers');
13+
14+
const ModuleBuilder = Java.type('org.openhab.core.automation.util.ModuleBuilder');
15+
const Configuration = Java.type('org.openhab.core.config.core.Configuration');
1216

1317
/**
14-
* @type {Item}
18+
* @typedef { import("./items/items").Item } Item
1519
* @private
1620
*/
17-
const Item = require('./items').Item;
18-
19-
const ModuleBuilder = Java.type('org.openhab.core.automation.util.ModuleBuilder');
20-
const Configuration = Java.type('org.openhab.core.config.core.Configuration');
2121

2222
/**
2323
* Creates a trigger. Internal function, instead use predefined trigger types.
@@ -77,7 +77,7 @@ const ChannelEventTrigger = (channel, event, triggerName) =>
7777
*/
7878
const ItemStateChangeTrigger = (itemOrName, oldState, newState, triggerName) =>
7979
_createTrigger('core.ItemStateChangeTrigger', triggerName, {
80-
itemName: (itemOrName instanceof Item) ? itemOrName.name : itemOrName,
80+
itemName: _isItem(itemOrName) ? itemOrName.name : itemOrName,
8181
state: newState,
8282
previousState: oldState
8383
});
@@ -96,7 +96,7 @@ const ItemStateChangeTrigger = (itemOrName, oldState, newState, triggerName) =>
9696
*/
9797
const ItemStateUpdateTrigger = (itemOrName, state, triggerName) =>
9898
_createTrigger('core.ItemStateUpdateTrigger', triggerName, {
99-
itemName: (itemOrName instanceof Item) ? itemOrName.name : itemOrName,
99+
itemName: _isItem(itemOrName) ? itemOrName.name : itemOrName,
100100
state
101101
});
102102

@@ -114,7 +114,7 @@ const ItemStateUpdateTrigger = (itemOrName, state, triggerName) =>
114114
*/
115115
const ItemCommandTrigger = (itemOrName, command, triggerName) =>
116116
_createTrigger('core.ItemCommandTrigger', triggerName, {
117-
itemName: (itemOrName instanceof Item) ? itemOrName.name : itemOrName,
117+
itemName: _isItem(itemOrName) ? itemOrName.name : itemOrName,
118118
command
119119
});
120120

@@ -132,7 +132,7 @@ const ItemCommandTrigger = (itemOrName, command, triggerName) =>
132132
*/
133133
const GroupStateChangeTrigger = (groupOrName, oldState, newState, triggerName) =>
134134
_createTrigger('core.GroupStateChangeTrigger', triggerName, {
135-
groupName: (groupOrName instanceof Item) ? groupOrName.name : groupOrName,
135+
groupName: _isItem(groupOrName) ? groupOrName.name : groupOrName,
136136
state: newState,
137137
previousState: oldState
138138
});
@@ -150,7 +150,7 @@ const GroupStateChangeTrigger = (groupOrName, oldState, newState, triggerName) =
150150
*/
151151
const GroupStateUpdateTrigger = (groupOrName, state, triggerName) =>
152152
_createTrigger('core.GroupStateUpdateTrigger', triggerName, {
153-
groupName: (groupOrName instanceof Item) ? groupOrName.name : groupOrName,
153+
groupName: _isItem(groupOrName) ? groupOrName.name : groupOrName,
154154
state
155155
});
156156

@@ -167,7 +167,7 @@ const GroupStateUpdateTrigger = (groupOrName, state, triggerName) =>
167167
*/
168168
const GroupCommandTrigger = (groupOrName, command, triggerName) =>
169169
_createTrigger('core.GroupCommandTrigger', triggerName, {
170-
groupName: (groupOrName instanceof Item) ? groupOrName.name : groupOrName,
170+
groupName: _isItem(groupOrName) ? groupOrName.name : groupOrName,
171171
command
172172
});
173173

@@ -269,7 +269,7 @@ const TimeOfDayTrigger = (time, triggerName) =>
269269
*/
270270
const DateTimeTrigger = (itemOrName, timeOnly = false, triggerName) =>
271271
_createTrigger('timer.DateTimeTrigger', triggerName, {
272-
itemName: (itemOrName instanceof Item) ? itemOrName.name : itemOrName,
272+
itemName: _isItem(itemOrName) ? itemOrName.name : itemOrName,
273273
timeOnly
274274
});
275275

types/triggers.d.ts

+52-7
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,48 @@
1+
export type Item = {
2+
rawItem: HostItem;
3+
persistence: import("./items/item-persistence");
4+
semantics: import("./items/item-semantics");
5+
readonly type: string;
6+
readonly name: string;
7+
readonly label: string;
8+
readonly state: string;
9+
readonly numericState: number;
10+
readonly quantityState: import("./quantity").Quantity;
11+
readonly rawState: HostState;
12+
readonly members: any[];
13+
readonly descendents: any[];
14+
readonly isUninitialized: boolean;
15+
getMetadata(namespace?: string): {
16+
value: string;
17+
configuration: any;
18+
} | {
19+
namespace: {
20+
value: string;
21+
configuration: any;
22+
};
23+
};
24+
replaceMetadata(namespace: string, value: string, configuration?: any): {
25+
configuration: any;
26+
value: string;
27+
};
28+
removeMetadata(namespace?: string): {
29+
value: string;
30+
configuration: any;
31+
};
32+
sendCommand(value: any): void;
33+
sendCommandIfDifferent(value: any): boolean;
34+
getToggleState(): "PAUSE" | "PLAY" | "OPEN" | "CLOSED" | "ON" | "OFF";
35+
sendToggleCommand(): void;
36+
postToggleUpdate(): void;
37+
postUpdate(value: any): void;
38+
readonly groupNames: string[];
39+
addGroups(...groupNamesOrItems: any[]): void;
40+
removeGroups(...groupNamesOrItems: any[]): void;
41+
readonly tags: string[];
42+
addTags(...tagNames: string[]): void;
43+
removeTags(...tagNames: string[]): void;
44+
toString(): any;
45+
};
146
/**
247
* Creates a trigger that fires upon specific events in a channel.
348
*
@@ -26,7 +71,7 @@ export function ChannelEventTrigger(channel: string, event: string, triggerName?
2671
* @param {string} [newState] the new state of the Item
2772
* @param {string} [triggerName] the optional name of the trigger to create
2873
*/
29-
export function ItemStateChangeTrigger(itemOrName: any | string, oldState?: string, newState?: string, triggerName?: string): HostTrigger;
74+
export function ItemStateChangeTrigger(itemOrName: Item | string, oldState?: string, newState?: string, triggerName?: string): HostTrigger;
3075
/**
3176
* Creates a trigger that fires upon an Item receiving a state update. Note that the Item does not need to change state.
3277
*
@@ -39,7 +84,7 @@ export function ItemStateChangeTrigger(itemOrName: any | string, oldState?: stri
3984
* @param {string} [state] the new state of the Item
4085
* @param {string} [triggerName] the optional name of the trigger to create
4186
*/
42-
export function ItemStateUpdateTrigger(itemOrName: any | string, state?: string, triggerName?: string): HostTrigger;
87+
export function ItemStateUpdateTrigger(itemOrName: Item | string, state?: string, triggerName?: string): HostTrigger;
4388
/**
4489
* Creates a trigger that fires upon an Item receiving a command. Note that the Item does not need to change state.
4590
*
@@ -52,7 +97,7 @@ export function ItemStateUpdateTrigger(itemOrName: any | string, state?: string,
5297
* @param {string} [command] the command received
5398
* @param {string} [triggerName] the optional name of the trigger to create
5499
*/
55-
export function ItemCommandTrigger(itemOrName: any | string, command?: string, triggerName?: string): HostTrigger;
100+
export function ItemCommandTrigger(itemOrName: Item | string, command?: string, triggerName?: string): HostTrigger;
56101
/**
57102
* Creates a trigger that fires upon a member of a group changing state. Note that group Item does not need to change state.
58103
*
@@ -65,7 +110,7 @@ export function ItemCommandTrigger(itemOrName: any | string, command?: string, t
65110
* @param {string} [newState] the new state of the group
66111
* @param {string} [triggerName] the optional name of the trigger to create
67112
*/
68-
export function GroupStateChangeTrigger(groupOrName: any | string, oldState?: string, newState?: string, triggerName?: string): HostTrigger;
113+
export function GroupStateChangeTrigger(groupOrName: Item | string, oldState?: string, newState?: string, triggerName?: string): HostTrigger;
69114
/**
70115
* Creates a trigger that fires upon a member of a group receiving a state update. Note that group Item does not need to change state.
71116
*
@@ -77,7 +122,7 @@ export function GroupStateChangeTrigger(groupOrName: any | string, oldState?: st
77122
* @param {string} [state] the new state of the group
78123
* @param {string} [triggerName] the optional name of the trigger to create
79124
*/
80-
export function GroupStateUpdateTrigger(groupOrName: any | string, state?: string, triggerName?: string): HostTrigger;
125+
export function GroupStateUpdateTrigger(groupOrName: Item | string, state?: string, triggerName?: string): HostTrigger;
81126
/**
82127
* Creates a trigger that fires upon a member of a group receiving a command. Note that the group Item does not need to change state.
83128
*
@@ -89,7 +134,7 @@ export function GroupStateUpdateTrigger(groupOrName: any | string, state?: strin
89134
* @param {string} [command] the command received
90135
* @param {string} [triggerName] the optional name of the trigger to create
91136
*/
92-
export function GroupCommandTrigger(groupOrName: any | string, command?: string, triggerName?: string): HostTrigger;
137+
export function GroupCommandTrigger(groupOrName: Item | string, command?: string, triggerName?: string): HostTrigger;
93138
/**
94139
* Creates a trigger that fires upon a Thing status updating.
95140
*
@@ -182,7 +227,7 @@ export function TimeOfDayTrigger(time: string, triggerName?: string): HostTrigge
182227
* @param {boolean} [timeOnly=false] Specifies whether only the time of the Item should be compared or the date and time.
183228
* @param {string} [triggerName] the optional name of the trigger to create
184229
*/
185-
export function DateTimeTrigger(itemOrName: any | string, timeOnly?: boolean, triggerName?: string): HostTrigger;
230+
export function DateTimeTrigger(itemOrName: Item | string, timeOnly?: boolean, triggerName?: string): HostTrigger;
186231
/**
187232
* Creates a trigger for the {@link https://openhab.org/addons/automation/pwm/ Pulse Width Modulation (PWM) Automation} add-on.
188233
*

types/triggers.d.ts.map

+1-1
Original file line numberDiff line numberDiff line change

0 commit comments

Comments
 (0)