@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
JavaScript
;
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