mirror of
https://github.com/Eugeny/tabby.git
synced 2025-06-08 05:20:01 +00:00
expose more plugin loader apis
This commit is contained in:
parent
47dba5b52c
commit
3db98aa421
@ -30,7 +30,7 @@ customRequire['main'] = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function webRequire (url) {
|
async function webRequire (url) {
|
||||||
console.log(`Loading ${url}`)
|
console.log(`>> Loading ${url}`)
|
||||||
const e = document.createElement('script')
|
const e = document.createElement('script')
|
||||||
window['module'] = { exports: {} } as any
|
window['module'] = { exports: {} } as any
|
||||||
window['exports'] = window['module'].exports
|
window['exports'] = window['module'].exports
|
||||||
@ -42,6 +42,11 @@ async function webRequire (url) {
|
|||||||
return window['module'].exports
|
return window['module'].exports
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function prefetchURL (url) {
|
||||||
|
console.log(`:: Prefetching ${url}`)
|
||||||
|
await (await fetch(url)).text()
|
||||||
|
}
|
||||||
|
|
||||||
const Tabby = {
|
const Tabby = {
|
||||||
registerMock: (name, mod) => {
|
registerMock: (name, mod) => {
|
||||||
mocks[name] = mod
|
mocks[name] = mod
|
||||||
@ -49,14 +54,32 @@ const Tabby = {
|
|||||||
registerModule: (name, mod) => {
|
registerModule: (name, mod) => {
|
||||||
modules[name] = mod
|
modules[name] = mod
|
||||||
},
|
},
|
||||||
loadPlugin: async (url) => {
|
resolvePluginInfo: async (url): Promise<any> => {
|
||||||
const pkg = await (await fetch(url + '/package.json')).json()
|
const pkg = await (await fetch(url + '/package.json')).json()
|
||||||
url += '/' + pkg.main
|
url += '/' + pkg.main
|
||||||
const module = await webRequire(url)
|
return { ...pkg, url }
|
||||||
Tabby.registerModule(`resources/builtin-plugins/${pkg.name}`, module)
|
},
|
||||||
Tabby.registerModule(pkg.name, module)
|
registerPluginModule: (packageName, module) => {
|
||||||
|
Tabby.registerModule(`resources/builtin-plugins/${packageName}`, module)
|
||||||
|
Tabby.registerModule(packageName, module)
|
||||||
|
},
|
||||||
|
loadPlugin: async (url) => {
|
||||||
|
const info = await Tabby.resolvePluginInfo(url)
|
||||||
|
const module = await webRequire(info.url)
|
||||||
|
Tabby.registerPluginModule(info.name, module)
|
||||||
return module
|
return module
|
||||||
},
|
},
|
||||||
|
loadPlugins: async (urls) => {
|
||||||
|
const infos: any[] = await Promise.all(urls.map(Tabby.resolvePluginInfo))
|
||||||
|
await Promise.all(infos.map(x => prefetchURL(x.url)))
|
||||||
|
const pluginModules = []
|
||||||
|
for (const info of infos) {
|
||||||
|
const module = await webRequire(info.url)
|
||||||
|
Tabby.registerPluginModule(info.name, module)
|
||||||
|
pluginModules.push(module)
|
||||||
|
}
|
||||||
|
return pluginModules
|
||||||
|
},
|
||||||
bootstrap: (...args) => window['bootstrapTabby'](...args),
|
bootstrap: (...args) => window['bootstrapTabby'](...args),
|
||||||
webRequire,
|
webRequire,
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user