@volter/browser-toolbelt 0.1.5 → 0.1.6

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 (58) hide show
  1. package/README.md +15 -0
  2. package/dist/browser-git-http.d.ts +28 -2
  3. package/dist/browser-git-http.d.ts.map +1 -1
  4. package/dist/browser-git-http.js +5 -1
  5. package/dist/browser-git-http.js.map +1 -1
  6. package/dist/browser-git-remote-https.d.ts +34 -0
  7. package/dist/browser-git-remote-https.d.ts.map +1 -0
  8. package/dist/browser-git-remote-https.js +619 -0
  9. package/dist/browser-git-remote-https.js.map +1 -0
  10. package/dist/browser-interactive-shell.d.ts +11 -0
  11. package/dist/browser-interactive-shell.d.ts.map +1 -0
  12. package/dist/browser-interactive-shell.js +211 -0
  13. package/dist/browser-interactive-shell.js.map +1 -0
  14. package/dist/browser-rm.d.ts +3 -0
  15. package/dist/browser-rm.d.ts.map +1 -0
  16. package/dist/browser-rm.js +61 -0
  17. package/dist/browser-rm.js.map +1 -0
  18. package/dist/browser-shell-filesystem.d.ts +1 -1
  19. package/dist/browser-shell-filesystem.d.ts.map +1 -1
  20. package/dist/browser-shell-filesystem.js +25 -7
  21. package/dist/browser-shell-filesystem.js.map +1 -1
  22. package/dist/browser-shell.d.ts +52 -3
  23. package/dist/browser-shell.d.ts.map +1 -1
  24. package/dist/browser-shell.js +387 -58
  25. package/dist/browser-shell.js.map +1 -1
  26. package/dist/github-device-auth.d.ts +23 -2
  27. package/dist/github-device-auth.d.ts.map +1 -1
  28. package/dist/github-device-auth.js +132 -17
  29. package/dist/github-device-auth.js.map +1 -1
  30. package/dist/github-web-sign-in.d.ts +24 -0
  31. package/dist/github-web-sign-in.d.ts.map +1 -0
  32. package/dist/github-web-sign-in.js +93 -0
  33. package/dist/github-web-sign-in.js.map +1 -0
  34. package/dist/index.d.ts +4 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +4 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/install.d.ts +8 -3
  39. package/dist/install.d.ts.map +1 -1
  40. package/dist/install.js +37 -5
  41. package/dist/install.js.map +1 -1
  42. package/dist/shell-buffer-global.d.ts +2 -0
  43. package/dist/shell-buffer-global.d.ts.map +1 -0
  44. package/dist/shell-buffer-global.js +10 -0
  45. package/dist/shell-buffer-global.js.map +1 -0
  46. package/dist/volter-sign-in.d.ts +62 -0
  47. package/dist/volter-sign-in.d.ts.map +1 -0
  48. package/dist/volter-sign-in.js +255 -0
  49. package/dist/volter-sign-in.js.map +1 -0
  50. package/package.json +22 -10
  51. package/dist/browser-git-filesystem.d.ts +0 -18
  52. package/dist/browser-git-filesystem.d.ts.map +0 -1
  53. package/dist/browser-git-filesystem.js +0 -84
  54. package/dist/browser-git-filesystem.js.map +0 -1
  55. package/dist/browser-git.d.ts +0 -38
  56. package/dist/browser-git.d.ts.map +0 -1
  57. package/dist/browser-git.js +0 -514
  58. package/dist/browser-git.js.map +0 -1
