feat: l'IDE devient la vue par défaut + deep-link worktree unifié
Route / redirige vers /ide ; le dashboard passe à /dashboard (nom inchangé). /workspace/:repoId/:wt rend désormais l'IDE (IdeShell) : au montage il décode la clé, active et déplie le worktree ciblé, ouvre ?file= le cas échéant. WorkspaceView et useWorkspaceLayout retirés. encode/decodeWtKey déplacés dans @arboretum/shared (source unique) avec décodeur TOLÉRANT (base64url OU chemin percent-encodé), corrigeant la divergence historique du deep-link VS Code. config.ts de l'extension aligné sur encodeWtKey. Tests wt-key (shared) + config (vscode) mis à jour. 431 tests.
This commit is contained in:
24
packages/shared/test/wt-key.test.ts
Normal file
24
packages/shared/test/wt-key.test.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { encodeWtKey, decodeWtKey } from '../src/wt-key.js';
|
||||
|
||||
describe('wt-key', () => {
|
||||
it('encode puis decode restitue le chemin (aller-retour)', () => {
|
||||
for (const p of ['/home/johan/repo', '/a/b c/é', '/tmp/x-y_z', 'C:/Users/x/proj']) {
|
||||
expect(decodeWtKey(encodeWtKey(p))).toBe(p);
|
||||
}
|
||||
});
|
||||
|
||||
it('un segment base64url ne contient ni %, ni +, ni /, ni =', () => {
|
||||
const k = encodeWtKey('/home/johan/mon repo/sous-dossier');
|
||||
expect(k).not.toMatch(/[%+/=]/);
|
||||
});
|
||||
|
||||
it('décode aussi un chemin percent-encodé (ancien deep-link VS Code)', () => {
|
||||
const raw = encodeURIComponent('/home/johan/repo');
|
||||
expect(decodeWtKey(raw)).toBe('/home/johan/repo');
|
||||
});
|
||||
|
||||
it('ne lève pas sur une clé invalide', () => {
|
||||
expect(() => decodeWtKey('!!!not-valid')).not.toThrow();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user