UNPKG

@comake/skl-js-engine

Version:

Standard Knowledge Language Javascript Engine

66 lines (54 loc) 2.14 kB
import type { NodeObject } from 'jsonld'; import type { CapabilityConfig, JSONObject, OrArray } from './util/Types'; // Define the custom capability handler type // Using any to avoid circular dependency export type CustomCapabilityHandler = ( args: JSONObject, sklEngine: any, capabilityConfig?: CapabilityConfig ) => Promise<OrArray<NodeObject>>; // Global custom capabilities registry class GlobalCustomCapabilitiesRegistry { private readonly customCapabilities: Map<string, CustomCapabilityHandler> = new Map(); public register(capabilityId: string, handler: CustomCapabilityHandler): void { this.customCapabilities.set(capabilityId, handler); } public unregister(capabilityId: string): boolean { return this.customCapabilities.delete(capabilityId); } public has(capabilityId: string): boolean { return this.customCapabilities.has(capabilityId); } public async execute( capabilityId: string, args: JSONObject, sklEngine: any, capabilityConfig?: CapabilityConfig ): Promise<OrArray<NodeObject>> { const handler = this.customCapabilities.get(capabilityId); if (!handler) { throw new Error(`Custom capability '${capabilityId}' not found`); } return await handler(args, sklEngine, capabilityConfig); } public getAll(): string[] { return [ ...this.customCapabilities.keys() ]; } public clear(): void { this.customCapabilities.clear(); } } // Global instance const globalCustomCapabilities = new GlobalCustomCapabilitiesRegistry(); // Export functions for external use export const customCapabilities = { register(capabilityId: string, handler: CustomCapabilityHandler): void { globalCustomCapabilities.register(capabilityId, handler); }, unregister: (capabilityId: string): boolean => globalCustomCapabilities.unregister(capabilityId), has: (capabilityId: string): boolean => globalCustomCapabilities.has(capabilityId), getAll: (): string[] => globalCustomCapabilities.getAll(), clear: (): void => globalCustomCapabilities.clear() }; // Export the registry instance for internal use export { globalCustomCapabilities };