@tamyla/clodo-framework 1.0.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.
Files changed (130) hide show
  1. package/CHANGELOG.md +564 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1393 -0
  4. package/bin/README.md +71 -0
  5. package/bin/clodo-service.js +416 -0
  6. package/bin/security/security-cli.js +96 -0
  7. package/bin/service-management/README.md +74 -0
  8. package/bin/service-management/create-service.js +129 -0
  9. package/bin/service-management/init-service.js +102 -0
  10. package/bin/service-management/init-service.js.backup +889 -0
  11. package/bin/shared/config/customer-cli.js +293 -0
  12. package/dist/config/ConfigurationManager.js +159 -0
  13. package/dist/config/CustomerConfigCLI.js +220 -0
  14. package/dist/config/FeatureManager.js +426 -0
  15. package/dist/config/customers.js +441 -0
  16. package/dist/config/domains.js +180 -0
  17. package/dist/config/features.js +225 -0
  18. package/dist/config/index.js +6 -0
  19. package/dist/database/database-orchestrator.js +730 -0
  20. package/dist/database/index.js +4 -0
  21. package/dist/deployment/auditor.js +971 -0
  22. package/dist/deployment/index.js +10 -0
  23. package/dist/deployment/rollback-manager.js +523 -0
  24. package/dist/deployment/testers/api-tester.js +80 -0
  25. package/dist/deployment/testers/auth-tester.js +129 -0
  26. package/dist/deployment/testers/core.js +217 -0
  27. package/dist/deployment/testers/database-tester.js +105 -0
  28. package/dist/deployment/testers/index.js +74 -0
  29. package/dist/deployment/testers/load-tester.js +120 -0
  30. package/dist/deployment/testers/performance-tester.js +105 -0
  31. package/dist/deployment/validator.js +558 -0
  32. package/dist/deployment/wrangler-deployer.js +574 -0
  33. package/dist/handlers/GenericRouteHandler.js +532 -0
  34. package/dist/index.js +39 -0
  35. package/dist/migration/MigrationAdapters.js +562 -0
  36. package/dist/modules/ModuleManager.js +668 -0
  37. package/dist/modules/security.js +98 -0
  38. package/dist/orchestration/cross-domain-coordinator.js +1083 -0
  39. package/dist/orchestration/index.js +5 -0
  40. package/dist/orchestration/modules/DeploymentCoordinator.js +258 -0
  41. package/dist/orchestration/modules/DomainResolver.js +196 -0
  42. package/dist/orchestration/modules/StateManager.js +332 -0
  43. package/dist/orchestration/multi-domain-orchestrator.js +255 -0
  44. package/dist/routing/EnhancedRouter.js +158 -0
  45. package/dist/schema/SchemaManager.js +778 -0
  46. package/dist/security/ConfigurationValidator.js +490 -0
  47. package/dist/security/DeploymentManager.js +208 -0
  48. package/dist/security/SecretGenerator.js +142 -0
  49. package/dist/security/SecurityCLI.js +228 -0
  50. package/dist/security/index.js +51 -0
  51. package/dist/security/patterns/environment-rules.js +66 -0
  52. package/dist/security/patterns/insecure-patterns.js +21 -0
  53. package/dist/service-management/ConfirmationEngine.js +411 -0
  54. package/dist/service-management/ErrorTracker.js +294 -0
  55. package/dist/service-management/GenerationEngine.js +3109 -0
  56. package/dist/service-management/InputCollector.js +237 -0
  57. package/dist/service-management/ServiceCreator.js +229 -0
  58. package/dist/service-management/ServiceInitializer.js +448 -0
  59. package/dist/service-management/ServiceOrchestrator.js +638 -0
  60. package/dist/service-management/handlers/ConfigMutator.js +130 -0
  61. package/dist/service-management/handlers/ConfirmationHandler.js +71 -0
  62. package/dist/service-management/handlers/GenerationHandler.js +80 -0
  63. package/dist/service-management/handlers/InputHandler.js +59 -0
  64. package/dist/service-management/handlers/ValidationHandler.js +203 -0
  65. package/dist/service-management/index.js +7 -0
  66. package/dist/services/GenericDataService.js +488 -0
  67. package/dist/shared/cloudflare/domain-discovery.js +562 -0
  68. package/dist/shared/cloudflare/domain-manager.js +912 -0
  69. package/dist/shared/cloudflare/index.js +8 -0
  70. package/dist/shared/cloudflare/ops.js +387 -0
  71. package/dist/shared/config/cache.js +1167 -0
  72. package/dist/shared/config/command-config-manager.js +174 -0
  73. package/dist/shared/config/customer-cli.js +258 -0
  74. package/dist/shared/config/index.js +9 -0
  75. package/dist/shared/config/manager.js +289 -0
  76. package/dist/shared/database/connection-manager.js +338 -0
  77. package/dist/shared/database/index.js +7 -0
  78. package/dist/shared/database/orchestrator.js +632 -0
  79. package/dist/shared/deployment/auditor.js +971 -0
  80. package/dist/shared/deployment/index.js +10 -0
  81. package/dist/shared/deployment/rollback-manager.js +523 -0
  82. package/dist/shared/deployment/validator.js +558 -0
  83. package/dist/shared/index.js +32 -0
  84. package/dist/shared/monitoring/health-checker.js +250 -0
  85. package/dist/shared/monitoring/index.js +8 -0
  86. package/dist/shared/monitoring/memory-manager.js +382 -0
  87. package/dist/shared/monitoring/production-monitor.js +390 -0
  88. package/dist/shared/production-tester/api-tester.js +80 -0
  89. package/dist/shared/production-tester/auth-tester.js +129 -0
  90. package/dist/shared/production-tester/core.js +217 -0
  91. package/dist/shared/production-tester/database-tester.js +105 -0
  92. package/dist/shared/production-tester/index.js +74 -0
  93. package/dist/shared/production-tester/load-tester.js +120 -0
  94. package/dist/shared/production-tester/performance-tester.js +105 -0
  95. package/dist/shared/security/api-token-manager.js +296 -0
  96. package/dist/shared/security/index.js +8 -0
  97. package/dist/shared/security/secret-generator.js +918 -0
  98. package/dist/shared/security/secure-token-manager.js +379 -0
  99. package/dist/shared/utils/error-recovery.js +240 -0
  100. package/dist/shared/utils/graceful-shutdown-manager.js +380 -0
  101. package/dist/shared/utils/index.js +9 -0
  102. package/dist/shared/utils/interactive-prompts.js +134 -0
  103. package/dist/shared/utils/rate-limiter.js +249 -0
  104. package/dist/utils/ErrorHandler.js +173 -0
  105. package/dist/utils/deployment/config-cache.js +1160 -0
  106. package/dist/utils/deployment/index.js +6 -0
  107. package/dist/utils/deployment/interactive-prompts.js +97 -0
  108. package/dist/utils/deployment/secret-generator.js +896 -0
  109. package/dist/utils/dirname-helper.js +35 -0
  110. package/dist/utils/domain-config.js +159 -0
  111. package/dist/utils/error-recovery.js +240 -0
  112. package/dist/utils/esm-helper.js +52 -0
  113. package/dist/utils/framework-config.js +481 -0
  114. package/dist/utils/graceful-shutdown-manager.js +379 -0
  115. package/dist/utils/health-checker.js +114 -0
  116. package/dist/utils/index.js +36 -0
  117. package/dist/utils/prompt-handler.js +98 -0
  118. package/dist/utils/usage-tracker.js +252 -0
  119. package/dist/utils/validation.js +112 -0
  120. package/dist/version/VersionDetector.js +723 -0
  121. package/dist/worker/index.js +4 -0
  122. package/dist/worker/integration.js +332 -0
  123. package/docs/FRAMEWORK-ARCHITECTURE-OVERVIEW.md +206 -0
  124. package/docs/INTEGRATION_GUIDE.md +2045 -0
  125. package/docs/README.md +82 -0
  126. package/docs/SECURITY.md +242 -0
  127. package/docs/deployment/deployment-guide.md +540 -0
  128. package/docs/overview.md +280 -0
  129. package/package.json +176 -0
  130. package/types/index.d.ts +575 -0
