// Encodage du chemin absolu d'un worktree pour le segment d'URL /workspace/:repoId/:wt. // Source unique partagée par le front web ET l'extension VS Code (deep-link), pour éviter toute // divergence d'encodage. base64url (sans +, /, =) donne un segment propre et réversible. /** Encode un chemin absolu en base64url (sûr en segment d'URL). */ export function encodeWtKey(path: string): string { const b64 = btoa(unescape(encodeURIComponent(path))); return b64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); } /** * Décode une clé de worktree vers son chemin absolu. Tolérant à deux formats historiques : * - base64url (front web, encodeWtKey) ; * - chemin percent-encodé (ancien deep-link VS Code via encodeURIComponent) : reconnaissable au * caractère `%` que le base64url ne contient jamais. * Ne lève pas : renvoie la clé telle quelle en dernier recours. */ export function decodeWtKey(key: string): string { if (key.includes('%')) { try { return decodeURIComponent(key); } catch { return key; } } const b64 = key.replace(/-/g, '+').replace(/_/g, '/'); const pad = b64.length % 4 === 0 ? '' : '='.repeat(4 - (b64.length % 4)); try { return decodeURIComponent(escape(atob(b64 + pad))); } catch { return key; } }