From e3c396ee9f7d187e8c2375357c8a6916c693bb1d Mon Sep 17 00:00:00 2001 From: Philipp Waller <1090452+philippwaller@users.noreply.github.com> Date: Sun, 17 Dec 2023 17:38:18 +0100 Subject: [PATCH] chore: format code --- src/modules/homeassistant/actions/action.js | 16 +- .../homeassistant/actions/service-action.js | 56 ++--- src/modules/homeassistant/commands/command.js | 45 ++-- .../commands/execute-script-command.js | 38 ++-- .../commands/get-services-command.js | 16 +- .../commands/get-states-command.js | 16 +- .../commands/subscribe-events-command.js | 18 +- src/modules/homeassistant/homeassistant.js | 194 +++++++++--------- 8 files changed, 199 insertions(+), 200 deletions(-) diff --git a/src/modules/homeassistant/actions/action.js b/src/modules/homeassistant/actions/action.js index 61918fb..d9c2722 100644 --- a/src/modules/homeassistant/actions/action.js +++ b/src/modules/homeassistant/actions/action.js @@ -3,13 +3,13 @@ * intended for direct instantiation. */ export class Action { - /** - * Constructs an Action instance. Blocks direct instantiation of this abstract class. - * @throws {TypeError} If directly instantiated. - */ - constructor() { - if (new.target === Action) { - throw new TypeError("Cannot instantiate abstract class Action directly"); - } + /** + * Constructs an Action instance. Blocks direct instantiation of this abstract class. + * @throws {TypeError} If directly instantiated. + */ + constructor() { + if (new.target === Action) { + throw new TypeError('Cannot instantiate abstract class Action directly') } + } } diff --git a/src/modules/homeassistant/actions/service-action.js b/src/modules/homeassistant/actions/service-action.js index 9785646..b53f2e1 100644 --- a/src/modules/homeassistant/actions/service-action.js +++ b/src/modules/homeassistant/actions/service-action.js @@ -1,36 +1,36 @@ -import {Action} from "@/modules/homeassistant/actions/action"; +import { Action } from '@/modules/homeassistant/actions/action' /** * ServiceAction, extending Action, facilitates interactions with HomeAssistant services. */ export class ServiceAction extends Action { - /** - * Constructs a ServiceAction instance. - * @param {string} domain - Service domain, must be a non-empty string. - * @param {string} service - Service name, must be a non-empty string. - * @param {Array} [entity_id=[]] - Target entity IDs array. - * @param {Object} [serviceData={}] - Additional service data. - * @throws {Error} if 'domain' or 'service' are empty or not strings. - * @throws {TypeError} if 'entity_id' is not an array or 'serviceData' is not an object. - */ - constructor(domain, service, entity_id, serviceData) { - super(); + /** + * Constructs a ServiceAction instance. + * @param {string} domain - Service domain, must be a non-empty string. + * @param {string} service - Service name, must be a non-empty string. + * @param {Array} [entity_id=[]] - Target entity IDs array. + * @param {Object} [serviceData={}] - Additional service data. + * @throws {Error} if 'domain' or 'service' are empty or not strings. + * @throws {TypeError} if 'entity_id' is not an array or 'serviceData' is not an object. + */ + constructor(domain, service, entity_id, serviceData) { + super() - if (typeof domain !== 'string' || !domain.trim()) { - throw new Error('Domain must be a non-empty string'); - } - if (typeof service !== 'string' || !service.trim()) { - throw new Error('Service must be a non-empty string'); - } - if (!Array.isArray(entity_id)) { - throw new TypeError('entity_id must be an array'); - } - if (typeof serviceData !== 'object' || serviceData === null) { - throw new TypeError('serviceData must be an object'); - } - - this.service = `${domain}.${service}`; - this.data = serviceData; - this.target = {"entity_id": entity_id}; + if (typeof domain !== 'string' || !domain.trim()) { + throw new Error('Domain must be a non-empty string') + } + if (typeof service !== 'string' || !service.trim()) { + throw new Error('Service must be a non-empty string') + } + if (!Array.isArray(entity_id)) { + throw new TypeError('entity_id must be an array') } + if (typeof serviceData !== 'object' || serviceData === null) { + throw new TypeError('serviceData must be an object') + } + + this.service = `${domain}.${service}` + this.data = serviceData + this.target = { entity_id: entity_id } + } } diff --git a/src/modules/homeassistant/commands/command.js b/src/modules/homeassistant/commands/command.js index 3af81bd..5831090 100644 --- a/src/modules/homeassistant/commands/command.js +++ b/src/modules/homeassistant/commands/command.js @@ -3,30 +3,29 @@ * that can be used to interact with the HomeAssistant WebSocket API. */ export class Command { - /** - * Constructs a Command instance. - * @param {number} requestId - The unique identifier for the command request. - * @param {string} type - The type of the command. Must be a non-empty string. - * @throws {TypeError} If an attempt is made to instantiate Command directly. - * @throws {Error} If the requestId is not a non-negative number. - * @throws {Error} If the type is not a non-empty string. - */ - constructor(requestId, type) { - // Prevent direct instantiation of this abstract class. - if (new.target === Command) { - throw new TypeError("Cannot instantiate abstract class Command directly"); - } - - if (typeof requestId !== 'number' || requestId < 0) { - throw new Error('requestId must be a non-negative number'); - } + /** + * Constructs a Command instance. + * @param {number} requestId - The unique identifier for the command request. + * @param {string} type - The type of the command. Must be a non-empty string. + * @throws {TypeError} If an attempt is made to instantiate Command directly. + * @throws {Error} If the requestId is not a non-negative number. + * @throws {Error} If the type is not a non-empty string. + */ + constructor(requestId, type) { + // Prevent direct instantiation of this abstract class. + if (new.target === Command) { + throw new TypeError('Cannot instantiate abstract class Command directly') + } - if (typeof type !== 'string' || !type.trim()) { - throw new Error('type must be a non-empty string'); - } + if (typeof requestId !== 'number' || requestId < 0) { + throw new Error('requestId must be a non-negative number') + } - this.id = requestId; - this.type = type; + if (typeof type !== 'string' || !type.trim()) { + throw new Error('type must be a non-empty string') } -} + this.id = requestId + this.type = type + } +} diff --git a/src/modules/homeassistant/commands/execute-script-command.js b/src/modules/homeassistant/commands/execute-script-command.js index b0b6e89..c8e2a2e 100644 --- a/src/modules/homeassistant/commands/execute-script-command.js +++ b/src/modules/homeassistant/commands/execute-script-command.js @@ -1,5 +1,5 @@ -import {Command} from "@/modules/homeassistant/commands/command"; -import {Action} from "@/modules/homeassistant/actions/action"; +import { Command } from '@/modules/homeassistant/commands/command' +import { Action } from '@/modules/homeassistant/actions/action' /** * CallExecuteScriptCommand @@ -9,24 +9,24 @@ import {Action} from "@/modules/homeassistant/actions/action"; * This enhancement enables more dynamic and context-sensitive operations within HomeAssistant. */ export class ExecuteScriptCommand extends Command { - /** - * Constructs a CallExecuteScriptCommand instance. - * - * @param {number} requestId - Number of iterations for execution. Must be non-negative. - * @param {Action[]} [actions=[]] - Array of ScriptCommand instances. Optional, defaults to empty. - * @throws {TypeError} if actions is not an array or has non-Action elements. - */ - constructor(requestId, actions = []) { - super(requestId, "execute_script"); + /** + * Constructs a CallExecuteScriptCommand instance. + * + * @param {number} requestId - Number of iterations for execution. Must be non-negative. + * @param {Action[]} [actions=[]] - Array of ScriptCommand instances. Optional, defaults to empty. + * @throws {TypeError} if actions is not an array or has non-Action elements. + */ + constructor(requestId, actions = []) { + super(requestId, 'execute_script') - if (!Array.isArray(actions)) { - throw new TypeError('Actions must be an array'); - } - - if (actions.some(action => !(action instanceof Action))) { - throw new TypeError('Elements in actions must be Action instances or subclasses'); - } + if (!Array.isArray(actions)) { + throw new TypeError('Actions must be an array') + } - this.sequence = actions; + if (actions.some((action) => !(action instanceof Action))) { + throw new TypeError('Elements in actions must be Action instances or subclasses') } + + this.sequence = actions + } } diff --git a/src/modules/homeassistant/commands/get-services-command.js b/src/modules/homeassistant/commands/get-services-command.js index 1d1415a..0141041 100644 --- a/src/modules/homeassistant/commands/get-services-command.js +++ b/src/modules/homeassistant/commands/get-services-command.js @@ -1,15 +1,15 @@ -import {Command} from "@/modules/homeassistant/commands/command"; +import { Command } from '@/modules/homeassistant/commands/command' /** * The GetServicesCommand class, a subclass of Command, is used for requesting * service information from HomeAssistant. */ export class GetServicesCommand extends Command { - /** - * Constructs a GetServicesCommand instance.* - * @param {number} requestId - The unique identifier for the command request. - */ - constructor(requestId) { - super(requestId, "get_services"); - } + /** + * Constructs a GetServicesCommand instance.* + * @param {number} requestId - The unique identifier for the command request. + */ + constructor(requestId) { + super(requestId, 'get_services') + } } diff --git a/src/modules/homeassistant/commands/get-states-command.js b/src/modules/homeassistant/commands/get-states-command.js index e416acb..d40e331 100644 --- a/src/modules/homeassistant/commands/get-states-command.js +++ b/src/modules/homeassistant/commands/get-states-command.js @@ -1,15 +1,15 @@ -import {Command} from "@/modules/homeassistant/commands/command"; +import { Command } from '@/modules/homeassistant/commands/command' /** * The GetStatesCommand class, a subclass of Command, handles the retrieval of * state information from HomeAssistant. */ export class GetStatesCommand extends Command { - /** - * Constructs a GetStatesCommand instance. - * @param {number} requestId - The unique identifier for the command request. - */ - constructor(requestId) { - super(requestId, "get_states"); - } + /** + * Constructs a GetStatesCommand instance. + * @param {number} requestId - The unique identifier for the command request. + */ + constructor(requestId) { + super(requestId, 'get_states') + } } diff --git a/src/modules/homeassistant/commands/subscribe-events-command.js b/src/modules/homeassistant/commands/subscribe-events-command.js index b90640b..420dd2d 100644 --- a/src/modules/homeassistant/commands/subscribe-events-command.js +++ b/src/modules/homeassistant/commands/subscribe-events-command.js @@ -1,16 +1,16 @@ -import {Command} from "@/modules/homeassistant/commands/command"; +import { Command } from '@/modules/homeassistant/commands/command' /** * The SubscribeEventCommand class, a subclass of Command, specifically handles * subscription to event types in HomeAssistant. */ export class SubscribeEventsCommand extends Command { - /** - * Constructs a SubscribeEventCommand instance. - * @param {number} requestId - The unique identifier for the command request. - */ - constructor(requestId) { - super(requestId, "subscribe_events"); - this.event_type = "state_changed"; - } + /** + * Constructs a SubscribeEventCommand instance. + * @param {number} requestId - The unique identifier for the command request. + */ + constructor(requestId) { + super(requestId, 'subscribe_events') + this.event_type = 'state_changed' + } } diff --git a/src/modules/homeassistant/homeassistant.js b/src/modules/homeassistant/homeassistant.js index fe2295f..e4353b8 100644 --- a/src/modules/homeassistant/homeassistant.js +++ b/src/modules/homeassistant/homeassistant.js @@ -1,112 +1,112 @@ -import {ServiceAction} from "@/modules/homeassistant/actions/service-action"; -import {ExecuteScriptCommand} from "@/modules/homeassistant/commands/execute-script-command"; -import {SubscribeEventsCommand} from "@/modules/homeassistant/commands/subscribe-events-command"; -import {GetStatesCommand} from "@/modules/homeassistant/commands/get-states-command"; -import {GetServicesCommand} from "@/modules/homeassistant/commands/get-services-command"; +import { ServiceAction } from '@/modules/homeassistant/actions/service-action' +import { ExecuteScriptCommand } from '@/modules/homeassistant/commands/execute-script-command' +import { SubscribeEventsCommand } from '@/modules/homeassistant/commands/subscribe-events-command' +import { GetStatesCommand } from '@/modules/homeassistant/commands/get-states-command' +import { GetServicesCommand } from '@/modules/homeassistant/commands/get-services-command' export class Homeassistant { - - constructor(url, accessToken, onReady, onError, onClose) { - this.requests = new Map() - this.requestIdSequence = 1 - this.websocket = new WebSocket(url) - this.accessToken = accessToken; - this.onReady = onReady; - this.onError = onError; - - this.websocket.onmessage = (evt) => this.handleMessage(evt); - this.websocket.onerror = () => {this.onError("Failed to connect to " + url)}; - this.websocket.onclose = onClose; + constructor(url, accessToken, onReady, onError, onClose) { + this.requests = new Map() + this.requestIdSequence = 1 + this.websocket = new WebSocket(url) + this.accessToken = accessToken + this.onReady = onReady + this.onError = onError + + this.websocket.onmessage = (evt) => this.handleMessage(evt) + this.websocket.onerror = () => { + this.onError('Failed to connect to ' + url) } + this.websocket.onclose = onClose + } - close() { - this.websocket.onclose = null; - if (this.websocket && this.websocket.readyState === WebSocket.OPEN) { - this.websocket.close(); - } + close() { + this.websocket.onclose = null + if (this.websocket && this.websocket.readyState === WebSocket.OPEN) { + this.websocket.close() } - - handleMessage(msg) { - let messageData = JSON.parse(msg.data); - - switch (messageData.type) { - case "auth_required": - this.sendAuthentication(); - break; - case "result": - if (!messageData.success) { - throw messageData.error.message - } - if (this.requests.has(messageData.id)) { - this.requests.get(messageData.id)(messageData.result); - } - break; - case "event": - if (this.requests.has(messageData.id)) { - this.requests.get(messageData.id)(messageData.event); - } - break; - case "auth_ok": - if (this.onReady) { - this.onReady(); - } - break; - case "auth_failed": - if (this.onError) { - this.onError(messageData.message); - } - break; - case "auth_invalid": - if (this.onError) { - this.onError(messageData.message); - } - break; + } + + handleMessage(msg) { + let messageData = JSON.parse(msg.data) + + switch (messageData.type) { + case 'auth_required': + this.sendAuthentication() + break + case 'result': + if (!messageData.success) { + throw messageData.error.message } - } - - sendAuthentication() { - let authMessage = { - "type": "auth", - "access_token": this.accessToken + if (this.requests.has(messageData.id)) { + this.requests.get(messageData.id)(messageData.result) } - - this.websocket.send(JSON.stringify(authMessage)) - } - - getStates(callback) { - let getStatesCommand = new GetStatesCommand(this.nextRequestId()); - this.sendCommand(getStatesCommand, callback); - } - - getServices(callback) { - let getServicesCommand = new GetServicesCommand(this.nextRequestId()); - this.sendCommand(getServicesCommand, callback) + break + case 'event': + if (this.requests.has(messageData.id)) { + this.requests.get(messageData.id)(messageData.event) + } + break + case 'auth_ok': + if (this.onReady) { + this.onReady() + } + break + case 'auth_failed': + if (this.onError) { + this.onError(messageData.message) + } + break + case 'auth_invalid': + if (this.onError) { + this.onError(messageData.message) + } + break } + } - subscribeEvents(callback) { - let subscribeEventCommand = new SubscribeEventsCommand(this.nextRequestId()); - this.sendCommand(subscribeEventCommand, callback); + sendAuthentication() { + let authMessage = { + type: 'auth', + access_token: this.accessToken } - callService(service, domain, entity_id = null, serviceData = null, callback = null) { - let executeScriptCmd = new ExecuteScriptCommand(this.nextRequestId(), [ - new ServiceAction(domain, service, entity_id ? [entity_id] : [], serviceData || {}) - ]); - this.sendCommand(executeScriptCmd, callback) + this.websocket.send(JSON.stringify(authMessage)) + } + + getStates(callback) { + let getStatesCommand = new GetStatesCommand(this.nextRequestId()) + this.sendCommand(getStatesCommand, callback) + } + + getServices(callback) { + let getServicesCommand = new GetServicesCommand(this.nextRequestId()) + this.sendCommand(getServicesCommand, callback) + } + + subscribeEvents(callback) { + let subscribeEventCommand = new SubscribeEventsCommand(this.nextRequestId()) + this.sendCommand(subscribeEventCommand, callback) + } + + callService(service, domain, entity_id = null, serviceData = null, callback = null) { + let executeScriptCmd = new ExecuteScriptCommand(this.nextRequestId(), [ + new ServiceAction(domain, service, entity_id ? [entity_id] : [], serviceData || {}) + ]) + this.sendCommand(executeScriptCmd, callback) + } + + sendCommand(command, callback) { + if (callback) { + this.requests.set(command.id, callback) } - sendCommand(command, callback) { - if (callback) { - this.requests.set(command.id, callback); - } - - console.log(`Sending HomeAssistant command:\n ${JSON.stringify(command,null,2)}`) - this.websocket.send(JSON.stringify(command)); - } + console.log(`Sending HomeAssistant command:\n ${JSON.stringify(command, null, 2)}`) + this.websocket.send(JSON.stringify(command)) + } - nextRequestId() { - this.requestIdSequence = this.requestIdSequence + 1; - return this.requestIdSequence; - } + nextRequestId() { + this.requestIdSequence = this.requestIdSequence + 1 + return this.requestIdSequence + } } -