import { UserFilter } from './Filter/UserFilter'; import { IUserFilter } from './Filter/IUserFilter'; import { ApplicationCode } from './Code/ApplicationCode'; import { UserSelection } from './Selection/UserSelection'; import { IUserSelection } from './Selection/IUserSelection'; import { AsyncLazy } from '../../infrastructure/Threading/AsyncLazy'; import { Signal } from '../../infrastructure/Events/Signal'; import { parseApplication } from '../Parser/ApplicationParser'; import { IApplicationState } from './IApplicationState'; import { Script } from '../../domain/Script'; import { Application } from '../../domain/Application'; import { IApplicationCode } from './Code/IApplicationCode'; /** Mutatable singleton application state that's the single source of truth throughout the application */ export class ApplicationState implements IApplicationState { /** Get singleton application state */ public static GetAsync(): Promise { return ApplicationState.instance.getValueAsync(); } /** Application instance with all scripts. */ private static instance = new AsyncLazy(() => { const application = parseApplication(); const selectedScripts = new Array