import { Fun } from '@ephox/katamari'; import * as AlloyLogger from '../../log/AlloyLogger'; import type { AlloyComponent } from '../component/ComponentApi'; import type { AlloySystemApi } from './SystemApi'; const NoContextApi = (getComp?: () => AlloyComponent): AlloySystemApi => { const getMessage = (event: string) => `The component must be in a context to execute: ${event}` + (getComp ? '\n' + AlloyLogger.element(getComp().element) + ' is not in context.' : ''); const fail = (event: string) => (): never => { throw new Error(getMessage(event)); }; const warn = (event: string) => (): void => { // eslint-disable-next-line no-console console.warn(getMessage(event)); }; return { debugInfo: Fun.constant('fake'), triggerEvent: warn('triggerEvent'), triggerFocus: warn('triggerFocus'), triggerEscape: warn('triggerEscape'), broadcast: warn('broadcast'), broadcastOn: warn('broadcastOn'), broadcastEvent: warn('broadcastEvent'), build: fail('build'), buildOrPatch: fail('buildOrPatch'), addToWorld: fail('addToWorld'), removeFromWorld: fail('removeFromWorld'), addToGui: fail('addToGui'), removeFromGui: fail('removeFromGui'), getByUid: fail('getByUid'), getByDom: fail('getByDom'), isConnected: Fun.never }; }; const singleton = NoContextApi(); export { singleton, NoContextApi };