import 'zone.js' ; import 'core-js/proposals/reflect-metadata' ; import 'rxjs' ; import './global.scss' ; import './toastr.scss' ; import { findPlugins , initModuleLookup , loadPlugins } from './plugins' ; import { enableProdMode , NgModuleRef , ApplicationRef } from '@angular/core' ; import { enableDebugTools } from '@angular/platform-browser' ; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic' ; import { ipcRenderer } from 'electron' ; import { getRootModule } from './app.module' ; import { BootstrapData , BOOTSTRAP_DATA , PluginInfo } from '../../tabby-core/src/api/mainProcess' ; location . hash = '' ; ( process as any ) . enablePromiseAPI = true ; if ( process . platform === 'win32' && ! ( 'HOME' in process . env ) ) { process . env . HOME = `${ process . env . HOMEDRIVE }${ process . env . HOMEPATH }` ; } if ( process . env . TABBY_DEV && ! process . env . TABBY_FORCE_ANGULAR_PROD ) { console . warn ( 'Running in debug mode' ) ; } else { enableProdMode ( ) ; } async function bootstrap ( bootstrapData , plugins , safeMode = false ) { if ( safeMode ) { plugins = plugins . filter ( x => x . isBuiltin ) ; } const pluginModules = await loadPlugins ( plugins , ( current , total ) => { ( document . querySelector ( '.progress .bar' ) as HTMLElement ) . style . width = `${ 100 * current / total }%` ; } ) ; const module = getRootModule ( pluginModules ) ; window [ 'rootModule' ] = module ; const moduleRef = await platformBrowserDynamic ( [ { provide : BOOTSTRAP_DATA , useValue : bootstrapData } , ] ) . bootstrapModule ( module ) ; if ( process . env . TABBY_DEV ) { const applicationRef = moduleRef . injector . get ( ApplicationRef ) ; const componentRef = applicationRef . components [ 0 ] ; enableDebugTools ( componentRef ) ; } return moduleRef ; } ipcRenderer . once ( 'start' , async ( _$event , bootstrapData ) => { console . log ( 'Window bootstrap data:' , bootstrapData ) ; initModuleLookup ( bootstrapData . userPluginsPath ) ; let plugins = await findPlugins ( ) ; bootstrapData . installedPlugins = plugins ; if ( bootstrapData . config . pluginBlacklist ) { plugins = plugins . filter ( x => ! bootstrapData . config . pluginBlacklist . includes ( x . name ) ) ; } plugins = plugins . filter ( x => x . name !== 'web' ) ; console . log ( 'Starting with plugins:' , plugins ) ; try { await bootstrap ( bootstrapData , plugins ) ; } catch ( error ) { console . error ( 'Angular bootstrapping error:' , error ) ; console . warn ( 'Trying safe mode' ) ; window [ 'safeModeReason' ] = error ; try { await bootstrap ( bootstrapData , plugins , true ) ; } catch ( error2 ) { console . error ( 'Bootstrap failed:' , error2 ) ; } } } ) ; ipcRenderer . send ( 'ready' ) ;