diff --git a/src/rules/rules.js b/src/rules/rules.js index 729c0a5b..8cd2e526 100644 --- a/src/rules/rules.js +++ b/src/rules/rules.js @@ -362,9 +362,10 @@ function _addFromHashMap (hashMap, key, object) { * @param {*} input raw Java input/context, see * {@link https://github.com/openhab/openhab-core/blob/main/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/handler/ScriptActionHandler.java ScriptActionHandler} * and {@link https://github.com/openhab/openhab-core/blob/main/bundles/org.openhab.core.automation.module.script.rulesupport/src/main/java/org/openhab/core/automation/module/script/rulesupport/shared/simple/SimpleRuleActionHandler.java SimpleRuleActionHandler} + * @param {boolean} [javaEventBackwardCompat=false] enables backwards compatibility with pure Java event object in UI-based rules * @returns {EventObject} */ -function _getTriggeredData (input) { +function _getTriggeredData (input, javaEventBackwardCompat = false) { const event = input.get('event'); /** * @type {EventObject} @@ -468,6 +469,49 @@ function _getTriggeredData (input) { _addFromHashMap(input, 'module', data); + // backward compatibility with the pure Java event object + if (javaEventBackwardCompat) { + const itemState = data.receivedState ?? data.newState; + if (itemState) { + Reflect.defineProperty(data, 'itemState', { + get () { + console.warn('event.itemState is deprecated, use event.receivedState for update triggers or event.newState for change triggers instead.'); + return itemState; + } + }); + } + if (data.oldState) { + Reflect.defineProperty(data, 'oldItemState', { + get () { + console.warn('event.oldItemState is deprecated, use event.oldState instead. If you use Blockly, simply resave the script.'); + return data.oldState; + } + }); + } + if (data.receivedCommand) { + Reflect.defineProperty(data, 'itemCommand', { + get () { + console.warn('event.itemCommand is deprecated, use event.receivedCommand instead. If you use Blockly, simply resave the script.'); + return data.receivedCommand; + } + }); + } + Reflect.defineProperty(data, 'type', { + get () { + console.warn('event.type is deprecated, use event.eventName instead. If you use Blockly, simply resave the script.'); + return data.eventName; + } + }); + if (event.receivedEvent) { + Reflect.defineProperty(data, 'event', { + get () { + console.warn('event.event is deprecated, use event.receivedEvent instead. If you use Blockly, simply resave the script.'); + return data.receivedEvent; + } + }); + } + } + return data; } @@ -477,5 +521,6 @@ module.exports = { isEnabled, setEnabled, JSRule, - SwitchableJSRule + SwitchableJSRule, + _getTriggeredData // exposed for converting the event in UI-based rules inside the add-on }; diff --git a/types/rules/index.d.ts b/types/rules/index.d.ts index 3a13f01d..f86d86a3 100644 --- a/types/rules/index.d.ts +++ b/types/rules/index.d.ts @@ -6,6 +6,7 @@ declare const _exports: { setEnabled: typeof import("./rules").setEnabled; JSRule: typeof import("./rules").JSRule; SwitchableJSRule: typeof import("./rules").SwitchableJSRule; + _getTriggeredData: typeof import("./rules")._getTriggeredData; }; export = _exports; //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/types/rules/rules.d.ts b/types/rules/rules.d.ts index b5433fd9..5e0cdea6 100644 --- a/types/rules/rules.d.ts +++ b/types/rules/rules.d.ts @@ -213,4 +213,16 @@ export function JSRule(ruleConfig: RuleConfig): HostRule; * @throws {Error} an error is a rule with the given UID already exists. */ export function SwitchableJSRule(ruleConfig: RuleConfig): HostRule; +/** + * Get rule trigger data from raw Java input and generate JavaScript object. + * This method is not intended for direct use in user scripts, but used internally by JS Scripting. + * + * @private + * @param {*} input raw Java input/context, see + * {@link https://github.com/openhab/openhab-core/blob/main/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/handler/ScriptActionHandler.java ScriptActionHandler} + * and {@link https://github.com/openhab/openhab-core/blob/main/bundles/org.openhab.core.automation.module.script.rulesupport/src/main/java/org/openhab/core/automation/module/script/rulesupport/shared/simple/SimpleRuleActionHandler.java SimpleRuleActionHandler} + * @param {boolean} [javaEventBackwardCompat=false] enables backwards compatibility with pure Java event object in UI-based rules + * @returns {EventObject} + */ +export function _getTriggeredData(input: any, javaEventBackwardCompat?: boolean): EventObject; //# sourceMappingURL=rules.d.ts.map \ No newline at end of file diff --git a/types/rules/rules.d.ts.map b/types/rules/rules.d.ts.map index df30a84c..6677169b 100644 --- a/types/rules/rules.d.ts.map +++ b/types/rules/rules.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/rules/rules.js"],"names":[],"mappings":";;;;;;;;;;;cAec,MAAM;;;;cACN,MAAM;;;;mBACN,MAAM;;;;qBACN,MAAM;;;;cACN,MAAM;;;;eACN,MAAM;;;;mBACN,MAAM;;;;gBACN,MAAM;;;;eACN,MAAM;;;;eACN,MAAM;;;;YACN,MAAM;;;;cACN,MAAM;;;;oBACN,MAAM;;;;UACN,MAAM;;;;cACN,OAAO;;;;YACP,MAAM;;;;eACN,MAAM;;;;iBACN,MAAM;;;;eACN,MAAM;;;;gBACN,MAAM;;;;YACN,MAAM;;;;;;;;;;;;;mCAOT,WAAW;;;;;;;;UAKR,MAAM;;;;kBACN,MAAM;;;;eACN,cAAY,aAAa;;;;aACzB,YAAY;;;;SACZ,MAAM;;;;WACN,MAAM,EAAE;;;;gBACR,MAAM;;;;gBACN,OAAO;;;;qBACP,MAAM;;AAkFpB;;;;;;;IAOI;AACJ,gCAHY,MAAM,GACJ,OAAO,CAUpB;AAED;;;;;;;;;IASI;AACJ,6BALY,MAAM,SACN,MAAM,SACN,OAAO,QAalB;AAED;;;;;;;;IAQI;AACJ,+BAJY,MAAM,GACJ,OAAO,CAQpB;AAED;;;;;;;IAOI;AACJ,gCAJY,MAAM,aACN,OAAO,QAQlB;AAED;;;;;;;;;;;;;;;;;IAiBI;AACJ,mCAJY,UAAU,YAiErB;AAED;;;;;;;;;GASG;AACH,6CAJW,UAAU,YA8CpB"} \ No newline at end of file +{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/rules/rules.js"],"names":[],"mappings":";;;;;;;;;;;cAec,MAAM;;;;cACN,MAAM;;;;mBACN,MAAM;;;;qBACN,MAAM;;;;cACN,MAAM;;;;eACN,MAAM;;;;mBACN,MAAM;;;;gBACN,MAAM;;;;eACN,MAAM;;;;eACN,MAAM;;;;YACN,MAAM;;;;cACN,MAAM;;;;oBACN,MAAM;;;;UACN,MAAM;;;;cACN,OAAO;;;;YACP,MAAM;;;;eACN,MAAM;;;;iBACN,MAAM;;;;eACN,MAAM;;;;gBACN,MAAM;;;;YACN,MAAM;;;;;;;;;;;;;mCAOT,WAAW;;;;;;;;UAKR,MAAM;;;;kBACN,MAAM;;;;eACN,cAAY,aAAa;;;;aACzB,YAAY;;;;SACZ,MAAM;;;;WACN,MAAM,EAAE;;;;gBACR,MAAM;;;;gBACN,OAAO;;;;qBACP,MAAM;;AAkFpB;;;;;;;IAOI;AACJ,gCAHY,MAAM,GACJ,OAAO,CAUpB;AAED;;;;;;;;;IASI;AACJ,6BALY,MAAM,SACN,MAAM,SACN,OAAO,QAalB;AAED;;;;;;;;IAQI;AACJ,+BAJY,MAAM,GACJ,OAAO,CAQpB;AAED;;;;;;;IAOI;AACJ,gCAJY,MAAM,aACN,OAAO,QAQlB;AAED;;;;;;;;;;;;;;;;;IAiBI;AACJ,mCAJY,UAAU,YAiErB;AAED;;;;;;;;;GASG;AACH,6CAJW,UAAU,YA8CpB;AAeD;;;;;;;;;;GAUG;AACH,wEAHW,OAAO,GACL,WAAW,CAsJvB"} \ No newline at end of file