UNPKG

@vooodooo/magic

Version:

Vooodooo - AI orchestration platform

159 lines 6.06 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PluginValidator = void 0; exports.createPluginValidator = createPluginValidator; const semver_1 = __importDefault(require("semver")); /** * System for validating Vooodooo plugins */ class PluginValidator { constructor(options) { this.rules = []; this.options = { // Default options strict: false, // Override with user-provided options ...options, }; // Set up default validation rules this.setupDefaultRules(); // Add custom rules if provided if (options.customRules) { this.rules.push(...options.customRules); } } /** * Validate a plugin */ validatePlugin(plugin) { const errors = []; const warnings = []; // Run all validation rules for (const rule of this.rules) { const result = rule.validate(plugin); if (!result.valid) { errors.push(result.error || `Failed validation rule: ${rule.name}`); } else if (result.warning) { warnings.push(result.warning); } } return { valid: errors.length === 0, pluginId: plugin.id, errors, warnings, }; } /** * Set up default validation rules */ setupDefaultRules() { // Rule 1: Plugin must have a valid manifest this.rules.push({ name: 'valid-manifest', description: 'Plugin must have a valid manifest', validate: (plugin) => { if (!plugin.manifest) { return { valid: false, error: 'Plugin manifest is missing' }; } // Check required fields const requiredFields = ['id', 'name', 'version', 'description']; const missingFields = requiredFields.filter((field) => !plugin.manifest[field]); if (missingFields.length > 0) { return { valid: false, error: `Plugin manifest is missing required fields: ${missingFields.join(', ')}`, }; } return { valid: true }; }, }); // Rule 2: Plugin version must be valid this.rules.push({ name: 'valid-version', description: 'Plugin must have a valid version', validate: (plugin) => { const version = plugin.manifest.version; if (!version) { return { valid: false, error: 'Plugin version is missing' }; } if (!semver_1.default.valid(version)) { return { valid: false, error: `Plugin version "${version}" is not a valid semantic version`, }; } return { valid: true }; }, }); // Rule 3: Plugin must be compatible with current platform version this.rules.push({ name: 'platform-compatibility', description: 'Plugin must be compatible with current platform version', validate: (plugin) => { const minPlatformVersion = plugin.manifest.minPlatformVersion; if (!minPlatformVersion) { return { valid: !this.options.strict, error: 'Plugin does not specify a minimum platform version', warning: 'Plugin does not specify a minimum platform version', }; } if (!semver_1.default.valid(minPlatformVersion)) { return { valid: false, error: `Plugin minimum platform version "${minPlatformVersion}" is not a valid semantic version`, }; } if (semver_1.default.gt(minPlatformVersion, this.options.platformVersion)) { return { valid: false, error: `Plugin requires platform version ${minPlatformVersion} but current version is ${this.options.platformVersion}`, }; } return { valid: true }; }, }); // Rule 4: Plugin main file must exist this.rules.push({ name: 'main-file-exists', description: 'Plugin main file must exist', validate: (plugin) => { // This check is already done in the loader, so we assume it's valid return { valid: true }; }, }); // Rule 5: Plugin dependencies must be valid this.rules.push({ name: 'valid-dependencies', description: 'Plugin dependencies must be valid', validate: (plugin) => { const dependencies = plugin.manifest.dependencies; if (!dependencies) { return { valid: true }; } if (typeof dependencies !== 'object') { return { valid: false, error: 'Plugin dependencies must be an object', }; } // Further dependency validation would require checking if dependencies are installed // This is typically done by the plugin manager during loading return { valid: true }; }, }); } } exports.PluginValidator = PluginValidator; /** * Create a plugin validator instance */ function createPluginValidator(options) { return new PluginValidator(options); } //# sourceMappingURL=plugin-validator.js.map