@@ -1,514 +0,0 @@
1
- import { BrowserGitFileSystem } from "./browser-git-filesystem.js";
2
- import { BrowserGitHttp } from "./browser-git-http.js";
3
- let Git;
4
- let createPatch;
5
- let loadPromise;
6
- /** Local Git CLI surface operating entirely on the shared browser VFS. */
7
- export class BrowserGit {
8
- filesystem;
9
- run;
10
- fs;
11
- http;
12
- constructor(filesystem, options = {}) {
13
- this.filesystem = filesystem;
14
- this.fs = new BrowserGitFileSystem(filesystem).client;
15
- this.http = options.http ?? new BrowserGitHttp().client;
16
- this.run = (argv, options) => this.execute(argv.slice(1), options);
17
- }
18
- async execute(rawArgs, options) {
19
- try {
20
- const scoped = gitWorkingDirectory(rawArgs, options.cwd ?? "/");
21
- const args = scoped.args;
22
- const runOptions = scoped.cwd === options.cwd ? options : { ...options, cwd: scoped.cwd };
23
- const command = args[0] ?? "help";
24
- if (command === "help" || command === "--help" || command === "-h")
25
- return ok(HELP);
26
- if (command === "--version" || command === "version")
27
- return ok("git version 2.48.0-browser\n");
28
- await loadGitRuntime();
29
- if (command === "init")
30
- return await this.initialize(args.slice(1), runOptions);
31
- if (command === "clone")
32
- return await this.clone(args.slice(1), runOptions);
33
- const cwd = normalize(runOptions.cwd ?? "/");
34
- const dir = this.repositoryRoot(cwd);
35
- if (!dir)
36
- return fail("fatal: not a git repository (or any parent directory): .git\n", 128);
37
- switch (command) {
38
- case "status": return await this.status(dir, args.slice(1));
39
- case "add": return await this.add(dir, cwd, args.slice(1));
40
- case "rm": return await this.remove(dir, cwd, args.slice(1));
41
- case "commit": return await this.commit(dir, args.slice(1), runOptions);
42
- case "config": return await this.config(dir, args.slice(1));
43
- case "log": return await this.log(dir, args.slice(1));
44
- case "branch": return await this.branch(dir, args.slice(1));
45
- case "checkout": return await this.checkout(dir, args.slice(1));
46
- case "diff": return await this.diff(dir, args.slice(1));
47
- case "rev-parse": return await this.revParse(dir, args.slice(1));
48
- case "ls-files": return await this.lsFiles(dir);
49
- case "remote": return await this.remote(dir, args.slice(1));
50
- case "fetch": return await this.fetch(dir, args.slice(1));
51
- case "pull": return await this.pull(dir, args.slice(1));
52
- case "push": return await this.push(dir, args.slice(1));
53
- default: return fail(`git: '${command}' is not a git command supported by the browser runtime.\n`, 1);
54
- }
55
- }
56
- catch (cause) {
57
- return fail(`fatal: ${cleanError(cause)}\n`, 128);
58
- }
59
- }
60
- async initialize(args, options) {
61
- const branchIndex = optionIndex(args, "-b", "--initial-branch");
62
- const defaultBranch = branchIndex >= 0 ? args[branchIndex + 1] : undefined;
63
- if (branchIndex >= 0 && !defaultBranch)
64
- return fail("error: option `initial-branch' requires a value\n", 129);
65
- const operands = branchIndex < 0
66
- ? [...args]
67
- : args.filter((_value, index) => index !== branchIndex && index !== branchIndex + 1);
68
- if (operands.length > 1)
69
- return fail("usage: git init [-b <branch-name>] [<directory>]\n", 129);
70
- const cwd = normalize(options.cwd ?? "/");
71
- const dir = normalize(operands[0] ? resolve(cwd, operands[0]) : cwd);
72
- this.filesystem.mkdirSync(dir, { recursive: true });
73
- await Git.init({ fs: this.fs, dir, defaultBranch: defaultBranch ?? "main" });
74
- return ok(`Initialized empty Git repository in ${dir === "/" ? "" : dir}/.git/\n`);
75
- }
76
- async clone(args, options) {
77
- const operands = optionOperands(args, ["-b", "--branch", "--depth"], ["--single-branch", "--no-tags", "--no-checkout", "-q", "--quiet"]);
78
- const url = operands[0];
79
- if (!url || operands.length > 2)
80
- return fail("usage: git clone [--depth <depth>] [-b <branch>] <repository> [<directory>]\n", 129);
81
- const cwd = normalize(options.cwd ?? "/");
82
- const directory = operands[1] ?? repositoryName(url);
83
- const dir = resolve(cwd, directory);
84
- this.filesystem.mkdirSync(dir, { recursive: true });
85
- const branchIndex = optionIndex(args, "-b", "--branch");
86
- const ref = branchIndex >= 0 ? args[branchIndex + 1] : undefined;
87
- const depth = numberOption(args, "--depth", "--depth");
88
- await Git.clone({
89
- fs: this.fs,
90
- http: this.http,
91
- dir,
92
- url,
93
- ...(ref ? { ref } : {}),
94
- ...(depth !== undefined ? { depth } : {}),
95
- singleBranch: args.includes("--single-branch") || depth !== undefined,
96
- noTags: args.includes("--no-tags"),
97
- noCheckout: args.includes("--no-checkout"),
98
- nonBlocking: true,
99
- });
100
- return ok(`Cloning into '${directory}'...\n`);
101
- }
102
- async status(dir, args) {
103
- const short = args.includes("--short") || args.includes("-s") || args.includes("--porcelain");
104
- const rows = await Git.statusMatrix({ fs: this.fs, dir });
105
- const changed = rows.map((row) => [statusCode(row), row[0]]).filter(([code]) => code !== " ");
106
- if (short)
107
- return ok(changed.map(([code, path]) => `${code} ${path}\n`).join(""));
108
- const name = await Git.currentBranch({ fs: this.fs, dir, fullname: false }) ?? "HEAD";
109
- if (changed.length === 0)
110
- return ok(`On branch ${name}\nnothing to commit, working tree clean\n`);
111
- return ok([
112
- `On branch ${name}\nChanges not staged or untracked:\n`,
113
- ...changed.map(([code, path]) => ` ${code} ${path}\n`),
114
- ].join(""));
115
- }
116
- async add(dir, cwd, args) {
117
- const operands = args.filter((value) => value !== "-A" && value !== "--all");
118
- const paths = operands.length === 0 || operands.includes(".") || args.includes("-A") || args.includes("--all")
119
- ? undefined
120
- : operands.map((path) => repositoryPath(dir, cwd, path));
121
- const rows = await Git.statusMatrix({ fs: this.fs, dir });
122
- const selected = rows.filter(([path]) => !paths || paths.some((candidate) => path === candidate || path.startsWith(`${candidate}/`)));
123
- if (selected.length === 0 && paths)
124
- return fail(`fatal: pathspec '${operands[0]}' did not match any files\n`, 128);
125
- for (const [filepath, _head, worktree] of selected) {
126
- if (worktree === 0)
127
- await Git.remove({ fs: this.fs, dir, filepath });
128
- else
129
- await Git.add({ fs: this.fs, dir, filepath });
130
- }
131
- return ok();
132
- }
133
- async remove(dir, cwd, args) {
134
- const operands = args.filter((value) => value !== "-r" && value !== "--cached");
135
- if (operands.length === 0)
136
- return fail("fatal: No pathspec was given. Which files should I remove?\n", 128);
137
- for (const operand of operands) {
138
- const filepath = repositoryPath(dir, cwd, operand);
139
- const absolute = resolve(dir, filepath);
140
- if (!args.includes("--cached"))
141
- this.removeTree(absolute);
142
- await Git.remove({ fs: this.fs, dir, filepath });
143
- }
144
- return ok();
145
- }
146
- async commit(dir, args, options) {
147
- const messageIndex = optionIndex(args, "-m", "--message");
148
- const message = messageIndex >= 0 ? args[messageIndex + 1] : undefined;
149
- if (!message)
150
- return fail("error: switch `m' requires a value\n", 129);
151
- const name = options.env?.GIT_AUTHOR_NAME ?? await Git.getConfig({ fs: this.fs, dir, path: "user.name" });
152
- const email = options.env?.GIT_AUTHOR_EMAIL ?? await Git.getConfig({ fs: this.fs, dir, path: "user.email" });
153
- if (!name || !email) {
154
- return fail("Author identity unknown\n\nRun git config user.name and git config user.email first.\n", 128);
155
- }
156
- const oid = await Git.commit({
157
- fs: this.fs,
158
- dir,
159
- message,
160
- author: { name, email },
161
- amend: args.includes("--amend"),
162
- });
163
- const nameRef = await Git.currentBranch({ fs: this.fs, dir, fullname: false }) ?? "detached HEAD";
164
- return ok(`[${nameRef} ${oid.slice(0, 7)}] ${message.split("\n", 1)[0]}\n`);
165
- }
166
- async config(dir, args) {
167
- const operands = args.filter((value) => value !== "--get" && value !== "--local");
168
- const path = operands[0];
169
- if (!path)
170
- return fail("usage: git config [--get] name [value]\n", 129);
171
- if (operands.length === 1) {
172
- const value = await Git.getConfig({ fs: this.fs, dir, path });
173
- return value === undefined ? fail("", 1) : ok(`${value}\n`);
174
- }
175
- await Git.setConfig({ fs: this.fs, dir, path, value: operands.slice(1).join(" ") });
176
- return ok();
177
- }
178
- async log(dir, args) {
179
- const depth = numberOption(args, "-n", "--max-count") ?? 20;
180
- const entries = await Git.log({ fs: this.fs, dir, depth });
181
- if (args.includes("--oneline")) {
182
- return ok(entries.map(({ oid, commit: value }) => `${oid.slice(0, 7)} ${value.message.split("\n", 1)[0]}\n`).join(""));
183
- }
184
- return ok(entries.map(({ oid, commit: value }) => [
185
- `commit ${oid}\n`,
186
- `Author: ${value.author.name} <${value.author.email}>\n`,
187
- `Date: ${new Date(value.author.timestamp * 1000).toISOString()}\n\n`,
188
- ...value.message.trimEnd().split("\n").map((line) => ` ${line}\n`),
189
- "\n",
190
- ].join("")).join(""));
191
- }
192
- async branch(dir, args) {
193
- const current = await Git.currentBranch({ fs: this.fs, dir, fullname: false });
194
- if (args.length === 0) {
195
- const branches = await Git.listBranches({ fs: this.fs, dir });
196
- return ok(branches.map((name) => `${name === current ? "*" : " "} ${name}\n`).join(""));
197
- }
198
- if (args[0] === "-d" || args[0] === "-D") {
199
- if (!args[1])
200
- return fail("fatal: branch name required\n", 128);
201
- await Git.deleteBranch({ fs: this.fs, dir, ref: args[1] });
202
- return ok(`Deleted branch ${args[1]}.\n`);
203
- }
204
- await Git.branch({ fs: this.fs, dir, ref: args[0], checkout: false });
205
- return ok();
206
- }
207
- async checkout(dir, args) {
208
- const create = args[0] === "-b";
209
- const ref = create ? args[1] : args[0];
210
- if (!ref)
211
- return fail("fatal: branch name required\n", 128);
212
- if (create)
213
- await Git.branch({ fs: this.fs, dir, ref, checkout: true });
214
- else
215
- await Git.checkout({ fs: this.fs, dir, ref });
216
- return ok(`Switched to ${create ? "a new branch" : "branch"} '${ref}'\n`);
217
- }
218
- async diff(dir, args) {
219
- const cached = args.includes("--cached") || args.includes("--staged");
220
- if (args.includes("--name-only")) {
221
- const separator = args.indexOf("--");
222
- const paths = separator >= 0 ? args.slice(separator + 1) : [];
223
- const rows = await Git.statusMatrix({ fs: this.fs, dir });
224
- return ok(rows
225
- .filter(([path, head, workdir, stage]) => (cached ? head !== stage : workdir !== stage)
226
- && (paths.length === 0 || paths.some((candidate) => path === candidate || path.startsWith(`${candidate}/`))))
227
- .map(([path]) => `${path}\n`)
228
- .join(""));
229
- }
230
- let base = "HEAD";
231
- if (cached) {
232
- try {
233
- await Git.resolveRef({ fs: this.fs, dir, ref: base });
234
- }
235
- catch {
236
- base = await Git.writeTree({ fs: this.fs, dir, tree: [] });
237
- }
238
- }
239
- const trees = cached ? [Git.TREE({ ref: base }), Git.STAGE()] : [Git.STAGE(), Git.WORKDIR()];
240
- const patches = await Git.walk({
241
- fs: this.fs,
242
- dir,
243
- trees,
244
- map: async (filepath, entries) => {
245
- if (filepath === "." || filepath === ".git" || filepath.startsWith(".git/"))
246
- return;
247
- const [before, after] = entries;
248
- const beforeType = before ? await before.type() : undefined;
249
- const afterType = after ? await after.type() : undefined;
250
- if (beforeType === "tree" || afterType === "tree")
251
- return;
252
- const beforeBytes = await this.entryContent(dir, before);
253
- const afterBytes = await this.entryContent(dir, after);
254
- if (equalBytes(beforeBytes, afterBytes))
255
- return;
256
- if (binary(beforeBytes) || binary(afterBytes))
257
- return `Binary files a/${filepath} and b/${filepath} differ\n`;
258
- return createPatch(`a/${filepath}`, `b/${filepath}`, decode(beforeBytes), decode(afterBytes), "", "", { context: 3 });
259
- },
260
- });
261
- return ok(patches.filter(Boolean).join(""));
262
- }
263
- async entryContent(dir, entry) {
264
- if (!entry)
265
- return;
266
- const content = await entry.content();
267
- if (content)
268
- return content;
269
- const oid = await entry.oid();
270
- return (await Git.readBlob({ fs: this.fs, dir, oid })).blob;
271
- }
272
- async revParse(dir, args) {
273
- if (args[0] === "--show-toplevel")
274
- return ok(`${dir}\n`);
275
- if (args[0] === "--abbrev-ref" && args[1] === "HEAD") {
276
- return ok(`${await Git.currentBranch({ fs: this.fs, dir, fullname: false }) ?? "HEAD"}\n`);
277
- }
278
- const ref = args[0] ?? "HEAD";
279
- return ok(`${await Git.resolveRef({ fs: this.fs, dir, ref })}\n`);
280
- }
281
- async lsFiles(dir) {
282
- const rows = await Git.statusMatrix({ fs: this.fs, dir });
283
- return ok(rows.filter(([, head, , stage]) => head !== 0 || stage !== 0).map(([path]) => `${path}\n`).join(""));
284
- }
285
- async remote(dir, args) {
286
- if (args.length === 0 || (args.length === 1 && args[0] === "-v")) {
287
- const remotes = await Git.listRemotes({ fs: this.fs, dir });
288
- if (args[0] !== "-v")
289
- return ok(remotes.map(({ remote }) => `${remote}\n`).join(""));
290
- return ok(remotes.flatMap(({ remote, url }) => [
291
- `${remote}\t${url} (fetch)\n`,
292
- `${remote}\t${url} (push)\n`,
293
- ]).join(""));
294
- }
295
- const command = args[0];
296
- const remote = args[1];
297
- if (command === "add" && remote && args[2]) {
298
- await Git.addRemote({ fs: this.fs, dir, remote, url: args[2] });
299
- return ok();
300
- }
301
- if ((command === "remove" || command === "rm") && remote) {
302
- await Git.deleteRemote({ fs: this.fs, dir, remote });
303
- return ok();
304
- }
305
- if (command === "get-url" && remote) {
306
- const url = await Git.getConfig({ fs: this.fs, dir, path: `remote.${remote}.url` });
307
- return url ? ok(`${url}\n`) : fail(`error: No such remote '${remote}'\n`, 2);
308
- }
309
- if (command === "set-url" && remote && args[2]) {
310
- await Git.setConfig({ fs: this.fs, dir, path: `remote.${remote}.url`, value: args[2] });
311
- return ok();
312
- }
313
- return fail("usage: git remote [-v] | git remote add <name> <url> | git remote get-url <name> | git remote set-url <name> <url>\n", 129);
314
- }
315
- async fetch(dir, args) {
316
- const operands = optionOperands(args, ["--depth"], ["--all", "--prune", "--no-tags"]);
317
- const remote = operands[0] ?? "origin";
318
- const ref = operands[1];
319
- const depth = numberOption(args, "--depth", "--depth");
320
- await Git.fetch({
321
- fs: this.fs,
322
- http: this.http,
323
- dir,
324
- remote,
325
- ...(ref ? { ref, singleBranch: true } : {}),
326
- ...(depth !== undefined ? { depth } : {}),
327
- tags: !args.includes("--no-tags"),
328
- prune: args.includes("--prune"),
329
- });
330
- return ok(`Fetched ${remote}${ref ? `/${ref}` : ""}\n`);
331
- }
332
- async pull(dir, args) {
333
- const operands = optionOperands(args, [], ["--ff-only"]);
334
- const remote = operands[0] ?? "origin";
335
- const ref = operands[1] ?? await Git.currentBranch({ fs: this.fs, dir, fullname: false }) ?? undefined;
336
- const before = await Git.resolveRef({ fs: this.fs, dir, ref: "HEAD" });
337
- await Git.pull({
338
- fs: this.fs,
339
- http: this.http,
340
- dir,
341
- remote,
342
- ...(ref ? { ref, remoteRef: ref } : {}),
343
- fastForwardOnly: args.includes("--ff-only"),
344
- singleBranch: Boolean(ref),
345
- });
346
- const after = await Git.resolveRef({ fs: this.fs, dir, ref: "HEAD" });
347
- return ok(before === after ? "Already up to date.\n" : `Updating ${before.slice(0, 7)}..${after.slice(0, 7)}\n`);
348
- }
349
- async push(dir, args) {
350
- const operands = optionOperands(args, [], ["-f", "--force", "-u", "--set-upstream", "--delete"]);
351
- const remote = operands[0] ?? "origin";
352
- const refspec = operands[1] ?? await Git.currentBranch({ fs: this.fs, dir, fullname: false }) ?? undefined;
353
- const [ref, remoteRef] = refspec?.split(":", 2) ?? [];
354
- const result = await Git.push({
355
- fs: this.fs,
356
- http: this.http,
357
- dir,
358
- remote,
359
- ...(ref ? { ref } : {}),
360
- ...(remoteRef ? { remoteRef } : ref ? { remoteRef: ref } : {}),
361
- force: args.includes("-f") || args.includes("--force"),
362
- delete: args.includes("--delete"),
363
- });
364
- const errors = [
365
- ...(result.error ? [result.error] : []),
366
- ...Object.entries(result.refs).filter(([, value]) => !value.ok).map(([name, value]) => `${name}: ${value.error}`),
367
- ];
368
- if (!result.ok || errors.length > 0)
369
- return fail(`${errors.join("\n")}\n`, 1);
370
- if ((args.includes("-u") || args.includes("--set-upstream")) && ref) {
371
- await Git.setConfig({ fs: this.fs, dir, path: `branch.${ref}.remote`, value: remote });
372
- await Git.setConfig({ fs: this.fs, dir, path: `branch.${ref}.merge`, value: `refs/heads/${remoteRef ?? ref}` });
373
- }
374
- return ok(`To ${await this.remoteUrl(dir, remote)}\n ${ref ?? "HEAD"} -> ${remoteRef ?? ref ?? "HEAD"}\n`);
375
- }
376
- async remoteUrl(dir, remote) {
377
- return await Git.getConfig({ fs: this.fs, dir, path: `remote.${remote}.url` }) ?? remote;
378
- }
379
- repositoryRoot(cwd) {
380
- let candidate = cwd;
381
- while (true) {
382
- if (this.filesystem.existsSync(resolve(candidate, ".git")))
383
- return candidate;
384
- if (candidate === "/")
385
- return;
386
- candidate = dirname(candidate);
387
- }
388
- }
389
- removeTree(path) {
390
- if (!this.filesystem.existsSync(path))
391
- return;
392
- if (!this.filesystem.statSync(path).isDirectory()) {
393
- this.filesystem.unlinkSync(path);
394
- return;
395
- }
396
- for (const name of this.filesystem.readdirSync(path))
397
- this.removeTree(resolve(path, name));
398
- this.filesystem.rmdirSync(path);
399
- }
400
- }
401
- function gitWorkingDirectory(rawArgs, initialCwd) {
402
- let cwd = normalize(initialCwd);
403
- let index = 0;
404
- while (rawArgs[index] === "-C") {
405
- const directory = rawArgs[index + 1];
406
- if (!directory)
407
- throw new Error("option '-C' requires a value");
408
- cwd = normalize(resolve(cwd, directory));
409
- index += 2;
410
- }
411
- return { args: rawArgs.slice(index), cwd };
412
- }
413
- async function loadGitRuntime() {
414
- loadPromise ??= import("buffer").then(async (buffer) => {
415
- // isomorphic-git intentionally consumes the browser-global Buffer.
416
- // It must be installed before importing isomorphic-git: concurrent dynamic
417
- // imports race module evaluation and can leave its internal dependency
418
- // resolver permanently initialized without Buffer.
419
- // Vite exposes this CommonJS package as `default`, while native Node ESM
420
- // also synthesizes the named export. Accept both shapes for consumers
421
- // without relying on a particular bundler's interop transform.
422
- const BrowserBuffer = buffer.Buffer
423
- ?? buffer.default?.Buffer;
424
- if (!BrowserBuffer)
425
- throw new Error("Browser Git could not load the Buffer implementation.");
426
- globalThis.Buffer = BrowserBuffer;
427
- const [git, difference] = await Promise.all([
428
- import("isomorphic-git"),
429
- import("diff"),
430
- ]);
431
- Git = git;
432
- createPatch = difference.createTwoFilesPatch;
433
- });
434
- return loadPromise;
435
- }
436
- const HELP = `usage: git <command> [<args>]\n\nBrowser commands: init, clone, status, add, rm, commit, config, log, branch, checkout, diff, rev-parse, ls-files, remote, fetch, pull, push\n`;
437
- function ok(stdout = "") { return { stdout, stderr: "", exitCode: 0 }; }
438
- function fail(stderr, exitCode) { return { stdout: "", stderr, exitCode }; }
439
- function cleanError(cause) {
440
- const message = cause instanceof Error ? cause.message : String(cause);
441
- return message.replace(/^.*?Error:\s*/u, "").replace(/\s+$/u, "");
442
- }
443
- function statusCode([, head, worktree, stage]) {
444
- if (head === 0 && worktree !== 0 && stage === 0)
445
- return "??";
446
- const index = head === 0 && stage !== 0 ? "A" : head !== 0 && stage === 0 ? "D" : stage !== head ? "M" : " ";
447
- const tree = worktree === 0 && stage !== 0 ? "D" : worktree !== 0 && stage !== worktree ? "M" : " ";
448
- return `${index}${tree}`;
449
- }
450
- function optionIndex(args, short, long) {
451
- return args.findIndex((value) => value === short || value === long);
452
- }
453
- function numberOption(args, short, long) {
454
- const index = optionIndex(args, short, long);
455
- const raw = index >= 0 ? args[index + 1] : args.find((value) => value.startsWith(`${long}=`))?.slice(long.length + 1);
456
- if (!raw)
457
- return;
458
- const value = Number(raw);
459
- return Number.isSafeInteger(value) && value >= 0 ? value : undefined;
460
- }
461
- function optionOperands(args, valueOptions, flags) {
462
- const operands = [];
463
- for (let index = 0; index < args.length; index += 1) {
464
- const value = args[index];
465
- if (flags.includes(value))
466
- continue;
467
- if (valueOptions.some((option) => value.startsWith(`${option}=`)))
468
- continue;
469
- if (valueOptions.includes(value)) {
470
- index += 1;
471
- continue;
472
- }
473
- operands.push(value);
474
- }
475
- return operands;
476
- }
477
- function repositoryName(value) {
478
- const url = new URL(value);
479
- const name = url.pathname.split("/").filter(Boolean).at(-1)?.replace(/\.git$/u, "");
480
- if (!name)
481
- throw new Error("repository URL does not contain a destination name");
482
- return decodeURIComponent(name);
483
- }
484
- function repositoryPath(dir, cwd, path) {
485
- const absolute = resolve(cwd, path);
486
- if (absolute !== dir && !absolute.startsWith(`${dir}/`))
487
- throw new Error(`'${path}' is outside repository`);
488
- return absolute === dir ? "." : absolute.slice(dir.length + (dir === "/" ? 0 : 1));
489
- }
490
- function resolve(base, path) { return normalize(path.startsWith("/") ? path : `${base}/${path}`); }
491
- function dirname(path) {
492
- const index = path.lastIndexOf("/");
493
- return index <= 0 ? "/" : path.slice(0, index);
494
- }
495
- function normalize(value) {
496
- const parts = [];
497
- for (const part of `/${value}`.split("/")) {
498
- if (!part || part === ".")
499
- continue;
500
- if (part === "..")
501
- parts.pop();
502
- else
503
- parts.push(part);
504
- }
505
- return `/${parts.join("/")}`;
506
- }
507
- function equalBytes(left, right) {
508
- if (!left || !right)
509
- return !left && !right;
510
- return left.byteLength === right.byteLength && left.every((value, index) => value === right[index]);
511
- }
512
- function binary(value) { return !!value?.subarray(0, 8_000).includes(0); }
513
- function decode(value) { return value ? new TextDecoder().decode(value) : ""; }
514
- //# sourceMappingURL=browser-git.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-git.js","sourceRoot":"","sources":["../src/browser-git.ts"],"names":[],"mappings":"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"}