mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Improve how extension-api is exposed/loaded (#1055)
Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
1 parent
aa864fc199
commit
4f98a01a8b
17 files changed
+3552
-107
No files matched your search
@@ -2,7 +2,6 @@
|
||||
import path from "path";
|
||||
import packageInfo from "../../package.json"
|
||||
import { defineGlobal } from "./utils/defineGlobal";
|
||||
import { addAlias } from "module-alias";
|
||||
|
||||
export const isMac = process.platform === "darwin"
|
||||
export const isWindows = process.platform === "win32"
|
||||
@@ -37,15 +36,6 @@ defineGlobal("__static", {
|
||||
}
|
||||
})
|
||||
|
||||
// Special dynamic module aliases
|
||||
if (isProduction && process.resourcesPath) {
|
||||
addAlias("@lens/extensions", path.join(process.resourcesPath, "static", `build/${extensionsLibName}.js`))
|
||||
addAlias("@lens/ui-extensions", path.join(process.resourcesPath, "static", `build/${extensionsRendererLibName}.js`))
|
||||
} else {
|
||||
addAlias("@lens/extensions", path.join(contextDir, "static", `build/${extensionsLibName}.js`))
|
||||
addAlias("@lens/ui-extensions", path.join(contextDir, "static", `build/${extensionsRendererLibName}.js`))
|
||||
}
|
||||
|
||||
// Apis
|
||||
export const apiPrefix = "/api" // local router apis
|
||||
export const apiKubePrefix = "/api-kube" // k8s cluster apis
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,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
|
||||
}
|
||||
|
||||
@@ -17,10 +17,17 @@ import { clusterStore } from "../common/cluster-store"
|
||||
import { userStore } from "../common/user-store";
|
||||
import { workspaceStore } from "../common/workspace-store";
|
||||
import { tracker } from "../common/tracker";
|
||||
import * as LensExtensions from "../extensions/extension-api";
|
||||
import { extensionManager } from "../extensions/extension-manager";
|
||||
import { extensionLoader } from "../extensions/extension-loader";
|
||||
import { getLensRuntime } from "../extensions/lens-runtime";
|
||||
import logger from "./logger"
|
||||
import * as Mobx from "mobx"
|
||||
|
||||
export {
|
||||
LensExtensions,
|
||||
Mobx
|
||||
}
|
||||
|
||||
const workingDir = path.join(app.getPath("appData"), appName);
|
||||
app.setName(appName);
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import "./components/app.scss"
|
||||
import React from "react";
|
||||
import * as Mobx from "mobx"
|
||||
import * as LensExtensions from "../extensions/extension-renderer-api"
|
||||
import { render, unmountComponentAtNode } from "react-dom";
|
||||
import { isMac } from "../common/vars";
|
||||
import { userStore } from "../common/user-store";
|
||||
@@ -14,6 +16,12 @@ type AppComponent = React.ComponentType & {
|
||||
init?(): void;
|
||||
}
|
||||
|
||||
export {
|
||||
React,
|
||||
Mobx,
|
||||
LensExtensions
|
||||
}
|
||||
|
||||
export async function bootstrap(App: AppComponent) {
|
||||
const rootElem = document.getElementById("app")
|
||||
rootElem.classList.toggle("is-mac", isMac);
|
||||
|
||||
Reference in new issue
Block a user