faf-cli
Version:
😽 TURBO-CAT: The Rapid Catalytic Converter • Project DNA ✨ for ANY AI • Fully Integrated with React, Next.js, Svelte, TypeScript, Vite & n8n • FREE FOREVER • 10,000+ developers • Championship Edition
203 lines • 7.89 kB
JavaScript
"use strict";
/**
* 🎯 Chrome Extension Interactive Confirmation
* Google-style "Did you mean?" with inquirer
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChromeExtensionConfirmer = void 0;
const inquirer_1 = __importDefault(require("inquirer"));
const colors_1 = require("../fix-once/colors");
const chrome_extension_detector_1 = require("./chrome-extension-detector");
class ChromeExtensionConfirmer {
/**
* Ask user to confirm Chrome Extension detection
*/
static async confirmDetection(text, confidence) {
// Check if we're in an interactive terminal
if (!process.stdin.isTTY) {
// In non-TTY, use confidence level for auto-decision
return confidence === 'medium'; // Assume yes for medium confidence
}
const messages = {
medium: `🎯 Detected possible Chrome Extension from: "${colors_1.chalk.yellow(text)}"`,
low: `💭 Found extension-related terms in: "${colors_1.chalk.gray(text)}"`
};
const questions = {
medium: 'Did you mean to create a Chrome Extension?',
low: 'Is this a Chrome Extension project?'
};
console.log();
console.log(messages[confidence]);
const { confirmed } = await inquirer_1.default.prompt([
{
type: 'confirm',
name: 'confirmed',
message: questions[confidence],
default: confidence === 'medium'
}
]);
return confirmed;
}
/**
* Show suggestions for common variations
*/
static async selectFromSuggestions(input) {
const suggestions = this.generateSuggestions(input);
if (suggestions.length === 0) {
return null;
}
// Check if we're in an interactive terminal
if (!process.stdin.isTTY) {
// In non-TTY, return first suggestion or null
return suggestions[0]?.value || null;
}
console.log();
console.log(colors_1.chalk.cyan('🔍 Did you mean one of these?'));
const { selection } = await inquirer_1.default.prompt([
{
type: 'list',
name: 'selection',
message: 'Select project type:',
choices: [
...suggestions.map(s => ({
name: s.display,
value: s.value
})),
new inquirer_1.default.Separator(),
{
name: 'None of these (continue as-is)',
value: null
}
]
}
]);
return selection;
}
/**
* Generate smart suggestions based on input
*/
static generateSuggestions(input) {
const normalized = input.toLowerCase();
const suggestions = [];
// Check for Chrome Extension indicators
const ceDetection = chrome_extension_detector_1.ChromeExtensionDetector.detect(normalized);
if (ceDetection.confidence !== 'none') {
suggestions.push({
display: '🧩 Chrome Extension - Browser extension for Chrome/Edge',
value: 'chrome-extension'
});
}
// Check for related types
if (normalized.includes('browser') || normalized.includes('web')) {
if (!suggestions.find(s => s.value === 'chrome-extension')) {
suggestions.push({
display: '🌐 Web Application - Traditional web app',
value: 'web-app'
});
}
}
if (normalized.includes('ext') || normalized.includes('plugin')) {
suggestions.push({
display: '🔌 Browser Plugin/Extension',
value: 'browser-extension'
});
}
if (normalized.includes('popup') || normalized.includes('toolbar')) {
suggestions.push({
display: '📱 Chrome Extension with Popup UI',
value: 'chrome-extension-popup'
});
}
if (normalized.includes('script') || normalized.includes('inject')) {
suggestions.push({
display: '💉 Content Script Extension',
value: 'chrome-extension-content'
});
}
return suggestions;
}
/**
* Interactive project type selector with fuzzy search
*/
static async selectProjectType(currentInput) {
const projectTypes = [
{ name: '🧩 Chrome Extension', value: 'chrome-extension' },
{ name: '🌐 Web Application', value: 'web-app' },
{ name: '📱 Mobile App', value: 'mobile' },
{ name: '⚙️ CLI Tool', value: 'cli' },
{ name: '📚 Library/Package', value: 'library' },
{ name: '🔧 API/Backend', value: 'api' },
{ name: '🎮 Game', value: 'game' },
{ name: '🤖 Bot/Automation', value: 'bot' },
{ name: '📊 Data Science', value: 'data-science' },
{ name: '🎨 Other/Custom', value: 'other' }
];
// If we have input, check for matches
if (currentInput) {
const detection = chrome_extension_detector_1.ChromeExtensionDetector.detect(currentInput);
if (detection.confidence === 'high') {
console.log(colors_1.chalk.green('✅ Chrome Extension detected automatically!'));
return 'chrome-extension';
}
if (detection.confidence === 'medium' || detection.confidence === 'low') {
const confirmed = await this.confirmDetection(currentInput, detection.confidence);
if (confirmed) {
return 'chrome-extension';
}
}
}
// Check if we're in an interactive terminal
if (!process.stdin.isTTY) {
// In non-TTY, return best guess or default
return currentInput ? this.guessDefault(currentInput) : 'web-app';
}
const { projectType } = await inquirer_1.default.prompt([
{
type: 'list',
name: 'projectType',
message: 'What type of project is this?',
choices: projectTypes,
default: currentInput ? this.guessDefault(currentInput) : 'web-app'
}
]);
return projectType;
}
/**
* Guess the most likely default based on input
*/
static guessDefault(input) {
const normalized = input.toLowerCase();
if (chrome_extension_detector_1.ChromeExtensionDetector.detect(normalized).confidence !== 'none') {
return 'chrome-extension';
}
if (normalized.includes('api') || normalized.includes('backend')) {
return 'api';
}
if (normalized.includes('cli') || normalized.includes('command')) {
return 'cli';
}
if (normalized.includes('library') || normalized.includes('package')) {
return 'library';
}
return 'web-app';
}
}
exports.ChromeExtensionConfirmer = ChromeExtensionConfirmer;
/**
* Example usage:
*
* Input: "chr ext for managing tabs"
* → Shows: "🎯 Detected possible Chrome Extension"
* → Asks: "Did you mean to create a Chrome Extension?" [Y/n]
*
* Input: "c e"
* → Shows suggestions list with Chrome Extension highlighted
*
* Input: "extension"
* → Shows: "💭 Found extension-related terms"
* → Asks: "Is this a Chrome Extension project?" [y/N]
*/
//# sourceMappingURL=chrome-extension-confirmer.js.map