harnessbrew 0.5.2 → 0.6.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/CHANGELOG.md +31 -0
- package/README.md +157 -80
- package/README.zh-CN.md +373 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +184 -26
- package/dist/cli.js.map +1 -1
- package/dist/core/adapter-plugins.d.ts +12 -0
- package/dist/core/adapter-plugins.d.ts.map +1 -0
- package/dist/core/adapter-plugins.js +151 -0
- package/dist/core/adapter-plugins.js.map +1 -0
- package/dist/core/bundle.d.ts +33 -5
- package/dist/core/bundle.d.ts.map +1 -1
- package/dist/core/bundle.js +329 -60
- package/dist/core/bundle.js.map +1 -1
- package/dist/core/doctor.d.ts +2 -2
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js +2 -0
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/git.d.ts +1 -0
- package/dist/core/git.d.ts.map +1 -1
- package/dist/core/git.js +17 -0
- package/dist/core/git.js.map +1 -1
- package/dist/core/installations.d.ts +1 -0
- package/dist/core/installations.d.ts.map +1 -1
- package/dist/core/installations.js +135 -14
- package/dist/core/installations.js.map +1 -1
- package/dist/core/journal.d.ts +26 -0
- package/dist/core/journal.d.ts.map +1 -0
- package/dist/core/journal.js +363 -0
- package/dist/core/journal.js.map +1 -0
- package/dist/core/locks.d.ts +10 -0
- package/dist/core/locks.d.ts.map +1 -0
- package/dist/core/locks.js +90 -0
- package/dist/core/locks.js.map +1 -0
- package/dist/core/paths.d.ts +1 -0
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +3 -0
- package/dist/core/paths.js.map +1 -1
- package/dist/core/state.d.ts +2 -0
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +21 -2
- package/dist/core/state.js.map +1 -1
- package/dist/core/taps.d.ts +7 -1
- package/dist/core/taps.d.ts.map +1 -1
- package/dist/core/taps.js +74 -16
- package/dist/core/taps.js.map +1 -1
- package/dist/core/targets/claude-code.d.ts.map +1 -1
- package/dist/core/targets/claude-code.js +11 -1
- package/dist/core/targets/claude-code.js.map +1 -1
- package/dist/core/targets/codex.d.ts.map +1 -1
- package/dist/core/targets/codex.js +11 -1
- package/dist/core/targets/codex.js.map +1 -1
- package/dist/core/targets/planner.d.ts +2 -3
- package/dist/core/targets/planner.d.ts.map +1 -1
- package/dist/core/targets/planner.js +43 -3
- package/dist/core/targets/planner.js.map +1 -1
- package/dist/core/targets/registry.d.ts +7 -3
- package/dist/core/targets/registry.d.ts.map +1 -1
- package/dist/core/targets/registry.js +55 -0
- package/dist/core/targets/registry.js.map +1 -1
- package/dist/core/targets/transaction.d.ts.map +1 -1
- package/dist/core/targets/transaction.js +46 -10
- package/dist/core/targets/transaction.js.map +1 -1
- package/dist/core/targets/types.d.ts +8 -4
- package/dist/core/targets/types.d.ts.map +1 -1
- package/dist/core/targets/types.js +1 -1
- package/dist/core/targets/types.js.map +1 -1
- package/dist/core/targets.d.ts +6 -7
- package/dist/core/targets.d.ts.map +1 -1
- package/dist/core/targets.js +33 -22
- package/dist/core/targets.js.map +1 -1
- package/dist/core/upgrades.d.ts.map +1 -1
- package/dist/core/upgrades.js +10 -1
- package/dist/core/upgrades.js.map +1 -1
- package/dist/index.d.ts +13 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
|
+
import { chmod, copyFile, cp, lstat, mkdir, open, readFile, readdir, readlink, rename, rm, symlink } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { HarnessBrewError } from "./errors.js";
|
|
6
|
+
import { withTargetLock } from "./locks.js";
|
|
7
|
+
const activeJournal = new AsyncLocalStorage();
|
|
8
|
+
export function transactionsRoot(home) {
|
|
9
|
+
return path.join(path.resolve(home), "transactions");
|
|
10
|
+
}
|
|
11
|
+
function journalPath(directory) {
|
|
12
|
+
return path.join(directory, "journal.json");
|
|
13
|
+
}
|
|
14
|
+
function safeTransactionPath(home, candidate) {
|
|
15
|
+
const resolvedHome = path.resolve(home);
|
|
16
|
+
const resolved = path.resolve(candidate);
|
|
17
|
+
const root = path.parse(resolved).root;
|
|
18
|
+
if (resolved === root || resolved === resolvedHome)
|
|
19
|
+
return false;
|
|
20
|
+
const journalRoot = transactionsRoot(resolvedHome);
|
|
21
|
+
const journalRelative = path.relative(journalRoot, resolved);
|
|
22
|
+
if (journalRelative === "" || (journalRelative !== ".." && !journalRelative.startsWith(`..${path.sep}`)
|
|
23
|
+
&& !path.isAbsolute(journalRelative)))
|
|
24
|
+
return false;
|
|
25
|
+
const homeRelative = path.relative(resolved, resolvedHome);
|
|
26
|
+
return homeRelative !== "" && (homeRelative === ".." || homeRelative.startsWith(`..${path.sep}`));
|
|
27
|
+
}
|
|
28
|
+
function validBackup(candidate) {
|
|
29
|
+
return typeof candidate === "string" && /^backups[\\/][0-9]+$/u.test(candidate);
|
|
30
|
+
}
|
|
31
|
+
function parseJournal(content, directory, home) {
|
|
32
|
+
let value;
|
|
33
|
+
try {
|
|
34
|
+
value = JSON.parse(content);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
throw new HarnessBrewError(`Invalid transaction journal: ${journalPath(directory)}`);
|
|
38
|
+
}
|
|
39
|
+
if (typeof value !== "object" || value === null) {
|
|
40
|
+
throw new HarnessBrewError(`Invalid transaction journal: ${journalPath(directory)}`);
|
|
41
|
+
}
|
|
42
|
+
const record = value;
|
|
43
|
+
const validEntry = (entry, index) => {
|
|
44
|
+
if (typeof entry !== "object" || entry === null)
|
|
45
|
+
return false;
|
|
46
|
+
const item = entry;
|
|
47
|
+
if (typeof item.path !== "string" || !path.isAbsolute(item.path) || !safeTransactionPath(home, item.path)
|
|
48
|
+
|| !["missing", "file", "directory", "symlink"].includes(item.kind))
|
|
49
|
+
return false;
|
|
50
|
+
if ((item.kind === "file" || item.kind === "directory")
|
|
51
|
+
&& (!validBackup(item.backup) || item.backup !== path.join("backups", String(index))))
|
|
52
|
+
return false;
|
|
53
|
+
if (item.kind === "symlink" && typeof item.linkTarget !== "string")
|
|
54
|
+
return false;
|
|
55
|
+
const expected = item.expected;
|
|
56
|
+
const validExpected = expected === undefined || (typeof expected === "object" && expected !== null
|
|
57
|
+
&& ["missing", "file", "directory", "symlink"].includes(expected.kind)
|
|
58
|
+
&& (expected.digest === undefined || (typeof expected.digest === "string" && /^[0-9a-f]{64}$/u.test(expected.digest)))
|
|
59
|
+
&& (expected.linkTarget === undefined || typeof expected.linkTarget === "string"));
|
|
60
|
+
return validExpected && (item.mode === undefined
|
|
61
|
+
|| (Number.isInteger(item.mode) && item.mode >= 0 && item.mode <= 0o777));
|
|
62
|
+
};
|
|
63
|
+
if (record.schemaVersion !== 1 || record.id !== path.basename(directory)
|
|
64
|
+
|| typeof record.label !== "string" || record.label === ""
|
|
65
|
+
|| path.resolve(record.home) !== path.resolve(home)
|
|
66
|
+
|| typeof record.createdAt !== "string" || Number.isNaN(Date.parse(record.createdAt))
|
|
67
|
+
|| !Array.isArray(record.entries) || !record.entries.every(validEntry)) {
|
|
68
|
+
throw new HarnessBrewError(`Invalid transaction journal: ${journalPath(directory)}`);
|
|
69
|
+
}
|
|
70
|
+
return record;
|
|
71
|
+
}
|
|
72
|
+
async function writeJournal(active) {
|
|
73
|
+
const destination = journalPath(active.directory);
|
|
74
|
+
const temporaryPath = `${destination}.${process.pid}.tmp`;
|
|
75
|
+
await mkdir(active.directory, { recursive: true });
|
|
76
|
+
const handle = await open(temporaryPath, "w");
|
|
77
|
+
try {
|
|
78
|
+
await handle.writeFile(`${JSON.stringify(active.record, null, 2)}\n`, "utf8");
|
|
79
|
+
await handle.sync();
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
await handle.close();
|
|
83
|
+
}
|
|
84
|
+
await rename(temporaryPath, destination);
|
|
85
|
+
}
|
|
86
|
+
async function metadata(filePath) {
|
|
87
|
+
try {
|
|
88
|
+
return await lstat(filePath);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (error.code === "ENOENT")
|
|
92
|
+
return undefined;
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function fingerprint(filePath) {
|
|
97
|
+
const current = await metadata(filePath);
|
|
98
|
+
if (current === undefined)
|
|
99
|
+
return { kind: "missing" };
|
|
100
|
+
if (current.isSymbolicLink())
|
|
101
|
+
return { kind: "symlink", linkTarget: await readlink(filePath) };
|
|
102
|
+
if (current.isFile()) {
|
|
103
|
+
return { kind: "file", digest: createHash("sha256").update(await readFile(filePath)).digest("hex") };
|
|
104
|
+
}
|
|
105
|
+
if (current.isDirectory()) {
|
|
106
|
+
const hash = createHash("sha256");
|
|
107
|
+
async function visit(directory) {
|
|
108
|
+
const entries = (await readdir(directory, { withFileTypes: true }))
|
|
109
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
110
|
+
for (const entry of entries) {
|
|
111
|
+
const child = path.join(directory, entry.name);
|
|
112
|
+
const relative = path.relative(filePath, child);
|
|
113
|
+
if (entry.isDirectory()) {
|
|
114
|
+
hash.update(`d:${relative}\0`);
|
|
115
|
+
await visit(child);
|
|
116
|
+
}
|
|
117
|
+
else if (entry.isFile()) {
|
|
118
|
+
hash.update(`f:${relative}\0`);
|
|
119
|
+
hash.update(await readFile(child));
|
|
120
|
+
}
|
|
121
|
+
else if (entry.isSymbolicLink()) {
|
|
122
|
+
hash.update(`l:${relative}:${await readlink(child)}\0`);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
throw new HarnessBrewError(`Unsupported transaction path type: ${child}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
await visit(filePath);
|
|
130
|
+
return { kind: "directory", digest: hash.digest("hex") };
|
|
131
|
+
}
|
|
132
|
+
throw new HarnessBrewError(`Unsupported transaction path type: ${filePath}`);
|
|
133
|
+
}
|
|
134
|
+
function sameFingerprint(left, right) {
|
|
135
|
+
return left.kind === right.kind && left.digest === right.digest && left.linkTarget === right.linkTarget;
|
|
136
|
+
}
|
|
137
|
+
export async function captureTransactionPath(candidate) {
|
|
138
|
+
const active = activeJournal.getStore();
|
|
139
|
+
if (active === undefined)
|
|
140
|
+
return;
|
|
141
|
+
const target = path.resolve(candidate);
|
|
142
|
+
if (!safeTransactionPath(active.record.home, target)) {
|
|
143
|
+
throw new HarnessBrewError(`Unsafe transaction path: ${target}`);
|
|
144
|
+
}
|
|
145
|
+
if (active.captured.has(target))
|
|
146
|
+
return;
|
|
147
|
+
const current = await metadata(target);
|
|
148
|
+
const entry = current === undefined
|
|
149
|
+
? { path: target, kind: "missing" }
|
|
150
|
+
: current.isSymbolicLink()
|
|
151
|
+
? { path: target, kind: "symlink", linkTarget: await readlink(target), mode: Number(current.mode) & 0o777 }
|
|
152
|
+
: current.isFile()
|
|
153
|
+
? { path: target, kind: "file", backup: path.join("backups", String(active.record.entries.length)), mode: Number(current.mode) & 0o777 }
|
|
154
|
+
: current.isDirectory()
|
|
155
|
+
? { path: target, kind: "directory", backup: path.join("backups", String(active.record.entries.length)), mode: Number(current.mode) & 0o777 }
|
|
156
|
+
: (() => { throw new HarnessBrewError(`Unsupported transaction path type: ${target}`); })();
|
|
157
|
+
if (entry.backup !== undefined) {
|
|
158
|
+
const backupPath = path.join(active.directory, entry.backup);
|
|
159
|
+
await mkdir(path.dirname(backupPath), { recursive: true });
|
|
160
|
+
if (entry.kind === "directory") {
|
|
161
|
+
await cp(target, backupPath, { recursive: true, errorOnExist: true, preserveTimestamps: true });
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
await copyFile(target, backupPath);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
active.record.entries.push(entry);
|
|
168
|
+
active.captured.add(target);
|
|
169
|
+
await writeJournal(active);
|
|
170
|
+
}
|
|
171
|
+
export async function markTransactionPath(candidate) {
|
|
172
|
+
const active = activeJournal.getStore();
|
|
173
|
+
if (active === undefined)
|
|
174
|
+
return;
|
|
175
|
+
const target = path.resolve(candidate);
|
|
176
|
+
const entry = active.record.entries.find((item) => item.path === target);
|
|
177
|
+
if (entry === undefined)
|
|
178
|
+
throw new HarnessBrewError(`Transaction path was not captured before mutation: ${target}`);
|
|
179
|
+
entry.expected = await fingerprint(target);
|
|
180
|
+
await writeJournal(active);
|
|
181
|
+
}
|
|
182
|
+
export async function captureMissingParents(candidate) {
|
|
183
|
+
if (activeJournal.getStore() === undefined)
|
|
184
|
+
return [];
|
|
185
|
+
let current = path.dirname(path.resolve(candidate));
|
|
186
|
+
const root = path.parse(current).root;
|
|
187
|
+
const captured = [];
|
|
188
|
+
while (current !== root && await metadata(current) === undefined) {
|
|
189
|
+
await captureTransactionPath(current);
|
|
190
|
+
captured.push(current);
|
|
191
|
+
current = path.dirname(current);
|
|
192
|
+
}
|
|
193
|
+
return captured;
|
|
194
|
+
}
|
|
195
|
+
async function restoreEntry(directory, entry) {
|
|
196
|
+
await rm(entry.path, { recursive: true, force: true });
|
|
197
|
+
if (entry.kind === "missing")
|
|
198
|
+
return;
|
|
199
|
+
await mkdir(path.dirname(entry.path), { recursive: true });
|
|
200
|
+
if (entry.kind === "symlink") {
|
|
201
|
+
await symlink(entry.linkTarget, entry.path);
|
|
202
|
+
}
|
|
203
|
+
else if (entry.kind === "directory") {
|
|
204
|
+
await cp(path.join(directory, entry.backup), entry.path, {
|
|
205
|
+
recursive: true,
|
|
206
|
+
errorOnExist: true,
|
|
207
|
+
preserveTimestamps: true
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
await copyFile(path.join(directory, entry.backup), entry.path);
|
|
212
|
+
}
|
|
213
|
+
if (entry.mode !== undefined && entry.kind !== "symlink")
|
|
214
|
+
await chmod(entry.path, entry.mode);
|
|
215
|
+
}
|
|
216
|
+
async function originalFingerprint(directory, entry) {
|
|
217
|
+
if (entry.kind === "missing")
|
|
218
|
+
return { kind: "missing" };
|
|
219
|
+
if (entry.kind === "symlink")
|
|
220
|
+
return { kind: "symlink", linkTarget: entry.linkTarget };
|
|
221
|
+
return fingerprint(path.join(directory, entry.backup));
|
|
222
|
+
}
|
|
223
|
+
async function preflightRollback(directory, record) {
|
|
224
|
+
const seen = new Set();
|
|
225
|
+
for (const entry of record.entries) {
|
|
226
|
+
if (seen.has(entry.path))
|
|
227
|
+
throw new HarnessBrewError(`Invalid transaction journal: ${journalPath(directory)}`);
|
|
228
|
+
seen.add(entry.path);
|
|
229
|
+
const original = await originalFingerprint(directory, entry).catch(() => undefined);
|
|
230
|
+
if (original === undefined)
|
|
231
|
+
throw new HarnessBrewError(`Incomplete transaction backup: ${entry.path}`);
|
|
232
|
+
const relativeToHome = path.relative(record.home, entry.path);
|
|
233
|
+
const external = relativeToHome === ".." || relativeToHome.startsWith(`..${path.sep}`) || path.isAbsolute(relativeToHome);
|
|
234
|
+
if (external) {
|
|
235
|
+
const current = await fingerprint(entry.path);
|
|
236
|
+
if (entry.expected === undefined) {
|
|
237
|
+
if (!sameFingerprint(current, original)) {
|
|
238
|
+
throw new HarnessBrewError(`Transaction recovery conflict: ${entry.path}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
else if (!sameFingerprint(current, entry.expected) && !sameFingerprint(current, original)) {
|
|
242
|
+
throw new HarnessBrewError(`Transaction recovery conflict: ${entry.path}`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
async function rollback(directory, record) {
|
|
248
|
+
await preflightRollback(directory, record);
|
|
249
|
+
for (const entry of [...record.entries].reverse()) {
|
|
250
|
+
await withTargetLock(entry.path, () => restoreEntry(directory, entry));
|
|
251
|
+
}
|
|
252
|
+
await rm(directory, { recursive: true, force: true });
|
|
253
|
+
}
|
|
254
|
+
export async function recoverTransactions(home) {
|
|
255
|
+
const resolvedHome = path.resolve(home);
|
|
256
|
+
const root = transactionsRoot(resolvedHome);
|
|
257
|
+
let directories;
|
|
258
|
+
try {
|
|
259
|
+
directories = (await readdir(root, { withFileTypes: true }))
|
|
260
|
+
.filter((entry) => entry.isDirectory())
|
|
261
|
+
.map((entry) => path.join(root, entry.name))
|
|
262
|
+
.sort();
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
if (error.code === "ENOENT")
|
|
266
|
+
return { recovered: [] };
|
|
267
|
+
throw error;
|
|
268
|
+
}
|
|
269
|
+
const recovered = [];
|
|
270
|
+
for (const directory of directories) {
|
|
271
|
+
let content;
|
|
272
|
+
try {
|
|
273
|
+
content = await readFile(journalPath(directory), "utf8");
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
if (error.code === "ENOENT") {
|
|
277
|
+
await rm(directory, { recursive: true, force: true });
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
throw error;
|
|
281
|
+
}
|
|
282
|
+
const record = parseJournal(content, directory, resolvedHome);
|
|
283
|
+
await rollback(directory, record);
|
|
284
|
+
recovered.push(record.label);
|
|
285
|
+
}
|
|
286
|
+
return { recovered };
|
|
287
|
+
}
|
|
288
|
+
export async function withJournalTransaction(home, label, action) {
|
|
289
|
+
const resolvedHome = path.resolve(home);
|
|
290
|
+
const existing = activeJournal.getStore();
|
|
291
|
+
if (existing !== undefined) {
|
|
292
|
+
if (existing.record.home !== resolvedHome) {
|
|
293
|
+
throw new HarnessBrewError("Nested transactions must use the same HarnessBrew home.");
|
|
294
|
+
}
|
|
295
|
+
return action();
|
|
296
|
+
}
|
|
297
|
+
await recoverTransactions(resolvedHome);
|
|
298
|
+
const id = randomUUID();
|
|
299
|
+
const directory = path.join(transactionsRoot(resolvedHome), id);
|
|
300
|
+
const active = {
|
|
301
|
+
directory,
|
|
302
|
+
record: {
|
|
303
|
+
schemaVersion: 1,
|
|
304
|
+
id,
|
|
305
|
+
label,
|
|
306
|
+
home: resolvedHome,
|
|
307
|
+
createdAt: new Date().toISOString(),
|
|
308
|
+
entries: []
|
|
309
|
+
},
|
|
310
|
+
captured: new Set()
|
|
311
|
+
};
|
|
312
|
+
await writeJournal(active);
|
|
313
|
+
return activeJournal.run(active, async () => {
|
|
314
|
+
try {
|
|
315
|
+
const result = await action();
|
|
316
|
+
await rm(directory, { recursive: true, force: true });
|
|
317
|
+
return result;
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
await rollback(directory, active.record);
|
|
321
|
+
throw error;
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
export async function withJournalPreview(home, label, action) {
|
|
326
|
+
const resolvedHome = path.resolve(home);
|
|
327
|
+
if (activeJournal.getStore() !== undefined) {
|
|
328
|
+
throw new HarnessBrewError("Transaction previews cannot be nested.");
|
|
329
|
+
}
|
|
330
|
+
await recoverTransactions(resolvedHome);
|
|
331
|
+
const id = randomUUID();
|
|
332
|
+
const directory = path.join(transactionsRoot(resolvedHome), id);
|
|
333
|
+
const active = {
|
|
334
|
+
directory,
|
|
335
|
+
record: {
|
|
336
|
+
schemaVersion: 1,
|
|
337
|
+
id,
|
|
338
|
+
label,
|
|
339
|
+
home: resolvedHome,
|
|
340
|
+
createdAt: new Date().toISOString(),
|
|
341
|
+
entries: []
|
|
342
|
+
},
|
|
343
|
+
captured: new Set()
|
|
344
|
+
};
|
|
345
|
+
await writeJournal(active);
|
|
346
|
+
let result;
|
|
347
|
+
let changes;
|
|
348
|
+
try {
|
|
349
|
+
result = await activeJournal.run(active, action);
|
|
350
|
+
changes = (await Promise.all(active.record.entries.map(async (entry) => {
|
|
351
|
+
const before = await originalFingerprint(directory, entry);
|
|
352
|
+
const after = await fingerprint(entry.path);
|
|
353
|
+
return sameFingerprint(before, after) ? undefined : { path: entry.path, before, after };
|
|
354
|
+
}))).filter((change) => change !== undefined);
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
await rollback(directory, active.record);
|
|
358
|
+
throw error;
|
|
359
|
+
}
|
|
360
|
+
await rollback(directory, active.record);
|
|
361
|
+
return { result, changes };
|
|
362
|
+
}
|
|
363
|
+
//# sourceMappingURL=journal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/core/journal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface LockOptions {
|
|
2
|
+
timeoutMs?: number;
|
|
3
|
+
retryMs?: number;
|
|
4
|
+
}
|
|
5
|
+
export declare function withFileLock<T>(lockPath: string, action: () => Promise<T>, options?: LockOptions): Promise<T>;
|
|
6
|
+
export declare function homeLockPath(home: string): string;
|
|
7
|
+
export declare function targetLockPath(destination: string): string;
|
|
8
|
+
export declare function withHomeLock<T>(home: string, action: () => Promise<T>, options?: LockOptions): Promise<T>;
|
|
9
|
+
export declare function withTargetLock<T>(destination: string, action: () => Promise<T>, options?: LockOptions): Promise<T>;
|
|
10
|
+
//# sourceMappingURL=locks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../src/core/locks.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAyCD,wBAAsB,YAAY,CAAC,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,CAAC,CAAC,CAgCZ;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAEzG;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAElH"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { randomUUID, createHash } from "node:crypto";
|
|
2
|
+
import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { HarnessBrewError } from "./errors.js";
|
|
6
|
+
const delay = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
|
|
7
|
+
function processIsAlive(pid) {
|
|
8
|
+
try {
|
|
9
|
+
process.kill(pid, 0);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return error.code !== "ESRCH";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async function reclaimAbandonedLock(lockPath) {
|
|
17
|
+
const reclaimPath = `${lockPath}.reclaim`;
|
|
18
|
+
try {
|
|
19
|
+
await mkdir(reclaimPath);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
if (error.code === "EEXIST")
|
|
23
|
+
return false;
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const owner = await readFile(path.join(lockPath, "owner.json"), "utf8")
|
|
28
|
+
.then((content) => JSON.parse(content))
|
|
29
|
+
.catch(() => undefined);
|
|
30
|
+
if (owner !== undefined && Number.isInteger(owner.pid) && owner.pid > 0 && !processIsAlive(owner.pid)) {
|
|
31
|
+
await rm(lockPath, { recursive: true, force: true });
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
await rm(reclaimPath, { recursive: true, force: true });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export async function withFileLock(lockPath, action, options = {}) {
|
|
41
|
+
const resolvedLock = path.resolve(lockPath);
|
|
42
|
+
const timeoutMs = options.timeoutMs ?? 15_000;
|
|
43
|
+
const retryMs = options.retryMs ?? 50;
|
|
44
|
+
const startedAt = Date.now();
|
|
45
|
+
const owner = { token: randomUUID(), pid: process.pid, acquiredAt: new Date().toISOString() };
|
|
46
|
+
await mkdir(path.dirname(resolvedLock), { recursive: true });
|
|
47
|
+
while (true) {
|
|
48
|
+
try {
|
|
49
|
+
await mkdir(resolvedLock);
|
|
50
|
+
await writeFile(path.join(resolvedLock, "owner.json"), `${JSON.stringify(owner)}\n`, { flag: "wx" });
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (error.code !== "EEXIST") {
|
|
55
|
+
await rm(resolvedLock, { recursive: true, force: true }).catch(() => undefined);
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
if (await reclaimAbandonedLock(resolvedLock))
|
|
59
|
+
continue;
|
|
60
|
+
if (Date.now() - startedAt >= timeoutMs) {
|
|
61
|
+
throw new HarnessBrewError(`Timed out waiting for lock: ${resolvedLock}`);
|
|
62
|
+
}
|
|
63
|
+
await delay(retryMs);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
return await action();
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
const current = await readFile(path.join(resolvedLock, "owner.json"), "utf8")
|
|
71
|
+
.then((content) => JSON.parse(content))
|
|
72
|
+
.catch(() => undefined);
|
|
73
|
+
if (current?.token === owner.token)
|
|
74
|
+
await rm(resolvedLock, { recursive: true, force: true });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export function homeLockPath(home) {
|
|
78
|
+
return path.join(path.resolve(home), "locks", "write.lock");
|
|
79
|
+
}
|
|
80
|
+
export function targetLockPath(destination) {
|
|
81
|
+
const digest = createHash("sha256").update(path.resolve(destination)).digest("hex");
|
|
82
|
+
return path.join(tmpdir(), "harnessbrew-target-locks", `${digest}.lock`);
|
|
83
|
+
}
|
|
84
|
+
export function withHomeLock(home, action, options) {
|
|
85
|
+
return withFileLock(homeLockPath(home), action, options);
|
|
86
|
+
}
|
|
87
|
+
export function withTargetLock(destination, action, options) {
|
|
88
|
+
return withFileLock(targetLockPath(destination), action, options);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=locks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locks.js","sourceRoot":"","sources":["../../src/core/locks.ts"],"names":[],"mappings":"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"}
|
package/dist/core/paths.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export declare function resolveHarnessHome(override?: string): string;
|
|
|
2
2
|
export declare function assertTapName(name: string): void;
|
|
3
3
|
export declare function resolveTapPath(home: string, name: string): string;
|
|
4
4
|
export declare function resolveStatePath(home: string): string;
|
|
5
|
+
export declare function resolveAdapterPluginsPath(home: string): string;
|
|
5
6
|
export declare function parseCoordinate(coordinate: string): [string, string, string];
|
|
6
7
|
export declare function resolveCellarPath(home: string, coordinate: string, commit: string): string;
|
|
7
8
|
export declare function resolveReceiptPath(home: string, coordinate: string): string;
|
package/dist/core/paths.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAMA,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIhD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAM5E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM1F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAG3E"}
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAMA,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIhD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAM5E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM1F;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAG3E"}
|
package/dist/core/paths.js
CHANGED
|
@@ -18,6 +18,9 @@ export function resolveTapPath(home, name) {
|
|
|
18
18
|
export function resolveStatePath(home) {
|
|
19
19
|
return path.join(home, "state.json");
|
|
20
20
|
}
|
|
21
|
+
export function resolveAdapterPluginsPath(home) {
|
|
22
|
+
return path.join(home, "adapters.json");
|
|
23
|
+
}
|
|
21
24
|
export function parseCoordinate(coordinate) {
|
|
22
25
|
const parts = coordinate.split("/");
|
|
23
26
|
if (parts.length !== 3 || parts.some((part) => !/^[a-z0-9][a-z0-9-]*$/u.test(part))) {
|
package/dist/core/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,cAAc,GAAG,0CAA0C,CAAC;AAElE,MAAM,UAAU,kBAAkB,CAAC,QAAiB;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,IAAI,4BAA4B,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,IAAY;IACvD,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;IACzD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACpF,MAAM,IAAI,gBAAgB,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,KAAiC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,UAAkB,EAAE,MAAc;IAChF,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,gBAAgB,CAAC,0BAA0B,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,UAAkB;IACjE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,OAAO,CAAC,CAAC;AACpE,CAAC"}
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,cAAc,GAAG,0CAA0C,CAAC;AAElE,MAAM,UAAU,kBAAkB,CAAC,QAAiB;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,gBAAgB,CAAC,qBAAqB,IAAI,4BAA4B,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,IAAY;IACvD,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;IACzD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACpF,MAAM,IAAI,gBAAgB,CAAC,+BAA+B,UAAU,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,KAAiC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,UAAkB,EAAE,MAAc;IAChF,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,gBAAgB,CAAC,0BAA0B,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,UAAkB;IACjE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,OAAO,CAAC,CAAC;AACpE,CAAC"}
|
package/dist/core/state.d.ts
CHANGED
package/dist/core/state.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,CAAC,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACjC;AAED,wBAAgB,UAAU,IAAI,YAAY,CAEzC;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA4CnE;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CASjF"}
|
package/dist/core/state.js
CHANGED
|
@@ -2,6 +2,7 @@ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { HarnessBrewError } from "./errors.js";
|
|
4
4
|
import { resolveStatePath } from "./paths.js";
|
|
5
|
+
import { captureMissingParents, captureTransactionPath } from "./journal.js";
|
|
5
6
|
export function emptyState() {
|
|
6
7
|
return { schemaVersion: 1, taps: {} };
|
|
7
8
|
}
|
|
@@ -31,12 +32,30 @@ export async function readState(home) {
|
|
|
31
32
|
parsed.taps === null) {
|
|
32
33
|
throw new HarnessBrewError(`Unsupported HarnessBrew state file: ${statePath}`);
|
|
33
34
|
}
|
|
34
|
-
|
|
35
|
+
const state = parsed;
|
|
36
|
+
for (const [name, candidate] of Object.entries(state.taps)) {
|
|
37
|
+
if (typeof candidate !== "object" || candidate === null || candidate.name !== name
|
|
38
|
+
|| typeof candidate.url !== "string" || typeof candidate.commit !== "string") {
|
|
39
|
+
throw new HarnessBrewError(`Unsupported HarnessBrew state file: ${statePath}`);
|
|
40
|
+
}
|
|
41
|
+
if (candidate.trusted === undefined)
|
|
42
|
+
candidate.trusted = true;
|
|
43
|
+
else if (typeof candidate.trusted !== "boolean") {
|
|
44
|
+
throw new HarnessBrewError(`Unsupported HarnessBrew state file: ${statePath}`);
|
|
45
|
+
}
|
|
46
|
+
if (candidate.trustedAt !== undefined && typeof candidate.trustedAt !== "string") {
|
|
47
|
+
throw new HarnessBrewError(`Unsupported HarnessBrew state file: ${statePath}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return state;
|
|
35
51
|
}
|
|
36
52
|
export async function writeState(home, state) {
|
|
37
53
|
const statePath = resolveStatePath(home);
|
|
38
|
-
await mkdir(path.dirname(statePath), { recursive: true });
|
|
39
54
|
const temporaryPath = `${statePath}.${process.pid}.tmp`;
|
|
55
|
+
await captureMissingParents(statePath);
|
|
56
|
+
await captureTransactionPath(statePath);
|
|
57
|
+
await captureTransactionPath(temporaryPath);
|
|
58
|
+
await mkdir(path.dirname(statePath), { recursive: true });
|
|
40
59
|
await writeFile(temporaryPath, `${JSON.stringify(state, null, 2)}\n`, "utf8");
|
|
41
60
|
await rename(temporaryPath, statePath);
|
|
42
61
|
}
|
package/dist/core/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"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"}
|
package/dist/core/taps.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { type TapRecord } from "./state.js";
|
|
2
2
|
export interface AddTapOptions {
|
|
3
3
|
ref?: string;
|
|
4
|
+
trust?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface UpdateTapOptions {
|
|
7
|
+
allowRewind?: boolean;
|
|
4
8
|
}
|
|
5
9
|
export interface TapUpdate {
|
|
6
10
|
name: string;
|
|
@@ -10,7 +14,9 @@ export interface TapUpdate {
|
|
|
10
14
|
}
|
|
11
15
|
export declare function listTaps(home: string): Promise<TapRecord[]>;
|
|
12
16
|
export declare function addTap(home: string, name: string, url: string, options?: AddTapOptions): Promise<TapRecord>;
|
|
13
|
-
export declare function updateTaps(home: string, requestedName?: string): Promise<TapUpdate[]>;
|
|
17
|
+
export declare function updateTaps(home: string, requestedName?: string, options?: UpdateTapOptions): Promise<TapUpdate[]>;
|
|
18
|
+
export declare function setTapTrust(home: string, name: string, trusted: boolean): Promise<TapRecord>;
|
|
19
|
+
export declare function assertTapTrusted(home: string, name: string): Promise<void>;
|
|
14
20
|
export declare function removeTap(home: string, name: string): Promise<TapRecord>;
|
|
15
21
|
export declare function checkoutTap(home: string, name: string, commit: string): Promise<TapRecord>;
|
|
16
22
|
//# sourceMappingURL=taps.d.ts.map
|