@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.
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/isomorphic-git-source-repo.d.ts +16 -0
- package/dist/isomorphic-git-source-repo.d.ts.map +1 -0
- package/dist/isomorphic-git-source-repo.js +154 -0
- package/dist/isomorphic-git-source-repo.js.map +1 -0
- package/dist/isomorphic-git-source-repo.test.d.ts +2 -0
- package/dist/isomorphic-git-source-repo.test.d.ts.map +1 -0
- package/dist/isomorphic-git-source-repo.test.js +189 -0
- package/dist/isomorphic-git-source-repo.test.js.map +1 -0
- package/package.json +63 -0
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|