@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,143 +0,0 @@
1
- import { BaseGenerator } from '../BaseGenerator.js';
2
- import { join } from 'path';
3
-
4
- /**
5
- * WorkerIndexGenerator
6
- *
7
- * Generates src/worker/index.js - the main Cloudflare Worker entry point.
8
- *
9
- * Responsibilities:
10
- * - Generate Worker fetch handler
11
- * - Import domain configuration, handlers, and middleware
12
- * - Set up request/response processing pipeline
13
- * - Implement error handling with structured error responses
14
- * - Include service metadata in error headers
15
- *
16
- * Output:
17
- * - src/worker/index.js (ES module with default export fetch handler)
18
- */
19
- export class WorkerIndexGenerator extends BaseGenerator {
20
- constructor(options = {}) {
21
- super({
22
- name: 'WorkerIndexGenerator',
23
- description: 'Generates Cloudflare Worker entry point in src/worker/index.js',
24
- outputPath: 'src/worker/index.js',
25
- ...options
26
- });
27
- }
28
-
29
- /**
30
- * Always generate worker index
31
- */
32
- shouldGenerate(context) {
33
- return true;
34
- }
35
-
36
- /**
37
- * Generate src/worker/index.js
38
- */
39
- async generate(context) {
40
- // Support both new structured format and legacy flat format
41
- const coreInputs = context.coreInputs || context;
42
- const confirmedValues = context.confirmedValues || context;
43
- const servicePath = context.servicePath || context.outputDir;
44
- this.setContext({
45
- coreInputs,
46
- confirmedValues,
47
- servicePath
48
- });
49
-
50
- // Build worker index content
51
- const content = this._buildWorkerIndex(coreInputs, confirmedValues);
52
-
53
- // Write file to src/worker/index.js
54
- await this.writeFile(join('src', 'worker', 'index.js'), content);
55
-
56
- // Return full path for backward compatibility
57
- return join(servicePath, 'src', 'worker', 'index.js');
58
- }
59
-
60
- /**
61
- * Build the complete worker index.js content
62
- */
63
- _buildWorkerIndex(coreInputs, confirmedValues) {
64
- return `/**
65
- * ${confirmedValues.displayName} - Cloudflare Worker
66
- *
67
- * Generated by Clodo Framework GenerationEngine
68
- * Service Type: ${coreInputs.serviceType}
69
- */
70
-
71
- import { domains } from '../config/domains.js';
72
- import { createServiceHandlers } from '../handlers/service-handlers.js';
73
- import { createServiceMiddleware } from '../middleware/service-middleware.js';
74
-
75
- export default {
76
- async fetch(request, env, ctx) {
77
- try {
78
- // Get service configuration
79
- const serviceConfig = domains['${coreInputs.serviceName}'];
80
-
81
- // Apply middleware
82
- const middleware = createServiceMiddleware(serviceConfig, env);
83
- const processedRequest = await middleware.processRequest(request);
84
-
85
- // Route to appropriate handler
86
- const handlers = createServiceHandlers(serviceConfig, env);
87
- const response = await handlers.handleRequest(processedRequest, ctx);
88
-
89
- // Apply response middleware
90
- return await middleware.processResponse(response);
91
-
92
- } catch (error) {
93
- console.error('Worker error:', error);
94
-
95
- return new Response(JSON.stringify({
96
- error: 'Internal Server Error',
97
- message: error.message,
98
- timestamp: new Date().toISOString()
99
- }), {
100
- status: 500,
101
- headers: {
102
- 'Content-Type': 'application/json',
103
- 'X-Service': '${coreInputs.serviceName}',
104
- 'X-Version': '${confirmedValues.version}'
105
- }
106
- });
107
- }
108
- }
109
- };
110
- `;
111
- }
112
-
113
- /**
114
- * Validate context has required fields
115
- */
116
- validateContext(context) {
117
- const coreInputs = context.coreInputs || context;
118
- const confirmedValues = context.confirmedValues || context;
119
- const required = [{
120
- field: 'serviceName',
121
- source: coreInputs
122
- }, {
123
- field: 'serviceType',
124
- source: coreInputs
125
- }, {
126
- field: 'displayName',
127
- source: confirmedValues
128
- }, {
129
- field: 'version',
130
- source: confirmedValues
131
- }];
132
- const missing = required.filter(({
133
- field,
134
- source
135
- }) => !source || !source[field]).map(({
136
- field
137
- }) => field);
138
- if (missing.length > 0) {
139
- throw new Error(`WorkerIndexGenerator: Missing required fields: ${missing.join(', ')}`);
140
- }
141
- return true;
142
- }
143
- }
@@ -1,101 +0,0 @@
1
- import { BaseGenerator } from '../BaseGenerator.js';
2
- import { join } from 'path';
3
-
4
- /**
5
- * DevelopmentEnvGenerator
6
- *
7
- * Generates config/development.env file for development environment.
8
- */
9
- export class DevelopmentEnvGenerator extends BaseGenerator {
10
- constructor(options = {}) {
11
- super({
12
- name: 'DevelopmentEnvGenerator',
13
- description: 'Generates development environment configuration',
14
- outputPath: 'config/development.env',
15
- ...options
16
- });
17
- }
18
- shouldGenerate(context) {
19
- return true;
20
- }
21
- async generate(context) {
22
- const coreInputs = context.coreInputs || context;
23
- const confirmedValues = context.confirmedValues || context;
24
- const servicePath = context.servicePath || context.outputDir;
25
- this.setContext({
26
- coreInputs,
27
- confirmedValues,
28
- servicePath
29
- });
30
- const content = `# Development Environment Configuration
31
- # Generated by Clodo Framework GenerationEngine
32
-
33
- # Service Configuration
34
- SERVICE_NAME=${coreInputs.serviceName}
35
- SERVICE_TYPE=${coreInputs.serviceType}
36
- ENVIRONMENT=development
37
-
38
- # URLs
39
- PRODUCTION_URL=${confirmedValues.productionUrl}
40
- STAGING_URL=${confirmedValues.stagingUrl}
41
- DEVELOPMENT_URL=${confirmedValues.developmentUrl}
42
-
43
- # Cloudflare Configuration
44
- CLOUDFLARE_ACCOUNT_ID=${coreInputs.cloudflareAccountId}
45
- CLOUDFLARE_ZONE_ID=${coreInputs.cloudflareZoneId}
46
-
47
- # Database
48
- DATABASE_NAME=${confirmedValues.databaseName}
49
-
50
- # Logging and Monitoring
51
- LOG_LEVEL=debug
52
- METRICS_ENABLED=false
53
- ERROR_REPORTING_ENABLED=false
54
-
55
- # Development settings
56
- DEBUG_MODE=true
57
- HOT_RELOAD=true
58
- `;
59
- await this.writeFile(join('config', 'development.env'), content);
60
- return join(servicePath, 'config', 'development.env');
61
- }
62
- validateContext(context) {
63
- const coreInputs = context.coreInputs || context;
64
- const confirmedValues = context.confirmedValues || context;
65
- const required = [{
66
- field: 'serviceName',
67
- source: coreInputs
68
- }, {
69
- field: 'serviceType',
70
- source: coreInputs
71
- }, {
72
- field: 'cloudflareAccountId',
73
- source: coreInputs
74
- }, {
75
- field: 'cloudflareZoneId',
76
- source: coreInputs
77
- }, {
78
- field: 'productionUrl',
79
- source: confirmedValues
80
- }, {
81
- field: 'stagingUrl',
82
- source: confirmedValues
83
- }, {
84
- field: 'developmentUrl',
85
- source: confirmedValues
86
- }, {
87
- field: 'databaseName',
88
- source: confirmedValues
89
- }];
90
- const missing = required.filter(({
91
- field,
92
- source
93
- }) => !source || !source[field]).map(({
94
- field
95
- }) => field);
96
- if (missing.length > 0) {
97
- throw new Error(`DevelopmentEnvGenerator: Missing required fields: ${missing.join(', ')}`);
98
- }
99
- return true;
100
- }
101
- }
@@ -1,175 +0,0 @@
1
- import { BaseGenerator } from '../BaseGenerator.js';
2
- import { join } from 'path';
3
-
4
- /**
5
- * DomainsConfigGenerator
6
- *
7
- * Generates src/config/domains.js configuration file.
8
- *
9
- * Responsibilities:
10
- * - Generate domain configuration using createDomainConfigSchema from framework
11
- * - Configure multi-environment URLs (production/staging/development)
12
- * - Configure database bindings
13
- * - Include service metadata and feature flags
14
- * - Support multi-service domain configuration
15
- *
16
- * Output:
17
- * - src/config/domains.js (ES module with domain configuration object)
18
- */
19
- export class DomainsConfigGenerator extends BaseGenerator {
20
- constructor(options = {}) {
21
- super({
22
- name: 'DomainsConfigGenerator',
23
- description: 'Generates domain configuration in src/config/domains.js',
24
- outputPath: 'src/config/domains.js',
25
- ...options
26
- });
27
- }
28
-
29
- /**
30
- * Always generate domains configuration
31
- */
32
- shouldGenerate(context) {
33
- return true;
34
- }
35
-
36
- /**
37
- * Generate domains.js configuration
38
- */
39
- async generate(context) {
40
- // Support both new structured format and legacy flat format
41
- const coreInputs = context.coreInputs || context;
42
- const confirmedValues = context.confirmedValues || context;
43
- const servicePath = context.servicePath || context.outputDir;
44
- this.setContext({
45
- coreInputs,
46
- confirmedValues,
47
- servicePath
48
- });
49
-
50
- // Build domains.js content
51
- const content = this._buildDomainsConfig(coreInputs, confirmedValues);
52
-
53
- // Write file to src/config/domains.js
54
- // Note: writeFile in BaseGenerator will join this with servicePath
55
- await this.writeFile(join('src', 'config', 'domains.js'), content);
56
-
57
- // Return full path for backward compatibility
58
- return join(servicePath, 'src', 'config', 'domains.js');
59
- }
60
-
61
- /**
62
- * Build the complete domains.js configuration content
63
- */
64
- _buildDomainsConfig(coreInputs, confirmedValues) {
65
- const timestamp = new Date().toISOString();
66
- return `import { createDomainConfigSchema } from '@tamyla/clodo-framework';
67
-
68
- /**
69
- * Domain configuration for ${confirmedValues.displayName}
70
- *
71
- * Generated by Clodo Framework GenerationEngine
72
- * Service Type: ${coreInputs.serviceType}
73
- * Generated: ${timestamp}
74
- */
75
-
76
- export const domains = {
77
- '${coreInputs.serviceName}': {
78
- ...createDomainConfigSchema(),
79
- name: '${coreInputs.serviceName}',
80
- displayName: '${confirmedValues.displayName}',
81
- description: '${confirmedValues.description}',
82
- accountId: '${coreInputs.cloudflareAccountId}',
83
- zoneId: '${coreInputs.cloudflareZoneId}',
84
- domains: {
85
- production: '${confirmedValues.productionUrl}',
86
- staging: '${confirmedValues.stagingUrl}',
87
- development: '${confirmedValues.developmentUrl}'
88
- },
89
- services: [
90
- '${coreInputs.serviceName}'
91
- ],
92
- databases: [
93
- {
94
- name: '${confirmedValues.databaseName}',
95
- type: 'd1',
96
- binding: 'DB'
97
- }
98
- ],
99
- features: ${JSON.stringify(confirmedValues.features, null, 4)},
100
- metadata: {
101
- version: '${confirmedValues.version}',
102
- author: '${confirmedValues.author}',
103
- generatedAt: '${timestamp}',
104
- frameworkVersion: '3.0.0',
105
- serviceType: '${coreInputs.serviceType}',
106
- environment: '${coreInputs.environment}'
107
- }
108
- }
109
- };
110
-
111
- export default domains;
112
- `;
113
- }
114
-
115
- /**
116
- * Validate context has required fields
117
- */
118
- validateContext(context) {
119
- const coreInputs = context.coreInputs || context;
120
- const confirmedValues = context.confirmedValues || context;
121
- const required = [{
122
- field: 'serviceName',
123
- source: coreInputs
124
- }, {
125
- field: 'serviceType',
126
- source: coreInputs
127
- }, {
128
- field: 'environment',
129
- source: coreInputs
130
- }, {
131
- field: 'cloudflareAccountId',
132
- source: coreInputs
133
- }, {
134
- field: 'cloudflareZoneId',
135
- source: coreInputs
136
- }, {
137
- field: 'displayName',
138
- source: confirmedValues
139
- }, {
140
- field: 'description',
141
- source: confirmedValues
142
- }, {
143
- field: 'productionUrl',
144
- source: confirmedValues
145
- }, {
146
- field: 'stagingUrl',
147
- source: confirmedValues
148
- }, {
149
- field: 'developmentUrl',
150
- source: confirmedValues
151
- }, {
152
- field: 'databaseName',
153
- source: confirmedValues
154
- }, {
155
- field: 'version',
156
- source: confirmedValues
157
- }, {
158
- field: 'author',
159
- source: confirmedValues
160
- }, {
161
- field: 'features',
162
- source: confirmedValues
163
- }];
164
- const missing = required.filter(({
165
- field,
166
- source
167
- }) => !source || source[field] === undefined).map(({
168
- field
169
- }) => field);
170
- if (missing.length > 0) {
171
- throw new Error(`DomainsConfigGenerator: Missing required fields: ${missing.join(', ')}`);
172
- }
173
- return true;
174
- }
175
- }
@@ -1,178 +0,0 @@
1
- import { BaseGenerator } from '../BaseGenerator.js';
2
- import { join } from 'path';
3
-
4
- /**
5
- * EnvExampleGenerator
6
- *
7
- * Generates .env.example file with environment variable templates.
8
- *
9
- * Responsibilities:
10
- * - Generate Cloudflare configuration variables (account/zone/token)
11
- * - Generate service configuration variables
12
- * - Generate environment-specific URLs
13
- * - Generate API configuration (base path, health check)
14
- * - Generate database configuration
15
- * - Generate feature flag variables
16
- * - Include placeholder comments for custom variables
17
- *
18
- * Output:
19
- * - .env.example (environment variable template file)
20
- */
21
- export class EnvExampleGenerator extends BaseGenerator {
22
- constructor(options = {}) {
23
- super({
24
- name: 'EnvExampleGenerator',
25
- description: 'Generates .env.example template file',
26
- outputPath: '.env.example',
27
- ...options
28
- });
29
- }
30
-
31
- /**
32
- * Always generate .env.example
33
- */
34
- shouldGenerate(context) {
35
- return true;
36
- }
37
-
38
- /**
39
- * Generate .env.example file
40
- */
41
- async generate(context) {
42
- // Support both new structured format and legacy flat format
43
- const coreInputs = context.coreInputs || context;
44
- const confirmedValues = context.confirmedValues || context;
45
- const servicePath = context.servicePath || context.outputDir;
46
- this.setContext({
47
- coreInputs,
48
- confirmedValues,
49
- servicePath
50
- });
51
-
52
- // Build .env.example content
53
- const content = this._buildEnvExample(coreInputs, confirmedValues);
54
-
55
- // Write file to root directory
56
- await this.writeFile('.env.example', content);
57
-
58
- // Return full path for backward compatibility
59
- return join(servicePath, '.env.example');
60
- }
61
-
62
- /**
63
- * Build the complete .env.example content
64
- */
65
- _buildEnvExample(coreInputs, confirmedValues) {
66
- const featureFlags = this._generateFeatureFlags(confirmedValues.features);
67
- return `# ${confirmedValues.displayName} Environment Variables
68
- # Generated by Clodo Framework GenerationEngine
69
-
70
- # Cloudflare Configuration
71
- CLOUDFLARE_ACCOUNT_ID=${coreInputs.cloudflareAccountId}
72
- CLOUDFLARE_ZONE_ID=${coreInputs.cloudflareZoneId}
73
- CLOUDFLARE_API_TOKEN=${coreInputs.cloudflareToken}
74
-
75
- # Service Configuration
76
- SERVICE_NAME=${coreInputs.serviceName}
77
- SERVICE_TYPE=${coreInputs.serviceType}
78
- DOMAIN_NAME=${coreInputs.domainName}
79
- ENVIRONMENT=${coreInputs.environment}
80
-
81
- # URLs
82
- PRODUCTION_URL=${confirmedValues.productionUrl}
83
- STAGING_URL=${confirmedValues.stagingUrl}
84
- DEVELOPMENT_URL=${confirmedValues.developmentUrl}
85
- DOCUMENTATION_URL=${confirmedValues.documentationUrl}
86
-
87
- # API Configuration
88
- API_BASE_PATH=${confirmedValues.apiBasePath}
89
- HEALTH_CHECK_PATH=${confirmedValues.healthCheckPath}
90
-
91
- # Database Configuration
92
- DATABASE_NAME=${confirmedValues.databaseName}
93
-
94
- # Feature Flags
95
- ${featureFlags}
96
-
97
- # Custom environment variables (uncomment and configure as needed)
98
- # CUSTOM_VAR=value
99
- # API_KEY=your-api-key-here
100
- # SECRET_KEY=your-secret-key-here
101
- `;
102
- }
103
-
104
- /**
105
- * Generate feature flags section
106
- */
107
- _generateFeatureFlags(features) {
108
- if (!features || typeof features !== 'object') {
109
- return '# No feature flags configured';
110
- }
111
- const flagEntries = Object.entries(features).filter(([, enabled]) => enabled).map(([feature]) => `FEATURE_${feature.toUpperCase()}=true`);
112
- return flagEntries.length > 0 ? flagEntries.join('\n') : '# No feature flags configured';
113
- }
114
-
115
- /**
116
- * Validate context has required fields
117
- */
118
- validateContext(context) {
119
- const coreInputs = context.coreInputs || context;
120
- const confirmedValues = context.confirmedValues || context;
121
- const required = [{
122
- field: 'cloudflareAccountId',
123
- source: coreInputs
124
- }, {
125
- field: 'cloudflareZoneId',
126
- source: coreInputs
127
- }, {
128
- field: 'cloudflareToken',
129
- source: coreInputs
130
- }, {
131
- field: 'serviceName',
132
- source: coreInputs
133
- }, {
134
- field: 'serviceType',
135
- source: coreInputs
136
- }, {
137
- field: 'domainName',
138
- source: coreInputs
139
- }, {
140
- field: 'environment',
141
- source: coreInputs
142
- }, {
143
- field: 'displayName',
144
- source: confirmedValues
145
- }, {
146
- field: 'productionUrl',
147
- source: confirmedValues
148
- }, {
149
- field: 'stagingUrl',
150
- source: confirmedValues
151
- }, {
152
- field: 'developmentUrl',
153
- source: confirmedValues
154
- }, {
155
- field: 'documentationUrl',
156
- source: confirmedValues
157
- }, {
158
- field: 'apiBasePath',
159
- source: confirmedValues
160
- }, {
161
- field: 'healthCheckPath',
162
- source: confirmedValues
163
- }, {
164
- field: 'databaseName',
165
- source: confirmedValues
166
- }];
167
- const missing = required.filter(({
168
- field,
169
- source
170
- }) => !source || !source[field]).map(({
171
- field
172
- }) => field);
173
- if (missing.length > 0) {
174
- throw new Error(`EnvExampleGenerator: Missing required fields: ${missing.join(', ')}`);
175
- }
176
- return true;
177
- }
178
- }
@@ -1,97 +0,0 @@
1
- import { BaseGenerator } from '../BaseGenerator.js';
2
- import { join } from 'path';
3
-
4
- /**
5
- * ProductionEnvGenerator
6
- *
7
- * Generates config/production.env file for production environment.
8
- */
9
- export class ProductionEnvGenerator extends BaseGenerator {
10
- constructor(options = {}) {
11
- super({
12
- name: 'ProductionEnvGenerator',
13
- description: 'Generates production environment configuration',
14
- outputPath: 'config/production.env',
15
- ...options
16
- });
17
- }
18
- shouldGenerate(context) {
19
- return true;
20
- }
21
- async generate(context) {
22
- const coreInputs = context.coreInputs || context;
23
- const confirmedValues = context.confirmedValues || context;
24
- const servicePath = context.servicePath || context.outputDir;
25
- this.setContext({
26
- coreInputs,
27
- confirmedValues,
28
- servicePath
29
- });
30
- const content = `# Production Environment Configuration
31
- # Generated by Clodo Framework GenerationEngine
32
-
33
- # Service Configuration
34
- SERVICE_NAME=${coreInputs.serviceName}
35
- SERVICE_TYPE=${coreInputs.serviceType}
36
- ENVIRONMENT=production
37
-
38
- # URLs
39
- PRODUCTION_URL=${confirmedValues.productionUrl}
40
- STAGING_URL=${confirmedValues.stagingUrl}
41
- DEVELOPMENT_URL=${confirmedValues.developmentUrl}
42
-
43
- # Cloudflare Configuration
44
- CLOUDFLARE_ACCOUNT_ID=${coreInputs.cloudflareAccountId}
45
- CLOUDFLARE_ZONE_ID=${coreInputs.cloudflareZoneId}
46
-
47
- # Database
48
- DATABASE_NAME=${confirmedValues.databaseName}
49
-
50
- # Logging and Monitoring
51
- LOG_LEVEL=warn
52
- METRICS_ENABLED=true
53
- ERROR_REPORTING_ENABLED=true
54
- `;
55
- await this.writeFile(join('config', 'production.env'), content);
56
- return join(servicePath, 'config', 'production.env');
57
- }
58
- validateContext(context) {
59
- const coreInputs = context.coreInputs || context;
60
- const confirmedValues = context.confirmedValues || context;
61
- const required = [{
62
- field: 'serviceName',
63
- source: coreInputs
64
- }, {
65
- field: 'serviceType',
66
- source: coreInputs
67
- }, {
68
- field: 'cloudflareAccountId',
69
- source: coreInputs
70
- }, {
71
- field: 'cloudflareZoneId',
72
- source: coreInputs
73
- }, {
74
- field: 'productionUrl',
75
- source: confirmedValues
76
- }, {
77
- field: 'stagingUrl',
78
- source: confirmedValues
79
- }, {
80
- field: 'developmentUrl',
81
- source: confirmedValues
82
- }, {
83
- field: 'databaseName',
84
- source: confirmedValues
85
- }];
86
- const missing = required.filter(({
87
- field,
88
- source
89
- }) => !source || !source[field]).map(({
90
- field
91
- }) => field);
92
- if (missing.length > 0) {
93
- throw new Error(`ProductionEnvGenerator: Missing required fields: ${missing.join(', ')}`);
94
- }
95
- return true;
96
- }
97
- }