From 98c6cb4bbd3d5bf85f408db7948606fdd9395591 Mon Sep 17 00:00:00 2001 From: logonoff Date: Mon, 17 Nov 2025 23:34:58 -0500 Subject: [PATCH 01/14] CONSOLE-3769: Make plugin info status lowercase to align with openshift/dynamic-plugin-sdk --- .../ConsoleOperatorConfig.tsx | 6 ++--- .../ConsolePluginStatusDetail.tsx | 2 +- .../DynamicPluginsPopover.tsx | 4 +-- .../dynamic-plugins-health-resource/status.ts | 6 ++--- .../src/hooks/useCSPViolationDetector.tsx | 2 +- .../__tests__/plugin-dependencies.spec.ts | 6 ++--- .../src/runtime/plugin-dependencies.ts | 4 +-- .../src/__tests__/store.spec.ts | 26 +++++++++---------- .../src/api/usePluginInfo.ts | 2 +- .../packages/console-plugin-sdk/src/store.ts | 16 ++++++------ .../tests/app/demo-dynamic-plugin.cy.ts | 2 +- .../public/components/notification-drawer.tsx | 2 +- 12 files changed, 39 insertions(+), 39 deletions(-) diff --git a/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx b/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx index 7f9d945327f..a1adb5629eb 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx @@ -94,7 +94,7 @@ export const useConsoleOperatorConfigData = () => { export const ConsolePluginStatus: React.FC = ({ status, errorMessage, -}) => ; +}) => ; export const ConsolePluginEnabledStatus: React.FC = ({ pluginName, @@ -362,9 +362,9 @@ const PluginsPage: React.FC = (props) => { enabled, status: notLoadedPluginInfo?.status, errorMessage: - notLoadedPluginInfo?.status === 'Failed' ? notLoadedPluginInfo?.errorMessage : undefined, + notLoadedPluginInfo?.status === 'failed' ? notLoadedPluginInfo?.errorMessage : undefined, errorCause: - notLoadedPluginInfo?.status === 'Failed' + notLoadedPluginInfo?.status === 'failed' ? notLoadedPluginInfo?.errorCause?.toString() : undefined, }; diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx index 97753a86ff4..b296fba47ff 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx @@ -22,7 +22,7 @@ const ConsolePluginStatusDetail: React.FC = ({ obj }) return pluginInfo ? ( ) : ( <>{DASH} diff --git a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx index 5deca91790c..7512e3181bd 100644 --- a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx +++ b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx @@ -20,8 +20,8 @@ const DynamicPluginsPopover: React.FC = ({ consolePl UI.get('pluginCSPViolations'), ); const notLoadedDynamicPluginInfo = pluginInfoEntries.filter(isNotLoadedDynamicPluginInfo); - const failedPlugins = notLoadedDynamicPluginInfo.filter((plugin) => plugin.status === 'Failed'); - const pendingPlugins = notLoadedDynamicPluginInfo.filter((plugin) => plugin.status === 'Pending'); + const failedPlugins = notLoadedDynamicPluginInfo.filter((plugin) => plugin.status === 'failed'); + const pendingPlugins = notLoadedDynamicPluginInfo.filter((plugin) => plugin.status === 'pending'); const loadedPlugins = pluginInfoEntries.filter(isLoadedDynamicPluginInfo); const loadedPluginsWithCSPViolations = loadedPlugins.filter( (plugin) => cspViolations[plugin.metadata.name] ?? false, diff --git a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/status.ts b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/status.ts index 2661e8bad20..3179cbd5bf5 100644 --- a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/status.ts +++ b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/status.ts @@ -3,13 +3,13 @@ import { pluginStore } from '@console/internal/plugins'; export const getDynamicPluginHealthState = (): SubsystemHealth => { const dynamicPluginInfo = pluginStore.getPluginInfo(); - if (dynamicPluginInfo.some((plugin) => plugin.status === 'Failed')) { + if (dynamicPluginInfo.some((plugin) => plugin.status === 'failed')) { return { state: HealthState.ERROR }; } - if (dynamicPluginInfo.some((plugin) => plugin.status === 'Pending')) { + if (dynamicPluginInfo.some((plugin) => plugin.status === 'pending')) { return { state: HealthState.PROGRESS }; } - if (dynamicPluginInfo.every((plugin) => plugin.status === 'Loaded')) { + if (dynamicPluginInfo.every((plugin) => plugin.status === 'loaded')) { return { state: HealthState.OK }; } return { state: HealthState.UNKNOWN }; diff --git a/frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx b/frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx index e3d05edf6e0..7f8800caa0e 100644 --- a/frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx +++ b/frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx @@ -110,7 +110,7 @@ export const useCSPViolationDetector = () => { ); const validPlugin = !!pluginInfo; - const pluginIsLoaded = validPlugin && pluginInfo.status === 'Loaded'; + const pluginIsLoaded = validPlugin && pluginInfo.status === 'loaded'; // eslint-disable-next-line no-console console.warn( diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-dependencies.spec.ts b/frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-dependencies.spec.ts index 31fa9ecfd98..9739f59470d 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-dependencies.spec.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-dependencies.spec.ts @@ -28,7 +28,7 @@ describe('resolvePluginDependencies', () => { const getLoadedDynamicPluginInfo = ( manifest: StandardConsolePluginManifest, ): LoadedDynamicPluginInfo => ({ - status: 'Loaded', + status: 'loaded', pluginID: getPluginID(manifest), metadata: _.omit(manifest, ['extensions', 'loadScripts', 'registrationMethod']), enabled: true, @@ -37,14 +37,14 @@ describe('resolvePluginDependencies', () => { const getPendingDynamicPluginInfo = ( manifest: StandardConsolePluginManifest, ): NotLoadedDynamicPluginInfo => ({ - status: 'Pending', + status: 'pending', pluginName: manifest.name, }); const getFailedDynamicPluginInfo = ( manifest: StandardConsolePluginManifest, ): NotLoadedDynamicPluginInfo => ({ - status: 'Failed', + status: 'failed', pluginName: manifest.name, errorMessage: `Test error message for plugin ${manifest.name}`, }); diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/runtime/plugin-dependencies.ts b/frontend/packages/console-dynamic-plugin-sdk/src/runtime/plugin-dependencies.ts index 6743081e075..6fe3d045550 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/runtime/plugin-dependencies.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/runtime/plugin-dependencies.ts @@ -119,14 +119,14 @@ export const resolvePluginDependencies = ( const unsubListener = subscribeToDynamicPlugins((entries) => { const loadedPlugins = entries.reduce>((acc, e) => { - if (e.status === 'Loaded' && preloadPluginNames.includes(e.metadata.name)) { + if (e.status === 'loaded' && preloadPluginNames.includes(e.metadata.name)) { acc[e.metadata.name] = e.metadata.version; } return acc; }, {}); const failedPluginNames = entries.reduce((acc, e) => { - if (e.status === 'Failed' && preloadPluginNames.includes(e.pluginName)) { + if (e.status === 'failed' && preloadPluginNames.includes(e.pluginName)) { acc.push(e.pluginName); } return acc; diff --git a/frontend/packages/console-plugin-sdk/src/__tests__/store.spec.ts b/frontend/packages/console-plugin-sdk/src/__tests__/store.spec.ts index 78acd38f276..16af874cbcc 100644 --- a/frontend/packages/console-plugin-sdk/src/__tests__/store.spec.ts +++ b/frontend/packages/console-plugin-sdk/src/__tests__/store.spec.ts @@ -282,11 +282,11 @@ describe('PluginStore', () => { expect(store.getAllowedDynamicPluginNames()).toEqual(['TestA', 'TestB']); expect(store.getPluginInfo()).toEqual([ { - status: 'Pending', + status: 'pending', pluginName: 'TestA', }, { - status: 'Pending', + status: 'pending', pluginName: 'TestB', }, ]); @@ -582,7 +582,7 @@ describe('PluginStore', () => { expect(store.getExtensions()).toEqual([]); expect(store.getPluginInfo()).toEqual([ { - status: 'Loaded', + status: 'loaded', pluginID: 'Test@1.2.3', metadata: _.omit(manifest, ['extensions', 'loadScripts', 'registrationMethod']), enabled: false, @@ -954,11 +954,11 @@ describe('PluginStore', () => { expect(store.getPluginInfo()).toEqual([ { - status: 'Pending', + status: 'pending', pluginName: 'TestA', }, { - status: 'Pending', + status: 'pending', pluginName: 'TestB', }, ]); @@ -967,13 +967,13 @@ describe('PluginStore', () => { expect(store.getPluginInfo()).toEqual([ { - status: 'Loaded', + status: 'loaded', pluginID: 'TestA@1.2.3', metadata: _.omit(manifest, ['extensions', 'loadScripts', 'registrationMethod']), enabled: false, }, { - status: 'Pending', + status: 'pending', pluginName: 'TestB', }, ]); @@ -982,26 +982,26 @@ describe('PluginStore', () => { expect(store.getPluginInfo()).toEqual([ { - status: 'Loaded', + status: 'loaded', pluginID: 'TestA@1.2.3', metadata: _.omit(manifest, ['extensions', 'loadScripts', 'registrationMethod']), enabled: true, }, { - status: 'Pending', + status: 'pending', pluginName: 'TestB', }, ]); expect(store.getPluginInfo()).toEqual([ { - status: 'Loaded', + status: 'loaded', pluginID: 'TestA@1.2.3', metadata: _.omit(manifest, ['extensions', 'loadScripts', 'registrationMethod']), enabled: true, }, { - status: 'Pending', + status: 'pending', pluginName: 'TestB', }, ]); @@ -1010,13 +1010,13 @@ describe('PluginStore', () => { expect(store.getPluginInfo()).toEqual([ { - status: 'Loaded', + status: 'loaded', pluginID: 'TestA@1.2.3', metadata: _.omit(manifest, ['extensions', 'loadScripts', 'registrationMethod']), enabled: true, }, { - status: 'Failed', + status: 'failed', pluginName: 'TestB', errorMessage: 'Test error message', errorCause: new Error('Boom'), diff --git a/frontend/packages/console-plugin-sdk/src/api/usePluginInfo.ts b/frontend/packages/console-plugin-sdk/src/api/usePluginInfo.ts index bbb218ba592..1931e5d968b 100644 --- a/frontend/packages/console-plugin-sdk/src/api/usePluginInfo.ts +++ b/frontend/packages/console-plugin-sdk/src/api/usePluginInfo.ts @@ -34,7 +34,7 @@ export const usePluginInfo = (): [DynamicPluginInfo[], boolean] => { if (unsubscribeRef.current === null) { unsubscribeRef.current = subscribeToDynamicPlugins((pluginInfoEntries) => { pluginInfoEntriesRef.current = pluginInfoEntries; - allPluginsProcessedRef.current = pluginInfoEntries.every((i) => i.status !== 'Pending'); + allPluginsProcessedRef.current = pluginInfoEntries.every((i) => i.status !== 'pending'); isMountedRef.current && forceRender(); }); } diff --git a/frontend/packages/console-plugin-sdk/src/store.ts b/frontend/packages/console-plugin-sdk/src/store.ts index 7814e16c558..8ad084895d0 100644 --- a/frontend/packages/console-plugin-sdk/src/store.ts +++ b/frontend/packages/console-plugin-sdk/src/store.ts @@ -33,11 +33,11 @@ export const getGatingFlagNames = (extensions: Extension[]): string[] => ]); export const isLoadedDynamicPluginInfo = (i: DynamicPluginInfo): i is LoadedDynamicPluginInfo => - i?.status === 'Loaded'; + i?.status === 'loaded'; export const isNotLoadedDynamicPluginInfo = ( i: DynamicPluginInfo, -): i is NotLoadedDynamicPluginInfo => i.status === 'Failed' || i.status === 'Pending'; +): i is NotLoadedDynamicPluginInfo => i.status === 'failed' || i.status === 'pending'; /** * Provides access to Console plugins and their extensions. @@ -245,7 +245,7 @@ export class PluginStore { const loadedPluginEntries = Array.from(this.loadedDynamicPlugins.entries()).reduce( (acc, [pluginID, plugin]) => { acc.push({ - status: 'Loaded', + status: 'loaded', pluginID, metadata: _.omit(plugin.manifest, ['extensions', 'loadScripts', 'registrationMethod']), enabled: plugin.enabled, @@ -258,7 +258,7 @@ export class PluginStore { const failedPluginEntries = Array.from(this.failedDynamicPlugins.entries()).reduce( (acc, [pluginName, plugin]) => { acc.push({ - status: 'Failed', + status: 'failed', pluginName, errorMessage: plugin.errorMessage, errorCause: plugin.errorCause, @@ -275,7 +275,7 @@ export class PluginStore { ) .reduce((acc, pluginName) => { acc.push({ - status: 'Pending', + status: 'pending', pluginName, }); return acc; @@ -327,7 +327,7 @@ type FailedDynamicPlugin = { }; export type LoadedDynamicPluginInfo = { - status: 'Loaded'; + status: 'loaded'; pluginID: string; metadata: DynamicPluginMetadata; enabled: boolean; @@ -335,11 +335,11 @@ export type LoadedDynamicPluginInfo = { export type NotLoadedDynamicPluginInfo = | { - status: 'Pending'; + status: 'pending'; pluginName: string; } | { - status: 'Failed'; + status: 'failed'; pluginName: string; errorMessage: string; errorCause?: unknown; diff --git a/frontend/packages/integration-tests-cypress/tests/app/demo-dynamic-plugin.cy.ts b/frontend/packages/integration-tests-cypress/tests/app/demo-dynamic-plugin.cy.ts index ee87ad497ad..1bba663030d 100644 --- a/frontend/packages/integration-tests-cypress/tests/app/demo-dynamic-plugin.cy.ts +++ b/frontend/packages/integration-tests-cypress/tests/app/demo-dynamic-plugin.cy.ts @@ -55,7 +55,7 @@ const enableDemoPlugin = (enable: boolean) => { }); cy.log(`Running plugin test on ci using PLUGIN_PULL_SPEC: ${PLUGIN_PULL_SPEC}`); cy.byTestID(`${PLUGIN_NAME}-status`) - .should('include.text', enable ? 'Loaded' : '-') + .should('include.text', enable ? 'loaded' : '-') .then(() => { if (!enable) { cy.byLegacyTestID(PLUGIN_NAME).click(); diff --git a/frontend/public/components/notification-drawer.tsx b/frontend/public/components/notification-drawer.tsx index 9dfb603fc19..862b82084ec 100644 --- a/frontend/public/components/notification-drawer.tsx +++ b/frontend/public/components/notification-drawer.tsx @@ -164,7 +164,7 @@ const getUpdateNotificationEntries = ( const failedPlugins = pluginInfoEntries .filter(isNotLoadedDynamicPluginInfo) - .filter((plugin) => plugin.status === 'Failed'); + .filter((plugin) => plugin.status === 'failed'); if (!_.isEmpty(updateData)) { entries.push( From dbffeb73126b5563ac476f14ffe103e78e3d80eb Mon Sep 17 00:00:00 2001 From: logonoff Date: Mon, 17 Nov 2025 23:35:54 -0500 Subject: [PATCH 02/14] RHSTOR-6927: Remove LSO i18n namespace --- frontend/public/i18n.js | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/public/i18n.js b/frontend/public/i18n.js index 9cece429003..e5a4a9e1663 100644 --- a/frontend/public/i18n.js +++ b/frontend/public/i18n.js @@ -66,7 +66,6 @@ export const init = () => { 'helm-plugin', 'insights-plugin', 'knative-plugin', - 'lso-plugin', 'metal3-plugin', 'notification-drawer', 'olm', From 3ab883f66db1adb2a872f7fe026069a848decb4d Mon Sep 17 00:00:00 2001 From: logonoff Date: Tue, 18 Nov 2025 09:00:23 -0500 Subject: [PATCH 03/14] CONSOLE-3769: Remove i18n namespaces from PluginStore --- frontend/packages/console-plugin-sdk/src/store.ts | 13 +------------ frontend/public/i18n.js | 3 +-- frontend/public/plugins.ts | 7 +------ 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/frontend/packages/console-plugin-sdk/src/store.ts b/frontend/packages/console-plugin-sdk/src/store.ts index 8ad084895d0..9a9e4bf9144 100644 --- a/frontend/packages/console-plugin-sdk/src/store.ts +++ b/frontend/packages/console-plugin-sdk/src/store.ts @@ -58,8 +58,6 @@ export class PluginStore { // Extensions contributed by dynamic plugins which are currently in use private dynamicPluginExtensions: LoadedExtension[]; - private i18nNamespaces: Set; - private readonly staticPlugins: StaticPlugin[]; // Static plugins that were disabled by loading replacement dynamic plugins @@ -76,11 +74,7 @@ export class PluginStore { private readonly listeners: VoidFunction[] = []; - constructor( - staticPlugins: ActivePlugin[] = [], - allowedDynamicPluginNames: string[] = [], - i18nNamespaces: string[] = [], - ) { + constructor(staticPlugins: ActivePlugin[] = [], allowedDynamicPluginNames: string[] = []) { this.staticPlugins = staticPlugins.map((plugin) => ({ name: plugin.name, extensions: plugin.extensions.map((e, index) => @@ -91,7 +85,6 @@ export class PluginStore { })); this.allowedDynamicPluginNames = _.uniq(allowedDynamicPluginNames); - this.i18nNamespaces = new Set(i18nNamespaces); this.updateExtensions(); } @@ -103,10 +96,6 @@ export class PluginStore { return [...this.allowedDynamicPluginNames]; } - getI18nNamespaces() { - return Array.from(this.i18nNamespaces); - } - subscribe(listener: VoidFunction): VoidFunction { let isSubscribed = true; this.listeners.push(listener); diff --git a/frontend/public/i18n.js b/frontend/public/i18n.js index e5a4a9e1663..aafa4bac3da 100644 --- a/frontend/public/i18n.js +++ b/frontend/public/i18n.js @@ -6,7 +6,6 @@ import Pseudo from 'i18next-pseudo'; import { transformNamespace } from 'i18next-v4-format-converter'; import { getLastLanguage } from '@console/app/src/components/user-preferences/language/getLastLanguage'; -import { pluginStore } from './plugins'; import { dateTimeFormatter, fromNow } from './components/utils/datetime'; const params = new URLSearchParams(window.location.search); @@ -76,7 +75,7 @@ export const init = () => { 'topology', 'vsphere-plugin', 'webterminal-plugin', - ...pluginStore.getI18nNamespaces(), + ...Array.from(new Set(window.SERVER_FLAGS.i18nNamespaces ?? [])), ], defaultNS: 'public', nsSeparator: '~', diff --git a/frontend/public/plugins.ts b/frontend/public/plugins.ts index bb75020b82a..71a0f43af8e 100644 --- a/frontend/public/plugins.ts +++ b/frontend/public/plugins.ts @@ -17,10 +17,6 @@ const getEnabledDynamicPluginNames = () => { return allPluginNames.filter((pluginName) => !disabledPluginNames.includes(pluginName)); }; -const getI18nNamespaces = () => { - return window.SERVER_FLAGS.i18nNamespaces; -}; - // Console active plugins module has its source generated during webpack build, // so we use dynamic require() instead of the usual static import statement. const activePlugins = @@ -29,9 +25,8 @@ const activePlugins = : []; const dynamicPluginNames = getEnabledDynamicPluginNames(); -const i18nNamespaces = getI18nNamespaces(); -export const pluginStore = new PluginStore(activePlugins, dynamicPluginNames, i18nNamespaces); +export const pluginStore = new PluginStore(activePlugins, dynamicPluginNames); if (process.env.NODE_ENV !== 'production') { // Expose Console plugin store for debugging From b9d20b045fb2480afe454508cd959fbc3572b1ba Mon Sep 17 00:00:00 2001 From: logonoff Date: Tue, 18 Nov 2025 09:12:15 -0500 Subject: [PATCH 04/14] CONSOLE-3769: Remove isLoadedDynamicPluginInfo/isNotLoadedDynamicPluginInfo --- .../ConsoleOperatorConfig.tsx | 30 +++++++++---------- .../ConsolePluginDescriptionDetail.tsx | 5 ++-- .../ConsolePluginEnabledStatusDetail.tsx | 7 ++--- .../ConsolePluginStatusDetail.tsx | 3 +- .../ConsolePluginVersionDetail.tsx | 5 ++-- .../DynamicPluginsPopover.tsx | 7 +++-- .../src/hooks/useCSPViolationDetector.tsx | 3 +- .../packages/console-plugin-sdk/src/store.ts | 7 ----- frontend/public/components/about-modal.tsx | 3 +- 9 files changed, 28 insertions(+), 42 deletions(-) diff --git a/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx b/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx index a1adb5629eb..1f3a3af175f 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx @@ -1,4 +1,5 @@ import * as React from 'react'; +import { PluginInfoEntry } from '@openshift/dynamic-plugin-sdk'; import { Alert, Button } from '@patternfly/react-core'; import { PencilAltIcon } from '@patternfly/react-icons/dist/esm/icons/pencil-alt-icon'; import { @@ -39,11 +40,6 @@ import { referenceForModel, } from '@console/internal/module/k8s'; import { RootState } from '@console/internal/redux'; -import { - isLoadedDynamicPluginInfo, - DynamicPluginInfo, - isNotLoadedDynamicPluginInfo, -} from '@console/plugin-sdk/src'; import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo'; import PaneBody from '@console/shared/src/components/layout/PaneBody'; import { consolePluginModal } from '@console/shared/src/components/modals/ConsolePluginModal'; @@ -309,14 +305,16 @@ const DevPluginsPage: React.FCC = (props) => { () => !pluginInfoLoaded ? [] - : pluginInfo.filter(isLoadedDynamicPluginInfo).map((plugin) => ({ - name: plugin.metadata.name, - version: plugin.metadata.version, - description: plugin.metadata?.customProperties?.console?.description, - enabled: plugin.enabled, - status: plugin.status, - hasCSPViolations: cspViolations[plugin.metadata.name] ?? false, - })), + : pluginInfo + .filter((plugin) => plugin?.status === 'loaded') + .map((plugin) => ({ + name: plugin.metadata.name, + version: plugin.metadata.version, + description: plugin.metadata?.customProperties?.console?.description, + enabled: plugin.enabled, + status: plugin.status, + hasCSPViolations: cspViolations[plugin.metadata.name] ?? false, + })), [pluginInfo, pluginInfoLoaded, cspViolations], ); return ; @@ -342,10 +340,10 @@ const PluginsPage: React.FC = (props) => { const pluginName = plugin?.metadata?.name; const enabled = enabledPlugins.includes(pluginName); const loadedPluginInfo = pluginInfo - .filter(isLoadedDynamicPluginInfo) + .filter((p) => p?.status === 'loaded') .find((i) => i?.metadata?.name === pluginName); const notLoadedPluginInfo = pluginInfo - .filter(isNotLoadedDynamicPluginInfo) + .filter((p) => p?.status !== 'loaded') .find((i) => i?.pluginName === pluginName); if (loadedPluginInfo) { return { @@ -443,7 +441,7 @@ type ConsolePluginsTableProps = ConsoleOperatorConfigPageProps & { }; type ConsolePluginStatusProps = { - status: DynamicPluginInfo['status']; + status: PluginInfoEntry['status']; errorMessage?: string; }; diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx index 6f8c87def28..5ea93791808 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx @@ -1,6 +1,5 @@ import * as React from 'react'; import { DetailsItemComponentProps } from '@console/dynamic-plugin-sdk/src/extensions/details-item'; -import { isLoadedDynamicPluginInfo } from '@console/plugin-sdk/src'; import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo'; import { DASH } from '@console/shared/src/constants'; @@ -11,14 +10,14 @@ const ConsolePluginDescriptionDetail: React.FC = ({ o const pluginInfo = React.useMemo( () => pluginInfoEntries.find((entry) => - isLoadedDynamicPluginInfo(entry) + entry?.status === 'loaded' ? entry.metadata.name === pluginName : entry.pluginName === pluginName, ), [pluginInfoEntries, pluginName], ); - return isLoadedDynamicPluginInfo(pluginInfo) ? ( + return pluginInfo?.status === 'loaded' ? ( <>{pluginInfo.metadata.customProperties?.console?.description || DASH} ) : ( <>{DASH} diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx index 195fb5e8091..286d3e3a08c 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx @@ -1,7 +1,6 @@ import * as React from 'react'; import { DASH } from '@console/dynamic-plugin-sdk/src/app/constants'; import { DetailsItemComponentProps } from '@console/dynamic-plugin-sdk/src/extensions/details-item'; -import { isLoadedDynamicPluginInfo } from '@console/plugin-sdk/src'; import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo'; import { ConsolePluginEnabledStatus, @@ -18,7 +17,7 @@ const ConsolePluginEnabledStatusDetail: React.FC = ({ const pluginInfo = React.useMemo( () => pluginInfoEntries.find((entry) => - isLoadedDynamicPluginInfo(entry) + entry?.status === 'loaded' ? entry.metadata.name === pluginName : entry.pluginName === pluginName, ), @@ -28,12 +27,12 @@ const ConsolePluginEnabledStatusDetail: React.FC = ({ consoleOperatorConfig?.spec?.plugins, ]); - return consoleOperatorConfigLoaded ? ( + return consoleOperatorConfigLoaded && pluginName ? ( diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx index b296fba47ff..b665f0e5ed0 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx @@ -1,6 +1,5 @@ import * as React from 'react'; import { DetailsItemComponentProps } from '@console/dynamic-plugin-sdk/src/extensions/details-item'; -import { isLoadedDynamicPluginInfo } from '@console/plugin-sdk/src'; import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo'; import { DASH } from '@console/shared/src/constants'; import { ConsolePluginStatus } from './ConsoleOperatorConfig'; @@ -12,7 +11,7 @@ const ConsolePluginStatusDetail: React.FC = ({ obj }) const pluginInfo = React.useMemo( () => pluginInfoEntries.find((entry) => - isLoadedDynamicPluginInfo(entry) + entry?.status === 'loaded' ? entry.metadata.name === pluginName : entry.pluginName === pluginName, ), diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginVersionDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginVersionDetail.tsx index 199546b8a13..9ced9ec6844 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginVersionDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginVersionDetail.tsx @@ -1,6 +1,5 @@ import * as React from 'react'; import { DetailsItemComponentProps } from '@console/dynamic-plugin-sdk/src/extensions/details-item'; -import { isLoadedDynamicPluginInfo } from '@console/plugin-sdk/src'; import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo'; import { DASH } from '@console/shared/src/constants'; @@ -12,14 +11,14 @@ const ConsolePluginVersionDetail: React.FC = ({ obj } const pluginInfo = React.useMemo( () => pluginInfoEntries.find((entry) => - isLoadedDynamicPluginInfo(entry) + entry?.status === 'loaded' ? entry.metadata.name === pluginName : entry.pluginName === pluginName, ), [pluginInfoEntries, pluginName], ); - return isLoadedDynamicPluginInfo(pluginInfo) ? <>{pluginInfo.metadata.version} : <>{DASH}; + return pluginInfo?.status === 'loaded' ? <>{pluginInfo.metadata.version} : <>{DASH}; }; export default ConsolePluginVersionDetail; diff --git a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx index 7512e3181bd..5c1ee5d508e 100644 --- a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx +++ b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx @@ -8,7 +8,6 @@ import { PluginCSPViolations } from '@console/internal/actions/ui'; import { ConsoleOperatorConfigModel, ConsolePluginModel } from '@console/internal/models'; import { ConsolePluginKind, referenceForModel } from '@console/internal/module/k8s'; import { RootState } from '@console/internal/redux'; -import { isLoadedDynamicPluginInfo, isNotLoadedDynamicPluginInfo } from '@console/plugin-sdk/src'; import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo'; import { StatusPopupSection } from '@console/shared/src/components/dashboard/status-card/StatusPopup'; import NotLoadedDynamicPlugins from './NotLoadedDynamicPlugins'; @@ -19,10 +18,12 @@ const DynamicPluginsPopover: React.FC = ({ consolePl const cspViolations = useSelector(({ UI }) => UI.get('pluginCSPViolations'), ); - const notLoadedDynamicPluginInfo = pluginInfoEntries.filter(isNotLoadedDynamicPluginInfo); + const notLoadedDynamicPluginInfo = pluginInfoEntries.filter( + (plugin) => plugin?.status !== 'loaded', + ); const failedPlugins = notLoadedDynamicPluginInfo.filter((plugin) => plugin.status === 'failed'); const pendingPlugins = notLoadedDynamicPluginInfo.filter((plugin) => plugin.status === 'pending'); - const loadedPlugins = pluginInfoEntries.filter(isLoadedDynamicPluginInfo); + const loadedPlugins = pluginInfoEntries.filter((plugin) => plugin?.status === 'loaded'); const loadedPluginsWithCSPViolations = loadedPlugins.filter( (plugin) => cspViolations[plugin.metadata.name] ?? false, ); diff --git a/frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx b/frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx index 7f8800caa0e..c76c6f9dc6e 100644 --- a/frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx +++ b/frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx @@ -5,7 +5,6 @@ import { useTranslation } from 'react-i18next'; import { useDispatch, useSelector } from 'react-redux'; import { setPluginCSPViolations, PluginCSPViolations } from '@console/internal/actions/ui'; import { RootState } from '@console/internal/redux'; -import { isLoadedDynamicPluginInfo } from '@console/plugin-sdk/src'; import { usePluginStore } from '@console/plugin-sdk/src/api/usePluginStore'; import { useToast } from '@console/shared/src/components/toast'; import { IS_PRODUCTION } from '@console/shared/src/constants/common'; @@ -104,7 +103,7 @@ export const useCSPViolationDetector = () => { const pluginInfo = pluginStore .getPluginInfo() .find((entry) => - isLoadedDynamicPluginInfo(entry) + entry?.status === 'loaded' ? entry.metadata.name === pluginName : entry.pluginName === pluginName, ); diff --git a/frontend/packages/console-plugin-sdk/src/store.ts b/frontend/packages/console-plugin-sdk/src/store.ts index 9a9e4bf9144..344ee1b9c49 100644 --- a/frontend/packages/console-plugin-sdk/src/store.ts +++ b/frontend/packages/console-plugin-sdk/src/store.ts @@ -32,13 +32,6 @@ export const getGatingFlagNames = (extensions: Extension[]): string[] => ..._.flatMap(extensions.map((e) => e.flags.disallowed)), ]); -export const isLoadedDynamicPluginInfo = (i: DynamicPluginInfo): i is LoadedDynamicPluginInfo => - i?.status === 'loaded'; - -export const isNotLoadedDynamicPluginInfo = ( - i: DynamicPluginInfo, -): i is NotLoadedDynamicPluginInfo => i.status === 'failed' || i.status === 'pending'; - /** * Provides access to Console plugins and their extensions. * diff --git a/frontend/public/components/about-modal.tsx b/frontend/public/components/about-modal.tsx index 5fc024a5362..564a44aa76f 100644 --- a/frontend/public/components/about-modal.tsx +++ b/frontend/public/components/about-modal.tsx @@ -10,7 +10,6 @@ import { Trans, useTranslation } from 'react-i18next'; import { useClusterVersion } from '@console/shared/src/hooks/version'; import { BlueArrowCircleUpIcon } from '@console/shared/src/components/status/icons'; import { useCanClusterUpgrade } from '@console/shared/src/hooks/useCanClusterUpgrade'; -import { isLoadedDynamicPluginInfo } from '@console/plugin-sdk/src'; import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo'; import { getBrandingDetails, MASTHEAD_TYPE, useCustomLogoURL } from './utils/branding'; import { ReleaseNotesLink } from './utils/release-notes-link'; @@ -37,7 +36,7 @@ const DynamicPlugins: React.FC = () => { const [items, setItems] = React.useState([]); React.useEffect(() => { - const loadedPlugins = pluginInfoEntries.filter(isLoadedDynamicPluginInfo); + const loadedPlugins = pluginInfoEntries.filter((plugin) => plugin?.status === 'loaded'); const sortedLoadedPlugins = loadedPlugins.sort((a, b) => a.metadata.name.localeCompare(b.metadata.name), ); From 648d3811687005d794d674ca7de67807e45f273b Mon Sep 17 00:00:00 2001 From: logonoff Date: Tue, 18 Nov 2025 09:19:17 -0500 Subject: [PATCH 05/14] CONSOLE-3769: Remove `allPluginsProcessedRef` from usePluginInfo because it is not in the SDK --- .../ConsoleOperatorConfig.tsx | 43 ++++++++----------- .../ConsolePluginDescriptionDetail.tsx | 2 +- .../ConsolePluginEnabledStatusDetail.tsx | 2 +- .../ConsolePluginStatusDetail.tsx | 2 +- .../ConsolePluginVersionDetail.tsx | 2 +- .../DynamicPluginsPopover.tsx | 2 +- .../src/api/usePluginInfo.ts | 8 ++-- frontend/public/components/about-modal.tsx | 2 +- frontend/public/components/app-contents.tsx | 7 ++- .../public/components/notification-drawer.tsx | 8 ++-- 10 files changed, 37 insertions(+), 41 deletions(-) diff --git a/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx b/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx index 1f3a3af175f..f9cdce00c73 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx @@ -31,7 +31,7 @@ import { useK8sWatchResource } from '@console/internal/components/utils/k8s-watc import { KebabAction } from '@console/internal/components/utils/kebab'; import { asAccessReview, RequireCreatePermission } from '@console/internal/components/utils/rbac'; import { ResourceLink } from '@console/internal/components/utils/resource-link'; -import { EmptyBox, LoadingBox } from '@console/internal/components/utils/status-box'; +import { EmptyBox } from '@console/internal/components/utils/status-box'; import { ConsoleOperatorConfigModel, ConsolePluginModel } from '@console/internal/models'; import { ConsolePluginKind, @@ -155,7 +155,7 @@ export const ConsolePluginCSPStatus: React.FC = ({ ); }; -const ConsolePluginsTable: React.FC = ({ obj, rows, loaded }) => { +const ConsolePluginsTable: React.FC = ({ obj, rows }) => { const { t } = useTranslation(); const [sortBy, setSortBy] = React.useState(() => ({ @@ -219,9 +219,7 @@ const ConsolePluginsTable: React.FC = ({ obj, rows, lo const sortedRows = React.useMemo(() => rows.sort(compare), [rows, compare]); - return !loaded ? ( - - ) : ( + return ( {obj.spec?.managementState === 'Unmanaged' && ( = ({ obj, rows, lo }; const DevPluginsPage: React.FCC = (props) => { - const [pluginInfo, pluginInfoLoaded] = usePluginInfo(); + const pluginInfo = usePluginInfo(); const cspViolations = useSelector(({ UI }) => UI.get('pluginCSPViolations'), ); const rows = React.useMemo( () => - !pluginInfoLoaded - ? [] - : pluginInfo - .filter((plugin) => plugin?.status === 'loaded') - .map((plugin) => ({ - name: plugin.metadata.name, - version: plugin.metadata.version, - description: plugin.metadata?.customProperties?.console?.description, - enabled: plugin.enabled, - status: plugin.status, - hasCSPViolations: cspViolations[plugin.metadata.name] ?? false, - })), - [pluginInfo, pluginInfoLoaded, cspViolations], + pluginInfo + .filter((plugin) => plugin?.status === 'loaded') + .map((plugin) => ({ + name: plugin.metadata.name, + version: plugin.metadata.version, + description: plugin.metadata?.customProperties?.console?.description, + enabled: plugin.enabled, + status: plugin.status, + hasCSPViolations: cspViolations[plugin.metadata.name] ?? false, + })), + [pluginInfo, cspViolations], ); - return ; + return ; }; const PluginsPage: React.FC = (props) => { - const [pluginInfo] = usePluginInfo(); + const pluginInfo = usePluginInfo(); const [consolePlugins, consolePluginsLoaded] = useK8sWatchResource({ isList: true, kind: referenceForModel(ConsolePluginModel), @@ -368,7 +364,7 @@ const PluginsPage: React.FC = (props) => { }; }); }, [consolePluginsLoaded, consolePlugins, pluginInfo, enabledPlugins, cspViolations]); - return ; + return ; }; const ConsoleOperatorConfigPluginsPage: React.FC = developmentMode @@ -423,7 +419,7 @@ export type ConsolePluginTableRow = { name: string; version?: string; description?: string; - status: DynamicPluginInfo['status']; + status: PluginInfoEntry['status']; enabled: boolean; errorMessage?: string; hasCSPViolations?: boolean; @@ -437,7 +433,6 @@ type TableColumn = { type ConsolePluginsTableProps = ConsoleOperatorConfigPageProps & { rows: ConsolePluginTableRow[]; - loaded: boolean; }; type ConsolePluginStatusProps = { diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx index 5ea93791808..05eef0ccf07 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx @@ -6,7 +6,7 @@ import { DASH } from '@console/shared/src/constants'; const ConsolePluginDescriptionDetail: React.FC = ({ obj }) => { const pluginName = React.useMemo(() => obj?.metadata?.name, [obj?.metadata?.name]); - const [pluginInfoEntries] = usePluginInfo(); + const pluginInfoEntries = usePluginInfo(); const pluginInfo = React.useMemo( () => pluginInfoEntries.find((entry) => diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx index 286d3e3a08c..1487b4e8d98 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx @@ -9,7 +9,7 @@ import { } from './ConsoleOperatorConfig'; const ConsolePluginEnabledStatusDetail: React.FC = ({ obj }) => { - const [pluginInfoEntries] = usePluginInfo(); + const pluginInfoEntries = usePluginInfo(); const { consoleOperatorConfig, consoleOperatorConfigLoaded } = useConsoleOperatorConfigData(); const pluginName = React.useMemo(() => obj?.metadata?.name, [obj?.metadata?.name]); diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx index b665f0e5ed0..44fa62f0871 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx @@ -5,7 +5,7 @@ import { DASH } from '@console/shared/src/constants'; import { ConsolePluginStatus } from './ConsoleOperatorConfig'; const ConsolePluginStatusDetail: React.FC = ({ obj }) => { - const [pluginInfoEntries] = usePluginInfo(); + const pluginInfoEntries = usePluginInfo(); const pluginName = React.useMemo(() => obj?.metadata?.name, [obj?.metadata?.name]); const pluginInfo = React.useMemo( diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginVersionDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginVersionDetail.tsx index 9ced9ec6844..a9668deb465 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginVersionDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginVersionDetail.tsx @@ -4,7 +4,7 @@ import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo'; import { DASH } from '@console/shared/src/constants'; const ConsolePluginVersionDetail: React.FC = ({ obj }) => { - const [pluginInfoEntries] = usePluginInfo(); + const pluginInfoEntries = usePluginInfo(); const pluginName = React.useMemo(() => obj?.metadata?.name, [obj?.metadata?.name]); diff --git a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx index 5c1ee5d508e..22756e144ed 100644 --- a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx +++ b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx @@ -14,7 +14,7 @@ import NotLoadedDynamicPlugins from './NotLoadedDynamicPlugins'; const DynamicPluginsPopover: React.FC = ({ consolePlugins }) => { const { t } = useTranslation(); - const [pluginInfoEntries] = usePluginInfo(); + const pluginInfoEntries = usePluginInfo(); const cspViolations = useSelector(({ UI }) => UI.get('pluginCSPViolations'), ); diff --git a/frontend/packages/console-plugin-sdk/src/api/usePluginInfo.ts b/frontend/packages/console-plugin-sdk/src/api/usePluginInfo.ts index 1931e5d968b..f6d1b68bf5d 100644 --- a/frontend/packages/console-plugin-sdk/src/api/usePluginInfo.ts +++ b/frontend/packages/console-plugin-sdk/src/api/usePluginInfo.ts @@ -13,7 +13,7 @@ import { subscribeToDynamicPlugins } from './pluginSubscriptionService'; * * ```ts * const Example = () => { - * const [pluginInfoEntries, allPluginsProcessed] = usePluginInfo(); + * const pluginInfoEntries = usePluginInfo(); * // process plugin entries and render your component * }; * ``` @@ -22,19 +22,17 @@ import { subscribeToDynamicPlugins } from './pluginSubscriptionService'; * * @returns Console dynamic plugin runtime information. */ -export const usePluginInfo = (): [DynamicPluginInfo[], boolean] => { +export const usePluginInfo = (): DynamicPluginInfo[] => { const forceRender = useForceRender(); const isMountedRef = useRef(true); const unsubscribeRef = useRef(null); const pluginInfoEntriesRef = useRef([]); - const allPluginsProcessedRef = useRef(false); const trySubscribe = useCallback(() => { if (unsubscribeRef.current === null) { unsubscribeRef.current = subscribeToDynamicPlugins((pluginInfoEntries) => { pluginInfoEntriesRef.current = pluginInfoEntries; - allPluginsProcessedRef.current = pluginInfoEntries.every((i) => i.status !== 'pending'); isMountedRef.current && forceRender(); }); } @@ -57,5 +55,5 @@ export const usePluginInfo = (): [DynamicPluginInfo[], boolean] => { [tryUnsubscribe], ); - return [pluginInfoEntriesRef.current, allPluginsProcessedRef.current]; + return pluginInfoEntriesRef.current; }; diff --git a/frontend/public/components/about-modal.tsx b/frontend/public/components/about-modal.tsx index 564a44aa76f..ac544103140 100644 --- a/frontend/public/components/about-modal.tsx +++ b/frontend/public/components/about-modal.tsx @@ -32,7 +32,7 @@ import redHatFedoraWatermarkImg from '../imgs/red-hat-fedora-watermark.svg'; const DynamicPlugins: React.FC = () => { const { t } = useTranslation(); - const [pluginInfoEntries] = usePluginInfo(); + const pluginInfoEntries = usePluginInfo(); const [items, setItems] = React.useState([]); React.useEffect(() => { diff --git a/frontend/public/components/app-contents.tsx b/frontend/public/components/app-contents.tsx index 5f97cda6aa4..8bcacda8fec 100644 --- a/frontend/public/components/app-contents.tsx +++ b/frontend/public/components/app-contents.tsx @@ -155,10 +155,15 @@ const HorizontalPodRedirect = () => { }; const AppContents: React.FC<{}> = () => { - const [, allPluginsProcessed] = usePluginInfo(); + const pluginInfoEntries = usePluginInfo(); const location = useLocation(); const [pluginPageRoutes, inactivePluginPageRoutes] = usePluginRoutes(); + const allPluginsProcessed = React.useMemo( + () => pluginInfoEntries.every((i) => i?.status !== 'pending'), + [pluginInfoEntries], + ); + const contentRouter = ( {pluginPageRoutes} diff --git a/frontend/public/components/notification-drawer.tsx b/frontend/public/components/notification-drawer.tsx index 862b82084ec..4f3610b07de 100644 --- a/frontend/public/components/notification-drawer.tsx +++ b/frontend/public/components/notification-drawer.tsx @@ -14,7 +14,7 @@ import { useTranslation } from 'react-i18next'; import i18next from 'i18next'; import { useDispatch } from 'react-redux'; import { Link, NavigateFunction, useNavigate } from 'react-router-dom-v5-compat'; -import { isNotLoadedDynamicPluginInfo, DynamicPluginInfo } from '@console/plugin-sdk'; +import { DynamicPluginInfo } from '@console/plugin-sdk'; import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo'; import * as UIActions from '@console/internal/actions/ui'; import { resourcePath } from '@console/internal/components/utils/resource-link'; @@ -162,9 +162,7 @@ const getUpdateNotificationEntries = ( const newerChannelVersion = splitClusterVersionChannel(newerChannel)?.version; const entries = []; - const failedPlugins = pluginInfoEntries - .filter(isNotLoadedDynamicPluginInfo) - .filter((plugin) => plugin.status === 'failed'); + const failedPlugins = pluginInfoEntries.filter((plugin) => plugin?.status === 'failed'); if (!_.isEmpty(updateData)) { entries.push( @@ -245,7 +243,7 @@ export const NotificationDrawer: FC = ({ const { t } = useTranslation(); const clusterID = getClusterID(useClusterVersion()); const showServiceLevelNotification = useShowServiceLevelNotifications(clusterID); - const [pluginInfoEntries] = usePluginInfo(); + const pluginInfoEntries = usePluginInfo(); const dispatch = useDispatch(); const clusterVersion: ClusterVersionKind = useClusterVersion(); const [alerts, , loadError] = useNotificationAlerts(); From 74759699c6098d35459b4697cb130cb829dda68f Mon Sep 17 00:00:00 2001 From: logonoff Date: Thu, 20 Nov 2025 08:36:47 -0500 Subject: [PATCH 06/14] CONSOLE-3769: Remove null checks from `DynamicPluginInfo` because we know it will never be null --- .../components/console-operator/ConsoleOperatorConfig.tsx | 6 +++--- .../console-operator/ConsolePluginDescriptionDetail.tsx | 2 +- .../console-operator/ConsolePluginEnabledStatusDetail.tsx | 2 +- .../console-operator/ConsolePluginStatusDetail.tsx | 2 +- .../console-operator/ConsolePluginVersionDetail.tsx | 2 +- .../DynamicPluginsPopover.tsx | 4 ++-- .../console-app/src/hooks/useCSPViolationDetector.tsx | 2 +- frontend/public/components/about-modal.tsx | 2 +- frontend/public/components/app-contents.tsx | 2 +- frontend/public/components/notification-drawer.tsx | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx b/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx index f9cdce00c73..3d133a772ad 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsoleOperatorConfig.tsx @@ -302,7 +302,7 @@ const DevPluginsPage: React.FCC = (props) => { const rows = React.useMemo( () => pluginInfo - .filter((plugin) => plugin?.status === 'loaded') + .filter((plugin) => plugin.status === 'loaded') .map((plugin) => ({ name: plugin.metadata.name, version: plugin.metadata.version, @@ -336,10 +336,10 @@ const PluginsPage: React.FC = (props) => { const pluginName = plugin?.metadata?.name; const enabled = enabledPlugins.includes(pluginName); const loadedPluginInfo = pluginInfo - .filter((p) => p?.status === 'loaded') + .filter((p) => p.status === 'loaded') .find((i) => i?.metadata?.name === pluginName); const notLoadedPluginInfo = pluginInfo - .filter((p) => p?.status !== 'loaded') + .filter((p) => p.status !== 'loaded') .find((i) => i?.pluginName === pluginName); if (loadedPluginInfo) { return { diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx index 05eef0ccf07..362b22dbae3 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginDescriptionDetail.tsx @@ -10,7 +10,7 @@ const ConsolePluginDescriptionDetail: React.FC = ({ o const pluginInfo = React.useMemo( () => pluginInfoEntries.find((entry) => - entry?.status === 'loaded' + entry.status === 'loaded' ? entry.metadata.name === pluginName : entry.pluginName === pluginName, ), diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx index 1487b4e8d98..a3e514da01f 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginEnabledStatusDetail.tsx @@ -17,7 +17,7 @@ const ConsolePluginEnabledStatusDetail: React.FC = ({ const pluginInfo = React.useMemo( () => pluginInfoEntries.find((entry) => - entry?.status === 'loaded' + entry.status === 'loaded' ? entry.metadata.name === pluginName : entry.pluginName === pluginName, ), diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx index 44fa62f0871..3c01d98f587 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginStatusDetail.tsx @@ -11,7 +11,7 @@ const ConsolePluginStatusDetail: React.FC = ({ obj }) const pluginInfo = React.useMemo( () => pluginInfoEntries.find((entry) => - entry?.status === 'loaded' + entry.status === 'loaded' ? entry.metadata.name === pluginName : entry.pluginName === pluginName, ), diff --git a/frontend/packages/console-app/src/components/console-operator/ConsolePluginVersionDetail.tsx b/frontend/packages/console-app/src/components/console-operator/ConsolePluginVersionDetail.tsx index a9668deb465..6b3ecee366c 100644 --- a/frontend/packages/console-app/src/components/console-operator/ConsolePluginVersionDetail.tsx +++ b/frontend/packages/console-app/src/components/console-operator/ConsolePluginVersionDetail.tsx @@ -11,7 +11,7 @@ const ConsolePluginVersionDetail: React.FC = ({ obj } const pluginInfo = React.useMemo( () => pluginInfoEntries.find((entry) => - entry?.status === 'loaded' + entry.status === 'loaded' ? entry.metadata.name === pluginName : entry.pluginName === pluginName, ), diff --git a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx index 22756e144ed..cc8b6805719 100644 --- a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx +++ b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/DynamicPluginsPopover.tsx @@ -19,11 +19,11 @@ const DynamicPluginsPopover: React.FC = ({ consolePl UI.get('pluginCSPViolations'), ); const notLoadedDynamicPluginInfo = pluginInfoEntries.filter( - (plugin) => plugin?.status !== 'loaded', + (plugin) => plugin.status !== 'loaded', ); const failedPlugins = notLoadedDynamicPluginInfo.filter((plugin) => plugin.status === 'failed'); const pendingPlugins = notLoadedDynamicPluginInfo.filter((plugin) => plugin.status === 'pending'); - const loadedPlugins = pluginInfoEntries.filter((plugin) => plugin?.status === 'loaded'); + const loadedPlugins = pluginInfoEntries.filter((plugin) => plugin.status === 'loaded'); const loadedPluginsWithCSPViolations = loadedPlugins.filter( (plugin) => cspViolations[plugin.metadata.name] ?? false, ); diff --git a/frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx b/frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx index c76c6f9dc6e..9f04eac1b08 100644 --- a/frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx +++ b/frontend/packages/console-app/src/hooks/useCSPViolationDetector.tsx @@ -103,7 +103,7 @@ export const useCSPViolationDetector = () => { const pluginInfo = pluginStore .getPluginInfo() .find((entry) => - entry?.status === 'loaded' + entry.status === 'loaded' ? entry.metadata.name === pluginName : entry.pluginName === pluginName, ); diff --git a/frontend/public/components/about-modal.tsx b/frontend/public/components/about-modal.tsx index ac544103140..4b438f55297 100644 --- a/frontend/public/components/about-modal.tsx +++ b/frontend/public/components/about-modal.tsx @@ -36,7 +36,7 @@ const DynamicPlugins: React.FC = () => { const [items, setItems] = React.useState([]); React.useEffect(() => { - const loadedPlugins = pluginInfoEntries.filter((plugin) => plugin?.status === 'loaded'); + const loadedPlugins = pluginInfoEntries.filter((plugin) => plugin.status === 'loaded'); const sortedLoadedPlugins = loadedPlugins.sort((a, b) => a.metadata.name.localeCompare(b.metadata.name), ); diff --git a/frontend/public/components/app-contents.tsx b/frontend/public/components/app-contents.tsx index 8bcacda8fec..3a53badc15c 100644 --- a/frontend/public/components/app-contents.tsx +++ b/frontend/public/components/app-contents.tsx @@ -160,7 +160,7 @@ const AppContents: React.FC<{}> = () => { const [pluginPageRoutes, inactivePluginPageRoutes] = usePluginRoutes(); const allPluginsProcessed = React.useMemo( - () => pluginInfoEntries.every((i) => i?.status !== 'pending'), + () => pluginInfoEntries.every((i) => i.status !== 'pending'), [pluginInfoEntries], ); diff --git a/frontend/public/components/notification-drawer.tsx b/frontend/public/components/notification-drawer.tsx index 4f3610b07de..bde6d9ada5f 100644 --- a/frontend/public/components/notification-drawer.tsx +++ b/frontend/public/components/notification-drawer.tsx @@ -162,7 +162,7 @@ const getUpdateNotificationEntries = ( const newerChannelVersion = splitClusterVersionChannel(newerChannel)?.version; const entries = []; - const failedPlugins = pluginInfoEntries.filter((plugin) => plugin?.status === 'failed'); + const failedPlugins = pluginInfoEntries.filter((plugin) => plugin.status === 'failed'); if (!_.isEmpty(updateData)) { entries.push( From 4087fcb1512bffd885f33f32d62a1139edde98c4 Mon Sep 17 00:00:00 2001 From: logonoff Date: Sat, 22 Nov 2025 16:34:25 -0500 Subject: [PATCH 07/14] CONSOLE-3769: Remove usage of legacy `Extension` --- .../src/__tests__/plugin-test-utils.ts | 7 +++- .../__tests__/coderef-resolver.spec.ts | 14 +++---- .../src/extensions/actions.ts | 10 ++--- .../src/extensions/add-actions.ts | 6 +-- .../src/extensions/alerts.ts | 6 +-- .../src/extensions/breadcrumbs.ts | 4 +- .../src/extensions/catalog.ts | 20 ++++++---- .../src/extensions/cluster-configuration.ts | 10 +++-- .../src/extensions/cluster-overview.ts | 18 +++++---- .../src/extensions/cluster-settings.ts | 5 +-- .../src/extensions/context-providers.ts | 4 +- .../src/extensions/create-project-modal.ts | 4 +- .../src/extensions/create-resource.ts | 4 +- .../src/extensions/dashboard-data-source.ts | 4 +- .../src/extensions/dashboards.ts | 38 ++++++++++--------- .../src/extensions/details-item.ts | 4 +- .../src/extensions/feature-flags.ts | 9 +++-- .../src/extensions/file-upload.ts | 5 ++- .../src/extensions/guided-tour.ts | 8 +--- .../src/extensions/horizontal-nav-tabs.ts | 6 +-- .../src/extensions/import-environments.ts | 4 +- .../src/extensions/navigation.ts | 20 +++++----- .../src/extensions/node.ts | 5 ++- .../src/extensions/notification-alert.ts | 5 ++- .../src/extensions/pages.ts | 13 ++++--- .../src/extensions/perspectives.ts | 4 +- .../src/extensions/project-overview.ts | 9 +++-- .../src/extensions/pvc.ts | 13 ++++--- .../src/extensions/redux.ts | 4 +- .../src/extensions/resource-metadata.ts | 4 +- .../extensions/storage-class-provisioner.ts | 3 +- .../src/extensions/storage-provider.ts | 4 +- .../src/extensions/telemetry.ts | 4 +- .../src/extensions/topology-details.ts | 16 ++++---- .../src/extensions/topology.ts | 26 +++++++------ .../src/extensions/user-preferences.ts | 6 +-- .../src/extensions/yaml-templates.ts | 4 +- .../runtime/__tests__/plugin-loader.spec.ts | 6 +-- .../src/utils/test-utils.ts | 4 +- .../__tests__/ExtensionValidator.spec.ts | 6 +-- .../src/__tests__/store.spec.ts | 20 +++++----- .../codegen/__tests__/active-plugins.spec.ts | 21 +++++----- .../utils/__tests__/extension-i18n.spec.ts | 6 +-- 43 files changed, 210 insertions(+), 183 deletions(-) diff --git a/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts b/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts index abfe56f5f85..61b5be46f29 100644 --- a/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts +++ b/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts @@ -1,13 +1,16 @@ import { List as ImmutableList } from 'immutable'; import * as _ from 'lodash'; -import { Extension, PluginStore } from '@console/plugin-sdk'; +import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; +import { PluginStore } from '@console/plugin-sdk'; import { loadActivePluginsForTestPurposes } from '@console/plugin-sdk/src/codegen/active-plugins'; import { resolvePluginPackages } from '@console/plugin-sdk/src/codegen/plugin-resolver'; const testedPlugins = loadActivePluginsForTestPurposes(resolvePluginPackages()); const testedPluginStore = new PluginStore(testedPlugins); -export const testedExtensions = ImmutableList(testedPluginStore.getExtensions()); +export const testedExtensions = ImmutableList( + testedPluginStore.getExtensions(), +); export const getDuplicates = (values: string[]) => { return _.transform( diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts b/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts index 2cacd573af9..da5cff01364 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts @@ -1,5 +1,5 @@ import * as _ from 'lodash'; -import { Extension, EncodedCodeRef, CodeRef } from '../../types'; +import { ExtensionDeclaration, EncodedCodeRef, CodeRef } from '../../types'; import { getExecutableCodeRefMock, getEntryModuleMocks, @@ -208,7 +208,7 @@ describe('loadReferencedObject', () => { describe('resolveEncodedCodeRefs', () => { it('replaces encoded code references with CodeRef functions', async () => { - const extensions: Extension[] = [ + const extensions: ExtensionDeclaration[] = [ { type: 'Foo', properties: { @@ -247,7 +247,7 @@ describe('resolveEncodedCodeRefs', () => { }); it('clones the provided extensions array and its elements', () => { - const extensions: Extension[] = [ + const extensions: ExtensionDeclaration[] = [ { type: 'Foo', properties: { test: true } }, { type: 'Bar', properties: { test: [1] } }, ]; @@ -274,7 +274,7 @@ describe('resolveEncodedCodeRefs', () => { describe('resolveExtension', () => { it('replaces CodeRef functions with referenced objects', async () => { - const extensions: Extension[] = [ + const extensions: ExtensionDeclaration[] = [ { type: 'Foo', properties: { @@ -309,7 +309,7 @@ describe('resolveExtension', () => { }); it('logs a warning if the referenced object resolves to null or undefined', async () => { - const extensions: Extension[] = [ + const extensions: ExtensionDeclaration[] = [ { type: 'Foo', properties: { @@ -343,7 +343,7 @@ describe('resolveExtension', () => { }); it('returns the same extension instance', async () => { - const extensions: Extension[] = [ + const extensions: ExtensionDeclaration[] = [ { type: 'Foo', properties: { test: true }, @@ -361,7 +361,7 @@ describe('resolveExtension', () => { it('continuously reject code refs which have failed to resolve', async () => { const errorCodeRef = getErrorExecutableCodeRefMock(); - const extension: Extension = { + const extension: ExtensionDeclaration = { type: 'Foo', properties: { test: true, qux: errorCodeRef }, }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/actions.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/actions.ts index 62f30909966..65a5fdf4a6b 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/actions.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/actions.ts @@ -1,7 +1,7 @@ import * as React from 'react'; import { ExtensionHook, ExtensionK8sKindVersionModel } from '../api/common-types'; import { ActionContext } from '../api/internal-types'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; import { AccessReviewResourceAttributes } from './console-types'; /** ActionProvider contributes a hook that returns list of actions for specific context */ @@ -74,19 +74,19 @@ export type SupportedActionExtensions = // Type Guards -export const isActionProvider = (e: Extension): e is ActionProvider => { +export const isActionProvider = (e: ExtensionDeclaration): e is ActionProvider => { return e.type === 'console.action/provider'; }; -export const isResourceActionProvider = (e: Extension): e is ResourceActionProvider => { +export const isResourceActionProvider = (e: ExtensionDeclaration): e is ResourceActionProvider => { return e.type === 'console.action/resource-provider'; }; -export const isActionGroup = (e: Extension): e is ActionGroup => { +export const isActionGroup = (e: ExtensionDeclaration): e is ActionGroup => { return e.type === 'console.action/group'; }; -export const isActionFilter = (e: Extension): e is ActionFilter => { +export const isActionFilter = (e: ExtensionDeclaration): e is ActionFilter => { return e.type === 'console.action/filter'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/add-actions.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/add-actions.ts index 1253e4f4499..38664ebc9d5 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/add-actions.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/add-actions.ts @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; import { AccessReviewResourceAttributes } from './console-types'; /** This extension allows plugins to contribute an add action item to the add page of developer perspective. @@ -48,10 +48,10 @@ export type AddActionGroup = ExtensionDeclaration< // Type guards -export const isAddAction = (e: Extension): e is AddAction => { +export const isAddAction = (e: ExtensionDeclaration): e is AddAction => { return e.type === 'dev-console.add/action'; }; -export const isAddActionGroup = (e: Extension): e is AddActionGroup => { +export const isAddActionGroup = (e: ExtensionDeclaration): e is AddActionGroup => { return e.type === 'dev-console.add/action-group'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/alerts.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/alerts.ts index a544c15a93b..3a4900328e7 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/alerts.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/alerts.ts @@ -1,5 +1,5 @@ import { Rule, PrometheusRulesResponse } from '../api/common-types'; -import { CodeRef, Extension, ExtensionDeclaration } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; type AlertingRulesFetch = (namespace?: string) => Promise; @@ -31,8 +31,8 @@ export type AlertingRuleChartExtension = ExtensionDeclaration< // Type guards -export const isAlertingRulesSource = (e: Extension): e is AlertingRulesSourceExtension => +export const isAlertingRulesSource = (e: ExtensionDeclaration): e is AlertingRulesSourceExtension => e.type === 'console.alerts/rules-source'; -export const isAlertingRuleChart = (e: Extension): e is AlertingRuleChartExtension => +export const isAlertingRuleChart = (e: ExtensionDeclaration): e is AlertingRuleChartExtension => e.type === 'console.alerts/rules-chart'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/breadcrumbs.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/breadcrumbs.ts index b482531ed7b..7e6985e461b 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/breadcrumbs.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/breadcrumbs.ts @@ -1,5 +1,5 @@ import { K8sModel } from '../api/common-types'; -import { CodeRef, Extension, ExtensionDeclaration } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; export type DetailsPageBreadCrumbsHook = ( kind: K8sModel, @@ -22,5 +22,5 @@ export type DetailPageBreadCrumbs = ExtensionDeclaration< // Type guards -export const isDetailPageBreadCrumbs = (e: Extension): e is DetailPageBreadCrumbs => +export const isDetailPageBreadCrumbs = (e: ExtensionDeclaration): e is DetailPageBreadCrumbs => e.type === 'dev-console.detailsPage/breadcrumbs'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/catalog.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/catalog.ts index 83a205fdb65..39afe2507c8 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/catalog.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/catalog.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import { ExtensionHook } from '../api/common-types'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; /** This extension allows plugins to contribute a new type of catalog item. For example, a Helm plugin can define a new catalog item type as HelmCharts that it wants to contribute to the Software Catalog. */ @@ -109,27 +109,33 @@ export type SupportedCatalogExtensions = // Type guards -export const isCatalogItemType = (e: Extension): e is CatalogItemType => { +export const isCatalogItemType = (e: ExtensionDeclaration): e is CatalogItemType => { return e.type === 'console.catalog/item-type'; }; -export const isCatalogItemTypeMetadata = (e: Extension): e is CatalogItemTypeMetadata => { +export const isCatalogItemTypeMetadata = ( + e: ExtensionDeclaration, +): e is CatalogItemTypeMetadata => { return e.type === 'console.catalog/item-type-metadata'; }; -export const isCatalogItemProvider = (e: Extension): e is CatalogItemProvider => { +export const isCatalogItemProvider = (e: ExtensionDeclaration): e is CatalogItemProvider => { return e.type === 'console.catalog/item-provider'; }; -export const isCatalogItemFilter = (e: Extension): e is CatalogItemFilter => { +export const isCatalogItemFilter = (e: ExtensionDeclaration): e is CatalogItemFilter => { return e.type === 'console.catalog/item-filter'; }; -export const isCatalogItemMetadataProvider = (e: Extension): e is CatalogItemMetadataProvider => { +export const isCatalogItemMetadataProvider = ( + e: ExtensionDeclaration, +): e is CatalogItemMetadataProvider => { return e.type === 'console.catalog/item-metadata'; }; -export const isCatalogCategoriesProvider = (e: Extension): e is CatalogCategoriesProvider => { +export const isCatalogCategoriesProvider = ( + e: ExtensionDeclaration, +): e is CatalogCategoriesProvider => { return e.type === 'console.catalog/categories-provider'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-configuration.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-configuration.ts index 92ae35094d1..51eb6287786 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-configuration.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-configuration.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import { JSONSchema7Type } from 'json-schema'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; import { AccessReviewResourceAttributes } from './console-types'; export type Resource = { @@ -114,10 +114,14 @@ export type ClusterConfigurationItem = ExtensionDeclaration< // Type guards -export const isClusterConfigurationGroup = (e: Extension): e is ClusterConfigurationGroup => { +export const isClusterConfigurationGroup = ( + e: ExtensionDeclaration, +): e is ClusterConfigurationGroup => { return e.type === 'console.cluster-configuration/group'; }; -export const isClusterConfigurationItem = (e: Extension): e is ClusterConfigurationItem => { +export const isClusterConfigurationItem = ( + e: ExtensionDeclaration, +): e is ClusterConfigurationItem => { return e.type === 'console.cluster-configuration/item'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-overview.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-overview.ts index 8938c5b2cb8..5b4a261cca3 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-overview.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-overview.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import { OverviewDetailItemProps } from '@openshift-console/plugin-shared/src'; -import { CodeRef, Extension, ExtensionDeclaration } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; import { Humanize, TopConsumerPopoverProps, QueryWithDescription } from './console-types'; /** Adds a new inventory item into cluster overview page. */ @@ -77,20 +77,22 @@ export type CustomOverviewDetailItem = ExtensionDeclaration< // Type guards -export const isClusterOverviewInventoryItem = (e: Extension): e is ClusterOverviewInventoryItem => - e.type === 'console.cluster-overview/inventory-item'; +export const isClusterOverviewInventoryItem = ( + e: ExtensionDeclaration, +): e is ClusterOverviewInventoryItem => e.type === 'console.cluster-overview/inventory-item'; export const isClusterOverviewUtilizationItem = ( - e: Extension, + e: ExtensionDeclaration, ): e is ClusterOverviewUtilizationItem => e.type === 'console.cluster-overview/utilization-item'; export const isClusterOverviewMultilineUtilizationItem = ( - e: Extension, + e: ExtensionDeclaration, ): e is ClusterOverviewMultilineUtilizationItem => e.type === 'console.cluster-overview/multiline-utilization-item'; -export const isOverviewDetailItem = (e: Extension): e is OverviewDetailItem => +export const isOverviewDetailItem = (e: ExtensionDeclaration): e is OverviewDetailItem => e.type === 'console.dashboards/overview/detail/item'; -export const isCustomOverviewDetailItem = (e: Extension): e is CustomOverviewDetailItem => - e.type === 'console.dashboards/custom/overview/detail/item'; +export const isCustomOverviewDetailItem = ( + e: ExtensionDeclaration, +): e is CustomOverviewDetailItem => e.type === 'console.dashboards/custom/overview/detail/item'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-settings.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-settings.ts index e8c3a881140..7db62d60bbb 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-settings.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-settings.ts @@ -1,6 +1,5 @@ import { ExtensionK8sModel } from '../api/common-types'; -import { Extension, ExtensionDeclaration } from '../types'; - +import { ExtensionDeclaration } from '../types'; /** This extension identifies a resource used to manage the configuration of the cluster. A link to the resource will be added to the Administration - Cluster Settings - Configuration page. */ export type ClusterGlobalConfig = ExtensionDeclaration< @@ -19,5 +18,5 @@ export type ClusterGlobalConfig = ExtensionDeclaration< // Type guards -export const isClusterGlobalConfig = (e: Extension): e is ClusterGlobalConfig => +export const isClusterGlobalConfig = (e: ExtensionDeclaration): e is ClusterGlobalConfig => e.type === 'console.global-config'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/context-providers.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/context-providers.ts index 64be817a1fc..423fa32f387 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/context-providers.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/context-providers.ts @@ -1,5 +1,5 @@ import { Provider } from 'react'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; /** Adds new React context provider to Console application root. */ export type ContextProvider = ExtensionDeclaration< @@ -14,5 +14,5 @@ export type ContextProvider = ExtensionDeclaration< // Type guards -export const isContextProvider = (e: Extension): e is ContextProvider => +export const isContextProvider = (e: ExtensionDeclaration): e is ContextProvider => e.type === 'console.context-provider'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-project-modal.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-project-modal.ts index 7d9798f3f1e..1da9950ee7b 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-project-modal.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-project-modal.ts @@ -1,5 +1,5 @@ import { ModalComponent } from '../app/modal-support/ModalProvider'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; import { K8sResourceCommon } from './console-types'; export type CreateProjectModalProps = { @@ -15,5 +15,5 @@ export type CreateProjectModal = ExtensionDeclaration< } >; -export const isCreateProjectModal = (e: Extension): e is CreateProjectModal => +export const isCreateProjectModal = (e: ExtensionDeclaration): e is CreateProjectModal => e.type === 'console.create-project-modal'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-resource.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-resource.ts index 68f1d756a69..4995d95cd97 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-resource.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-resource.ts @@ -1,5 +1,5 @@ import { ExtensionK8sModel } from '../api/common-types'; -import { CodeRef, Extension, ExtensionDeclaration } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; /** Properties of custom CreateResource component. */ export type CreateResourceComponentProps = { namespace?: string }; @@ -18,5 +18,5 @@ export type CreateResource = ExtensionDeclaration< // Type guards -export const isCreateResource = (e: Extension): e is CreateResource => +export const isCreateResource = (e: ExtensionDeclaration): e is CreateResource => e.type === 'console.resource/create'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboard-data-source.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboard-data-source.ts index 2594f3cd2bf..6e1313c4b9b 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboard-data-source.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboard-data-source.ts @@ -1,4 +1,4 @@ -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; export type DataSource = ExtensionDeclaration< 'console.dashboards/datasource', @@ -9,7 +9,7 @@ export type DataSource = ExtensionDeclaration< } >; -export const isDataSource = (e: Extension): e is DataSource => { +export const isDataSource = (e: ExtensionDeclaration): e is DataSource => { return e.type === 'console.dashboards/datasource'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboards.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboards.ts index e9eca30d8fd..f00f8243d35 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboards.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboards.ts @@ -1,6 +1,6 @@ import { K8sModel } from '../api/common-types'; import { Fetch } from '../api/internal-types'; -import { Extension, ExtensionDeclaration, CodeRef, ResolvedExtension } from '../types'; +import { ExtensionDeclaration, CodeRef, ResolvedExtension } from '../types'; import { K8sResourceCommon, PrometheusResponse, @@ -218,75 +218,77 @@ export type DashboardsOverviewPrometheusActivity = ExtensionDeclaration< // Type guards -export const isDashboardsTab = (e: Extension): e is DashboardsTab => +export const isDashboardsTab = (e: ExtensionDeclaration): e is DashboardsTab => e.type === 'console.dashboards/tab'; -export const isDashboardsCard = (e: Extension): e is DashboardsCard => +export const isDashboardsCard = (e: ExtensionDeclaration): e is DashboardsCard => e.type === 'console.dashboards/card'; export const isDashboardsOverviewHealthPrometheusSubsystem = ( - e: Extension, + e: ExtensionDeclaration, ): e is DashboardsOverviewHealthPrometheusSubsystem => e.type === 'console.dashboards/overview/health/prometheus'; export const isResolvedDashboardsOverviewHealthPrometheusSubsystem = ( - e: Extension, + e: ExtensionDeclaration, ): e is ResolvedExtension => e.type === 'console.dashboards/overview/health/prometheus'; export const isDashboardsOverviewHealthURLSubsystem = ( - e: Extension, + e: ExtensionDeclaration, ): e is DashboardsOverviewHealthURLSubsystem => e.type === 'console.dashboards/overview/health/url'; export const isResolvedDashboardsOverviewHealthURLSubsystem = ( - e: Extension, + e: ExtensionDeclaration, ): e is ResolvedExtension => e.type === 'console.dashboards/overview/health/url'; export const isDashboardsOverviewHealthResourceSubsystem = ( - e: Extension, + e: ExtensionDeclaration, ): e is DashboardsOverviewHealthResourceSubsystem => e.type === 'console.dashboards/overview/health/resource'; export const isResolvedDashboardsOverviewHealthResourceSubsystem = ( - e: Extension, + e: ExtensionDeclaration, ): e is ResolvedExtension => e.type === 'console.dashboards/overview/health/resource'; export const isDashboardsOverviewHealthOperator = ( - e: Extension, + e: ExtensionDeclaration, ): e is DashboardsOverviewHealthOperator => e.type === 'console.dashboards/overview/health/operator'; export const isResolvedDashboardsOverviewHealthOperator = ( - e: Extension, + e: ExtensionDeclaration, ): e is ResolvedExtension => e.type === 'console.dashboards/overview/health/operator'; -export const isDashboardsInventoryItemGroup = (e: Extension): e is DashboardsInventoryItemGroup => +export const isDashboardsInventoryItemGroup = ( + e: ExtensionDeclaration, +): e is DashboardsInventoryItemGroup => e.type === 'console.dashboards/overview/inventory/item/group'; export const isDashboardsOverviewInventoryItem = ( - e: Extension, + e: ExtensionDeclaration, ): e is DashboardsOverviewInventoryItem => e.type === 'console.dashboards/overview/inventory/item'; export const isDashboardsOverviewInventoryItemReplacement = ( - e: Extension, + e: ExtensionDeclaration, ): e is DashboardsOverviewInventoryItemReplacement => e.type === 'console.dashboards/overview/inventory/item/replacement'; export const isDashboardsProjectOverviewInventoryItem = ( - e: Extension, + e: ExtensionDeclaration, ): e is DashboardsProjectOverviewInventoryItem => e.type === 'console.dashboards/project/overview/item'; export const isDashboardsOverviewResourceActivity = ( - e: Extension, + e: ExtensionDeclaration, ): e is DashboardsOverviewResourceActivity => e.type === 'console.dashboards/overview/activity/resource'; export const isDashboardsOverviewPrometheusActivity = ( - e: Extension, + e: ExtensionDeclaration, ): e is DashboardsOverviewPrometheusActivity => e.type === 'console.dashboards/overview/prometheus/activity/resource'; @@ -297,7 +299,7 @@ export type DashboardsOverviewHealthSubsystem = | DashboardsOverviewHealthOperator; export const isDashboardsOverviewHealthSubsystem = ( - e: Extension, + e: ExtensionDeclaration, ): e is DashboardsOverviewHealthSubsystem => isDashboardsOverviewHealthURLSubsystem(e) || isDashboardsOverviewHealthPrometheusSubsystem(e) || diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/details-item.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/details-item.ts index 83dbc9feb8e..7780ad6d248 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/details-item.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/details-item.ts @@ -1,5 +1,5 @@ import { ExtensionK8sModel } from '../api/common-types'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; import { K8sResourceCommon } from './console-types'; export type DetailsItemColumn = 'right' | 'left'; @@ -62,7 +62,7 @@ export type DetailsItem = ExtensionDeclaration< } >; -export const isDetailsItem = (e: Extension): e is DetailsItem => +export const isDetailsItem = (e: ExtensionDeclaration): e is DetailsItem => e.type === 'console.resource/details-item'; export const isLeftDetailsItem = (e: DetailsItem): e is DetailsItem => diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/feature-flags.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/feature-flags.ts index d6e3b027d36..cf29f182663 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/feature-flags.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/feature-flags.ts @@ -1,5 +1,5 @@ import { ExtensionK8sModel } from '../api/common-types'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; /** Gives full control over Console feature flags. */ export type FeatureFlag = ExtensionDeclaration< @@ -32,12 +32,13 @@ export type FeatureFlagHookProvider = ExtensionDeclaration< // Type guards -export const isFeatureFlag = (e: Extension): e is FeatureFlag => e.type === 'console.flag'; +export const isFeatureFlag = (e: ExtensionDeclaration): e is FeatureFlag => + e.type === 'console.flag'; -export const isModelFeatureFlag = (e: Extension): e is ModelFeatureFlag => +export const isModelFeatureFlag = (e: ExtensionDeclaration): e is ModelFeatureFlag => e.type === 'console.flag/model'; -export const isFeatureFlagHookProvider = (e: Extension): e is FeatureFlagHookProvider => +export const isFeatureFlagHookProvider = (e: ExtensionDeclaration): e is FeatureFlagHookProvider => e.type === 'console.flag/hookProvider'; // Support types diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/file-upload.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/file-upload.ts index e4f2bb08d3e..65fb1bc3b1a 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/file-upload.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/file-upload.ts @@ -1,4 +1,4 @@ -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; /** This extension can be used to provide a handler for the file drop action on specific file extensions. */ export type FileUpload = ExtensionDeclaration< @@ -13,7 +13,8 @@ export type FileUpload = ExtensionDeclaration< // Type guards -export const isFileUpload = (e: Extension): e is FileUpload => e.type === 'console.file-upload'; +export const isFileUpload = (e: ExtensionDeclaration): e is FileUpload => + e.type === 'console.file-upload'; // Support types diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/guided-tour.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/guided-tour.ts index 1d97575419a..974bad6df0a 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/guided-tour.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/guided-tour.ts @@ -1,11 +1,7 @@ /* eslint-disable @typescript-eslint/naming-convention */ import type { TourDataType } from '@console/app/src/components/tour'; -import type { - Extension, - ExtensionDeclaration, - CodeRef, -} from '@console/dynamic-plugin-sdk/src/types'; +import type { ExtensionDeclaration, CodeRef } from '@console/dynamic-plugin-sdk/src/types'; // This extension is not part of the console dynamic plugin SDK public API. // It is intended for internal use only. Please do not use it. Pretty please? @@ -26,7 +22,7 @@ export type INTERNAL_DO_NOT_USE_GuidedTour = ExtensionDeclaration< /** @hidden */ export const INTERNAL_DO_NOT_USE_isGuidedTour = ( - e: Extension, + e: ExtensionDeclaration, ): e is INTERNAL_DO_NOT_USE_GuidedTour => { return e.type === 'INTERNAL_DO_NOT_USE.guided-tour'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/horizontal-nav-tabs.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/horizontal-nav-tabs.ts index b9721282be0..755d21a560c 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/horizontal-nav-tabs.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/horizontal-nav-tabs.ts @@ -1,5 +1,5 @@ import { ExtensionK8sKindVersionModel } from '../api/common-types'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; import { K8sResourceCommon } from './console-types'; export type PageComponentProps = { @@ -50,6 +50,6 @@ export type NavTab = ExtensionDeclaration< >; // Type Guards -export const isHorizontalNavTab = (e: Extension): e is HorizontalNavTab => +export const isHorizontalNavTab = (e: ExtensionDeclaration): e is HorizontalNavTab => e.type === 'console.tab/horizontalNav'; -export const isTab = (e: Extension): e is NavTab => e.type === 'console.tab'; +export const isTab = (e: ExtensionDeclaration): e is NavTab => e.type === 'console.tab'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/import-environments.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/import-environments.ts index ce4af504654..4eb8ca46319 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/import-environments.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/import-environments.ts @@ -1,4 +1,4 @@ -import { Extension, ExtensionDeclaration } from '../types'; +import { ExtensionDeclaration } from '../types'; export type ImageEnvironment = { /** Environment variable key */ @@ -28,6 +28,6 @@ export type ImportEnvironment = ExtensionDeclaration< // Type guards -export const isImportEnvironment = (e: Extension): e is ImportEnvironment => { +export const isImportEnvironment = (e: ExtensionDeclaration): e is ImportEnvironment => { return e.type === 'dev-console.import/environment'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/navigation.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/navigation.ts index 481c3135733..0353a351db3 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/navigation.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/navigation.ts @@ -1,5 +1,5 @@ import { ExtensionK8sModel } from '../api/common-types'; -import { Extension, ExtensionDeclaration } from '../types'; +import { ExtensionDeclaration } from '../types'; type NavItemProperties = { /** A unique identifier for this item. */ @@ -90,29 +90,29 @@ export type NavExtension = // Type guards -export const isHrefNavItem = (e: Extension): e is HrefNavItem => +export const isHrefNavItem = (e: ExtensionDeclaration): e is HrefNavItem => e.type === 'console.navigation/href'; -export const isResourceNSNavItem = (e: Extension): e is ResourceNSNavItem => +export const isResourceNSNavItem = (e: ExtensionDeclaration): e is ResourceNSNavItem => e.type === 'console.navigation/resource-ns'; -export const isResourceClusterNavItem = (e: Extension): e is ResourceClusterNavItem => +export const isResourceClusterNavItem = (e: ExtensionDeclaration): e is ResourceClusterNavItem => e.type === 'console.navigation/resource-cluster'; -export const isResourceNavItem = (e: Extension): e is ResourceNavItem => +export const isResourceNavItem = (e: ExtensionDeclaration): e is ResourceNavItem => isResourceNSNavItem(e) || isResourceClusterNavItem(e); -export const isSeparator = (e: Extension): e is Separator => +export const isSeparator = (e: ExtensionDeclaration): e is Separator => e.type === 'console.navigation/separator'; -export const isNavSection = (e: Extension): e is NavSection => +export const isNavSection = (e: ExtensionDeclaration): e is NavSection => e.type === 'console.navigation/section'; -export const isNavItem = (e: Extension): e is NavItem => +export const isNavItem = (e: ExtensionDeclaration): e is NavItem => isHrefNavItem(e) || isResourceNSNavItem(e) || isResourceClusterNavItem(e); -export const isNavItemOrSeparator = (e: Extension): e is NavItem | Separator => +export const isNavItemOrSeparator = (e: ExtensionDeclaration): e is NavItem | Separator => isNavItem(e) || isSeparator(e); -export const isNavExtension = (e: Extension): e is NavExtension => +export const isNavExtension = (e: ExtensionDeclaration): e is NavExtension => isNavItem(e) || isSeparator(e) || isNavSection(e); diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/node.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/node.ts index ad18c508a0f..d9ca798d501 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/node.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/node.ts @@ -1,5 +1,5 @@ import * as React from 'react'; -import { CodeRef, Extension, ExtensionDeclaration } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; import { NodeKind, ResourcesObject, WatchK8sResources, WatchK8sResults } from './console-types'; export type IsNodeStatusActive = ( @@ -27,4 +27,5 @@ export type NodeStatus = ExtensionD } >; -export const isNodeStatus = (e: Extension): e is NodeStatus => e.type === 'console.node/status'; +export const isNodeStatus = (e: ExtensionDeclaration): e is NodeStatus => + e.type === 'console.node/status'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/notification-alert.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/notification-alert.ts index fb0c494ebe9..b49088e86cf 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/notification-alert.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/notification-alert.ts @@ -1,6 +1,6 @@ import { Alert } from '../api/common-types'; import { LaunchModal } from '../app/modal-support/ModalProvider'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; /** This extension can be used to trigger a specific action when a specific Prometheus alert is observed by the Console based on its `rule.name` value. */ export type AlertAction = ExtensionDeclaration< @@ -15,4 +15,5 @@ export type AlertAction = ExtensionDeclaration< } >; -export const isAlertAction = (e: Extension): e is AlertAction => e.type === 'console.alert-action'; +export const isAlertAction = (e: ExtensionDeclaration): e is AlertAction => + e.type === 'console.alert-action'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pages.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pages.ts index fb4a7242459..cd79de2dacc 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pages.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pages.ts @@ -1,5 +1,5 @@ import { ExtensionK8sGroupKindModel, ExtensionK8sModel } from '../api/common-types'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; type ResourcePageProperties = { /** The model for which this resource page links to. */ @@ -80,17 +80,18 @@ export type StandaloneRoutePage = ExtensionDeclaration< // Type guards -export const isRoutePage = (e: Extension): e is RoutePage => e.type === 'console.page/route'; +export const isRoutePage = (e: ExtensionDeclaration): e is RoutePage => + e.type === 'console.page/route'; -export const isStandaloneRoutePage = (e: Extension): e is StandaloneRoutePage => +export const isStandaloneRoutePage = (e: ExtensionDeclaration): e is StandaloneRoutePage => e.type === 'console.page/route/standalone'; -export const isResourceListPage = (e: Extension): e is ResourceListPage => +export const isResourceListPage = (e: ExtensionDeclaration): e is ResourceListPage => e.type === 'console.page/resource/list'; -export const isResourceDetailsPage = (e: Extension): e is ResourceDetailsPage => +export const isResourceDetailsPage = (e: ExtensionDeclaration): e is ResourceDetailsPage => e.type === 'console.page/resource/details'; /** @deprecated - use `console.tab/horizontalNav` */ -export const isResourceTabPage = (e: Extension): e is ResourceTabPage => +export const isResourceTabPage = (e: ExtensionDeclaration): e is ResourceTabPage => e.type === 'console.page/resource/tab'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/perspectives.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/perspectives.ts index a3dea91e773..26e3800817f 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/perspectives.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/perspectives.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import { ExtensionK8sModel } from '../api/common-types'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; // Align type with React.lazy type LazyComponent = { default: React.ComponentType }; @@ -28,6 +28,6 @@ export type Perspective = ExtensionDeclaration< } >; -export const isPerspective = (e: Extension): e is Perspective => { +export const isPerspective = (e: ExtensionDeclaration): e is Perspective => { return e.type === 'console.perspective'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/project-overview.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/project-overview.ts index 9036dd993fb..c8ed89fd3e3 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/project-overview.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/project-overview.ts @@ -1,5 +1,5 @@ import * as React from 'react'; -import { CodeRef, Extension, ExtensionDeclaration } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; import { Humanize, TopConsumerPopoverProps } from './console-types'; /** Adds a new inventory item into project overview page. */ @@ -36,9 +36,10 @@ export type ProjectOverviewUtilizationItem = ExtensionDeclaration< // Type guards -export const isProjectOverviewInventoryItem = (e: Extension): e is ProjectOverviewInventoryItem => - e.type === 'console.project-overview/inventory-item'; +export const isProjectOverviewInventoryItem = ( + e: ExtensionDeclaration, +): e is ProjectOverviewInventoryItem => e.type === 'console.project-overview/inventory-item'; export const isProjectOverviewUtilizationItem = ( - e: Extension, + e: ExtensionDeclaration, ): e is ProjectOverviewUtilizationItem => e.type === 'console.project-overview/utilization-item'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pvc.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pvc.ts index 9a5fd7220a4..6bafce3bdff 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pvc.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pvc.ts @@ -1,4 +1,4 @@ -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; import { K8sResourceCommon } from './console-types'; /** This extension can be used to specify additional properties that will be used when creating PVC resources on the PVC list page. */ @@ -49,11 +49,14 @@ export type PVCDelete = ExtensionDeclaration< // Type guards -export const isPVCCreateProp = (e: Extension): e is PVCCreateProp => +export const isPVCCreateProp = (e: ExtensionDeclaration): e is PVCCreateProp => e.type === 'console.pvc/create-prop'; -export const isPVCAlert = (e: Extension): e is PVCAlert => e.type === 'console.pvc/alert'; +export const isPVCAlert = (e: ExtensionDeclaration): e is PVCAlert => + e.type === 'console.pvc/alert'; -export const isPVCStatus = (e: Extension): e is PVCStatus => e.type === 'console.pvc/status'; +export const isPVCStatus = (e: ExtensionDeclaration): e is PVCStatus => + e.type === 'console.pvc/status'; -export const isPVCDelete = (e: Extension): e is PVCDelete => e.type === 'console.pvc/delete'; +export const isPVCDelete = (e: ExtensionDeclaration): e is PVCDelete => + e.type === 'console.pvc/delete'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/redux.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/redux.ts index 3a52255dca0..28449cce1f6 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/redux.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/redux.ts @@ -1,5 +1,5 @@ import { Reducer } from 'redux'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; /** Adds new reducer to Console Redux store which operates on `plugins.` substate. */ export type ReduxReducer = ExtensionDeclaration< @@ -14,5 +14,5 @@ export type ReduxReducer = ExtensionDeclaration< // Type guards -export const isReduxReducer = (e: Extension): e is ReduxReducer => +export const isReduxReducer = (e: ExtensionDeclaration): e is ReduxReducer => e.type === 'console.redux-reducer'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/resource-metadata.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/resource-metadata.ts index f9a29756841..9e41f0a7504 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/resource-metadata.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/resource-metadata.ts @@ -1,5 +1,5 @@ import { ExtensionK8sGroupModel } from '../api/common-types'; -import { Extension, ExtensionDeclaration } from '../types'; +import { ExtensionDeclaration } from '../types'; export enum ModelBadge { DEV = 'dev', @@ -27,5 +27,5 @@ export type ModelMetadata = ExtensionDeclaration< // Type guards -export const isModelMetadata = (e: Extension): e is ModelMetadata => +export const isModelMetadata = (e: ExtensionDeclaration): e is ModelMetadata => e.type === 'console.model-metadata'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-class-provisioner.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-class-provisioner.ts index 0e29ecfe38b..c5dfd5c894a 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-class-provisioner.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-class-provisioner.ts @@ -1,4 +1,3 @@ -import { Extension } from '@console/plugin-sdk/src/typings/base'; import { CodeRef, ExtensionDeclaration } from '../types'; import { StorageClass } from './console-types'; @@ -47,5 +46,5 @@ export type StorageClassProvisioner = ExtensionDeclaration< } >; -export const isStorageClassProvisioner = (e: Extension): e is StorageClassProvisioner => +export const isStorageClassProvisioner = (e: ExtensionDeclaration): e is StorageClassProvisioner => e.type === 'console.storage-class/provisioner'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-provider.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-provider.ts index 6f1ea92f1b8..20c84fec4f5 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-provider.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-provider.ts @@ -1,4 +1,4 @@ -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; /** This extension can be used to contribute a new storage provider to select, when attaching storage and a provider specific component. */ @@ -12,5 +12,5 @@ export type StorageProvider = ExtensionDeclaration< } >; -export const isStorageProvider = (e: Extension): e is StorageProvider => +export const isStorageProvider = (e: ExtensionDeclaration): e is StorageProvider => e.type === 'console.storage-provider'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/telemetry.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/telemetry.ts index c84b574a775..07fdbfa42fc 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/telemetry.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/telemetry.ts @@ -1,4 +1,4 @@ -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; /** This component can be used to register a listener function receiving telemetry events. These events include user identification, page navigation, and other application specific events. @@ -16,6 +16,6 @@ export type TelemetryEventListener =

(eventType: string, properties?: P // Type guards -export const isTelemetryListener = (e: Extension): e is TelemetryListener => { +export const isTelemetryListener = (e: ExtensionDeclaration): e is TelemetryListener => { return e.type === 'console.telemetry/listener'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology-details.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology-details.ts index 59480b33b66..163a952532c 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology-details.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology-details.ts @@ -1,7 +1,7 @@ import * as React from 'react'; import { GraphElement } from '@patternfly/react-topology'; import { ExtensionHook } from '../api/common-types'; -import { Extension, CodeRef, ExtensionDeclaration } from '../types'; +import { CodeRef, ExtensionDeclaration } from '../types'; import { K8sResourceCommon } from './console-types'; import { BuildConfigData } from './topology-types'; @@ -118,31 +118,31 @@ export type SupportedTopologyDetailsExtensions = // Type guards -export const isDetailsTab = (e: Extension): e is DetailsTab => { +export const isDetailsTab = (e: ExtensionDeclaration): e is DetailsTab => { return e.type === 'console.topology/details/tab'; }; -export const isDetailsTabSection = (e: Extension): e is DetailsTabSection => { +export const isDetailsTabSection = (e: ExtensionDeclaration): e is DetailsTabSection => { return e.type === 'console.topology/details/tab-section'; }; -export const isDetailsResourceLink = (e: Extension): e is DetailsResourceLink => { +export const isDetailsResourceLink = (e: ExtensionDeclaration): e is DetailsResourceLink => { return e.type === 'console.topology/details/resource-link'; }; -export const isDetailsResourceAlert = (e: Extension): e is DetailsResourceAlert => { +export const isDetailsResourceAlert = (e: ExtensionDeclaration): e is DetailsResourceAlert => { return e.type === 'console.topology/details/resource-alert'; }; -export const isPodAdapter = (e: Extension): e is PodAdapter => { +export const isPodAdapter = (e: ExtensionDeclaration): e is PodAdapter => { return e.type === 'console.topology/adapter/pod'; }; -export const isBuildAdapter = (e: Extension): e is BuildAdapter => { +export const isBuildAdapter = (e: ExtensionDeclaration): e is BuildAdapter => { return e.type === 'console.topology/adapter/build'; }; -export const isNetworkAdapter = (e: Extension): e is NetworkAdapter => { +export const isNetworkAdapter = (e: ExtensionDeclaration): e is NetworkAdapter => { return e.type === 'console.topology/adapter/network'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology.ts index f930df6937b..4deb7147ad1 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology.ts @@ -1,5 +1,5 @@ import { TopologyQuadrant } from '@patternfly/react-topology/dist/esm/types'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; import { WatchK8sResourcesGeneric } from './console-types'; import { CreateConnectionGetter, @@ -96,20 +96,24 @@ export type TopologyRelationshipProvider = ExtensionDeclaration< // Type Guards -export const isTopologyComponentFactory = (e: Extension): e is TopologyComponentFactory => - e.type === 'console.topology/component/factory'; +export const isTopologyComponentFactory = ( + e: ExtensionDeclaration, +): e is TopologyComponentFactory => e.type === 'console.topology/component/factory'; -export const isTopologyCreateConnector = (e: Extension): e is TopologyCreateConnector => +export const isTopologyCreateConnector = (e: ExtensionDeclaration): e is TopologyCreateConnector => e.type === 'console.topology/create/connector'; -export const isTopologyDataModelFactory = (e: Extension): e is TopologyDataModelFactory => - e.type === 'console.topology/data/factory'; +export const isTopologyDataModelFactory = ( + e: ExtensionDeclaration, +): e is TopologyDataModelFactory => e.type === 'console.topology/data/factory'; -export const isTopologyDisplayFilters = (e: Extension): e is TopologyDisplayFilters => +export const isTopologyDisplayFilters = (e: ExtensionDeclaration): e is TopologyDisplayFilters => e.type === 'console.topology/display/filters'; -export const isTopologyDecoratorProvider = (e: Extension): e is TopologyDecoratorProvider => - e.type === 'console.topology/decorator/provider'; +export const isTopologyDecoratorProvider = ( + e: ExtensionDeclaration, +): e is TopologyDecoratorProvider => e.type === 'console.topology/decorator/provider'; -export const isTopologyRelationshipProvider = (e: Extension): e is TopologyRelationshipProvider => - e.type === 'console.topology/relationship/provider'; +export const isTopologyRelationshipProvider = ( + e: ExtensionDeclaration, +): e is TopologyRelationshipProvider => e.type === 'console.topology/relationship/provider'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/user-preferences.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/user-preferences.ts index 97bfae39038..ef718b76ca8 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/user-preferences.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/user-preferences.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import { JSONSchema7Type } from 'json-schema'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; export enum UserPreferenceFieldType { dropdown = 'dropdown', @@ -82,10 +82,10 @@ export type UserPreferenceItem = ExtensionDeclaration< // Type guards -export const isUserPreferenceGroup = (e: Extension): e is UserPreferenceGroup => { +export const isUserPreferenceGroup = (e: ExtensionDeclaration): e is UserPreferenceGroup => { return e.type === 'console.user-preference/group'; }; -export const isUserPreferenceItem = (e: Extension): e is UserPreferenceItem => { +export const isUserPreferenceItem = (e: ExtensionDeclaration): e is UserPreferenceItem => { return e.type === 'console.user-preference/item'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/yaml-templates.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/yaml-templates.ts index c988caac54f..8dfd42742f2 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/yaml-templates.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/yaml-templates.ts @@ -1,5 +1,5 @@ import { ExtensionK8sModel } from '../api/common-types'; -import { Extension, ExtensionDeclaration, CodeRef } from '../types'; +import { ExtensionDeclaration, CodeRef } from '../types'; /** YAML templates for editing resources via the yaml editor. */ export type YAMLTemplate = ExtensionDeclaration< @@ -16,5 +16,5 @@ export type YAMLTemplate = ExtensionDeclaration< // Type guards -export const isYAMLTemplate = (e: Extension): e is YAMLTemplate => +export const isYAMLTemplate = (e: ExtensionDeclaration): e is YAMLTemplate => e.type === 'console.yaml-template'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-loader.spec.ts b/frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-loader.spec.ts index 933ac0e7bea..04ea09b9055 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-loader.spec.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-loader.spec.ts @@ -1,7 +1,7 @@ import { PluginStore } from '@console/plugin-sdk/src/store'; import * as utilsModule from '@console/shared/src/utils/utils'; import { StandardConsolePluginManifest, LegacyConsolePluginManifest } from '../../build-types'; -import { Extension } from '../../types'; +import { ExtensionDeclaration } from '../../types'; import { getPluginManifest, getExecutableCodeRefMock, @@ -181,7 +181,7 @@ describe('window.loadPluginEntry', () => { const pluginStore = new PluginStore(); const addDynamicPlugin = jest.spyOn(pluginStore, 'addDynamicPlugin'); - const extensions: Extension[] = [ + const extensions: ExtensionDeclaration[] = [ { type: 'Foo', properties: { test: true }, @@ -192,7 +192,7 @@ describe('window.loadPluginEntry', () => { }, ]; - const resolvedExtensions: Extension[] = [ + const resolvedExtensions: ExtensionDeclaration[] = [ { type: 'Foo', properties: { test: true }, diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/utils/test-utils.ts b/frontend/packages/console-dynamic-plugin-sdk/src/utils/test-utils.ts index 231de5c2058..b2e3956f189 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/utils/test-utils.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/utils/test-utils.ts @@ -1,11 +1,11 @@ import { StandardConsolePluginManifest } from '../build-types'; import { applyCodeRefSymbol } from '../coderefs/coderef-resolver'; -import { Extension, RemoteEntryModule, CodeRef, Update } from '../types'; +import { ExtensionDeclaration, RemoteEntryModule, CodeRef, Update } from '../types'; export const getPluginManifest = ( name: string, version: string, - extensions: Extension[] = [], + extensions: ExtensionDeclaration[] = [], disableStaticPlugins?: string[], ): StandardConsolePluginManifest => ({ name, diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/validation/__tests__/ExtensionValidator.spec.ts b/frontend/packages/console-dynamic-plugin-sdk/src/validation/__tests__/ExtensionValidator.spec.ts index 3eed43575db..b3d0e2b1059 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/validation/__tests__/ExtensionValidator.spec.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/validation/__tests__/ExtensionValidator.spec.ts @@ -1,5 +1,5 @@ import * as webpack from 'webpack'; -import { Extension } from '../../types'; +import type { ExtensionDeclaration } from '../../types'; import { collectCodeRefData, findWebpackModules, ExtensionValidator } from '../ExtensionValidator'; import { ValidationResult } from '../ValidationResult'; @@ -21,7 +21,7 @@ const getWebpackCompilationMocks = ( describe('collectCodeRefData', () => { it('returns CodeRef data for the given list of extensions', () => { - const extensions: Extension[] = [ + const extensions: ExtensionDeclaration[] = [ { type: 'Foo', properties: { @@ -66,7 +66,7 @@ describe('findWebpackModules', () => { describe('ExtensionValidator', () => { describe('validate', () => { const testValidate = ( - extensions: Extension[], + extensions: ExtensionDeclaration[], webpackModules: {}[], exposedModules: { [moduleName: string]: string }, beforeResult: (getProvidedExports: jest.Mock) => void, diff --git a/frontend/packages/console-plugin-sdk/src/__tests__/store.spec.ts b/frontend/packages/console-plugin-sdk/src/__tests__/store.spec.ts index 16af874cbcc..dbfb4c08d24 100644 --- a/frontend/packages/console-plugin-sdk/src/__tests__/store.spec.ts +++ b/frontend/packages/console-plugin-sdk/src/__tests__/store.spec.ts @@ -1,5 +1,6 @@ import * as Combinatorics from 'js-combinatorics'; import * as _ from 'lodash'; +import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; import { getPluginManifest, getExecutableCodeRefMock, @@ -11,7 +12,6 @@ import { getGatingFlagNames, PluginStore, } from '../store'; -import { Extension } from '../typings'; describe('sanitizeExtension', () => { it('sanitizes the flags object for gated extensions', () => { @@ -80,7 +80,7 @@ describe('sanitizeExtension', () => { }); it('returns the same extension instance', () => { - const testExtension: Extension = { type: 'Foo/Bar', properties: {} }; + const testExtension: ExtensionDeclaration = { type: 'Foo/Bar', properties: {} }; expect(sanitizeExtension(testExtension)).toBe(testExtension); }); @@ -126,14 +126,14 @@ describe('augmentExtension', () => { }); it('returns the same extension instance', () => { - const testExtension: Extension = { type: 'Foo/Bar', properties: {} }; + const testExtension: ExtensionDeclaration = { type: 'Foo/Bar', properties: {} }; expect(augmentExtension(testExtension, 'Test@1.2.3', 'Test', 0)).toBe(testExtension); }); }); describe('isExtensionInUse', () => { - const gatedExtension: Extension = { + const gatedExtension: ExtensionDeclaration = { type: 'Foo/Bar', properties: {}, flags: { @@ -181,7 +181,7 @@ describe('isExtensionInUse', () => { describe('getGatingFlagNames', () => { it('returns an array of flag names used for gating given extensions', () => { - const extensions: Extension[] = [ + const extensions: ExtensionDeclaration[] = [ { type: 'Foo', properties: {}, @@ -208,7 +208,7 @@ describe('PluginStore', () => { const addDynamicPluginToStore = ( store: PluginStore, manifest: ReturnType, - resolvedExtensions: Extension[] = manifest.extensions, + resolvedExtensions: ExtensionDeclaration[] = manifest.extensions, ) => { store.addDynamicPlugin(`${manifest.name}@${manifest.version}`, manifest, resolvedExtensions); }; @@ -327,15 +327,15 @@ describe('PluginStore', () => { }, ]); - const dynamicPluginExtensionsA: Extension[] = [ + const dynamicPluginExtensionsA: ExtensionDeclaration[] = [ { type: 'Baz', properties: {}, flags: { disallowed: ['foo', 'bar'] } }, ]; - const dynamicPluginExtensionsB: Extension[] = [ + const dynamicPluginExtensionsB: ExtensionDeclaration[] = [ { type: 'Qux', properties: { value: 'test' }, flags: { required: ['foo', 'bar'] } }, ]; - const dynamicPluginExtensionsC: Extension[] = [ + const dynamicPluginExtensionsC: ExtensionDeclaration[] = [ { type: 'Mux', properties: {}, flags: { required: ['foo'], disallowed: ['bar'] } }, ]; @@ -527,7 +527,7 @@ describe('PluginStore', () => { const ref = getExecutableCodeRefMock('value'); - const resolvedExtensions: Extension[] = [ + const resolvedExtensions: ExtensionDeclaration[] = [ { type: 'Foo', properties: { test: true }, diff --git a/frontend/packages/console-plugin-sdk/src/codegen/__tests__/active-plugins.spec.ts b/frontend/packages/console-plugin-sdk/src/codegen/__tests__/active-plugins.spec.ts index 13909d6bde5..563ce12ffd3 100644 --- a/frontend/packages/console-plugin-sdk/src/codegen/__tests__/active-plugins.spec.ts +++ b/frontend/packages/console-plugin-sdk/src/codegen/__tests__/active-plugins.spec.ts @@ -1,11 +1,10 @@ import * as fs from 'fs'; import * as _ from 'lodash'; import { extensionsFile } from '@console/dynamic-plugin-sdk/src/constants'; -import { EncodedCodeRef } from '@console/dynamic-plugin-sdk/src/types'; +import type { ExtensionDeclaration, EncodedCodeRef } from '@console/dynamic-plugin-sdk/src/types'; import * as jsoncModule from '@console/dynamic-plugin-sdk/src/utils/jsonc'; import { ValidationResult } from '@console/dynamic-plugin-sdk/src/validation/ValidationResult'; import * as remotePluginModule from '@console/dynamic-plugin-sdk/src/webpack/ConsoleRemotePlugin'; -import { Extension } from '../../typings'; import { trimStartMultiLine } from '../../utils/string'; import { getTemplatePackage } from '../../utils/test-utils'; import * as activePluginsModule from '../active-plugins'; @@ -45,8 +44,10 @@ describe('getActivePluginsModule', () => { consolePlugin: {}, }; - const fooDynamicExtensions: Extension[] = [{ type: 'Dynamic/Foo', properties: { test: true } }]; - const barDynamicExtensions: Extension[] = [ + const fooDynamicExtensions: ExtensionDeclaration[] = [ + { type: 'Dynamic/Foo', properties: { test: true } }, + ]; + const barDynamicExtensions: ExtensionDeclaration[] = [ { type: 'Dynamic/Bar', properties: { baz: 1, qux: { $codeRef: 'a.b' } } }, ]; @@ -122,8 +123,10 @@ describe('loadActivePluginsForTestPurposes', () => { consolePlugin: {}, }; - const fooDynamicExtensions: Extension[] = [{ type: 'Dynamic/Foo', properties: { test: true } }]; - const barDynamicExtensions: Extension[] = [ + const fooDynamicExtensions: ExtensionDeclaration[] = [ + { type: 'Dynamic/Foo', properties: { test: true } }, + ]; + const barDynamicExtensions: ExtensionDeclaration[] = [ { type: 'Dynamic/Bar', properties: { baz: 1, qux: { $codeRef: 'a.b' } } }, ]; @@ -259,7 +262,7 @@ describe('getDynamicExtensions', () => { consolePlugin: {}, }; - const extensionsJSON: Extension[] = [ + const extensionsJSON: ExtensionDeclaration[] = [ { type: 'Dynamic/Foo', properties: { test: true, mux: { $codeRef: 'a.b' } } }, { type: 'Dynamic/Bar', properties: { baz: 1, qux: { $codeRef: 'foo.bar' } } }, ]; @@ -372,7 +375,7 @@ describe('getDynamicExtensions', () => { consolePlugin: {}, }; - const extensionsJSON: Extension[] = []; + const extensionsJSON: ExtensionDeclaration[] = []; const extensionsFilePath = `${pluginPackage._path}/${extensionsFile}`; const errorCallback = jest.fn(); const codeRefTransformer = jest.fn(_.identity); @@ -408,7 +411,7 @@ describe('getDynamicExtensions', () => { consolePlugin: {}, }; - const extensionsJSON: Extension[] = [ + const extensionsJSON: ExtensionDeclaration[] = [ { type: 'Dynamic/Foo', properties: { test: true, mux: { $codeRef: 'a.b' } } }, { type: 'Dynamic/Bar', properties: { baz: 1, qux: { $codeRef: 'foo.bar' } } }, ]; diff --git a/frontend/packages/console-plugin-sdk/src/utils/__tests__/extension-i18n.spec.ts b/frontend/packages/console-plugin-sdk/src/utils/__tests__/extension-i18n.spec.ts index ca0ec7a9617..9e2984ef8ae 100644 --- a/frontend/packages/console-plugin-sdk/src/utils/__tests__/extension-i18n.spec.ts +++ b/frontend/packages/console-plugin-sdk/src/utils/__tests__/extension-i18n.spec.ts @@ -1,4 +1,4 @@ -import { Extension } from '../../typings'; +import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; import { isTranslatableString, getTranslationKey, translateExtension } from '../extension-i18n'; const nonTranslatableStrings: string[] = ['', null, undefined, '%', 'a%', '%a', '%%', 'foo']; @@ -29,7 +29,7 @@ describe('getTranslationKey', () => { describe('translateExtension', () => { it("recursively replaces all translatable string values via the 't' function", () => { - const testExtension: Extension = { + const testExtension: ExtensionDeclaration = { type: 'Foo/Bar', properties: { foo1: '%test~1%', @@ -70,7 +70,7 @@ describe('translateExtension', () => { }); it('returns the same extension instance', () => { - const testExtension: Extension = { type: 'Foo/Bar', properties: {} }; + const testExtension: ExtensionDeclaration = { type: 'Foo/Bar', properties: {} }; const t = jest.fn(); expect(translateExtension(testExtension, t)).toBe(testExtension); From ea8f8e2827620fadbcfceaf9e5255786ab5837b4 Mon Sep 17 00:00:00 2001 From: logonoff Date: Sat, 22 Nov 2025 18:58:49 -0500 Subject: [PATCH 08/14] CONSOLE-3769: Move `LazyLoader` type to internal The type is only used in the context of `AsyncComponent`, so it's better to move the type closer to where it is used --- .../console-plugin-sdk/src/typings/base.ts | 17 ++------------ .../status-card/OperatorStatusBody.tsx | 2 +- .../src/components/import/import-types.ts | 2 +- .../cluster-dashboard/health-item.tsx | 3 +-- frontend/public/components/utils/async.tsx | 22 +++++++++++-------- 5 files changed, 18 insertions(+), 28 deletions(-) diff --git a/frontend/packages/console-plugin-sdk/src/typings/base.ts b/frontend/packages/console-plugin-sdk/src/typings/base.ts index 23f44268558..633df9d0d4a 100644 --- a/frontend/packages/console-plugin-sdk/src/typings/base.ts +++ b/frontend/packages/console-plugin-sdk/src/typings/base.ts @@ -1,17 +1,4 @@ -import * as React from 'react'; -import { - ExtensionFlags, - Extension, - ExtensionTypeGuard, - LoadedExtension, -} from '@console/dynamic-plugin-sdk/src/types'; - -export type { ExtensionFlags, Extension, ExtensionTypeGuard, LoadedExtension }; - -/** - * Common interface for loading async React components. - */ -export type LazyLoader = () => Promise>>; +import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; /** * From Console application perspective, a plugin is a list of extensions @@ -19,5 +6,5 @@ export type LazyLoader = () => Promise Promise) => ( - b: () => Promise, -) => a?.name === b?.name && (a || 'a').toString() === (b || 'b').toString(); +const sameLoader = (a: LazyLoader | null) => (b: LazyLoader | null) => + a?.name === b?.name && (a || 'a').toString() === (b || 'b').toString(); enum AsyncComponentError { ComponentNotFound = 'COMPONENT_NOT_FOUND', } -export class AsyncComponent extends React.Component { +export class AsyncComponent extends ClassComponent { state: AsyncComponentState = { Component: null, loader: null }; props: AsyncComponentProps; @@ -79,11 +78,16 @@ export class AsyncComponent extends React.Component = () => Promise>>; + export type AsyncComponentProps = { - loader: () => Promise; - LoadingComponent?: React.ReactNode; + loader: LazyLoader; + LoadingComponent?: ReactNode; } & any; export type AsyncComponentState = { - Component: React.ComponentType; - loader: () => Promise; + Component: ComponentType; + loader: LazyLoader; }; From ece51f7527c707dd7f21ce92a315c6ed78259c96 Mon Sep 17 00:00:00 2001 From: logonoff Date: Sat, 22 Nov 2025 18:49:05 -0500 Subject: [PATCH 09/14] CONSOLE-3769: Remove type reexports from plugin-sdk --- .../src/__tests__/plugin-test-utils.ts | 2 +- .../NotLoadedDynamicPlugins.tsx | 2 +- .../__tests__/PerspectiveDetector.spec.tsx | 2 +- .../nav/useNavExtensionForPerspective.ts | 2 +- .../perspective/PreferredPerspectiveSelect.tsx | 2 +- .../perspective/__tests__/perspective.data.ts | 2 +- .../console-dynamic-plugin-sdk/CHANGELOG-core.md | 16 +++++++++++++--- .../src/api/pluginSubscriptionService.ts | 6 +++++- .../console-plugin-sdk/src/api/useExtensions.ts | 6 +++++- .../src/codegen/active-plugins.ts | 4 ++-- .../packages/console-plugin-sdk/src/index.ts | 3 --- .../packages/console-plugin-sdk/src/store.ts | 3 ++- .../console-plugin-sdk/src/typings/index.ts | 1 - .../src/utils/extension-i18n.ts | 2 +- .../actions/__tests__/utils-test-data.ts | 2 +- .../src/components/actions/utils.ts | 2 +- .../src/hooks/create-resource-hook.ts | 2 +- .../src/hooks/perspective-utils.ts | 2 +- .../console-shared/src/utils/sample-utils.ts | 2 +- .../src/components/add/AddCardSection.tsx | 2 +- .../add/__tests__/add-page-test-data.tsx | 2 +- .../public/components/notification-drawer.tsx | 2 +- .../module/k8s/__tests__/get-resources.spec.ts | 2 +- frontend/public/plugins.ts | 2 +- 24 files changed, 44 insertions(+), 29 deletions(-) delete mode 100644 frontend/packages/console-plugin-sdk/src/index.ts delete mode 100644 frontend/packages/console-plugin-sdk/src/typings/index.ts diff --git a/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts b/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts index 61b5be46f29..e635221b248 100644 --- a/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts +++ b/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts @@ -1,9 +1,9 @@ import { List as ImmutableList } from 'immutable'; import * as _ from 'lodash'; import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; -import { PluginStore } from '@console/plugin-sdk'; import { loadActivePluginsForTestPurposes } from '@console/plugin-sdk/src/codegen/active-plugins'; import { resolvePluginPackages } from '@console/plugin-sdk/src/codegen/plugin-resolver'; +import { PluginStore } from '@console/plugin-sdk/src/store'; const testedPlugins = loadActivePluginsForTestPurposes(resolvePluginPackages()); const testedPluginStore = new PluginStore(testedPlugins); diff --git a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/NotLoadedDynamicPlugins.tsx b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/NotLoadedDynamicPlugins.tsx index 0a26c6b9486..d384bc0e819 100644 --- a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/NotLoadedDynamicPlugins.tsx +++ b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/NotLoadedDynamicPlugins.tsx @@ -3,7 +3,7 @@ import { StackItem, Content } from '@patternfly/react-core'; import { ResourceLink } from '@console/internal/components/utils/resource-link'; import { ConsolePluginModel } from '@console/internal/models'; import { referenceForModel } from '@console/internal/module/k8s'; -import { NotLoadedDynamicPluginInfo } from '@console/plugin-sdk/src'; +import { NotLoadedDynamicPluginInfo } from '@console/plugin-sdk/src/store'; import { StatusPopupSection } from '@console/shared/src/components/dashboard/status-card/StatusPopup'; const NotLoadedDynamicPlugins: React.FC = ({ plugins, label }) => ( diff --git a/frontend/packages/console-app/src/components/detect-perspective/__tests__/PerspectiveDetector.spec.tsx b/frontend/packages/console-app/src/components/detect-perspective/__tests__/PerspectiveDetector.spec.tsx index c5e74c18b45..2ddb3e946e4 100644 --- a/frontend/packages/console-app/src/components/detect-perspective/__tests__/PerspectiveDetector.spec.tsx +++ b/frontend/packages/console-app/src/components/detect-perspective/__tests__/PerspectiveDetector.spec.tsx @@ -1,7 +1,7 @@ import { render, waitFor } from '@testing-library/react'; import { useLocation } from 'react-router-dom-v5-compat'; import { Perspective } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/plugin-sdk'; +import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { usePerspectives } from '@console/shared/src'; import { Perspective as PerspectiveType, diff --git a/frontend/packages/console-app/src/components/nav/useNavExtensionForPerspective.ts b/frontend/packages/console-app/src/components/nav/useNavExtensionForPerspective.ts index 70e885b8d88..17cd4554d02 100644 --- a/frontend/packages/console-app/src/components/nav/useNavExtensionForPerspective.ts +++ b/frontend/packages/console-app/src/components/nav/useNavExtensionForPerspective.ts @@ -1,6 +1,6 @@ import { useMemo, useCallback } from 'react'; import { NavExtension, isNavExtension } from '@console/dynamic-plugin-sdk/src/lib-core'; -import { LoadedExtension } from '@console/plugin-sdk'; +import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { useExtensions } from '@console/plugin-sdk/src/api/useExtensions'; import { usePerspectives } from '@console/shared/src'; diff --git a/frontend/packages/console-app/src/components/user-preferences/perspective/PreferredPerspectiveSelect.tsx b/frontend/packages/console-app/src/components/user-preferences/perspective/PreferredPerspectiveSelect.tsx index aefed8f3b36..59eebbfecef 100644 --- a/frontend/packages/console-app/src/components/user-preferences/perspective/PreferredPerspectiveSelect.tsx +++ b/frontend/packages/console-app/src/components/user-preferences/perspective/PreferredPerspectiveSelect.tsx @@ -8,7 +8,7 @@ import { } from '@patternfly/react-core'; import { useTranslation } from 'react-i18next'; import { Perspective } from '@console/dynamic-plugin-sdk/src/extensions'; -import { LoadedExtension } from '@console/plugin-sdk/src'; +import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { usePerspectiveExtension, usePerspectives } from '@console/shared/src'; import { useTelemetry } from '@console/shared/src/hooks/useTelemetry'; import { diff --git a/frontend/packages/console-app/src/components/user-preferences/perspective/__tests__/perspective.data.ts b/frontend/packages/console-app/src/components/user-preferences/perspective/__tests__/perspective.data.ts index 561c1f5b7fe..44cdeaf99d2 100644 --- a/frontend/packages/console-app/src/components/user-preferences/perspective/__tests__/perspective.data.ts +++ b/frontend/packages/console-app/src/components/user-preferences/perspective/__tests__/perspective.data.ts @@ -1,6 +1,6 @@ import { ACM_PERSPECTIVE_ID } from '@console/app/src/consts'; import { Perspective } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/plugin-sdk'; +import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; export const mockPerspectiveExtensions: LoadedExtension[] = [ { diff --git a/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md b/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md index 788f4c3a9ec..59b2555b1ea 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md +++ b/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md @@ -12,14 +12,21 @@ table in [Console dynamic plugins README](./README.md). ## 4.21.0-prerelease.x - TBD -- Deprecated `setPluginStore` function in `k8s-utils.ts`. The function is now a noop and the export +- **Deprecated** `setPluginStore` function in `k8s-utils.ts`. The function is now a noop and the export will be removed in a future release. ([CONSOLE-4840], [#15671]) -- Fix `popupComponent` prop type in extension `console.dashboards/overview/health/resource` ([CONSOLE-4796], [#15526]) -- Begin alignment of plugin SDK types with `@openshift/dynamic-plugin-sdk` ([CONSOLE-3769], [#15509]) +- **Type-only breaking change**: Fix `popupComponent` prop type in extension `console.dashboards/overview/health/resource` ([CONSOLE-4796], [#15526]) +- Increased alignment with `@openshift/dynamic-plugin-sdk` types ([CONSOLE-3769], [#15509], [#15738]) + - `AlwaysOnExtension` and `ModelDefinition` types are removed from `api/common-types` because they referred + to a legacy system which console dynamic plugins never supported. There is no direct replacement for these + types, and plugins should remove all uses of them. ([#15671]) + - The following types are now re-exported from `@openshift/dynamic-plugin-sdk` instead of being defined + locally: `ExtensionFlags`, `ExtensionTypeGuard`, `ResolvedCodeRefProperties`, `RemoteEntryModule`, and `Update`. ([#15509], [#15738]) - Add optional `fetch` property to extension `console.dashboards/overview/health/url` ([CONSOLE-4796], [#15526]) - Add optional `infrastructure` parameter to `PrometheusHealthHandler` type ([CONSOLE-4796], [#15526]) - Allow `K8sResourceKind` in `TopologyDataObject`, `TopologyResourcesObject`, and `OverviewItem` types ([CONSOLE-4840], [#15699]) - Allow async functions for the `resources` property of `console.topology/data/factory` extension ([CONSOLE-4806], [#15641]) +- Add color theme and font size customization to `ResourceYAMLEditor` component ([CONSOLE-4701], [#15735]) +- Ensure proper pass-through of `props.editorProps.theme` and `props.options.fontFamily` to `CodeEditor` component ([CONSOLE-4701], [#15735]) ## 4.20.0 - 2025-11-24 @@ -145,6 +152,7 @@ table in [Console dynamic plugins README](./README.md). [CONSOLE-4576]: https://issues.redhat.com/browse/CONSOLE-4576 [CONSOLE-4654]: https://issues.redhat.com/browse/CONSOLE-4654 [CONSOLE-4656]: https://issues.redhat.com/browse/CONSOLE-4656 +[CONSOLE-4701]: https://issues.redhat.com/browse/CONSOLE-4701 [CONSOLE-4796]: https://issues.redhat.com/browse/CONSOLE-4796 [CONSOLE-4806]: https://issues.redhat.com/browse/CONSOLE-4806 [CONSOLE-4840]: https://issues.redhat.com/browse/CONSOLE-4840 @@ -212,3 +220,5 @@ table in [Console dynamic plugins README](./README.md). [#15641]: https://github.com/openshift/console/pull/15641 [#15671]: https://github.com/openshift/console/pull/15671 [#15699]: https://github.com/openshift/console/pull/15699 +[#15735]: https://github.com/openshift/console/pull/15735 +[#15738]: https://github.com/openshift/console/pull/15738 diff --git a/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts b/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts index a57fb03a27e..390b417287c 100644 --- a/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts +++ b/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts @@ -1,8 +1,12 @@ import * as _ from 'lodash'; import { Store } from 'redux'; +import type { + Extension, + ExtensionTypeGuard, + LoadedExtension, +} from '@console/dynamic-plugin-sdk/src/types'; import type { RootState } from '@console/internal/redux'; import { isExtensionInUse, PluginStore, DynamicPluginInfo } from '../store'; -import type { Extension, ExtensionTypeGuard, LoadedExtension } from '../typings'; let subscriptionServiceInitialized = false; let getPluginStoreInstance: () => PluginStore = () => undefined; diff --git a/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts b/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts index e59d9ab90c4..2df684aa8c9 100644 --- a/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts +++ b/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts @@ -1,7 +1,11 @@ import { useRef, useCallback, useEffect } from 'react'; import * as _ from 'lodash'; +import type { + Extension, + ExtensionTypeGuard, + LoadedExtension, +} from '@console/dynamic-plugin-sdk/src/types'; import { useForceRender } from '@console/shared/src/hooks/useForceRender'; -import type { Extension, ExtensionTypeGuard, LoadedExtension } from '../typings'; import { useTranslatedExtensions } from '../utils/useTranslatedExtensions'; import { subscribeToExtensions } from './pluginSubscriptionService'; diff --git a/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts b/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts index fcca1774d60..298c0cb59e6 100644 --- a/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts +++ b/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts @@ -7,12 +7,12 @@ import { } from '@console/dynamic-plugin-sdk/src/coderefs/coderef-resolver'; import { extensionsFile } from '@console/dynamic-plugin-sdk/src/constants'; import { ConsoleExtensionsJSON } from '@console/dynamic-plugin-sdk/src/schema/console-extensions'; -import { EncodedCodeRef } from '@console/dynamic-plugin-sdk/src/types'; +import { Extension, EncodedCodeRef } from '@console/dynamic-plugin-sdk/src/types'; import { parseJSONC } from '@console/dynamic-plugin-sdk/src/utils/jsonc'; import { guessModuleFilePath } from '@console/dynamic-plugin-sdk/src/validation/ExtensionValidator'; import { ValidationResult } from '@console/dynamic-plugin-sdk/src/validation/ValidationResult'; import { validateConsoleExtensionsFileSchema } from '@console/dynamic-plugin-sdk/src/webpack/ConsoleRemotePlugin'; -import { Extension, ActivePlugin } from '../typings'; +import { ActivePlugin } from '../typings/base'; import { trimStartMultiLine } from '../utils/string'; import { consolePkgScope, PluginPackage } from './plugin-resolver'; diff --git a/frontend/packages/console-plugin-sdk/src/index.ts b/frontend/packages/console-plugin-sdk/src/index.ts deleted file mode 100644 index 84460c3ecac..00000000000 --- a/frontend/packages/console-plugin-sdk/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -// TODO(vojtech): this barrel file can cause a lot of cycles, it's best to remove it -export * from './typings'; -export * from './store'; diff --git a/frontend/packages/console-plugin-sdk/src/store.ts b/frontend/packages/console-plugin-sdk/src/store.ts index 344ee1b9c49..eaecb63dd60 100644 --- a/frontend/packages/console-plugin-sdk/src/store.ts +++ b/frontend/packages/console-plugin-sdk/src/store.ts @@ -2,7 +2,8 @@ import * as _ from 'lodash'; import { StandardConsolePluginManifest } from '@console/dynamic-plugin-sdk/src/build-types'; -import { Extension, LoadedExtension, ActivePlugin } from './typings'; +import { Extension, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { ActivePlugin } from './typings/base'; export const sanitizeExtension = (e: E): E => { e.flags = e.flags || {}; diff --git a/frontend/packages/console-plugin-sdk/src/typings/index.ts b/frontend/packages/console-plugin-sdk/src/typings/index.ts deleted file mode 100644 index 8a185aaecca..00000000000 --- a/frontend/packages/console-plugin-sdk/src/typings/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './base'; diff --git a/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts b/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts index 8f3eb1a4a64..eabf3980078 100644 --- a/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts +++ b/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts @@ -1,10 +1,10 @@ import { TFunction } from 'i18next'; +import type { Extension } from '@console/dynamic-plugin-sdk/src/types'; import { deepForOwn, PredicateCheck, ValueCallback, } from '@console/dynamic-plugin-sdk/src/utils/object'; -import type { Extension } from '../typings'; export const isTranslatableString = (value): value is string => { return ( diff --git a/frontend/packages/console-shared/src/components/actions/__tests__/utils-test-data.ts b/frontend/packages/console-shared/src/components/actions/__tests__/utils-test-data.ts index c3e77f98210..9ee109c1a95 100644 --- a/frontend/packages/console-shared/src/components/actions/__tests__/utils-test-data.ts +++ b/frontend/packages/console-shared/src/components/actions/__tests__/utils-test-data.ts @@ -1,5 +1,5 @@ import { Action, ActionGroup } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/plugin-sdk'; +import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; export const mockActions: Action[] = [ { diff --git a/frontend/packages/console-shared/src/components/actions/utils.ts b/frontend/packages/console-shared/src/components/actions/utils.ts index 03e742d6550..527de7094f9 100644 --- a/frontend/packages/console-shared/src/components/actions/utils.ts +++ b/frontend/packages/console-shared/src/components/actions/utils.ts @@ -5,7 +5,7 @@ import { MenuOption, MenuOptionType, } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/plugin-sdk'; +import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; export const createMenuOptions = ( actions: Action[], diff --git a/frontend/packages/console-shared/src/hooks/create-resource-hook.ts b/frontend/packages/console-shared/src/hooks/create-resource-hook.ts index e37850b536d..2b79b94c3d8 100644 --- a/frontend/packages/console-shared/src/hooks/create-resource-hook.ts +++ b/frontend/packages/console-shared/src/hooks/create-resource-hook.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { isCreateResource, CreateResource, GroupVersionKind } from '@console/dynamic-plugin-sdk'; +import { Extension, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { referenceForExtensionModel } from '@console/internal/module/k8s'; -import { Extension, LoadedExtension } from '@console/plugin-sdk'; import { useExtensions } from '@console/plugin-sdk/src/api/useExtensions'; export const useCreateResourceExtension = ( diff --git a/frontend/packages/console-shared/src/hooks/perspective-utils.ts b/frontend/packages/console-shared/src/hooks/perspective-utils.ts index e5f21143dd4..cec1511d654 100644 --- a/frontend/packages/console-shared/src/hooks/perspective-utils.ts +++ b/frontend/packages/console-shared/src/hooks/perspective-utils.ts @@ -6,7 +6,7 @@ import { AccessReviewResourceAttributes, checkAccess, } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/plugin-sdk/src'; +import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { useExtensions } from '@console/plugin-sdk/src/api/useExtensions'; import { USERSETTINGS_PREFIX } from '../constants'; diff --git a/frontend/packages/console-shared/src/utils/sample-utils.ts b/frontend/packages/console-shared/src/utils/sample-utils.ts index 8465bd3ccd3..06d7845e33a 100644 --- a/frontend/packages/console-shared/src/utils/sample-utils.ts +++ b/frontend/packages/console-shared/src/utils/sample-utils.ts @@ -11,6 +11,7 @@ import { isPerspective, Perspective, } from '@console/dynamic-plugin-sdk'; +import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { FirehoseResult } from '@console/internal/components/utils/types'; import { BuildConfigModel, @@ -27,7 +28,6 @@ import { K8sResourceKind, referenceForModel, } from '@console/internal/module/k8s'; -import { LoadedExtension } from '@console/plugin-sdk/src'; import { subscribeToExtensions } from '@console/plugin-sdk/src/api/pluginSubscriptionService'; import { defaultCatalogCategories } from './default-categories'; diff --git a/frontend/packages/dev-console/src/components/add/AddCardSection.tsx b/frontend/packages/dev-console/src/components/add/AddCardSection.tsx index 2f2db8bbb3d..b53296ba4fa 100644 --- a/frontend/packages/dev-console/src/components/add/AddCardSection.tsx +++ b/frontend/packages/dev-console/src/components/add/AddCardSection.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { AddActionGroup, ResolvedExtension, AddAction } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/plugin-sdk/src'; +import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { orderExtensionBasedOnInsertBeforeAndAfter } from '@console/shared/'; import { getAddGroups } from '../../utils/add-page-utils'; import { AddGroup } from '../types'; diff --git a/frontend/packages/dev-console/src/components/add/__tests__/add-page-test-data.tsx b/frontend/packages/dev-console/src/components/add/__tests__/add-page-test-data.tsx index 104ad588d1c..d9b750d1365 100644 --- a/frontend/packages/dev-console/src/components/add/__tests__/add-page-test-data.tsx +++ b/frontend/packages/dev-console/src/components/add/__tests__/add-page-test-data.tsx @@ -1,10 +1,10 @@ import { CatalogIcon } from '@patternfly/react-icons/dist/esm/icons/catalog-icon'; import { SignOutAltIcon } from '@patternfly/react-icons/dist/esm/icons/sign-out-alt-icon'; import { AddActionGroup, ResolvedExtension, AddAction } from '@console/dynamic-plugin-sdk'; +import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { helmCatalogIconSVG } from '@console/helm-plugin/src/utils/icons'; import { channelIconSVG } from '@console/knative-plugin/src/utils/icons'; import { pipelineIconSVG } from '@console/pipelines-plugin/src/utils/icons'; -import { LoadedExtension } from '@console/plugin-sdk/src'; type AddActionExtension = ResolvedExtension; type AddActionGroupExtension = LoadedExtension; diff --git a/frontend/public/components/notification-drawer.tsx b/frontend/public/components/notification-drawer.tsx index bde6d9ada5f..abac7038299 100644 --- a/frontend/public/components/notification-drawer.tsx +++ b/frontend/public/components/notification-drawer.tsx @@ -14,7 +14,7 @@ import { useTranslation } from 'react-i18next'; import i18next from 'i18next'; import { useDispatch } from 'react-redux'; import { Link, NavigateFunction, useNavigate } from 'react-router-dom-v5-compat'; -import { DynamicPluginInfo } from '@console/plugin-sdk'; +import type { DynamicPluginInfo } from '@console/plugin-sdk/src/store'; import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo'; import * as UIActions from '@console/internal/actions/ui'; import { resourcePath } from '@console/internal/components/utils/resource-link'; diff --git a/frontend/public/module/k8s/__tests__/get-resources.spec.ts b/frontend/public/module/k8s/__tests__/get-resources.spec.ts index 233b5f3763f..f67e67cb113 100644 --- a/frontend/public/module/k8s/__tests__/get-resources.spec.ts +++ b/frontend/public/module/k8s/__tests__/get-resources.spec.ts @@ -1,5 +1,5 @@ import { ModelMetadata } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/plugin-sdk'; +import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { pluralizeKind, getModelExtensionMetadata } from '../get-resources'; describe('pluralizeKind', () => { diff --git a/frontend/public/plugins.ts b/frontend/public/plugins.ts index 71a0f43af8e..e96ccabd095 100644 --- a/frontend/public/plugins.ts +++ b/frontend/public/plugins.ts @@ -1,6 +1,6 @@ import * as _ from 'lodash-es'; import { PluginStore } from '@console/plugin-sdk/src/store'; -import { ActivePlugin } from '@console/plugin-sdk/src/typings'; +import { ActivePlugin } from '@console/plugin-sdk/src/typings/base'; import { getURLSearchParams } from './components/utils/link'; const getEnabledDynamicPluginNames = () => { From 4babc266cef584f030da18133ef4fa90b07d51c2 Mon Sep 17 00:00:00 2001 From: logonoff Date: Mon, 24 Nov 2025 15:23:05 -0500 Subject: [PATCH 10/14] CONSOLE-3769: Address review comments --- .../CHANGELOG-core.md | 14 ++++------ .../console-dynamic-plugin-sdk/README.md | 7 +++-- .../src/api/useResolvedExtensions.ts | 4 +-- .../__tests__/coderef-resolver.spec.ts | 7 +++-- .../src/coderefs/coderef-resolver.ts | 13 +++++----- .../src/extensions/console-types.ts | 6 ++--- .../console-dynamic-plugin-sdk/src/types.ts | 26 +++++++++---------- .../src/validation/ExtensionValidator.ts | 6 ++--- .../src/api/pluginSubscriptionService.ts | 14 +++++----- .../src/api/useExtensions.ts | 4 +-- .../src/codegen/active-plugins.ts | 4 +-- .../packages/console-plugin-sdk/src/store.ts | 12 ++++----- .../src/utils/extension-i18n.ts | 9 ++++--- .../src/utils/useTranslatedExtensions.ts | 4 +-- .../src/hooks/create-resource-hook.ts | 4 +-- .../topology/src/components/workload/utils.ts | 7 +++-- frontend/public/reducers/features.ts | 12 ++++----- 17 files changed, 79 insertions(+), 74 deletions(-) diff --git a/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md b/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md index 59b2555b1ea..ab5e2786ad1 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md +++ b/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md @@ -12,15 +12,12 @@ table in [Console dynamic plugins README](./README.md). ## 4.21.0-prerelease.x - TBD -- **Deprecated** `setPluginStore` function in `k8s-utils.ts`. The function is now a noop and the export +- **Deprecated**: `setPluginStore` function in `k8s-utils.ts`. The function is now a noop and the export will be removed in a future release. ([CONSOLE-4840], [#15671]) -- **Type-only breaking change**: Fix `popupComponent` prop type in extension `console.dashboards/overview/health/resource` ([CONSOLE-4796], [#15526]) -- Increased alignment with `@openshift/dynamic-plugin-sdk` types ([CONSOLE-3769], [#15509], [#15738]) - - `AlwaysOnExtension` and `ModelDefinition` types are removed from `api/common-types` because they referred - to a legacy system which console dynamic plugins never supported. There is no direct replacement for these - types, and plugins should remove all uses of them. ([#15671]) - - The following types are now re-exported from `@openshift/dynamic-plugin-sdk` instead of being defined - locally: `ExtensionFlags`, `ExtensionTypeGuard`, `ResolvedCodeRefProperties`, `RemoteEntryModule`, and `Update`. ([#15509], [#15738]) +- **Type breaking**: Fix `popupComponent` prop type in extension `console.dashboards/overview/health/resource` ([CONSOLE-4796], [#15526]) +- **Type breaking**: `AlwaysOnExtension` and `ModelDefinition` types are removed from `api/common-types`. ([CONSOLE-3769], [#15509]) +- The following types are now re-exported from `@openshift/dynamic-plugin-sdk` instead of being defined + locally: `ExtensionFlags`, `ExtensionTypeGuard`, `ResolvedCodeRefProperties`, `RemoteEntryModule`, and `Update`. ([CONSOLE-4840], [#15509], [#15671]) - Add optional `fetch` property to extension `console.dashboards/overview/health/url` ([CONSOLE-4796], [#15526]) - Add optional `infrastructure` parameter to `PrometheusHealthHandler` type ([CONSOLE-4796], [#15526]) - Allow `K8sResourceKind` in `TopologyDataObject`, `TopologyResourcesObject`, and `OverviewItem` types ([CONSOLE-4840], [#15699]) @@ -221,4 +218,3 @@ table in [Console dynamic plugins README](./README.md). [#15671]: https://github.com/openshift/console/pull/15671 [#15699]: https://github.com/openshift/console/pull/15699 [#15735]: https://github.com/openshift/console/pull/15735 -[#15738]: https://github.com/openshift/console/pull/15738 diff --git a/frontend/packages/console-dynamic-plugin-sdk/README.md b/frontend/packages/console-dynamic-plugin-sdk/README.md index f28cb8d7e5b..8884e60f805 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/README.md +++ b/frontend/packages/console-dynamic-plugin-sdk/README.md @@ -89,8 +89,6 @@ For older 1.x plugin SDK packages, refer to the following version compatibility | Console Version | SDK Package | Last Package Version | | --------------- | ----------------------------------------------- | -------------------- | -| 4.18.x | `@openshift-console/dynamic-plugin-sdk` | 1.8.0 | -| | `@openshift-console/dynamic-plugin-sdk-webpack` | 1.3.0 | | 4.17.x | `@openshift-console/dynamic-plugin-sdk` | 1.6.0 | | | `@openshift-console/dynamic-plugin-sdk-webpack` | 1.2.0 | | 4.16.x | `@openshift-console/dynamic-plugin-sdk` | 1.4.0 | @@ -115,7 +113,7 @@ Console. | Console Version | PatternFly Versions | Notes | | --------------- | ------------------- | ------------------------------------- | -| 4.19.x | 6.x + 5.x | New dynamic plugins should use PF 6.x | +| 4.19.x - 4.21.x | 6.x + 5.x | New dynamic plugins should use PF 6.x | | 4.15.x - 4.18.x | 5.x + 4.x | New dynamic plugins should use PF 5.x | | 4.12.x - 4.14.x | 4.x | | @@ -123,7 +121,7 @@ Refer to [PatternFly Upgrade Notes][console-pf-upgrade-notes] containing links t ## Shared modules -Console is [configured](./src/shared-modules.ts) to share specific modules with its dynamic plugins. +Console is [configured](./src/shared-modules/shared-modules-meta.ts) to share specific modules with its dynamic plugins. The following shared modules are provided by Console, without plugins providing their own fallback: @@ -211,6 +209,7 @@ This section documents notable changes in Console provided shared modules and ot > [!WARNING] > Usage of non-PatternFly CSS provided by Console in plugins is not supported. This section only serves > as a courtesy for plugins which use these unsupported CSS classes. + - Removed support for the Bootstrap Grid system (`.row`, `.col-*`, etc.). Use [PatternFly Grid](https://www.patternfly.org/layouts/grid) instead. - Removed `co-external-link` styling. Use PatternFly Buttons with `variant="link"` instead. diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/api/useResolvedExtensions.ts b/frontend/packages/console-dynamic-plugin-sdk/src/api/useResolvedExtensions.ts index 62844d2040c..da20b0775af 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/api/useResolvedExtensions.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/api/useResolvedExtensions.ts @@ -2,10 +2,10 @@ import { useState, useEffect } from 'react'; import { useExtensions } from '@console/plugin-sdk/src/api/useExtensions'; import { resolveExtension } from '../coderefs/coderef-resolver'; import { UseResolvedExtensions } from '../extensions/console-types'; -import { Extension, ExtensionTypeGuard, ResolvedExtension } from '../types'; +import type { ExtensionDeclaration, ExtensionTypeGuard, ResolvedExtension } from '../types'; import { settleAllPromises } from '../utils/promise'; -export const useResolvedExtensions: UseResolvedExtensions = ( +export const useResolvedExtensions: UseResolvedExtensions = ( ...typeGuards: ExtensionTypeGuard[] ): [ResolvedExtension[], boolean, any[]] => { const extensions = useExtensions(...typeGuards); diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts b/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts index da5cff01364..8002a4fd1d2 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts @@ -206,9 +206,12 @@ describe('loadReferencedObject', () => { }); }); +type FooExtension = ExtensionDeclaration<'Foo', { test: boolean; qux: CodeRef }>; +type BarExtension = ExtensionDeclaration<'Bar', { test: number[]; baz: { test: CodeRef } }>; + describe('resolveEncodedCodeRefs', () => { it('replaces encoded code references with CodeRef functions', async () => { - const extensions: ExtensionDeclaration[] = [ + const extensions = [ { type: 'Foo', properties: { @@ -233,7 +236,7 @@ describe('resolveEncodedCodeRefs', () => { entryModule, 'Test@1.2.3', errorCallback, - ); + ) as [FooExtension, BarExtension]; expect(resolvedExtensions.length).toBe(extensions.length); diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/coderef-resolver.ts b/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/coderef-resolver.ts index ab7bc6a4d41..f522151c957 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/coderef-resolver.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/coderef-resolver.ts @@ -1,8 +1,9 @@ /* eslint-disable no-console */ +import { AnyObject } from '@openshift/dynamic-plugin-sdk'; import * as _ from 'lodash'; -import { - Extension, +import type { + ExtensionDeclaration, RemoteEntryModule, EncodedCodeRef, CodeRef, @@ -94,11 +95,11 @@ export const loadReferencedObject = async ( * _Does not execute `CodeRef` functions to load the referenced objects._ */ export const resolveEncodedCodeRefs = ( - extensions: Extension[], + extensions: ExtensionDeclaration[], entryModule: RemoteEntryModule, pluginID: string, errorCallback: VoidFunction, -): Extension[] => +): ExtensionDeclaration[] => _.cloneDeep(extensions).map((e) => { deepForOwn(e.properties, isEncodedCodeRef, (ref, key, obj) => { const loader = applyCodeRefSymbol(async () => @@ -114,8 +115,8 @@ export const resolveEncodedCodeRefs = ( * Returns an extension with its `CodeRef` properties replaced with referenced objects. */ export const resolveExtension = async < - E extends Extension

, - P = ExtensionProperties, + E extends ExtensionDeclaration, + P extends AnyObject = ExtensionProperties, R = UpdateExtensionProperties, P> >( extension: E, diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/console-types.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/console-types.ts index 04f6f0316ac..13aa0ef07ba 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/console-types.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/console-types.ts @@ -5,7 +5,7 @@ import { ButtonProps } from '@patternfly/react-core'; import { ICell, OnSelect, SortByDirection, TableGridBreakpoint } from '@patternfly/react-table'; import { LocationDescriptor } from 'history'; import type * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; -import { +import type { ExtensionK8sGroupKindModel, K8sModel, K8sVerb, @@ -16,7 +16,7 @@ import { ResolvedExtension, Selector, } from '../api/common-types'; -import { Extension, ExtensionTypeGuard } from '../types'; +import type { ExtensionDeclaration, ExtensionTypeGuard } from '../types'; import { CustomDataSource } from './dashboard-data-source'; export type OwnerReference = { @@ -250,7 +250,7 @@ export type UseK8sWatchResources = ( initResources: WatchK8sResources, ) => WatchK8sResults; -export type UseResolvedExtensions = ( +export type UseResolvedExtensions = ( ...typeGuards: ExtensionTypeGuard[] ) => [ResolvedExtension[], boolean, any[]]; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/types.ts b/frontend/packages/console-dynamic-plugin-sdk/src/types.ts index 9222020b52c..90baceaf5dd 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/types.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/types.ts @@ -1,15 +1,17 @@ import type { CodeRef as SDKCodeRef, + Extension as ExtensionDeclaration, ExtensionFlags, - ExtensionPredicate, LoadedExtension as SDKLoadedExtension, ReplaceProperties as Update, MapCodeRefsToValues, + AnyObject, } from '@openshift/dynamic-plugin-sdk'; export type { ExtensionFlags, Extension as ExtensionDeclaration, + ExtensionPredicate as ExtensionTypeGuard, MapCodeRefsToValues as ResolvedCodeRefProperties, PluginEntryModule as RemoteEntryModule, ReplaceProperties as Update, @@ -32,15 +34,12 @@ export type Extension

= { flags?: ExtensionFlags; }; -/** - * TS type guard to narrow type of the given extension to `E`. - */ -export type ExtensionTypeGuard = ExtensionPredicate; - /** * Runtime extension interface, exposing additional metadata. */ -export type LoadedExtension = SDKLoadedExtension & { +export type LoadedExtension< + E extends ExtensionDeclaration = ExtensionDeclaration +> = SDKLoadedExtension & { pluginID: string; }; @@ -65,15 +64,15 @@ export type ExtractCodeRefType = R extends CodeRef ? T : never; /** * Infer the properties of extension `E`. */ -export type ExtensionProperties = E extends Extension ? P : never; +export type ExtensionProperties = E extends ExtensionDeclaration ? P : never; /** * Update existing properties of extension `E` with ones declared in object `U`. */ export type UpdateExtensionProperties< - E extends Extension

, + E extends ExtensionDeclaration, U extends {}, - P = ExtensionProperties + P extends AnyObject = ExtensionProperties > = Update< E, { @@ -86,6 +85,7 @@ export type UpdateExtensionProperties< * * This also coerces `E` type to `LoadedExtension` interface for runtime consumption. */ -export type ResolvedExtension, P = ExtensionProperties> = LoadedExtension< - UpdateExtensionProperties, P> ->; +export type ResolvedExtension< + E extends ExtensionDeclaration, + P extends AnyObject = ExtensionProperties +> = LoadedExtension, P>>; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/validation/ExtensionValidator.ts b/frontend/packages/console-dynamic-plugin-sdk/src/validation/ExtensionValidator.ts index 6aeaa771fb8..2dba2dbaae3 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/validation/ExtensionValidator.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/validation/ExtensionValidator.ts @@ -4,7 +4,7 @@ import * as _ from 'lodash'; import * as webpack from 'webpack'; import { ConsolePluginBuildMetadata } from '../build-types'; import { isEncodedCodeRef, parseEncodedCodeRefValue } from '../coderefs/coderef-resolver'; -import { Extension, EncodedCodeRef } from '../types'; +import { ExtensionDeclaration, EncodedCodeRef } from '../types'; import { deepForOwn } from '../utils/object'; import { BaseValidator } from './BaseValidator'; @@ -59,7 +59,7 @@ export const guessModuleFilePath = ( return basePath; }; -export const collectCodeRefData = (extensions: Extension[]) => +export const collectCodeRefData = (extensions: ExtensionDeclaration[]) => extensions.reduce((acc, e, index) => { const data: ExtensionCodeRefData = { index, propToCodeRefValue: {} }; @@ -106,7 +106,7 @@ export const findWebpackModules = ( export class ExtensionValidator extends BaseValidator { validate( compilation: webpack.Compilation, - extensions: Extension[], + extensions: ExtensionDeclaration[], exposedModules: ConsolePluginBuildMetadata['exposedModules'], pluginBasePath?: string, ) { diff --git a/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts b/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts index 390b417287c..e281308dab7 100644 --- a/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts +++ b/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts @@ -1,7 +1,7 @@ import * as _ from 'lodash'; import { Store } from 'redux'; import type { - Extension, + ExtensionDeclaration, ExtensionTypeGuard, LoadedExtension, } from '@console/dynamic-plugin-sdk/src/types'; @@ -46,7 +46,7 @@ export const initSubscriptionService = (pluginStore: PluginStore, reduxStore: St const invokeExtensionListener = ( sub: ExtensionSubscription, - currentExtensions: Extension[], + currentExtensions: ExtensionDeclaration[], currentFlags: FeatureFlags, ) => { // Narrow extensions according to type guards @@ -72,7 +72,7 @@ export const initSubscriptionService = (pluginStore: PluginStore, reduxStore: St listener(pluginStore.getPluginInfo()); }; - let lastExtensions: Extension[] = null; + let lastExtensions: ExtensionDeclaration[] = null; let lastFlags: FeatureFlags = null; const invokeAllExtensionListeners = () => { @@ -151,7 +151,7 @@ export const getPluginStore = (): PluginStore => { * * @returns Function that unsubscribes the listener. */ -export const subscribeToExtensions = ( +export const subscribeToExtensions = ( listener: ExtensionListener>, ...typeGuards: ExtensionTypeGuard[] ) => { @@ -182,7 +182,7 @@ export const subscribeToDynamicPlugins = (listener: DynamicPluginListener) => { /** * `ExtensionListener` adapter that computes the difference between the calls. */ -export const extensionDiffListener = ( +export const extensionDiffListener = ( listener: (added: E[], removed: E[]) => void, ): ExtensionListener => { let prevExtensions: E[] = []; @@ -197,9 +197,9 @@ export const extensionDiffListener = ( }; }; -type ExtensionListener = (extensions: E[]) => void; +type ExtensionListener = (extensions: E[]) => void; -type ExtensionSubscription = { +type ExtensionSubscription = { listener: ExtensionListener; typeGuards: ExtensionTypeGuard[]; listenerLastArgs?: E[]; diff --git a/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts b/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts index 2df684aa8c9..88723b4538d 100644 --- a/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts +++ b/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts @@ -1,7 +1,7 @@ import { useRef, useCallback, useEffect } from 'react'; import * as _ from 'lodash'; import type { - Extension, + ExtensionDeclaration, ExtensionTypeGuard, LoadedExtension, } from '@console/dynamic-plugin-sdk/src/types'; @@ -41,7 +41,7 @@ import { subscribeToExtensions } from './pluginSubscriptionService'; * @returns List of extension instances which are currently in use, narrowed by the * given type guard(s). */ -export const useExtensions = ( +export const useExtensions = ( ...typeGuards: ExtensionTypeGuard[] ): LoadedExtension[] => { if (typeGuards.length === 0) { diff --git a/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts b/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts index 298c0cb59e6..db5d704b7e1 100644 --- a/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts +++ b/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts @@ -7,7 +7,7 @@ import { } from '@console/dynamic-plugin-sdk/src/coderefs/coderef-resolver'; import { extensionsFile } from '@console/dynamic-plugin-sdk/src/constants'; import { ConsoleExtensionsJSON } from '@console/dynamic-plugin-sdk/src/schema/console-extensions'; -import { Extension, EncodedCodeRef } from '@console/dynamic-plugin-sdk/src/types'; +import { ExtensionDeclaration, EncodedCodeRef } from '@console/dynamic-plugin-sdk/src/types'; import { parseJSONC } from '@console/dynamic-plugin-sdk/src/utils/jsonc'; import { guessModuleFilePath } from '@console/dynamic-plugin-sdk/src/validation/ExtensionValidator'; import { ValidationResult } from '@console/dynamic-plugin-sdk/src/validation/ValidationResult'; @@ -76,7 +76,7 @@ export const getActivePluginsModule = ( export const loadActivePluginsForTestPurposes = ( pluginPackages: PluginPackage[], moduleHook: VoidFunction = _.noop, - extensionHook: (pkg: PluginPackage) => Extension[] = _.constant([]), + extensionHook: (pkg: PluginPackage) => ExtensionDeclaration[] = _.constant([]), ) => { moduleHook(); const activePlugins: ActivePlugin[] = []; diff --git a/frontend/packages/console-plugin-sdk/src/store.ts b/frontend/packages/console-plugin-sdk/src/store.ts index eaecb63dd60..9fd75b35c5f 100644 --- a/frontend/packages/console-plugin-sdk/src/store.ts +++ b/frontend/packages/console-plugin-sdk/src/store.ts @@ -2,17 +2,17 @@ import * as _ from 'lodash'; import { StandardConsolePluginManifest } from '@console/dynamic-plugin-sdk/src/build-types'; -import { Extension, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import type { ExtensionDeclaration, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { ActivePlugin } from './typings/base'; -export const sanitizeExtension = (e: E): E => { +export const sanitizeExtension = (e: E): E => { e.flags = e.flags || {}; e.flags.required = _.uniq(e.flags.required || []); e.flags.disallowed = _.uniq(e.flags.disallowed || []); return e; }; -export const augmentExtension = ( +export const augmentExtension = ( e: E, pluginID: string, pluginName: string, @@ -24,10 +24,10 @@ export const augmentExtension = ( uid: `${pluginID}[${index}]`, }); -export const isExtensionInUse = (e: Extension, flags: FlagsObject): boolean => +export const isExtensionInUse = (e: ExtensionDeclaration, flags: FlagsObject): boolean => e.flags.required.every((f) => flags[f]) && e.flags.disallowed.every((f) => !flags[f]); -export const getGatingFlagNames = (extensions: Extension[]): string[] => +export const getGatingFlagNames = (extensions: ExtensionDeclaration[]): string[] => _.uniq([ ..._.flatMap(extensions.map((e) => e.flags.required)), ..._.flatMap(extensions.map((e) => e.flags.disallowed)), @@ -111,7 +111,7 @@ export class PluginStore { addDynamicPlugin( pluginID: string, manifest: StandardConsolePluginManifest, - resolvedExtensions: Extension[], + resolvedExtensions: ExtensionDeclaration[], ) { if (this.loadedDynamicPlugins.has(pluginID)) { console.warn(`Attempt to re-add plugin ${pluginID}`); diff --git a/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts b/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts index eabf3980078..21e38d6d2e9 100644 --- a/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts +++ b/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts @@ -1,5 +1,5 @@ import { TFunction } from 'i18next'; -import type { Extension } from '@console/dynamic-plugin-sdk/src/types'; +import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; import { deepForOwn, PredicateCheck, @@ -15,7 +15,7 @@ export const isTranslatableString = (value): value is string => { export const getTranslationKey = (value: string) => isTranslatableString(value) ? value.substr(1, value.length - 2) : undefined; -export const translateExtensionDeep = ( +export const translateExtensionDeep = ( extension: E, translationStringPredicate: PredicateCheck, cb: ValueCallback, @@ -27,7 +27,10 @@ export const translateExtensionDeep = ( * Recursively updates the extension's properties, replacing all translatable string values * via the provided `t` function. */ -export const translateExtension = (extension: E, t: TFunction): E => { +export const translateExtension = ( + extension: E, + t: TFunction, +): E => { translateExtensionDeep(extension, isTranslatableString, (value, key, obj) => { obj[key] = t(value); }); diff --git a/frontend/packages/console-plugin-sdk/src/utils/useTranslatedExtensions.ts b/frontend/packages/console-plugin-sdk/src/utils/useTranslatedExtensions.ts index a96321db433..4d18168045d 100644 --- a/frontend/packages/console-plugin-sdk/src/utils/useTranslatedExtensions.ts +++ b/frontend/packages/console-plugin-sdk/src/utils/useTranslatedExtensions.ts @@ -1,5 +1,5 @@ import { useMemo } from 'react'; -import { Extension, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { ExtensionDeclaration, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { isTranslatableString, translateExtensionDeep } from './extension-i18n'; import useTranslationExt from './useTranslationExt'; @@ -11,7 +11,7 @@ import useTranslationExt from './useTranslationExt'; */ const translationKeyMap: Record> = {}; -export const useTranslatedExtensions = ( +export const useTranslatedExtensions = ( extensions: LoadedExtension[], ): typeof extensions => { const { t } = useTranslationExt(); diff --git a/frontend/packages/console-shared/src/hooks/create-resource-hook.ts b/frontend/packages/console-shared/src/hooks/create-resource-hook.ts index 2b79b94c3d8..a58ef44053d 100644 --- a/frontend/packages/console-shared/src/hooks/create-resource-hook.ts +++ b/frontend/packages/console-shared/src/hooks/create-resource-hook.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react'; import { isCreateResource, CreateResource, GroupVersionKind } from '@console/dynamic-plugin-sdk'; -import { Extension, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { ExtensionDeclaration, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { referenceForExtensionModel } from '@console/internal/module/k8s'; import { useExtensions } from '@console/plugin-sdk/src/api/useExtensions'; @@ -8,7 +8,7 @@ export const useCreateResourceExtension = ( modelReference: GroupVersionKind, ): LoadedExtension => { const createResourceTypeGuard = useCallback( - (e: Extension): e is CreateResource => + (e: ExtensionDeclaration): e is CreateResource => isCreateResource(e) && referenceForExtensionModel(e.properties.model) === modelReference, [modelReference], ); diff --git a/frontend/packages/topology/src/components/workload/utils.ts b/frontend/packages/topology/src/components/workload/utils.ts index 809f831e04d..4ab27c0b7d3 100644 --- a/frontend/packages/topology/src/components/workload/utils.ts +++ b/frontend/packages/topology/src/components/workload/utils.ts @@ -7,7 +7,7 @@ import { PodsAdapterDataType, ResolvedExtension, } from '@console/dynamic-plugin-sdk'; -import { Extension } from '@console/dynamic-plugin-sdk/src/types'; +import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; import { useK8sWatchResources } from '@console/internal/components/utils/k8s-watch-hook'; import { DeploymentConfigModel, @@ -28,7 +28,10 @@ import { } from '@console/shared'; import { getResource } from '../../utils'; -export const getDataFromAdapter = ( +export const getDataFromAdapter = < + T extends { resource: K8sResourceCommon }, + E extends ExtensionDeclaration +>( element: GraphElement, [resolvedExtensions, loaded]: [ResolvedExtension[], boolean], ): T | undefined => diff --git a/frontend/public/reducers/features.ts b/frontend/public/reducers/features.ts index a5f49ab6453..657d1907ef8 100644 --- a/frontend/public/reducers/features.ts +++ b/frontend/public/reducers/features.ts @@ -72,12 +72,12 @@ const getModelRef = (e: ModelFeatureFlag) => { return referenceForGroupVersionKind(model.group)(model.version)(model.kind); }; -pluginStore - .getExtensions() - .filter(isModelFeatureFlag) - .forEach((ff) => { - addToCRDs(referenceForModel(ff.properties.model), ff.properties.flag); - }); +// TODO: When migrating to @openshift/dynamic-plugin-sdk, use the type parameter from +// pluginStore.getExtensions<...>() to avoid `as any` cast. +(pluginStore.getExtensions().filter(isModelFeatureFlag) as any).forEach((ff) => { + // This is incorrect (for `ExtensionK8sModel` we should use `referenceForExtensionModel`). + addToCRDs(referenceForModel(ff.properties.model), ff.properties.flag); +}); export const featureReducerName = 'FLAGS'; export const featureReducer = (state: FeatureState, action: FeatureAction): FeatureState => { From f36db8f1dcd98844f17e3647a7f331f97bbc1362 Mon Sep 17 00:00:00 2001 From: logonoff Date: Tue, 25 Nov 2025 15:11:15 -0500 Subject: [PATCH 11/14] Revert "CONSOLE-3769: Address review comments" This reverts commit 4babc266cef584f030da18133ef4fa90b07d51c2. --- .../CHANGELOG-core.md | 14 ++++++---- .../console-dynamic-plugin-sdk/README.md | 7 ++--- .../src/api/useResolvedExtensions.ts | 4 +-- .../__tests__/coderef-resolver.spec.ts | 7 ++--- .../src/coderefs/coderef-resolver.ts | 13 +++++----- .../src/extensions/console-types.ts | 6 ++--- .../console-dynamic-plugin-sdk/src/types.ts | 26 +++++++++---------- .../src/validation/ExtensionValidator.ts | 6 ++--- .../src/api/pluginSubscriptionService.ts | 14 +++++----- .../src/api/useExtensions.ts | 4 +-- .../src/codegen/active-plugins.ts | 4 +-- .../packages/console-plugin-sdk/src/store.ts | 12 ++++----- .../src/utils/extension-i18n.ts | 9 +++---- .../src/utils/useTranslatedExtensions.ts | 4 +-- .../src/hooks/create-resource-hook.ts | 4 +-- .../topology/src/components/workload/utils.ts | 7 ++--- frontend/public/reducers/features.ts | 12 ++++----- 17 files changed, 74 insertions(+), 79 deletions(-) diff --git a/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md b/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md index ab5e2786ad1..59b2555b1ea 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md +++ b/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md @@ -12,12 +12,15 @@ table in [Console dynamic plugins README](./README.md). ## 4.21.0-prerelease.x - TBD -- **Deprecated**: `setPluginStore` function in `k8s-utils.ts`. The function is now a noop and the export +- **Deprecated** `setPluginStore` function in `k8s-utils.ts`. The function is now a noop and the export will be removed in a future release. ([CONSOLE-4840], [#15671]) -- **Type breaking**: Fix `popupComponent` prop type in extension `console.dashboards/overview/health/resource` ([CONSOLE-4796], [#15526]) -- **Type breaking**: `AlwaysOnExtension` and `ModelDefinition` types are removed from `api/common-types`. ([CONSOLE-3769], [#15509]) -- The following types are now re-exported from `@openshift/dynamic-plugin-sdk` instead of being defined - locally: `ExtensionFlags`, `ExtensionTypeGuard`, `ResolvedCodeRefProperties`, `RemoteEntryModule`, and `Update`. ([CONSOLE-4840], [#15509], [#15671]) +- **Type-only breaking change**: Fix `popupComponent` prop type in extension `console.dashboards/overview/health/resource` ([CONSOLE-4796], [#15526]) +- Increased alignment with `@openshift/dynamic-plugin-sdk` types ([CONSOLE-3769], [#15509], [#15738]) + - `AlwaysOnExtension` and `ModelDefinition` types are removed from `api/common-types` because they referred + to a legacy system which console dynamic plugins never supported. There is no direct replacement for these + types, and plugins should remove all uses of them. ([#15671]) + - The following types are now re-exported from `@openshift/dynamic-plugin-sdk` instead of being defined + locally: `ExtensionFlags`, `ExtensionTypeGuard`, `ResolvedCodeRefProperties`, `RemoteEntryModule`, and `Update`. ([#15509], [#15738]) - Add optional `fetch` property to extension `console.dashboards/overview/health/url` ([CONSOLE-4796], [#15526]) - Add optional `infrastructure` parameter to `PrometheusHealthHandler` type ([CONSOLE-4796], [#15526]) - Allow `K8sResourceKind` in `TopologyDataObject`, `TopologyResourcesObject`, and `OverviewItem` types ([CONSOLE-4840], [#15699]) @@ -218,3 +221,4 @@ table in [Console dynamic plugins README](./README.md). [#15671]: https://github.com/openshift/console/pull/15671 [#15699]: https://github.com/openshift/console/pull/15699 [#15735]: https://github.com/openshift/console/pull/15735 +[#15738]: https://github.com/openshift/console/pull/15738 diff --git a/frontend/packages/console-dynamic-plugin-sdk/README.md b/frontend/packages/console-dynamic-plugin-sdk/README.md index 8884e60f805..f28cb8d7e5b 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/README.md +++ b/frontend/packages/console-dynamic-plugin-sdk/README.md @@ -89,6 +89,8 @@ For older 1.x plugin SDK packages, refer to the following version compatibility | Console Version | SDK Package | Last Package Version | | --------------- | ----------------------------------------------- | -------------------- | +| 4.18.x | `@openshift-console/dynamic-plugin-sdk` | 1.8.0 | +| | `@openshift-console/dynamic-plugin-sdk-webpack` | 1.3.0 | | 4.17.x | `@openshift-console/dynamic-plugin-sdk` | 1.6.0 | | | `@openshift-console/dynamic-plugin-sdk-webpack` | 1.2.0 | | 4.16.x | `@openshift-console/dynamic-plugin-sdk` | 1.4.0 | @@ -113,7 +115,7 @@ Console. | Console Version | PatternFly Versions | Notes | | --------------- | ------------------- | ------------------------------------- | -| 4.19.x - 4.21.x | 6.x + 5.x | New dynamic plugins should use PF 6.x | +| 4.19.x | 6.x + 5.x | New dynamic plugins should use PF 6.x | | 4.15.x - 4.18.x | 5.x + 4.x | New dynamic plugins should use PF 5.x | | 4.12.x - 4.14.x | 4.x | | @@ -121,7 +123,7 @@ Refer to [PatternFly Upgrade Notes][console-pf-upgrade-notes] containing links t ## Shared modules -Console is [configured](./src/shared-modules/shared-modules-meta.ts) to share specific modules with its dynamic plugins. +Console is [configured](./src/shared-modules.ts) to share specific modules with its dynamic plugins. The following shared modules are provided by Console, without plugins providing their own fallback: @@ -209,7 +211,6 @@ This section documents notable changes in Console provided shared modules and ot > [!WARNING] > Usage of non-PatternFly CSS provided by Console in plugins is not supported. This section only serves > as a courtesy for plugins which use these unsupported CSS classes. - - Removed support for the Bootstrap Grid system (`.row`, `.col-*`, etc.). Use [PatternFly Grid](https://www.patternfly.org/layouts/grid) instead. - Removed `co-external-link` styling. Use PatternFly Buttons with `variant="link"` instead. diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/api/useResolvedExtensions.ts b/frontend/packages/console-dynamic-plugin-sdk/src/api/useResolvedExtensions.ts index da20b0775af..62844d2040c 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/api/useResolvedExtensions.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/api/useResolvedExtensions.ts @@ -2,10 +2,10 @@ import { useState, useEffect } from 'react'; import { useExtensions } from '@console/plugin-sdk/src/api/useExtensions'; import { resolveExtension } from '../coderefs/coderef-resolver'; import { UseResolvedExtensions } from '../extensions/console-types'; -import type { ExtensionDeclaration, ExtensionTypeGuard, ResolvedExtension } from '../types'; +import { Extension, ExtensionTypeGuard, ResolvedExtension } from '../types'; import { settleAllPromises } from '../utils/promise'; -export const useResolvedExtensions: UseResolvedExtensions = ( +export const useResolvedExtensions: UseResolvedExtensions = ( ...typeGuards: ExtensionTypeGuard[] ): [ResolvedExtension[], boolean, any[]] => { const extensions = useExtensions(...typeGuards); diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts b/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts index 8002a4fd1d2..da5cff01364 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts @@ -206,12 +206,9 @@ describe('loadReferencedObject', () => { }); }); -type FooExtension = ExtensionDeclaration<'Foo', { test: boolean; qux: CodeRef }>; -type BarExtension = ExtensionDeclaration<'Bar', { test: number[]; baz: { test: CodeRef } }>; - describe('resolveEncodedCodeRefs', () => { it('replaces encoded code references with CodeRef functions', async () => { - const extensions = [ + const extensions: ExtensionDeclaration[] = [ { type: 'Foo', properties: { @@ -236,7 +233,7 @@ describe('resolveEncodedCodeRefs', () => { entryModule, 'Test@1.2.3', errorCallback, - ) as [FooExtension, BarExtension]; + ); expect(resolvedExtensions.length).toBe(extensions.length); diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/coderef-resolver.ts b/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/coderef-resolver.ts index f522151c957..ab7bc6a4d41 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/coderef-resolver.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/coderef-resolver.ts @@ -1,9 +1,8 @@ /* eslint-disable no-console */ -import { AnyObject } from '@openshift/dynamic-plugin-sdk'; import * as _ from 'lodash'; -import type { - ExtensionDeclaration, +import { + Extension, RemoteEntryModule, EncodedCodeRef, CodeRef, @@ -95,11 +94,11 @@ export const loadReferencedObject = async ( * _Does not execute `CodeRef` functions to load the referenced objects._ */ export const resolveEncodedCodeRefs = ( - extensions: ExtensionDeclaration[], + extensions: Extension[], entryModule: RemoteEntryModule, pluginID: string, errorCallback: VoidFunction, -): ExtensionDeclaration[] => +): Extension[] => _.cloneDeep(extensions).map((e) => { deepForOwn(e.properties, isEncodedCodeRef, (ref, key, obj) => { const loader = applyCodeRefSymbol(async () => @@ -115,8 +114,8 @@ export const resolveEncodedCodeRefs = ( * Returns an extension with its `CodeRef` properties replaced with referenced objects. */ export const resolveExtension = async < - E extends ExtensionDeclaration, - P extends AnyObject = ExtensionProperties, + E extends Extension

, + P = ExtensionProperties, R = UpdateExtensionProperties, P> >( extension: E, diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/console-types.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/console-types.ts index 13aa0ef07ba..04f6f0316ac 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/console-types.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/console-types.ts @@ -5,7 +5,7 @@ import { ButtonProps } from '@patternfly/react-core'; import { ICell, OnSelect, SortByDirection, TableGridBreakpoint } from '@patternfly/react-table'; import { LocationDescriptor } from 'history'; import type * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; -import type { +import { ExtensionK8sGroupKindModel, K8sModel, K8sVerb, @@ -16,7 +16,7 @@ import type { ResolvedExtension, Selector, } from '../api/common-types'; -import type { ExtensionDeclaration, ExtensionTypeGuard } from '../types'; +import { Extension, ExtensionTypeGuard } from '../types'; import { CustomDataSource } from './dashboard-data-source'; export type OwnerReference = { @@ -250,7 +250,7 @@ export type UseK8sWatchResources = ( initResources: WatchK8sResources, ) => WatchK8sResults; -export type UseResolvedExtensions = ( +export type UseResolvedExtensions = ( ...typeGuards: ExtensionTypeGuard[] ) => [ResolvedExtension[], boolean, any[]]; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/types.ts b/frontend/packages/console-dynamic-plugin-sdk/src/types.ts index 90baceaf5dd..9222020b52c 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/types.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/types.ts @@ -1,17 +1,15 @@ import type { CodeRef as SDKCodeRef, - Extension as ExtensionDeclaration, ExtensionFlags, + ExtensionPredicate, LoadedExtension as SDKLoadedExtension, ReplaceProperties as Update, MapCodeRefsToValues, - AnyObject, } from '@openshift/dynamic-plugin-sdk'; export type { ExtensionFlags, Extension as ExtensionDeclaration, - ExtensionPredicate as ExtensionTypeGuard, MapCodeRefsToValues as ResolvedCodeRefProperties, PluginEntryModule as RemoteEntryModule, ReplaceProperties as Update, @@ -34,12 +32,15 @@ export type Extension

= { flags?: ExtensionFlags; }; +/** + * TS type guard to narrow type of the given extension to `E`. + */ +export type ExtensionTypeGuard = ExtensionPredicate; + /** * Runtime extension interface, exposing additional metadata. */ -export type LoadedExtension< - E extends ExtensionDeclaration = ExtensionDeclaration -> = SDKLoadedExtension & { +export type LoadedExtension = SDKLoadedExtension & { pluginID: string; }; @@ -64,15 +65,15 @@ export type ExtractCodeRefType = R extends CodeRef ? T : never; /** * Infer the properties of extension `E`. */ -export type ExtensionProperties = E extends ExtensionDeclaration ? P : never; +export type ExtensionProperties = E extends Extension ? P : never; /** * Update existing properties of extension `E` with ones declared in object `U`. */ export type UpdateExtensionProperties< - E extends ExtensionDeclaration, + E extends Extension

, U extends {}, - P extends AnyObject = ExtensionProperties + P = ExtensionProperties > = Update< E, { @@ -85,7 +86,6 @@ export type UpdateExtensionProperties< * * This also coerces `E` type to `LoadedExtension` interface for runtime consumption. */ -export type ResolvedExtension< - E extends ExtensionDeclaration, - P extends AnyObject = ExtensionProperties -> = LoadedExtension, P>>; +export type ResolvedExtension, P = ExtensionProperties> = LoadedExtension< + UpdateExtensionProperties, P> +>; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/validation/ExtensionValidator.ts b/frontend/packages/console-dynamic-plugin-sdk/src/validation/ExtensionValidator.ts index 2dba2dbaae3..6aeaa771fb8 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/validation/ExtensionValidator.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/validation/ExtensionValidator.ts @@ -4,7 +4,7 @@ import * as _ from 'lodash'; import * as webpack from 'webpack'; import { ConsolePluginBuildMetadata } from '../build-types'; import { isEncodedCodeRef, parseEncodedCodeRefValue } from '../coderefs/coderef-resolver'; -import { ExtensionDeclaration, EncodedCodeRef } from '../types'; +import { Extension, EncodedCodeRef } from '../types'; import { deepForOwn } from '../utils/object'; import { BaseValidator } from './BaseValidator'; @@ -59,7 +59,7 @@ export const guessModuleFilePath = ( return basePath; }; -export const collectCodeRefData = (extensions: ExtensionDeclaration[]) => +export const collectCodeRefData = (extensions: Extension[]) => extensions.reduce((acc, e, index) => { const data: ExtensionCodeRefData = { index, propToCodeRefValue: {} }; @@ -106,7 +106,7 @@ export const findWebpackModules = ( export class ExtensionValidator extends BaseValidator { validate( compilation: webpack.Compilation, - extensions: ExtensionDeclaration[], + extensions: Extension[], exposedModules: ConsolePluginBuildMetadata['exposedModules'], pluginBasePath?: string, ) { diff --git a/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts b/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts index e281308dab7..390b417287c 100644 --- a/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts +++ b/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts @@ -1,7 +1,7 @@ import * as _ from 'lodash'; import { Store } from 'redux'; import type { - ExtensionDeclaration, + Extension, ExtensionTypeGuard, LoadedExtension, } from '@console/dynamic-plugin-sdk/src/types'; @@ -46,7 +46,7 @@ export const initSubscriptionService = (pluginStore: PluginStore, reduxStore: St const invokeExtensionListener = ( sub: ExtensionSubscription, - currentExtensions: ExtensionDeclaration[], + currentExtensions: Extension[], currentFlags: FeatureFlags, ) => { // Narrow extensions according to type guards @@ -72,7 +72,7 @@ export const initSubscriptionService = (pluginStore: PluginStore, reduxStore: St listener(pluginStore.getPluginInfo()); }; - let lastExtensions: ExtensionDeclaration[] = null; + let lastExtensions: Extension[] = null; let lastFlags: FeatureFlags = null; const invokeAllExtensionListeners = () => { @@ -151,7 +151,7 @@ export const getPluginStore = (): PluginStore => { * * @returns Function that unsubscribes the listener. */ -export const subscribeToExtensions = ( +export const subscribeToExtensions = ( listener: ExtensionListener>, ...typeGuards: ExtensionTypeGuard[] ) => { @@ -182,7 +182,7 @@ export const subscribeToDynamicPlugins = (listener: DynamicPluginListener) => { /** * `ExtensionListener` adapter that computes the difference between the calls. */ -export const extensionDiffListener = ( +export const extensionDiffListener = ( listener: (added: E[], removed: E[]) => void, ): ExtensionListener => { let prevExtensions: E[] = []; @@ -197,9 +197,9 @@ export const extensionDiffListener = ( }; }; -type ExtensionListener = (extensions: E[]) => void; +type ExtensionListener = (extensions: E[]) => void; -type ExtensionSubscription = { +type ExtensionSubscription = { listener: ExtensionListener; typeGuards: ExtensionTypeGuard[]; listenerLastArgs?: E[]; diff --git a/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts b/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts index 88723b4538d..2df684aa8c9 100644 --- a/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts +++ b/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts @@ -1,7 +1,7 @@ import { useRef, useCallback, useEffect } from 'react'; import * as _ from 'lodash'; import type { - ExtensionDeclaration, + Extension, ExtensionTypeGuard, LoadedExtension, } from '@console/dynamic-plugin-sdk/src/types'; @@ -41,7 +41,7 @@ import { subscribeToExtensions } from './pluginSubscriptionService'; * @returns List of extension instances which are currently in use, narrowed by the * given type guard(s). */ -export const useExtensions = ( +export const useExtensions = ( ...typeGuards: ExtensionTypeGuard[] ): LoadedExtension[] => { if (typeGuards.length === 0) { diff --git a/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts b/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts index db5d704b7e1..298c0cb59e6 100644 --- a/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts +++ b/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts @@ -7,7 +7,7 @@ import { } from '@console/dynamic-plugin-sdk/src/coderefs/coderef-resolver'; import { extensionsFile } from '@console/dynamic-plugin-sdk/src/constants'; import { ConsoleExtensionsJSON } from '@console/dynamic-plugin-sdk/src/schema/console-extensions'; -import { ExtensionDeclaration, EncodedCodeRef } from '@console/dynamic-plugin-sdk/src/types'; +import { Extension, EncodedCodeRef } from '@console/dynamic-plugin-sdk/src/types'; import { parseJSONC } from '@console/dynamic-plugin-sdk/src/utils/jsonc'; import { guessModuleFilePath } from '@console/dynamic-plugin-sdk/src/validation/ExtensionValidator'; import { ValidationResult } from '@console/dynamic-plugin-sdk/src/validation/ValidationResult'; @@ -76,7 +76,7 @@ export const getActivePluginsModule = ( export const loadActivePluginsForTestPurposes = ( pluginPackages: PluginPackage[], moduleHook: VoidFunction = _.noop, - extensionHook: (pkg: PluginPackage) => ExtensionDeclaration[] = _.constant([]), + extensionHook: (pkg: PluginPackage) => Extension[] = _.constant([]), ) => { moduleHook(); const activePlugins: ActivePlugin[] = []; diff --git a/frontend/packages/console-plugin-sdk/src/store.ts b/frontend/packages/console-plugin-sdk/src/store.ts index 9fd75b35c5f..eaecb63dd60 100644 --- a/frontend/packages/console-plugin-sdk/src/store.ts +++ b/frontend/packages/console-plugin-sdk/src/store.ts @@ -2,17 +2,17 @@ import * as _ from 'lodash'; import { StandardConsolePluginManifest } from '@console/dynamic-plugin-sdk/src/build-types'; -import type { ExtensionDeclaration, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { Extension, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { ActivePlugin } from './typings/base'; -export const sanitizeExtension = (e: E): E => { +export const sanitizeExtension = (e: E): E => { e.flags = e.flags || {}; e.flags.required = _.uniq(e.flags.required || []); e.flags.disallowed = _.uniq(e.flags.disallowed || []); return e; }; -export const augmentExtension = ( +export const augmentExtension = ( e: E, pluginID: string, pluginName: string, @@ -24,10 +24,10 @@ export const augmentExtension = ( uid: `${pluginID}[${index}]`, }); -export const isExtensionInUse = (e: ExtensionDeclaration, flags: FlagsObject): boolean => +export const isExtensionInUse = (e: Extension, flags: FlagsObject): boolean => e.flags.required.every((f) => flags[f]) && e.flags.disallowed.every((f) => !flags[f]); -export const getGatingFlagNames = (extensions: ExtensionDeclaration[]): string[] => +export const getGatingFlagNames = (extensions: Extension[]): string[] => _.uniq([ ..._.flatMap(extensions.map((e) => e.flags.required)), ..._.flatMap(extensions.map((e) => e.flags.disallowed)), @@ -111,7 +111,7 @@ export class PluginStore { addDynamicPlugin( pluginID: string, manifest: StandardConsolePluginManifest, - resolvedExtensions: ExtensionDeclaration[], + resolvedExtensions: Extension[], ) { if (this.loadedDynamicPlugins.has(pluginID)) { console.warn(`Attempt to re-add plugin ${pluginID}`); diff --git a/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts b/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts index 21e38d6d2e9..eabf3980078 100644 --- a/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts +++ b/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts @@ -1,5 +1,5 @@ import { TFunction } from 'i18next'; -import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; +import type { Extension } from '@console/dynamic-plugin-sdk/src/types'; import { deepForOwn, PredicateCheck, @@ -15,7 +15,7 @@ export const isTranslatableString = (value): value is string => { export const getTranslationKey = (value: string) => isTranslatableString(value) ? value.substr(1, value.length - 2) : undefined; -export const translateExtensionDeep = ( +export const translateExtensionDeep = ( extension: E, translationStringPredicate: PredicateCheck, cb: ValueCallback, @@ -27,10 +27,7 @@ export const translateExtensionDeep = ( * Recursively updates the extension's properties, replacing all translatable string values * via the provided `t` function. */ -export const translateExtension = ( - extension: E, - t: TFunction, -): E => { +export const translateExtension = (extension: E, t: TFunction): E => { translateExtensionDeep(extension, isTranslatableString, (value, key, obj) => { obj[key] = t(value); }); diff --git a/frontend/packages/console-plugin-sdk/src/utils/useTranslatedExtensions.ts b/frontend/packages/console-plugin-sdk/src/utils/useTranslatedExtensions.ts index 4d18168045d..a96321db433 100644 --- a/frontend/packages/console-plugin-sdk/src/utils/useTranslatedExtensions.ts +++ b/frontend/packages/console-plugin-sdk/src/utils/useTranslatedExtensions.ts @@ -1,5 +1,5 @@ import { useMemo } from 'react'; -import { ExtensionDeclaration, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { Extension, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { isTranslatableString, translateExtensionDeep } from './extension-i18n'; import useTranslationExt from './useTranslationExt'; @@ -11,7 +11,7 @@ import useTranslationExt from './useTranslationExt'; */ const translationKeyMap: Record> = {}; -export const useTranslatedExtensions = ( +export const useTranslatedExtensions = ( extensions: LoadedExtension[], ): typeof extensions => { const { t } = useTranslationExt(); diff --git a/frontend/packages/console-shared/src/hooks/create-resource-hook.ts b/frontend/packages/console-shared/src/hooks/create-resource-hook.ts index a58ef44053d..2b79b94c3d8 100644 --- a/frontend/packages/console-shared/src/hooks/create-resource-hook.ts +++ b/frontend/packages/console-shared/src/hooks/create-resource-hook.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react'; import { isCreateResource, CreateResource, GroupVersionKind } from '@console/dynamic-plugin-sdk'; -import { ExtensionDeclaration, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { Extension, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { referenceForExtensionModel } from '@console/internal/module/k8s'; import { useExtensions } from '@console/plugin-sdk/src/api/useExtensions'; @@ -8,7 +8,7 @@ export const useCreateResourceExtension = ( modelReference: GroupVersionKind, ): LoadedExtension => { const createResourceTypeGuard = useCallback( - (e: ExtensionDeclaration): e is CreateResource => + (e: Extension): e is CreateResource => isCreateResource(e) && referenceForExtensionModel(e.properties.model) === modelReference, [modelReference], ); diff --git a/frontend/packages/topology/src/components/workload/utils.ts b/frontend/packages/topology/src/components/workload/utils.ts index 4ab27c0b7d3..809f831e04d 100644 --- a/frontend/packages/topology/src/components/workload/utils.ts +++ b/frontend/packages/topology/src/components/workload/utils.ts @@ -7,7 +7,7 @@ import { PodsAdapterDataType, ResolvedExtension, } from '@console/dynamic-plugin-sdk'; -import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; +import { Extension } from '@console/dynamic-plugin-sdk/src/types'; import { useK8sWatchResources } from '@console/internal/components/utils/k8s-watch-hook'; import { DeploymentConfigModel, @@ -28,10 +28,7 @@ import { } from '@console/shared'; import { getResource } from '../../utils'; -export const getDataFromAdapter = < - T extends { resource: K8sResourceCommon }, - E extends ExtensionDeclaration ->( +export const getDataFromAdapter = ( element: GraphElement, [resolvedExtensions, loaded]: [ResolvedExtension[], boolean], ): T | undefined => diff --git a/frontend/public/reducers/features.ts b/frontend/public/reducers/features.ts index 657d1907ef8..a5f49ab6453 100644 --- a/frontend/public/reducers/features.ts +++ b/frontend/public/reducers/features.ts @@ -72,12 +72,12 @@ const getModelRef = (e: ModelFeatureFlag) => { return referenceForGroupVersionKind(model.group)(model.version)(model.kind); }; -// TODO: When migrating to @openshift/dynamic-plugin-sdk, use the type parameter from -// pluginStore.getExtensions<...>() to avoid `as any` cast. -(pluginStore.getExtensions().filter(isModelFeatureFlag) as any).forEach((ff) => { - // This is incorrect (for `ExtensionK8sModel` we should use `referenceForExtensionModel`). - addToCRDs(referenceForModel(ff.properties.model), ff.properties.flag); -}); +pluginStore + .getExtensions() + .filter(isModelFeatureFlag) + .forEach((ff) => { + addToCRDs(referenceForModel(ff.properties.model), ff.properties.flag); + }); export const featureReducerName = 'FLAGS'; export const featureReducer = (state: FeatureState, action: FeatureAction): FeatureState => { From d0c0da12648f54b43bbe25a898e935e6fdad928c Mon Sep 17 00:00:00 2001 From: logonoff Date: Tue, 25 Nov 2025 15:11:17 -0500 Subject: [PATCH 12/14] Revert "CONSOLE-3769: Remove type reexports from plugin-sdk" This reverts commit ece51f7527c707dd7f21ce92a315c6ed78259c96. --- .../src/__tests__/plugin-test-utils.ts | 2 +- .../NotLoadedDynamicPlugins.tsx | 2 +- .../__tests__/PerspectiveDetector.spec.tsx | 2 +- .../nav/useNavExtensionForPerspective.ts | 2 +- .../perspective/PreferredPerspectiveSelect.tsx | 2 +- .../perspective/__tests__/perspective.data.ts | 2 +- .../console-dynamic-plugin-sdk/CHANGELOG-core.md | 16 +++------------- .../src/api/pluginSubscriptionService.ts | 6 +----- .../console-plugin-sdk/src/api/useExtensions.ts | 6 +----- .../src/codegen/active-plugins.ts | 4 ++-- .../packages/console-plugin-sdk/src/index.ts | 3 +++ .../packages/console-plugin-sdk/src/store.ts | 3 +-- .../console-plugin-sdk/src/typings/index.ts | 1 + .../src/utils/extension-i18n.ts | 2 +- .../actions/__tests__/utils-test-data.ts | 2 +- .../src/components/actions/utils.ts | 2 +- .../src/hooks/create-resource-hook.ts | 2 +- .../src/hooks/perspective-utils.ts | 2 +- .../console-shared/src/utils/sample-utils.ts | 2 +- .../src/components/add/AddCardSection.tsx | 2 +- .../add/__tests__/add-page-test-data.tsx | 2 +- .../public/components/notification-drawer.tsx | 2 +- .../module/k8s/__tests__/get-resources.spec.ts | 2 +- frontend/public/plugins.ts | 2 +- 24 files changed, 29 insertions(+), 44 deletions(-) create mode 100644 frontend/packages/console-plugin-sdk/src/index.ts create mode 100644 frontend/packages/console-plugin-sdk/src/typings/index.ts diff --git a/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts b/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts index e635221b248..61b5be46f29 100644 --- a/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts +++ b/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts @@ -1,9 +1,9 @@ import { List as ImmutableList } from 'immutable'; import * as _ from 'lodash'; import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; +import { PluginStore } from '@console/plugin-sdk'; import { loadActivePluginsForTestPurposes } from '@console/plugin-sdk/src/codegen/active-plugins'; import { resolvePluginPackages } from '@console/plugin-sdk/src/codegen/plugin-resolver'; -import { PluginStore } from '@console/plugin-sdk/src/store'; const testedPlugins = loadActivePluginsForTestPurposes(resolvePluginPackages()); const testedPluginStore = new PluginStore(testedPlugins); diff --git a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/NotLoadedDynamicPlugins.tsx b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/NotLoadedDynamicPlugins.tsx index d384bc0e819..0a26c6b9486 100644 --- a/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/NotLoadedDynamicPlugins.tsx +++ b/frontend/packages/console-app/src/components/dashboards-page/dynamic-plugins-health-resource/NotLoadedDynamicPlugins.tsx @@ -3,7 +3,7 @@ import { StackItem, Content } from '@patternfly/react-core'; import { ResourceLink } from '@console/internal/components/utils/resource-link'; import { ConsolePluginModel } from '@console/internal/models'; import { referenceForModel } from '@console/internal/module/k8s'; -import { NotLoadedDynamicPluginInfo } from '@console/plugin-sdk/src/store'; +import { NotLoadedDynamicPluginInfo } from '@console/plugin-sdk/src'; import { StatusPopupSection } from '@console/shared/src/components/dashboard/status-card/StatusPopup'; const NotLoadedDynamicPlugins: React.FC = ({ plugins, label }) => ( diff --git a/frontend/packages/console-app/src/components/detect-perspective/__tests__/PerspectiveDetector.spec.tsx b/frontend/packages/console-app/src/components/detect-perspective/__tests__/PerspectiveDetector.spec.tsx index 2ddb3e946e4..c5e74c18b45 100644 --- a/frontend/packages/console-app/src/components/detect-perspective/__tests__/PerspectiveDetector.spec.tsx +++ b/frontend/packages/console-app/src/components/detect-perspective/__tests__/PerspectiveDetector.spec.tsx @@ -1,7 +1,7 @@ import { render, waitFor } from '@testing-library/react'; import { useLocation } from 'react-router-dom-v5-compat'; import { Perspective } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { LoadedExtension } from '@console/plugin-sdk'; import { usePerspectives } from '@console/shared/src'; import { Perspective as PerspectiveType, diff --git a/frontend/packages/console-app/src/components/nav/useNavExtensionForPerspective.ts b/frontend/packages/console-app/src/components/nav/useNavExtensionForPerspective.ts index 17cd4554d02..70e885b8d88 100644 --- a/frontend/packages/console-app/src/components/nav/useNavExtensionForPerspective.ts +++ b/frontend/packages/console-app/src/components/nav/useNavExtensionForPerspective.ts @@ -1,6 +1,6 @@ import { useMemo, useCallback } from 'react'; import { NavExtension, isNavExtension } from '@console/dynamic-plugin-sdk/src/lib-core'; -import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { LoadedExtension } from '@console/plugin-sdk'; import { useExtensions } from '@console/plugin-sdk/src/api/useExtensions'; import { usePerspectives } from '@console/shared/src'; diff --git a/frontend/packages/console-app/src/components/user-preferences/perspective/PreferredPerspectiveSelect.tsx b/frontend/packages/console-app/src/components/user-preferences/perspective/PreferredPerspectiveSelect.tsx index 59eebbfecef..aefed8f3b36 100644 --- a/frontend/packages/console-app/src/components/user-preferences/perspective/PreferredPerspectiveSelect.tsx +++ b/frontend/packages/console-app/src/components/user-preferences/perspective/PreferredPerspectiveSelect.tsx @@ -8,7 +8,7 @@ import { } from '@patternfly/react-core'; import { useTranslation } from 'react-i18next'; import { Perspective } from '@console/dynamic-plugin-sdk/src/extensions'; -import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { LoadedExtension } from '@console/plugin-sdk/src'; import { usePerspectiveExtension, usePerspectives } from '@console/shared/src'; import { useTelemetry } from '@console/shared/src/hooks/useTelemetry'; import { diff --git a/frontend/packages/console-app/src/components/user-preferences/perspective/__tests__/perspective.data.ts b/frontend/packages/console-app/src/components/user-preferences/perspective/__tests__/perspective.data.ts index 44cdeaf99d2..561c1f5b7fe 100644 --- a/frontend/packages/console-app/src/components/user-preferences/perspective/__tests__/perspective.data.ts +++ b/frontend/packages/console-app/src/components/user-preferences/perspective/__tests__/perspective.data.ts @@ -1,6 +1,6 @@ import { ACM_PERSPECTIVE_ID } from '@console/app/src/consts'; import { Perspective } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { LoadedExtension } from '@console/plugin-sdk'; export const mockPerspectiveExtensions: LoadedExtension[] = [ { diff --git a/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md b/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md index 59b2555b1ea..788f4c3a9ec 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md +++ b/frontend/packages/console-dynamic-plugin-sdk/CHANGELOG-core.md @@ -12,21 +12,14 @@ table in [Console dynamic plugins README](./README.md). ## 4.21.0-prerelease.x - TBD -- **Deprecated** `setPluginStore` function in `k8s-utils.ts`. The function is now a noop and the export +- Deprecated `setPluginStore` function in `k8s-utils.ts`. The function is now a noop and the export will be removed in a future release. ([CONSOLE-4840], [#15671]) -- **Type-only breaking change**: Fix `popupComponent` prop type in extension `console.dashboards/overview/health/resource` ([CONSOLE-4796], [#15526]) -- Increased alignment with `@openshift/dynamic-plugin-sdk` types ([CONSOLE-3769], [#15509], [#15738]) - - `AlwaysOnExtension` and `ModelDefinition` types are removed from `api/common-types` because they referred - to a legacy system which console dynamic plugins never supported. There is no direct replacement for these - types, and plugins should remove all uses of them. ([#15671]) - - The following types are now re-exported from `@openshift/dynamic-plugin-sdk` instead of being defined - locally: `ExtensionFlags`, `ExtensionTypeGuard`, `ResolvedCodeRefProperties`, `RemoteEntryModule`, and `Update`. ([#15509], [#15738]) +- Fix `popupComponent` prop type in extension `console.dashboards/overview/health/resource` ([CONSOLE-4796], [#15526]) +- Begin alignment of plugin SDK types with `@openshift/dynamic-plugin-sdk` ([CONSOLE-3769], [#15509]) - Add optional `fetch` property to extension `console.dashboards/overview/health/url` ([CONSOLE-4796], [#15526]) - Add optional `infrastructure` parameter to `PrometheusHealthHandler` type ([CONSOLE-4796], [#15526]) - Allow `K8sResourceKind` in `TopologyDataObject`, `TopologyResourcesObject`, and `OverviewItem` types ([CONSOLE-4840], [#15699]) - Allow async functions for the `resources` property of `console.topology/data/factory` extension ([CONSOLE-4806], [#15641]) -- Add color theme and font size customization to `ResourceYAMLEditor` component ([CONSOLE-4701], [#15735]) -- Ensure proper pass-through of `props.editorProps.theme` and `props.options.fontFamily` to `CodeEditor` component ([CONSOLE-4701], [#15735]) ## 4.20.0 - 2025-11-24 @@ -152,7 +145,6 @@ table in [Console dynamic plugins README](./README.md). [CONSOLE-4576]: https://issues.redhat.com/browse/CONSOLE-4576 [CONSOLE-4654]: https://issues.redhat.com/browse/CONSOLE-4654 [CONSOLE-4656]: https://issues.redhat.com/browse/CONSOLE-4656 -[CONSOLE-4701]: https://issues.redhat.com/browse/CONSOLE-4701 [CONSOLE-4796]: https://issues.redhat.com/browse/CONSOLE-4796 [CONSOLE-4806]: https://issues.redhat.com/browse/CONSOLE-4806 [CONSOLE-4840]: https://issues.redhat.com/browse/CONSOLE-4840 @@ -220,5 +212,3 @@ table in [Console dynamic plugins README](./README.md). [#15641]: https://github.com/openshift/console/pull/15641 [#15671]: https://github.com/openshift/console/pull/15671 [#15699]: https://github.com/openshift/console/pull/15699 -[#15735]: https://github.com/openshift/console/pull/15735 -[#15738]: https://github.com/openshift/console/pull/15738 diff --git a/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts b/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts index 390b417287c..a57fb03a27e 100644 --- a/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts +++ b/frontend/packages/console-plugin-sdk/src/api/pluginSubscriptionService.ts @@ -1,12 +1,8 @@ import * as _ from 'lodash'; import { Store } from 'redux'; -import type { - Extension, - ExtensionTypeGuard, - LoadedExtension, -} from '@console/dynamic-plugin-sdk/src/types'; import type { RootState } from '@console/internal/redux'; import { isExtensionInUse, PluginStore, DynamicPluginInfo } from '../store'; +import type { Extension, ExtensionTypeGuard, LoadedExtension } from '../typings'; let subscriptionServiceInitialized = false; let getPluginStoreInstance: () => PluginStore = () => undefined; diff --git a/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts b/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts index 2df684aa8c9..e59d9ab90c4 100644 --- a/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts +++ b/frontend/packages/console-plugin-sdk/src/api/useExtensions.ts @@ -1,11 +1,7 @@ import { useRef, useCallback, useEffect } from 'react'; import * as _ from 'lodash'; -import type { - Extension, - ExtensionTypeGuard, - LoadedExtension, -} from '@console/dynamic-plugin-sdk/src/types'; import { useForceRender } from '@console/shared/src/hooks/useForceRender'; +import type { Extension, ExtensionTypeGuard, LoadedExtension } from '../typings'; import { useTranslatedExtensions } from '../utils/useTranslatedExtensions'; import { subscribeToExtensions } from './pluginSubscriptionService'; diff --git a/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts b/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts index 298c0cb59e6..fcca1774d60 100644 --- a/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts +++ b/frontend/packages/console-plugin-sdk/src/codegen/active-plugins.ts @@ -7,12 +7,12 @@ import { } from '@console/dynamic-plugin-sdk/src/coderefs/coderef-resolver'; import { extensionsFile } from '@console/dynamic-plugin-sdk/src/constants'; import { ConsoleExtensionsJSON } from '@console/dynamic-plugin-sdk/src/schema/console-extensions'; -import { Extension, EncodedCodeRef } from '@console/dynamic-plugin-sdk/src/types'; +import { EncodedCodeRef } from '@console/dynamic-plugin-sdk/src/types'; import { parseJSONC } from '@console/dynamic-plugin-sdk/src/utils/jsonc'; import { guessModuleFilePath } from '@console/dynamic-plugin-sdk/src/validation/ExtensionValidator'; import { ValidationResult } from '@console/dynamic-plugin-sdk/src/validation/ValidationResult'; import { validateConsoleExtensionsFileSchema } from '@console/dynamic-plugin-sdk/src/webpack/ConsoleRemotePlugin'; -import { ActivePlugin } from '../typings/base'; +import { Extension, ActivePlugin } from '../typings'; import { trimStartMultiLine } from '../utils/string'; import { consolePkgScope, PluginPackage } from './plugin-resolver'; diff --git a/frontend/packages/console-plugin-sdk/src/index.ts b/frontend/packages/console-plugin-sdk/src/index.ts new file mode 100644 index 00000000000..84460c3ecac --- /dev/null +++ b/frontend/packages/console-plugin-sdk/src/index.ts @@ -0,0 +1,3 @@ +// TODO(vojtech): this barrel file can cause a lot of cycles, it's best to remove it +export * from './typings'; +export * from './store'; diff --git a/frontend/packages/console-plugin-sdk/src/store.ts b/frontend/packages/console-plugin-sdk/src/store.ts index eaecb63dd60..344ee1b9c49 100644 --- a/frontend/packages/console-plugin-sdk/src/store.ts +++ b/frontend/packages/console-plugin-sdk/src/store.ts @@ -2,8 +2,7 @@ import * as _ from 'lodash'; import { StandardConsolePluginManifest } from '@console/dynamic-plugin-sdk/src/build-types'; -import { Extension, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; -import { ActivePlugin } from './typings/base'; +import { Extension, LoadedExtension, ActivePlugin } from './typings'; export const sanitizeExtension = (e: E): E => { e.flags = e.flags || {}; diff --git a/frontend/packages/console-plugin-sdk/src/typings/index.ts b/frontend/packages/console-plugin-sdk/src/typings/index.ts new file mode 100644 index 00000000000..8a185aaecca --- /dev/null +++ b/frontend/packages/console-plugin-sdk/src/typings/index.ts @@ -0,0 +1 @@ +export * from './base'; diff --git a/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts b/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts index eabf3980078..8f3eb1a4a64 100644 --- a/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts +++ b/frontend/packages/console-plugin-sdk/src/utils/extension-i18n.ts @@ -1,10 +1,10 @@ import { TFunction } from 'i18next'; -import type { Extension } from '@console/dynamic-plugin-sdk/src/types'; import { deepForOwn, PredicateCheck, ValueCallback, } from '@console/dynamic-plugin-sdk/src/utils/object'; +import type { Extension } from '../typings'; export const isTranslatableString = (value): value is string => { return ( diff --git a/frontend/packages/console-shared/src/components/actions/__tests__/utils-test-data.ts b/frontend/packages/console-shared/src/components/actions/__tests__/utils-test-data.ts index 9ee109c1a95..c3e77f98210 100644 --- a/frontend/packages/console-shared/src/components/actions/__tests__/utils-test-data.ts +++ b/frontend/packages/console-shared/src/components/actions/__tests__/utils-test-data.ts @@ -1,5 +1,5 @@ import { Action, ActionGroup } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { LoadedExtension } from '@console/plugin-sdk'; export const mockActions: Action[] = [ { diff --git a/frontend/packages/console-shared/src/components/actions/utils.ts b/frontend/packages/console-shared/src/components/actions/utils.ts index 527de7094f9..03e742d6550 100644 --- a/frontend/packages/console-shared/src/components/actions/utils.ts +++ b/frontend/packages/console-shared/src/components/actions/utils.ts @@ -5,7 +5,7 @@ import { MenuOption, MenuOptionType, } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { LoadedExtension } from '@console/plugin-sdk'; export const createMenuOptions = ( actions: Action[], diff --git a/frontend/packages/console-shared/src/hooks/create-resource-hook.ts b/frontend/packages/console-shared/src/hooks/create-resource-hook.ts index 2b79b94c3d8..e37850b536d 100644 --- a/frontend/packages/console-shared/src/hooks/create-resource-hook.ts +++ b/frontend/packages/console-shared/src/hooks/create-resource-hook.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { isCreateResource, CreateResource, GroupVersionKind } from '@console/dynamic-plugin-sdk'; -import { Extension, LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { referenceForExtensionModel } from '@console/internal/module/k8s'; +import { Extension, LoadedExtension } from '@console/plugin-sdk'; import { useExtensions } from '@console/plugin-sdk/src/api/useExtensions'; export const useCreateResourceExtension = ( diff --git a/frontend/packages/console-shared/src/hooks/perspective-utils.ts b/frontend/packages/console-shared/src/hooks/perspective-utils.ts index cec1511d654..e5f21143dd4 100644 --- a/frontend/packages/console-shared/src/hooks/perspective-utils.ts +++ b/frontend/packages/console-shared/src/hooks/perspective-utils.ts @@ -6,7 +6,7 @@ import { AccessReviewResourceAttributes, checkAccess, } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { LoadedExtension } from '@console/plugin-sdk/src'; import { useExtensions } from '@console/plugin-sdk/src/api/useExtensions'; import { USERSETTINGS_PREFIX } from '../constants'; diff --git a/frontend/packages/console-shared/src/utils/sample-utils.ts b/frontend/packages/console-shared/src/utils/sample-utils.ts index 06d7845e33a..8465bd3ccd3 100644 --- a/frontend/packages/console-shared/src/utils/sample-utils.ts +++ b/frontend/packages/console-shared/src/utils/sample-utils.ts @@ -11,7 +11,6 @@ import { isPerspective, Perspective, } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { FirehoseResult } from '@console/internal/components/utils/types'; import { BuildConfigModel, @@ -28,6 +27,7 @@ import { K8sResourceKind, referenceForModel, } from '@console/internal/module/k8s'; +import { LoadedExtension } from '@console/plugin-sdk/src'; import { subscribeToExtensions } from '@console/plugin-sdk/src/api/pluginSubscriptionService'; import { defaultCatalogCategories } from './default-categories'; diff --git a/frontend/packages/dev-console/src/components/add/AddCardSection.tsx b/frontend/packages/dev-console/src/components/add/AddCardSection.tsx index b53296ba4fa..2f2db8bbb3d 100644 --- a/frontend/packages/dev-console/src/components/add/AddCardSection.tsx +++ b/frontend/packages/dev-console/src/components/add/AddCardSection.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { AddActionGroup, ResolvedExtension, AddAction } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { LoadedExtension } from '@console/plugin-sdk/src'; import { orderExtensionBasedOnInsertBeforeAndAfter } from '@console/shared/'; import { getAddGroups } from '../../utils/add-page-utils'; import { AddGroup } from '../types'; diff --git a/frontend/packages/dev-console/src/components/add/__tests__/add-page-test-data.tsx b/frontend/packages/dev-console/src/components/add/__tests__/add-page-test-data.tsx index d9b750d1365..104ad588d1c 100644 --- a/frontend/packages/dev-console/src/components/add/__tests__/add-page-test-data.tsx +++ b/frontend/packages/dev-console/src/components/add/__tests__/add-page-test-data.tsx @@ -1,10 +1,10 @@ import { CatalogIcon } from '@patternfly/react-icons/dist/esm/icons/catalog-icon'; import { SignOutAltIcon } from '@patternfly/react-icons/dist/esm/icons/sign-out-alt-icon'; import { AddActionGroup, ResolvedExtension, AddAction } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; import { helmCatalogIconSVG } from '@console/helm-plugin/src/utils/icons'; import { channelIconSVG } from '@console/knative-plugin/src/utils/icons'; import { pipelineIconSVG } from '@console/pipelines-plugin/src/utils/icons'; +import { LoadedExtension } from '@console/plugin-sdk/src'; type AddActionExtension = ResolvedExtension; type AddActionGroupExtension = LoadedExtension; diff --git a/frontend/public/components/notification-drawer.tsx b/frontend/public/components/notification-drawer.tsx index abac7038299..bde6d9ada5f 100644 --- a/frontend/public/components/notification-drawer.tsx +++ b/frontend/public/components/notification-drawer.tsx @@ -14,7 +14,7 @@ import { useTranslation } from 'react-i18next'; import i18next from 'i18next'; import { useDispatch } from 'react-redux'; import { Link, NavigateFunction, useNavigate } from 'react-router-dom-v5-compat'; -import type { DynamicPluginInfo } from '@console/plugin-sdk/src/store'; +import { DynamicPluginInfo } from '@console/plugin-sdk'; import { usePluginInfo } from '@console/plugin-sdk/src/api/usePluginInfo'; import * as UIActions from '@console/internal/actions/ui'; import { resourcePath } from '@console/internal/components/utils/resource-link'; diff --git a/frontend/public/module/k8s/__tests__/get-resources.spec.ts b/frontend/public/module/k8s/__tests__/get-resources.spec.ts index f67e67cb113..233b5f3763f 100644 --- a/frontend/public/module/k8s/__tests__/get-resources.spec.ts +++ b/frontend/public/module/k8s/__tests__/get-resources.spec.ts @@ -1,5 +1,5 @@ import { ModelMetadata } from '@console/dynamic-plugin-sdk'; -import { LoadedExtension } from '@console/dynamic-plugin-sdk/src/types'; +import { LoadedExtension } from '@console/plugin-sdk'; import { pluralizeKind, getModelExtensionMetadata } from '../get-resources'; describe('pluralizeKind', () => { diff --git a/frontend/public/plugins.ts b/frontend/public/plugins.ts index e96ccabd095..71a0f43af8e 100644 --- a/frontend/public/plugins.ts +++ b/frontend/public/plugins.ts @@ -1,6 +1,6 @@ import * as _ from 'lodash-es'; import { PluginStore } from '@console/plugin-sdk/src/store'; -import { ActivePlugin } from '@console/plugin-sdk/src/typings/base'; +import { ActivePlugin } from '@console/plugin-sdk/src/typings'; import { getURLSearchParams } from './components/utils/link'; const getEnabledDynamicPluginNames = () => { From 2b444de7473d07d8ad8be7da5c17af317e3ebaf0 Mon Sep 17 00:00:00 2001 From: logonoff Date: Tue, 25 Nov 2025 15:11:19 -0500 Subject: [PATCH 13/14] Revert "CONSOLE-3769: Move `LazyLoader` type to internal" This reverts commit ea8f8e2827620fadbcfceaf9e5255786ab5837b4. --- .../console-plugin-sdk/src/typings/base.ts | 17 ++++++++++++-- .../status-card/OperatorStatusBody.tsx | 2 +- .../src/components/import/import-types.ts | 2 +- .../cluster-dashboard/health-item.tsx | 3 ++- frontend/public/components/utils/async.tsx | 22 ++++++++----------- 5 files changed, 28 insertions(+), 18 deletions(-) diff --git a/frontend/packages/console-plugin-sdk/src/typings/base.ts b/frontend/packages/console-plugin-sdk/src/typings/base.ts index 633df9d0d4a..23f44268558 100644 --- a/frontend/packages/console-plugin-sdk/src/typings/base.ts +++ b/frontend/packages/console-plugin-sdk/src/typings/base.ts @@ -1,4 +1,17 @@ -import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; +import * as React from 'react'; +import { + ExtensionFlags, + Extension, + ExtensionTypeGuard, + LoadedExtension, +} from '@console/dynamic-plugin-sdk/src/types'; + +export type { ExtensionFlags, Extension, ExtensionTypeGuard, LoadedExtension }; + +/** + * Common interface for loading async React components. + */ +export type LazyLoader = () => Promise>>; /** * From Console application perspective, a plugin is a list of extensions @@ -6,5 +19,5 @@ import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types */ export type ActivePlugin = { name: string; - extensions: ExtensionDeclaration[]; + extensions: Extension[]; }; diff --git a/frontend/packages/console-shared/src/components/dashboard/status-card/OperatorStatusBody.tsx b/frontend/packages/console-shared/src/components/dashboard/status-card/OperatorStatusBody.tsx index 5a0eda00351..f8eb9962d69 100644 --- a/frontend/packages/console-shared/src/components/dashboard/status-card/OperatorStatusBody.tsx +++ b/frontend/packages/console-shared/src/components/dashboard/status-card/OperatorStatusBody.tsx @@ -3,8 +3,8 @@ import * as _ from 'lodash'; import { useTranslation } from 'react-i18next'; import { Link } from 'react-router-dom-v5-compat'; import { GetOperatorsWithStatuses, OperatorRowProps } from '@console/dynamic-plugin-sdk'; -import type { LazyLoader } from '@console/internal/components/utils/async'; import type { FirehoseResourcesResult } from '@console/internal/components/utils/types'; +import { LazyLoader } from '@console/plugin-sdk'; import { getMostImportantStatuses } from './state-utils'; import { HealthState } from './states'; import StatusItem, { StatusPopupSection } from './StatusPopup'; diff --git a/frontend/packages/dev-console/src/components/import/import-types.ts b/frontend/packages/dev-console/src/components/import/import-types.ts index 46aa89eeb3f..365815f902b 100644 --- a/frontend/packages/dev-console/src/components/import/import-types.ts +++ b/frontend/packages/dev-console/src/components/import/import-types.ts @@ -2,11 +2,11 @@ import { ValidatedOptions } from '@patternfly/react-core'; import { WatchK8sResultsObject } from '@console/dynamic-plugin-sdk'; import { GitProvider } from '@console/git-service/src'; import { DetectedStrategy } from '@console/git-service/src/utils/import-strategy-detector'; -import type { LazyLoader } from '@console/internal/components/utils/async'; import { DeploymentModel, DeploymentConfigModel } from '@console/internal/models'; import { K8sResourceKind, ContainerPort } from '@console/internal/module/k8s'; import { PipelineData } from '@console/pipelines-plugin/src/components/import/import-types'; import { RepositoryFormValues } from '@console/pipelines-plugin/src/components/repository/types'; +import { LazyLoader } from '@console/plugin-sdk'; import { NameValuePair, NameValueFromPair, LimitsData } from '@console/shared'; import { ClusterBuildStrategy } from '@console/shipwright-plugin/src/types'; import { NormalizedBuilderImages } from '../../utils/imagestream-utils'; diff --git a/frontend/public/components/dashboard/dashboards-page/cluster-dashboard/health-item.tsx b/frontend/public/components/dashboard/dashboards-page/cluster-dashboard/health-item.tsx index ce46531fac6..c0e887dea28 100644 --- a/frontend/public/components/dashboard/dashboards-page/cluster-dashboard/health-item.tsx +++ b/frontend/public/components/dashboard/dashboards-page/cluster-dashboard/health-item.tsx @@ -2,6 +2,7 @@ import * as React from 'react'; import { Map as ImmutableMap } from 'immutable'; import { useTranslation } from 'react-i18next'; import { Stack, StackItem } from '@patternfly/react-core'; +import { LazyLoader } from '@console/plugin-sdk'; import { ResolvedExtension, DashboardsOverviewHealthOperator, @@ -26,7 +27,7 @@ import { } from '@console/shared/src/components/dashboard/status-card/states'; import { K8sKind } from '../../../../module/k8s'; import { FirehoseResourcesResult } from '../../../utils/types'; -import { AsyncComponent, LazyLoader } from '../../../utils/async'; +import { AsyncComponent } from '../../../utils/async'; import { resourcePath } from '../../../utils/resource-link'; import { useK8sWatchResources } from '../../../utils/k8s-watch-hook'; import { withDashboardResources, DashboardItemProps } from '../../with-dashboard-resources'; diff --git a/frontend/public/components/utils/async.tsx b/frontend/public/components/utils/async.tsx index f04b3fe0c17..81675228427 100644 --- a/frontend/public/components/utils/async.tsx +++ b/frontend/public/components/utils/async.tsx @@ -1,4 +1,4 @@ -import { ComponentType, Component as ClassComponent, ReactNode } from 'react'; +import * as React from 'react'; import * as _ from 'lodash-es'; import { LoadingBox } from './status-box'; @@ -6,14 +6,15 @@ import { LoadingBox } from './status-box'; /** * FIXME: Comparing two functions is not the *best* solution, but we can handle false negatives. */ -const sameLoader = (a: LazyLoader | null) => (b: LazyLoader | null) => - a?.name === b?.name && (a || 'a').toString() === (b || 'b').toString(); +const sameLoader = (a: () => Promise) => ( + b: () => Promise, +) => a?.name === b?.name && (a || 'a').toString() === (b || 'b').toString(); enum AsyncComponentError { ComponentNotFound = 'COMPONENT_NOT_FOUND', } -export class AsyncComponent extends ClassComponent { +export class AsyncComponent extends React.Component { state: AsyncComponentState = { Component: null, loader: null }; props: AsyncComponentProps; @@ -78,16 +79,11 @@ export class AsyncComponent extends ClassComponent = () => Promise>>; - export type AsyncComponentProps = { - loader: LazyLoader; - LoadingComponent?: ReactNode; + loader: () => Promise; + LoadingComponent?: React.ReactNode; } & any; export type AsyncComponentState = { - Component: ComponentType; - loader: LazyLoader; + Component: React.ComponentType; + loader: () => Promise; }; From 86835a78bee7c0a5ce1fe7fe6eac6672cee885af Mon Sep 17 00:00:00 2001 From: logonoff Date: Tue, 25 Nov 2025 15:11:21 -0500 Subject: [PATCH 14/14] Revert "CONSOLE-3769: Remove usage of legacy `Extension`" This reverts commit 4087fcb1512bffd885f33f32d62a1139edde98c4. --- .../src/__tests__/plugin-test-utils.ts | 7 +--- .../__tests__/coderef-resolver.spec.ts | 14 +++---- .../src/extensions/actions.ts | 10 ++--- .../src/extensions/add-actions.ts | 6 +-- .../src/extensions/alerts.ts | 6 +-- .../src/extensions/breadcrumbs.ts | 4 +- .../src/extensions/catalog.ts | 20 ++++------ .../src/extensions/cluster-configuration.ts | 10 ++--- .../src/extensions/cluster-overview.ts | 18 ++++----- .../src/extensions/cluster-settings.ts | 5 ++- .../src/extensions/context-providers.ts | 4 +- .../src/extensions/create-project-modal.ts | 4 +- .../src/extensions/create-resource.ts | 4 +- .../src/extensions/dashboard-data-source.ts | 4 +- .../src/extensions/dashboards.ts | 38 +++++++++---------- .../src/extensions/details-item.ts | 4 +- .../src/extensions/feature-flags.ts | 9 ++--- .../src/extensions/file-upload.ts | 5 +-- .../src/extensions/guided-tour.ts | 8 +++- .../src/extensions/horizontal-nav-tabs.ts | 6 +-- .../src/extensions/import-environments.ts | 4 +- .../src/extensions/navigation.ts | 20 +++++----- .../src/extensions/node.ts | 5 +-- .../src/extensions/notification-alert.ts | 5 +-- .../src/extensions/pages.ts | 13 +++---- .../src/extensions/perspectives.ts | 4 +- .../src/extensions/project-overview.ts | 9 ++--- .../src/extensions/pvc.ts | 13 +++---- .../src/extensions/redux.ts | 4 +- .../src/extensions/resource-metadata.ts | 4 +- .../extensions/storage-class-provisioner.ts | 3 +- .../src/extensions/storage-provider.ts | 4 +- .../src/extensions/telemetry.ts | 4 +- .../src/extensions/topology-details.ts | 16 ++++---- .../src/extensions/topology.ts | 26 ++++++------- .../src/extensions/user-preferences.ts | 6 +-- .../src/extensions/yaml-templates.ts | 4 +- .../runtime/__tests__/plugin-loader.spec.ts | 6 +-- .../src/utils/test-utils.ts | 4 +- .../__tests__/ExtensionValidator.spec.ts | 6 +-- .../src/__tests__/store.spec.ts | 20 +++++----- .../codegen/__tests__/active-plugins.spec.ts | 21 +++++----- .../utils/__tests__/extension-i18n.spec.ts | 6 +-- 43 files changed, 183 insertions(+), 210 deletions(-) diff --git a/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts b/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts index 61b5be46f29..abfe56f5f85 100644 --- a/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts +++ b/frontend/packages/console-app/src/__tests__/plugin-test-utils.ts @@ -1,16 +1,13 @@ import { List as ImmutableList } from 'immutable'; import * as _ from 'lodash'; -import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; -import { PluginStore } from '@console/plugin-sdk'; +import { Extension, PluginStore } from '@console/plugin-sdk'; import { loadActivePluginsForTestPurposes } from '@console/plugin-sdk/src/codegen/active-plugins'; import { resolvePluginPackages } from '@console/plugin-sdk/src/codegen/plugin-resolver'; const testedPlugins = loadActivePluginsForTestPurposes(resolvePluginPackages()); const testedPluginStore = new PluginStore(testedPlugins); -export const testedExtensions = ImmutableList( - testedPluginStore.getExtensions(), -); +export const testedExtensions = ImmutableList(testedPluginStore.getExtensions()); export const getDuplicates = (values: string[]) => { return _.transform( diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts b/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts index da5cff01364..2cacd573af9 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/coderefs/__tests__/coderef-resolver.spec.ts @@ -1,5 +1,5 @@ import * as _ from 'lodash'; -import { ExtensionDeclaration, EncodedCodeRef, CodeRef } from '../../types'; +import { Extension, EncodedCodeRef, CodeRef } from '../../types'; import { getExecutableCodeRefMock, getEntryModuleMocks, @@ -208,7 +208,7 @@ describe('loadReferencedObject', () => { describe('resolveEncodedCodeRefs', () => { it('replaces encoded code references with CodeRef functions', async () => { - const extensions: ExtensionDeclaration[] = [ + const extensions: Extension[] = [ { type: 'Foo', properties: { @@ -247,7 +247,7 @@ describe('resolveEncodedCodeRefs', () => { }); it('clones the provided extensions array and its elements', () => { - const extensions: ExtensionDeclaration[] = [ + const extensions: Extension[] = [ { type: 'Foo', properties: { test: true } }, { type: 'Bar', properties: { test: [1] } }, ]; @@ -274,7 +274,7 @@ describe('resolveEncodedCodeRefs', () => { describe('resolveExtension', () => { it('replaces CodeRef functions with referenced objects', async () => { - const extensions: ExtensionDeclaration[] = [ + const extensions: Extension[] = [ { type: 'Foo', properties: { @@ -309,7 +309,7 @@ describe('resolveExtension', () => { }); it('logs a warning if the referenced object resolves to null or undefined', async () => { - const extensions: ExtensionDeclaration[] = [ + const extensions: Extension[] = [ { type: 'Foo', properties: { @@ -343,7 +343,7 @@ describe('resolveExtension', () => { }); it('returns the same extension instance', async () => { - const extensions: ExtensionDeclaration[] = [ + const extensions: Extension[] = [ { type: 'Foo', properties: { test: true }, @@ -361,7 +361,7 @@ describe('resolveExtension', () => { it('continuously reject code refs which have failed to resolve', async () => { const errorCodeRef = getErrorExecutableCodeRefMock(); - const extension: ExtensionDeclaration = { + const extension: Extension = { type: 'Foo', properties: { test: true, qux: errorCodeRef }, }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/actions.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/actions.ts index 65a5fdf4a6b..62f30909966 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/actions.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/actions.ts @@ -1,7 +1,7 @@ import * as React from 'react'; import { ExtensionHook, ExtensionK8sKindVersionModel } from '../api/common-types'; import { ActionContext } from '../api/internal-types'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; import { AccessReviewResourceAttributes } from './console-types'; /** ActionProvider contributes a hook that returns list of actions for specific context */ @@ -74,19 +74,19 @@ export type SupportedActionExtensions = // Type Guards -export const isActionProvider = (e: ExtensionDeclaration): e is ActionProvider => { +export const isActionProvider = (e: Extension): e is ActionProvider => { return e.type === 'console.action/provider'; }; -export const isResourceActionProvider = (e: ExtensionDeclaration): e is ResourceActionProvider => { +export const isResourceActionProvider = (e: Extension): e is ResourceActionProvider => { return e.type === 'console.action/resource-provider'; }; -export const isActionGroup = (e: ExtensionDeclaration): e is ActionGroup => { +export const isActionGroup = (e: Extension): e is ActionGroup => { return e.type === 'console.action/group'; }; -export const isActionFilter = (e: ExtensionDeclaration): e is ActionFilter => { +export const isActionFilter = (e: Extension): e is ActionFilter => { return e.type === 'console.action/filter'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/add-actions.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/add-actions.ts index 38664ebc9d5..1253e4f4499 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/add-actions.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/add-actions.ts @@ -1,5 +1,5 @@ import * as React from 'react'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; import { AccessReviewResourceAttributes } from './console-types'; /** This extension allows plugins to contribute an add action item to the add page of developer perspective. @@ -48,10 +48,10 @@ export type AddActionGroup = ExtensionDeclaration< // Type guards -export const isAddAction = (e: ExtensionDeclaration): e is AddAction => { +export const isAddAction = (e: Extension): e is AddAction => { return e.type === 'dev-console.add/action'; }; -export const isAddActionGroup = (e: ExtensionDeclaration): e is AddActionGroup => { +export const isAddActionGroup = (e: Extension): e is AddActionGroup => { return e.type === 'dev-console.add/action-group'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/alerts.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/alerts.ts index 3a4900328e7..a544c15a93b 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/alerts.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/alerts.ts @@ -1,5 +1,5 @@ import { Rule, PrometheusRulesResponse } from '../api/common-types'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { CodeRef, Extension, ExtensionDeclaration } from '../types'; type AlertingRulesFetch = (namespace?: string) => Promise; @@ -31,8 +31,8 @@ export type AlertingRuleChartExtension = ExtensionDeclaration< // Type guards -export const isAlertingRulesSource = (e: ExtensionDeclaration): e is AlertingRulesSourceExtension => +export const isAlertingRulesSource = (e: Extension): e is AlertingRulesSourceExtension => e.type === 'console.alerts/rules-source'; -export const isAlertingRuleChart = (e: ExtensionDeclaration): e is AlertingRuleChartExtension => +export const isAlertingRuleChart = (e: Extension): e is AlertingRuleChartExtension => e.type === 'console.alerts/rules-chart'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/breadcrumbs.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/breadcrumbs.ts index 7e6985e461b..b482531ed7b 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/breadcrumbs.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/breadcrumbs.ts @@ -1,5 +1,5 @@ import { K8sModel } from '../api/common-types'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { CodeRef, Extension, ExtensionDeclaration } from '../types'; export type DetailsPageBreadCrumbsHook = ( kind: K8sModel, @@ -22,5 +22,5 @@ export type DetailPageBreadCrumbs = ExtensionDeclaration< // Type guards -export const isDetailPageBreadCrumbs = (e: ExtensionDeclaration): e is DetailPageBreadCrumbs => +export const isDetailPageBreadCrumbs = (e: Extension): e is DetailPageBreadCrumbs => e.type === 'dev-console.detailsPage/breadcrumbs'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/catalog.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/catalog.ts index 39afe2507c8..83a205fdb65 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/catalog.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/catalog.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import { ExtensionHook } from '../api/common-types'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; /** This extension allows plugins to contribute a new type of catalog item. For example, a Helm plugin can define a new catalog item type as HelmCharts that it wants to contribute to the Software Catalog. */ @@ -109,33 +109,27 @@ export type SupportedCatalogExtensions = // Type guards -export const isCatalogItemType = (e: ExtensionDeclaration): e is CatalogItemType => { +export const isCatalogItemType = (e: Extension): e is CatalogItemType => { return e.type === 'console.catalog/item-type'; }; -export const isCatalogItemTypeMetadata = ( - e: ExtensionDeclaration, -): e is CatalogItemTypeMetadata => { +export const isCatalogItemTypeMetadata = (e: Extension): e is CatalogItemTypeMetadata => { return e.type === 'console.catalog/item-type-metadata'; }; -export const isCatalogItemProvider = (e: ExtensionDeclaration): e is CatalogItemProvider => { +export const isCatalogItemProvider = (e: Extension): e is CatalogItemProvider => { return e.type === 'console.catalog/item-provider'; }; -export const isCatalogItemFilter = (e: ExtensionDeclaration): e is CatalogItemFilter => { +export const isCatalogItemFilter = (e: Extension): e is CatalogItemFilter => { return e.type === 'console.catalog/item-filter'; }; -export const isCatalogItemMetadataProvider = ( - e: ExtensionDeclaration, -): e is CatalogItemMetadataProvider => { +export const isCatalogItemMetadataProvider = (e: Extension): e is CatalogItemMetadataProvider => { return e.type === 'console.catalog/item-metadata'; }; -export const isCatalogCategoriesProvider = ( - e: ExtensionDeclaration, -): e is CatalogCategoriesProvider => { +export const isCatalogCategoriesProvider = (e: Extension): e is CatalogCategoriesProvider => { return e.type === 'console.catalog/categories-provider'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-configuration.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-configuration.ts index 51eb6287786..92ae35094d1 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-configuration.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-configuration.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import { JSONSchema7Type } from 'json-schema'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; import { AccessReviewResourceAttributes } from './console-types'; export type Resource = { @@ -114,14 +114,10 @@ export type ClusterConfigurationItem = ExtensionDeclaration< // Type guards -export const isClusterConfigurationGroup = ( - e: ExtensionDeclaration, -): e is ClusterConfigurationGroup => { +export const isClusterConfigurationGroup = (e: Extension): e is ClusterConfigurationGroup => { return e.type === 'console.cluster-configuration/group'; }; -export const isClusterConfigurationItem = ( - e: ExtensionDeclaration, -): e is ClusterConfigurationItem => { +export const isClusterConfigurationItem = (e: Extension): e is ClusterConfigurationItem => { return e.type === 'console.cluster-configuration/item'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-overview.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-overview.ts index 5b4a261cca3..8938c5b2cb8 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-overview.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-overview.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import { OverviewDetailItemProps } from '@openshift-console/plugin-shared/src'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { CodeRef, Extension, ExtensionDeclaration } from '../types'; import { Humanize, TopConsumerPopoverProps, QueryWithDescription } from './console-types'; /** Adds a new inventory item into cluster overview page. */ @@ -77,22 +77,20 @@ export type CustomOverviewDetailItem = ExtensionDeclaration< // Type guards -export const isClusterOverviewInventoryItem = ( - e: ExtensionDeclaration, -): e is ClusterOverviewInventoryItem => e.type === 'console.cluster-overview/inventory-item'; +export const isClusterOverviewInventoryItem = (e: Extension): e is ClusterOverviewInventoryItem => + e.type === 'console.cluster-overview/inventory-item'; export const isClusterOverviewUtilizationItem = ( - e: ExtensionDeclaration, + e: Extension, ): e is ClusterOverviewUtilizationItem => e.type === 'console.cluster-overview/utilization-item'; export const isClusterOverviewMultilineUtilizationItem = ( - e: ExtensionDeclaration, + e: Extension, ): e is ClusterOverviewMultilineUtilizationItem => e.type === 'console.cluster-overview/multiline-utilization-item'; -export const isOverviewDetailItem = (e: ExtensionDeclaration): e is OverviewDetailItem => +export const isOverviewDetailItem = (e: Extension): e is OverviewDetailItem => e.type === 'console.dashboards/overview/detail/item'; -export const isCustomOverviewDetailItem = ( - e: ExtensionDeclaration, -): e is CustomOverviewDetailItem => e.type === 'console.dashboards/custom/overview/detail/item'; +export const isCustomOverviewDetailItem = (e: Extension): e is CustomOverviewDetailItem => + e.type === 'console.dashboards/custom/overview/detail/item'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-settings.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-settings.ts index 7db62d60bbb..e8c3a881140 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-settings.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/cluster-settings.ts @@ -1,5 +1,6 @@ import { ExtensionK8sModel } from '../api/common-types'; -import { ExtensionDeclaration } from '../types'; +import { Extension, ExtensionDeclaration } from '../types'; + /** This extension identifies a resource used to manage the configuration of the cluster. A link to the resource will be added to the Administration - Cluster Settings - Configuration page. */ export type ClusterGlobalConfig = ExtensionDeclaration< @@ -18,5 +19,5 @@ export type ClusterGlobalConfig = ExtensionDeclaration< // Type guards -export const isClusterGlobalConfig = (e: ExtensionDeclaration): e is ClusterGlobalConfig => +export const isClusterGlobalConfig = (e: Extension): e is ClusterGlobalConfig => e.type === 'console.global-config'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/context-providers.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/context-providers.ts index 423fa32f387..64be817a1fc 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/context-providers.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/context-providers.ts @@ -1,5 +1,5 @@ import { Provider } from 'react'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; /** Adds new React context provider to Console application root. */ export type ContextProvider = ExtensionDeclaration< @@ -14,5 +14,5 @@ export type ContextProvider = ExtensionDeclaration< // Type guards -export const isContextProvider = (e: ExtensionDeclaration): e is ContextProvider => +export const isContextProvider = (e: Extension): e is ContextProvider => e.type === 'console.context-provider'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-project-modal.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-project-modal.ts index 1da9950ee7b..7d9798f3f1e 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-project-modal.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-project-modal.ts @@ -1,5 +1,5 @@ import { ModalComponent } from '../app/modal-support/ModalProvider'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; import { K8sResourceCommon } from './console-types'; export type CreateProjectModalProps = { @@ -15,5 +15,5 @@ export type CreateProjectModal = ExtensionDeclaration< } >; -export const isCreateProjectModal = (e: ExtensionDeclaration): e is CreateProjectModal => +export const isCreateProjectModal = (e: Extension): e is CreateProjectModal => e.type === 'console.create-project-modal'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-resource.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-resource.ts index 4995d95cd97..68f1d756a69 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-resource.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/create-resource.ts @@ -1,5 +1,5 @@ import { ExtensionK8sModel } from '../api/common-types'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { CodeRef, Extension, ExtensionDeclaration } from '../types'; /** Properties of custom CreateResource component. */ export type CreateResourceComponentProps = { namespace?: string }; @@ -18,5 +18,5 @@ export type CreateResource = ExtensionDeclaration< // Type guards -export const isCreateResource = (e: ExtensionDeclaration): e is CreateResource => +export const isCreateResource = (e: Extension): e is CreateResource => e.type === 'console.resource/create'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboard-data-source.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboard-data-source.ts index 6e1313c4b9b..2594f3cd2bf 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboard-data-source.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboard-data-source.ts @@ -1,4 +1,4 @@ -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; export type DataSource = ExtensionDeclaration< 'console.dashboards/datasource', @@ -9,7 +9,7 @@ export type DataSource = ExtensionDeclaration< } >; -export const isDataSource = (e: ExtensionDeclaration): e is DataSource => { +export const isDataSource = (e: Extension): e is DataSource => { return e.type === 'console.dashboards/datasource'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboards.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboards.ts index f00f8243d35..e9eca30d8fd 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboards.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/dashboards.ts @@ -1,6 +1,6 @@ import { K8sModel } from '../api/common-types'; import { Fetch } from '../api/internal-types'; -import { ExtensionDeclaration, CodeRef, ResolvedExtension } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef, ResolvedExtension } from '../types'; import { K8sResourceCommon, PrometheusResponse, @@ -218,77 +218,75 @@ export type DashboardsOverviewPrometheusActivity = ExtensionDeclaration< // Type guards -export const isDashboardsTab = (e: ExtensionDeclaration): e is DashboardsTab => +export const isDashboardsTab = (e: Extension): e is DashboardsTab => e.type === 'console.dashboards/tab'; -export const isDashboardsCard = (e: ExtensionDeclaration): e is DashboardsCard => +export const isDashboardsCard = (e: Extension): e is DashboardsCard => e.type === 'console.dashboards/card'; export const isDashboardsOverviewHealthPrometheusSubsystem = ( - e: ExtensionDeclaration, + e: Extension, ): e is DashboardsOverviewHealthPrometheusSubsystem => e.type === 'console.dashboards/overview/health/prometheus'; export const isResolvedDashboardsOverviewHealthPrometheusSubsystem = ( - e: ExtensionDeclaration, + e: Extension, ): e is ResolvedExtension => e.type === 'console.dashboards/overview/health/prometheus'; export const isDashboardsOverviewHealthURLSubsystem = ( - e: ExtensionDeclaration, + e: Extension, ): e is DashboardsOverviewHealthURLSubsystem => e.type === 'console.dashboards/overview/health/url'; export const isResolvedDashboardsOverviewHealthURLSubsystem = ( - e: ExtensionDeclaration, + e: Extension, ): e is ResolvedExtension => e.type === 'console.dashboards/overview/health/url'; export const isDashboardsOverviewHealthResourceSubsystem = ( - e: ExtensionDeclaration, + e: Extension, ): e is DashboardsOverviewHealthResourceSubsystem => e.type === 'console.dashboards/overview/health/resource'; export const isResolvedDashboardsOverviewHealthResourceSubsystem = ( - e: ExtensionDeclaration, + e: Extension, ): e is ResolvedExtension => e.type === 'console.dashboards/overview/health/resource'; export const isDashboardsOverviewHealthOperator = ( - e: ExtensionDeclaration, + e: Extension, ): e is DashboardsOverviewHealthOperator => e.type === 'console.dashboards/overview/health/operator'; export const isResolvedDashboardsOverviewHealthOperator = ( - e: ExtensionDeclaration, + e: Extension, ): e is ResolvedExtension => e.type === 'console.dashboards/overview/health/operator'; -export const isDashboardsInventoryItemGroup = ( - e: ExtensionDeclaration, -): e is DashboardsInventoryItemGroup => +export const isDashboardsInventoryItemGroup = (e: Extension): e is DashboardsInventoryItemGroup => e.type === 'console.dashboards/overview/inventory/item/group'; export const isDashboardsOverviewInventoryItem = ( - e: ExtensionDeclaration, + e: Extension, ): e is DashboardsOverviewInventoryItem => e.type === 'console.dashboards/overview/inventory/item'; export const isDashboardsOverviewInventoryItemReplacement = ( - e: ExtensionDeclaration, + e: Extension, ): e is DashboardsOverviewInventoryItemReplacement => e.type === 'console.dashboards/overview/inventory/item/replacement'; export const isDashboardsProjectOverviewInventoryItem = ( - e: ExtensionDeclaration, + e: Extension, ): e is DashboardsProjectOverviewInventoryItem => e.type === 'console.dashboards/project/overview/item'; export const isDashboardsOverviewResourceActivity = ( - e: ExtensionDeclaration, + e: Extension, ): e is DashboardsOverviewResourceActivity => e.type === 'console.dashboards/overview/activity/resource'; export const isDashboardsOverviewPrometheusActivity = ( - e: ExtensionDeclaration, + e: Extension, ): e is DashboardsOverviewPrometheusActivity => e.type === 'console.dashboards/overview/prometheus/activity/resource'; @@ -299,7 +297,7 @@ export type DashboardsOverviewHealthSubsystem = | DashboardsOverviewHealthOperator; export const isDashboardsOverviewHealthSubsystem = ( - e: ExtensionDeclaration, + e: Extension, ): e is DashboardsOverviewHealthSubsystem => isDashboardsOverviewHealthURLSubsystem(e) || isDashboardsOverviewHealthPrometheusSubsystem(e) || diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/details-item.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/details-item.ts index 7780ad6d248..83dbc9feb8e 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/details-item.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/details-item.ts @@ -1,5 +1,5 @@ import { ExtensionK8sModel } from '../api/common-types'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; import { K8sResourceCommon } from './console-types'; export type DetailsItemColumn = 'right' | 'left'; @@ -62,7 +62,7 @@ export type DetailsItem = ExtensionDeclaration< } >; -export const isDetailsItem = (e: ExtensionDeclaration): e is DetailsItem => +export const isDetailsItem = (e: Extension): e is DetailsItem => e.type === 'console.resource/details-item'; export const isLeftDetailsItem = (e: DetailsItem): e is DetailsItem => diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/feature-flags.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/feature-flags.ts index cf29f182663..d6e3b027d36 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/feature-flags.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/feature-flags.ts @@ -1,5 +1,5 @@ import { ExtensionK8sModel } from '../api/common-types'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; /** Gives full control over Console feature flags. */ export type FeatureFlag = ExtensionDeclaration< @@ -32,13 +32,12 @@ export type FeatureFlagHookProvider = ExtensionDeclaration< // Type guards -export const isFeatureFlag = (e: ExtensionDeclaration): e is FeatureFlag => - e.type === 'console.flag'; +export const isFeatureFlag = (e: Extension): e is FeatureFlag => e.type === 'console.flag'; -export const isModelFeatureFlag = (e: ExtensionDeclaration): e is ModelFeatureFlag => +export const isModelFeatureFlag = (e: Extension): e is ModelFeatureFlag => e.type === 'console.flag/model'; -export const isFeatureFlagHookProvider = (e: ExtensionDeclaration): e is FeatureFlagHookProvider => +export const isFeatureFlagHookProvider = (e: Extension): e is FeatureFlagHookProvider => e.type === 'console.flag/hookProvider'; // Support types diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/file-upload.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/file-upload.ts index 65fb1bc3b1a..e4f2bb08d3e 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/file-upload.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/file-upload.ts @@ -1,4 +1,4 @@ -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; /** This extension can be used to provide a handler for the file drop action on specific file extensions. */ export type FileUpload = ExtensionDeclaration< @@ -13,8 +13,7 @@ export type FileUpload = ExtensionDeclaration< // Type guards -export const isFileUpload = (e: ExtensionDeclaration): e is FileUpload => - e.type === 'console.file-upload'; +export const isFileUpload = (e: Extension): e is FileUpload => e.type === 'console.file-upload'; // Support types diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/guided-tour.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/guided-tour.ts index 974bad6df0a..1d97575419a 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/guided-tour.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/guided-tour.ts @@ -1,7 +1,11 @@ /* eslint-disable @typescript-eslint/naming-convention */ import type { TourDataType } from '@console/app/src/components/tour'; -import type { ExtensionDeclaration, CodeRef } from '@console/dynamic-plugin-sdk/src/types'; +import type { + Extension, + ExtensionDeclaration, + CodeRef, +} from '@console/dynamic-plugin-sdk/src/types'; // This extension is not part of the console dynamic plugin SDK public API. // It is intended for internal use only. Please do not use it. Pretty please? @@ -22,7 +26,7 @@ export type INTERNAL_DO_NOT_USE_GuidedTour = ExtensionDeclaration< /** @hidden */ export const INTERNAL_DO_NOT_USE_isGuidedTour = ( - e: ExtensionDeclaration, + e: Extension, ): e is INTERNAL_DO_NOT_USE_GuidedTour => { return e.type === 'INTERNAL_DO_NOT_USE.guided-tour'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/horizontal-nav-tabs.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/horizontal-nav-tabs.ts index 755d21a560c..b9721282be0 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/horizontal-nav-tabs.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/horizontal-nav-tabs.ts @@ -1,5 +1,5 @@ import { ExtensionK8sKindVersionModel } from '../api/common-types'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; import { K8sResourceCommon } from './console-types'; export type PageComponentProps = { @@ -50,6 +50,6 @@ export type NavTab = ExtensionDeclaration< >; // Type Guards -export const isHorizontalNavTab = (e: ExtensionDeclaration): e is HorizontalNavTab => +export const isHorizontalNavTab = (e: Extension): e is HorizontalNavTab => e.type === 'console.tab/horizontalNav'; -export const isTab = (e: ExtensionDeclaration): e is NavTab => e.type === 'console.tab'; +export const isTab = (e: Extension): e is NavTab => e.type === 'console.tab'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/import-environments.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/import-environments.ts index 4eb8ca46319..ce4af504654 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/import-environments.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/import-environments.ts @@ -1,4 +1,4 @@ -import { ExtensionDeclaration } from '../types'; +import { Extension, ExtensionDeclaration } from '../types'; export type ImageEnvironment = { /** Environment variable key */ @@ -28,6 +28,6 @@ export type ImportEnvironment = ExtensionDeclaration< // Type guards -export const isImportEnvironment = (e: ExtensionDeclaration): e is ImportEnvironment => { +export const isImportEnvironment = (e: Extension): e is ImportEnvironment => { return e.type === 'dev-console.import/environment'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/navigation.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/navigation.ts index 0353a351db3..481c3135733 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/navigation.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/navigation.ts @@ -1,5 +1,5 @@ import { ExtensionK8sModel } from '../api/common-types'; -import { ExtensionDeclaration } from '../types'; +import { Extension, ExtensionDeclaration } from '../types'; type NavItemProperties = { /** A unique identifier for this item. */ @@ -90,29 +90,29 @@ export type NavExtension = // Type guards -export const isHrefNavItem = (e: ExtensionDeclaration): e is HrefNavItem => +export const isHrefNavItem = (e: Extension): e is HrefNavItem => e.type === 'console.navigation/href'; -export const isResourceNSNavItem = (e: ExtensionDeclaration): e is ResourceNSNavItem => +export const isResourceNSNavItem = (e: Extension): e is ResourceNSNavItem => e.type === 'console.navigation/resource-ns'; -export const isResourceClusterNavItem = (e: ExtensionDeclaration): e is ResourceClusterNavItem => +export const isResourceClusterNavItem = (e: Extension): e is ResourceClusterNavItem => e.type === 'console.navigation/resource-cluster'; -export const isResourceNavItem = (e: ExtensionDeclaration): e is ResourceNavItem => +export const isResourceNavItem = (e: Extension): e is ResourceNavItem => isResourceNSNavItem(e) || isResourceClusterNavItem(e); -export const isSeparator = (e: ExtensionDeclaration): e is Separator => +export const isSeparator = (e: Extension): e is Separator => e.type === 'console.navigation/separator'; -export const isNavSection = (e: ExtensionDeclaration): e is NavSection => +export const isNavSection = (e: Extension): e is NavSection => e.type === 'console.navigation/section'; -export const isNavItem = (e: ExtensionDeclaration): e is NavItem => +export const isNavItem = (e: Extension): e is NavItem => isHrefNavItem(e) || isResourceNSNavItem(e) || isResourceClusterNavItem(e); -export const isNavItemOrSeparator = (e: ExtensionDeclaration): e is NavItem | Separator => +export const isNavItemOrSeparator = (e: Extension): e is NavItem | Separator => isNavItem(e) || isSeparator(e); -export const isNavExtension = (e: ExtensionDeclaration): e is NavExtension => +export const isNavExtension = (e: Extension): e is NavExtension => isNavItem(e) || isSeparator(e) || isNavSection(e); diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/node.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/node.ts index d9ca798d501..ad18c508a0f 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/node.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/node.ts @@ -1,5 +1,5 @@ import * as React from 'react'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { CodeRef, Extension, ExtensionDeclaration } from '../types'; import { NodeKind, ResourcesObject, WatchK8sResources, WatchK8sResults } from './console-types'; export type IsNodeStatusActive = ( @@ -27,5 +27,4 @@ export type NodeStatus = ExtensionD } >; -export const isNodeStatus = (e: ExtensionDeclaration): e is NodeStatus => - e.type === 'console.node/status'; +export const isNodeStatus = (e: Extension): e is NodeStatus => e.type === 'console.node/status'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/notification-alert.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/notification-alert.ts index b49088e86cf..fb0c494ebe9 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/notification-alert.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/notification-alert.ts @@ -1,6 +1,6 @@ import { Alert } from '../api/common-types'; import { LaunchModal } from '../app/modal-support/ModalProvider'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; /** This extension can be used to trigger a specific action when a specific Prometheus alert is observed by the Console based on its `rule.name` value. */ export type AlertAction = ExtensionDeclaration< @@ -15,5 +15,4 @@ export type AlertAction = ExtensionDeclaration< } >; -export const isAlertAction = (e: ExtensionDeclaration): e is AlertAction => - e.type === 'console.alert-action'; +export const isAlertAction = (e: Extension): e is AlertAction => e.type === 'console.alert-action'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pages.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pages.ts index cd79de2dacc..fb4a7242459 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pages.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pages.ts @@ -1,5 +1,5 @@ import { ExtensionK8sGroupKindModel, ExtensionK8sModel } from '../api/common-types'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; type ResourcePageProperties = { /** The model for which this resource page links to. */ @@ -80,18 +80,17 @@ export type StandaloneRoutePage = ExtensionDeclaration< // Type guards -export const isRoutePage = (e: ExtensionDeclaration): e is RoutePage => - e.type === 'console.page/route'; +export const isRoutePage = (e: Extension): e is RoutePage => e.type === 'console.page/route'; -export const isStandaloneRoutePage = (e: ExtensionDeclaration): e is StandaloneRoutePage => +export const isStandaloneRoutePage = (e: Extension): e is StandaloneRoutePage => e.type === 'console.page/route/standalone'; -export const isResourceListPage = (e: ExtensionDeclaration): e is ResourceListPage => +export const isResourceListPage = (e: Extension): e is ResourceListPage => e.type === 'console.page/resource/list'; -export const isResourceDetailsPage = (e: ExtensionDeclaration): e is ResourceDetailsPage => +export const isResourceDetailsPage = (e: Extension): e is ResourceDetailsPage => e.type === 'console.page/resource/details'; /** @deprecated - use `console.tab/horizontalNav` */ -export const isResourceTabPage = (e: ExtensionDeclaration): e is ResourceTabPage => +export const isResourceTabPage = (e: Extension): e is ResourceTabPage => e.type === 'console.page/resource/tab'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/perspectives.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/perspectives.ts index 26e3800817f..a3dea91e773 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/perspectives.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/perspectives.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import { ExtensionK8sModel } from '../api/common-types'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; // Align type with React.lazy type LazyComponent = { default: React.ComponentType }; @@ -28,6 +28,6 @@ export type Perspective = ExtensionDeclaration< } >; -export const isPerspective = (e: ExtensionDeclaration): e is Perspective => { +export const isPerspective = (e: Extension): e is Perspective => { return e.type === 'console.perspective'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/project-overview.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/project-overview.ts index c8ed89fd3e3..9036dd993fb 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/project-overview.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/project-overview.ts @@ -1,5 +1,5 @@ import * as React from 'react'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { CodeRef, Extension, ExtensionDeclaration } from '../types'; import { Humanize, TopConsumerPopoverProps } from './console-types'; /** Adds a new inventory item into project overview page. */ @@ -36,10 +36,9 @@ export type ProjectOverviewUtilizationItem = ExtensionDeclaration< // Type guards -export const isProjectOverviewInventoryItem = ( - e: ExtensionDeclaration, -): e is ProjectOverviewInventoryItem => e.type === 'console.project-overview/inventory-item'; +export const isProjectOverviewInventoryItem = (e: Extension): e is ProjectOverviewInventoryItem => + e.type === 'console.project-overview/inventory-item'; export const isProjectOverviewUtilizationItem = ( - e: ExtensionDeclaration, + e: Extension, ): e is ProjectOverviewUtilizationItem => e.type === 'console.project-overview/utilization-item'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pvc.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pvc.ts index 6bafce3bdff..9a5fd7220a4 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pvc.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/pvc.ts @@ -1,4 +1,4 @@ -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; import { K8sResourceCommon } from './console-types'; /** This extension can be used to specify additional properties that will be used when creating PVC resources on the PVC list page. */ @@ -49,14 +49,11 @@ export type PVCDelete = ExtensionDeclaration< // Type guards -export const isPVCCreateProp = (e: ExtensionDeclaration): e is PVCCreateProp => +export const isPVCCreateProp = (e: Extension): e is PVCCreateProp => e.type === 'console.pvc/create-prop'; -export const isPVCAlert = (e: ExtensionDeclaration): e is PVCAlert => - e.type === 'console.pvc/alert'; +export const isPVCAlert = (e: Extension): e is PVCAlert => e.type === 'console.pvc/alert'; -export const isPVCStatus = (e: ExtensionDeclaration): e is PVCStatus => - e.type === 'console.pvc/status'; +export const isPVCStatus = (e: Extension): e is PVCStatus => e.type === 'console.pvc/status'; -export const isPVCDelete = (e: ExtensionDeclaration): e is PVCDelete => - e.type === 'console.pvc/delete'; +export const isPVCDelete = (e: Extension): e is PVCDelete => e.type === 'console.pvc/delete'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/redux.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/redux.ts index 28449cce1f6..3a52255dca0 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/redux.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/redux.ts @@ -1,5 +1,5 @@ import { Reducer } from 'redux'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; /** Adds new reducer to Console Redux store which operates on `plugins.` substate. */ export type ReduxReducer = ExtensionDeclaration< @@ -14,5 +14,5 @@ export type ReduxReducer = ExtensionDeclaration< // Type guards -export const isReduxReducer = (e: ExtensionDeclaration): e is ReduxReducer => +export const isReduxReducer = (e: Extension): e is ReduxReducer => e.type === 'console.redux-reducer'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/resource-metadata.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/resource-metadata.ts index 9e41f0a7504..f9a29756841 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/resource-metadata.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/resource-metadata.ts @@ -1,5 +1,5 @@ import { ExtensionK8sGroupModel } from '../api/common-types'; -import { ExtensionDeclaration } from '../types'; +import { Extension, ExtensionDeclaration } from '../types'; export enum ModelBadge { DEV = 'dev', @@ -27,5 +27,5 @@ export type ModelMetadata = ExtensionDeclaration< // Type guards -export const isModelMetadata = (e: ExtensionDeclaration): e is ModelMetadata => +export const isModelMetadata = (e: Extension): e is ModelMetadata => e.type === 'console.model-metadata'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-class-provisioner.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-class-provisioner.ts index c5dfd5c894a..0e29ecfe38b 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-class-provisioner.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-class-provisioner.ts @@ -1,3 +1,4 @@ +import { Extension } from '@console/plugin-sdk/src/typings/base'; import { CodeRef, ExtensionDeclaration } from '../types'; import { StorageClass } from './console-types'; @@ -46,5 +47,5 @@ export type StorageClassProvisioner = ExtensionDeclaration< } >; -export const isStorageClassProvisioner = (e: ExtensionDeclaration): e is StorageClassProvisioner => +export const isStorageClassProvisioner = (e: Extension): e is StorageClassProvisioner => e.type === 'console.storage-class/provisioner'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-provider.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-provider.ts index 20c84fec4f5..6f1ea92f1b8 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-provider.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/storage-provider.ts @@ -1,4 +1,4 @@ -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; /** This extension can be used to contribute a new storage provider to select, when attaching storage and a provider specific component. */ @@ -12,5 +12,5 @@ export type StorageProvider = ExtensionDeclaration< } >; -export const isStorageProvider = (e: ExtensionDeclaration): e is StorageProvider => +export const isStorageProvider = (e: Extension): e is StorageProvider => e.type === 'console.storage-provider'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/telemetry.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/telemetry.ts index 07fdbfa42fc..c84b574a775 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/telemetry.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/telemetry.ts @@ -1,4 +1,4 @@ -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; /** This component can be used to register a listener function receiving telemetry events. These events include user identification, page navigation, and other application specific events. @@ -16,6 +16,6 @@ export type TelemetryEventListener =

(eventType: string, properties?: P // Type guards -export const isTelemetryListener = (e: ExtensionDeclaration): e is TelemetryListener => { +export const isTelemetryListener = (e: Extension): e is TelemetryListener => { return e.type === 'console.telemetry/listener'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology-details.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology-details.ts index 163a952532c..59480b33b66 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology-details.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology-details.ts @@ -1,7 +1,7 @@ import * as React from 'react'; import { GraphElement } from '@patternfly/react-topology'; import { ExtensionHook } from '../api/common-types'; -import { CodeRef, ExtensionDeclaration } from '../types'; +import { Extension, CodeRef, ExtensionDeclaration } from '../types'; import { K8sResourceCommon } from './console-types'; import { BuildConfigData } from './topology-types'; @@ -118,31 +118,31 @@ export type SupportedTopologyDetailsExtensions = // Type guards -export const isDetailsTab = (e: ExtensionDeclaration): e is DetailsTab => { +export const isDetailsTab = (e: Extension): e is DetailsTab => { return e.type === 'console.topology/details/tab'; }; -export const isDetailsTabSection = (e: ExtensionDeclaration): e is DetailsTabSection => { +export const isDetailsTabSection = (e: Extension): e is DetailsTabSection => { return e.type === 'console.topology/details/tab-section'; }; -export const isDetailsResourceLink = (e: ExtensionDeclaration): e is DetailsResourceLink => { +export const isDetailsResourceLink = (e: Extension): e is DetailsResourceLink => { return e.type === 'console.topology/details/resource-link'; }; -export const isDetailsResourceAlert = (e: ExtensionDeclaration): e is DetailsResourceAlert => { +export const isDetailsResourceAlert = (e: Extension): e is DetailsResourceAlert => { return e.type === 'console.topology/details/resource-alert'; }; -export const isPodAdapter = (e: ExtensionDeclaration): e is PodAdapter => { +export const isPodAdapter = (e: Extension): e is PodAdapter => { return e.type === 'console.topology/adapter/pod'; }; -export const isBuildAdapter = (e: ExtensionDeclaration): e is BuildAdapter => { +export const isBuildAdapter = (e: Extension): e is BuildAdapter => { return e.type === 'console.topology/adapter/build'; }; -export const isNetworkAdapter = (e: ExtensionDeclaration): e is NetworkAdapter => { +export const isNetworkAdapter = (e: Extension): e is NetworkAdapter => { return e.type === 'console.topology/adapter/network'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology.ts index 4deb7147ad1..f930df6937b 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/topology.ts @@ -1,5 +1,5 @@ import { TopologyQuadrant } from '@patternfly/react-topology/dist/esm/types'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; import { WatchK8sResourcesGeneric } from './console-types'; import { CreateConnectionGetter, @@ -96,24 +96,20 @@ export type TopologyRelationshipProvider = ExtensionDeclaration< // Type Guards -export const isTopologyComponentFactory = ( - e: ExtensionDeclaration, -): e is TopologyComponentFactory => e.type === 'console.topology/component/factory'; +export const isTopologyComponentFactory = (e: Extension): e is TopologyComponentFactory => + e.type === 'console.topology/component/factory'; -export const isTopologyCreateConnector = (e: ExtensionDeclaration): e is TopologyCreateConnector => +export const isTopologyCreateConnector = (e: Extension): e is TopologyCreateConnector => e.type === 'console.topology/create/connector'; -export const isTopologyDataModelFactory = ( - e: ExtensionDeclaration, -): e is TopologyDataModelFactory => e.type === 'console.topology/data/factory'; +export const isTopologyDataModelFactory = (e: Extension): e is TopologyDataModelFactory => + e.type === 'console.topology/data/factory'; -export const isTopologyDisplayFilters = (e: ExtensionDeclaration): e is TopologyDisplayFilters => +export const isTopologyDisplayFilters = (e: Extension): e is TopologyDisplayFilters => e.type === 'console.topology/display/filters'; -export const isTopologyDecoratorProvider = ( - e: ExtensionDeclaration, -): e is TopologyDecoratorProvider => e.type === 'console.topology/decorator/provider'; +export const isTopologyDecoratorProvider = (e: Extension): e is TopologyDecoratorProvider => + e.type === 'console.topology/decorator/provider'; -export const isTopologyRelationshipProvider = ( - e: ExtensionDeclaration, -): e is TopologyRelationshipProvider => e.type === 'console.topology/relationship/provider'; +export const isTopologyRelationshipProvider = (e: Extension): e is TopologyRelationshipProvider => + e.type === 'console.topology/relationship/provider'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/user-preferences.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/user-preferences.ts index ef718b76ca8..97bfae39038 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/user-preferences.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/user-preferences.ts @@ -1,6 +1,6 @@ import * as React from 'react'; import { JSONSchema7Type } from 'json-schema'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; export enum UserPreferenceFieldType { dropdown = 'dropdown', @@ -82,10 +82,10 @@ export type UserPreferenceItem = ExtensionDeclaration< // Type guards -export const isUserPreferenceGroup = (e: ExtensionDeclaration): e is UserPreferenceGroup => { +export const isUserPreferenceGroup = (e: Extension): e is UserPreferenceGroup => { return e.type === 'console.user-preference/group'; }; -export const isUserPreferenceItem = (e: ExtensionDeclaration): e is UserPreferenceItem => { +export const isUserPreferenceItem = (e: Extension): e is UserPreferenceItem => { return e.type === 'console.user-preference/item'; }; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/yaml-templates.ts b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/yaml-templates.ts index 8dfd42742f2..c988caac54f 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/extensions/yaml-templates.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/extensions/yaml-templates.ts @@ -1,5 +1,5 @@ import { ExtensionK8sModel } from '../api/common-types'; -import { ExtensionDeclaration, CodeRef } from '../types'; +import { Extension, ExtensionDeclaration, CodeRef } from '../types'; /** YAML templates for editing resources via the yaml editor. */ export type YAMLTemplate = ExtensionDeclaration< @@ -16,5 +16,5 @@ export type YAMLTemplate = ExtensionDeclaration< // Type guards -export const isYAMLTemplate = (e: ExtensionDeclaration): e is YAMLTemplate => +export const isYAMLTemplate = (e: Extension): e is YAMLTemplate => e.type === 'console.yaml-template'; diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-loader.spec.ts b/frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-loader.spec.ts index 04ea09b9055..933ac0e7bea 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-loader.spec.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/runtime/__tests__/plugin-loader.spec.ts @@ -1,7 +1,7 @@ import { PluginStore } from '@console/plugin-sdk/src/store'; import * as utilsModule from '@console/shared/src/utils/utils'; import { StandardConsolePluginManifest, LegacyConsolePluginManifest } from '../../build-types'; -import { ExtensionDeclaration } from '../../types'; +import { Extension } from '../../types'; import { getPluginManifest, getExecutableCodeRefMock, @@ -181,7 +181,7 @@ describe('window.loadPluginEntry', () => { const pluginStore = new PluginStore(); const addDynamicPlugin = jest.spyOn(pluginStore, 'addDynamicPlugin'); - const extensions: ExtensionDeclaration[] = [ + const extensions: Extension[] = [ { type: 'Foo', properties: { test: true }, @@ -192,7 +192,7 @@ describe('window.loadPluginEntry', () => { }, ]; - const resolvedExtensions: ExtensionDeclaration[] = [ + const resolvedExtensions: Extension[] = [ { type: 'Foo', properties: { test: true }, diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/utils/test-utils.ts b/frontend/packages/console-dynamic-plugin-sdk/src/utils/test-utils.ts index b2e3956f189..231de5c2058 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/utils/test-utils.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/utils/test-utils.ts @@ -1,11 +1,11 @@ import { StandardConsolePluginManifest } from '../build-types'; import { applyCodeRefSymbol } from '../coderefs/coderef-resolver'; -import { ExtensionDeclaration, RemoteEntryModule, CodeRef, Update } from '../types'; +import { Extension, RemoteEntryModule, CodeRef, Update } from '../types'; export const getPluginManifest = ( name: string, version: string, - extensions: ExtensionDeclaration[] = [], + extensions: Extension[] = [], disableStaticPlugins?: string[], ): StandardConsolePluginManifest => ({ name, diff --git a/frontend/packages/console-dynamic-plugin-sdk/src/validation/__tests__/ExtensionValidator.spec.ts b/frontend/packages/console-dynamic-plugin-sdk/src/validation/__tests__/ExtensionValidator.spec.ts index b3d0e2b1059..3eed43575db 100644 --- a/frontend/packages/console-dynamic-plugin-sdk/src/validation/__tests__/ExtensionValidator.spec.ts +++ b/frontend/packages/console-dynamic-plugin-sdk/src/validation/__tests__/ExtensionValidator.spec.ts @@ -1,5 +1,5 @@ import * as webpack from 'webpack'; -import type { ExtensionDeclaration } from '../../types'; +import { Extension } from '../../types'; import { collectCodeRefData, findWebpackModules, ExtensionValidator } from '../ExtensionValidator'; import { ValidationResult } from '../ValidationResult'; @@ -21,7 +21,7 @@ const getWebpackCompilationMocks = ( describe('collectCodeRefData', () => { it('returns CodeRef data for the given list of extensions', () => { - const extensions: ExtensionDeclaration[] = [ + const extensions: Extension[] = [ { type: 'Foo', properties: { @@ -66,7 +66,7 @@ describe('findWebpackModules', () => { describe('ExtensionValidator', () => { describe('validate', () => { const testValidate = ( - extensions: ExtensionDeclaration[], + extensions: Extension[], webpackModules: {}[], exposedModules: { [moduleName: string]: string }, beforeResult: (getProvidedExports: jest.Mock) => void, diff --git a/frontend/packages/console-plugin-sdk/src/__tests__/store.spec.ts b/frontend/packages/console-plugin-sdk/src/__tests__/store.spec.ts index dbfb4c08d24..16af874cbcc 100644 --- a/frontend/packages/console-plugin-sdk/src/__tests__/store.spec.ts +++ b/frontend/packages/console-plugin-sdk/src/__tests__/store.spec.ts @@ -1,6 +1,5 @@ import * as Combinatorics from 'js-combinatorics'; import * as _ from 'lodash'; -import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; import { getPluginManifest, getExecutableCodeRefMock, @@ -12,6 +11,7 @@ import { getGatingFlagNames, PluginStore, } from '../store'; +import { Extension } from '../typings'; describe('sanitizeExtension', () => { it('sanitizes the flags object for gated extensions', () => { @@ -80,7 +80,7 @@ describe('sanitizeExtension', () => { }); it('returns the same extension instance', () => { - const testExtension: ExtensionDeclaration = { type: 'Foo/Bar', properties: {} }; + const testExtension: Extension = { type: 'Foo/Bar', properties: {} }; expect(sanitizeExtension(testExtension)).toBe(testExtension); }); @@ -126,14 +126,14 @@ describe('augmentExtension', () => { }); it('returns the same extension instance', () => { - const testExtension: ExtensionDeclaration = { type: 'Foo/Bar', properties: {} }; + const testExtension: Extension = { type: 'Foo/Bar', properties: {} }; expect(augmentExtension(testExtension, 'Test@1.2.3', 'Test', 0)).toBe(testExtension); }); }); describe('isExtensionInUse', () => { - const gatedExtension: ExtensionDeclaration = { + const gatedExtension: Extension = { type: 'Foo/Bar', properties: {}, flags: { @@ -181,7 +181,7 @@ describe('isExtensionInUse', () => { describe('getGatingFlagNames', () => { it('returns an array of flag names used for gating given extensions', () => { - const extensions: ExtensionDeclaration[] = [ + const extensions: Extension[] = [ { type: 'Foo', properties: {}, @@ -208,7 +208,7 @@ describe('PluginStore', () => { const addDynamicPluginToStore = ( store: PluginStore, manifest: ReturnType, - resolvedExtensions: ExtensionDeclaration[] = manifest.extensions, + resolvedExtensions: Extension[] = manifest.extensions, ) => { store.addDynamicPlugin(`${manifest.name}@${manifest.version}`, manifest, resolvedExtensions); }; @@ -327,15 +327,15 @@ describe('PluginStore', () => { }, ]); - const dynamicPluginExtensionsA: ExtensionDeclaration[] = [ + const dynamicPluginExtensionsA: Extension[] = [ { type: 'Baz', properties: {}, flags: { disallowed: ['foo', 'bar'] } }, ]; - const dynamicPluginExtensionsB: ExtensionDeclaration[] = [ + const dynamicPluginExtensionsB: Extension[] = [ { type: 'Qux', properties: { value: 'test' }, flags: { required: ['foo', 'bar'] } }, ]; - const dynamicPluginExtensionsC: ExtensionDeclaration[] = [ + const dynamicPluginExtensionsC: Extension[] = [ { type: 'Mux', properties: {}, flags: { required: ['foo'], disallowed: ['bar'] } }, ]; @@ -527,7 +527,7 @@ describe('PluginStore', () => { const ref = getExecutableCodeRefMock('value'); - const resolvedExtensions: ExtensionDeclaration[] = [ + const resolvedExtensions: Extension[] = [ { type: 'Foo', properties: { test: true }, diff --git a/frontend/packages/console-plugin-sdk/src/codegen/__tests__/active-plugins.spec.ts b/frontend/packages/console-plugin-sdk/src/codegen/__tests__/active-plugins.spec.ts index 563ce12ffd3..13909d6bde5 100644 --- a/frontend/packages/console-plugin-sdk/src/codegen/__tests__/active-plugins.spec.ts +++ b/frontend/packages/console-plugin-sdk/src/codegen/__tests__/active-plugins.spec.ts @@ -1,10 +1,11 @@ import * as fs from 'fs'; import * as _ from 'lodash'; import { extensionsFile } from '@console/dynamic-plugin-sdk/src/constants'; -import type { ExtensionDeclaration, EncodedCodeRef } from '@console/dynamic-plugin-sdk/src/types'; +import { EncodedCodeRef } from '@console/dynamic-plugin-sdk/src/types'; import * as jsoncModule from '@console/dynamic-plugin-sdk/src/utils/jsonc'; import { ValidationResult } from '@console/dynamic-plugin-sdk/src/validation/ValidationResult'; import * as remotePluginModule from '@console/dynamic-plugin-sdk/src/webpack/ConsoleRemotePlugin'; +import { Extension } from '../../typings'; import { trimStartMultiLine } from '../../utils/string'; import { getTemplatePackage } from '../../utils/test-utils'; import * as activePluginsModule from '../active-plugins'; @@ -44,10 +45,8 @@ describe('getActivePluginsModule', () => { consolePlugin: {}, }; - const fooDynamicExtensions: ExtensionDeclaration[] = [ - { type: 'Dynamic/Foo', properties: { test: true } }, - ]; - const barDynamicExtensions: ExtensionDeclaration[] = [ + const fooDynamicExtensions: Extension[] = [{ type: 'Dynamic/Foo', properties: { test: true } }]; + const barDynamicExtensions: Extension[] = [ { type: 'Dynamic/Bar', properties: { baz: 1, qux: { $codeRef: 'a.b' } } }, ]; @@ -123,10 +122,8 @@ describe('loadActivePluginsForTestPurposes', () => { consolePlugin: {}, }; - const fooDynamicExtensions: ExtensionDeclaration[] = [ - { type: 'Dynamic/Foo', properties: { test: true } }, - ]; - const barDynamicExtensions: ExtensionDeclaration[] = [ + const fooDynamicExtensions: Extension[] = [{ type: 'Dynamic/Foo', properties: { test: true } }]; + const barDynamicExtensions: Extension[] = [ { type: 'Dynamic/Bar', properties: { baz: 1, qux: { $codeRef: 'a.b' } } }, ]; @@ -262,7 +259,7 @@ describe('getDynamicExtensions', () => { consolePlugin: {}, }; - const extensionsJSON: ExtensionDeclaration[] = [ + const extensionsJSON: Extension[] = [ { type: 'Dynamic/Foo', properties: { test: true, mux: { $codeRef: 'a.b' } } }, { type: 'Dynamic/Bar', properties: { baz: 1, qux: { $codeRef: 'foo.bar' } } }, ]; @@ -375,7 +372,7 @@ describe('getDynamicExtensions', () => { consolePlugin: {}, }; - const extensionsJSON: ExtensionDeclaration[] = []; + const extensionsJSON: Extension[] = []; const extensionsFilePath = `${pluginPackage._path}/${extensionsFile}`; const errorCallback = jest.fn(); const codeRefTransformer = jest.fn(_.identity); @@ -411,7 +408,7 @@ describe('getDynamicExtensions', () => { consolePlugin: {}, }; - const extensionsJSON: ExtensionDeclaration[] = [ + const extensionsJSON: Extension[] = [ { type: 'Dynamic/Foo', properties: { test: true, mux: { $codeRef: 'a.b' } } }, { type: 'Dynamic/Bar', properties: { baz: 1, qux: { $codeRef: 'foo.bar' } } }, ]; diff --git a/frontend/packages/console-plugin-sdk/src/utils/__tests__/extension-i18n.spec.ts b/frontend/packages/console-plugin-sdk/src/utils/__tests__/extension-i18n.spec.ts index 9e2984ef8ae..ca0ec7a9617 100644 --- a/frontend/packages/console-plugin-sdk/src/utils/__tests__/extension-i18n.spec.ts +++ b/frontend/packages/console-plugin-sdk/src/utils/__tests__/extension-i18n.spec.ts @@ -1,4 +1,4 @@ -import type { ExtensionDeclaration } from '@console/dynamic-plugin-sdk/src/types'; +import { Extension } from '../../typings'; import { isTranslatableString, getTranslationKey, translateExtension } from '../extension-i18n'; const nonTranslatableStrings: string[] = ['', null, undefined, '%', 'a%', '%a', '%%', 'foo']; @@ -29,7 +29,7 @@ describe('getTranslationKey', () => { describe('translateExtension', () => { it("recursively replaces all translatable string values via the 't' function", () => { - const testExtension: ExtensionDeclaration = { + const testExtension: Extension = { type: 'Foo/Bar', properties: { foo1: '%test~1%', @@ -70,7 +70,7 @@ describe('translateExtension', () => { }); it('returns the same extension instance', () => { - const testExtension: ExtensionDeclaration = { type: 'Foo/Bar', properties: {} }; + const testExtension: Extension = { type: 'Foo/Bar', properties: {} }; const t = jest.fn(); expect(translateExtension(testExtension, t)).toBe(testExtension);