@volter/browser-toolbelt 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.
Files changed (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/dist/browser-git-filesystem.d.ts +18 -0
  4. package/dist/browser-git-filesystem.d.ts.map +1 -0
  5. package/dist/browser-git-filesystem.js +84 -0
  6. package/dist/browser-git-filesystem.js.map +1 -0
  7. package/dist/browser-git-http.d.ts +32 -0
  8. package/dist/browser-git-http.d.ts.map +1 -0
  9. package/dist/browser-git-http.js +127 -0
  10. package/dist/browser-git-http.js.map +1 -0
  11. package/dist/browser-git.d.ts +38 -0
  12. package/dist/browser-git.d.ts.map +1 -0
  13. package/dist/browser-git.js +514 -0
  14. package/dist/browser-git.js.map +1 -0
  15. package/dist/browser-share-command.d.ts +11 -0
  16. package/dist/browser-share-command.d.ts.map +1 -0
  17. package/dist/browser-share-command.js +59 -0
  18. package/dist/browser-share-command.js.map +1 -0
  19. package/dist/browser-shell-filesystem.d.ts +39 -0
  20. package/dist/browser-shell-filesystem.d.ts.map +1 -0
  21. package/dist/browser-shell-filesystem.js +138 -0
  22. package/dist/browser-shell-filesystem.js.map +1 -0
  23. package/dist/browser-shell.d.ts +38 -0
  24. package/dist/browser-shell.d.ts.map +1 -0
  25. package/dist/browser-shell.js +412 -0
  26. package/dist/browser-shell.js.map +1 -0
  27. package/dist/github-device-auth.d.ts +56 -0
  28. package/dist/github-device-auth.d.ts.map +1 -0
  29. package/dist/github-device-auth.js +157 -0
  30. package/dist/github-device-auth.js.map +1 -0
  31. package/dist/index.d.ts +8 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +8 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/install.d.ts +17 -0
  36. package/dist/install.d.ts.map +1 -0
  37. package/dist/install.js +21 -0
  38. package/dist/install.js.map +1 -0
  39. package/package.json +27 -0
@@ -0,0 +1,514 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-git.js","sourceRoot":"","sources":["../src/browser-git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { BrowserProcessResult, BrowserProcessRunOptions } from "@volter/browser-runtime/browser-process.js";
2
+ import type { BrowserRuntime } from "@volter/browser-runtime/browser-runtime.js";
3
+ /** Small shell adapter for the runtime's snapshot and live-port share APIs. */
4
+ export declare class BrowserShareCommand {
5
+ private readonly runtime;
6
+ private readonly tunnels;
7
+ constructor(runtime: BrowserRuntime);
8
+ run: (argv: readonly string[], _options?: BrowserProcessRunOptions) => Promise<BrowserProcessResult>;
9
+ close(): void;
10
+ }
11
+ //# sourceMappingURL=browser-share-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-share-command.d.ts","sourceRoot":"","sources":["../src/browser-share-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACjH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAGjF,+EAA+E;AAC/E,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;gBAEnC,OAAO,EAAE,cAAc;IAEpD,GAAG,GAAU,MAAM,SAAS,MAAM,EAAE,EAAE,WAAU,wBAA6B,KAAG,OAAO,CAAC,oBAAoB,CAAC,CAkC3G;IAEF,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,59 @@
1
+ /** Small shell adapter for the runtime's snapshot and live-port share APIs. */
2
+ export class BrowserShareCommand {
3
+ runtime;
4
+ tunnels = new Map();
5
+ constructor(runtime) {
6
+ this.runtime = runtime;
7
+ }
8
+ run = async (argv, _options = {}) => {
9
+ const arguments_ = argv[0]?.split("/").at(-1) === "share" ? argv.slice(1) : argv;
10
+ const [operation, target] = arguments_;
11
+ try {
12
+ if (operation === "port") {
13
+ const port = Number(target);
14
+ const tunnel = await this.runtime.sharePort(port);
15
+ await tunnel.ready;
16
+ this.tunnels.set(tunnel.id, tunnel);
17
+ return success(`${tunnel.url}\nexpires ${tunnel.expiresAt}\nid ${tunnel.id}\n`);
18
+ }
19
+ if (operation === "snapshot") {
20
+ if (!target)
21
+ return failure("usage: share snapshot <built-directory> [index-file]\n", 2);
22
+ const snapshot = await this.runtime.publishDirectory(target, {
23
+ ...(arguments_[2] ? { index: arguments_[2] } : {}),
24
+ });
25
+ return success(`${snapshot.url}\nexpires ${snapshot.expiresAt}\n${snapshot.files} files, ${snapshot.bytes} bytes\n`);
26
+ }
27
+ if (operation === "list") {
28
+ const lines = [...this.tunnels.values()].map((tunnel) => `${tunnel.id}\t${tunnel.url}\t${tunnel.expiresAt}`);
29
+ return success(lines.length ? `${lines.join("\n")}\n` : "No live tunnels.\n");
30
+ }
31
+ if (operation === "close") {
32
+ if (!target)
33
+ return failure("usage: share close <id>\n", 2);
34
+ const tunnel = this.tunnels.get(target);
35
+ if (!tunnel)
36
+ return failure(`share: live tunnel not found: ${target}\n`, 1);
37
+ tunnel.close();
38
+ this.tunnels.delete(target);
39
+ return success(`Closed ${target}.\n`);
40
+ }
41
+ return failure("usage: share port <port> | snapshot <built-directory> [index-file] | list | close <id>\n", 2);
42
+ }
43
+ catch (cause) {
44
+ return failure(`share: ${cause instanceof Error ? cause.message : "operation failed"}\n`, 1);
45
+ }
46
+ };
47
+ close() {
48
+ for (const tunnel of this.tunnels.values())
49
+ tunnel.close();
50
+ this.tunnels.clear();
51
+ }
52
+ }
53
+ function success(stdout) {
54
+ return { stdout, stderr: "", exitCode: 0 };
55
+ }
56
+ function failure(stderr, exitCode) {
57
+ return { stdout: "", stderr, exitCode };
58
+ }
59
+ //# sourceMappingURL=browser-share-command.js.map