@telepath-computer/stash 0.1.0
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/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +177 -0
- package/dist/cli.js.map +1 -0
- package/dist/emitter.d.ts +2 -0
- package/dist/emitter.d.ts.map +1 -0
- package/dist/emitter.js +2 -0
- package/dist/emitter.js.map +1 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -0
- package/dist/global-config.d.ts +5 -0
- package/dist/global-config.d.ts.map +1 -0
- package/dist/global-config.js +17 -0
- package/dist/global-config.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/github-provider.d.ts +26 -0
- package/dist/providers/github-provider.d.ts.map +1 -0
- package/dist/providers/github-provider.js +391 -0
- package/dist/providers/github-provider.js.map +1 -0
- package/dist/providers/index.d.ts +3 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +5 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/stash.d.ts +48 -0
- package/dist/stash.d.ts.map +1 -0
- package/dist/stash.js +627 -0
- package/dist/stash.js.map +1 -0
- package/dist/types.d.ts +61 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/color.d.ts +10 -0
- package/dist/ui/color.d.ts.map +1 -0
- package/dist/ui/color.js +16 -0
- package/dist/ui/color.js.map +1 -0
- package/dist/ui/format.d.ts +8 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +80 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/live-line.d.ts +18 -0
- package/dist/ui/live-line.d.ts.map +1 -0
- package/dist/ui/live-line.js +65 -0
- package/dist/ui/live-line.js.map +1 -0
- package/dist/ui/sync-renderer.d.ts +14 -0
- package/dist/ui/sync-renderer.d.ts.map +1 -0
- package/dist/ui/sync-renderer.js +37 -0
- package/dist/ui/sync-renderer.js.map +1 -0
- package/dist/utils/fs.d.ts +3 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +19 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/hash.d.ts +3 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +9 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/is-tracked-path.d.ts +2 -0
- package/dist/utils/is-tracked-path.d.ts.map +1 -0
- package/dist/utils/is-tracked-path.js +23 -0
- package/dist/utils/is-tracked-path.js.map +1 -0
- package/dist/utils/text.d.ts +2 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +14 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/watch.d.ts +12 -0
- package/dist/watch.d.ts.map +1 -0
- package/dist/watch.js +291 -0
- package/dist/watch.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
import { Readable } from "node:stream";
|
|
2
|
+
import { PushConflictError } from "../errors.js";
|
|
3
|
+
import { hashBuffer } from "../utils/hash.js";
|
|
4
|
+
import { isValidText } from "../utils/text.js";
|
|
5
|
+
const REST_BASE = "https://api.github.com";
|
|
6
|
+
const GRAPHQL_URL = "https://api.github.com/graphql";
|
|
7
|
+
function encodePath(path) {
|
|
8
|
+
return path
|
|
9
|
+
.split("/")
|
|
10
|
+
.map((segment) => encodeURIComponent(segment))
|
|
11
|
+
.join("/");
|
|
12
|
+
}
|
|
13
|
+
function isRateLimited(response) {
|
|
14
|
+
return (response.status === 403 &&
|
|
15
|
+
response.headers.get("x-ratelimit-remaining") === "0");
|
|
16
|
+
}
|
|
17
|
+
async function streamToBuffer(stream) {
|
|
18
|
+
const chunks = [];
|
|
19
|
+
for await (const chunk of stream) {
|
|
20
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
21
|
+
}
|
|
22
|
+
return Buffer.concat(chunks);
|
|
23
|
+
}
|
|
24
|
+
export class GitHubProvider {
|
|
25
|
+
static spec = {
|
|
26
|
+
setup: [{ name: "token", label: "Personal access token", secret: true }],
|
|
27
|
+
connect: [{ name: "repo", label: "Repository (user/repo)" }],
|
|
28
|
+
};
|
|
29
|
+
token;
|
|
30
|
+
owner;
|
|
31
|
+
name;
|
|
32
|
+
headSha;
|
|
33
|
+
baseTreeSha;
|
|
34
|
+
constructor(config) {
|
|
35
|
+
if (!config.token) {
|
|
36
|
+
throw new Error("Missing GitHub token");
|
|
37
|
+
}
|
|
38
|
+
const repoParts = config.repo.split("/");
|
|
39
|
+
if (!config.repo ||
|
|
40
|
+
repoParts.length !== 2 ||
|
|
41
|
+
repoParts[0].length === 0 ||
|
|
42
|
+
repoParts[1].length === 0) {
|
|
43
|
+
throw new Error("Invalid GitHub repo. Expected format: owner/repo");
|
|
44
|
+
}
|
|
45
|
+
const [owner, repo] = repoParts;
|
|
46
|
+
this.token = config.token;
|
|
47
|
+
this.owner = owner;
|
|
48
|
+
this.name = repo;
|
|
49
|
+
}
|
|
50
|
+
async fetch(localSnapshot) {
|
|
51
|
+
const branchRes = await this.rest("GET", this.repoPath("/branches/main"));
|
|
52
|
+
if (branchRes.status === 404) {
|
|
53
|
+
this.headSha = undefined;
|
|
54
|
+
this.baseTreeSha = undefined;
|
|
55
|
+
return { added: new Map(), modified: new Map(), deleted: [] };
|
|
56
|
+
}
|
|
57
|
+
await this.ensureOk(branchRes, "Failed to load main branch");
|
|
58
|
+
const branch = await branchRes.json();
|
|
59
|
+
this.headSha = branch.commit.sha;
|
|
60
|
+
this.baseTreeSha = branch.commit.commit.tree.sha;
|
|
61
|
+
let remoteSnapshot = null;
|
|
62
|
+
const snapshotRes = await this.rest("GET", this.repoPath("/contents/.stash/snapshot.json?ref=main"));
|
|
63
|
+
if (snapshotRes.status === 404) {
|
|
64
|
+
remoteSnapshot = null;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
await this.ensureOk(snapshotRes, "Failed to fetch remote snapshot");
|
|
68
|
+
const body = await snapshotRes.json();
|
|
69
|
+
const content = Buffer.from(body.content.replace(/\n/g, ""), "base64").toString("utf8");
|
|
70
|
+
remoteSnapshot = JSON.parse(content);
|
|
71
|
+
}
|
|
72
|
+
const addedPaths = new Set();
|
|
73
|
+
const modifiedPaths = [];
|
|
74
|
+
const deleted = [];
|
|
75
|
+
if (remoteSnapshot) {
|
|
76
|
+
const remotePaths = new Set(Object.keys(remoteSnapshot));
|
|
77
|
+
if (!localSnapshot) {
|
|
78
|
+
for (const path of remotePaths) {
|
|
79
|
+
addedPaths.add(path);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const localPaths = new Set(Object.keys(localSnapshot));
|
|
84
|
+
for (const path of remotePaths) {
|
|
85
|
+
if (!localPaths.has(path)) {
|
|
86
|
+
addedPaths.add(path);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (remoteSnapshot[path].hash !== localSnapshot[path].hash) {
|
|
90
|
+
modifiedPaths.push(path);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
for (const path of localPaths) {
|
|
94
|
+
if (!remotePaths.has(path)) {
|
|
95
|
+
deleted.push(path);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
if (!this.baseTreeSha) {
|
|
102
|
+
return { added: new Map(), modified: new Map(), deleted: [] };
|
|
103
|
+
}
|
|
104
|
+
const treeRes = await this.rest("GET", this.repoPath(`/git/trees/${this.baseTreeSha}?recursive=1`));
|
|
105
|
+
await this.ensureOk(treeRes, "Failed to fetch repository tree");
|
|
106
|
+
const tree = await treeRes.json();
|
|
107
|
+
const remotePaths = new Set();
|
|
108
|
+
for (const entry of tree.tree ?? []) {
|
|
109
|
+
if (entry.type !== "blob") {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
if (entry.path.startsWith(".stash/")) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
remotePaths.add(entry.path);
|
|
116
|
+
}
|
|
117
|
+
for (const path of remotePaths) {
|
|
118
|
+
addedPaths.add(path);
|
|
119
|
+
}
|
|
120
|
+
if (localSnapshot) {
|
|
121
|
+
for (const localPath of Object.keys(localSnapshot)) {
|
|
122
|
+
if (!remotePaths.has(localPath)) {
|
|
123
|
+
deleted.push(localPath);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const added = new Map();
|
|
129
|
+
const modified = new Map();
|
|
130
|
+
const needsQuery = [];
|
|
131
|
+
for (const path of [...addedPaths, ...modifiedPaths]) {
|
|
132
|
+
if (!remoteSnapshot) {
|
|
133
|
+
needsQuery.push(path);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const entry = remoteSnapshot[path];
|
|
137
|
+
if ("modified" in entry) {
|
|
138
|
+
const state = {
|
|
139
|
+
type: "binary",
|
|
140
|
+
hash: entry.hash,
|
|
141
|
+
modified: entry.modified,
|
|
142
|
+
};
|
|
143
|
+
if (addedPaths.has(path)) {
|
|
144
|
+
added.set(path, state);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
modified.set(path, state);
|
|
148
|
+
}
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
needsQuery.push(path);
|
|
152
|
+
}
|
|
153
|
+
const textOrBinary = await this.fetchBlobMetadata(needsQuery);
|
|
154
|
+
for (const path of needsQuery) {
|
|
155
|
+
const blob = textOrBinary.get(path);
|
|
156
|
+
const snapshotEntry = remoteSnapshot?.[path];
|
|
157
|
+
if (!blob || blob.isBinary || blob.text === null) {
|
|
158
|
+
const raw = await this.fetchRawBytes(path);
|
|
159
|
+
const hash = snapshotEntry?.hash ?? hashBuffer(raw);
|
|
160
|
+
const modifiedAt = snapshotEntry && "modified" in snapshotEntry
|
|
161
|
+
? snapshotEntry.modified
|
|
162
|
+
: Date.now();
|
|
163
|
+
const state = { type: "binary", hash, modified: modifiedAt };
|
|
164
|
+
if (addedPaths.has(path)) {
|
|
165
|
+
added.set(path, state);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
modified.set(path, state);
|
|
169
|
+
}
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
const textBuffer = Buffer.from(blob.text, "utf8");
|
|
173
|
+
if (!isValidText(textBuffer)) {
|
|
174
|
+
const raw = await this.fetchRawBytes(path);
|
|
175
|
+
const hash = snapshotEntry?.hash ?? hashBuffer(raw);
|
|
176
|
+
const modifiedAt = snapshotEntry && "modified" in snapshotEntry
|
|
177
|
+
? snapshotEntry.modified
|
|
178
|
+
: Date.now();
|
|
179
|
+
const state = { type: "binary", hash, modified: modifiedAt };
|
|
180
|
+
if (addedPaths.has(path)) {
|
|
181
|
+
added.set(path, state);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
modified.set(path, state);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
const state = { type: "text", content: blob.text };
|
|
189
|
+
if (addedPaths.has(path)) {
|
|
190
|
+
added.set(path, state);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
modified.set(path, state);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
deleted.sort();
|
|
198
|
+
return { added, modified, deleted };
|
|
199
|
+
}
|
|
200
|
+
async get(path) {
|
|
201
|
+
const bytes = await this.fetchRawBytes(path);
|
|
202
|
+
return Readable.from(bytes);
|
|
203
|
+
}
|
|
204
|
+
async push(payload) {
|
|
205
|
+
if (!this.headSha) {
|
|
206
|
+
// GitHub Git Data API returns 409 on empty repos for both blob/tree creation,
|
|
207
|
+
// so we bootstrap once via Contents API to create an initial commit.
|
|
208
|
+
await this.bootstrapEmptyRepo(payload.snapshot);
|
|
209
|
+
}
|
|
210
|
+
const blobShas = new Map();
|
|
211
|
+
const binaryWrites = [...payload.files.entries()].filter((entry) => typeof entry[1] !== "string");
|
|
212
|
+
await Promise.all(binaryWrites.map(async ([path, createStream]) => {
|
|
213
|
+
const content = await streamToBuffer(createStream());
|
|
214
|
+
const sha = await this.createBlob(content, `Failed to create blob for ${path}`);
|
|
215
|
+
blobShas.set(path, sha);
|
|
216
|
+
}));
|
|
217
|
+
const treeEntries = [];
|
|
218
|
+
for (const [path, value] of payload.files) {
|
|
219
|
+
if (typeof value === "string") {
|
|
220
|
+
treeEntries.push({
|
|
221
|
+
path,
|
|
222
|
+
mode: "100644",
|
|
223
|
+
type: "blob",
|
|
224
|
+
content: value,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
treeEntries.push({
|
|
229
|
+
path,
|
|
230
|
+
mode: "100644",
|
|
231
|
+
type: "blob",
|
|
232
|
+
sha: blobShas.get(path),
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
treeEntries.push({
|
|
237
|
+
path: ".stash/snapshot.json",
|
|
238
|
+
mode: "100644",
|
|
239
|
+
type: "blob",
|
|
240
|
+
content: JSON.stringify(payload.snapshot),
|
|
241
|
+
});
|
|
242
|
+
for (const path of payload.deletions) {
|
|
243
|
+
treeEntries.push({
|
|
244
|
+
path,
|
|
245
|
+
mode: "100644",
|
|
246
|
+
type: "blob",
|
|
247
|
+
sha: null,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
const treeBody = { tree: treeEntries };
|
|
251
|
+
if (this.baseTreeSha) {
|
|
252
|
+
treeBody.base_tree = this.baseTreeSha;
|
|
253
|
+
}
|
|
254
|
+
const treeRes = await this.rest("POST", this.repoPath("/git/trees"), treeBody);
|
|
255
|
+
await this.ensureOk(treeRes, "Failed to create tree");
|
|
256
|
+
const tree = await treeRes.json();
|
|
257
|
+
const treeSha = tree.sha;
|
|
258
|
+
const commitBody = {
|
|
259
|
+
message: "stash: sync",
|
|
260
|
+
tree: treeSha,
|
|
261
|
+
};
|
|
262
|
+
if (this.headSha) {
|
|
263
|
+
commitBody.parents = [this.headSha];
|
|
264
|
+
}
|
|
265
|
+
const commitRes = await this.rest("POST", this.repoPath("/git/commits"), commitBody);
|
|
266
|
+
await this.ensureOk(commitRes, "Failed to create commit");
|
|
267
|
+
const commit = await commitRes.json();
|
|
268
|
+
const commitSha = commit.sha;
|
|
269
|
+
if (this.headSha) {
|
|
270
|
+
const refRes = await this.rest("PATCH", this.repoPath("/git/refs/heads/main"), { sha: commitSha, force: false });
|
|
271
|
+
if (refRes.status === 422) {
|
|
272
|
+
throw new PushConflictError("Remote main moved during push");
|
|
273
|
+
}
|
|
274
|
+
await this.ensureOk(refRes, "Failed to update main ref");
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
const refCreate = await this.rest("POST", this.repoPath("/git/refs"), { ref: "refs/heads/main", sha: commitSha });
|
|
278
|
+
await this.ensureOk(refCreate, "Failed to create main ref");
|
|
279
|
+
}
|
|
280
|
+
this.headSha = commitSha;
|
|
281
|
+
this.baseTreeSha = treeSha;
|
|
282
|
+
}
|
|
283
|
+
repoPath(path) {
|
|
284
|
+
return `/repos/${this.owner}/${this.name}${path}`;
|
|
285
|
+
}
|
|
286
|
+
async bootstrapEmptyRepo(snapshot) {
|
|
287
|
+
const bootstrapRes = await this.rest("PUT", this.repoPath(`/contents/${encodePath(".stash/snapshot.json")}`), {
|
|
288
|
+
message: "stash: bootstrap",
|
|
289
|
+
content: Buffer.from(JSON.stringify(snapshot), "utf8").toString("base64"),
|
|
290
|
+
branch: "main",
|
|
291
|
+
});
|
|
292
|
+
await this.ensureOk(bootstrapRes, "Failed to bootstrap empty repository");
|
|
293
|
+
for (let attempt = 0; attempt < 10; attempt += 1) {
|
|
294
|
+
const branchRes = await this.rest("GET", this.repoPath("/branches/main"));
|
|
295
|
+
if (branchRes.status === 404) {
|
|
296
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
await this.ensureOk(branchRes, "Failed to load main branch after bootstrap");
|
|
300
|
+
const branch = await branchRes.json();
|
|
301
|
+
this.headSha = branch.commit.sha;
|
|
302
|
+
this.baseTreeSha = branch.commit.commit.tree.sha;
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
throw new Error("Failed to load main branch after bootstrap (404)");
|
|
306
|
+
}
|
|
307
|
+
async rest(method, path, body, headers) {
|
|
308
|
+
const response = await fetch(`${REST_BASE}${path}`, {
|
|
309
|
+
method,
|
|
310
|
+
headers: {
|
|
311
|
+
Authorization: `token ${this.token}`,
|
|
312
|
+
Accept: "application/vnd.github+json",
|
|
313
|
+
"User-Agent": "stash",
|
|
314
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
315
|
+
"Content-Type": "application/json",
|
|
316
|
+
...(headers ?? {}),
|
|
317
|
+
},
|
|
318
|
+
body: body === undefined ? undefined : JSON.stringify(body),
|
|
319
|
+
});
|
|
320
|
+
if (isRateLimited(response)) {
|
|
321
|
+
const resetAt = response.headers.get("x-ratelimit-reset");
|
|
322
|
+
throw new Error(`GitHub API rate limit exceeded. Reset at: ${resetAt ? new Date(Number(resetAt) * 1000).toISOString() : "unknown"}`);
|
|
323
|
+
}
|
|
324
|
+
if (response.status === 401) {
|
|
325
|
+
throw new Error("GitHub authentication failed. Check your token.");
|
|
326
|
+
}
|
|
327
|
+
return response;
|
|
328
|
+
}
|
|
329
|
+
async ensureOk(response, message) {
|
|
330
|
+
if (response.ok) {
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
const text = await response.text();
|
|
334
|
+
throw new Error(`${message} (${response.status}): ${text}`);
|
|
335
|
+
}
|
|
336
|
+
async fetchBlobMetadata(paths) {
|
|
337
|
+
const results = new Map();
|
|
338
|
+
if (paths.length === 0) {
|
|
339
|
+
return results;
|
|
340
|
+
}
|
|
341
|
+
const aliases = new Map();
|
|
342
|
+
const fields = paths
|
|
343
|
+
.map((path, index) => {
|
|
344
|
+
const alias = `f${index}`;
|
|
345
|
+
aliases.set(alias, path);
|
|
346
|
+
return `${alias}: object(expression: ${JSON.stringify(`main:${path}`)}) { ... on Blob { text isBinary } }`;
|
|
347
|
+
})
|
|
348
|
+
.join("\n");
|
|
349
|
+
const query = `query {\n repository(owner: ${JSON.stringify(this.owner)}, name: ${JSON.stringify(this.name)}) {\n ${fields}\n }\n}`;
|
|
350
|
+
const response = await fetch(GRAPHQL_URL, {
|
|
351
|
+
method: "POST",
|
|
352
|
+
headers: {
|
|
353
|
+
Authorization: `bearer ${this.token}`,
|
|
354
|
+
Accept: "application/json",
|
|
355
|
+
"User-Agent": "stash",
|
|
356
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
357
|
+
"Content-Type": "application/json",
|
|
358
|
+
},
|
|
359
|
+
body: JSON.stringify({ query }),
|
|
360
|
+
});
|
|
361
|
+
if (isRateLimited(response)) {
|
|
362
|
+
const resetAt = response.headers.get("x-ratelimit-reset");
|
|
363
|
+
throw new Error(`GitHub GraphQL rate limit exceeded. Reset at: ${resetAt ? new Date(Number(resetAt) * 1000).toISOString() : "unknown"}`);
|
|
364
|
+
}
|
|
365
|
+
if (response.status === 401) {
|
|
366
|
+
throw new Error("GitHub authentication failed. Check your token.");
|
|
367
|
+
}
|
|
368
|
+
await this.ensureOk(response, "Failed to fetch GraphQL blobs");
|
|
369
|
+
const payload = await response.json();
|
|
370
|
+
const repository = payload.data?.repository ?? {};
|
|
371
|
+
for (const [alias, path] of aliases) {
|
|
372
|
+
results.set(path, (repository[alias] ?? null));
|
|
373
|
+
}
|
|
374
|
+
return results;
|
|
375
|
+
}
|
|
376
|
+
async fetchRawBytes(path) {
|
|
377
|
+
const response = await this.rest("GET", this.repoPath(`/contents/${encodePath(path)}?ref=main`), undefined, { Accept: "application/vnd.github.raw+json" });
|
|
378
|
+
await this.ensureOk(response, `Failed to fetch raw content for ${path}`);
|
|
379
|
+
return Buffer.from(await response.arrayBuffer());
|
|
380
|
+
}
|
|
381
|
+
async createBlob(content, errorMessage) {
|
|
382
|
+
const blobRes = await this.rest("POST", this.repoPath("/git/blobs"), {
|
|
383
|
+
content: content.toString("base64"),
|
|
384
|
+
encoding: "base64",
|
|
385
|
+
});
|
|
386
|
+
await this.ensureOk(blobRes, errorMessage);
|
|
387
|
+
const blob = await blobRes.json();
|
|
388
|
+
return blob.sha;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
//# sourceMappingURL=github-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-provider.js","sourceRoot":"","sources":["../../src/providers/github-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAEnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,MAAM,CAAC,MAAM,SAAS,GAAkC;IACtD,MAAM,EAAE,cAA0C;CACnD,CAAC"}
|
package/dist/stash.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Emitter } from "./emitter.ts";
|
|
2
|
+
import type { ConnectionConfig, FileMutation, GlobalConfig, ProviderClass, StatusResult } from "./types.ts";
|
|
3
|
+
type StashEvents = {
|
|
4
|
+
mutation: FileMutation;
|
|
5
|
+
};
|
|
6
|
+
type StashOptions = {
|
|
7
|
+
providers?: Record<string, ProviderClass>;
|
|
8
|
+
};
|
|
9
|
+
export declare class Stash extends Emitter<StashEvents> {
|
|
10
|
+
private readonly dir;
|
|
11
|
+
private readonly globalConfig;
|
|
12
|
+
private readonly providerRegistry;
|
|
13
|
+
private _connections;
|
|
14
|
+
private syncInFlight;
|
|
15
|
+
private constructor();
|
|
16
|
+
static load(dir: string, globalConfig: GlobalConfig, options?: StashOptions): Promise<Stash>;
|
|
17
|
+
static init(dir: string, globalConfig: GlobalConfig, options?: StashOptions): Promise<Stash>;
|
|
18
|
+
get connections(): Record<string, ConnectionConfig>;
|
|
19
|
+
get config(): Record<string, Record<string, string>>;
|
|
20
|
+
connect(provider: string, fields: Record<string, string>): Promise<void>;
|
|
21
|
+
disconnect(provider: string): Promise<void>;
|
|
22
|
+
sync(): Promise<void>;
|
|
23
|
+
status(): StatusResult;
|
|
24
|
+
private buildProvider;
|
|
25
|
+
private scan;
|
|
26
|
+
private reconcile;
|
|
27
|
+
private mergeText;
|
|
28
|
+
private computeSnapshot;
|
|
29
|
+
private apply;
|
|
30
|
+
private saveSnapshot;
|
|
31
|
+
private buildPushPayload;
|
|
32
|
+
private readSnapshot;
|
|
33
|
+
private readSnapshotLocal;
|
|
34
|
+
private writeLocalConfig;
|
|
35
|
+
private acquireSyncLock;
|
|
36
|
+
private tryCreateSyncLock;
|
|
37
|
+
private maybeReclaimStaleSyncLock;
|
|
38
|
+
private readSyncLockStartedAt;
|
|
39
|
+
private releaseSyncLock;
|
|
40
|
+
private listTrackedFiles;
|
|
41
|
+
private safeDelete;
|
|
42
|
+
private abs;
|
|
43
|
+
private snapshotPath;
|
|
44
|
+
private snapshotLocalDir;
|
|
45
|
+
private syncLockPath;
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=stash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stash.d.ts","sourceRoot":"","sources":["../src/stash.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,KAAK,EAEV,gBAAgB,EAChB,YAAY,EAEZ,YAAY,EAEZ,aAAa,EAGb,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAMF,KAAK,YAAY,GAAG;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC3C,CAAC;AAcF,qBAAa,KAAM,SAAQ,OAAO,CAAC,WAAW,CAAC;IAC7C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgC;IACjE,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO;WAaM,IAAI,CACf,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,KAAK,CAAC;WAaJ,IAAI,CACf,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,KAAK,CAAC;IAWjB,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAElD;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAanD;IAEK,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuD3B,MAAM,IAAI,YAAY;IAetB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,IAAI;IAuCZ,OAAO,CAAC,SAAS;IA8LjB,OAAO,CAAC,SAAS;IA2BjB,OAAO,CAAC,eAAe;YAmCT,KAAK;YAsBL,YAAY;YA2BZ,gBAAgB;IAgC9B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,yBAAyB;IAuBjC,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,YAAY;CAGrB"}
|