@tamyla/clodo-framework 3.1.21 → 3.1.22

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 (169) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +53 -0
  3. package/dist/bin/clodo-service.js +47 -15
  4. package/dist/bin/commands/deploy.js +115 -83
  5. package/dist/bin/commands/helpers/deployment-ui.js +138 -0
  6. package/dist/bin/commands/helpers/deployment-verification.js +251 -0
  7. package/dist/bin/commands/helpers/error-recovery.js +80 -0
  8. package/dist/bin/commands/helpers/resource-detection.js +113 -0
  9. package/dist/bin/commands/validate.js +1 -1
  10. package/dist/bin/security/security-cli.js +1 -1
  11. package/dist/bin/shared/cache/configuration-cache.js +82 -0
  12. package/dist/bin/shared/cloudflare/domain-manager.js +1 -1
  13. package/dist/bin/shared/cloudflare/index.js +1 -1
  14. package/dist/bin/shared/cloudflare/ops.js +6 -4
  15. package/dist/bin/shared/config/ConfigurationManager.js +23 -1
  16. package/dist/bin/shared/config/command-config-manager.js +19 -3
  17. package/dist/bin/shared/config/index.js +1 -1
  18. package/dist/bin/shared/deployment/credential-collector.js +30 -7
  19. package/dist/bin/shared/deployment/index.js +2 -2
  20. package/dist/bin/shared/deployment/rollback-manager.js +4 -520
  21. package/dist/bin/shared/deployment/utilities/d1-error-recovery.js +177 -0
  22. package/dist/bin/shared/deployment/validator.js +40 -10
  23. package/dist/bin/shared/deployment/workflows/deployment-summary.js +214 -0
  24. package/dist/bin/shared/deployment/workflows/interactive-confirmation.js +188 -0
  25. package/dist/bin/shared/deployment/workflows/interactive-database-workflow.js +234 -0
  26. package/dist/bin/shared/deployment/workflows/interactive-domain-info-gatherer.js +240 -0
  27. package/dist/bin/shared/deployment/workflows/interactive-secret-workflow.js +228 -0
  28. package/dist/bin/shared/deployment/workflows/interactive-testing-workflow.js +235 -0
  29. package/dist/bin/shared/deployment/workflows/interactive-validation.js +218 -0
  30. package/dist/bin/shared/error-handling/error-classifier.js +46 -0
  31. package/dist/bin/shared/monitoring/health-checker.js +129 -1
  32. package/dist/bin/shared/monitoring/memory-manager.js +17 -6
  33. package/dist/bin/shared/routing/domain-router.js +1 -1
  34. package/dist/bin/shared/utils/deployment-validator.js +97 -0
  35. package/dist/bin/shared/utils/formatters.js +10 -0
  36. package/dist/bin/shared/utils/index.js +13 -1
  37. package/dist/bin/shared/utils/interactive-prompts.js +34 -18
  38. package/dist/bin/shared/utils/progress-manager.js +2 -2
  39. package/dist/bin/shared/utils/progress-spinner.js +53 -0
  40. package/dist/bin/shared/utils/sensitive-redactor.js +91 -0
  41. package/dist/bin/shared/validation/ValidationRegistry.js +1 -1
  42. package/dist/security/index.js +1 -1
  43. package/dist/security/patterns/insecure-patterns.js +1 -1
  44. package/dist/utils/constants.js +102 -0
  45. package/dist/utils/deployment/wrangler-config-manager.js +215 -48
  46. package/dist/utils/framework-config.js +2 -2
  47. package/dist/utils/interactive-prompts.js +10 -59
  48. package/package.json +16 -8
  49. package/dist/bin/clodo-service-old.js +0 -868
  50. package/dist/bin/clodo-service-test.js +0 -10
  51. package/dist/bin/commands/assess.js +0 -91
  52. package/dist/bin/commands/create.js +0 -77
  53. package/dist/bin/commands/diagnose.js +0 -83
  54. package/dist/bin/commands/helpers.js +0 -138
  55. package/dist/bin/commands/update.js +0 -75
  56. package/dist/bin/database/deployment-db-manager.js +0 -423
  57. package/dist/bin/database/enterprise-db-manager.js +0 -457
  58. package/dist/bin/database/wrangler-d1-manager.js +0 -685
  59. package/dist/bin/deployment/enterprise-deploy.js +0 -877
  60. package/dist/bin/deployment/master-deploy.js +0 -1376
  61. package/dist/bin/deployment/modular-enterprise-deploy.js +0 -466
  62. package/dist/bin/deployment/modules/DeploymentConfiguration.js +0 -395
  63. package/dist/bin/deployment/modules/DeploymentOrchestrator.js +0 -492
  64. package/dist/bin/deployment/modules/EnvironmentManager.js +0 -517
  65. package/dist/bin/deployment/modules/MonitoringIntegration.js +0 -560
  66. package/dist/bin/deployment/modules/ValidationManager.js +0 -342
  67. package/dist/bin/deployment/orchestration/BaseDeploymentOrchestrator.js +0 -426
  68. package/dist/bin/deployment/orchestration/EnterpriseOrchestrator.js +0 -401
  69. package/dist/bin/deployment/orchestration/PortfolioOrchestrator.js +0 -273
  70. package/dist/bin/deployment/orchestration/SingleServiceOrchestrator.js +0 -231
  71. package/dist/bin/deployment/orchestration/UnifiedDeploymentOrchestrator.js +0 -662
  72. package/dist/bin/deployment/test-interactive-utils.js +0 -66
  73. package/dist/bin/portfolio/portfolio-manager.js +0 -487
  74. package/dist/bin/service-management/create-service.js +0 -122
  75. package/dist/bin/service-management/init-service.js +0 -79
  76. package/dist/config/customers.js +0 -623
  77. package/dist/config/domains.js +0 -186
  78. package/dist/config/index.js +0 -6
  79. package/dist/database/database-orchestrator.js +0 -795
  80. package/dist/database/index.js +0 -4
  81. package/dist/deployment/index.js +0 -11
  82. package/dist/deployment/orchestration/BaseDeploymentOrchestrator.js +0 -426
  83. package/dist/deployment/orchestration/EnterpriseOrchestrator.js +0 -401
  84. package/dist/deployment/orchestration/PortfolioOrchestrator.js +0 -273
  85. package/dist/deployment/orchestration/SingleServiceOrchestrator.js +0 -231
  86. package/dist/deployment/orchestration/UnifiedDeploymentOrchestrator.js +0 -662
  87. package/dist/deployment/orchestration/index.js +0 -17
  88. package/dist/deployment/rollback-manager.js +0 -36
  89. package/dist/deployment/wrangler-deployer.js +0 -640
  90. package/dist/handlers/GenericRouteHandler.js +0 -532
  91. package/dist/migration/MigrationAdapters.js +0 -562
  92. package/dist/modules/ModuleManager.js +0 -668
  93. package/dist/modules/security.js +0 -96
  94. package/dist/orchestration/cross-domain-coordinator.js +0 -1083
  95. package/dist/orchestration/index.js +0 -5
  96. package/dist/orchestration/modules/DeploymentCoordinator.js +0 -368
  97. package/dist/orchestration/modules/DomainResolver.js +0 -198
  98. package/dist/orchestration/modules/StateManager.js +0 -332
  99. package/dist/orchestration/multi-domain-orchestrator.js +0 -724
  100. package/dist/routing/EnhancedRouter.js +0 -158
  101. package/dist/schema/SchemaManager.js +0 -778
  102. package/dist/service-management/ConfirmationEngine.js +0 -412
  103. package/dist/service-management/ErrorTracker.js +0 -299
  104. package/dist/service-management/GenerationEngine.js +0 -447
  105. package/dist/service-management/InputCollector.js +0 -619
  106. package/dist/service-management/ServiceCreator.js +0 -265
  107. package/dist/service-management/ServiceInitializer.js +0 -453
  108. package/dist/service-management/ServiceOrchestrator.js +0 -633
  109. package/dist/service-management/generators/BaseGenerator.js +0 -233
  110. package/dist/service-management/generators/GeneratorRegistry.js +0 -254
  111. package/dist/service-management/generators/cicd/CiWorkflowGenerator.js +0 -87
  112. package/dist/service-management/generators/cicd/DeployWorkflowGenerator.js +0 -106
  113. package/dist/service-management/generators/code/ServiceHandlersGenerator.js +0 -235
  114. package/dist/service-management/generators/code/ServiceMiddlewareGenerator.js +0 -116
  115. package/dist/service-management/generators/code/ServiceUtilsGenerator.js +0 -246
  116. package/dist/service-management/generators/code/WorkerIndexGenerator.js +0 -143
  117. package/dist/service-management/generators/config/DevelopmentEnvGenerator.js +0 -101
  118. package/dist/service-management/generators/config/DomainsConfigGenerator.js +0 -175
  119. package/dist/service-management/generators/config/EnvExampleGenerator.js +0 -178
  120. package/dist/service-management/generators/config/ProductionEnvGenerator.js +0 -97
  121. package/dist/service-management/generators/config/StagingEnvGenerator.js +0 -97
  122. package/dist/service-management/generators/config/WranglerTomlGenerator.js +0 -238
  123. package/dist/service-management/generators/core/PackageJsonGenerator.js +0 -243
  124. package/dist/service-management/generators/core/SiteConfigGenerator.js +0 -115
  125. package/dist/service-management/generators/documentation/ApiDocsGenerator.js +0 -331
  126. package/dist/service-management/generators/documentation/ConfigurationDocsGenerator.js +0 -294
  127. package/dist/service-management/generators/documentation/DeploymentDocsGenerator.js +0 -244
  128. package/dist/service-management/generators/documentation/ReadmeGenerator.js +0 -196
  129. package/dist/service-management/generators/schemas/ServiceSchemaGenerator.js +0 -190
  130. package/dist/service-management/generators/scripts/DeployScriptGenerator.js +0 -123
  131. package/dist/service-management/generators/scripts/HealthCheckScriptGenerator.js +0 -101
  132. package/dist/service-management/generators/scripts/SetupScriptGenerator.js +0 -88
  133. package/dist/service-management/generators/service-types/StaticSiteGenerator.js +0 -342
  134. package/dist/service-management/generators/testing/EslintConfigGenerator.js +0 -85
  135. package/dist/service-management/generators/testing/IntegrationTestsGenerator.js +0 -237
  136. package/dist/service-management/generators/testing/JestConfigGenerator.js +0 -72
  137. package/dist/service-management/generators/testing/UnitTestsGenerator.js +0 -277
  138. package/dist/service-management/generators/tooling/DockerComposeGenerator.js +0 -71
  139. package/dist/service-management/generators/tooling/GitignoreGenerator.js +0 -143
  140. package/dist/service-management/generators/utils/FileWriter.js +0 -179
  141. package/dist/service-management/generators/utils/PathResolver.js +0 -157
  142. package/dist/service-management/generators/utils/ServiceManifestGenerator.js +0 -111
  143. package/dist/service-management/generators/utils/TemplateEngine.js +0 -185
  144. package/dist/service-management/generators/utils/index.js +0 -18
  145. package/dist/service-management/handlers/ConfirmationHandler.js +0 -71
  146. package/dist/service-management/handlers/GenerationHandler.js +0 -80
  147. package/dist/service-management/handlers/InputHandler.js +0 -59
  148. package/dist/service-management/handlers/ValidationHandler.js +0 -203
  149. package/dist/service-management/index.js +0 -14
  150. package/dist/service-management/routing/DomainRouteMapper.js +0 -311
  151. package/dist/service-management/routing/RouteGenerator.js +0 -266
  152. package/dist/service-management/routing/WranglerRoutesBuilder.js +0 -273
  153. package/dist/service-management/routing/index.js +0 -14
  154. package/dist/service-management/services/DirectoryStructureService.js +0 -56
  155. package/dist/service-management/services/GenerationCoordinator.js +0 -208
  156. package/dist/service-management/services/GeneratorRegistry.js +0 -174
  157. package/dist/services/GenericDataService.js +0 -501
  158. package/dist/ui-structures/concepts/second-order-acquisition-strategy.md +0 -286
  159. package/dist/ui-structures/concepts/service-lifecycle-management.md +0 -150
  160. package/dist/ui-structures/concepts/service-manifest-guide.md +0 -309
  161. package/dist/ui-structures/concepts/three-tier-categorization-strategy.md +0 -231
  162. package/dist/ui-structures/creation/automated-generation-ui.json +0 -246
  163. package/dist/ui-structures/creation/core-inputs-ui.json +0 -217
  164. package/dist/ui-structures/creation/smart-confirmable-ui.json +0 -451
  165. package/dist/ui-structures/reference/absolutely-required-inputs.json +0 -315
  166. package/dist/ui-structures/reference/service-manifest-template.json +0 -342
  167. package/dist/version/VersionDetector.js +0 -723
  168. package/dist/worker/index.js +0 -4
  169. package/dist/worker/integration.js +0 -351
