@tamyla/clodo-framework 3.1.4 → 3.1.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,10 @@
1
+ ## [3.1.5](https://github.com/tamylaa/clodo-framework/compare/v3.1.4...v3.1.5) (2025-10-25)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * deploy command should use full three-tier architecture (88+ fields)- Updated collect() to return comprehensive three-tier result- Deploy command now uses full collection with confirmations- Prevents duplicate confirmation steps in interactive mode- Restores the 80+ field deployment flow with user confirmations ([5c6c226](https://github.com/tamylaa/clodo-framework/commit/5c6c226d652d3dc7d1532147af4e87f7ccb8a811))
7
+
1
8
  ## [3.1.4](https://github.com/tamylaa/clodo-framework/compare/v3.1.3...v3.1.4) (2025-10-25)
2
9
 
3
10
 
@@ -645,57 +645,13 @@ program
645
645
  let coreInputs = {};
646
646
  let source = 'interactive';
647
647
 
648
- // Interactive mode: collect deployment-specific inputs
648
+ // Interactive mode: run full three-tier input collection
649
649
  if (isInteractive) {
650
- console.log(chalk.cyan('šŸ“Š Deployment Input Collection\n'));
650
+ const collectionResult = await inputCollector.collect();
651
+ coreInputs = collectionResult.flatInputs;
651
652
 
652
- // Collect deployment-focused inputs, not full service creation
653
- let customer = options.customer;
654
- if (!customer) {
655
- const customers = configManager.listCustomers();
656
- if (customers.length > 0) {
657
- console.log(chalk.blue('ā“ Select customer:'));
658
- customers.forEach((cust, index) => {
659
- console.log(chalk.gray(` ${index + 1}. ${cust}`));
660
- });
661
- const selection = await inputCollector.question('Enter number or name: ');
662
-
663
- const num = parseInt(selection);
664
- if (!isNaN(num) && num >= 1 && num <= customers.length) {
665
- customer = customers[num - 1];
666
- } else if (customers.includes(selection)) {
667
- customer = selection;
668
- } else {
669
- customer = selection;
670
- console.log(chalk.yellow(`āš ļø New customer: ${customer}`));
671
- }
672
- } else {
673
- customer = await inputCollector.question('Customer name: ');
674
- }
675
- }
676
-
677
- const environment = options.env || await inputCollector.collectEnvironment();
678
- const domainName = options.domain || await inputCollector.question('Domain name: ');
679
-
680
- // Collect Cloudflare credentials
681
- const cloudflareToken = process.env.CLOUDFLARE_API_TOKEN || await inputCollector.collectCloudflareToken();
682
-
683
- console.log(chalk.cyan('ā³ Fetching Cloudflare configuration...'));
684
- const cloudflareConfig = await inputCollector.collectCloudflareConfigWithDiscovery(
685
- cloudflareToken,
686
- domainName
687
- );
688
-
689
- coreInputs = {
690
- customer,
691
- environment,
692
- domainName,
693
- cloudflareToken,
694
- cloudflareAccountId: cloudflareConfig.accountId,
695
- cloudflareZoneId: cloudflareConfig.zoneId
696
- };
697
-
698
- source = 'interactive';
653
+ // The three-tier collection already included confirmations
654
+ // Skip the separate confirmation step since it was done in collect()
699
655
  } else {
700
656
  // Non-interactive mode: load from config file or stored config
701
657
 
@@ -796,8 +752,10 @@ program
796
752
  }
797
753
 
798
754
  // Tier 2: Generate smart confirmations using existing ConfirmationHandler
799
- // Note: ConfirmationEngine prints its own header
800
- const confirmations = await confirmationHandler.generateAndConfirm(coreInputs);
755
+ // Skip if interactive mode (confirmations already done in three-tier collection)
756
+ const confirmations = isInteractive
757
+ ? {} // Confirmations already collected in interactive mode
758
+ : await confirmationHandler.generateAndConfirm(coreInputs);
801
759
 
802
760
  // Show deployment summary
803
761
  console.log(chalk.cyan('\nšŸ“Š Deployment Summary'));
@@ -589,16 +589,25 @@ export class InputCollector {
589
589
  }
590
590
 
591
591
  /**
592
- * Collect inputs and return flat core inputs object
593
- * Used by CLI for deployment
592
+ * Collect inputs and return full three-tier result
593
+ * Used by CLI for comprehensive service operations
594
594
  */
595
595
  async collect() {
596
596
  const result = await this.collectInputsWithTransparency();
597
- // Flatten the core inputs from {id: {value, ...}} to {id: value}
597
+
598
+ // For CLI compatibility, also provide flat coreInputs
598
599
  const flatCoreInputs = {};
599
600
  for (const [key, inputObj] of Object.entries(result.coreInputs)) {
600
601
  flatCoreInputs[key] = inputObj.value;
601
602
  }
602
- return flatCoreInputs;
603
+
604
+ // Merge smart confirmations into flat object
605
+ for (const [key, value] of Object.entries(result.smartConfirmations)) {
606
+ flatCoreInputs[key] = value;
607
+ }
608
+ return {
609
+ ...result,
610
+ flatInputs: flatCoreInputs
611
+ };
603
612
  }
604
613
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamyla/clodo-framework",
3
- "version": "3.1.4",
3
+ "version": "3.1.5",
4
4
  "description": "Reusable framework for Clodo-style software architecture on Cloudflare Workers + D1",
5
5
  "type": "module",
6
6
  "sideEffects": [