mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix bundled extensions not being loaded (#7359)
* Fix bundled extensions not being loaded - Also show that this fixes it by added an example bundled extension to 'open-lens' Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix build Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add explanatory comment for inline require Signed-off-by: Sebastian Malton <sebastian@malton.name> --------- Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
ae9a8c3c41
commit
2c3c88be04
162
package-lock.json
generated
162
package-lock.json
generated
@ -4714,6 +4714,14 @@
|
|||||||
"resolved": "packages/infrastructure/jest",
|
"resolved": "packages/infrastructure/jest",
|
||||||
"link": true
|
"link": true
|
||||||
},
|
},
|
||||||
|
"node_modules/@k8slens/legacy-extension-example": {
|
||||||
|
"resolved": "packages/legacy-extension-example",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
|
"node_modules/@k8slens/legacy-extensions": {
|
||||||
|
"resolved": "packages/technical-features/application/legacy-extensions",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
"node_modules/@k8slens/node-fetch": {
|
"node_modules/@k8slens/node-fetch": {
|
||||||
"resolved": "packages/node-fetch",
|
"resolved": "packages/node-fetch",
|
||||||
"link": true
|
"link": true
|
||||||
@ -34589,6 +34597,7 @@
|
|||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@k8slens/application": "^6.5.0-alpha.0",
|
"@k8slens/application": "^6.5.0-alpha.0",
|
||||||
"@k8slens/application-for-electron-main": "^6.5.0-alpha.0",
|
"@k8slens/application-for-electron-main": "^6.5.0-alpha.0",
|
||||||
|
"@k8slens/legacy-extensions": "^1.0.0-alpha.0",
|
||||||
"@k8slens/run-many": "^1.0.0-alpha.1",
|
"@k8slens/run-many": "^1.0.0-alpha.1",
|
||||||
"@k8slens/test-utils": "^1.0.0-alpha.1",
|
"@k8slens/test-utils": "^1.0.0-alpha.1",
|
||||||
"@k8slens/utilities": "^1.0.0-alpha.1",
|
"@k8slens/utilities": "^1.0.0-alpha.1",
|
||||||
@ -36366,6 +36375,146 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"packages/legacy-extension-example": {
|
||||||
|
"name": "@k8slens/legacy-extension-example",
|
||||||
|
"version": "1.0.0-alpha.0",
|
||||||
|
"license": "MIT",
|
||||||
|
"devDependencies": {
|
||||||
|
"@k8slens/extensions": "^6.5.0-alpha.2",
|
||||||
|
"@types/node": "^16.18.16",
|
||||||
|
"typescript": "^4.9.5",
|
||||||
|
"webpack": "^5.76.1",
|
||||||
|
"webpack-cli": "^5.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"lens": "6.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"packages/legacy-extension-example/node_modules/@types/node": {
|
||||||
|
"version": "16.18.16",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.16.tgz",
|
||||||
|
"integrity": "sha512-ZOzvDRWp8dCVBmgnkIqYCArgdFOO9YzocZp8Ra25N/RStKiWvMOXHMz+GjSeVNe5TstaTmTWPucGJkDw0XXJWA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"packages/legacy-extension-example/node_modules/@webpack-cli/configtest": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-njsdJXJSiS2iNbQVS0eT8A/KPnmyH4pv1APj2K0d1wrZcBLw+yppxOy4CGqa0OxDJkzfL/XELDhD8rocnIwB5A==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.15.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"webpack": "5.x.x",
|
||||||
|
"webpack-cli": "5.x.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"packages/legacy-extension-example/node_modules/@webpack-cli/info": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-fE1UEWTwsAxRhrJNikE7v4EotYflkEhBL7EbajfkPlf6E37/2QshOy/D48Mw8G5XMFlQtS6YV42vtbG9zBpIQA==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.15.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"webpack": "5.x.x",
|
||||||
|
"webpack-cli": "5.x.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"packages/legacy-extension-example/node_modules/@webpack-cli/serve": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-0G7tNyS+yW8TdgHwZKlDWYXFA6OJQnoLCQvYKkQP0Q2X205PSQ6RNUj0M+1OB/9gRQaUZ/ccYfaxd0nhaWKfjw==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.15.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"webpack": "5.x.x",
|
||||||
|
"webpack-cli": "5.x.x"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"webpack-dev-server": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"packages/legacy-extension-example/node_modules/commander": {
|
||||||
|
"version": "9.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
|
||||||
|
"integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.20.0 || >=14"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"packages/legacy-extension-example/node_modules/interpret": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
|
||||||
|
"dev": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.13.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"packages/legacy-extension-example/node_modules/rechoir": {
|
||||||
|
"version": "0.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
|
||||||
|
"integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"resolve": "^1.20.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10.13.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"packages/legacy-extension-example/node_modules/webpack-cli": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-S3KVAyfwUqr0Mo/ur3NzIp6jnerNpo7GUO6so51mxLi1spqsA17YcMXy0WOIJtBSnj748lthxC6XLbNKh/ZC+A==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@discoveryjs/json-ext": "^0.5.0",
|
||||||
|
"@webpack-cli/configtest": "^2.0.1",
|
||||||
|
"@webpack-cli/info": "^2.0.1",
|
||||||
|
"@webpack-cli/serve": "^2.0.1",
|
||||||
|
"colorette": "^2.0.14",
|
||||||
|
"commander": "^9.4.1",
|
||||||
|
"cross-spawn": "^7.0.3",
|
||||||
|
"envinfo": "^7.7.3",
|
||||||
|
"fastest-levenshtein": "^1.0.12",
|
||||||
|
"import-local": "^3.0.2",
|
||||||
|
"interpret": "^3.1.1",
|
||||||
|
"rechoir": "^0.8.0",
|
||||||
|
"webpack-merge": "^5.7.3"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"webpack-cli": "bin/cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.15.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/webpack"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"webpack": "5.x.x"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@webpack-cli/generators": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"webpack-bundle-analyzer": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"webpack-dev-server": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"packages/node-fetch": {
|
"packages/node-fetch": {
|
||||||
"name": "@k8slens/node-fetch",
|
"name": "@k8slens/node-fetch",
|
||||||
"version": "6.5.0-alpha.1",
|
"version": "6.5.0-alpha.1",
|
||||||
@ -36513,6 +36662,8 @@
|
|||||||
"@k8slens/ensure-binaries": "^6.5.0-alpha.1",
|
"@k8slens/ensure-binaries": "^6.5.0-alpha.1",
|
||||||
"@k8slens/feature-core": "^6.5.0-alpha.1",
|
"@k8slens/feature-core": "^6.5.0-alpha.1",
|
||||||
"@k8slens/generate-tray-icons": "^6.5.0-alpha.1",
|
"@k8slens/generate-tray-icons": "^6.5.0-alpha.1",
|
||||||
|
"@k8slens/legacy-extension-example": "^1.0.0-alpha.0",
|
||||||
|
"@k8slens/legacy-extensions": "^1.0.0-alpha.0",
|
||||||
"@k8slens/run-many": "^1.0.0-alpha.1",
|
"@k8slens/run-many": "^1.0.0-alpha.1",
|
||||||
"@k8slens/test-utils": "^1.0.0-alpha.1",
|
"@k8slens/test-utils": "^1.0.0-alpha.1",
|
||||||
"@k8slens/utilities": "^1.0.0-alpha.1",
|
"@k8slens/utilities": "^1.0.0-alpha.1",
|
||||||
@ -37055,6 +37206,17 @@
|
|||||||
"electron": "^19.1.9"
|
"electron": "^19.1.9"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"packages/technical-features/application/legacy-extensions": {
|
||||||
|
"name": "@k8slens/legacy-extensions",
|
||||||
|
"version": "1.0.0-alpha.0",
|
||||||
|
"license": "MIT",
|
||||||
|
"devDependencies": {
|
||||||
|
"@k8slens/eslint-config": "6.5.0-alpha.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@ogre-tools/injectable": "^15.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"packages/technical-features/feature-core": {
|
"packages/technical-features/feature-core": {
|
||||||
"name": "@k8slens/feature-core",
|
"name": "@k8slens/feature-core",
|
||||||
"version": "6.5.0-alpha.1",
|
"version": "6.5.0-alpha.1",
|
||||||
|
|||||||
@ -20,7 +20,6 @@
|
|||||||
"exports": {
|
"exports": {
|
||||||
"./main": "./static/build/library/main.js",
|
"./main": "./static/build/library/main.js",
|
||||||
"./renderer": "./static/build/library/renderer.js",
|
"./renderer": "./static/build/library/renderer.js",
|
||||||
"./common": "./static/build/library/common.js",
|
|
||||||
"./styles": "./static/build/library/renderer.css"
|
"./styles": "./static/build/library/renderer.css"
|
||||||
},
|
},
|
||||||
"typesVersions": {
|
"typesVersions": {
|
||||||
@ -30,9 +29,6 @@
|
|||||||
],
|
],
|
||||||
"renderer": [
|
"renderer": [
|
||||||
"./static/build/library/src/renderer/library.d.ts"
|
"./static/build/library/src/renderer/library.d.ts"
|
||||||
],
|
|
||||||
"common": [
|
|
||||||
"./static/build/library/src/common/library.d.ts"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -331,6 +327,7 @@
|
|||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@k8slens/application": "^6.5.0-alpha.0",
|
"@k8slens/application": "^6.5.0-alpha.0",
|
||||||
"@k8slens/application-for-electron-main": "^6.5.0-alpha.0",
|
"@k8slens/application-for-electron-main": "^6.5.0-alpha.0",
|
||||||
|
"@k8slens/legacy-extensions": "^1.0.0-alpha.0",
|
||||||
"@k8slens/run-many": "^1.0.0-alpha.1",
|
"@k8slens/run-many": "^1.0.0-alpha.1",
|
||||||
"@k8slens/test-utils": "^1.0.0-alpha.1",
|
"@k8slens/test-utils": "^1.0.0-alpha.1",
|
||||||
"@k8slens/utilities": "^1.0.0-alpha.1",
|
"@k8slens/utilities": "^1.0.0-alpha.1",
|
||||||
|
|||||||
@ -1,7 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// @experimental
|
|
||||||
export { bundledExtensionInjectionToken } from "../extensions/extension-discovery/bundled-extension-token";
|
|
||||||
@ -3,8 +3,8 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import type { LensExtensionManifest } from "@k8slens/legacy-extensions";
|
||||||
import { isCompatibleExtension } from "../extension-discovery/is-compatible-extension/is-compatible-extension";
|
import { isCompatibleExtension } from "../extension-discovery/is-compatible-extension/is-compatible-extension";
|
||||||
import type { LensExtensionManifest } from "../lens-extension";
|
|
||||||
|
|
||||||
describe("Extension/App versions compatibility checks", () => {
|
describe("Extension/App versions compatibility checks", () => {
|
||||||
it("is compatible with exact version matching", () => {
|
it("is compatible with exact version matching", () => {
|
||||||
|
|||||||
@ -16,8 +16,8 @@ export * as Types from "./types";
|
|||||||
export * as Proxy from "./proxy";
|
export * as Proxy from "./proxy";
|
||||||
|
|
||||||
export type { Logger } from "../../common/logger";
|
export type { Logger } from "../../common/logger";
|
||||||
export type { LensExtension, LensExtensionManifest } from "../lens-extension";
|
export type { LensExtension } from "../lens-extension";
|
||||||
export type { InstalledExtension } from "../extension-discovery/extension-discovery";
|
|
||||||
export type { PackageJson } from "type-fest";
|
export type { PackageJson } from "type-fest";
|
||||||
|
export type { LensExtensionManifest, InstalledExtension } from "@k8slens/legacy-extensions";
|
||||||
|
|
||||||
export const logger = asLegacyGlobalForExtensionApi(loggerInjectable);
|
export const logger = asLegacyGlobalForExtensionApi(loggerInjectable);
|
||||||
|
|||||||
@ -1,17 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { getInjectionToken } from "@ogre-tools/injectable";
|
|
||||||
import type { LensExtensionConstructor, LensExtensionManifest } from "../lens-extension";
|
|
||||||
|
|
||||||
export interface BundledExtension {
|
|
||||||
readonly manifest: LensExtensionManifest;
|
|
||||||
main: () => LensExtensionConstructor | null;
|
|
||||||
renderer: () => LensExtensionConstructor | null;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const bundledExtensionInjectionToken = getInjectionToken<BundledExtension>({
|
|
||||||
id: "bundled-extension-path",
|
|
||||||
});
|
|
||||||
@ -11,7 +11,7 @@ import { toJS } from "../../common/utils";
|
|||||||
import { isErrnoException } from "@k8slens/utilities";
|
import { isErrnoException } from "@k8slens/utilities";
|
||||||
import type { ExtensionsStore } from "../extensions-store/extensions-store";
|
import type { ExtensionsStore } from "../extensions-store/extensions-store";
|
||||||
import type { ExtensionLoader } from "../extension-loader";
|
import type { ExtensionLoader } from "../extension-loader";
|
||||||
import type { LensExtensionId, LensExtensionManifest } from "../lens-extension";
|
import type { InstalledExtension, LensExtensionId, LensExtensionManifest } from "@k8slens/legacy-extensions";
|
||||||
import type { ExtensionInstallationStateStore } from "../extension-installation-state-store/extension-installation-state-store";
|
import type { ExtensionInstallationStateStore } from "../extension-installation-state-store/extension-installation-state-store";
|
||||||
import { extensionDiscoveryStateChannel } from "../../common/ipc/extension-handling";
|
import { extensionDiscoveryStateChannel } from "../../common/ipc/extension-handling";
|
||||||
import { requestInitialExtensionDiscovery } from "../../renderer/ipc";
|
import { requestInitialExtensionDiscovery } from "../../renderer/ipc";
|
||||||
@ -59,22 +59,6 @@ interface Dependencies {
|
|||||||
getRelativePath: GetRelativePath;
|
getRelativePath: GetRelativePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface InstalledExtension {
|
|
||||||
id: LensExtensionId;
|
|
||||||
|
|
||||||
readonly manifest: LensExtensionManifest;
|
|
||||||
|
|
||||||
// Absolute path to the non-symlinked source folder,
|
|
||||||
// e.g. "/Users/user/.k8slens/extensions/helloworld"
|
|
||||||
readonly absolutePath: string;
|
|
||||||
|
|
||||||
// Absolute to the symlinked package.json file
|
|
||||||
readonly manifestPath: string;
|
|
||||||
readonly isBundled: boolean; // defined in project root's package.json
|
|
||||||
readonly isCompatible: boolean;
|
|
||||||
isEnabled: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
const logModule = "[EXTENSION-DISCOVERY]";
|
const logModule = "[EXTENSION-DISCOVERY]";
|
||||||
|
|
||||||
export const manifestFilename = "package.json";
|
export const manifestFilename = "package.json";
|
||||||
|
|||||||
@ -2,8 +2,8 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
import type { LensExtensionManifest } from "@k8slens/legacy-extensions";
|
||||||
import semver from "semver";
|
import semver from "semver";
|
||||||
import type { LensExtensionManifest } from "../../lens-extension";
|
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
extensionApiVersion: string;
|
extensionApiVersion: string;
|
||||||
|
|||||||
@ -3,9 +3,9 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import type { LensExtensionConstructor, InstalledExtension } from "@k8slens/legacy-extensions";
|
||||||
import { getInjectionToken } from "@ogre-tools/injectable";
|
import { getInjectionToken } from "@ogre-tools/injectable";
|
||||||
import type { InstalledExtension } from "../extension-discovery/extension-discovery";
|
import type { LensExtension } from "../lens-extension";
|
||||||
import type { LensExtension, LensExtensionConstructor } from "../lens-extension";
|
|
||||||
|
|
||||||
export type CreateExtensionInstance = (ExtensionClass: LensExtensionConstructor, extension: InstalledExtension) => LensExtension;
|
export type CreateExtensionInstance = (ExtensionClass: LensExtensionConstructor, extension: InstalledExtension) => LensExtension;
|
||||||
|
|
||||||
|
|||||||
@ -2,9 +2,10 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
import type { LensExtensionId } from "@k8slens/legacy-extensions";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { observable } from "mobx";
|
import { observable } from "mobx";
|
||||||
import type { LensExtensionId, LensExtension } from "../lens-extension";
|
import type { LensExtension } from "../lens-extension";
|
||||||
|
|
||||||
const extensionInstancesInjectable = getInjectable({
|
const extensionInstancesInjectable = getInjectable({
|
||||||
id: "extension-instances",
|
id: "extension-instances",
|
||||||
|
|||||||
@ -12,7 +12,7 @@ import extensionInjectable from "./extension/extension.injectable";
|
|||||||
import loggerInjectable from "../../common/logger.injectable";
|
import loggerInjectable from "../../common/logger.injectable";
|
||||||
import joinPathsInjectable from "../../common/path/join-paths.injectable";
|
import joinPathsInjectable from "../../common/path/join-paths.injectable";
|
||||||
import getDirnameOfPathInjectable from "../../common/path/get-dirname.injectable";
|
import getDirnameOfPathInjectable from "../../common/path/get-dirname.injectable";
|
||||||
import { bundledExtensionInjectionToken } from "../extension-discovery/bundled-extension-token";
|
import { bundledExtensionInjectionToken } from "@k8slens/legacy-extensions";
|
||||||
import { extensionEntryPointNameInjectionToken } from "./entry-point-name";
|
import { extensionEntryPointNameInjectionToken } from "./entry-point-name";
|
||||||
|
|
||||||
const extensionLoaderInjectable = getInjectable({
|
const extensionLoaderInjectable = getInjectable({
|
||||||
|
|||||||
@ -9,8 +9,7 @@ import type { ObservableMap } from "mobx";
|
|||||||
import { action, computed, makeObservable, toJS, observable, observe, reaction, when } from "mobx";
|
import { action, computed, makeObservable, toJS, observable, observe, reaction, when } from "mobx";
|
||||||
import { broadcastMessage, ipcMainOn, ipcRendererOn, ipcMainHandle } from "../../common/ipc";
|
import { broadcastMessage, ipcMainOn, ipcRendererOn, ipcMainHandle } from "../../common/ipc";
|
||||||
import { isDefined } from "@k8slens/utilities";
|
import { isDefined } from "@k8slens/utilities";
|
||||||
import type { InstalledExtension } from "../extension-discovery/extension-discovery";
|
import type { LensExtension } from "../lens-extension";
|
||||||
import type { LensExtension, LensExtensionConstructor, LensExtensionId } from "../lens-extension";
|
|
||||||
import type { LensExtensionState } from "../extensions-store/extensions-store";
|
import type { LensExtensionState } from "../extensions-store/extensions-store";
|
||||||
import { extensionLoaderFromMainChannel, extensionLoaderFromRendererChannel } from "../../common/ipc/extension-handling";
|
import { extensionLoaderFromMainChannel, extensionLoaderFromRendererChannel } from "../../common/ipc/extension-handling";
|
||||||
import { requestExtensionLoaderInitialState } from "../../renderer/ipc";
|
import { requestExtensionLoaderInitialState } from "../../renderer/ipc";
|
||||||
@ -21,7 +20,7 @@ import type { Extension } from "./extension/extension.injectable";
|
|||||||
import type { Logger } from "../../common/logger";
|
import type { Logger } from "../../common/logger";
|
||||||
import type { JoinPaths } from "../../common/path/join-paths.injectable";
|
import type { JoinPaths } from "../../common/path/join-paths.injectable";
|
||||||
import type { GetDirnameOfPath } from "../../common/path/get-dirname.injectable";
|
import type { GetDirnameOfPath } from "../../common/path/get-dirname.injectable";
|
||||||
import type { BundledExtension } from "../extension-discovery/bundled-extension-token";
|
import type { LensExtensionId, BundledExtension, InstalledExtension, LensExtensionConstructor } from "@k8slens/legacy-extensions";
|
||||||
|
|
||||||
const logModule = "[EXTENSIONS-LOADER]";
|
const logModule = "[EXTENSIONS-LOADER]";
|
||||||
|
|
||||||
|
|||||||
@ -3,11 +3,11 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import type { LensExtensionId } from "@k8slens/legacy-extensions";
|
||||||
import type { ObservableMap } from "mobx";
|
import type { ObservableMap } from "mobx";
|
||||||
import { action, makeObservable } from "mobx";
|
import { action, makeObservable } from "mobx";
|
||||||
import type { BaseStoreDependencies } from "../../../common/base-store/base-store";
|
import type { BaseStoreDependencies } from "../../../common/base-store/base-store";
|
||||||
import { BaseStore } from "../../../common/base-store/base-store";
|
import { BaseStore } from "../../../common/base-store/base-store";
|
||||||
import type { LensExtensionId } from "../../lens-extension";
|
|
||||||
import type { EnsureHashedDirectoryForExtension } from "./ensure-hashed-directory-for-extension.injectable";
|
import type { EnsureHashedDirectoryForExtension } from "./ensure-hashed-directory-for-extension.injectable";
|
||||||
|
|
||||||
interface FSProvisionModel {
|
interface FSProvisionModel {
|
||||||
|
|||||||
@ -2,9 +2,9 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
import type { LensExtensionId } from "@k8slens/legacy-extensions";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { observable } from "mobx";
|
import { observable } from "mobx";
|
||||||
import type { LensExtensionId } from "../../lens-extension";
|
|
||||||
|
|
||||||
export const registeredExtensionsInjectable = getInjectable({
|
export const registeredExtensionsInjectable = getInjectable({
|
||||||
id: "registered-extensions",
|
id: "registered-extensions",
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { LensExtensionId } from "../lens-extension";
|
import type { LensExtensionId } from "@k8slens/legacy-extensions";
|
||||||
import { action, computed, makeObservable, observable } from "mobx";
|
import { action, computed, makeObservable, observable } from "mobx";
|
||||||
import type { BaseStoreDependencies } from "../../common/base-store/base-store";
|
import type { BaseStoreDependencies } from "../../common/base-store/base-store";
|
||||||
import { BaseStore } from "../../common/base-store/base-store";
|
import { BaseStore } from "../../common/base-store/base-store";
|
||||||
|
|||||||
@ -3,35 +3,12 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { InstalledExtension } from "./extension-discovery/extension-discovery";
|
|
||||||
import { action, computed, makeObservable, observable } from "mobx";
|
import { action, computed, makeObservable, observable } from "mobx";
|
||||||
import type { PackageJson } from "type-fest";
|
|
||||||
import { disposer } from "@k8slens/utilities";
|
import { disposer } from "@k8slens/utilities";
|
||||||
import type { LensExtensionDependencies } from "./lens-extension-set-dependencies";
|
import type { LensExtensionDependencies } from "./lens-extension-set-dependencies";
|
||||||
import type { ProtocolHandlerRegistration } from "../common/protocol-handler/registration";
|
import type { ProtocolHandlerRegistration } from "../common/protocol-handler/registration";
|
||||||
|
import type { InstalledExtension, LegacyLensExtension, LensExtensionId, LensExtensionManifest } from "@k8slens/legacy-extensions";
|
||||||
|
|
||||||
export type LensExtensionId = string; // path to manifest (package.json)
|
|
||||||
export type LensExtensionConstructor = new (...args: ConstructorParameters<typeof LensExtension>) => LensExtension;
|
|
||||||
|
|
||||||
export interface LensExtensionManifest extends PackageJson {
|
|
||||||
name: string;
|
|
||||||
version: string;
|
|
||||||
main?: string; // path to %ext/dist/main.js
|
|
||||||
renderer?: string; // path to %ext/dist/renderer.js
|
|
||||||
/**
|
|
||||||
* Supported Lens version engine by extension could be defined in `manifest.engines.lens`
|
|
||||||
* Only MAJOR.MINOR version is taken in consideration.
|
|
||||||
*/
|
|
||||||
engines: {
|
|
||||||
lens: string; // "semver"-package format
|
|
||||||
npm?: string;
|
|
||||||
node?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Specify extension name used for persisting data.
|
|
||||||
// Useful if extension is renamed but the data should not be lost.
|
|
||||||
storeName?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export const lensExtensionDependencies = Symbol("lens-extension-dependencies");
|
export const lensExtensionDependencies = Symbol("lens-extension-dependencies");
|
||||||
export const Disposers = Symbol("disposers");
|
export const Disposers = Symbol("disposers");
|
||||||
@ -41,7 +18,7 @@ export class LensExtension<
|
|||||||
* @ignore
|
* @ignore
|
||||||
*/
|
*/
|
||||||
Dependencies extends LensExtensionDependencies = LensExtensionDependencies,
|
Dependencies extends LensExtensionDependencies = LensExtensionDependencies,
|
||||||
> {
|
> implements LegacyLensExtension {
|
||||||
readonly id: LensExtensionId;
|
readonly id: LensExtensionId;
|
||||||
readonly manifest: LensExtensionManifest;
|
readonly manifest: LensExtensionManifest;
|
||||||
readonly manifestPath: string;
|
readonly manifestPath: string;
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { applicationInformationToken } from "@k8slens/application";
|
import { applicationInformationToken } from "@k8slens/application";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { bundledExtensionInjectionToken } from "../../../../../../common/library";
|
import { bundledExtensionInjectionToken } from "@k8slens/legacy-extensions";
|
||||||
import { object } from "@k8slens/utilities";
|
import { object } from "@k8slens/utilities";
|
||||||
import buildSemanticVersionInjectable from "../../../../../../common/vars/build-semantic-version.injectable";
|
import buildSemanticVersionInjectable from "../../../../../../common/vars/build-semantic-version.injectable";
|
||||||
|
|
||||||
|
|||||||
@ -14,7 +14,6 @@ import lensProtocolRouterMainInjectable from "../lens-protocol-router-main/lens-
|
|||||||
import extensionsStoreInjectable from "../../../extensions/extensions-store/extensions-store.injectable";
|
import extensionsStoreInjectable from "../../../extensions/extensions-store/extensions-store.injectable";
|
||||||
import getConfigurationFileModelInjectable from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
|
import getConfigurationFileModelInjectable from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
|
||||||
import { LensExtension } from "../../../extensions/lens-extension";
|
import { LensExtension } from "../../../extensions/lens-extension";
|
||||||
import type { LensExtensionId } from "../../../extensions/lens-extension";
|
|
||||||
import type { ObservableMap } from "mobx";
|
import type { ObservableMap } from "mobx";
|
||||||
import extensionInstancesInjectable from "../../../extensions/extension-loader/extension-instances.injectable";
|
import extensionInstancesInjectable from "../../../extensions/extension-loader/extension-instances.injectable";
|
||||||
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
||||||
@ -23,6 +22,7 @@ import pathExistsSyncInjectable from "../../../common/fs/path-exists-sync.inject
|
|||||||
import pathExistsInjectable from "../../../common/fs/path-exists.injectable";
|
import pathExistsInjectable from "../../../common/fs/path-exists.injectable";
|
||||||
import readJsonSyncInjectable from "../../../common/fs/read-json-sync.injectable";
|
import readJsonSyncInjectable from "../../../common/fs/read-json-sync.injectable";
|
||||||
import writeJsonSyncInjectable from "../../../common/fs/write-json-sync.injectable";
|
import writeJsonSyncInjectable from "../../../common/fs/write-json-sync.injectable";
|
||||||
|
import type { LensExtensionId } from "@k8slens/legacy-extensions";
|
||||||
|
|
||||||
function throwIfDefined(val: any): void {
|
function throwIfDefined(val: any): void {
|
||||||
if (val != null) {
|
if (val != null) {
|
||||||
|
|||||||
@ -3,8 +3,6 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import type { InstalledExtension } from "../../../extensions/extension-discovery/extension-discovery";
|
|
||||||
import type { LensExtensionId } from "../../../extensions/lens-extension";
|
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import extensionDiscoveryInjectable from "../../../extensions/extension-discovery/extension-discovery.injectable";
|
import extensionDiscoveryInjectable from "../../../extensions/extension-discovery/extension-discovery.injectable";
|
||||||
import extensionLoaderInjectable from "../../../extensions/extension-loader/extension-loader.injectable";
|
import extensionLoaderInjectable from "../../../extensions/extension-loader/extension-loader.injectable";
|
||||||
@ -35,10 +33,10 @@ const initializeExtensionsInjectable = getInjectable({
|
|||||||
|
|
||||||
// Subscribe to extensions that are copied or deleted to/from the extensions folder
|
// Subscribe to extensions that are copied or deleted to/from the extensions folder
|
||||||
extensionDiscovery.events
|
extensionDiscovery.events
|
||||||
.on("add", (extension: InstalledExtension) => {
|
.on("add", (extension) => {
|
||||||
extensionLoader.addExtension(extension);
|
extensionLoader.addExtension(extension);
|
||||||
})
|
})
|
||||||
.on("remove", (lensExtensionId: LensExtensionId) => {
|
.on("remove", (lensExtensionId) => {
|
||||||
extensionLoader.removeExtension(lensExtensionId);
|
extensionLoader.removeExtension(lensExtensionId);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,6 @@ import { disposer } from "@k8slens/utilities";
|
|||||||
import type { ShowNotification } from "../../notifications";
|
import type { ShowNotification } from "../../notifications";
|
||||||
import { Button } from "../../button";
|
import { Button } from "../../button";
|
||||||
import type { ExtensionLoader } from "../../../../extensions/extension-loader";
|
import type { ExtensionLoader } from "../../../../extensions/extension-loader";
|
||||||
import type { LensExtensionId } from "../../../../extensions/lens-extension";
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { remove as removeDir } from "fs-extra";
|
import { remove as removeDir } from "fs-extra";
|
||||||
import { shell } from "electron";
|
import { shell } from "electron";
|
||||||
@ -25,6 +24,7 @@ import type { ExtensionInstallationStateStore } from "../../../../extensions/ext
|
|||||||
import { ExtensionInstallationState } from "../../../../extensions/extension-installation-state-store/extension-installation-state-store";
|
import { ExtensionInstallationState } from "../../../../extensions/extension-installation-state-store/extension-installation-state-store";
|
||||||
import showErrorNotificationInjectable from "../../notifications/show-error-notification.injectable";
|
import showErrorNotificationInjectable from "../../notifications/show-error-notification.injectable";
|
||||||
import showInfoNotificationInjectable from "../../notifications/show-info-notification.injectable";
|
import showInfoNotificationInjectable from "../../notifications/show-info-notification.injectable";
|
||||||
|
import type { LensExtensionId } from "@k8slens/legacy-extensions";
|
||||||
|
|
||||||
export interface InstallRequest {
|
export interface InstallRequest {
|
||||||
fileName: string;
|
fileName: string;
|
||||||
|
|||||||
@ -7,13 +7,13 @@ import extensionDiscoveryInjectable from "../../../../extensions/extension-disco
|
|||||||
import { validatePackage } from "./validate-package";
|
import { validatePackage } from "./validate-package";
|
||||||
import { getMessageFromError } from "../get-message-from-error/get-message-from-error";
|
import { getMessageFromError } from "../get-message-from-error/get-message-from-error";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import type { LensExtensionId, LensExtensionManifest } from "../../../../extensions/lens-extension";
|
|
||||||
import type { InstallRequest } from "./attempt-install.injectable";
|
import type { InstallRequest } from "./attempt-install.injectable";
|
||||||
import loggerInjectable from "../../../../common/logger.injectable";
|
import loggerInjectable from "../../../../common/logger.injectable";
|
||||||
import writeFileInjectable from "../../../../common/fs/write-file.injectable";
|
import writeFileInjectable from "../../../../common/fs/write-file.injectable";
|
||||||
import joinPathsInjectable from "../../../../common/path/join-paths.injectable";
|
import joinPathsInjectable from "../../../../common/path/join-paths.injectable";
|
||||||
import tempDirectoryPathInjectable from "../../../../common/os/temp-directory-path.injectable";
|
import tempDirectoryPathInjectable from "../../../../common/os/temp-directory-path.injectable";
|
||||||
import showErrorNotificationInjectable from "../../notifications/show-error-notification.injectable";
|
import showErrorNotificationInjectable from "../../notifications/show-error-notification.injectable";
|
||||||
|
import type { LensExtensionId, LensExtensionManifest } from "@k8slens/legacy-extensions";
|
||||||
|
|
||||||
export interface InstallRequestValidated {
|
export interface InstallRequestValidated {
|
||||||
fileName: string;
|
fileName: string;
|
||||||
|
|||||||
@ -2,10 +2,10 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import type { LensExtensionManifest } from "../../../../extensions/lens-extension";
|
|
||||||
import { hasTypedProperty, isObject, isString, listTarEntries, readFileFromTar } from "@k8slens/utilities";
|
import { hasTypedProperty, isObject, isString, listTarEntries, readFileFromTar } from "@k8slens/utilities";
|
||||||
import { manifestFilename } from "../../../../extensions/extension-discovery/extension-discovery";
|
import { manifestFilename } from "../../../../extensions/extension-discovery/extension-discovery";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
|
import type { LensExtensionManifest } from "@k8slens/legacy-extensions";
|
||||||
|
|
||||||
export async function validatePackage(filePath: string): Promise<LensExtensionManifest> {
|
export async function validatePackage(filePath: string): Promise<LensExtensionManifest> {
|
||||||
const tarFiles = await listTarEntries(filePath);
|
const tarFiles = await listTarEntries(filePath);
|
||||||
|
|||||||
@ -2,10 +2,9 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
import type { LensExtensionId, InstalledExtension } from "@k8slens/legacy-extensions";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import type { InstalledExtension } from "../../../extensions/extension-discovery/extension-discovery";
|
|
||||||
import type { LensExtensionId } from "../../../extensions/lens-extension";
|
|
||||||
import { extensionDisplayName } from "../../../extensions/lens-extension";
|
import { extensionDisplayName } from "../../../extensions/lens-extension";
|
||||||
import type { Confirm } from "../confirm-dialog/confirm.injectable";
|
import type { Confirm } from "../confirm-dialog/confirm.injectable";
|
||||||
import confirmInjectable from "../confirm-dialog/confirm.injectable";
|
import confirmInjectable from "../confirm-dialog/confirm.injectable";
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import type { LensExtensionId } from "../../../../extensions/lens-extension";
|
import type { LensExtensionId } from "@k8slens/legacy-extensions";
|
||||||
import type { ExtensionLoader } from "../../../../extensions/extension-loader";
|
import type { ExtensionLoader } from "../../../../extensions/extension-loader";
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import type { LensExtensionId } from "../../../../extensions/lens-extension";
|
import type { LensExtensionId } from "@k8slens/legacy-extensions";
|
||||||
import type { ExtensionLoader } from "../../../../extensions/extension-loader";
|
import type { ExtensionLoader } from "../../../../extensions/extension-loader";
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
|
|||||||
@ -4,8 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import styles from "./extensions.module.scss";
|
import styles from "./extensions.module.scss";
|
||||||
import type {
|
import type { IComputedValue } from "mobx";
|
||||||
IComputedValue } from "mobx";
|
|
||||||
import {
|
import {
|
||||||
makeObservable,
|
makeObservable,
|
||||||
observable,
|
observable,
|
||||||
@ -14,7 +13,6 @@ import {
|
|||||||
} from "mobx";
|
} from "mobx";
|
||||||
import { disposeOnUnmount, observer } from "mobx-react";
|
import { disposeOnUnmount, observer } from "mobx-react";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import type { InstalledExtension } from "../../../extensions/extension-discovery/extension-discovery";
|
|
||||||
import { DropFileInput } from "../input";
|
import { DropFileInput } from "../input";
|
||||||
import { Install } from "./install";
|
import { Install } from "./install";
|
||||||
import { InstalledExtensions } from "./installed-extensions";
|
import { InstalledExtensions } from "./installed-extensions";
|
||||||
@ -31,13 +29,13 @@ import confirmUninstallExtensionInjectable from "./confirm-uninstall-extension.i
|
|||||||
import type { InstallExtensionFromInput } from "./install-extension-from-input.injectable";
|
import type { InstallExtensionFromInput } from "./install-extension-from-input.injectable";
|
||||||
import installExtensionFromInputInjectable from "./install-extension-from-input.injectable";
|
import installExtensionFromInputInjectable from "./install-extension-from-input.injectable";
|
||||||
import installFromSelectFileDialogInjectable from "./install-from-select-file-dialog.injectable";
|
import installFromSelectFileDialogInjectable from "./install-from-select-file-dialog.injectable";
|
||||||
import type { LensExtensionId } from "../../../extensions/lens-extension";
|
|
||||||
import type { InstallOnDrop } from "./install-on-drop.injectable";
|
import type { InstallOnDrop } from "./install-on-drop.injectable";
|
||||||
import installOnDropInjectable from "./install-on-drop.injectable";
|
import installOnDropInjectable from "./install-on-drop.injectable";
|
||||||
import { supportedExtensionFormats } from "./supported-extension-formats";
|
import { supportedExtensionFormats } from "./supported-extension-formats";
|
||||||
import extensionInstallationStateStoreInjectable from "../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable";
|
import extensionInstallationStateStoreInjectable from "../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable";
|
||||||
import type { ExtensionInstallationStateStore } from "../../../extensions/extension-installation-state-store/extension-installation-state-store";
|
import type { ExtensionInstallationStateStore } from "../../../extensions/extension-installation-state-store/extension-installation-state-store";
|
||||||
import Gutter from "../gutter/gutter";
|
import Gutter from "../gutter/gutter";
|
||||||
|
import type { InstalledExtension, LensExtensionId } from "@k8slens/legacy-extensions";
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
userExtensions: IComputedValue<InstalledExtension[]>;
|
userExtensions: IComputedValue<InstalledExtension[]>;
|
||||||
|
|||||||
@ -5,10 +5,7 @@
|
|||||||
|
|
||||||
import styles from "./installed-extensions.module.scss";
|
import styles from "./installed-extensions.module.scss";
|
||||||
import React, { useMemo } from "react";
|
import React, { useMemo } from "react";
|
||||||
import type {
|
import type { ExtensionDiscovery } from "../../../extensions/extension-discovery/extension-discovery";
|
||||||
ExtensionDiscovery,
|
|
||||||
InstalledExtension,
|
|
||||||
} from "../../../extensions/extension-discovery/extension-discovery";
|
|
||||||
import { Icon } from "../icon";
|
import { Icon } from "../icon";
|
||||||
import { List } from "../list/list";
|
import { List } from "../list/list";
|
||||||
import { MenuActions, MenuItem } from "../menu";
|
import { MenuActions, MenuItem } from "../menu";
|
||||||
@ -16,14 +13,11 @@ import { Spinner } from "../spinner";
|
|||||||
import { cssNames } from "@k8slens/utilities";
|
import { cssNames } from "@k8slens/utilities";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import type { Row } from "react-table";
|
import type { Row } from "react-table";
|
||||||
import type { LensExtensionId } from "../../../extensions/lens-extension";
|
import extensionDiscoveryInjectable from "../../../extensions/extension-discovery/extension-discovery.injectable";
|
||||||
import extensionDiscoveryInjectable
|
|
||||||
from "../../../extensions/extension-discovery/extension-discovery.injectable";
|
|
||||||
|
|
||||||
import { withInjectables } from "@ogre-tools/injectable-react";
|
import { withInjectables } from "@ogre-tools/injectable-react";
|
||||||
import extensionInstallationStateStoreInjectable
|
import extensionInstallationStateStoreInjectable from "../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable";
|
||||||
from "../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable";
|
|
||||||
import type { ExtensionInstallationStateStore } from "../../../extensions/extension-installation-state-store/extension-installation-state-store";
|
import type { ExtensionInstallationStateStore } from "../../../extensions/extension-installation-state-store/extension-installation-state-store";
|
||||||
|
import type { InstalledExtension, LensExtensionId } from "@k8slens/legacy-extensions";
|
||||||
|
|
||||||
export interface InstalledExtensionsProps {
|
export interface InstalledExtensionsProps {
|
||||||
extensions: InstalledExtension[];
|
extensions: InstalledExtension[];
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import extensionLoaderInjectable from "../../../extensions/extension-loader/exte
|
|||||||
import extensionInstallationStateStoreInjectable from "../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable";
|
import extensionInstallationStateStoreInjectable from "../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable";
|
||||||
import extensionDiscoveryInjectable from "../../../extensions/extension-discovery/extension-discovery.injectable";
|
import extensionDiscoveryInjectable from "../../../extensions/extension-discovery/extension-discovery.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import type { LensExtensionId } from "../../../extensions/lens-extension";
|
import type { LensExtensionId } from "@k8slens/legacy-extensions";
|
||||||
import { extensionDisplayName } from "../../../extensions/lens-extension";
|
import { extensionDisplayName } from "../../../extensions/lens-extension";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { when } from "mobx";
|
import { when } from "mobx";
|
||||||
|
|||||||
@ -7,8 +7,7 @@ import { clusterSetFrameIdHandler, clusterStates } from "../../common/ipc/cluste
|
|||||||
import type { ClusterId, ClusterState } from "../../common/cluster-types";
|
import type { ClusterId, ClusterState } from "../../common/cluster-types";
|
||||||
import { windowActionHandleChannel, windowLocationChangedChannel, windowOpenAppMenuAsContextMenuChannel, type WindowAction } from "../../common/ipc/window";
|
import { windowActionHandleChannel, windowLocationChangedChannel, windowOpenAppMenuAsContextMenuChannel, type WindowAction } from "../../common/ipc/window";
|
||||||
import { extensionDiscoveryStateChannel, extensionLoaderFromMainChannel } from "../../common/ipc/extension-handling";
|
import { extensionDiscoveryStateChannel, extensionLoaderFromMainChannel } from "../../common/ipc/extension-handling";
|
||||||
import type { InstalledExtension } from "../../extensions/extension-discovery/extension-discovery";
|
import type { InstalledExtension, LensExtensionId } from "@k8slens/legacy-extensions";
|
||||||
import type { LensExtensionId } from "../../extensions/lens-extension";
|
|
||||||
import type { Location } from "history";
|
import type { Location } from "history";
|
||||||
import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
||||||
import ipcRendererInjectable from "../utils/channel/ipc-renderer.injectable";
|
import ipcRendererInjectable from "../utils/channel/ipc-renderer.injectable";
|
||||||
|
|||||||
@ -1,37 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import type webpack from "webpack";
|
|
||||||
import path from "path";
|
|
||||||
import ForkTsCheckerPlugin from "fork-ts-checker-webpack-plugin";
|
|
||||||
import webpackLensMain from "./main";
|
|
||||||
import { buildDir } from "./vars";
|
|
||||||
|
|
||||||
const webpackLensCommon = (): webpack.Configuration => {
|
|
||||||
const mainConfig = webpackLensMain();
|
|
||||||
|
|
||||||
return {
|
|
||||||
...mainConfig,
|
|
||||||
name: "lens-app-common",
|
|
||||||
entry: {
|
|
||||||
common: path.resolve(__dirname, "..", "src", "common", "library.ts"),
|
|
||||||
},
|
|
||||||
output: {
|
|
||||||
publicPath: "",
|
|
||||||
library: {
|
|
||||||
type: "commonjs2",
|
|
||||||
},
|
|
||||||
path: path.resolve(buildDir, "library"),
|
|
||||||
},
|
|
||||||
optimization: {
|
|
||||||
minimize: false,
|
|
||||||
},
|
|
||||||
plugins: [
|
|
||||||
new ForkTsCheckerPlugin({}),
|
|
||||||
],
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export default webpackLensCommon;
|
|
||||||
@ -3,14 +3,12 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import webpackLensCommon from "./common";
|
|
||||||
import webpackLensMain from "./main";
|
import webpackLensMain from "./main";
|
||||||
import { webpackLensRenderer } from "./renderer";
|
import { webpackLensRenderer } from "./renderer";
|
||||||
|
|
||||||
const config = [
|
const config = [
|
||||||
webpackLensMain(),
|
webpackLensMain(),
|
||||||
webpackLensRenderer(),
|
webpackLensRenderer(),
|
||||||
webpackLensCommon(),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
export default config;
|
export default config;
|
||||||
|
|||||||
6
packages/legacy-extension-example/.eslintrc.json
Normal file
6
packages/legacy-extension-example/.eslintrc.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"extends": "@k8slens/eslint-config/eslint",
|
||||||
|
"parserOptions": {
|
||||||
|
"project": "./tsconfig.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
1
packages/legacy-extension-example/jest.config.js
Normal file
1
packages/legacy-extension-example/jest.config.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
module.exports = require("@k8slens/jest").monorepoPackageConfig(__dirname).configForNode;
|
||||||
3
packages/legacy-extension-example/main.ts
Normal file
3
packages/legacy-extension-example/main.ts
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
const noMainExtension = null;
|
||||||
|
|
||||||
|
export default noMainExtension;
|
||||||
47
packages/legacy-extension-example/package.json
Normal file
47
packages/legacy-extension-example/package.json
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"name": "@k8slens/legacy-extension-example",
|
||||||
|
"private": false,
|
||||||
|
"description": "An example bundled Lens extensions using the v1 API",
|
||||||
|
"version": "1.0.0-alpha.0",
|
||||||
|
"type": "commonjs",
|
||||||
|
"files": [
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public",
|
||||||
|
"registry": "https://registry.npmjs.org/"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/lensapp/lens.git"
|
||||||
|
},
|
||||||
|
"exports": {
|
||||||
|
"./package.json": "./package.json",
|
||||||
|
"./main": "./dist/main.js",
|
||||||
|
"./renderer": "./dist/renderer.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"lens": "6.5"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"name": "OpenLens Authors",
|
||||||
|
"email": "info@k8slens.dev"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"homepage": "https://github.com/lensapp/lens",
|
||||||
|
"scripts": {
|
||||||
|
"clean": "rimraf dist/",
|
||||||
|
"build": "webpack --config webpack.ts",
|
||||||
|
"dev": "webpack --mode=development --watch --config webpack.ts",
|
||||||
|
"test": "jest --coverage --runInBand",
|
||||||
|
"lint": "lens-lint",
|
||||||
|
"lint:fix": "lens-lint --fix"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@k8slens/extensions": "^6.5.0-alpha.2",
|
||||||
|
"@types/node": "^16.18.16",
|
||||||
|
"typescript": "^4.9.5",
|
||||||
|
"webpack": "^5.76.1",
|
||||||
|
"webpack-cli": "^5.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
11
packages/legacy-extension-example/renderer.tsx
Normal file
11
packages/legacy-extension-example/renderer.tsx
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import { Common, Renderer } from "@k8slens/extensions";
|
||||||
|
|
||||||
|
export default class ExampleLensExtension extends Renderer.LensExtension {
|
||||||
|
protected onActivate(): void | Promise<void> {
|
||||||
|
Common.logger.info("Activating bundled extension example");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected onDeactivate(): void | Promise<void> {
|
||||||
|
Common.logger.info("Deactivating bundled extension example");
|
||||||
|
}
|
||||||
|
}
|
||||||
4
packages/legacy-extension-example/tsconfig.json
Normal file
4
packages/legacy-extension-example/tsconfig.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"extends": "@k8slens/typescript/config/base.json",
|
||||||
|
"include": ["**/*.ts", "*.ts", "*.tsx"]
|
||||||
|
}
|
||||||
85
packages/legacy-extension-example/webpack.ts
Normal file
85
packages/legacy-extension-example/webpack.ts
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
|
*/
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
const webpack = [
|
||||||
|
{
|
||||||
|
entry: "./renderer.tsx",
|
||||||
|
context: __dirname,
|
||||||
|
target: "electron-renderer",
|
||||||
|
mode: "production",
|
||||||
|
optimization: {
|
||||||
|
minimize: false,
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.tsx?$/,
|
||||||
|
use: "ts-loader",
|
||||||
|
exclude: /node_modules/,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
externals: [
|
||||||
|
{
|
||||||
|
"@k8slens/extensions": "var global.LensExtensions",
|
||||||
|
react: "var global.React",
|
||||||
|
"react-dom": "var global.ReactDOM",
|
||||||
|
mobx: "var global.Mobx",
|
||||||
|
"mobx-react": "var global.MobxReact",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
resolve: {
|
||||||
|
extensions: [".tsx", ".ts", ".js"],
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
libraryTarget: "commonjs2",
|
||||||
|
globalObject: "this",
|
||||||
|
filename: "renderer.js",
|
||||||
|
path: path.resolve(__dirname, "dist"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
entry: "./main.ts",
|
||||||
|
context: __dirname,
|
||||||
|
target: "electron-main",
|
||||||
|
mode: "production",
|
||||||
|
optimization: {
|
||||||
|
minimize: false,
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.tsx?$/,
|
||||||
|
use: "ts-loader",
|
||||||
|
exclude: /node_modules/,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
externals: [
|
||||||
|
{
|
||||||
|
"@k8slens/extensions": "var global.LensExtensions",
|
||||||
|
react: "var global.React",
|
||||||
|
"react-dom": "var global.ReactDOM",
|
||||||
|
mobx: "var global.Mobx",
|
||||||
|
"mobx-react": "var global.MobxReact",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
resolve: {
|
||||||
|
extensions: [".tsx", ".ts", ".js"],
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
libraryTarget: "commonjs2",
|
||||||
|
globalObject: "this",
|
||||||
|
filename: "main.js",
|
||||||
|
path: path.resolve(__dirname, "dist"),
|
||||||
|
},
|
||||||
|
node: {
|
||||||
|
__dirname: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default webpack;
|
||||||
@ -201,6 +201,8 @@
|
|||||||
"@k8slens/ensure-binaries": "^6.5.0-alpha.1",
|
"@k8slens/ensure-binaries": "^6.5.0-alpha.1",
|
||||||
"@k8slens/feature-core": "^6.5.0-alpha.1",
|
"@k8slens/feature-core": "^6.5.0-alpha.1",
|
||||||
"@k8slens/generate-tray-icons": "^6.5.0-alpha.1",
|
"@k8slens/generate-tray-icons": "^6.5.0-alpha.1",
|
||||||
|
"@k8slens/legacy-extension-example": "^1.0.0-alpha.0",
|
||||||
|
"@k8slens/legacy-extensions": "^1.0.0-alpha.0",
|
||||||
"@k8slens/run-many": "^1.0.0-alpha.1",
|
"@k8slens/run-many": "^1.0.0-alpha.1",
|
||||||
"@k8slens/test-utils": "^1.0.0-alpha.1",
|
"@k8slens/test-utils": "^1.0.0-alpha.1",
|
||||||
"@k8slens/utilities": "^1.0.0-alpha.1",
|
"@k8slens/utilities": "^1.0.0-alpha.1",
|
||||||
|
|||||||
@ -0,0 +1,21 @@
|
|||||||
|
import { bundledExtensionInjectionToken } from "@k8slens/legacy-extensions";
|
||||||
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
|
import exampleBundledExtensionManifest from "@k8slens/legacy-extension-example/package.json";
|
||||||
|
|
||||||
|
const exampleBundledExtensionInjectable = getInjectable({
|
||||||
|
id: "example-bundled-extension",
|
||||||
|
instantiate: (di) => ({
|
||||||
|
manifest: exampleBundledExtensionManifest,
|
||||||
|
/**
|
||||||
|
* Inline `require` is needed as to delay the loading and execution of the JS file until it is needed.
|
||||||
|
*
|
||||||
|
* Futhermore there might be code that runs "during load" and shouldn't be executed until everything is
|
||||||
|
* setup for the extensions (ie globals).
|
||||||
|
*/
|
||||||
|
main: () => require("@k8slens/legacy-extension-example/main").default,
|
||||||
|
renderer: () => require("@k8slens/legacy-extension-example/renderer").default,
|
||||||
|
}),
|
||||||
|
injectionToken: bundledExtensionInjectionToken,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default exampleBundledExtensionInjectable;
|
||||||
@ -1,6 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
extends: "@k8slens/eslint-config/eslint",
|
|
||||||
parserOptions: {
|
|
||||||
project: "./tsconfig.json",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"extends": "@k8slens/eslint-config/eslint",
|
||||||
|
"parserOptions": {
|
||||||
|
"project": "./tsconfig.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"extends": "@k8slens/eslint-config/eslint",
|
||||||
|
"parserOptions": {
|
||||||
|
"project": "./tsconfig.json"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
# @k8slens/legacy-extensions
|
||||||
|
|
||||||
|
This package contains stuff related to creating Lens-applications.
|
||||||
|
|
||||||
|
Namely, this package contains information about extensions and bundled extensions of the v1 API.
|
||||||
@ -0,0 +1,2 @@
|
|||||||
|
export * from "./src/bundled-extension";
|
||||||
|
export * from "./src/lens-extension";
|
||||||
@ -0,0 +1 @@
|
|||||||
|
module.exports = require("@k8slens/jest").monorepoPackageConfig(__dirname).configForNode;
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"name": "@k8slens/legacy-extensions",
|
||||||
|
"private": false,
|
||||||
|
"version": "1.0.0-alpha.0",
|
||||||
|
"description": "Package for Lens extensions using the v1 API",
|
||||||
|
"type": "commonjs",
|
||||||
|
"files": [
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public",
|
||||||
|
"registry": "https://registry.npmjs.org/"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/lensapp/lens.git"
|
||||||
|
},
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"types": "dist/index.d.ts",
|
||||||
|
"author": {
|
||||||
|
"name": "OpenLens Authors",
|
||||||
|
"email": "info@k8slens.dev"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"homepage": "https://github.com/lensapp/lens",
|
||||||
|
"scripts": {
|
||||||
|
"build": "webpack",
|
||||||
|
"dev": "webpack --mode=development --watch",
|
||||||
|
"test": "jest --coverage --runInBand",
|
||||||
|
"lint": "lens-lint",
|
||||||
|
"lint:fix": "lens-lint --fix"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@ogre-tools/injectable": "^15.1.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@k8slens/eslint-config": "6.5.0-alpha.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
import { getInjectionToken } from "@ogre-tools/injectable";
|
||||||
|
import type {
|
||||||
|
LensExtensionConstructor,
|
||||||
|
LensExtensionManifest,
|
||||||
|
} from "./lens-extension";
|
||||||
|
|
||||||
|
export interface BundledExtension {
|
||||||
|
readonly manifest: LensExtensionManifest;
|
||||||
|
main: () => LensExtensionConstructor | null;
|
||||||
|
renderer: () => LensExtensionConstructor | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const bundledExtensionInjectionToken =
|
||||||
|
getInjectionToken<BundledExtension>({
|
||||||
|
id: "bundled-extension-path",
|
||||||
|
});
|
||||||
@ -0,0 +1,63 @@
|
|||||||
|
export type LensExtensionId = string;
|
||||||
|
export type LensExtensionConstructor = new (
|
||||||
|
ext: InstalledExtension
|
||||||
|
) => LegacyLensExtension;
|
||||||
|
|
||||||
|
export interface InstalledExtension {
|
||||||
|
id: LensExtensionId;
|
||||||
|
|
||||||
|
readonly manifest: LensExtensionManifest;
|
||||||
|
|
||||||
|
// Absolute path to the non-symlinked source folder,
|
||||||
|
// e.g. "/Users/user/.k8slens/extensions/helloworld"
|
||||||
|
readonly absolutePath: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Absolute to the symlinked package.json file
|
||||||
|
*/
|
||||||
|
readonly manifestPath: string;
|
||||||
|
readonly isBundled: boolean;
|
||||||
|
readonly isCompatible: boolean;
|
||||||
|
isEnabled: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface LegacyLensExtension {
|
||||||
|
readonly id: LensExtensionId;
|
||||||
|
readonly manifest: LensExtensionManifest;
|
||||||
|
readonly manifestPath: string;
|
||||||
|
readonly isBundled: boolean;
|
||||||
|
readonly sanitizedExtensionId: string;
|
||||||
|
readonly name: string;
|
||||||
|
readonly version: string;
|
||||||
|
readonly description: string | undefined;
|
||||||
|
readonly storeName: string;
|
||||||
|
|
||||||
|
getExtensionFileFolder(): Promise<string>;
|
||||||
|
enable(): Promise<void>;
|
||||||
|
disable(): Promise<void>;
|
||||||
|
activate(): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface LensExtensionManifest {
|
||||||
|
name: string;
|
||||||
|
version: string;
|
||||||
|
description?: string;
|
||||||
|
|
||||||
|
main?: string; // path to %ext/dist/main.js
|
||||||
|
renderer?: string; // path to %ext/dist/renderer.js
|
||||||
|
/**
|
||||||
|
* Supported Lens version engine by extension could be defined in `manifest.engines.lens`
|
||||||
|
* Only MAJOR.MINOR version is taken in consideration.
|
||||||
|
*/
|
||||||
|
engines: {
|
||||||
|
lens: string; // "semver"-package format
|
||||||
|
npm?: string;
|
||||||
|
node?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify extension name used for persisting data.
|
||||||
|
* Useful if extension is renamed but the data should not be lost.
|
||||||
|
*/
|
||||||
|
storeName?: string;
|
||||||
|
}
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"extends": "@k8slens/typescript/config/base.json",
|
||||||
|
"include": ["**/*.ts"]
|
||||||
|
}
|
||||||
@ -0,0 +1 @@
|
|||||||
|
module.exports = require("@k8slens/webpack").configForNode;
|
||||||
Loading…
Reference in New Issue
Block a user