gitmaps 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -866,4 +866,82 @@ describe('recent commits sidebar', () => {
866
866
  (mock as any).restore?.();
867
867
  }
868
868
  });
869
+
870
+ test('removing the final recent repo after rerenders leaves Pull bound only to the active repo state', async () => {
871
+ const loadRepositoryMock = mock(async () => undefined);
872
+ const originalRepoModule = require('./repo');
873
+ mock.module('./repo', () => ({
874
+ ...originalRepoModule,
875
+ loadRepository: loadRepositoryMock,
876
+ }));
877
+
878
+ let currentRepoPath = 'C:/Code/gitmaps';
879
+ const onRepoReady = mock((path: string) => {
880
+ currentRepoPath = path;
881
+ });
882
+ const ctx = {
883
+ onRepoReady,
884
+ actor: { send: mock(() => undefined) },
885
+ snap: () => ({
886
+ context: { repoPath: currentRepoPath, zoom: 1, offsetX: 0, offsetY: 0, commits: [] },
887
+ value: { view: 'allfiles' },
888
+ }),
889
+ fileCards: new Map(),
890
+ deferredCards: new Map(),
891
+ changedFilePaths: new Set(),
892
+ positions: new Map(),
893
+ hiddenFiles: new Set(),
894
+ allFilesData: [],
895
+ commitFilesData: [],
896
+ canvas: document.createElement('div'),
897
+ canvasViewport: document.createElement('div'),
898
+ svgOverlay: null,
899
+ loadingOverlay: null,
900
+ } as any;
901
+ setCanvasContext(ctx);
902
+
903
+ const repoSelect = document.getElementById('repoSelect') as HTMLSelectElement;
904
+ const pullBtn = document.getElementById('pullBtn') as HTMLButtonElement;
905
+ repoSelect.value = '';
906
+
907
+ renderRecentCommitsUI();
908
+ addRecentRepo('C:/Code/gitmaps', 12);
909
+ renderRecentCommitsUI();
910
+
911
+ const recentItem = document.querySelector('[data-path="C:/Code/gitmaps"]') as HTMLButtonElement;
912
+ expect(recentItem).toBeTruthy();
913
+
914
+ recentItem.click();
915
+ await Promise.resolve();
916
+
917
+ expect(onRepoReady).toHaveBeenCalledTimes(1);
918
+ expect(onRepoReady).toHaveBeenCalledWith('C:/Code/gitmaps');
919
+ expect(currentRepoPath).toBe('C:/Code/gitmaps');
920
+ expect(repoSelect.value).toBe('C:/Code/gitmaps');
921
+
922
+ removeRecentRepo('C:/Code/gitmaps');
923
+ renderRecentCommitsUI();
924
+
925
+ try {
926
+ expect(document.querySelector('[data-path]')).toBeNull();
927
+ expect(getRecentRepos()).toEqual([]);
928
+ expect((document.getElementById('recentCommits') as HTMLDivElement).style.display).toBe('none');
929
+ expect(pullBtn.dataset.bound).toBe('true');
930
+ expect(currentRepoPath).toBe('C:/Code/gitmaps');
931
+
932
+ pullBtn.click();
933
+ await Promise.resolve();
934
+ await Promise.resolve();
935
+
936
+ expect(loadRepositoryMock).toHaveBeenCalledTimes(1);
937
+ expect(loadRepositoryMock).toHaveBeenCalledWith(ctx, 'C:/Code/gitmaps');
938
+ expect(loadRepositoryMock.mock.calls.map((call: any[]) => call[1])).not.toContain('C:/Code/jsx-ai');
939
+ expect(pullBtn.disabled).toBeFalse();
940
+ expect((pullBtn.textContent || '').trim()).toBe('Pull');
941
+ expect(document.querySelector('.toast.success')?.textContent || '').toContain('Pulled latest commits');
942
+ expect(ctx.actor.send).not.toHaveBeenCalled();
943
+ } finally {
944
+ (mock as any).restore?.();
945
+ }
946
+ });
869
947
  });
