shell-dsl 0.0.34 → 0.0.35

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.
Files changed (70) hide show
  1. package/README.md +16 -3
  2. package/dist/cjs/package.json +1 -1
  3. package/dist/cjs/src/fs/memfs-adapter.cjs +56 -2
  4. package/dist/cjs/src/fs/memfs-adapter.cjs.map +3 -3
  5. package/dist/cjs/src/fs/real-fs.cjs +134 -3
  6. package/dist/cjs/src/fs/real-fs.cjs.map +3 -3
  7. package/dist/cjs/src/fs/special-files.cjs +3 -2
  8. package/dist/cjs/src/fs/special-files.cjs.map +3 -3
  9. package/dist/cjs/src/fs/web-fs.cjs +72 -3
  10. package/dist/cjs/src/fs/web-fs.cjs.map +3 -3
  11. package/dist/cjs/src/index.cjs.map +2 -2
  12. package/dist/cjs/src/types.cjs.map +2 -2
  13. package/dist/cjs/src/vcs/content.cjs +106 -0
  14. package/dist/cjs/src/vcs/content.cjs.map +10 -0
  15. package/dist/cjs/src/vcs/diff.cjs +72 -28
  16. package/dist/cjs/src/vcs/diff.cjs.map +3 -3
  17. package/dist/cjs/src/vcs/index.cjs.map +1 -1
  18. package/dist/cjs/src/vcs/objects.cjs +141 -0
  19. package/dist/cjs/src/vcs/objects.cjs.map +10 -0
  20. package/dist/cjs/src/vcs/rules.cjs +6 -3
  21. package/dist/cjs/src/vcs/rules.cjs.map +3 -3
  22. package/dist/cjs/src/vcs/snapshot.cjs +89 -39
  23. package/dist/cjs/src/vcs/snapshot.cjs.map +3 -3
  24. package/dist/cjs/src/vcs/storage.cjs +44 -3
  25. package/dist/cjs/src/vcs/storage.cjs.map +3 -3
  26. package/dist/cjs/src/vcs/text-diff.cjs +219 -0
  27. package/dist/cjs/src/vcs/text-diff.cjs.map +10 -0
  28. package/dist/cjs/src/vcs/vcs.cjs +108 -61
  29. package/dist/cjs/src/vcs/vcs.cjs.map +3 -3
  30. package/dist/mjs/package.json +1 -1
  31. package/dist/mjs/src/fs/memfs-adapter.mjs +57 -2
  32. package/dist/mjs/src/fs/memfs-adapter.mjs.map +3 -3
  33. package/dist/mjs/src/fs/real-fs.mjs +135 -3
  34. package/dist/mjs/src/fs/real-fs.mjs.map +3 -3
  35. package/dist/mjs/src/fs/special-files.mjs +3 -2
  36. package/dist/mjs/src/fs/special-files.mjs.map +3 -3
  37. package/dist/mjs/src/fs/web-fs.mjs +72 -3
  38. package/dist/mjs/src/fs/web-fs.mjs.map +3 -3
  39. package/dist/mjs/src/index.mjs.map +2 -2
  40. package/dist/mjs/src/types.mjs.map +2 -2
  41. package/dist/mjs/src/vcs/content.mjs +66 -0
  42. package/dist/mjs/src/vcs/content.mjs.map +10 -0
  43. package/dist/mjs/src/vcs/diff.mjs +72 -28
  44. package/dist/mjs/src/vcs/diff.mjs.map +3 -3
  45. package/dist/mjs/src/vcs/index.mjs.map +1 -1
  46. package/dist/mjs/src/vcs/objects.mjs +106 -0
  47. package/dist/mjs/src/vcs/objects.mjs.map +10 -0
  48. package/dist/mjs/src/vcs/rules.mjs +6 -3
  49. package/dist/mjs/src/vcs/rules.mjs.map +3 -3
  50. package/dist/mjs/src/vcs/snapshot.mjs +89 -39
  51. package/dist/mjs/src/vcs/snapshot.mjs.map +3 -3
  52. package/dist/mjs/src/vcs/storage.mjs +45 -3
  53. package/dist/mjs/src/vcs/storage.mjs.map +3 -3
  54. package/dist/mjs/src/vcs/text-diff.mjs +179 -0
  55. package/dist/mjs/src/vcs/text-diff.mjs.map +10 -0
  56. package/dist/mjs/src/vcs/vcs.mjs +115 -63
  57. package/dist/mjs/src/vcs/vcs.mjs.map +3 -3
  58. package/dist/types/src/fs/real-fs.d.ts +12 -1
  59. package/dist/types/src/index.d.ts +2 -2
  60. package/dist/types/src/types.d.ts +10 -0
  61. package/dist/types/src/vcs/content.d.ts +6 -0
  62. package/dist/types/src/vcs/diff.d.ts +10 -7
  63. package/dist/types/src/vcs/index.d.ts +1 -1
  64. package/dist/types/src/vcs/objects.d.ts +22 -0
  65. package/dist/types/src/vcs/snapshot.d.ts +13 -8
  66. package/dist/types/src/vcs/storage.d.ts +7 -1
  67. package/dist/types/src/vcs/text-diff.d.ts +1 -0
  68. package/dist/types/src/vcs/types.d.ts +20 -5
  69. package/dist/types/src/vcs/vcs.d.ts +6 -0
  70. package/package.json +7 -2
