@vivantel/virage-git-isomorphic 0.1.1

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.
@@ -0,0 +1,5 @@
1
+ import type { SourceRepository } from "@vivantel/virage-core";
2
+ import { IsomorphicGitSourceRepository } from "./isomorphic-git-source-repo.js";
3
+ export { IsomorphicGitSourceRepository };
4
+ export declare function createSourceRepository(config: Record<string, unknown>): SourceRepository;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAEzC,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,gBAAgB,CAIlB"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ import { IsomorphicGitSourceRepository } from "./isomorphic-git-source-repo.js";
2
+ export { IsomorphicGitSourceRepository };
3
+ export function createSourceRepository(config) {
4
+ const dir = typeof config.dir === "string" ? config.dir : process.cwd();
5
+ return new IsomorphicGitSourceRepository(dir);
6
+ }
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAEhF,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAEzC,MAAM,UAAU,sBAAsB,CACpC,MAA+B;IAE/B,MAAM,GAAG,GACP,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9D,OAAO,IAAI,6BAA6B,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { SourceRepository } from "@vivantel/virage-core";
2
+ export declare class IsomorphicGitSourceRepository implements SourceRepository {
3
+ readonly rootUri: string;
4
+ private readonly dir;
5
+ constructor(dir: string);
6
+ getCurrentRevision(): Promise<string>;
7
+ getFileRevisions(files: string[], onProgress?: (done: number, total: number) => void): Promise<Map<string, string>>;
8
+ getChangedFilesSince(prevRevision: string, patterns?: string[]): Promise<{
9
+ added: string[];
10
+ modified: string[];
11
+ deleted: string[];
12
+ } | null>;
13
+ getContext(): Promise<string>;
14
+ getPendingChanges(): Promise<Set<string>>;
15
+ }
16
+ //# sourceMappingURL=isomorphic-git-source-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isomorphic-git-source-repo.d.ts","sourceRoot":"","sources":["../src/isomorphic-git-source-repo.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAW9D,qBAAa,6BAA8B,YAAW,gBAAgB;IACpE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,GAAG,EAAE,MAAM;IAKjB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIrC,gBAAgB,CACpB,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACjD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA0DzB,oBAAoB,CACxB,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAyDvE,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ7B,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;CAchD"}
@@ -0,0 +1,154 @@
1
+ import * as fs from "node:fs";
2
+ import { createHash } from "node:crypto";
3
+ import path from "node:path";
4
+ import git, { TREE } from "isomorphic-git";
5
+ function computeGitBlobSha(filePath) {
6
+ const content = fs.readFileSync(filePath);
7
+ const header = `blob ${content.length}\0`;
8
+ const hash = createHash("sha1");
9
+ hash.update(header);
10
+ hash.update(content);
11
+ return hash.digest("hex");
12
+ }
13
+ export class IsomorphicGitSourceRepository {
14
+ rootUri;
15
+ dir;
16
+ constructor(dir) {
17
+ this.dir = dir;
18
+ this.rootUri = dir;
19
+ }
20
+ async getCurrentRevision() {
21
+ return git.resolveRef({ fs, dir: this.dir, ref: "HEAD" });
22
+ }
23
+ async getFileRevisions(files, onProgress) {
24
+ if (files.length === 0)
25
+ return new Map();
26
+ const headSha = await git.resolveRef({ fs, dir: this.dir, ref: "HEAD" });
27
+ // Walk HEAD tree once to build blob SHA map
28
+ const treeMap = new Map();
29
+ await git.walk({
30
+ fs,
31
+ dir: this.dir,
32
+ trees: [TREE({ ref: headSha })],
33
+ map: async (filepath, [entry]) => {
34
+ if (!entry)
35
+ return;
36
+ const type = await entry.type();
37
+ if (type !== "blob")
38
+ return;
39
+ const oid = await entry.oid();
40
+ treeMap.set(filepath, oid);
41
+ },
42
+ });
43
+ // Get dirty files via statusMatrix
44
+ const matrix = await git.statusMatrix({ fs, dir: this.dir }).catch(() => []);
45
+ const dirtySet = new Set();
46
+ for (const [filepath, head, workdir] of matrix) {
47
+ // workdir !== head means the working-tree copy differs from the tree
48
+ if (workdir !== head)
49
+ dirtySet.add(filepath);
50
+ }
51
+ const result = new Map();
52
+ let done = 0;
53
+ for (const file of files) {
54
+ const normalized = file.split(path.sep).join("/");
55
+ const isDirty = dirtySet.has(normalized);
56
+ const treeSha = treeMap.get(normalized);
57
+ let sha;
58
+ if (!isDirty && treeSha) {
59
+ // Clean committed file: use blob SHA from HEAD tree (zero disk reads)
60
+ sha = treeSha;
61
+ }
62
+ else {
63
+ // Dirty or untracked: compute from actual file content
64
+ try {
65
+ sha = computeGitBlobSha(path.isAbsolute(file) ? file : path.join(this.dir, file));
66
+ }
67
+ catch {
68
+ // file unreadable — omit from result
69
+ }
70
+ }
71
+ if (sha)
72
+ result.set(file, sha);
73
+ onProgress?.(++done, files.length);
74
+ }
75
+ return result;
76
+ }
77
+ async getChangedFilesSince(prevRevision, patterns) {
78
+ try {
79
+ const headSha = await git.resolveRef({ fs, dir: this.dir, ref: "HEAD" });
80
+ const added = [];
81
+ const modified = [];
82
+ const deleted = [];
83
+ await git.walk({
84
+ fs,
85
+ dir: this.dir,
86
+ trees: [TREE({ ref: headSha }), TREE({ ref: prevRevision })],
87
+ map: async (filepath, [head, prev]) => {
88
+ if (filepath === ".")
89
+ return;
90
+ // Skip directory entries
91
+ if (head) {
92
+ const type = await head.type();
93
+ if (type === "tree")
94
+ return;
95
+ }
96
+ if (prev) {
97
+ const type = await prev.type();
98
+ if (type === "tree")
99
+ return;
100
+ }
101
+ // Apply pattern filter if provided
102
+ if (patterns && patterns.length > 0) {
103
+ const matches = patterns.some((p) => filepath.startsWith(p) ||
104
+ filepath.endsWith(p) ||
105
+ filepath.includes(p));
106
+ if (!matches)
107
+ return;
108
+ }
109
+ const headOid = head ? await head.oid() : null;
110
+ const prevOid = prev ? await prev.oid() : null;
111
+ if (headOid === prevOid)
112
+ return;
113
+ if (!headOid && prevOid) {
114
+ deleted.push(filepath);
115
+ }
116
+ else if (headOid && !prevOid) {
117
+ added.push(filepath);
118
+ }
119
+ else {
120
+ modified.push(filepath);
121
+ }
122
+ },
123
+ });
124
+ return { added, modified, deleted };
125
+ }
126
+ catch {
127
+ return null;
128
+ }
129
+ }
130
+ async getContext() {
131
+ try {
132
+ return (await git.currentBranch({ fs, dir: this.dir })) ?? "HEAD";
133
+ }
134
+ catch {
135
+ return "HEAD";
136
+ }
137
+ }
138
+ async getPendingChanges() {
139
+ try {
140
+ const matrix = await git.statusMatrix({ fs, dir: this.dir });
141
+ const dirty = new Set();
142
+ for (const [filepath, head, workdir, stage] of matrix) {
143
+ if (workdir !== head || stage !== head) {
144
+ dirty.add(filepath);
145
+ }
146
+ }
147
+ return dirty;
148
+ }
149
+ catch {
150
+ return new Set();
151
+ }
152
+ }
153
+ }
154
+ //# sourceMappingURL=isomorphic-git-source-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isomorphic-git-source-repo.js","sourceRoot":"","sources":["../src/isomorphic-git-source-repo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=isomorphic-git-source-repo.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isomorphic-git-source-repo.test.d.ts","sourceRoot":"","sources":["../src/isomorphic-git-source-repo.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,189 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { IsomorphicGitSourceRepository } from "./isomorphic-git-source-repo.js";
3
+ // ── Mock isomorphic-git ────────────────────────────────────────────────────────
4
+ const mockResolveRef = vi.fn();
5
+ const mockWalk = vi.fn();
6
+ const mockStatusMatrix = vi.fn();
7
+ const mockCurrentBranch = vi.fn();
8
+ const mockTREE = vi.fn((opts) => opts);
9
+ vi.mock("isomorphic-git", () => ({
10
+ default: {
11
+ resolveRef: (...args) => mockResolveRef(...args),
12
+ walk: (...args) => mockWalk(...args),
13
+ statusMatrix: (...args) => mockStatusMatrix(...args),
14
+ currentBranch: (...args) => mockCurrentBranch(...args),
15
+ },
16
+ TREE: (opts) => mockTREE(opts),
17
+ }));
18
+ // ── Mock node:fs to avoid real file I/O ───────────────────────────────────────
19
+ vi.mock("node:fs", () => ({
20
+ readFileSync: vi.fn().mockReturnValue(Buffer.from("hello")),
21
+ }));
22
+ // ── Helpers ────────────────────────────────────────────────────────────────────
23
+ function makeEntry(oid, type = "blob") {
24
+ return {
25
+ oid: vi.fn().mockResolvedValue(oid),
26
+ type: vi.fn().mockResolvedValue(type),
27
+ };
28
+ }
29
+ function makeRepo(dir = "/repo") {
30
+ return new IsomorphicGitSourceRepository(dir);
31
+ }
32
+ const HEAD_SHA = "abc123def456abc123def456abc123def456abc1";
33
+ const PREV_SHA = "000111222333000111222333000111222333000a";
34
+ beforeEach(() => {
35
+ vi.clearAllMocks();
36
+ mockResolveRef.mockResolvedValue(HEAD_SHA);
37
+ mockStatusMatrix.mockResolvedValue([]);
38
+ mockCurrentBranch.mockResolvedValue("main");
39
+ });
40
+ // ── getCurrentRevision ─────────────────────────────────────────────────────────
41
+ describe("getCurrentRevision", () => {
42
+ it("returns the HEAD SHA", async () => {
43
+ const repo = makeRepo();
44
+ const rev = await repo.getCurrentRevision();
45
+ expect(rev).toBe(HEAD_SHA);
46
+ expect(mockResolveRef).toHaveBeenCalledWith(expect.objectContaining({ ref: "HEAD" }));
47
+ });
48
+ });
49
+ // ── getFileRevisions ───────────────────────────────────────────────────────────
50
+ describe("getFileRevisions", () => {
51
+ it("returns empty map for empty files list", async () => {
52
+ const repo = makeRepo();
53
+ const result = await repo.getFileRevisions([]);
54
+ expect(result.size).toBe(0);
55
+ expect(mockWalk).not.toHaveBeenCalled();
56
+ });
57
+ it("returns blob OIDs from HEAD tree for clean files", async () => {
58
+ const blobSha = "blobsha1".padEnd(40, "0");
59
+ // Simulate walk calling map with (filepath, [entry])
60
+ mockWalk.mockImplementation(async ({ map }) => {
61
+ await map("src/foo.ts", [makeEntry(blobSha)]);
62
+ await map("src/dir", [makeEntry("treeSha", "tree")]);
63
+ });
64
+ const repo = makeRepo();
65
+ const result = await repo.getFileRevisions(["src/foo.ts"]);
66
+ expect(result.get("src/foo.ts")).toBe(blobSha);
67
+ expect(result.size).toBe(1);
68
+ });
69
+ it("calls onProgress for each file", async () => {
70
+ mockWalk.mockImplementation(async ({ map }) => {
71
+ await map("a.ts", [makeEntry("sha1".padEnd(40, "0"))]);
72
+ await map("b.ts", [makeEntry("sha2".padEnd(40, "0"))]);
73
+ });
74
+ const repo = makeRepo();
75
+ const calls = [];
76
+ await repo.getFileRevisions(["a.ts", "b.ts"], (done, total) => calls.push([done, total]));
77
+ expect(calls).toEqual([[1, 2], [2, 2]]);
78
+ });
79
+ it("uses computed SHA for dirty files", async () => {
80
+ // Mark src/bar.ts as dirty (workdir !== head)
81
+ mockStatusMatrix.mockResolvedValue([["src/bar.ts", 1, 2, 1]]);
82
+ // Tree contains old SHA for src/bar.ts
83
+ const oldSha = "oldshaold".padEnd(40, "0");
84
+ mockWalk.mockImplementation(async ({ map }) => {
85
+ await map("src/bar.ts", [makeEntry(oldSha)]);
86
+ });
87
+ const repo = makeRepo();
88
+ const result = await repo.getFileRevisions(["src/bar.ts"]);
89
+ // Should NOT use the tree SHA — must compute from file content
90
+ expect(result.get("src/bar.ts")).not.toBe(oldSha);
91
+ // The mocked readFileSync returns Buffer('hello'), so sha1 of "blob 5\0hello"
92
+ expect(result.get("src/bar.ts")).toMatch(/^[0-9a-f]{40}$/);
93
+ });
94
+ });
95
+ // ── getChangedFilesSince ───────────────────────────────────────────────────────
96
+ describe("getChangedFilesSince", () => {
97
+ it("returns null when walk throws (unknown revision)", async () => {
98
+ mockWalk.mockRejectedValue(new Error("unknown commit"));
99
+ const repo = makeRepo();
100
+ const result = await repo.getChangedFilesSince("unknownsha");
101
+ expect(result).toBeNull();
102
+ });
103
+ it("categorises added, modified, and deleted files", async () => {
104
+ const sha1 = "aaaa".padEnd(40, "0");
105
+ const sha2 = "bbbb".padEnd(40, "0");
106
+ const sha3 = "cccc".padEnd(40, "0");
107
+ mockWalk.mockImplementation(async ({ map }) => {
108
+ // added: exists in HEAD only
109
+ await map("new.ts", [makeEntry(sha1), null]);
110
+ // deleted: exists in prev only
111
+ await map("removed.ts", [null, makeEntry(sha2)]);
112
+ // modified: different OIDs
113
+ await map("changed.ts", [makeEntry(sha1), makeEntry(sha3)]);
114
+ // unchanged: same OIDs
115
+ await map("same.ts", [makeEntry(sha1), makeEntry(sha1)]);
116
+ // root entry: should be skipped
117
+ await map(".", [makeEntry(sha1), makeEntry(sha1)]);
118
+ });
119
+ const repo = makeRepo();
120
+ const result = await repo.getChangedFilesSince(PREV_SHA);
121
+ expect(result).not.toBeNull();
122
+ expect(result.added).toContain("new.ts");
123
+ expect(result.deleted).toContain("removed.ts");
124
+ expect(result.modified).toContain("changed.ts");
125
+ expect(result.added).not.toContain("same.ts");
126
+ expect(result.modified).not.toContain("same.ts");
127
+ });
128
+ it("skips tree entries when walking two trees", async () => {
129
+ mockWalk.mockImplementation(async ({ map }) => {
130
+ // directory entry — must be skipped
131
+ await map("src", [makeEntry("sha", "tree"), makeEntry("sha", "tree")]);
132
+ });
133
+ const repo = makeRepo();
134
+ const result = await repo.getChangedFilesSince(PREV_SHA);
135
+ expect(result).toEqual({ added: [], modified: [], deleted: [] });
136
+ });
137
+ });
138
+ // ── getContext ─────────────────────────────────────────────────────────────────
139
+ describe("getContext", () => {
140
+ it("returns the current branch name", async () => {
141
+ const repo = makeRepo();
142
+ expect(await repo.getContext()).toBe("main");
143
+ });
144
+ it("returns HEAD when currentBranch throws", async () => {
145
+ mockCurrentBranch.mockRejectedValue(new Error("detached"));
146
+ const repo = makeRepo();
147
+ expect(await repo.getContext()).toBe("HEAD");
148
+ });
149
+ it("returns HEAD when currentBranch returns null (detached HEAD)", async () => {
150
+ mockCurrentBranch.mockResolvedValue(null);
151
+ const repo = makeRepo();
152
+ expect(await repo.getContext()).toBe("HEAD");
153
+ });
154
+ });
155
+ // ── getPendingChanges ──────────────────────────────────────────────────────────
156
+ describe("getPendingChanges", () => {
157
+ it("returns dirty files from statusMatrix", async () => {
158
+ mockStatusMatrix.mockResolvedValue([
159
+ ["clean.ts", 1, 1, 1], // clean — head=workdir=stage
160
+ ["dirty.ts", 1, 2, 1], // modified workdir
161
+ ["staged.ts", 1, 1, 2], // staged
162
+ ]);
163
+ const repo = makeRepo();
164
+ const pending = await repo.getPendingChanges();
165
+ expect(pending.has("dirty.ts")).toBe(true);
166
+ expect(pending.has("staged.ts")).toBe(true);
167
+ expect(pending.has("clean.ts")).toBe(false);
168
+ });
169
+ it("returns empty set when statusMatrix throws", async () => {
170
+ mockStatusMatrix.mockRejectedValue(new Error("not a git repo"));
171
+ const repo = makeRepo();
172
+ const pending = await repo.getPendingChanges();
173
+ expect(pending.size).toBe(0);
174
+ });
175
+ });
176
+ // ── factory export ─────────────────────────────────────────────────────────────
177
+ describe("createSourceRepository", () => {
178
+ it("creates an instance with the provided dir", async () => {
179
+ const { createSourceRepository } = await import("./index.js");
180
+ const repo = createSourceRepository({ dir: "/my/repo" });
181
+ expect(repo.rootUri).toBe("/my/repo");
182
+ });
183
+ it("defaults to process.cwd() when dir is not specified", async () => {
184
+ const { createSourceRepository } = await import("./index.js");
185
+ const repo = createSourceRepository({});
186
+ expect(repo.rootUri).toBe(process.cwd());
187
+ });
188
+ });
189
+ //# sourceMappingURL=isomorphic-git-source-repo.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isomorphic-git-source-repo.test.js","sourceRoot":"","sources":["../src/isomorphic-git-source-repo.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@vivantel/virage-git-isomorphic",
3
+ "version": "0.1.1",
4
+ "description": "Pure-JS git source repository for Virage using isomorphic-git (no subprocess spawning)",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "sideEffects": false,
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "rag-plugin": {
23
+ "type": "source",
24
+ "key": "isomorphic-git",
25
+ "label": "isomorphic-git (pure JS, no subprocess spawning)"
26
+ },
27
+ "scripts": {
28
+ "build": "tsc",
29
+ "type-check": "tsc --noEmit",
30
+ "test": "vitest run",
31
+ "format:check": "prettier --check src/",
32
+ "lint": "eslint src/",
33
+ "prepublishOnly": "npm run build"
34
+ },
35
+ "keywords": [
36
+ "rag",
37
+ "git",
38
+ "isomorphic-git",
39
+ "source-repository"
40
+ ],
41
+ "author": "Vivantel",
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "https://github.com/vivantel/virage",
46
+ "directory": "packages/virage-git-isomorphic"
47
+ },
48
+ "dependencies": {
49
+ "isomorphic-git": "^1.29.0"
50
+ },
51
+ "peerDependencies": {
52
+ "@vivantel/virage-core": "*"
53
+ },
54
+ "devDependencies": {
55
+ "@vivantel/virage-core": "0.2.33",
56
+ "@types/node": "^25.9.3",
57
+ "typescript": "^6.0.3",
58
+ "vitest": "^4.1.9"
59
+ },
60
+ "engines": {
61
+ "node": ">=18.0.0"
62
+ }
63
+ }