tidyai-ts
Version:
AI-powered cross-platform file organizer using OpenRouter API
161 lines (160 loc) • 6.72 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.colors = exports.tidyAiLogo = void 0;
exports.displayProgressBar = displayProgressBar;
exports.logWithTimestamp = logWithTimestamp;
exports.createLogEntry = createLogEntry;
exports.displayHeader = displayHeader;
exports.displaySectionHeader = displaySectionHeader;
exports.displaySuccess = displaySuccess;
exports.displayError = displayError;
exports.displayWarning = displayWarning;
exports.displayInfo = displayInfo;
exports.updateProgress = updateProgress;
exports.clearProgressLine = clearProgressLine;
const fs = __importStar(require("fs/promises"));
const path = __importStar(require("path"));
// ASCII Art for TidyAI
exports.tidyAiLogo = `
████████╗██╗██████╗ ██╗ ██╗ █████╗ ██╗
╚══██╔══╝██║██╔══██╗╚██╗ ██╔╝██╔══██╗██║
██║ ██║██║ ██║ ╚████╔╝ ███████║██║
██║ ██║██║ ██║ ╚██╔╝ ██╔══██║██║
██║ ██║██████╔╝ ██║ ██║ ██║██║
╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝
`;
// Colors for CLI output
exports.colors = {
reset: '\x1b[0m',
bright: '\x1b[1m',
dim: '\x1b[2m',
underscore: '\x1b[4m',
blink: '\x1b[5m',
reverse: '\x1b[7m',
hidden: '\x1b[8m',
fg: {
black: '\x1b[30m',
red: '\x1b[31m',
green: '\x1b[32m',
yellow: '\x1b[33m',
blue: '\x1b[34m',
magenta: '\x1b[35m',
cyan: '\x1b[36m',
white: '\x1b[37m',
crimson: '\x1b[38m'
},
bg: {
black: '\x1b[40m',
red: '\x1b[41m',
green: '\x1b[42m',
yellow: '\x1b[43m',
blue: '\x1b[44m',
magenta: '\x1b[45m',
cyan: '\x1b[46m',
white: '\x1b[47m',
crimson: '\x1b[48m'
}
};
// Progress bar characters
const progressBarComplete = '█';
const progressBarIncomplete = '░';
// Function to display a progress bar
function displayProgressBar(percentage, width = 40) {
const completeLength = Math.round(width * percentage);
const incompleteLength = width - completeLength;
const completeBar = progressBarComplete.repeat(completeLength);
const incompleteBar = progressBarIncomplete.repeat(incompleteLength);
return `${exports.colors.fg.green}${completeBar}${exports.colors.fg.yellow}${incompleteBar}${exports.colors.reset}`;
}
// Function to log with timestamp
function logWithTimestamp(message, level = 'INFO') {
const timestamp = new Date().toISOString();
return `[${timestamp}] [${level}] ${message}`;
}
// Function to create a log entry
async function createLogEntry(folderPath, message, logDir = '.tidyai/logs') {
try {
const logPath = path.join(folderPath, logDir);
await fs.mkdir(logPath, { recursive: true });
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
const logFile = path.join(logPath, `tidyai-log-${timestamp}.txt`);
const logContent = logWithTimestamp(message);
await fs.writeFile(logFile, logContent);
}
catch (error) {
console.error(`${exports.colors.fg.red}Failed to create log entry: ${error}${exports.colors.reset}`);
}
}
// Function to display the TidyAI header
function displayHeader() {
console.log(exports.colors.fg.cyan + exports.tidyAiLogo + exports.colors.reset);
console.log(exports.colors.fg.blue + '========================================' + exports.colors.reset);
console.log(exports.colors.fg.yellow + ' Organize your files with AI power!' + exports.colors.reset);
console.log(exports.colors.fg.blue + '========================================' + exports.colors.reset);
console.log('');
}
// Function to display a section header
function displaySectionHeader(title) {
console.log('');
console.log(exports.colors.fg.magenta + '┌' + '─'.repeat(title.length + 2) + '┐' + exports.colors.reset);
console.log(exports.colors.fg.magenta + '│ ' + exports.colors.fg.cyan + title + exports.colors.fg.magenta + ' │' + exports.colors.reset);
console.log(exports.colors.fg.magenta + '└' + '─'.repeat(title.length + 2) + '┘' + exports.colors.reset);
console.log('');
}
// Function to display a success message
function displaySuccess(message) {
console.log(exports.colors.fg.green + '✓ ' + message + exports.colors.reset);
}
// Function to display an error message
function displayError(message) {
console.log(exports.colors.fg.red + '✗ ' + message + exports.colors.reset);
}
// Function to display a warning message
function displayWarning(message) {
console.log(exports.colors.fg.yellow + '! ' + message + exports.colors.reset);
}
// Function to display an info message
function displayInfo(message) {
console.log(exports.colors.fg.blue + 'ℹ ' + message + exports.colors.reset);
}
// Function to update progress without creating new lines
function updateProgress(message) {
process.stdout.write('\r' + message);
}
// Function to clear the progress line
function clearProgressLine() {
process.stdout.write('\r' + ' '.repeat(80) + '\r');
}