@@ -0,0 +1,219 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ function __accessProp(key) {
6
+ return this[key];
7
+ }
8
+ var __toCommonJS = (from) => {
9
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
10
+ if (entry)
11
+ return entry;
12
+ entry = __defProp({}, "__esModule", { value: true });
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (var key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(entry, key))
16
+ __defProp(entry, key, {
17
+ get: __accessProp.bind(from, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
21
+ __moduleCache.set(from, entry);
22
+ return entry;
23
+ };
24
+ var __moduleCache;
25
+ var __returnValue = (v) => v;
26
+ function __exportSetter(name, newValue) {
27
+ this[name] = __returnValue.bind(null, newValue);
28
+ }
29
+ var __export = (target, all) => {
30
+ for (var name in all)
31
+ __defProp(target, name, {
32
+ get: all[name],
33
+ enumerable: true,
34
+ configurable: true,
35
+ set: __exportSetter.bind(all, name)
36
+ });
37
+ };
38
+
39
+ // src/vcs/text-diff.ts
40
+ var exports_text_diff = {};
41
+ __export(exports_text_diff, {
42
+ createUnifiedPatch: () => createUnifiedPatch
43
+ });
44
+ module.exports = __toCommonJS(exports_text_diff);
45
+ var CONTEXT_LINES = 3;
46
+ function createUnifiedPatch(path, previousText, nextText) {
47
+ if (previousText === nextText) {
48
+ return;
49
+ }
50
+ const previousLines = splitLines(previousText);
51
+ const nextLines = splitLines(nextText);
52
+ const operations = diffLines(previousLines, nextLines);
53
+ const hunks = collectHunks(operations);
54
+ if (hunks.length === 0) {
55
+ return;
56
+ }
57
+ const lines = [`--- a/${path}`, `+++ b/${path}`];
58
+ for (const hunk of hunks) {
59
+ lines.push(formatHunkHeader(operations, hunk));
60
+ for (let i = hunk.start;i < hunk.end; i++) {
61
+ const operation = operations[i];
62
+ const prefix = operation.type === "equal" ? " " : operation.type === "delete" ? "-" : "+";
63
+ lines.push(prefix + operation.line);
64
+ }
65
+ }
66
+ return lines.join(`
67
+ `);
68
+ }
69
+ function splitLines(text) {
70
+ if (!text) {
71
+ return [];
72
+ }
73
+ const normalized = text.replace(/\r\n/g, `
74
+ `);
75
+ const parts = normalized.split(`
76
+ `);
77
+ if (normalized.endsWith(`
78
+ `)) {
79
+ parts.pop();
80
+ }
81
+ return parts;
82
+ }
83
+ function diffLines(previousLines, nextLines) {
84
+ const previousCount = previousLines.length;
85
+ const nextCount = nextLines.length;
86
+ const max = previousCount + nextCount;
87
+ const trace = [];
88
+ let frontier = new Map;
89
+ frontier.set(1, 0);
90
+ for (let depth = 0;depth <= max; depth++) {
91
+ trace.push(new Map(frontier));
92
+ for (let diagonal = -depth;diagonal <= depth; diagonal += 2) {
93
+ const nextX = frontier.get(diagonal + 1) ?? 0;
94
+ const prevX = frontier.get(diagonal - 1) ?? 0;
95
+ let x;
96
+ if (diagonal === -depth || diagonal !== depth && prevX < nextX) {
97
+ x = nextX;
98
+ } else {
99
+ x = prevX + 1;
100
+ }
101
+ let y = x - diagonal;
102
+ while (x < previousCount && y < nextCount && previousLines[x] === nextLines[y]) {
103
+ x++;
104
+ y++;
105
+ }
106
+ frontier.set(diagonal, x);
107
+ if (x >= previousCount && y >= nextCount) {
108
+ return backtrack(trace, previousLines, nextLines);
109
+ }
110
+ }
111
+ }
112
+ return [];
113
+ }
114
+ function backtrack(trace, previousLines, nextLines) {
115
+ const operations = [];
116
+ let x = previousLines.length;
117
+ let y = nextLines.length;
118
+ for (let depth = trace.length - 1;depth >= 0; depth--) {
119
+ const frontier = trace[depth];
120
+ const diagonal = x - y;
121
+ let previousDiagonal;
122
+ if (diagonal === -depth || diagonal !== depth && (frontier.get(diagonal - 1) ?? 0) < (frontier.get(diagonal + 1) ?? 0)) {
123
+ previousDiagonal = diagonal + 1;
124
+ } else {
125
+ previousDiagonal = diagonal - 1;
126
+ }
127
+ const previousX = frontier.get(previousDiagonal) ?? 0;
128
+ const previousY = previousX - previousDiagonal;
129
+ while (x > previousX && y > previousY) {
130
+ operations.push({ type: "equal", line: previousLines[x - 1] });
131
+ x--;
132
+ y--;
133
+ }
134
+ if (depth === 0) {
135
+ break;
136
+ }
137
+ if (x === previousX) {
138
+ operations.push({ type: "insert", line: nextLines[y - 1] });
139
+ y--;
140
+ } else {
141
+ operations.push({ type: "delete", line: previousLines[x - 1] });
142
+ x--;
143
+ }
144
+ }
145
+ while (x > 0 && y > 0) {
146
+ operations.push({ type: "equal", line: previousLines[x - 1] });
147
+ x--;
148
+ y--;
149
+ }
150
+ while (x > 0) {
151
+ operations.push({ type: "delete", line: previousLines[x - 1] });
152
+ x--;
153
+ }
154
+ while (y > 0) {
155
+ operations.push({ type: "insert", line: nextLines[y - 1] });
156
+ y--;
157
+ }
158
+ return operations.reverse();
159
+ }
160
+ function collectHunks(operations) {
161
+ const changeRanges = [];
162
+ let rangeStart = null;
163
+ for (let index = 0;index < operations.length; index++) {
164
+ if (operations[index].type === "equal") {
165
+ continue;
166
+ }
167
+ if (rangeStart === null) {
168
+ rangeStart = Math.max(0, index - CONTEXT_LINES);
169
+ }
170
+ let rangeEnd = Math.min(operations.length, index + CONTEXT_LINES + 1);
171
+ while (rangeEnd < operations.length && operations.slice(index + 1, rangeEnd).some((op) => op.type !== "equal")) {
172
+ rangeEnd = Math.min(operations.length, rangeEnd + CONTEXT_LINES);
173
+ }
174
+ const previousRange = changeRanges[changeRanges.length - 1];
175
+ if (previousRange && rangeStart <= previousRange.end) {
176
+ previousRange.end = Math.max(previousRange.end, rangeEnd);
177
+ } else {
178
+ changeRanges.push({ start: rangeStart, end: rangeEnd });
179
+ }
180
+ rangeStart = null;
181
+ }
182
+ return changeRanges;
183
+ }
184
+ function formatHunkHeader(operations, hunk) {
185
+ let oldStart = 1;
186
+ let newStart = 1;
187
+ for (let index = 0;index < hunk.start; index++) {
188
+ const operation = operations[index];
189
+ if (operation.type !== "insert") {
190
+ oldStart++;
191
+ }
192
+ if (operation.type !== "delete") {
193
+ newStart++;
194
+ }
195
+ }
196
+ let oldCount = 0;
197
+ let newCount = 0;
198
+ for (let index = hunk.start;index < hunk.end; index++) {
199
+ const operation = operations[index];
200
+ if (operation.type !== "insert") {
201
+ oldCount++;
202
+ }
203
+ if (operation.type !== "delete") {
204
+ newCount++;
205
+ }
206
+ }
207
+ return `@@ -${formatRange(oldStart, oldCount)} +${formatRange(newStart, newCount)} @@`;
208
+ }
209
+ function formatRange(start, count) {
210
+ if (count === 0) {
211
+ return `${start - 1},0`;
212
+ }
213
+ if (count === 1) {
214
+ return String(start);
215
+ }
216
+ return `${start},${count}`;
217
+ }
218
+
219
+ //# debugId=D08732997986015F64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/vcs/text-diff.ts"],
4
+ "sourcesContent": [
5
+ "interface DiffOp {\n type: \"equal\" | \"insert\" | \"delete\";\n line: string;\n}\n\ninterface HunkRange {\n start: number;\n end: number;\n}\n\nconst CONTEXT_LINES = 3;\n\nexport function createUnifiedPatch(path: string, previousText: string, nextText: string): string | undefined {\n if (previousText === nextText) {\n return undefined;\n }\n\n const previousLines = splitLines(previousText);\n const nextLines = splitLines(nextText);\n const operations = diffLines(previousLines, nextLines);\n const hunks = collectHunks(operations);\n\n if (hunks.length === 0) {\n return undefined;\n }\n\n const lines = [`--- a/${path}`, `+++ b/${path}`];\n for (const hunk of hunks) {\n lines.push(formatHunkHeader(operations, hunk));\n for (let i = hunk.start; i < hunk.end; i++) {\n const operation = operations[i]!;\n const prefix =\n operation.type === \"equal\" ? \" \" : operation.type === \"delete\" ? \"-\" : \"+\";\n lines.push(prefix + operation.line);\n }\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction splitLines(text: string): string[] {\n if (!text) {\n return [];\n }\n const normalized = text.replace(/\\r\\n/g, \"\\n\");\n const parts = normalized.split(\"\\n\");\n if (normalized.endsWith(\"\\n\")) {\n parts.pop();\n }\n return parts;\n}\n\nfunction diffLines(previousLines: string[], nextLines: string[]): DiffOp[] {\n const previousCount = previousLines.length;\n const nextCount = nextLines.length;\n const max = previousCount + nextCount;\n const trace: Map<number, number>[] = [];\n let frontier = new Map<number, number>();\n frontier.set(1, 0);\n\n for (let depth = 0; depth <= max; depth++) {\n trace.push(new Map(frontier));\n\n for (let diagonal = -depth; diagonal <= depth; diagonal += 2) {\n const nextX = frontier.get(diagonal + 1) ?? 0;\n const prevX = frontier.get(diagonal - 1) ?? 0;\n let x: number;\n\n if (diagonal === -depth || (diagonal !== depth && prevX < nextX)) {\n x = nextX;\n } else {\n x = prevX + 1;\n }\n\n let y = x - diagonal;\n while (\n x < previousCount &&\n y < nextCount &&\n previousLines[x] === nextLines[y]\n ) {\n x++;\n y++;\n }\n\n frontier.set(diagonal, x);\n\n if (x >= previousCount && y >= nextCount) {\n return backtrack(trace, previousLines, nextLines);\n }\n }\n }\n\n return [];\n}\n\nfunction backtrack(\n trace: Map<number, number>[],\n previousLines: string[],\n nextLines: string[],\n): DiffOp[] {\n const operations: DiffOp[] = [];\n let x = previousLines.length;\n let y = nextLines.length;\n\n for (let depth = trace.length - 1; depth >= 0; depth--) {\n const frontier = trace[depth]!;\n const diagonal = x - y;\n\n let previousDiagonal: number;\n if (\n diagonal === -depth ||\n (diagonal !== depth && (frontier.get(diagonal - 1) ?? 0) < (frontier.get(diagonal + 1) ?? 0))\n ) {\n previousDiagonal = diagonal + 1;\n } else {\n previousDiagonal = diagonal - 1;\n }\n\n const previousX = frontier.get(previousDiagonal) ?? 0;\n const previousY = previousX - previousDiagonal;\n\n while (x > previousX && y > previousY) {\n operations.push({ type: \"equal\", line: previousLines[x - 1]! });\n x--;\n y--;\n }\n\n if (depth === 0) {\n break;\n }\n\n if (x === previousX) {\n operations.push({ type: \"insert\", line: nextLines[y - 1]! });\n y--;\n } else {\n operations.push({ type: \"delete\", line: previousLines[x - 1]! });\n x--;\n }\n }\n\n while (x > 0 && y > 0) {\n operations.push({ type: \"equal\", line: previousLines[x - 1]! });\n x--;\n y--;\n }\n while (x > 0) {\n operations.push({ type: \"delete\", line: previousLines[x - 1]! });\n x--;\n }\n while (y > 0) {\n operations.push({ type: \"insert\", line: nextLines[y - 1]! });\n y--;\n }\n\n return operations.reverse();\n}\n\nfunction collectHunks(operations: DiffOp[]): HunkRange[] {\n const changeRanges: HunkRange[] = [];\n let rangeStart: number | null = null;\n\n for (let index = 0; index < operations.length; index++) {\n if (operations[index]!.type === \"equal\") {\n continue;\n }\n if (rangeStart === null) {\n rangeStart = Math.max(0, index - CONTEXT_LINES);\n }\n let rangeEnd = Math.min(operations.length, index + CONTEXT_LINES + 1);\n\n while (\n rangeEnd < operations.length &&\n operations.slice(index + 1, rangeEnd).some((op) => op.type !== \"equal\")\n ) {\n rangeEnd = Math.min(operations.length, rangeEnd + CONTEXT_LINES);\n }\n\n const previousRange = changeRanges[changeRanges.length - 1];\n if (previousRange && rangeStart <= previousRange.end) {\n previousRange.end = Math.max(previousRange.end, rangeEnd);\n } else {\n changeRanges.push({ start: rangeStart, end: rangeEnd });\n }\n rangeStart = null;\n }\n\n return changeRanges;\n}\n\nfunction formatHunkHeader(operations: DiffOp[], hunk: HunkRange): string {\n let oldStart = 1;\n let newStart = 1;\n\n for (let index = 0; index < hunk.start; index++) {\n const operation = operations[index]!;\n if (operation.type !== \"insert\") {\n oldStart++;\n }\n if (operation.type !== \"delete\") {\n newStart++;\n }\n }\n\n let oldCount = 0;\n let newCount = 0;\n for (let index = hunk.start; index < hunk.end; index++) {\n const operation = operations[index]!;\n if (operation.type !== \"insert\") {\n oldCount++;\n }\n if (operation.type !== \"delete\") {\n newCount++;\n }\n }\n\n return `@@ -${formatRange(oldStart, oldCount)} +${formatRange(newStart, newCount)} @@`;\n}\n\nfunction formatRange(start: number, count: number): string {\n if (count === 0) {\n return `${start - 1},0`;\n }\n if (count === 1) {\n return String(start);\n }\n return `${start},${count}`;\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "D08732997986015F64756E2164756E21",
9
+ "names": []
10
+ }
@@ -44,6 +44,7 @@ __export(exports_vcs, {
44
44
  module.exports = __toCommonJS(exports_vcs);
45
45
  var import_storage = require("./storage.cjs");
46
46
  var import_diff = require("./diff.cjs");
47
+ var import_objects = require("./objects.cjs");
47
48
  var import_rules = require("./rules.cjs");
48
49
  var import_snapshot = require("./snapshot.cjs");
49
50
 
@@ -51,6 +52,7 @@ class VersionControlSystem {
51
52
  workFs;
52
53
  workPath;
53
54
  storage;
55
+ objectStore;
54
56
  vcsInternalPath;
55
57
  rules;
56
58
  constructor(config) {
@@ -59,6 +61,7 @@ class VersionControlSystem {
59
61
  const metaFs = config.vcsPath?.fs ?? config.fs;
60
62
  const metaPath = config.vcsPath?.path ?? metaFs.resolve(config.path, ".vcs");
61
63
  this.storage = new import_storage.VCSStorage(metaFs, metaPath);
64
+ this.objectStore = new import_objects.VCSObjectStore(this.storage.fileSystem, this.storage.resolve());
62
65
  this.vcsInternalPath = resolveInternalPath(config.fs, metaFs, this.workPath, metaPath);
63
66
  this.rules = new import_rules.VCSRules({
64
67
  internalPath: this.vcsInternalPath,
@@ -67,14 +70,19 @@ class VersionControlSystem {
67
70
  });
68
71
  }
69
72
  async init() {
70
- if (await this.storage.isInitialized())
73
+ if (await this.storage.isInitialized()) {
74
+ await this.storage.assertSupportedFormat();
71
75
  return;
76
+ }
72
77
  await this.storage.initialize();
78
+ await this.objectStore.initialize();
73
79
  }
74
80
  async ensureInit() {
75
81
  if (!await this.storage.isInitialized()) {
76
82
  await this.init();
83
+ return;
77
84
  }
85
+ await this.storage.assertSupportedFormat();
78
86
  }
79
87
  async resolveHead() {
80
88
  const head = await this.storage.readHead();
@@ -95,44 +103,57 @@ class VersionControlSystem {
95
103
  const rev = await this.storage.readRevision(revision);
96
104
  return rev.tree;
97
105
  }
106
+ async currentIndex() {
107
+ return this.storage.readIndex();
108
+ }
98
109
  async commit(message, opts) {
99
110
  await this.ensureInit();
100
111
  const { branch, revision: parentId } = await this.resolveHead();
101
112
  const parentManifest = parentId !== null ? (await this.storage.readRevision(parentId)).tree : {};
113
+ const previousIndex = await this.currentIndex();
114
+ const working = await import_snapshot.buildTreeManifest(this.workFs, this.workPath, {
115
+ objectStore: this.objectStore,
116
+ rules: this.rules,
117
+ trackedPaths: Object.keys(parentManifest),
118
+ indexEntries: previousIndex
119
+ });
102
120
  let newTree;
103
121
  let changes;
104
122
  if (opts?.paths && opts.paths.length > 0) {
105
- const fullManifest = await import_snapshot.buildTreeManifest(this.workFs, this.workPath, {
106
- rules: this.rules,
107
- trackedPaths: Object.keys(parentManifest)
108
- });
109
- const matchedPaths = filterPathsByGlobs(Object.keys(fullManifest), opts.paths);
110
- newTree = { ...parentManifest };
123
+ const matchedPaths = filterPathsByGlobs(Object.keys(working.manifest), opts.paths);
111
124
  const parentMatchedPaths = filterPathsByGlobs(Object.keys(parentManifest), opts.paths);
112
- for (const p of parentMatchedPaths) {
113
- if (!fullManifest[p]) {
114
- delete newTree[p];
125
+ newTree = { ...parentManifest };
126
+ for (const path of parentMatchedPaths) {
127
+ if (!working.manifest[path]) {
128
+ delete newTree[path];
115
129
  }
116
130
  }
117
- for (const p of matchedPaths) {
118
- newTree[p] = fullManifest[p];
131
+ for (const path of matchedPaths) {
132
+ newTree[path] = working.manifest[path];
119
133
  }
120
134
  const relevantBefore = {};
121
135
  const relevantAfter = {};
122
136
  const allRelevant = new Set([...matchedPaths, ...parentMatchedPaths]);
123
- for (const p of allRelevant) {
124
- if (parentManifest[p])
125
- relevantBefore[p] = parentManifest[p];
126
- if (newTree[p])
127
- relevantAfter[p] = newTree[p];
137
+ for (const path of allRelevant) {
138
+ if (parentManifest[path])
139
+ relevantBefore[path] = parentManifest[path];
140
+ if (newTree[path])
141
+ relevantAfter[path] = newTree[path];
128
142
  }
129
- changes = import_diff.diffManifests(relevantBefore, relevantAfter, this.rules);
143
+ changes = await import_diff.diffManifests(relevantBefore, relevantAfter, {
144
+ rules: this.rules,
145
+ objectStore: this.objectStore,
146
+ beforeIndex: previousIndex,
147
+ afterIndex: working.indexEntries
148
+ });
130
149
  } else {
131
- newTree = await import_snapshot.buildTreeManifest(this.workFs, this.workPath, {
150
+ newTree = working.manifest;
151
+ changes = await import_diff.diffManifests(parentManifest, newTree, {
132
152
  rules: this.rules,
133
- trackedPaths: Object.keys(parentManifest)
153
+ objectStore: this.objectStore,
154
+ beforeIndex: previousIndex,
155
+ afterIndex: working.indexEntries
134
156
  });
135
- changes = import_diff.diffManifests(parentManifest, newTree, this.rules);
136
157
  }
137
158
  if (changes.length === 0) {
138
159
  throw new Error("nothing to commit");
@@ -148,6 +169,7 @@ class VersionControlSystem {
148
169
  tree: newTree
149
170
  };
150
171
  await this.storage.writeRevision(rev);
172
+ await this.storage.writeIndex(working.indexEntries);
151
173
  if (branch) {
152
174
  await this.storage.writeBranch(branch, { revision: id });
153
175
  } else {
@@ -179,30 +201,33 @@ class VersionControlSystem {
179
201
  }
180
202
  const currentManifest = await this.headManifest();
181
203
  if (isPartial) {
182
- await import_snapshot.restoreTree(this.workFs, this.workPath, rev.tree, {
204
+ await import_snapshot.restoreTree(this.workFs, this.workPath, rev.tree, this.objectStore, {
183
205
  fullRestore: false,
184
206
  paths: opts.paths,
185
207
  rules: this.rules,
186
208
  trackedPaths: Object.keys(currentManifest)
187
209
  });
188
- } else {
189
- if (!opts?.force) {
190
- const changes = await this.status();
191
- if (changes.length > 0) {
192
- throw new Error("working tree has uncommitted changes (use force to discard)");
193
- }
194
- }
195
- await import_snapshot.restoreTree(this.workFs, this.workPath, rev.tree, {
196
- fullRestore: true,
197
- rules: this.rules,
198
- trackedPaths: Object.keys(currentManifest)
199
- });
200
- if (targetBranch) {
201
- await this.storage.writeHead({ ref: `refs/heads/${targetBranch}` });
202
- } else {
203
- await this.storage.writeHead({ revision: targetRevision });
210
+ const updatedIndex = await import_snapshot.updateIndexForScopedPaths(this.workFs, this.workPath, rev.tree, this.objectStore, await this.currentIndex(), opts.paths);
211
+ await this.storage.writeIndex(updatedIndex);
212
+ return;
213
+ }
214
+ if (!opts?.force) {
215
+ const changes = await this.status();
216
+ if (changes.length > 0) {
217
+ throw new Error("working tree has uncommitted changes (use force to discard)");
204
218
  }
205
219
  }
220
+ await import_snapshot.restoreTree(this.workFs, this.workPath, rev.tree, this.objectStore, {
221
+ fullRestore: true,
222
+ rules: this.rules,
223
+ trackedPaths: Object.keys(currentManifest)
224
+ });
225
+ await this.storage.writeIndex(await import_snapshot.rebuildIndexForManifest(this.workFs, this.workPath, rev.tree, this.objectStore));
226
+ if (targetBranch) {
227
+ await this.storage.writeHead({ ref: `refs/heads/${targetBranch}` });
228
+ } else {
229
+ await this.storage.writeHead({ revision: targetRevision });
230
+ }
206
231
  }
207
232
  async branch(name) {
208
233
  await this.ensureInit();
@@ -258,29 +283,22 @@ class VersionControlSystem {
258
283
  } catch {
259
284
  break;
260
285
  }
261
- const changedPaths = rev.changes.map((c) => c.path);
286
+ const changedPaths = rev.changes.map((change) => change.path);
262
287
  if (opts?.path) {
263
- const matchesPath = changedPaths.some((p) => import_rules.matchVCSPath(opts.path, p));
264
- if (matchesPath) {
265
- entries.push({
266
- id: rev.id,
267
- parent: rev.parent,
268
- branch: rev.branch,
269
- message: rev.message,
270
- timestamp: rev.timestamp,
271
- paths: changedPaths
272
- });
288
+ const matchesPath = changedPaths.some((path) => import_rules.matchVCSPath(opts.path, path));
289
+ if (!matchesPath) {
290
+ currentId = rev.parent;
291
+ continue;
273
292
  }
274
- } else {
275
- entries.push({
276
- id: rev.id,
277
- parent: rev.parent,
278
- branch: rev.branch,
279
- message: rev.message,
280
- timestamp: rev.timestamp,
281
- paths: changedPaths
282
- });
283
293
  }
294
+ entries.push({
295
+ id: rev.id,
296
+ parent: rev.parent,
297
+ branch: rev.branch,
298
+ message: rev.message,
299
+ timestamp: rev.timestamp,
300
+ paths: changedPaths
301
+ });
284
302
  currentId = rev.parent;
285
303
  }
286
304
  return entries;
@@ -288,13 +306,42 @@ class VersionControlSystem {
288
306
  async status() {
289
307
  await this.ensureInit();
290
308
  const manifest = await this.headManifest();
291
- return import_diff.diffWorkingTree(this.workFs, this.workPath, manifest, this.rules);
309
+ const previousIndex = await this.currentIndex();
310
+ const working = await import_snapshot.buildTreeManifest(this.workFs, this.workPath, {
311
+ objectStore: this.objectStore,
312
+ rules: this.rules,
313
+ trackedPaths: Object.keys(manifest),
314
+ indexEntries: previousIndex
315
+ });
316
+ await this.storage.writeIndex(working.indexEntries);
317
+ return import_diff.diffManifests(manifest, working.manifest, {
318
+ rules: this.rules,
319
+ objectStore: this.objectStore,
320
+ beforeIndex: previousIndex,
321
+ afterIndex: working.indexEntries
322
+ });
292
323
  }
293
324
  async diff(revA, revB) {
294
325
  await this.ensureInit();
295
326
  const a = await this.storage.readRevision(revA);
296
327
  const b = await this.storage.readRevision(revB);
297
- return import_diff.diffManifests(a.tree, b.tree, this.rules);
328
+ return import_diff.diffManifests(a.tree, b.tree, {
329
+ rules: this.rules,
330
+ objectStore: this.objectStore
331
+ });
332
+ }
333
+ async readBlob(blobId, encoding) {
334
+ const content = await this.objectStore.readBlob(blobId);
335
+ return encoding ? content.toString(encoding) : content;
336
+ }
337
+ async readRevisionFile(revisionId, path, encoding) {
338
+ const revision = await this.storage.readRevision(revisionId);
339
+ const normalizedPath = path.replace(/^\/+/, "");
340
+ const entry = revision.tree[normalizedPath];
341
+ if (!entry || entry.kind === "directory") {
342
+ throw new Error(`file "${path}" not found in revision ${revisionId}`);
343
+ }
344
+ return this.readBlob(entry.blobId, encoding);
298
345
  }
299
346
  async head() {
300
347
  await this.ensureInit();
@@ -319,4 +366,4 @@ function normalizeFsPath(path) {
319
366
  return path.replace(/\\/g, "/").replace(/\/+$/, "");
320
367
  }
321
368
 
322
- //# debugId=B3A44192C38E782A64756E2164756E21
369
+ //# debugId=9D32EC405281839564756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/vcs/vcs.ts"],
4
4
  "sourcesContent": [
5
- "import type { VirtualFS } from \"../types.cjs\";\nimport type {\n VCSConfig,\n Revision,\n DiffEntry,\n TreeManifest,\n CommitOptions,\n CheckoutOptions,\n LogOptions,\n LogEntry,\n BranchInfo,\n} from \"./types.cjs\";\nimport { VCSStorage } from \"./storage.cjs\";\nimport { diffManifests, diffWorkingTree } from \"./diff.cjs\";\nimport { matchVCSPath, VCSRules } from \"./rules.cjs\";\nimport { buildTreeManifest, restoreTree } from \"./snapshot.cjs\";\n\nexport class VersionControlSystem {\n private readonly workFs: VirtualFS;\n private readonly workPath: string;\n private readonly storage: VCSStorage;\n private readonly vcsInternalPath: string;\n private readonly rules: VCSRules;\n\n constructor(config: VCSConfig) {\n this.workFs = config.fs;\n this.workPath = config.fs.resolve(config.path);\n\n const metaFs = config.vcsPath?.fs ?? config.fs;\n const metaPath = config.vcsPath?.path ?? metaFs.resolve(config.path, \".vcs\");\n this.storage = new VCSStorage(metaFs, metaPath);\n\n this.vcsInternalPath = resolveInternalPath(config.fs, metaFs, this.workPath, metaPath);\n\n this.rules = new VCSRules({\n internalPath: this.vcsInternalPath,\n ignore: config.ignore,\n attributes: config.attributes,\n });\n }\n\n /** Initialize the .vcs directory. Called automatically on first operation if needed. */\n async init(): Promise<void> {\n if (await this.storage.isInitialized()) return;\n await this.storage.initialize();\n }\n\n private async ensureInit(): Promise<void> {\n if (!(await this.storage.isInitialized())) {\n await this.init();\n }\n }\n\n /** Get the current HEAD revision number, or null if no commits yet. */\n private async resolveHead(): Promise<{ branch: string | null; revision: number | null }> {\n const head = await this.storage.readHead();\n if (head.revision !== undefined) {\n return { branch: null, revision: head.revision };\n }\n if (head.ref) {\n const branchName = head.ref.replace(\"refs/heads/\", \"\");\n const branchRef = await this.storage.readBranch(branchName);\n return { branch: branchName, revision: branchRef?.revision ?? null };\n }\n return { branch: null, revision: null };\n }\n\n /** Get current HEAD manifest, or empty if no commits. */\n private async headManifest(): Promise<TreeManifest> {\n const { revision } = await this.resolveHead();\n if (revision === null) return {};\n const rev = await this.storage.readRevision(revision);\n return rev.tree;\n }\n\n /** Commit all pending changes, or selective changes if paths are provided. */\n async commit(message: string, opts?: CommitOptions): Promise<Revision> {\n await this.ensureInit();\n\n const { branch, revision: parentId } = await this.resolveHead();\n const parentManifest = parentId !== null\n ? (await this.storage.readRevision(parentId)).tree\n : {};\n\n let newTree: TreeManifest;\n let changes: DiffEntry[];\n\n if (opts?.paths && opts.paths.length > 0) {\n // Selective commit: only include matching files\n const fullManifest = await buildTreeManifest(this.workFs, this.workPath, {\n rules: this.rules,\n trackedPaths: Object.keys(parentManifest),\n });\n const matchedPaths = filterPathsByGlobs(Object.keys(fullManifest), opts.paths);\n\n // Start with parent manifest, overlay matched files from working tree\n newTree = { ...parentManifest };\n\n // Also check for deletions: files in parent that match patterns but are gone from working tree\n const parentMatchedPaths = filterPathsByGlobs(Object.keys(parentManifest), opts.paths);\n for (const p of parentMatchedPaths) {\n if (!fullManifest[p]) {\n delete newTree[p]; // file was deleted\n }\n }\n\n for (const p of matchedPaths) {\n newTree[p] = fullManifest[p]!;\n }\n\n // Compute changes only for matched paths\n const relevantBefore: TreeManifest = {};\n const relevantAfter: TreeManifest = {};\n const allRelevant = new Set([...matchedPaths, ...parentMatchedPaths]);\n for (const p of allRelevant) {\n if (parentManifest[p]) relevantBefore[p] = parentManifest[p]!;\n if (newTree[p]) relevantAfter[p] = newTree[p]!;\n }\n changes = diffManifests(relevantBefore, relevantAfter, this.rules);\n } else {\n // Full commit\n newTree = await buildTreeManifest(this.workFs, this.workPath, {\n rules: this.rules,\n trackedPaths: Object.keys(parentManifest),\n });\n changes = diffManifests(parentManifest, newTree, this.rules);\n }\n\n if (changes.length === 0) {\n throw new Error(\"nothing to commit\");\n }\n\n const id = await this.storage.nextRevisionId();\n const rev: Revision = {\n id,\n parent: parentId,\n branch: branch ?? \"detached\",\n message,\n timestamp: new Date().toISOString(),\n changes,\n tree: newTree,\n };\n\n await this.storage.writeRevision(rev);\n\n // Update branch ref or HEAD\n if (branch) {\n await this.storage.writeBranch(branch, { revision: id });\n } else {\n await this.storage.writeHead({ revision: id });\n }\n\n return rev;\n }\n\n /** Checkout a revision number or branch name. */\n async checkout(target: string | number, opts?: CheckoutOptions): Promise<void> {\n await this.ensureInit();\n\n const isPartial = opts?.paths && opts.paths.length > 0;\n\n let targetRevision: number;\n let targetBranch: string | null = null;\n\n if (typeof target === \"string\") {\n // Check if it's a branch name\n const branchRef = await this.storage.readBranch(target);\n if (branchRef) {\n targetBranch = target;\n targetRevision = branchRef.revision;\n } else {\n throw new Error(`unknown branch or revision: \"${target}\"`);\n }\n } else {\n targetRevision = target;\n }\n\n // Verify revision exists\n let rev: Revision;\n try {\n rev = await this.storage.readRevision(targetRevision);\n } catch {\n throw new Error(`revision ${targetRevision} not found`);\n }\n\n const currentManifest = await this.headManifest();\n\n if (isPartial) {\n // Partial checkout: restore specific files, don't update HEAD\n await restoreTree(this.workFs, this.workPath, rev.tree, {\n fullRestore: false,\n paths: opts!.paths!,\n rules: this.rules,\n trackedPaths: Object.keys(currentManifest),\n });\n } else {\n // Full checkout\n if (!opts?.force) {\n const changes = await this.status();\n if (changes.length > 0) {\n throw new Error(\"working tree has uncommitted changes (use force to discard)\");\n }\n }\n\n await restoreTree(this.workFs, this.workPath, rev.tree, {\n fullRestore: true,\n rules: this.rules,\n trackedPaths: Object.keys(currentManifest),\n });\n\n // Update HEAD\n if (targetBranch) {\n await this.storage.writeHead({ ref: `refs/heads/${targetBranch}` });\n } else {\n await this.storage.writeHead({ revision: targetRevision });\n }\n }\n }\n\n /** Create a new branch at HEAD. */\n async branch(name: string): Promise<void> {\n await this.ensureInit();\n\n const existing = await this.storage.readBranch(name);\n if (existing) {\n throw new Error(`branch \"${name}\" already exists`);\n }\n\n const { revision } = await this.resolveHead();\n if (revision === null) {\n throw new Error(\"cannot create branch: no commits yet\");\n }\n\n await this.storage.writeBranch(name, { revision });\n }\n\n /** List all branches. */\n async branches(): Promise<BranchInfo[]> {\n await this.ensureInit();\n\n const names = await this.storage.listBranches();\n const head = await this.resolveHead();\n const result: BranchInfo[] = [];\n\n for (const name of names) {\n const ref = await this.storage.readBranch(name);\n if (ref) {\n result.push({\n name,\n revision: ref.revision,\n current: head.branch === name,\n });\n }\n }\n\n return result.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Get revision history. */\n async log(opts?: LogOptions): Promise<LogEntry[]> {\n await this.ensureInit();\n\n let startRevision: number | null;\n\n if (opts?.branch) {\n const branchRef = await this.storage.readBranch(opts.branch);\n if (!branchRef) throw new Error(`branch \"${opts.branch}\" not found`);\n startRevision = branchRef.revision;\n } else {\n const { revision } = await this.resolveHead();\n startRevision = revision;\n }\n\n if (startRevision === null) return [];\n\n const entries: LogEntry[] = [];\n let currentId: number | null = startRevision;\n\n while (currentId !== null) {\n if (opts?.limit && entries.length >= opts.limit) break;\n\n let rev: Revision;\n try {\n rev = await this.storage.readRevision(currentId);\n } catch {\n break;\n }\n\n const changedPaths = rev.changes.map((c) => c.path);\n\n if (opts?.path) {\n // Filter: only include if this revision touches the specified path\n const matchesPath = changedPaths.some((p) => matchVCSPath(opts.path!, p));\n if (matchesPath) {\n entries.push({\n id: rev.id,\n parent: rev.parent,\n branch: rev.branch,\n message: rev.message,\n timestamp: rev.timestamp,\n paths: changedPaths,\n });\n }\n } else {\n entries.push({\n id: rev.id,\n parent: rev.parent,\n branch: rev.branch,\n message: rev.message,\n timestamp: rev.timestamp,\n paths: changedPaths,\n });\n }\n\n currentId = rev.parent;\n }\n\n return entries;\n }\n\n /** Get uncommitted changes as DiffEntry[]. */\n async status(): Promise<DiffEntry[]> {\n await this.ensureInit();\n const manifest = await this.headManifest();\n return diffWorkingTree(this.workFs, this.workPath, manifest, this.rules);\n }\n\n /** Diff between two revisions. */\n async diff(revA: number, revB: number): Promise<DiffEntry[]> {\n await this.ensureInit();\n const a = await this.storage.readRevision(revA);\n const b = await this.storage.readRevision(revB);\n return diffManifests(a.tree, b.tree, this.rules);\n }\n\n /** Get current HEAD info. */\n async head(): Promise<{ branch: string | null; revision: number | null }> {\n await this.ensureInit();\n return this.resolveHead();\n }\n}\n\n/**\n * Filter a list of paths to only those matching any of the given glob patterns.\n * Patterns may start with `/` which is stripped before matching.\n */\nfunction filterPathsByGlobs(paths: string[], patterns: string[]): string[] {\n return paths.filter((filePath) =>\n patterns.some((pattern) => matchVCSPath(pattern, filePath)),\n );\n}\n\nfunction resolveInternalPath(\n workFs: VirtualFS,\n metaFs: VirtualFS,\n workPath: string,\n metaPath: string,\n): string {\n if (workFs !== metaFs) return \"\";\n\n const normalizedWork = normalizeFsPath(workPath);\n const normalizedMeta = normalizeFsPath(metaFs.resolve(metaPath));\n\n if (normalizedMeta === normalizedWork) return \"\";\n if (!normalizedMeta.startsWith(`${normalizedWork}/`)) return \"\";\n\n return normalizedMeta.slice(normalizedWork.length + 1);\n}\n\nfunction normalizeFsPath(path: string): string {\n return path.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n}\n"
5
+ "import type { VirtualFS } from \"../types.cjs\";\nimport type {\n VCSConfig,\n Revision,\n DiffEntry,\n TreeManifest,\n CommitOptions,\n CheckoutOptions,\n LogOptions,\n LogEntry,\n BranchInfo,\n VCSIndexEntry,\n} from \"./types.cjs\";\nimport { VCSStorage } from \"./storage.cjs\";\nimport { diffManifests } from \"./diff.cjs\";\nimport { VCSObjectStore } from \"./objects.cjs\";\nimport { matchVCSPath, VCSRules } from \"./rules.cjs\";\nimport {\n buildTreeManifest,\n rebuildIndexForManifest,\n restoreTree,\n updateIndexForScopedPaths,\n} from \"./snapshot.cjs\";\n\nexport class VersionControlSystem {\n private readonly workFs: VirtualFS;\n private readonly workPath: string;\n private readonly storage: VCSStorage;\n private readonly objectStore: VCSObjectStore;\n private readonly vcsInternalPath: string;\n private readonly rules: VCSRules;\n\n constructor(config: VCSConfig) {\n this.workFs = config.fs;\n this.workPath = config.fs.resolve(config.path);\n\n const metaFs = config.vcsPath?.fs ?? config.fs;\n const metaPath = config.vcsPath?.path ?? metaFs.resolve(config.path, \".vcs\");\n this.storage = new VCSStorage(metaFs, metaPath);\n this.objectStore = new VCSObjectStore(this.storage.fileSystem, this.storage.resolve());\n\n this.vcsInternalPath = resolveInternalPath(config.fs, metaFs, this.workPath, metaPath);\n\n this.rules = new VCSRules({\n internalPath: this.vcsInternalPath,\n ignore: config.ignore,\n attributes: config.attributes,\n });\n }\n\n /** Initialize the .vcs directory. Called automatically on first operation if needed. */\n async init(): Promise<void> {\n if (await this.storage.isInitialized()) {\n await this.storage.assertSupportedFormat();\n return;\n }\n await this.storage.initialize();\n await this.objectStore.initialize();\n }\n\n private async ensureInit(): Promise<void> {\n if (!(await this.storage.isInitialized())) {\n await this.init();\n return;\n }\n await this.storage.assertSupportedFormat();\n }\n\n /** Get the current HEAD revision number, or null if no commits yet. */\n private async resolveHead(): Promise<{ branch: string | null; revision: number | null }> {\n const head = await this.storage.readHead();\n if (head.revision !== undefined) {\n return { branch: null, revision: head.revision };\n }\n if (head.ref) {\n const branchName = head.ref.replace(\"refs/heads/\", \"\");\n const branchRef = await this.storage.readBranch(branchName);\n return { branch: branchName, revision: branchRef?.revision ?? null };\n }\n return { branch: null, revision: null };\n }\n\n /** Get current HEAD manifest, or empty if no commits. */\n private async headManifest(): Promise<TreeManifest> {\n const { revision } = await this.resolveHead();\n if (revision === null) return {};\n const rev = await this.storage.readRevision(revision);\n return rev.tree;\n }\n\n private async currentIndex(): Promise<Record<string, VCSIndexEntry>> {\n return this.storage.readIndex();\n }\n\n /** Commit all pending changes, or selective changes if paths are provided. */\n async commit(message: string, opts?: CommitOptions): Promise<Revision> {\n await this.ensureInit();\n\n const { branch, revision: parentId } = await this.resolveHead();\n const parentManifest = parentId !== null\n ? (await this.storage.readRevision(parentId)).tree\n : {};\n const previousIndex = await this.currentIndex();\n const working = await buildTreeManifest(this.workFs, this.workPath, {\n objectStore: this.objectStore,\n rules: this.rules,\n trackedPaths: Object.keys(parentManifest),\n indexEntries: previousIndex,\n });\n\n let newTree: TreeManifest;\n let changes: DiffEntry[];\n\n if (opts?.paths && opts.paths.length > 0) {\n const matchedPaths = filterPathsByGlobs(Object.keys(working.manifest), opts.paths);\n const parentMatchedPaths = filterPathsByGlobs(Object.keys(parentManifest), opts.paths);\n newTree = { ...parentManifest };\n\n for (const path of parentMatchedPaths) {\n if (!working.manifest[path]) {\n delete newTree[path];\n }\n }\n for (const path of matchedPaths) {\n newTree[path] = working.manifest[path]!;\n }\n\n const relevantBefore: TreeManifest = {};\n const relevantAfter: TreeManifest = {};\n const allRelevant = new Set([...matchedPaths, ...parentMatchedPaths]);\n for (const path of allRelevant) {\n if (parentManifest[path]) relevantBefore[path] = parentManifest[path]!;\n if (newTree[path]) relevantAfter[path] = newTree[path]!;\n }\n changes = await diffManifests(relevantBefore, relevantAfter, {\n rules: this.rules,\n objectStore: this.objectStore,\n beforeIndex: previousIndex,\n afterIndex: working.indexEntries,\n });\n } else {\n newTree = working.manifest;\n changes = await diffManifests(parentManifest, newTree, {\n rules: this.rules,\n objectStore: this.objectStore,\n beforeIndex: previousIndex,\n afterIndex: working.indexEntries,\n });\n }\n\n if (changes.length === 0) {\n throw new Error(\"nothing to commit\");\n }\n\n const id = await this.storage.nextRevisionId();\n const rev: Revision = {\n id,\n parent: parentId,\n branch: branch ?? \"detached\",\n message,\n timestamp: new Date().toISOString(),\n changes,\n tree: newTree,\n };\n\n await this.storage.writeRevision(rev);\n await this.storage.writeIndex(working.indexEntries);\n\n if (branch) {\n await this.storage.writeBranch(branch, { revision: id });\n } else {\n await this.storage.writeHead({ revision: id });\n }\n\n return rev;\n }\n\n /** Checkout a revision number or branch name. */\n async checkout(target: string | number, opts?: CheckoutOptions): Promise<void> {\n await this.ensureInit();\n\n const isPartial = opts?.paths && opts.paths.length > 0;\n\n let targetRevision: number;\n let targetBranch: string | null = null;\n\n if (typeof target === \"string\") {\n const branchRef = await this.storage.readBranch(target);\n if (branchRef) {\n targetBranch = target;\n targetRevision = branchRef.revision;\n } else {\n throw new Error(`unknown branch or revision: \"${target}\"`);\n }\n } else {\n targetRevision = target;\n }\n\n let rev: Revision;\n try {\n rev = await this.storage.readRevision(targetRevision);\n } catch {\n throw new Error(`revision ${targetRevision} not found`);\n }\n\n const currentManifest = await this.headManifest();\n\n if (isPartial) {\n await restoreTree(this.workFs, this.workPath, rev.tree, this.objectStore, {\n fullRestore: false,\n paths: opts!.paths!,\n rules: this.rules,\n trackedPaths: Object.keys(currentManifest),\n });\n\n const updatedIndex = await updateIndexForScopedPaths(\n this.workFs,\n this.workPath,\n rev.tree,\n this.objectStore,\n await this.currentIndex(),\n opts!.paths!,\n );\n await this.storage.writeIndex(updatedIndex);\n return;\n }\n\n if (!opts?.force) {\n const changes = await this.status();\n if (changes.length > 0) {\n throw new Error(\"working tree has uncommitted changes (use force to discard)\");\n }\n }\n\n await restoreTree(this.workFs, this.workPath, rev.tree, this.objectStore, {\n fullRestore: true,\n rules: this.rules,\n trackedPaths: Object.keys(currentManifest),\n });\n\n await this.storage.writeIndex(\n await rebuildIndexForManifest(this.workFs, this.workPath, rev.tree, this.objectStore),\n );\n\n if (targetBranch) {\n await this.storage.writeHead({ ref: `refs/heads/${targetBranch}` });\n } else {\n await this.storage.writeHead({ revision: targetRevision });\n }\n }\n\n /** Create a new branch at HEAD. */\n async branch(name: string): Promise<void> {\n await this.ensureInit();\n\n const existing = await this.storage.readBranch(name);\n if (existing) {\n throw new Error(`branch \"${name}\" already exists`);\n }\n\n const { revision } = await this.resolveHead();\n if (revision === null) {\n throw new Error(\"cannot create branch: no commits yet\");\n }\n\n await this.storage.writeBranch(name, { revision });\n }\n\n /** List all branches. */\n async branches(): Promise<BranchInfo[]> {\n await this.ensureInit();\n\n const names = await this.storage.listBranches();\n const head = await this.resolveHead();\n const result: BranchInfo[] = [];\n\n for (const name of names) {\n const ref = await this.storage.readBranch(name);\n if (ref) {\n result.push({\n name,\n revision: ref.revision,\n current: head.branch === name,\n });\n }\n }\n\n return result.sort((a, b) => a.name.localeCompare(b.name));\n }\n\n /** Get revision history. */\n async log(opts?: LogOptions): Promise<LogEntry[]> {\n await this.ensureInit();\n\n let startRevision: number | null;\n\n if (opts?.branch) {\n const branchRef = await this.storage.readBranch(opts.branch);\n if (!branchRef) throw new Error(`branch \"${opts.branch}\" not found`);\n startRevision = branchRef.revision;\n } else {\n const { revision } = await this.resolveHead();\n startRevision = revision;\n }\n\n if (startRevision === null) return [];\n\n const entries: LogEntry[] = [];\n let currentId: number | null = startRevision;\n\n while (currentId !== null) {\n if (opts?.limit && entries.length >= opts.limit) break;\n\n let rev: Revision;\n try {\n rev = await this.storage.readRevision(currentId);\n } catch {\n break;\n }\n\n const changedPaths = rev.changes.map((change) => change.path);\n\n if (opts?.path) {\n const matchesPath = changedPaths.some((path) => matchVCSPath(opts.path!, path));\n if (!matchesPath) {\n currentId = rev.parent;\n continue;\n }\n }\n\n entries.push({\n id: rev.id,\n parent: rev.parent,\n branch: rev.branch,\n message: rev.message,\n timestamp: rev.timestamp,\n paths: changedPaths,\n });\n\n currentId = rev.parent;\n }\n\n return entries;\n }\n\n /** Get uncommitted changes as DiffEntry[]. */\n async status(): Promise<DiffEntry[]> {\n await this.ensureInit();\n const manifest = await this.headManifest();\n const previousIndex = await this.currentIndex();\n const working = await buildTreeManifest(this.workFs, this.workPath, {\n objectStore: this.objectStore,\n rules: this.rules,\n trackedPaths: Object.keys(manifest),\n indexEntries: previousIndex,\n });\n await this.storage.writeIndex(working.indexEntries);\n return diffManifests(manifest, working.manifest, {\n rules: this.rules,\n objectStore: this.objectStore,\n beforeIndex: previousIndex,\n afterIndex: working.indexEntries,\n });\n }\n\n /** Diff between two revisions. */\n async diff(revA: number, revB: number): Promise<DiffEntry[]> {\n await this.ensureInit();\n const a = await this.storage.readRevision(revA);\n const b = await this.storage.readRevision(revB);\n return diffManifests(a.tree, b.tree, {\n rules: this.rules,\n objectStore: this.objectStore,\n });\n }\n\n async readBlob(blobId: string): Promise<Buffer>;\n async readBlob(blobId: string, encoding: BufferEncoding): Promise<string>;\n async readBlob(blobId: string, encoding?: BufferEncoding): Promise<Buffer | string> {\n const content = await this.objectStore.readBlob(blobId);\n return encoding ? content.toString(encoding) : content;\n }\n\n async readRevisionFile(revisionId: number, path: string): Promise<Buffer>;\n async readRevisionFile(\n revisionId: number,\n path: string,\n encoding: BufferEncoding,\n ): Promise<string>;\n async readRevisionFile(\n revisionId: number,\n path: string,\n encoding?: BufferEncoding,\n ): Promise<Buffer | string> {\n const revision = await this.storage.readRevision(revisionId);\n const normalizedPath = path.replace(/^\\/+/, \"\");\n const entry = revision.tree[normalizedPath];\n if (!entry || entry.kind === \"directory\") {\n throw new Error(`file \"${path}\" not found in revision ${revisionId}`);\n }\n return this.readBlob(entry.blobId, encoding as BufferEncoding);\n }\n\n /** Get current HEAD info. */\n async head(): Promise<{ branch: string | null; revision: number | null }> {\n await this.ensureInit();\n return this.resolveHead();\n }\n}\n\nfunction filterPathsByGlobs(paths: string[], patterns: string[]): string[] {\n return paths.filter((filePath) =>\n patterns.some((pattern) => matchVCSPath(pattern, filePath)),\n );\n}\n\nfunction resolveInternalPath(\n workFs: VirtualFS,\n metaFs: VirtualFS,\n workPath: string,\n metaPath: string,\n): string {\n if (workFs !== metaFs) return \"\";\n\n const normalizedWork = normalizeFsPath(workPath);\n const normalizedMeta = normalizeFsPath(metaFs.resolve(metaPath));\n\n if (normalizedMeta === normalizedWork) return \"\";\n if (!normalizedMeta.startsWith(`${normalizedWork}/`)) return \"\";\n\n return normalizedMeta.slice(normalizedWork.length + 1);\n}\n\nfunction normalizeFsPath(path: string): string {\n return path.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "B3A44192C38E782A64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "9D32EC405281839564756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "shell-dsl",
3
- "version": "0.0.34",
3
+ "version": "0.0.35",
4
4
  "type": "module"
5
5
  }