glost-registry 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,466 @@
1
+ /**
2
+ * Enhanced Plugin Registry
3
+ *
4
+ * Plugin registry with discovery, metadata, and validation capabilities.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ /**
9
+ * Enhanced Plugin Registry
10
+ *
11
+ * Manages plugin metadata, discovery, validation, and conflict detection.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { PluginRegistry } from "glost-registry";
16
+ *
17
+ * const registry = new PluginRegistry();
18
+ *
19
+ * registry.register(myPlugin, {
20
+ * version: "1.0.0",
21
+ * category: "enhancer",
22
+ * tags: ["transcription", "ipa"]
23
+ * });
24
+ *
25
+ * const plugins = registry.search({ language: "th" });
26
+ * ```
27
+ */
28
+ export class PluginRegistry {
29
+ plugins = new Map();
30
+ extensions = new Map();
31
+ /**
32
+ * Register a plugin with metadata
33
+ *
34
+ * @param extension - The plugin extension
35
+ * @param metadata - Plugin metadata
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * registry.register(myExtension, {
40
+ * version: "1.0.0",
41
+ * description: "Adds transcription support",
42
+ * category: "enhancer",
43
+ * tags: ["transcription"],
44
+ * supports: {
45
+ * languages: ["th", "ja"],
46
+ * async: true
47
+ * }
48
+ * });
49
+ * ```
50
+ */
51
+ register(extension, metadata) {
52
+ const pluginMetadata = {
53
+ ...metadata,
54
+ id: extension.id,
55
+ name: extension.name,
56
+ description: extension.description || metadata.description,
57
+ registeredAt: new Date(),
58
+ };
59
+ if (this.plugins.has(extension.id)) {
60
+ console.warn(`Plugin "${extension.id}" is already registered. Overwriting.`);
61
+ }
62
+ this.plugins.set(extension.id, pluginMetadata);
63
+ this.extensions.set(extension.id, extension);
64
+ }
65
+ /**
66
+ * Get plugin metadata
67
+ *
68
+ * @param pluginId - Plugin ID
69
+ * @returns Plugin metadata or undefined
70
+ */
71
+ getMetadata(pluginId) {
72
+ return this.plugins.get(pluginId);
73
+ }
74
+ /**
75
+ * Get plugin extension
76
+ *
77
+ * @param pluginId - Plugin ID
78
+ * @returns Plugin extension or undefined
79
+ */
80
+ getExtension(pluginId) {
81
+ return this.extensions.get(pluginId);
82
+ }
83
+ /**
84
+ * List all plugins
85
+ *
86
+ * @returns Array of all plugin metadata
87
+ */
88
+ list() {
89
+ return Array.from(this.plugins.values());
90
+ }
91
+ /**
92
+ * Search for plugins
93
+ *
94
+ * @param query - Search query
95
+ * @returns Array of matching plugin metadata
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * // Search by keyword
100
+ * const results = registry.search({ keyword: "transcription" });
101
+ *
102
+ * // Filter by category
103
+ * const enhancers = registry.search({ category: "enhancer" });
104
+ *
105
+ * // Filter by language
106
+ * const thaiPlugins = registry.search({ language: "th" });
107
+ *
108
+ * // Multiple filters
109
+ * const results = registry.search({
110
+ * category: "enhancer",
111
+ * language: "th",
112
+ * tags: ["transcription"]
113
+ * });
114
+ * ```
115
+ */
116
+ search(query) {
117
+ let results = this.list();
118
+ // Filter by keyword
119
+ if (query.keyword) {
120
+ const keyword = query.keyword.toLowerCase();
121
+ results = results.filter((plugin) => {
122
+ return (plugin.name.toLowerCase().includes(keyword) ||
123
+ plugin.description.toLowerCase().includes(keyword) ||
124
+ plugin.tags.some((tag) => tag.toLowerCase().includes(keyword)));
125
+ });
126
+ }
127
+ // Filter by category
128
+ if (query.category) {
129
+ results = results.filter((plugin) => plugin.category === query.category);
130
+ }
131
+ // Filter by language
132
+ if (query.language) {
133
+ results = results.filter((plugin) => {
134
+ return (!plugin.supports.languages ||
135
+ plugin.supports.languages.includes(query.language));
136
+ });
137
+ }
138
+ // Filter by tags
139
+ if (query.tags && query.tags.length > 0) {
140
+ results = results.filter((plugin) => {
141
+ return query.tags.some((tag) => plugin.tags.includes(tag));
142
+ });
143
+ }
144
+ // Filter by author
145
+ if (query.author) {
146
+ results = results.filter((plugin) => plugin.author === query.author);
147
+ }
148
+ // Filter by capability
149
+ if (query.capability) {
150
+ results = results.filter((plugin) => {
151
+ return plugin.supports.custom?.[query.capability] === true;
152
+ });
153
+ }
154
+ return results;
155
+ }
156
+ /**
157
+ * Get plugins by category
158
+ *
159
+ * @param category - Plugin category
160
+ * @returns Array of plugin metadata
161
+ */
162
+ getByCategory(category) {
163
+ return this.list().filter((plugin) => plugin.category === category);
164
+ }
165
+ /**
166
+ * Get plugins that support a language
167
+ *
168
+ * @param language - Language code
169
+ * @returns Array of plugin metadata
170
+ */
171
+ getLanguageSupport(language) {
172
+ return this.list().filter((plugin) => {
173
+ return (!plugin.supports.languages ||
174
+ plugin.supports.languages.includes(language));
175
+ });
176
+ }
177
+ /**
178
+ * Check if a plugin supports a language
179
+ *
180
+ * @param pluginId - Plugin ID
181
+ * @param language - Language code
182
+ * @returns True if supported
183
+ */
184
+ isLanguageSupported(pluginId, language) {
185
+ const metadata = this.getMetadata(pluginId);
186
+ if (!metadata) {
187
+ return false;
188
+ }
189
+ return (!metadata.supports.languages ||
190
+ metadata.supports.languages.includes(language));
191
+ }
192
+ /**
193
+ * Check plugin compatibility
194
+ *
195
+ * @param pluginId - Plugin ID
196
+ * @param version - Version to check (semver)
197
+ * @returns True if compatible
198
+ */
199
+ isCompatible(pluginId, version) {
200
+ const metadata = this.getMetadata(pluginId);
201
+ if (!metadata) {
202
+ return false;
203
+ }
204
+ // Simple version check (could use semver library for proper range checking)
205
+ return metadata.version === version || metadata.version >= version;
206
+ }
207
+ /**
208
+ * Check for conflicts between plugins
209
+ *
210
+ * @param pluginIds - Plugin IDs to check
211
+ * @returns Conflict report
212
+ *
213
+ * @example
214
+ * ```typescript
215
+ * const report = registry.checkConflicts(["plugin1", "plugin2", "plugin3"]);
216
+ * if (report.hasConflicts) {
217
+ * for (const conflict of report.conflicts) {
218
+ * console.error(`Conflict: ${conflict.plugin1} <-> ${conflict.plugin2}`);
219
+ * console.error(`Reason: ${conflict.reason}`);
220
+ * }
221
+ * }
222
+ * ```
223
+ */
224
+ checkConflicts(pluginIds) {
225
+ const conflicts = [];
226
+ for (let i = 0; i < pluginIds.length; i++) {
227
+ const pluginId1 = pluginIds[i];
228
+ const metadata1 = this.getMetadata(pluginId1);
229
+ if (!metadata1) {
230
+ continue;
231
+ }
232
+ for (let j = i + 1; j < pluginIds.length; j++) {
233
+ const pluginId2 = pluginIds[j];
234
+ const metadata2 = this.getMetadata(pluginId2);
235
+ if (!metadata2) {
236
+ continue;
237
+ }
238
+ // Check explicit conflicts
239
+ if (metadata1.conflicts?.includes(pluginId2)) {
240
+ conflicts.push({
241
+ plugin1: pluginId1,
242
+ plugin2: pluginId2,
243
+ reason: `${pluginId1} declares conflict with ${pluginId2}`,
244
+ severity: "error",
245
+ });
246
+ }
247
+ if (metadata2.conflicts?.includes(pluginId1)) {
248
+ conflicts.push({
249
+ plugin1: pluginId2,
250
+ plugin2: pluginId1,
251
+ reason: `${pluginId2} declares conflict with ${pluginId1}`,
252
+ severity: "error",
253
+ });
254
+ }
255
+ // Check for field ownership conflicts
256
+ const ext1 = this.getExtension(pluginId1);
257
+ const ext2 = this.getExtension(pluginId2);
258
+ if (ext1?.provides?.extras && ext2?.provides?.extras) {
259
+ const sharedFields = ext1.provides.extras.filter((field) => ext2.provides.extras.includes(field));
260
+ if (sharedFields.length > 0) {
261
+ conflicts.push({
262
+ plugin1: pluginId1,
263
+ plugin2: pluginId2,
264
+ reason: `Both plugins provide the same fields: ${sharedFields.join(", ")}`,
265
+ severity: "warning",
266
+ });
267
+ }
268
+ }
269
+ }
270
+ }
271
+ return {
272
+ hasConflicts: conflicts.length > 0,
273
+ conflicts,
274
+ };
275
+ }
276
+ /**
277
+ * Resolve dependencies for plugins
278
+ *
279
+ * @param pluginIds - Plugin IDs to resolve
280
+ * @returns Array of plugin IDs in dependency order
281
+ * @throws {Error} If circular dependencies detected or plugin not found
282
+ */
283
+ resolveDependencies(pluginIds) {
284
+ const resolved = [];
285
+ const visited = new Set();
286
+ const visiting = new Set();
287
+ const visit = (id) => {
288
+ if (visiting.has(id)) {
289
+ throw new Error(`Circular dependency detected involving plugin: ${id}`);
290
+ }
291
+ if (visited.has(id)) {
292
+ return;
293
+ }
294
+ const extension = this.getExtension(id);
295
+ if (!extension) {
296
+ throw new Error(`Plugin "${id}" not found in registry`);
297
+ }
298
+ visiting.add(id);
299
+ // Visit dependencies first
300
+ if (extension.dependencies) {
301
+ for (const depId of extension.dependencies) {
302
+ if (!pluginIds.includes(depId)) {
303
+ // Dependency not in the list, skip
304
+ continue;
305
+ }
306
+ visit(depId);
307
+ }
308
+ }
309
+ visiting.delete(id);
310
+ visited.add(id);
311
+ resolved.push(id);
312
+ };
313
+ for (const id of pluginIds) {
314
+ visit(id);
315
+ }
316
+ return resolved;
317
+ }
318
+ /**
319
+ * Validate a plugin configuration
320
+ *
321
+ * @param pluginId - Plugin ID
322
+ * @param options - Plugin options to validate
323
+ * @returns Validation result
324
+ */
325
+ validate(pluginId, options) {
326
+ const metadata = this.getMetadata(pluginId);
327
+ const errors = [];
328
+ const warnings = [];
329
+ if (!metadata) {
330
+ errors.push({
331
+ plugin: pluginId,
332
+ message: `Plugin "${pluginId}" not found in registry`,
333
+ code: "PLUGIN_NOT_FOUND",
334
+ });
335
+ return { valid: false, errors, warnings };
336
+ }
337
+ // Validate options against schema
338
+ if (metadata.options && options) {
339
+ const schema = metadata.options;
340
+ // Check required properties
341
+ if (schema.required) {
342
+ for (const required of schema.required) {
343
+ if (!(required in options)) {
344
+ errors.push({
345
+ plugin: pluginId,
346
+ message: `Required option "${required}" is missing`,
347
+ code: "MISSING_REQUIRED_OPTION",
348
+ });
349
+ }
350
+ }
351
+ }
352
+ // Check property types (basic validation)
353
+ if (schema.properties) {
354
+ for (const [key, value] of Object.entries(options)) {
355
+ const propSchema = schema.properties[key];
356
+ if (!propSchema) {
357
+ if (!schema.additionalProperties) {
358
+ warnings.push({
359
+ plugin: pluginId,
360
+ message: `Unknown option "${key}"`,
361
+ code: "UNKNOWN_OPTION",
362
+ });
363
+ }
364
+ continue;
365
+ }
366
+ const actualType = typeof value;
367
+ const expectedType = propSchema.type;
368
+ if (actualType !== expectedType &&
369
+ !(expectedType === "array" && Array.isArray(value))) {
370
+ errors.push({
371
+ plugin: pluginId,
372
+ message: `Option "${key}" should be ${expectedType}, got ${actualType}`,
373
+ code: "INVALID_OPTION_TYPE",
374
+ });
375
+ }
376
+ }
377
+ }
378
+ }
379
+ // Check requirements
380
+ if (metadata.requires?.glostVersion) {
381
+ // Could check against actual glost version
382
+ // For now, just emit a warning
383
+ warnings.push({
384
+ plugin: pluginId,
385
+ message: `Plugin requires GLOST version ${metadata.requires.glostVersion}`,
386
+ code: "VERSION_REQUIREMENT",
387
+ });
388
+ }
389
+ return {
390
+ valid: errors.length === 0,
391
+ errors,
392
+ warnings,
393
+ };
394
+ }
395
+ /**
396
+ * Get registry statistics
397
+ *
398
+ * @returns Registry statistics
399
+ */
400
+ getStatistics() {
401
+ const plugins = this.list();
402
+ const byCategory = {
403
+ transformer: 0,
404
+ enhancer: 0,
405
+ generator: 0,
406
+ analyzer: 0,
407
+ utility: 0,
408
+ };
409
+ const byLanguage = {};
410
+ const tagCounts = {};
411
+ for (const plugin of plugins) {
412
+ byCategory[plugin.category]++;
413
+ if (plugin.supports.languages) {
414
+ for (const lang of plugin.supports.languages) {
415
+ byLanguage[lang] = (byLanguage[lang] || 0) + 1;
416
+ }
417
+ }
418
+ for (const tag of plugin.tags) {
419
+ tagCounts[tag] = (tagCounts[tag] || 0) + 1;
420
+ }
421
+ }
422
+ const topTags = Object.entries(tagCounts)
423
+ .sort((a, b) => b[1] - a[1])
424
+ .slice(0, 10)
425
+ .map(([tag, count]) => ({ tag, count }));
426
+ return {
427
+ total: plugins.length,
428
+ byCategory,
429
+ byLanguage,
430
+ topTags,
431
+ };
432
+ }
433
+ /**
434
+ * Check if a plugin is registered
435
+ *
436
+ * @param pluginId - Plugin ID
437
+ * @returns True if registered
438
+ */
439
+ has(pluginId) {
440
+ return this.plugins.has(pluginId);
441
+ }
442
+ /**
443
+ * Unregister a plugin
444
+ *
445
+ * @param pluginId - Plugin ID
446
+ * @returns True if unregistered
447
+ */
448
+ unregister(pluginId) {
449
+ const hasPlugin = this.plugins.has(pluginId);
450
+ this.plugins.delete(pluginId);
451
+ this.extensions.delete(pluginId);
452
+ return hasPlugin;
453
+ }
454
+ /**
455
+ * Clear all plugins
456
+ */
457
+ clear() {
458
+ this.plugins.clear();
459
+ this.extensions.clear();
460
+ }
461
+ }
462
+ /**
463
+ * Global plugin registry instance
464
+ */
465
+ export const pluginRegistry = new PluginRegistry();
466
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Plugin Registry Types
3
+ *
4
+ * Type definitions for the enhanced plugin registry.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ /**
9
+ * Plugin category
10
+ */
11
+ export type PluginCategory = "transformer" | "enhancer" | "generator" | "analyzer" | "utility";
12
+ /**
13
+ * Plugin metadata
14
+ *
15
+ * Extended metadata for plugins beyond the basic extension interface.
16
+ */
17
+ export interface PluginMetadata {
18
+ /** Unique plugin identifier */
19
+ id: string;
20
+ /** Human-readable name */
21
+ name: string;
22
+ /** Plugin version (semver) */
23
+ version: string;
24
+ /** Description of what the plugin does */
25
+ description: string;
26
+ /** Plugin author */
27
+ author?: string;
28
+ /** Plugin repository URL */
29
+ repository?: string;
30
+ /** Plugin homepage/documentation URL */
31
+ homepage?: string;
32
+ /** Plugin category */
33
+ category: PluginCategory;
34
+ /** Tags for searching/filtering */
35
+ tags: string[];
36
+ /** Plugin capabilities */
37
+ supports: PluginCapabilities;
38
+ /** Dependencies */
39
+ requires?: PluginRequirements;
40
+ /** Conflicting plugins */
41
+ conflicts?: string[];
42
+ /** Configuration options schema */
43
+ options?: PluginOptionsSchema;
44
+ /** Usage examples */
45
+ examples?: PluginExample[];
46
+ /** When the plugin was registered */
47
+ registeredAt?: Date;
48
+ }
49
+ /**
50
+ * Plugin capabilities
51
+ */
52
+ export interface PluginCapabilities {
53
+ /** Supported language codes */
54
+ languages?: string[];
55
+ /** Supported node types */
56
+ nodeTypes?: string[];
57
+ /** Whether the plugin supports async operations */
58
+ async: boolean;
59
+ /** Whether the plugin can run in parallel with others */
60
+ parallel?: boolean;
61
+ /** Custom capabilities */
62
+ custom?: Record<string, any>;
63
+ }
64
+ /**
65
+ * Plugin requirements
66
+ */
67
+ export interface PluginRequirements {
68
+ /** Required plugins (IDs) */
69
+ plugins?: string[];
70
+ /** Required GLOST version (semver range) */
71
+ glostVersion?: string;
72
+ /** Required Node.js version (semver range) */
73
+ nodeVersion?: string;
74
+ /** Custom requirements */
75
+ custom?: Record<string, any>;
76
+ }
77
+ /**
78
+ * Plugin options schema
79
+ */
80
+ export interface PluginOptionsSchema {
81
+ /** Schema type */
82
+ type: "object";
83
+ /** Properties definition */
84
+ properties?: Record<string, PropertySchema>;
85
+ /** Required properties */
86
+ required?: string[];
87
+ /** Allow additional properties */
88
+ additionalProperties?: boolean;
89
+ }
90
+ /**
91
+ * Property schema
92
+ */
93
+ export interface PropertySchema {
94
+ /** Property type */
95
+ type: "string" | "number" | "boolean" | "array" | "object";
96
+ /** Property description */
97
+ description?: string;
98
+ /** Default value */
99
+ default?: any;
100
+ /** Enum values */
101
+ enum?: any[];
102
+ /** Array items schema */
103
+ items?: PropertySchema;
104
+ /** Object properties schema */
105
+ properties?: Record<string, PropertySchema>;
106
+ }
107
+ /**
108
+ * Plugin example
109
+ */
110
+ export interface PluginExample {
111
+ /** Example title */
112
+ title: string;
113
+ /** Example description */
114
+ description?: string;
115
+ /** Example code */
116
+ code: string;
117
+ /** Expected output description */
118
+ output?: string;
119
+ }
120
+ /**
121
+ * Plugin query for searching
122
+ */
123
+ export interface PluginQuery {
124
+ /** Search by keyword */
125
+ keyword?: string;
126
+ /** Filter by category */
127
+ category?: PluginCategory;
128
+ /** Filter by language support */
129
+ language?: string;
130
+ /** Filter by tags */
131
+ tags?: string[];
132
+ /** Filter by author */
133
+ author?: string;
134
+ /** Filter by capability */
135
+ capability?: string;
136
+ }
137
+ /**
138
+ * Conflict report
139
+ */
140
+ export interface ConflictReport {
141
+ /** Whether conflicts were found */
142
+ hasConflicts: boolean;
143
+ /** Conflict details */
144
+ conflicts: PluginConflict[];
145
+ }
146
+ /**
147
+ * Plugin conflict
148
+ */
149
+ export interface PluginConflict {
150
+ /** First plugin in conflict */
151
+ plugin1: string;
152
+ /** Second plugin in conflict */
153
+ plugin2: string;
154
+ /** Conflict reason */
155
+ reason: string;
156
+ /** Conflict severity */
157
+ severity: "error" | "warning";
158
+ }
159
+ /**
160
+ * Validation result
161
+ */
162
+ export interface ValidationResult {
163
+ /** Whether validation passed */
164
+ valid: boolean;
165
+ /** Validation errors */
166
+ errors: ValidationError[];
167
+ /** Validation warnings */
168
+ warnings: ValidationWarning[];
169
+ }
170
+ /**
171
+ * Validation error
172
+ */
173
+ export interface ValidationError {
174
+ /** Plugin ID */
175
+ plugin: string;
176
+ /** Error message */
177
+ message: string;
178
+ /** Error code */
179
+ code: string;
180
+ }
181
+ /**
182
+ * Validation warning
183
+ */
184
+ export interface ValidationWarning {
185
+ /** Plugin ID */
186
+ plugin: string;
187
+ /** Warning message */
188
+ message: string;
189
+ /** Warning code */
190
+ code: string;
191
+ }
192
+ /**
193
+ * Registry statistics
194
+ */
195
+ export interface RegistryStatistics {
196
+ /** Total number of plugins */
197
+ total: number;
198
+ /** Plugins by category */
199
+ byCategory: Record<PluginCategory, number>;
200
+ /** Plugins by language */
201
+ byLanguage: Record<string, number>;
202
+ /** Most popular tags */
203
+ topTags: Array<{
204
+ tag: string;
205
+ count: number;
206
+ }>;
207
+ }
208
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}