@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
|
|
package/bin/clodo-service.js
CHANGED
|
@@ -645,57 +645,13 @@ program
|
|
|
645
645
|
let coreInputs = {};
|
|
646
646
|
let source = 'interactive';
|
|
647
647
|
|
|
648
|
-
// Interactive mode:
|
|
648
|
+
// Interactive mode: run full three-tier input collection
|
|
649
649
|
if (isInteractive) {
|
|
650
|
-
|
|
650
|
+
const collectionResult = await inputCollector.collect();
|
|
651
|
+
coreInputs = collectionResult.flatInputs;
|
|
651
652
|
|
|
652
|
-
//
|
|
653
|
-
|
|
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
|
-
//
|
|
800
|
-
const confirmations =
|
|
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
|
|
593
|
-
* Used by CLI for
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|