39 lines
		
	
	
	
		
			1.3 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			1.3 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { ipcRendererInternal } from '@electron/internal/renderer/ipc-renderer-internal';
 | 
						|
import { deserialize } from '@electron/internal/common/type-utils';
 | 
						|
 | 
						|
const { hasSwitch } = process.electronBinding('command_line');
 | 
						|
 | 
						|
// |options.types| can't be empty and must be an array
 | 
						|
function isValid (options: Electron.SourcesOptions) {
 | 
						|
  const types = options ? options.types : undefined;
 | 
						|
  return Array.isArray(types);
 | 
						|
}
 | 
						|
 | 
						|
const enableStacks = hasSwitch('enable-api-filtering-logging');
 | 
						|
 | 
						|
function getCurrentStack () {
 | 
						|
  const target = {};
 | 
						|
  if (enableStacks) {
 | 
						|
    Error.captureStackTrace(target, getCurrentStack);
 | 
						|
  }
 | 
						|
  return (target as any).stack;
 | 
						|
}
 | 
						|
 | 
						|
export async function getSources (options: Electron.SourcesOptions) {
 | 
						|
  if (!isValid(options)) throw new Error('Invalid options');
 | 
						|
 | 
						|
  const captureWindow = options.types.includes('window');
 | 
						|
  const captureScreen = options.types.includes('screen');
 | 
						|
 | 
						|
  const { thumbnailSize = { width: 150, height: 150 } } = options;
 | 
						|
  const { fetchWindowIcons = false } = options;
 | 
						|
 | 
						|
  const sources = await ipcRendererInternal.invoke<ElectronInternal.GetSourcesResult[]>('ELECTRON_BROWSER_DESKTOP_CAPTURER_GET_SOURCES', {
 | 
						|
    captureWindow,
 | 
						|
    captureScreen,
 | 
						|
    thumbnailSize,
 | 
						|
    fetchWindowIcons
 | 
						|
  } as ElectronInternal.GetSourcesOptions, getCurrentStack());
 | 
						|
 | 
						|
  return deserialize(sources);
 | 
						|
}
 |