@@ -1,562 +0,0 @@
1
- /**
2
- * Migration Adapters for CLODO Framework
3
- * Maintains backwards compatibility while enabling enhanced features
4
- */
5
-
6
- import { featureManager, FEATURES } from '../config/FeatureManager.js';
7
-
8
- /**
9
- * Schema Manager Migration Adapter
10
- * Wraps enhanced SchemaManager to maintain legacy API compatibility
11
- */
12
- export class SchemaManagerAdapter {
13
- constructor(enhancedSchemaManager, legacySchemaManager = null) {
14
- this.enhanced = enhancedSchemaManager;
15
- this.legacy = legacySchemaManager;
16
- this.migrationState = {
17
- callCounts: new Map(),
18
- errorCounts: new Map(),
19
- performanceMetrics: new Map()
20
- };
21
- }
22
-
23
- /**
24
- * Validate data with progressive enhancement
25
- */
26
- validateData(tableName, data, options = {}) {
27
- return this._withMigrationLogging('validateData', () => {
28
- return featureManager.withFeature(FEATURES.ENABLE_COMPREHENSIVE_VALIDATION, () => {
29
- // Use enhanced validation with detailed error reporting
30
- return this.enhanced.validateData(tableName, data, {
31
- ...options,
32
- comprehensive: true,
33
- returnDetailedErrors: true
34
- });
35
- }, () => {
36
- // Fallback to basic validation
37
- if (this.legacy && this.legacy.validateData) {
38
- return this.legacy.validateData(tableName, data);
39
- }
40
- // Minimal compatibility validation
41
- return this._basicValidation(tableName, data);
42
- });
43
- });
44
- }
45
-
46
- /**
47
- * Generate SQL with optional caching
48
- */
49
- generateCreateSQL(tableName, options = {}) {
50
- return this._withMigrationLogging('generateCreateSQL', () => {
51
- return featureManager.withFeature(FEATURES.ENABLE_SQL_CACHING, () => {
52
- // Use cached SQL generation
53
- return this.enhanced.generateCreateSQL(tableName, {
54
- ...options,
55
- useCache: true
56
- });
57
- }, () => {
58
- // Direct SQL generation without caching
59
- if (this.legacy && this.legacy.generateCreateSQL) {
60
- return this.legacy.generateCreateSQL(tableName, options);
61
- }
62
- return this.enhanced.generateCreateSQL(tableName, {
63
- ...options,
64
- useCache: false
65
- });
66
- });
67
- });
68
- }
69
-
70
- /**
71
- * Get schema with optional caching
72
- */
73
- getSchema(tableName) {
74
- return this._withMigrationLogging('getSchema', () => {
75
- return featureManager.withFeature(FEATURES.ENABLE_SCHEMA_CACHING, () => this.enhanced.getSchema(tableName), () => {
76
- if (this.legacy && this.legacy.getSchema) {
77
- return this.legacy.getSchema(tableName);
78
- }
79
- return this.enhanced.getSchemaFromConfig(tableName);
80
- });
81
- });
82
- }
83
-
84
- /**
85
- * Add table with validation
86
- */
87
- addTable(tableName, schema, options = {}) {
88
- return this._withMigrationLogging('addTable', () => {
89
- const enhancedOptions = {
90
- ...options,
91
- validateSchema: featureManager.isEnabled(FEATURES.ENABLE_ENHANCED_SCHEMA),
92
- enableCaching: featureManager.isEnabled(FEATURES.ENABLE_SCHEMA_CACHING)
93
- };
94
- if (this.enhanced.addTable) {
95
- return this.enhanced.addTable(tableName, schema, enhancedOptions);
96
- }
97
-
98
- // Fallback implementation
99
- if (this.legacy && this.legacy.addTable) {
100
- return this.legacy.addTable(tableName, schema, options);
101
- }
102
- throw new Error('No implementation available for addTable');
103
- });
104
- }
105
-
106
- /**
107
- * Get migration statistics
108
- */
109
- getMigrationStats() {
110
- return {
111
- callCounts: Object.fromEntries(this.migrationState.callCounts),
112
- errorCounts: Object.fromEntries(this.migrationState.errorCounts),
113
- performanceMetrics: Object.fromEntries(this.migrationState.performanceMetrics),
114
- featureUsage: this._getFeatureUsageStats()
115
- };
116
- }
117
-
118
- // Private methods
119
-
120
- _withMigrationLogging(methodName, callback) {
121
- const startTime = Date.now();
122
- this.migrationState.callCounts.set(methodName, (this.migrationState.callCounts.get(methodName) || 0) + 1);
123
- try {
124
- const result = callback();
125
- this._recordPerformance(methodName, Date.now() - startTime);
126
- return result;
127
- } catch (error) {
128
- this.migrationState.errorCounts.set(methodName, (this.migrationState.errorCounts.get(methodName) || 0) + 1);
129
- if (featureManager.isEnabled(FEATURES.ENABLE_DEBUG_LOGGING)) {
130
- console.error(`Migration adapter error in ${methodName}:`, error);
131
- }
132
- throw error;
133
- }
134
- }
135
- _recordPerformance(methodName, duration) {
136
- const existing = this.migrationState.performanceMetrics.get(methodName) || {
137
- totalTime: 0,
138
- callCount: 0,
139
- averageTime: 0
140
- };
141
- existing.totalTime += duration;
142
- existing.callCount += 1;
143
- existing.averageTime = existing.totalTime / existing.callCount;
144
- this.migrationState.performanceMetrics.set(methodName, existing);
145
- }
146
- _basicValidation(tableName, data) {
147
- // Basic validation fallback
148
- const schema = this.enhanced.getSchemaFromConfig(tableName);
149
- if (!schema) {
150
- return {
151
- isValid: false,
152
- errors: ['Schema not found']
153
- };
154
- }
155
- const errors = [];
156
- for (const [fieldName, fieldConfig] of Object.entries(schema.fields || {})) {
157
- if (fieldConfig.required && (data[fieldName] === undefined || data[fieldName] === null)) {
158
- errors.push(`Field '${fieldName}' is required`);
159
- }
160
- }
161
- return {
162
- isValid: errors.length === 0,
163
- errors
164
- };
165
- }
166
- _getFeatureUsageStats() {
167
- const features = {};
168
- const allFeatures = featureManager.getAllFeatures();
169
- for (const [featureName, featureInfo] of Object.entries(allFeatures)) {
170
- if (featureName.startsWith('ENABLE_SCHEMA') || featureName.startsWith('ENABLE_COMPREHENSIVE')) {
171
- features[featureName] = featureInfo.enabled;
172
- }
173
- }
174
- return features;
175
- }
176
- }
177
-
178
- /**
179
- * Generic Data Service Migration Adapter
180
- * Wraps enhanced GenericDataService for compatibility
181
- */
182
- export class DataServiceAdapter {
183
- constructor(enhancedDataService, legacyDataService = null) {
184
- this.enhanced = enhancedDataService;
185
- this.legacy = legacyDataService;
186
- this.migrationState = {
187
- callCounts: new Map(),
188
- cacheHitRates: new Map(),
189
- performanceGains: new Map()
190
- };
191
- }
192
-
193
- /**
194
- * Create with optional security and validation
195
- */
196
- async create(tableName, data, options = {}) {
197
- return this._withAsyncMigrationLogging('create', async () => {
198
- return featureManager.withFeature(FEATURES.ENABLE_SECURITY_CONTROLS, async () => {
199
- return await this.enhanced.create(tableName, data, {
200
- ...options,
201
- validateSecurity: true,
202
- auditAction: true
203
- });
204
- }, async () => {
205
- if (this.legacy && this.legacy.create) {
206
- return await this.legacy.create(tableName, data, options);
207
- }
208
- return await this.enhanced.create(tableName, data, {
209
- ...options,
210
- validateSecurity: false,
211
- auditAction: false
212
- });
213
- });
214
- });
215
- }
216
-
217
- /**
218
- * Read with optional caching and pagination
219
- */
220
- async read(tableName, id, options = {}) {
221
- return this._withAsyncMigrationLogging('read', async () => {
222
- return featureManager.withFeature(FEATURES.ENABLE_QUERY_CACHING, async () => {
223
- return await this.enhanced.read(tableName, id, {
224
- ...options,
225
- useCache: true
226
- });
227
- }, async () => {
228
- if (this.legacy && this.legacy.read) {
229
- return await this.legacy.read(tableName, id, options);
230
- }
231
- return await this.enhanced.readDirect(tableName, id, options);
232
- });
233
- });
234
- }
235
-
236
- /**
237
- * Update with optional validation and security
238
- */
239
- async update(tableName, id, data, options = {}) {
240
- return this._withAsyncMigrationLogging('update', async () => {
241
- const enhancedOptions = {
242
- ...options,
243
- validateSecurity: featureManager.isEnabled(FEATURES.ENABLE_SECURITY_CONTROLS),
244
- invalidateCache: featureManager.isEnabled(FEATURES.ENABLE_QUERY_CACHING)
245
- };
246
- if (this.enhanced.update) {
247
- return await this.enhanced.update(tableName, id, data, enhancedOptions);
248
- }
249
- if (this.legacy && this.legacy.update) {
250
- return await this.legacy.update(tableName, id, data, options);
251
- }
252
- throw new Error('No implementation available for update');
253
- });
254
- }
255
-
256
- /**
257
- * Delete with optional security and cleanup
258
- */
259
- async delete(tableName, id, options = {}) {
260
- return this._withAsyncMigrationLogging('delete', async () => {
261
- return featureManager.withFeature(FEATURES.ENABLE_SECURITY_CONTROLS, async () => {
262
- return await this.enhanced.delete(tableName, id, {
263
- ...options,
264
- validateSecurity: true,
265
- auditAction: true,
266
- cascadeDelete: options.cascade || false
267
- });
268
- }, async () => {
269
- if (this.legacy && this.legacy.delete) {
270
- return await this.legacy.delete(tableName, id, options);
271
- }
272
- return await this.enhanced.deleteDirect(tableName, id, options);
273
- });
274
- });
275
- }
276
-
277
- /**
278
- * List with optional advanced pagination
279
- */
280
- async list(tableName, options = {}) {
281
- return this._withAsyncMigrationLogging('list', async () => {
282
- return featureManager.withFeature(FEATURES.ENABLE_ADVANCED_PAGINATION, async () => {
283
- return await this.enhanced.list(tableName, {
284
- ...options,
285
- advancedPagination: true,
286
- includeMetadata: true
287
- });
288
- }, async () => {
289
- if (this.legacy && this.legacy.list) {
290
- return await this.legacy.list(tableName, options);
291
- }
292
- return await this.enhanced.listBasic(tableName, options);
293
- });
294
- });
295
- }
296
-
297
- /**
298
- * Get cache statistics for monitoring
299
- */
300
- getCacheStats() {
301
- if (featureManager.isEnabled(FEATURES.ENABLE_CACHE_METRICS)) {
302
- return this.enhanced.getCacheMetrics();
303
- }
304
- return {
305
- message: 'Cache metrics not enabled'
306
- };
307
- }
308
-
309
- /**
310
- * Get migration progress and statistics
311
- */
312
- getMigrationStats() {
313
- return {
314
- callCounts: Object.fromEntries(this.migrationState.callCounts),
315
- cacheHitRates: Object.fromEntries(this.migrationState.cacheHitRates),
316
- performanceGains: Object.fromEntries(this.migrationState.performanceGains),
317
- featureUsage: this._getFeatureUsageStats()
318
- };
319
- }
320
-
321
- // Private methods
322
-
323
- async _withAsyncMigrationLogging(methodName, callback) {
324
- const startTime = Date.now();
325
- this.migrationState.callCounts.set(methodName, (this.migrationState.callCounts.get(methodName) || 0) + 1);
326
- try {
327
- const result = await callback();
328
- const duration = Date.now() - startTime;
329
- this._recordPerformanceGain(methodName, duration);
330
- return result;
331
- } catch (error) {
332
- if (featureManager.isEnabled(FEATURES.ENABLE_DEBUG_LOGGING)) {
333
- console.error(`Data service migration adapter error in ${methodName}:`, error);
334
- }
335
- throw error;
336
- }
337
- }
338
- _recordPerformanceGain(methodName, duration) {
339
- // Record whether enhanced features provided performance benefits
340
- const usesCaching = featureManager.isEnabled(FEATURES.ENABLE_QUERY_CACHING);
341
- const existing = this.migrationState.performanceGains.get(methodName) || {
342
- cachedCalls: 0,
343
- uncachedCalls: 0,
344
- averageCachedTime: 0,
345
- averageUncachedTime: 0
346
- };
347
- if (usesCaching && (methodName === 'read' || methodName === 'list')) {
348
- existing.cachedCalls += 1;
349
- existing.averageCachedTime = (existing.averageCachedTime + duration) / existing.cachedCalls;
350
- } else {
351
- existing.uncachedCalls += 1;
352
- existing.averageUncachedTime = (existing.averageUncachedTime + duration) / existing.uncachedCalls;
353
- }
354
- this.migrationState.performanceGains.set(methodName, existing);
355
- }
356
- _getFeatureUsageStats() {
357
- const features = {};
358
- const allFeatures = featureManager.getAllFeatures();
359
- for (const [featureName, featureInfo] of Object.entries(allFeatures)) {
360
- if (featureName.includes('QUERY_CACHING') || featureName.includes('SECURITY') || featureName.includes('PAGINATION')) {
361
- features[featureName] = featureInfo.enabled;
362
- }
363
- }
364
- return features;
365
- }
366
- }
367
-
368
- /**
369
- * Module Manager Migration Adapter
370
- * Wraps enhanced ModuleManager for compatibility
371
- */
372
- export class ModuleManagerAdapter {
373
- constructor(enhancedModuleManager, legacyModuleManager = null) {
374
- this.enhanced = enhancedModuleManager;
375
- this.legacy = legacyModuleManager;
376
- this.migrationState = {
377
- hookExecutions: new Map(),
378
- timeoutEvents: new Map(),
379
- performanceMetrics: new Map()
380
- };
381
- }
382
-
383
- /**
384
- * Register module with optional enhanced features
385
- */
386
- async registerModule(name, module, options = {}) {
387
- return this._withAsyncMigrationLogging('registerModule', async () => {
388
- const enhancedOptions = {
389
- ...options,
390
- enableMetrics: featureManager.isEnabled(FEATURES.ENABLE_HOOK_METRICS),
391
- enableTimeout: featureManager.isEnabled(FEATURES.ENABLE_HOOK_TIMEOUT)
392
- };
393
- if (this.enhanced.registerModule) {
394
- return await this.enhanced.registerModule(name, module, enhancedOptions);
395
- }
396
- if (this.legacy && this.legacy.registerModule) {
397
- return await this.legacy.registerModule(name, module, options);
398
- }
399
- throw new Error('No implementation available for registerModule');
400
- });
401
- }
402
-
403
- /**
404
- * Execute hooks with optional enhancements
405
- */
406
- async executeHooks(hookName, context = {}) {
407
- return this._withAsyncMigrationLogging('executeHooks', async () => {
408
- return featureManager.withFeature(FEATURES.ENABLE_ENHANCED_HOOKS, async () => {
409
- return await this.enhanced.executeHooks(hookName, context, {
410
- enableTimeout: featureManager.isEnabled(FEATURES.ENABLE_HOOK_TIMEOUT),
411
- enableMetrics: featureManager.isEnabled(FEATURES.ENABLE_HOOK_METRICS),
412
- parallelExecution: featureManager.isEnabled(FEATURES.ENABLE_PARALLEL_EXECUTION)
413
- });
414
- }, async () => {
415
- if (this.legacy && this.legacy.executeHooks) {
416
- return await this.legacy.executeHooks(hookName, context);
417
- }
418
- return await this.enhanced.executeHooksBasic(hookName, context);
419
- });
420
- });
421
- }
422
-
423
- /**
424
- * Get hook metrics if available
425
- */
426
- getHookMetrics() {
427
- return featureManager.withFeature(FEATURES.ENABLE_HOOK_METRICS, () => this.enhanced.getMetrics(), () => ({
428
- message: 'Hook metrics not enabled'
429
- }));
430
- }
431
-
432
- /**
433
- * Get migration statistics
434
- */
435
- getMigrationStats() {
436
- return {
437
- hookExecutions: Object.fromEntries(this.migrationState.hookExecutions),
438
- timeoutEvents: Object.fromEntries(this.migrationState.timeoutEvents),
439
- performanceMetrics: Object.fromEntries(this.migrationState.performanceMetrics),
440
- featureUsage: this._getFeatureUsageStats()
441
- };
442
- }
443
-
444
- // Private methods
445
-
446
- async _withAsyncMigrationLogging(methodName, callback) {
447
- const startTime = Date.now();
448
- this.migrationState.hookExecutions.set(methodName, (this.migrationState.hookExecutions.get(methodName) || 0) + 1);
449
- try {
450
- const result = await callback();
451
- this._recordMetrics(methodName, Date.now() - startTime);
452
- return result;
453
- } catch (error) {
454
- if (error.name === 'TimeoutError') {
455
- this.migrationState.timeoutEvents.set(methodName, (this.migrationState.timeoutEvents.get(methodName) || 0) + 1);
456
- }
457
- if (featureManager.isEnabled(FEATURES.ENABLE_DEBUG_LOGGING)) {
458
- console.error(`Module manager migration adapter error in ${methodName}:`, error);
459
- }
460
- throw error;
461
- }
462
- }
463
- _recordMetrics(methodName, duration) {
464
- const existing = this.migrationState.performanceMetrics.get(methodName) || {
465
- totalTime: 0,
466
- callCount: 0,
467
- averageTime: 0,
468
- enhancedFeatureUsage: 0
469
- };
470
- existing.totalTime += duration;
471
- existing.callCount += 1;
472
- existing.averageTime = existing.totalTime / existing.callCount;
473
- if (featureManager.isEnabled(FEATURES.ENABLE_ENHANCED_HOOKS)) {
474
- existing.enhancedFeatureUsage += 1;
475
- }
476
- this.migrationState.performanceMetrics.set(methodName, existing);
477
- }
478
- _getFeatureUsageStats() {
479
- const features = {};
480
- const allFeatures = featureManager.getAllFeatures();
481
- for (const [featureName, featureInfo] of Object.entries(allFeatures)) {
482
- if (featureName.includes('HOOK') || featureName.includes('PARALLEL')) {
483
- features[featureName] = featureInfo.enabled;
484
- }
485
- }
486
- return features;
487
- }
488
- }
489
-
490
- /**
491
- * Migration Factory
492
- * Creates appropriate adapters for different components
493
- */
494
- export class MigrationFactory {
495
- static createSchemaManagerAdapter(enhanced, legacy = null) {
496
- return new SchemaManagerAdapter(enhanced, legacy);
497
- }
498
- static createDataServiceAdapter(enhanced, legacy = null) {
499
- return new DataServiceAdapter(enhanced, legacy);
500
- }
501
- static createModuleManagerAdapter(enhanced, legacy = null) {
502
- return new ModuleManagerAdapter(enhanced, legacy);
503
- }
504
-
505
- /**
506
- * Create a complete migration suite
507
- */
508
- static createMigrationSuite(enhancedComponents, legacyComponents = {}) {
509
- return {
510
- schemaManager: this.createSchemaManagerAdapter(enhancedComponents.schemaManager, legacyComponents.schemaManager),
511
- dataService: this.createDataServiceAdapter(enhancedComponents.dataService, legacyComponents.dataService),
512
- moduleManager: this.createModuleManagerAdapter(enhancedComponents.moduleManager, legacyComponents.moduleManager),
513
- /**
514
- * Get comprehensive migration statistics
515
- */
516
- getMigrationStats() {
517
- return {
518
- schemaManager: this.schemaManager.getMigrationStats(),
519
- dataService: this.dataService.getMigrationStats(),
520
- moduleManager: this.moduleManager.getMigrationStats(),
521
- overallFeatureUsage: featureManager.getAllFeatures()
522
- };
523
- },
524
- /**
525
- * Generate migration report
526
- */
527
- generateMigrationReport() {
528
- const stats = this.getMigrationStats();
529
- return {
530
- summary: {
531
- totalCalls: Object.values(stats.schemaManager.callCounts).reduce((a, b) => a + b, 0) + Object.values(stats.dataService.callCounts).reduce((a, b) => a + b, 0) + Object.values(stats.moduleManager.hookExecutions).reduce((a, b) => a + b, 0),
532
- featuresEnabled: Object.values(stats.overallFeatureUsage).filter(f => f.enabled).length,
533
- totalFeatures: Object.keys(stats.overallFeatureUsage).length
534
- },
535
- details: stats,
536
- recommendations: this._generateRecommendations(stats)
537
- };
538
- },
539
- _generateRecommendations(stats) {
540
- const recommendations = [];
541
-
542
- // Check cache usage
543
- if (stats.dataService.cacheHitRates && Object.keys(stats.dataService.cacheHitRates).length === 0) {
544
- recommendations.push('Consider enabling query caching for better performance');
545
- }
546
-
547
- // Check hook timeouts
548
- if (stats.moduleManager.timeoutEvents && Object.values(stats.moduleManager.timeoutEvents).some(count => count > 0)) {
549
- recommendations.push('Review hook timeout configurations - some hooks are timing out');
550
- }
551
-
552
- // Check feature adoption
553
- const enabledFeatures = Object.values(stats.overallFeatureUsage).filter(f => f.enabled).length;
554
- const totalFeatures = Object.keys(stats.overallFeatureUsage).length;
555
- if (enabledFeatures < totalFeatures * 0.5) {
556
- recommendations.push('Consider enabling more enhanced features for better functionality');
557
- }
558
- return recommendations;
559
- }
560
- };
561
- }
562
- }