@tamyla/clodo-framework 3.0.3 → 3.0.5

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [3.0.5](https://github.com/tamylaa/clodo-framework/compare/v3.0.4...v3.0.5) (2025-10-14)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * add missing join import in clodo-service.js ([5e0d7c6](https://github.com/tamylaa/clodo-framework/commit/5e0d7c6ce3262454138f39b4e44d0d24dc7bcb65))
7
+
8
+ ## [3.0.4](https://github.com/tamylaa/clodo-framework/compare/v3.0.3...v3.0.4) (2025-10-14)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * resolve deployment configuration and database binding issues ([f9d7036](https://github.com/tamylaa/clodo-framework/commit/f9d7036e18b49ba9082cad8f8e181f5abc1c2c2d))
14
+
1
15
  ## [3.0.3](https://github.com/tamylaa/clodo-framework/compare/v3.0.2...v3.0.3) (2025-10-14)
2
16
 
3
17
 
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  /**
4
4
  * Clodo Framework - Unified Three-Tier Service Management CLI
@@ -15,6 +15,7 @@
15
15
  import { Command } from 'commander';
16
16
  import { createInterface } from 'readline';
17
17
  import chalk from 'chalk';
18
+ import { join } from 'path';
18
19
  import { ServiceOrchestrator } from '../dist/service-management/ServiceOrchestrator.js';
19
20
  import { InputCollector } from '../dist/service-management/InputCollector.js';
20
21
 
@@ -436,7 +437,9 @@ program
436
437
  console.log(chalk.white('Using Three-Tier Input Architecture\n'));
437
438
 
438
439
  const isInteractive = options.interactive && !options.nonInteractive;
439
- const configManager = new UnifiedConfigManager();
440
+ const configManager = new UnifiedConfigManager({
441
+ configDir: join(process.cwd(), 'config', 'customers')
442
+ });
440
443
  const inputCollector = new InputCollector({ interactive: isInteractive });
441
444
  const confirmationHandler = new ConfirmationHandler({ interactive: isInteractive });
442
445
 
@@ -398,7 +398,7 @@ export class DatabaseOrchestrator {
398
398
  // Use BINDING name (not database name) for wrangler command
399
399
  const command = this.buildMigrationCommand(bindingName, environment, isRemote);
400
400
  console.log(` 📋 Migration command: ${command}`);
401
- const output = await this.executeWithRetry(command, 120000); // 2 minute timeout
401
+ const output = await this.executeWithRetry(command, 120000, this.projectRoot); // 2 minute timeout
402
402
 
403
403
  // Parse migration output
404
404
  const migrationsApplied = this.parseMigrationOutput(output);
@@ -504,7 +504,7 @@ export class DatabaseOrchestrator {
504
504
  try {
505
505
  const isRemote = this.environments[environment].isRemote;
506
506
  const command = this.buildBackupCommand(databaseName, environment, backupFile, isRemote);
507
- await this.executeWithRetry(command, 300000); // 5 minute timeout for backups
507
+ await this.executeWithRetry(command, 300000, this.projectRoot); // 5 minute timeout for backups
508
508
 
509
509
  if (existsSync(backupFile)) {
510
510
  const stats = await stat(backupFile);
@@ -629,7 +629,7 @@ export class DatabaseOrchestrator {
629
629
  try {
630
630
  for (const command of commands) {
631
631
  const fullCommand = this.buildDatabaseCommand(command, databaseName, environment);
632
- await this.executeWithRetry(fullCommand, 60000);
632
+ await this.executeWithRetry(fullCommand, 60000, this.projectRoot);
633
633
  executedCommands++;
634
634
  }
635
635
  console.log(` ✅ Cleanup completed: ${executedCommands} operations`);
@@ -683,10 +683,11 @@ export class DatabaseOrchestrator {
683
683
  const matches = output.match(/Applied (\d+) migration/);
684
684
  return matches ? parseInt(matches[1]) : 0;
685
685
  }
686
- async executeWithRetry(command, timeout = null) {
686
+ async executeWithRetry(command, timeout = null, workingDir = null) {
687
687
  const actualTimeout = timeout || (this.config ? this.config.executionTimeout : 30000);
688
688
  const maxAttempts = this.config ? this.config.retryAttempts : 3;
689
689
  const retryDelay = this.config ? this.config.retryDelay : 1000;
690
+ const cwd = workingDir || this.projectRoot;
690
691
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
691
692
  try {
692
693
  const {
@@ -694,7 +695,8 @@ export class DatabaseOrchestrator {
694
695
  } = await execAsync(command, {
695
696
  encoding: 'utf8',
696
697
  timeout: actualTimeout,
697
- stdio: 'pipe'
698
+ stdio: 'pipe',
699
+ cwd: cwd
698
700
  });
699
701
  return stdout;
700
702
  } catch (error) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamyla/clodo-framework",
3
- "version": "3.0.3",
3
+ "version": "3.0.5",
4
4
  "description": "Reusable framework for Clodo-style software architecture on Cloudflare Workers + D1",
5
5
  "type": "module",
6
6
  "sideEffects": [