Improve how extension-api is exposed/loaded (#1055)

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
Jari Kolehmainen authored and GitHub committed 2020-10-09 14:12:40 +03:00
1 parent aa864fc199
commit 4f98a01a8b
17 files changed
+3552 -107

No files matched your search

+12 -24
View File
@@ -18,16 +18,6 @@ export function extensionPackagesRoot() {
return path.join((app || remote.app).getPath("userData"))
}
export function withExtensionPackagesRoot(callback: Function) {
const cwd = process.cwd()
try {
process.chdir(extensionPackagesRoot())
return callback()
} finally {
process.chdir(cwd)
}
}
export class ExtensionLoader {
@observable extensions = observable.map<ExtensionId, InstalledExtension>([], { deep: false });
@observable instances = observable.map<ExtensionId, LensExtension>([], { deep: false })
@@ -89,21 +79,19 @@ export class ExtensionLoader {
protected requireExtension(extension: InstalledExtension) {
let extEntrypoint = ""
return withExtensionPackagesRoot(() => {
try {
if (ipcRenderer && extension.manifest.renderer) {
extEntrypoint = path.resolve(path.join(path.dirname(extension.manifestPath), extension.manifest.renderer))
} else if (extension.manifest.main) {
extEntrypoint = path.resolve(path.join(path.dirname(extension.manifestPath), extension.manifest.main))
}
if (extEntrypoint !== "") {
return __non_webpack_require__(extEntrypoint)
}
} catch (err) {
console.error(`[EXTENSION-LOADER]: can't load extension main at ${extEntrypoint}: ${err}`, { extension });
console.trace(err)
try {
if (ipcRenderer && extension.manifest.renderer) {
extEntrypoint = path.resolve(path.join(path.dirname(extension.manifestPath), extension.manifest.renderer))
} else if (extension.manifest.main) {
extEntrypoint = path.resolve(path.join(path.dirname(extension.manifestPath), extension.manifest.main))
}
})
if (extEntrypoint !== "") {
return __non_webpack_require__(extEntrypoint)
}
} catch (err) {
console.error(`[EXTENSION-LOADER]: can't load extension main at ${extEntrypoint}: ${err}`, { extension });
console.trace(err)
}
}
getById(id: ExtensionId): InstalledExtension {
+2 -3
View File
@@ -1,13 +1,12 @@
// Lens-extensions api developer's kit
export type { LensExtensionRuntimeEnv } from "./lens-renderer-runtime"
export type { PageStore } from "./page-store"
// APIs
export * from "./lens-extension"
export * from "./lens-renderer-extension"
export { DynamicPageType } from "./page-store"
export { DynamicPageType, PageStore } from "./page-store"
// TODO: add more common re-usable UI components + refactor interfaces (Props -> ComponentProps)
export { default as React } from "react"
export * from "../renderer/components/icon"
export * from "../renderer/components/tooltip"
export * from "../renderer/components/button"
+2 -1
View File
@@ -2,7 +2,8 @@ import type { PageStore } from "./extension-renderer-api"
import type { PageRegistration } from "./page-store"
import { LensExtension } from "./lens-extension"
export abstract class LensRendererExtension extends LensExtension {
export class LensRendererExtension extends LensExtension {
registerPages(pageStore: PageStore) {
return
}