'use strict'; const { nativeImage, deprecate } = require('electron'); const ipcRendererUtils = require('@electron/internal/renderer/ipc-renderer-internal-utils'); // |options.types| can't be empty and must be an array function isValid(options) { const types = options ? options.types : undefined; return Array.isArray(types); } function mapSources(sources) { return sources.map(source => ({ id: source.id, name: source.name, thumbnail: nativeImage.createFromDataURL(source.thumbnail), display_id: source.display_id, appIcon: source.appIcon ? nativeImage.createFromDataURL(source.appIcon) : null })); } const getSources = (options) => { return new Promise((resolve, reject) => { if (!isValid(options)) throw new Error('Invalid options'); const captureWindow = options.types.includes('window'); const captureScreen = options.types.includes('screen'); if (options.thumbnailSize == null) { options.thumbnailSize = { width: 150, height: 150 }; } if (options.fetchWindowIcons == null) { options.fetchWindowIcons = false; } ipcRendererUtils.invoke('ELECTRON_BROWSER_DESKTOP_CAPTURER_GET_SOURCES', captureWindow, captureScreen, options.thumbnailSize, options.fetchWindowIcons) .then(sources => resolve(mapSources(sources)), reject); }); }; exports.getSources = deprecate.promisify(getSources);