@@ -0,0 +1,723 @@
1
+ /**
2
+ * Version Detection System for CLODO Framework
3
+ * Automatically detects framework versions and chooses appropriate implementations
4
+ */
5
+
6
+ import { featureManager, FEATURES } from '../config/FeatureManager.js';
7
+ import { MigrationFactory } from './MigrationAdapters.js';
8
+
9
+ /**
10
+ * Version Detection and Compatibility Manager
11
+ */
12
+ export class VersionDetector {
13
+ constructor() {
14
+ this.detectionCache = new Map();
15
+ this.compatibilityMatrix = new Map();
16
+ this.versionHistory = [];
17
+ this.currentVersion = null;
18
+ this._initializeCompatibilityMatrix();
19
+ this._detectCurrentVersion();
20
+ }
21
+
22
+ /**
23
+ * Detect the current framework version
24
+ * @returns {Object} Version information
25
+ */
26
+ detectVersion() {
27
+ if (this.currentVersion) {
28
+ return this.currentVersion;
29
+ }
30
+ const cacheKey = 'framework_version';
31
+ if (this.detectionCache.has(cacheKey)) {
32
+ return this.detectionCache.get(cacheKey);
33
+ }
34
+ const versionInfo = this._performVersionDetection();
35
+ this.detectionCache.set(cacheKey, versionInfo);
36
+ this.currentVersion = versionInfo;
37
+ return versionInfo;
38
+ }
39
+
40
+ /**
41
+ * Check compatibility between versions
42
+ * @param {string} sourceVersion - Source version
43
+ * @param {string} targetVersion - Target version
44
+ * @returns {Object} Compatibility information
45
+ */
46
+ checkCompatibility(sourceVersion, targetVersion) {
47
+ const compatKey = `${sourceVersion}->${targetVersion}`;
48
+ if (this.compatibilityMatrix.has(compatKey)) {
49
+ return this.compatibilityMatrix.get(compatKey);
50
+ }
51
+ const compatibility = this._calculateCompatibility(sourceVersion, targetVersion);
52
+ this.compatibilityMatrix.set(compatKey, compatibility);
53
+ return compatibility;
54
+ }
55
+
56
+ /**
57
+ * Get recommended implementation based on version and features
58
+ * @param {string} componentType - Type of component (schemaManager, dataService, etc.)
59
+ * @param {Object} options - Detection options
60
+ * @returns {Object} Implementation recommendation
61
+ */
62
+ getRecommendedImplementation(componentType, options = {}) {
63
+ const version = this.detectVersion();
64
+ const features = this._analyzeAvailableFeatures(componentType);
65
+ const userPreferences = this._getUserPreferences(options);
66
+ return {
67
+ componentType,
68
+ version: version.version,
69
+ implementation: this._selectImplementation(componentType, version, features, userPreferences),
70
+ features: features,
71
+ migrationPath: this._generateMigrationPath(componentType, version),
72
+ compatibility: this._getCompatibilityInfo(componentType, version)
73
+ };
74
+ }
75
+
76
+ /**
77
+ * Auto-configure framework based on detected environment
78
+ * @param {Object} overrides - Manual configuration overrides
79
+ * @returns {Object} Configuration result
80
+ */
81
+ autoConfigureFramework(overrides = {}) {
82
+ const version = this.detectVersion();
83
+ const environment = this._detectEnvironment();
84
+ const capabilities = this._detectCapabilities();
85
+ const configuration = {
86
+ version: version.version,
87
+ environment: environment.type,
88
+ capabilities: capabilities,
89
+ features: this._generateFeatureConfiguration(version, environment, capabilities),
90
+ components: this._generateComponentConfiguration(version, environment),
91
+ migration: this._generateMigrationConfiguration(version, environment)
92
+ };
93
+
94
+ // Apply overrides
95
+ if (overrides.features) {
96
+ Object.assign(configuration.features, overrides.features);
97
+ }
98
+
99
+ // Configure feature manager
100
+ this._applyFeatureConfiguration(configuration.features);
101
+ return configuration;
102
+ }
103
+
104
+ /**
105
+ * Create version-appropriate adapters
106
+ * @param {Object} components - Available components
107
+ * @returns {Object} Configured adapters
108
+ */
109
+ createVersionAdapters(components) {
110
+ const version = this.detectVersion();
111
+ const compatibility = this._getVersionCompatibility(version);
112
+ if (compatibility.requiresAdapters) {
113
+ return this._createCompatibilityAdapters(components, version);
114
+ }
115
+ return this._createDirectAdapters(components, version);
116
+ }
117
+
118
+ /**
119
+ * Generate migration strategy
120
+ * @param {string} targetVersion - Target version to migrate to
121
+ * @returns {Object} Migration strategy
122
+ */
123
+ generateMigrationStrategy(targetVersion) {
124
+ const currentVersion = this.detectVersion();
125
+ const compatibility = this.checkCompatibility(currentVersion.version, targetVersion);
126
+ return {
127
+ sourceVersion: currentVersion.version,
128
+ targetVersion: targetVersion,
129
+ compatibility: compatibility,
130
+ strategy: this._determineMigrationStrategy(currentVersion, targetVersion, compatibility),
131
+ phases: this._generateMigrationPhases(currentVersion, targetVersion),
132
+ risks: this._assessMigrationRisks(currentVersion, targetVersion),
133
+ timeline: this._estimateMigrationTimeline(currentVersion, targetVersion)
134
+ };
135
+ }
136
+
137
+ // Private methods
138
+
139
+ /**
140
+ * Initialize compatibility matrix with known version relationships
141
+ * @private
142
+ */
143
+ _initializeCompatibilityMatrix() {
144
+ const compatibilityRules = [
145
+ // Legacy to Enhanced (1.x -> 2.x)
146
+ {
147
+ source: '1.0.0',
148
+ target: '2.0.0',
149
+ compatible: true,
150
+ requiresAdapters: true,
151
+ breakingChanges: ['API signature changes', 'Configuration format changes'],
152
+ migrationComplexity: 'medium'
153
+ }, {
154
+ source: '1.1.0',
155
+ target: '2.0.0',
156
+ compatible: true,
157
+ requiresAdapters: true,
158
+ breakingChanges: ['Enhanced validation format'],
159
+ migrationComplexity: 'low'
160
+ },
161
+ // Enhanced versions (2.x series)
162
+ {
163
+ source: '2.0.0',
164
+ target: '2.1.0',
165
+ compatible: true,
166
+ requiresAdapters: false,
167
+ breakingChanges: [],
168
+ migrationComplexity: 'none'
169
+ }];
170
+ compatibilityRules.forEach(rule => {
171
+ const key = `${rule.source}->${rule.target}`;
172
+ this.compatibilityMatrix.set(key, rule);
173
+ });
174
+ }
175
+
176
+ /**
177
+ * Detect current framework version
178
+ * @private
179
+ */
180
+ _detectCurrentVersion() {
181
+ this.currentVersion = this._performVersionDetection();
182
+ }
183
+
184
+ /**
185
+ * Perform actual version detection
186
+ * @private
187
+ */
188
+ _performVersionDetection() {
189
+ const detectionMethods = [() => this._detectFromPackageJson(), () => this._detectFromModuleExports(), () => this._detectFromFeatureFlags(), () => this._detectFromAPISignatures(), () => this._detectFromFileStructure()];
190
+ let versionInfo = null;
191
+ for (const method of detectionMethods) {
192
+ try {
193
+ const result = method();
194
+ if (result && result.confidence > 0.5) {
195
+ versionInfo = result;
196
+ break;
197
+ }
198
+ } catch (error) {
199
+ // Continue with next detection method
200
+ continue;
201
+ }
202
+ }
203
+ if (!versionInfo) {
204
+ versionInfo = this._getDefaultVersionInfo();
205
+ }
206
+
207
+ // Add detection metadata
208
+ versionInfo.detectedAt = new Date().toISOString();
209
+ versionInfo.detectionMethod = versionInfo.method || 'default';
210
+ return versionInfo;
211
+ }
212
+
213
+ /**
214
+ * Detect version from package.json
215
+ * @private
216
+ */
217
+ _detectFromPackageJson() {
218
+ try {
219
+ // In a real implementation, this would read from actual package.json
220
+ // For now, we'll simulate detection
221
+ const packageVersion = '2.0.0'; // Simulated version
222
+
223
+ return {
224
+ version: packageVersion,
225
+ type: 'enhanced',
226
+ confidence: 0.9,
227
+ method: 'package.json',
228
+ features: ['caching', 'validation', 'security', 'metrics']
229
+ };
230
+ } catch {
231
+ return null;
232
+ }
233
+ }
234
+
235
+ /**
236
+ * Detect version from module exports
237
+ * @private
238
+ */
239
+ _detectFromModuleExports() {
240
+ try {
241
+ // Check for enhanced features in exports
242
+ const hasEnhancedFeatures = this._checkForEnhancedFeatures();
243
+ if (hasEnhancedFeatures) {
244
+ return {
245
+ version: '2.0.0',
246
+ type: 'enhanced',
247
+ confidence: 0.8,
248
+ method: 'module_exports',
249
+ features: this._detectAvailableFeatures()
250
+ };
251
+ } else {
252
+ return {
253
+ version: '1.0.0',
254
+ type: 'legacy',
255
+ confidence: 0.7,
256
+ method: 'module_exports',
257
+ features: ['basic_crud', 'simple_validation']
258
+ };
259
+ }
260
+ } catch {
261
+ return null;
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Detect version from feature flags
267
+ * @private
268
+ */
269
+ _detectFromFeatureFlags() {
270
+ try {
271
+ const hasFeatureManager = typeof featureManager !== 'undefined';
272
+ if (hasFeatureManager) {
273
+ const allFeatures = featureManager.getAllFeatures();
274
+ const enhancedFeatureCount = Object.keys(allFeatures).length;
275
+ return {
276
+ version: enhancedFeatureCount > 10 ? '2.0.0' : '1.1.0',
277
+ type: 'enhanced',
278
+ confidence: 0.85,
279
+ method: 'feature_flags',
280
+ features: Object.keys(allFeatures)
281
+ };
282
+ }
283
+ return null;
284
+ } catch {
285
+ return null;
286
+ }
287
+ }
288
+
289
+ /**
290
+ * Detect version from API signatures
291
+ * @private
292
+ */
293
+ _detectFromAPISignatures() {
294
+ try {
295
+ // Check for enhanced method signatures
296
+ const signatures = this._analyzeAPISignatures();
297
+ if (signatures.hasEnhancedSignatures) {
298
+ return {
299
+ version: '2.0.0',
300
+ type: 'enhanced',
301
+ confidence: 0.75,
302
+ method: 'api_signatures',
303
+ features: signatures.detectedFeatures
304
+ };
305
+ }
306
+ return {
307
+ version: '1.0.0',
308
+ type: 'legacy',
309
+ confidence: 0.6,
310
+ method: 'api_signatures',
311
+ features: ['basic_api']
312
+ };
313
+ } catch {
314
+ return null;
315
+ }
316
+ }
317
+
318
+ /**
319
+ * Detect version from file structure
320
+ * @private
321
+ */
322
+ _detectFromFileStructure() {
323
+ try {
324
+ // Check for enhanced framework structure
325
+ const hasEnhancedStructure = this._checkFileStructure();
326
+ return {
327
+ version: hasEnhancedStructure ? '2.0.0' : '1.0.0',
328
+ type: hasEnhancedStructure ? 'enhanced' : 'legacy',
329
+ confidence: 0.6,
330
+ method: 'file_structure',
331
+ features: hasEnhancedStructure ? ['enhanced_structure'] : ['basic_structure']
332
+ };
333
+ } catch {
334
+ return null;
335
+ }
336
+ }
337
+
338
+ /**
339
+ * Get default version info as fallback
340
+ * @private
341
+ */
342
+ _getDefaultVersionInfo() {
343
+ return {
344
+ version: '2.0.0',
345
+ type: 'enhanced',
346
+ confidence: 0.3,
347
+ method: 'default',
348
+ features: ['unknown'],
349
+ warning: 'Version detection failed, using default enhanced version'
350
+ };
351
+ }
352
+
353
+ /**
354
+ * Check for enhanced framework features
355
+ * @private
356
+ */
357
+ _checkForEnhancedFeatures() {
358
+ // Check for enhanced method signatures or capabilities
359
+ const enhancedIndicators = ['validateData', 'getCacheMetrics', 'executeHooks', 'generateMigrationPath'];
360
+
361
+ // In a real implementation, this would check actual exports
362
+ return enhancedIndicators.some(() => {
363
+ // Simulate checking for method existence
364
+ return true; // Assume enhanced features are available
365
+ });
366
+ }
367
+
368
+ /**
369
+ * Detect available features
370
+ * @private
371
+ */
372
+ _detectAvailableFeatures() {
373
+ const features = [];
374
+
375
+ // Check for caching capabilities
376
+ if (this._hasFeature('caching')) {
377
+ features.push('caching');
378
+ }
379
+
380
+ // Check for validation capabilities
381
+ if (this._hasFeature('validation')) {
382
+ features.push('validation');
383
+ }
384
+
385
+ // Check for security capabilities
386
+ if (this._hasFeature('security')) {
387
+ features.push('security');
388
+ }
389
+ return features;
390
+ }
391
+
392
+ /**
393
+ * Check if a specific feature is available
394
+ * @private
395
+ */
396
+ _hasFeature() {
397
+ // In a real implementation, this would test for actual feature availability
398
+ return true; // Assume features are available for now
399
+ }
400
+
401
+ /**
402
+ * Analyze API signatures for version detection
403
+ * @private
404
+ */
405
+ _analyzeAPISignatures() {
406
+ // Check method signatures for enhanced features
407
+ const enhancedMethods = ['validateData', 'getCacheMetrics', 'executeHooks'];
408
+ return {
409
+ hasEnhancedSignatures: true,
410
+ // Simulate detection
411
+ detectedFeatures: enhancedMethods
412
+ };
413
+ }
414
+
415
+ /**
416
+ * Check file structure for version indicators
417
+ * @private
418
+ */
419
+ _checkFileStructure() {
420
+ // Check for enhanced framework directory structure
421
+ // const enhancedPaths = [
422
+ // 'src/config/FeatureManager.js',
423
+ // 'src/migration/MigrationAdapters.js',
424
+ // 'src/monitoring/'
425
+ // ];
426
+
427
+ // In a real implementation, this would check actual file system
428
+ return true; // Assume enhanced structure
429
+ }
430
+
431
+ /**
432
+ * Calculate compatibility between versions
433
+ * @private
434
+ */
435
+ _calculateCompatibility(sourceVersion, targetVersion) {
436
+ const [sourceMajor, sourceMinor] = this._parseVersion(sourceVersion);
437
+ const [targetMajor, targetMinor] = this._parseVersion(targetVersion);
438
+ const majorDiff = Math.abs(targetMajor - sourceMajor);
439
+ const minorDiff = Math.abs(targetMinor - sourceMinor);
440
+ if (majorDiff > 1) {
441
+ return {
442
+ compatible: false,
443
+ requiresAdapters: false,
444
+ migrationComplexity: 'impossible',
445
+ breakingChanges: ['Major version incompatibility']
446
+ };
447
+ }
448
+ if (majorDiff === 1) {
449
+ return {
450
+ compatible: true,
451
+ requiresAdapters: true,
452
+ migrationComplexity: 'high',
453
+ breakingChanges: ['API changes', 'Configuration changes']
454
+ };
455
+ }
456
+ return {
457
+ compatible: true,
458
+ requiresAdapters: minorDiff > 0,
459
+ migrationComplexity: minorDiff > 0 ? 'low' : 'none',
460
+ breakingChanges: []
461
+ };
462
+ }
463
+
464
+ /**
465
+ * Parse version string
466
+ * @private
467
+ */
468
+ _parseVersion(versionString) {
469
+ const parts = versionString.split('.').map(Number);
470
+ return [parts[0] || 0, parts[1] || 0, parts[2] || 0];
471
+ }
472
+
473
+ /**
474
+ * Analyze available features for component type
475
+ * @private
476
+ */
477
+ _analyzeAvailableFeatures(componentType) {
478
+ const featureMap = {
479
+ schemaManager: [FEATURES.ENABLE_ENHANCED_SCHEMA, FEATURES.ENABLE_SCHEMA_CACHING, FEATURES.ENABLE_COMPREHENSIVE_VALIDATION],
480
+ dataService: [FEATURES.ENABLE_QUERY_CACHING, FEATURES.ENABLE_SECURITY_CONTROLS, FEATURES.ENABLE_ADVANCED_PAGINATION],
481
+ moduleManager: [FEATURES.ENABLE_ENHANCED_HOOKS, FEATURES.ENABLE_HOOK_TIMEOUT, FEATURES.ENABLE_HOOK_METRICS]
482
+ };
483
+ const componentFeatures = featureMap[componentType] || [];
484
+ return componentFeatures.map(feature => ({
485
+ name: feature,
486
+ enabled: featureManager.isEnabled(feature),
487
+ available: true
488
+ }));
489
+ }
490
+
491
+ /**
492
+ * Get user preferences from options
493
+ * @private
494
+ */
495
+ _getUserPreferences(options) {
496
+ return {
497
+ preferEnhanced: options.preferEnhanced ?? true,
498
+ enableMigration: options.enableMigration ?? true,
499
+ riskTolerance: options.riskTolerance || 'medium',
500
+ performanceFirst: options.performanceFirst ?? false
501
+ };
502
+ }
503
+
504
+ /**
505
+ * Select appropriate implementation
506
+ * @private
507
+ */
508
+ _selectImplementation(componentType, version, features, preferences) {
509
+ if (version.type === 'legacy' && preferences.preferEnhanced) {
510
+ return {
511
+ type: 'adapter',
512
+ reason: 'Legacy version with enhanced preference',
513
+ adapter: 'migration'
514
+ };
515
+ }
516
+ if (version.type === 'enhanced') {
517
+ return {
518
+ type: 'enhanced',
519
+ reason: 'Enhanced version available',
520
+ adapter: 'direct'
521
+ };
522
+ }
523
+ return {
524
+ type: 'legacy',
525
+ reason: 'Legacy version, no migration requested',
526
+ adapter: 'none'
527
+ };
528
+ }
529
+
530
+ /**
531
+ * Generate migration path for component
532
+ * @private
533
+ */
534
+ _generateMigrationPath(componentType, version) {
535
+ if (version.type === 'enhanced') {
536
+ return {
537
+ required: false,
538
+ steps: []
539
+ };
540
+ }
541
+ return {
542
+ required: true,
543
+ steps: ['Enable feature flags', 'Create migration adapters', 'Test compatibility', 'Gradual rollout']
544
+ };
545
+ }
546
+
547
+ /**
548
+ * Get compatibility information for component
549
+ * @private
550
+ */
551
+ _getCompatibilityInfo(componentType, version) {
552
+ return {
553
+ backwardCompatible: version.type === 'enhanced',
554
+ forwardCompatible: true,
555
+ adaptersRequired: version.type === 'legacy',
556
+ migrationPath: this._generateMigrationPath(componentType, version)
557
+ };
558
+ }
559
+
560
+ /**
561
+ * Detect environment information
562
+ * @private
563
+ */
564
+ _detectEnvironment() {
565
+ return {
566
+ type: 'cloudflare-worker',
567
+ runtime: 'v8',
568
+ capabilities: ['d1', 'kv', 'durable-objects'],
569
+ constraints: ['memory-limited', 'cpu-limited']
570
+ };
571
+ }
572
+
573
+ /**
574
+ * Detect runtime capabilities
575
+ * @private
576
+ */
577
+ _detectCapabilities() {
578
+ return {
579
+ database: ['d1'],
580
+ storage: ['kv'],
581
+ compute: ['isolates'],
582
+ networking: ['fetch'],
583
+ caching: ['cache-api'],
584
+ monitoring: ['analytics']
585
+ };
586
+ }
587
+
588
+ /**
589
+ * Generate feature configuration
590
+ * @private
591
+ */
592
+ _generateFeatureConfiguration(version, environment, capabilities) {
593
+ const config = {};
594
+
595
+ // Enable caching if supported
596
+ if (capabilities.caching.includes('cache-api')) {
597
+ config[FEATURES.ENABLE_QUERY_CACHING] = true;
598
+ config[FEATURES.ENABLE_SCHEMA_CACHING] = true;
599
+ }
600
+
601
+ // Enable security in production
602
+ if (environment.type !== 'development') {
603
+ config[FEATURES.ENABLE_SECURITY_CONTROLS] = true;
604
+ }
605
+
606
+ // Enable monitoring if available
607
+ if (capabilities.monitoring.includes('analytics')) {
608
+ config[FEATURES.ENABLE_PERFORMANCE_MONITORING] = true;
609
+ config[FEATURES.ENABLE_HOOK_METRICS] = true;
610
+ }
611
+ return config;
612
+ }
613
+
614
+ /**
615
+ * Generate component configuration
616
+ * @private
617
+ */
618
+ _generateComponentConfiguration(version, environment) {
619
+ return {
620
+ schemaManager: {
621
+ implementation: version.type === 'enhanced' ? 'enhanced' : 'legacy',
622
+ caching: environment.type !== 'development'
623
+ },
624
+ dataService: {
625
+ implementation: version.type === 'enhanced' ? 'enhanced' : 'legacy',
626
+ security: environment.type !== 'development'
627
+ },
628
+ moduleManager: {
629
+ implementation: version.type === 'enhanced' ? 'enhanced' : 'legacy',
630
+ metrics: environment.type !== 'development'
631
+ }
632
+ };
633
+ }
634
+
635
+ /**
636
+ * Generate migration configuration
637
+ * @private
638
+ */
639
+ _generateMigrationConfiguration(version, environment) {
640
+ return {
641
+ enabled: version.type === 'legacy',
642
+ strategy: version.type === 'legacy' ? 'gradual' : 'none',
643
+ phases: version.type === 'legacy' ? ['feature-flags', 'adapters', 'testing', 'rollout'] : []
644
+ };
645
+ }
646
+
647
+ /**
648
+ * Apply feature configuration to feature manager
649
+ * @private
650
+ */
651
+ _applyFeatureConfiguration(features) {
652
+ for (const [featureName, enabled] of Object.entries(features)) {
653
+ if (enabled) {
654
+ featureManager.enable(featureName, {
655
+ reason: 'Auto-configured by version detector'
656
+ });
657
+ } else {
658
+ featureManager.disable(featureName, {
659
+ reason: 'Auto-configured by version detector'
660
+ });
661
+ }
662
+ }
663
+ }
664
+
665
+ /**
666
+ * Get version compatibility information
667
+ * @private
668
+ */
669
+ _getVersionCompatibility(version) {
670
+ return {
671
+ requiresAdapters: version.type === 'legacy',
672
+ supportsMigration: true,
673
+ hasBreakingChanges: version.type === 'legacy'
674
+ };
675
+ }
676
+
677
+ /**
678
+ * Create compatibility adapters
679
+ * @private
680
+ */
681
+ _createCompatibilityAdapters(components, version) {
682
+ return MigrationFactory.createMigrationSuite(components, {} // Legacy components would be provided here if available
683
+ );
684
+ }
685
+
686
+ /**
687
+ * Create direct adapters (no compatibility needed)
688
+ * @private
689
+ */
690
+ _createDirectAdapters(components, version) {
691
+ return {
692
+ schemaManager: components.schemaManager,
693
+ dataService: components.dataService,
694
+ moduleManager: components.moduleManager,
695
+ direct: true,
696
+ version: version.version
697
+ };
698
+ }
699
+ }
700
+
701
+ // Export singleton instance
702
+ export const versionDetector = new VersionDetector();
703
+
704
+ /**
705
+ * Convenience function to auto-configure framework
706
+ */
707
+ export function autoConfigureFramework(overrides = {}) {
708
+ return versionDetector.autoConfigureFramework(overrides);
709
+ }
710
+
711
+ /**
712
+ * Convenience function to get version info
713
+ */
714
+ export function getFrameworkVersion() {
715
+ return versionDetector.detectVersion();
716
+ }
717
+
718
+ /**
719
+ * Convenience function to create adapters
720
+ */
721
+ export function createVersionAdapters(components) {
722
+ return versionDetector.createVersionAdapters(components);
723
+ }