1
1
mirror of https://github.com/Eugeny/tabby.git synced 2024-12-23 18:44:20 +03:00
tabby/web/entry.preload.ts
2021-06-29 23:57:04 +02:00

85 lines
2.2 KiB
TypeScript

import 'source-sans-pro/source-sans-pro.css'
import 'source-code-pro/source-code-pro.css'
import '@fortawesome/fontawesome-free/css/solid.css'
import '@fortawesome/fontawesome-free/css/brands.css'
import '@fortawesome/fontawesome-free/css/regular.css'
import '@fortawesome/fontawesome-free/css/fontawesome.css'
import 'ngx-toastr/toastr.css'
import '../app/src/preload.scss'
// Required before other imports
import './polyfills.buffer'
const mocks = {}
const modules = {}
const originalRequire = window['require']
const customRequire = path => {
if (mocks[path]) {
console.log(':: mock', path)
return mocks[path]
}
if (modules[path]) {
return modules[path]
}
return originalRequire(path)
}
customRequire['resolve'] = (() => null) as any
customRequire['main'] = {
paths: [],
}
async function webRequire (url) {
console.log(`Loading ${url}`)
const e = document.createElement('script')
window['module'] = { exports: {} } as any
window['exports'] = window['module'].exports
await new Promise(resolve => {
e.onload = resolve
e.src = url
document.querySelector('head').appendChild(e)
})
return window['module'].exports
}
const Tabby = {
registerMock: (name, mod) => {
mocks[name] = mod
},
registerModule: (name, mod) => {
modules[name] = mod
},
loadPlugin: async (url) => {
const pkg = await (await fetch(url + '/package.json')).json()
url += '/' + pkg.main
const module = await webRequire(url)
Tabby.registerModule(`resources/builtin-plugins/${pkg.name}`, module)
Tabby.registerModule(pkg.name, module)
return module
},
bootstrap: (...args) => window['bootstrapTabby'](...args),
webRequire,
}
Object.assign(window, {
require: customRequire,
module: {
paths: [],
},
Tabby,
process: {
env: { },
argv: ['tabby'],
platform: 'darwin',
on: () => null,
stdout: {},
stderr: {},
resourcesPath: 'resources',
version: '14.0.0',
nextTick: (f, ...args) => setTimeout(() => f(...args)),
cwd: () => '/',
},
global: window,
})