UNPKG

@stolostron/multicluster-sdk

Version:

Provides extensions and APIs that dynamic plugins can use to leverage multicluster capabilities provided by Red Hat Advanced Cluster Management.

69 lines 2.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getExtensionResourcePath = exports.findResourceRouteHandler = exports.isResourceRoute = void 0; const constants_1 = require("../api/constants"); const isResourceRoute = (e) => { return e.type === constants_1.RESOURCE_ROUTE_TYPE; }; exports.isResourceRoute = isResourceRoute; /** * Find matching ResourceRoute extension * First checks for exact version match, then falls back to version-agnostic match. * * @param extensions - Array of resolved resource route extensions * @param group - The resource group (e.g., 'kubevirt.io') * @param kind - The resource kind (e.g., 'VirtualMachine') * @param version - The resource version (e.g., 'v1') * @returns The handler function if found, null otherwise */ const findResourceRouteHandler = (extensions, group, kind, version) => { if (!extensions?.length) { return null; } // first tries to find exact version match const exactMatch = extensions.find((ext) => { const { model } = ext.properties; return model.group === group && model.kind === kind && model.version === version; }); if (exactMatch) { return exactMatch.properties.handler; } // falls back to version-agnostic match const versionAgnosticMatch = extensions.find((ext) => { const { model } = ext.properties; return model.group === group && model.kind === kind && !model.version; }); return versionAgnosticMatch?.properties.handler || null; }; exports.findResourceRouteHandler = findResourceRouteHandler; /** * Get extension resource path with parameters * Convenience function that combines finding the handler and calling it * * @param extensions - Array of resolved resource route extensions * @param group - The resource group (e.g., 'kubevirt.io') * @param kind - The resource kind (e.g., 'VirtualMachine') * @param version - The resource version (e.g., 'v1') * @param params - Parameters to pass to the handler function * @returns The extension path if found, null otherwise */ const getExtensionResourcePath = (extensions, group, kind, version, params) => { const handler = (0, exports.findResourceRouteHandler)(extensions, group, kind, version); if (handler && typeof handler === 'function' && params) { const result = handler({ cluster: params.cluster, namespace: params.namespace, name: params.name, resource: params.resource, model: { group: params.model.group || '', version: params.model.version || '', kind: params.model.kind, }, }); return result ?? null; } return null; }; exports.getExtensionResourcePath = getExtensionResourcePath; //# sourceMappingURL=resourceRouteUtils.js.map