bugsnag/bugsnag-js

View on GitHub
packages/electron-test-helpers/src/Screen.ts

Summary

Maintainability
A
30 mins
Test Coverage
// https://www.electronjs.org/docs/api/screen

import { Display, makeDisplay } from './Display'

type ScreenEvent
  = 'display-added'
  | 'display-removed'
  | 'display-metrics-changed'

class Screen {
  private readonly callbacks: { [event in ScreenEvent]: Function[] } = {
    'display-added': [],
    'display-removed': [],
    'display-metrics-changed': []
  }

  private readonly primaryDisplay: Display

  constructor ({ primaryDisplay = makeDisplay() } = {}) {
    this.primaryDisplay = primaryDisplay
  }

  getPrimaryDisplay (): Display {
    return this.primaryDisplay
  }

  on (event: ScreenEvent, callback: Function): void {
    this.callbacks[event].push(callback)
  }

  _emit (event: ScreenEvent, ...args: any[]): void {
    this.callbacks[event].forEach(cb => { cb(null, ...args) })
  }
}

export function makeScreen (...args: any[]) {
  return new Screen(...args)
}