package/package.json CHANGED
@@ -1,84 +1,84 @@
1
- {
2
- "name": "gitmaps",
3
- "version": "1.1.1",
4
- "type": "module",
5
- "bin": {
6
- "gitmaps": "cli.ts"
7
- },
8
- "repository": {
9
- "type": "git",
10
- "url": "https://github.com/7flash/gitmaps"
11
- },
12
- "homepage": "https://gitmaps.xyz",
13
- "workspaces": [
14
- "packages/*"
15
- ],
16
- "scripts": {
17
- "dev": "bun run server.ts",
18
- "start": "bun run server.ts",
19
- "test": "bun test app/api/repo/load/route.test.ts app/lib/route-catchall.test.ts app/lib/status-bar.test.ts app/lib/xydraw.test.ts app/lib/transclusion-smoke.test.ts app/lib/repo-select.test.ts packages/galaxydraw/perf.test.ts",
20
- "smoke:browser": "bun scripts/browser-smoke-local.ts",
21
- "smoke:browser-tools": "bash scripts/browser-smoke-local.sh",
22
- "smoke:browser-tools:load": "bash scripts/browser-repo-load-smoke.sh",
23
- "smoke:browser-tools:guard": "bash scripts/browser-smoke-guard.sh",
24
- "smoke:browser-tools:self-check": "bash scripts/browser-smoke-self-check.sh",
25
- "smoke:browser-tools:check": "bash scripts/browser-smoke-check.sh",
26
- "prepublishOnly": "echo 'Publishing gitmaps to npm'"
27
- },
28
- "keywords": [
29
- "git",
30
- "canvas",
31
- "visualization",
32
- "code-review",
33
- "spatial",
34
- "infinite-canvas",
35
- "diff",
36
- "repository",
37
- "minimap",
38
- "codemirror"
39
- ],
40
- "author": "mements",
41
- "license": "ISC",
42
- "description": "Spatial code explorer — see every file at once on an infinite canvas with diffs, layers, and time-travel",
43
- "files": [
44
- "cli.ts",
45
- "server.ts",
46
- "app/",
47
- "packages/xydraw/",
48
- "README.md",
49
- "banner.png"
50
- ],
51
- "dependencies": {
52
- "@codemirror/autocomplete": "^6.20.1",
53
- "@codemirror/commands": "^6.10.2",
54
- "@codemirror/lang-css": "^6.3.1",
55
- "@codemirror/lang-html": "^6.4.11",
56
- "@codemirror/lang-javascript": "^6.2.5",
57
- "@codemirror/lang-json": "^6.0.2",
58
- "@codemirror/lang-markdown": "^6.5.0",
59
- "@codemirror/lang-python": "^6.2.1",
60
- "@codemirror/lang-yaml": "^6.1.2",
61
- "@codemirror/language": "^6.12.2",
62
- "@codemirror/lint": "^6.9.5",
63
- "@codemirror/search": "^6.6.0",
64
- "@codemirror/state": "^6.5.4",
65
- "@codemirror/view": "^6.39.16",
66
- "@lezer/highlight": "^1.2.3",
67
- "xydraw": "0.2.0",
68
- "jsx-ai": "0.1.2",
69
- "measure-fn": "3.10.1",
70
- "melina": "link:../melina.js",
71
- "pixi.js": "^8.17.0",
72
- "simple-git": "^3.30.0",
73
- "sqlite-zod-orm": "^3.26.0",
74
- "xstate": "^5.26.0"
75
- },
76
- "devDependencies": {
77
- "@types/bun": "^1.3.10",
78
- "happy-dom": "^20.8.4",
79
- "puppeteer": "^24.39.1"
80
- },
81
- "overrides": {
82
- "measure-fn": "3.10.1"
83
- }
84
- }
1
+ {
2
+ "name": "gitmaps",
3
+ "version": "1.1.2",
4
+ "type": "module",
5
+ "bin": {
6
+ "gitmaps": "cli.ts"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/7flash/gitmaps"
11
+ },
12
+ "homepage": "https://gitmaps.xyz",
13
+ "workspaces": [
14
+ "packages/*"
15
+ ],
16
+ "scripts": {
17
+ "dev": "bun run server.ts",
18
+ "start": "bun run server.ts",
19
+ "test": "bun test app/api/repo/load/route.test.ts app/lib/route-catchall.test.ts app/lib/status-bar.test.ts app/lib/xydraw.test.ts app/lib/transclusion-smoke.test.ts app/lib/repo-select.test.ts packages/galaxydraw/perf.test.ts",
20
+ "smoke:browser": "bun scripts/browser-smoke-local.ts",
21
+ "smoke:browser-tools": "bash scripts/browser-smoke-local.sh",
22
+ "smoke:browser-tools:load": "bash scripts/browser-repo-load-smoke.sh",
23
+ "smoke:browser-tools:guard": "bash scripts/browser-smoke-guard.sh",
24
+ "smoke:browser-tools:self-check": "bash scripts/browser-smoke-self-check.sh",
25
+ "smoke:browser-tools:check": "bash scripts/browser-smoke-check.sh",
26
+ "prepublishOnly": "echo 'Publishing gitmaps to npm'"
27
+ },
28
+ "keywords": [
29
+ "git",
30
+ "canvas",
31
+ "visualization",
32
+ "code-review",
33
+ "spatial",
34
+ "infinite-canvas",
35
+ "diff",
36
+ "repository",
37
+ "minimap",
38
+ "codemirror"
39
+ ],
40
+ "author": "mements",
41
+ "license": "ISC",
42
+ "description": "Spatial code explorer — see every file at once on an infinite canvas with diffs, layers, and time-travel",
43
+ "files": [
44
+ "cli.ts",
45
+ "server.ts",
46
+ "app/",
47
+ "packages/xydraw/",
48
+ "README.md",
49
+ "banner.png"
50
+ ],
51
+ "dependencies": {
52
+ "@codemirror/autocomplete": "^6.20.1",
53
+ "@codemirror/commands": "^6.10.2",
54
+ "@codemirror/lang-css": "^6.3.1",
55
+ "@codemirror/lang-html": "^6.4.11",
56
+ "@codemirror/lang-javascript": "^6.2.5",
57
+ "@codemirror/lang-json": "^6.0.2",
58
+ "@codemirror/lang-markdown": "^6.5.0",
59
+ "@codemirror/lang-python": "^6.2.1",
60
+ "@codemirror/lang-yaml": "^6.1.2",
61
+ "@codemirror/language": "^6.12.2",
62
+ "@codemirror/lint": "^6.9.5",
63
+ "@codemirror/search": "^6.6.0",
64
+ "@codemirror/state": "^6.5.4",
65
+ "@codemirror/view": "^6.39.16",
66
+ "@lezer/highlight": "^1.2.3",
67
+ "xydraw": "0.2.0",
68
+ "jsx-ai": "0.1.2",
69
+ "measure-fn": "3.10.1",
70
+ "melina": "link:../melina.js",
71
+ "pixi.js": "^8.17.0",
72
+ "simple-git": "^3.30.0",
73
+ "sqlite-zod-orm": "^3.26.0",
74
+ "xstate": "^5.26.0"
75
+ },
76
+ "devDependencies": {
77
+ "@types/bun": "^1.3.10",
78
+ "happy-dom": "^20.8.4",
79
+ "puppeteer": "^24.39.1"
80
+ },
81
+ "overrides": {
82
+ "measure-fn": "3.10.1"
83
+ }
84
+ }