aahook
Version:
A CLI tool that displays ASCII art when commands succeed or fail
162 lines ⢠6.21 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.installCommand = installCommand;
const aa_manager_1 = require("../aa-manager");
const github_fetcher_1 = require("../github-fetcher");
const config_1 = require("../config");
const readline = __importStar(require("readline"));
/**
* Install ASCII art from remote repository
*/
async function installCommand(artPath, options = {}) {
const manager = new aa_manager_1.AAManager();
const fetcher = new github_fetcher_1.GitHubFetcher();
try {
// Parse art path (format: category/name)
const parts = artPath.split('/');
if (parts.length !== 2) {
throw new Error('Invalid art path. Use format: category/name');
}
const [category, name] = parts;
// Check if already exists
if (!options.overwrite && await manager.exists(name)) {
console.log(`\nā ļø ASCII art '${name}' already exists.`);
console.log('š” Use --overwrite flag to replace it.\n');
return;
}
console.log(`\nš„ Installing ${category}/${name}...`);
// Fetch ASCII art from GitHub
const content = await fetcher.fetchArt(category, name);
// Fetch metadata if available
let metadata;
try {
const categoryMeta = await fetcher.fetchCategory(category);
metadata = categoryMeta.arts?.find(a => a.name === name);
}
catch {
// Metadata is optional
}
// Save locally
const aa = {
category,
name,
content,
metadata
};
await manager.saveLocal(aa);
console.log(`ā
Successfully installed '${name}'`);
// Display the ASCII art
console.log('\nšØ Preview:');
console.log('ā'.repeat(40));
console.log(content);
console.log('ā'.repeat(40));
// Suggest hook configuration
const suggestions = await manager.suggestHooks(aa);
if (options.autoConfig && (suggestions.success || suggestions.error)) {
// Auto-configure hooks
const config = (0, config_1.loadConfig)();
if (!config.hooks) {
config.hooks = {};
}
// Set default hook for all commands
config.hooks['*'] = {
success: suggestions.success,
error: suggestions.error
};
console.log(`\nš Auto-configured hooks:`);
if (suggestions.success) {
console.log(` Success: ${suggestions.success}`);
}
if (suggestions.error) {
console.log(` Error: ${suggestions.error}`);
}
(0, config_1.saveConfig)(config);
}
else if (suggestions.success || suggestions.error) {
// Ask user for configuration
console.log('\nš” Suggested hook configuration:');
if (suggestions.success) {
console.log(` Success hook: npx aahook config --success ${name}.txt`);
}
if (suggestions.error) {
console.log(` Error hook: npx aahook config --error ${name}.txt`);
}
if (!options.autoConfig) {
const shouldConfig = await askYesNo('\nWould you like to apply these configurations?');
if (shouldConfig) {
const config = (0, config_1.loadConfig)();
if (!config.hooks) {
config.hooks = {};
}
// Set default hook for all commands
config.hooks['*'] = {
success: suggestions.success,
error: suggestions.error
};
(0, config_1.saveConfig)(config);
console.log('ā
Hook configuration updated');
}
}
}
console.log(`\nšÆ You can now use '${name}' in your hooks!\n`);
}
catch (error) {
if (error.message.includes('Not found')) {
console.error(`\nā ASCII art not found: ${artPath}`);
console.error('š” Use "npx aahook browse" to see available arts\n');
}
else {
console.error(`\nā Installation failed: ${error.message}\n`);
}
process.exit(1);
}
}
/**
* Ask yes/no question
*/
function askYesNo(question) {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
return new Promise((resolve) => {
rl.question(`${question} (y/n): `, (answer) => {
rl.close();
resolve(answer.toLowerCase() === 'y');
});
});
}
//# sourceMappingURL=install.js.map
;