mirror of
https://github.com/Eugeny/tabby
synced 2025-01-07 10:49:10 +00:00
82 lines
2.8 KiB
TypeScript
82 lines
2.8 KiB
TypeScript
import 'zone.js'
|
|
import 'core-js/proposals/reflect-metadata'
|
|
import 'rxjs'
|
|
|
|
import './global.scss'
|
|
import './toastr.scss'
|
|
|
|
// Importing before @angular/*
|
|
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'
|
|
|
|
// Always land on the start view
|
|
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: BootstrapData, plugins: PluginInfo[], safeMode = false): Promise<NgModuleRef<any>> {
|
|
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}%` // eslint-disable-line
|
|
})
|
|
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: 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')
|