UNPKG

knowhub

Version:

Synchronize AI coding–agent knowledge files (rules, templates, guidelines) across your project.

59 lines • 2.41 kB
import { resolve } from "node:path"; import { cosmiconfig } from "cosmiconfig"; import { ConfigurationError, ValidationError } from "./errors.js"; import { pluginRegistry } from "./plugins/registry.js"; import { validateConfigStructure, validateResource } from "./validators.js"; export async function loadConfig(configPath, projectRoot) { const explorer = cosmiconfig("knowhub"); let result; if (configPath) { result = await explorer.load(configPath); } else { result = await explorer.search(); } if (!result) { throw new ConfigurationError('No knowhub configuration found. Run "npx knowhub init" to create a configuration file, or ensure you have a .knowhubrc.* file or "knowhub" field in package.json.', configPath); } const config = result.config; try { validateConfigStructure(config, result.filepath); } catch (error) { if (error instanceof ValidationError) { throw new ConfigurationError(error.message, result.filepath); } throw error; } if (config.plugins && Array.isArray(config.plugins)) { const configProjectRoot = projectRoot || process.cwd(); try { await pluginRegistry.loadPlugins(config.plugins, configProjectRoot); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); throw new ConfigurationError(`Failed to load plugins: ${errorMessage}`, result.filepath); } } const validatedResources = []; for (let i = 0; i < config.resources.length; i++) { const resource = config.resources[i]; if (!resource) { throw new ValidationError(`Invalid resource at resources[${i}]: resource is undefined`, `resources[${i}]`); } const resourcePath = `resources[${i}]`; try { const validated = await validateResource(resource, resourcePath); validatedResources.push(validated); } catch (error) { if (error instanceof ValidationError) { throw error; } const errorMessage = error instanceof Error ? error.message : String(error); throw new ValidationError(`Invalid resource at ${resourcePath}: ${errorMessage}`, resourcePath); } } return validatedResources; } //# sourceMappingURL=config.js.map