UNPKG

scriptable-testlab

Version:

A lightweight, efficient tool designed to manage and update scripts for Scriptable.

62 lines (49 loc) 1.86 kB
import {EventEmitter} from 'events'; const STATE_CHANGE_EVENT = 'stateChange'; type StateChangeListener = (state: Record<string, any>) => void; // Use the namespace pattern export namespace SystemState { const emitter = new EventEmitter(); let state: Record<string, any> = {}; export function getState(): Record<string, any> { return {...state}; } export function setState(newState: Record<string, any>): void { state = {...state, ...newState}; emitter.emit(STATE_CHANGE_EVENT, getState()); } export function reset(): void { state = {}; emitter.emit(STATE_CHANGE_EVENT, getState()); } export function getAlertResponse(): number | undefined { return state.alertResponse; } export function setAlertResponse(response: number | undefined): void { setState({alertResponse: response}); } export function getTextFieldValue(fieldId: string): string | undefined { return state.textFieldValues?.[fieldId]; } export function setTextFieldValue(fieldId: string, value: string): void { const textFieldValues = {...(state.textFieldValues || {})}; textFieldValues[fieldId] = value; setState({textFieldValues}); } export function addEventListener(event: 'stateChange', listener: StateChangeListener): void { if (event !== STATE_CHANGE_EVENT) { throw new Error(`Invalid event: ${event}`); } emitter.addListener(event, listener); } export function removeEventListener(event: 'stateChange', listener: StateChangeListener): void { if (event !== STATE_CHANGE_EVENT) { throw new Error(`Invalid event: ${event}`); } emitter.removeListener(event, listener); } export function subscribe(handler: StateChangeListener): () => void { addEventListener(STATE_CHANGE_EVENT, handler); return () => removeEventListener(STATE_CHANGE_EVENT, handler); } }