UNPKG

agile-planner-mcp-server

Version:

Serveur MCP pour la génération d'artefacts agiles (backlogs, features, user stories) avec IA - compatible Windsurf, Claude et Cursor

66 lines (57 loc) 1.97 kB
/** * @fileoverview Utilitaires pour la manipulation de fichiers * Fournit des fonctions pour sanitizer les noms de fichiers, créer des chemins, etc. * * @module utils/file-utils */ /** * Sanitize un nom de fichier pour qu'il soit valide * Remplace les caractères non autorisés par des tirets * * @param {string} fileName - Nom de fichier à sanitizer * @returns {string} Nom de fichier sanitizé */ function sanitizeFileName(fileName) { if (!fileName) return 'untitled'; // Remplacer les caractères non-alphanumériques par des tirets (sauf tirets et underscores) let sanitized = fileName.toLowerCase() .replace(/[^a-z0-9\-_]/g, '-') // Remplacer caractères spéciaux par tirets .replace(/-+/g, '-') // Éviter les tirets multiples .replace(/(^-)|(-$)/g, ''); // Supprimer tirets début/fin (groupes explicites) // Éviter les noms vides if (!sanitized) { sanitized = 'untitled'; } // Limiter la longueur if (sanitized.length > 64) { sanitized = sanitized.substring(0, 64); } return sanitized; } /** * Génère un identifiant unique basé sur l'horodatage et un préfixe * * @param {string} [prefix=''] - Préfixe pour l'identifiant * @returns {string} Identifiant unique */ function generateUniqueId(prefix = '') { const timestamp = Date.now(); const random = Math.floor(Math.random() * 10000); return `${prefix ? prefix + '-' : ''}${timestamp}-${random}`; } /** * Assure que le chemin contient la structure de répertoires .agile-planner-backlog * * @param {string} basePath - Chemin de base * @returns {string} Chemin du répertoire backlog */ function ensureBacklogPath(basePath) { return basePath.endsWith('.agile-planner-backlog') ? basePath : path.join(basePath, '.agile-planner-backlog'); } module.exports = { sanitizeFileName, generateUniqueId, ensureBacklogPath };