@poe-platform/safe-bash 0.1.0 → 0.1.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/README.md +5 -2
- package/package.json +2 -2
- package/dist/safe-bash/commands/git/arguments.d.ts +0 -17
- package/dist/safe-bash/commands/git/arguments.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/arguments.js +0 -150
- package/dist/safe-bash/commands/git/arguments.js.map +0 -1
- package/dist/safe-bash/commands/git/codec.d.ts +0 -8
- package/dist/safe-bash/commands/git/codec.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/codec.js +0 -225
- package/dist/safe-bash/commands/git/codec.js.map +0 -1
- package/dist/safe-bash/commands/git/config.d.ts +0 -8
- package/dist/safe-bash/commands/git/config.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/config.js +0 -100
- package/dist/safe-bash/commands/git/config.js.map +0 -1
- package/dist/safe-bash/commands/git/crc.d.ts +0 -3
- package/dist/safe-bash/commands/git/crc.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/crc.js +0 -14
- package/dist/safe-bash/commands/git/crc.js.map +0 -1
- package/dist/safe-bash/commands/git/delta.d.ts +0 -4
- package/dist/safe-bash/commands/git/delta.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/delta.js +0 -62
- package/dist/safe-bash/commands/git/delta.js.map +0 -1
- package/dist/safe-bash/commands/git/diff.d.ts +0 -9
- package/dist/safe-bash/commands/git/diff.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/diff.js +0 -131
- package/dist/safe-bash/commands/git/diff.js.map +0 -1
- package/dist/safe-bash/commands/git/ignore.d.ts +0 -22
- package/dist/safe-bash/commands/git/ignore.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/ignore.js +0 -153
- package/dist/safe-bash/commands/git/ignore.js.map +0 -1
- package/dist/safe-bash/commands/git/index.d.ts +0 -7
- package/dist/safe-bash/commands/git/index.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/index.js +0 -66
- package/dist/safe-bash/commands/git/index.js.map +0 -1
- package/dist/safe-bash/commands/git/io.d.ts +0 -46
- package/dist/safe-bash/commands/git/io.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/io.js +0 -388
- package/dist/safe-bash/commands/git/io.js.map +0 -1
- package/dist/safe-bash/commands/git/limits.d.ts +0 -39
- package/dist/safe-bash/commands/git/limits.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/limits.js +0 -43
- package/dist/safe-bash/commands/git/limits.js.map +0 -1
- package/dist/safe-bash/commands/git/pack.d.ts +0 -14
- package/dist/safe-bash/commands/git/pack.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/pack.js +0 -273
- package/dist/safe-bash/commands/git/pack.js.map +0 -1
- package/dist/safe-bash/commands/git/queries.d.ts +0 -6
- package/dist/safe-bash/commands/git/queries.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/queries.js +0 -292
- package/dist/safe-bash/commands/git/queries.js.map +0 -1
- package/dist/safe-bash/commands/git/repository.d.ts +0 -49
- package/dist/safe-bash/commands/git/repository.d.ts.map +0 -1
- package/dist/safe-bash/commands/git/repository.js +0 -473
- package/dist/safe-bash/commands/git/repository.js.map +0 -1
package/README.md
CHANGED
|
@@ -4,8 +4,11 @@ Run shell scripts and command-line tools in your application against an explicit
|
|
|
4
4
|
|
|
5
5
|
## Quickstart
|
|
6
6
|
|
|
7
|
-
Install
|
|
8
|
-
|
|
7
|
+
Install in a Node.js 22+ ESM application:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
npm install @poe-platform/safe-bash
|
|
11
|
+
```
|
|
9
12
|
|
|
10
13
|
```ts
|
|
11
14
|
import { Shell, agentCommands, createMemoryFileSystem } from "@poe-platform/safe-bash";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@poe-platform/safe-bash",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Extensible virtual shell with pluggable filesystems and streaming commands",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
"access": "public"
|
|
138
138
|
},
|
|
139
139
|
"dependencies": {
|
|
140
|
-
"@poe-platform/safe-js": "0.1.
|
|
140
|
+
"@poe-platform/safe-js": "0.1.1",
|
|
141
141
|
"@types/node": "^25.2.2"
|
|
142
142
|
}
|
|
143
143
|
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export interface Arguments {
|
|
2
|
-
command: string;
|
|
3
|
-
cwd: string;
|
|
4
|
-
literal: boolean;
|
|
5
|
-
paths: string[];
|
|
6
|
-
operands: string[];
|
|
7
|
-
flags: Set<string>;
|
|
8
|
-
untracked: "no" | "normal" | "all";
|
|
9
|
-
context: number;
|
|
10
|
-
count: number | undefined;
|
|
11
|
-
format: "oneline" | "%H" | "%H %s" | undefined;
|
|
12
|
-
}
|
|
13
|
-
export declare function argumentsFor(args: readonly string[], cwd: string): Arguments;
|
|
14
|
-
export declare function pathspecs(parsed: Arguments, root: string | undefined): string[];
|
|
15
|
-
export declare function selected(path: string, specs: readonly string[]): boolean;
|
|
16
|
-
export declare function quote(path: string): string;
|
|
17
|
-
//# sourceMappingURL=arguments.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../../../src/commands/git/arguments.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACpF,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,QAAQ,GAAG,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnG,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,CAAC;CAChD;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CA0D5E;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAa/E;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAA4G;AAErL,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO1C"}
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { resolvePath } from "../../contracts/index.js";
|
|
2
|
-
import { objectPath } from "./io.js";
|
|
3
|
-
import { GIT_LIMITS, GitFailure } from "./limits.js";
|
|
4
|
-
function usage(message) { throw new GitFailure(message, 129); }
|
|
5
|
-
export function argumentsFor(args, cwd) {
|
|
6
|
-
if (!Array.isArray(args) || args.length > 128)
|
|
7
|
-
usage("Git argv count exceeded");
|
|
8
|
-
let size = 0;
|
|
9
|
-
for (const arg of args) {
|
|
10
|
-
if (typeof arg !== "string" || arg.includes("\0"))
|
|
11
|
-
usage("invalid Git argument");
|
|
12
|
-
size += Buffer.byteLength(arg);
|
|
13
|
-
if (size > GIT_LIMITS.maxArgumentBytes)
|
|
14
|
-
usage("Git argument byte limit exceeded");
|
|
15
|
-
}
|
|
16
|
-
let offset = 0, cwdOptions = 0, literal = false;
|
|
17
|
-
while (offset < args.length && args[offset].startsWith("-")) {
|
|
18
|
-
const flag = args[offset++];
|
|
19
|
-
if (flag === "--no-pager")
|
|
20
|
-
continue;
|
|
21
|
-
if (flag === "--literal-pathspecs") {
|
|
22
|
-
literal = true;
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
if (flag === "-C") {
|
|
26
|
-
if (++cwdOptions > 8 || args[offset] === undefined)
|
|
27
|
-
usage("invalid Git -C");
|
|
28
|
-
cwd = resolvePath(cwd, args[offset++]);
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
usage(`unsupported Git global option: ${flag}`);
|
|
32
|
-
}
|
|
33
|
-
const command = args[offset++] ?? "";
|
|
34
|
-
if (!["status", "diff", "log", "show", "rev-parse", "ls-files"].includes(command))
|
|
35
|
-
usage(`unsupported Git subcommand: ${command || "(missing)"}`);
|
|
36
|
-
const result = { command, cwd, literal, paths: [], operands: [], flags: new Set(), untracked: "normal", context: 3, count: undefined, format: undefined };
|
|
37
|
-
let paths = false;
|
|
38
|
-
const value = (attached) => { const input = attached ?? args[offset++]; if (input === undefined)
|
|
39
|
-
usage("missing Git option value"); return input; };
|
|
40
|
-
const integer = (text, maximum) => { if (!/^(0|[1-9][0-9]{0,6})$/.test(text) || Number(text) > maximum)
|
|
41
|
-
usage("invalid Git numeric option"); return Number(text); };
|
|
42
|
-
for (; offset < args.length;) {
|
|
43
|
-
const arg = args[offset++];
|
|
44
|
-
if (arg === "--" && !paths) {
|
|
45
|
-
paths = true;
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
if (paths) {
|
|
49
|
-
if (["status", "diff", "ls-files"].includes(command))
|
|
50
|
-
result.paths.push(arg);
|
|
51
|
-
else
|
|
52
|
-
result.operands.push(arg);
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
if (!arg.startsWith("-")) {
|
|
56
|
-
if (command === "status" || command === "ls-files")
|
|
57
|
-
result.paths.push(arg);
|
|
58
|
-
else
|
|
59
|
-
result.operands.push(arg);
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
const allowed = {
|
|
63
|
-
"rev-parse": ["--show-toplevel", "--absolute-git-dir", "--is-inside-work-tree", "--is-bare-repository", "--verify"],
|
|
64
|
-
"ls-files": ["--cached", "--stage", "-s", "-z"],
|
|
65
|
-
status: ["--short", "-s", "--porcelain", "--porcelain=v1", "-z", "--no-renames"],
|
|
66
|
-
diff: ["--cached", "--staged", "--name-only", "--name-status", "-z", "--exit-code", "--quiet", "-p", "--patch", "--full-index", "--no-renames", "--no-ext-diff", "--no-textconv", "--no-color"],
|
|
67
|
-
log: ["--first-parent", "--oneline"], show: ["--no-patch"],
|
|
68
|
-
};
|
|
69
|
-
if (allowed[command].includes(arg)) {
|
|
70
|
-
result.flags.add(arg);
|
|
71
|
-
if (arg === "--oneline")
|
|
72
|
-
result.format = "oneline";
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
if (command === "status" && (arg === "-u" || arg.startsWith("-u") || arg.startsWith("--untracked-files="))) {
|
|
76
|
-
const kind = arg === "-u" ? "all" : arg.startsWith("--") ? arg.slice(18) : arg.slice(2);
|
|
77
|
-
if (!["no", "normal", "all"].includes(kind))
|
|
78
|
-
usage("invalid Git untracked mode");
|
|
79
|
-
result.untracked = kind;
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
if (command === "diff" && (arg.startsWith("-U") || arg.startsWith("--unified="))) {
|
|
83
|
-
result.context = integer(value(arg.startsWith("-U") ? arg.slice(2) || undefined : arg.slice(10)), 100);
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
if (command === "log" && (arg === "-n" || arg.startsWith("-n") || arg.startsWith("--max-count="))) {
|
|
87
|
-
result.count = integer(value(arg.startsWith("--") ? arg.slice(12) : arg.slice(2) || undefined), GIT_LIMITS.maxCommits);
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
if (["log", "show"].includes(command) && arg.startsWith("--format=")) {
|
|
91
|
-
const format = arg.slice(9);
|
|
92
|
-
if (format !== "%H" && format !== "%H %s")
|
|
93
|
-
usage("unsupported Git format");
|
|
94
|
-
result.format = format;
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
usage(`unsupported Git ${command} option: ${arg}`);
|
|
98
|
-
}
|
|
99
|
-
if (command === "status" && !["--short", "-s", "--porcelain", "--porcelain=v1", "-z"].some(flag => result.flags.has(flag)))
|
|
100
|
-
usage("M1A status requires --short or --porcelain");
|
|
101
|
-
if (command === "log" && (!result.flags.has("--first-parent") || !result.format))
|
|
102
|
-
usage("M1A log requires --first-parent and a supported format");
|
|
103
|
-
if (command === "show" && result.flags.has("--no-patch") && !result.format)
|
|
104
|
-
usage("M1A show --no-patch requires a format");
|
|
105
|
-
if (command === "diff" && result.flags.has("-z") && !result.flags.has("--name-only") && !result.flags.has("--name-status") && !result.flags.has("--quiet"))
|
|
106
|
-
usage("Git -z requires a name list");
|
|
107
|
-
if (command === "diff" && result.flags.has("--name-only") && result.flags.has("--name-status"))
|
|
108
|
-
usage("conflicting Git diff output options");
|
|
109
|
-
const maximum = command === "diff" ? 2 : command === "ls-files" || command === "status" ? 0 : 1;
|
|
110
|
-
if (result.operands.length > maximum)
|
|
111
|
-
usage("too many Git operands");
|
|
112
|
-
if (command === "rev-parse" && (result.flags.size > 1 || result.operands.length && [...result.flags].some(flag => flag !== "--verify") || !result.flags.size && !result.operands.length || result.flags.has("--verify") && !result.operands.length))
|
|
113
|
-
usage("invalid Git rev-parse selection");
|
|
114
|
-
if (command === "show" && result.operands.length !== 1)
|
|
115
|
-
usage("Git show requires one operand");
|
|
116
|
-
return result;
|
|
117
|
-
}
|
|
118
|
-
export function pathspecs(parsed, root) {
|
|
119
|
-
if (!parsed.paths.length)
|
|
120
|
-
return [];
|
|
121
|
-
const base = root ?? parsed.cwd;
|
|
122
|
-
return parsed.paths.map(raw => {
|
|
123
|
-
let name = raw, literal = parsed.literal;
|
|
124
|
-
if (!literal && name.startsWith(":(literal)")) {
|
|
125
|
-
name = name.slice(10);
|
|
126
|
-
literal = true;
|
|
127
|
-
}
|
|
128
|
-
if (!name || !literal && /[*?\[\\]|^:/.test(name))
|
|
129
|
-
usage("unsupported Git pathspec");
|
|
130
|
-
const absolute = resolvePath(parsed.cwd, name);
|
|
131
|
-
if (absolute !== base && !absolute.startsWith(base + "/"))
|
|
132
|
-
usage("Git pathspec outside worktree");
|
|
133
|
-
const path = absolute === base ? "" : absolute.slice(base.length + 1);
|
|
134
|
-
if (path)
|
|
135
|
-
objectPath(path);
|
|
136
|
-
return path;
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
export function selected(path, specs) { return specs.length === 0 || specs.some(spec => !spec || path === spec || path.startsWith(spec + "/")); }
|
|
140
|
-
export function quote(path) {
|
|
141
|
-
const bytes = Buffer.from(path);
|
|
142
|
-
if (bytes.every(byte => byte > 32 && byte < 127 && byte !== 34 && byte !== 92))
|
|
143
|
-
return path;
|
|
144
|
-
let result = '"';
|
|
145
|
-
const escapes = { 7: "\\a", 8: "\\b", 9: "\\t", 10: "\\n", 11: "\\v", 12: "\\f", 13: "\\r", 34: '\\"', 92: "\\\\" };
|
|
146
|
-
for (const byte of bytes)
|
|
147
|
-
result += escapes[byte] ?? (byte >= 32 && byte < 127 ? String.fromCharCode(byte) : "\\" + byte.toString(8).padStart(3, "0"));
|
|
148
|
-
return result + '"';
|
|
149
|
-
}
|
|
150
|
-
//# sourceMappingURL=arguments.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../../src/commands/git/arguments.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Session } from "./io.js";
|
|
2
|
-
export interface GitObject {
|
|
3
|
-
readonly type: "blob" | "tree" | "commit" | "tag";
|
|
4
|
-
readonly bytes: Buffer;
|
|
5
|
-
}
|
|
6
|
-
export declare function inflatePackedFrame(session: Session, compressed: Uint8Array, declaredBytes: number): Promise<Buffer>;
|
|
7
|
-
export declare function inflateObject(session: Session, compressed: Buffer, oid: string): Promise<GitObject>;
|
|
8
|
-
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../../src/commands/git/codec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,WAAW,SAAS;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAExG,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0EzH;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAiGzG"}
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import { createInflate } from "node:zlib";
|
|
2
|
-
import { ConsumerClosed, GIT_LIMITS, GitFailure, demand } from "./limits.js";
|
|
3
|
-
export async function inflatePackedFrame(session, compressed, declaredBytes) {
|
|
4
|
-
demand(Number.isSafeInteger(declaredBytes) && declaredBytes >= 0 && declaredBytes <= GIT_LIMITS.maxObjectBytes, "Git packed body size exceeded");
|
|
5
|
-
const body = session.allocate(declaredBytes);
|
|
6
|
-
let codec;
|
|
7
|
-
let closing;
|
|
8
|
-
let written;
|
|
9
|
-
let codecError, hasCodecError = false, reserved = false, success = false;
|
|
10
|
-
const close = async () => {
|
|
11
|
-
if (!codec)
|
|
12
|
-
return;
|
|
13
|
-
closing ??= new Promise(resolve => {
|
|
14
|
-
if (codec.closed) {
|
|
15
|
-
resolve();
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
codec.once("close", resolve);
|
|
19
|
-
codec.destroy();
|
|
20
|
-
});
|
|
21
|
-
await closing;
|
|
22
|
-
};
|
|
23
|
-
try {
|
|
24
|
-
session.reserve(GIT_LIMITS.maxChunkBytes * 2);
|
|
25
|
-
reserved = true;
|
|
26
|
-
const stream = await session.operation.acquire(() => {
|
|
27
|
-
codec = createInflate({ chunkSize: GIT_LIMITS.maxChunkBytes });
|
|
28
|
-
codec.on("error", error => { if (!hasCodecError) {
|
|
29
|
-
hasCodecError = true;
|
|
30
|
-
codecError = error;
|
|
31
|
-
} });
|
|
32
|
-
return codec;
|
|
33
|
-
}, close);
|
|
34
|
-
const write = async () => {
|
|
35
|
-
try {
|
|
36
|
-
for (let offset = 0; offset < compressed.length; offset += 4096) {
|
|
37
|
-
const part = compressed.subarray(offset, offset + 4096);
|
|
38
|
-
await session.step(part.length);
|
|
39
|
-
await new Promise((resolve, reject) => {
|
|
40
|
-
let settled = false;
|
|
41
|
-
const finish = (error) => {
|
|
42
|
-
if (settled)
|
|
43
|
-
return;
|
|
44
|
-
settled = true;
|
|
45
|
-
stream.removeListener("close", closed);
|
|
46
|
-
if (error)
|
|
47
|
-
reject(error);
|
|
48
|
-
else
|
|
49
|
-
resolve();
|
|
50
|
-
};
|
|
51
|
-
const closed = () => finish(new GitFailure("Git packed codec closed during write"));
|
|
52
|
-
if (stream.destroyed) {
|
|
53
|
-
closed();
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
stream.once("close", closed);
|
|
57
|
-
stream.write(part, finish);
|
|
58
|
-
});
|
|
59
|
-
if (stream.readableEnded)
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
|
-
stream.end();
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
stream.destroy();
|
|
66
|
-
throw error;
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
written = write();
|
|
70
|
-
void written.catch(() => { });
|
|
71
|
-
let produced = 0;
|
|
72
|
-
for await (const chunk of stream) {
|
|
73
|
-
session.check();
|
|
74
|
-
demand(chunk instanceof Uint8Array && chunk.length <= GIT_LIMITS.maxChunkBytes, "invalid Git packed codec chunk");
|
|
75
|
-
session.charge("maxInflatedBytes", chunk.length);
|
|
76
|
-
demand(chunk.length <= declaredBytes - produced, "Git packed body exceeds declared size");
|
|
77
|
-
await session.copyInto(body, chunk, produced);
|
|
78
|
-
produced += chunk.length;
|
|
79
|
-
}
|
|
80
|
-
await written;
|
|
81
|
-
demand(produced === declaredBytes, "truncated Git packed body");
|
|
82
|
-
demand(stream.bytesWritten === compressed.length, "trailing Git packed zlib input");
|
|
83
|
-
success = true;
|
|
84
|
-
return body;
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
session.context.signal.throwIfAborted();
|
|
88
|
-
if (session.operation.signal.aborted)
|
|
89
|
-
session.check();
|
|
90
|
-
if (hasCodecError && error === codecError)
|
|
91
|
-
throw new GitFailure("invalid Git packed zlib frame");
|
|
92
|
-
throw error;
|
|
93
|
-
}
|
|
94
|
-
finally {
|
|
95
|
-
await close();
|
|
96
|
-
await written?.catch(() => { });
|
|
97
|
-
if (!success)
|
|
98
|
-
session.release(body);
|
|
99
|
-
if (reserved)
|
|
100
|
-
session.unreserve(GIT_LIMITS.maxChunkBytes * 2);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
export async function inflateObject(session, compressed, oid) {
|
|
104
|
-
session.reserve(GIT_LIMITS.maxChunkBytes * 2);
|
|
105
|
-
const header = session.allocate(128);
|
|
106
|
-
let closing;
|
|
107
|
-
let codecError;
|
|
108
|
-
let hasCodecError = false;
|
|
109
|
-
let disposed = false;
|
|
110
|
-
const codec = await session.operation.acquire(() => {
|
|
111
|
-
const stream = createInflate({ chunkSize: GIT_LIMITS.maxChunkBytes });
|
|
112
|
-
stream.on("error", error => { if (!hasCodecError) {
|
|
113
|
-
hasCodecError = true;
|
|
114
|
-
codecError = error;
|
|
115
|
-
} });
|
|
116
|
-
return stream;
|
|
117
|
-
}, async (stream) => {
|
|
118
|
-
closing ??= new Promise(resolve => {
|
|
119
|
-
if (stream.closed) {
|
|
120
|
-
resolve();
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
stream.once("close", resolve);
|
|
124
|
-
disposed = true;
|
|
125
|
-
stream.destroy();
|
|
126
|
-
});
|
|
127
|
-
await closing;
|
|
128
|
-
});
|
|
129
|
-
let written;
|
|
130
|
-
let body;
|
|
131
|
-
let headerLength = 0;
|
|
132
|
-
let length = 0;
|
|
133
|
-
let type;
|
|
134
|
-
let success = false;
|
|
135
|
-
const writer = async () => {
|
|
136
|
-
try {
|
|
137
|
-
for (let offset = 0; offset < compressed.length; offset += 4096) {
|
|
138
|
-
session.check();
|
|
139
|
-
await session.step(Math.min(4096, compressed.length - offset));
|
|
140
|
-
await new Promise((resolve, reject) => {
|
|
141
|
-
const closed = () => finish(hasCodecError ? codecError : new GitFailure("Git codec closed during write"));
|
|
142
|
-
const finish = (error) => {
|
|
143
|
-
codec.removeListener("close", closed);
|
|
144
|
-
if (error !== undefined)
|
|
145
|
-
reject(error);
|
|
146
|
-
else
|
|
147
|
-
resolve();
|
|
148
|
-
};
|
|
149
|
-
if (codec.destroyed) {
|
|
150
|
-
closed();
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
codec.once("close", closed);
|
|
154
|
-
codec.write(compressed.subarray(offset, offset + 4096), error => finish(error ?? undefined));
|
|
155
|
-
});
|
|
156
|
-
if (codec.readableEnded)
|
|
157
|
-
break;
|
|
158
|
-
}
|
|
159
|
-
codec.end();
|
|
160
|
-
}
|
|
161
|
-
catch (error) {
|
|
162
|
-
codec.destroy(error instanceof Error ? error : new Error("Git codec writer stopped"));
|
|
163
|
-
throw error;
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
try {
|
|
167
|
-
written = writer();
|
|
168
|
-
void written.catch(() => { });
|
|
169
|
-
for await (const value of codec) {
|
|
170
|
-
session.check();
|
|
171
|
-
const chunk = value;
|
|
172
|
-
demand(chunk instanceof Uint8Array && chunk.length <= GIT_LIMITS.maxChunkBytes, "invalid Git codec chunk");
|
|
173
|
-
session.charge("maxInflatedBytes", chunk.length);
|
|
174
|
-
await session.step(chunk.length);
|
|
175
|
-
let offset = 0;
|
|
176
|
-
while (!body && offset < chunk.length) {
|
|
177
|
-
demand(headerLength < header.length, "Git object header limit exceeded");
|
|
178
|
-
const byte = chunk[offset++];
|
|
179
|
-
header[headerLength++] = byte;
|
|
180
|
-
if (byte === 0) {
|
|
181
|
-
const text = header.subarray(0, headerLength - 1).toString("ascii");
|
|
182
|
-
demand(header.subarray(0, headerLength - 1).every(character => character < 128), "non-ASCII Git object header");
|
|
183
|
-
const match = /^(blob|tree|commit|tag) (0|[1-9][0-9]{0,7})$/.exec(text);
|
|
184
|
-
demand(match, "invalid canonical Git object header");
|
|
185
|
-
const size = Number(match[2]);
|
|
186
|
-
demand(size <= GIT_LIMITS.maxObjectBytes, "Git object size exceeded");
|
|
187
|
-
type = match[1];
|
|
188
|
-
body = session.allocate(size);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
if (body) {
|
|
192
|
-
demand(chunk.length - offset <= body.length - length, "Git object exceeds declared length");
|
|
193
|
-
body.set(chunk.subarray(offset), length);
|
|
194
|
-
length += chunk.length - offset;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
await written;
|
|
198
|
-
demand(body && type && body.length === length, "truncated Git object body");
|
|
199
|
-
demand(codec.bytesWritten === compressed.length, "trailing Git zlib input");
|
|
200
|
-
demand(await session.hash(body, type) === oid, "Git object hash mismatch");
|
|
201
|
-
success = true;
|
|
202
|
-
return { type, bytes: body };
|
|
203
|
-
}
|
|
204
|
-
catch (error) {
|
|
205
|
-
session.context.signal.throwIfAborted();
|
|
206
|
-
if (error instanceof GitFailure || error instanceof ConsumerClosed)
|
|
207
|
-
throw error;
|
|
208
|
-
if (disposed && session.operation.signal.aborted)
|
|
209
|
-
session.check();
|
|
210
|
-
if (hasCodecError && error === codecError)
|
|
211
|
-
throw new GitFailure("invalid Git zlib object");
|
|
212
|
-
throw error;
|
|
213
|
-
}
|
|
214
|
-
finally {
|
|
215
|
-
codec.destroy();
|
|
216
|
-
await written?.catch(() => { });
|
|
217
|
-
if (!codec.closed)
|
|
218
|
-
await new Promise(resolve => codec.once("close", resolve));
|
|
219
|
-
if (!success && body)
|
|
220
|
-
session.release(body);
|
|
221
|
-
session.release(header);
|
|
222
|
-
session.unreserve(GIT_LIMITS.maxChunkBytes * 2);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
//# sourceMappingURL=codec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../../src/commands/git/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Session } from "./io.js";
|
|
2
|
-
export interface Configuration {
|
|
3
|
-
readonly bare: boolean;
|
|
4
|
-
readonly fileMode: boolean;
|
|
5
|
-
}
|
|
6
|
-
export declare function configuration(session: Session, gitdir: string, bare: boolean): Promise<Configuration>;
|
|
7
|
-
export declare function environment(values: Record<string, string>): void;
|
|
8
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/git/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,WAAW,aAAa;IAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE;AAyBrF,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAyC3G;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAShE"}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { GIT_LIMITS, demand } from "./limits.js";
|
|
2
|
-
function boolean(value) {
|
|
3
|
-
const normalized = value.toLowerCase();
|
|
4
|
-
demand(["true", "false", "yes", "no", "on", "off", "1", "0", ""].includes(normalized), "invalid Git config boolean");
|
|
5
|
-
return ["true", "yes", "on", "1"].includes(normalized);
|
|
6
|
-
}
|
|
7
|
-
function unquote(value) {
|
|
8
|
-
let output = "";
|
|
9
|
-
let quoted = false;
|
|
10
|
-
for (let offset = 0; offset < value.length; offset++) {
|
|
11
|
-
const character = value[offset];
|
|
12
|
-
if (character === "\\") {
|
|
13
|
-
const next = value[++offset];
|
|
14
|
-
demand(next !== undefined && ['n', 't', 'b', '"', '\\'].includes(next), "unsupported Git config escape/continuation");
|
|
15
|
-
output += next === "n" ? "\n" : next === "t" ? "\t" : next === "b" ? "\b" : next;
|
|
16
|
-
}
|
|
17
|
-
else if (character === '"')
|
|
18
|
-
quoted = !quoted;
|
|
19
|
-
else if (!quoted && (character === "#" || character === ";"))
|
|
20
|
-
break;
|
|
21
|
-
else
|
|
22
|
-
output += character;
|
|
23
|
-
}
|
|
24
|
-
demand(!quoted, "unterminated Git config quote");
|
|
25
|
-
return output.trim();
|
|
26
|
-
}
|
|
27
|
-
export async function configuration(session, gitdir, bare) {
|
|
28
|
-
const bytes = await session.read(session.path(gitdir, "config"), GIT_LIMITS.maxMetadataBytes, true, true);
|
|
29
|
-
let fileMode = true;
|
|
30
|
-
if (!bytes)
|
|
31
|
-
return { bare, fileMode };
|
|
32
|
-
try {
|
|
33
|
-
const text = session.text(bytes);
|
|
34
|
-
demand(!text.includes("\0"), "NUL in Git config");
|
|
35
|
-
session.reserve(bytes.length * 2);
|
|
36
|
-
const values = new Map();
|
|
37
|
-
let section = "";
|
|
38
|
-
for (const raw of text.split("\n")) {
|
|
39
|
-
await session.step(raw.length + 1);
|
|
40
|
-
demand(raw.length <= GIT_LIMITS.maxPathBytes, "Git config line too long");
|
|
41
|
-
const line = raw.trim();
|
|
42
|
-
if (!line || line.startsWith("#") || line.startsWith(";"))
|
|
43
|
-
continue;
|
|
44
|
-
if (line.startsWith("[")) {
|
|
45
|
-
const match = /^\[([A-Za-z][A-Za-z0-9-]*)(?:[ \t]+"([^"\r\n]+)")?\][ \t]*(?:[#;].*)?$/.exec(line);
|
|
46
|
-
demand(match, "unsupported Git config section");
|
|
47
|
-
section = match[1].toLowerCase() + (match[2] === undefined ? "" : "." + match[2]);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
const match = /^([A-Za-z][A-Za-z0-9-]*)(?:[ \t]*=[ \t]*(.*))?$/.exec(line);
|
|
51
|
-
demand(section && match, "invalid Git config key");
|
|
52
|
-
values.set(section + "." + match[1].toLowerCase(), match[2] === undefined ? "true" : unquote(match[2]));
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
for (const [key, value] of values) {
|
|
56
|
-
await session.step();
|
|
57
|
-
if (key === "core.repositoryformatversion")
|
|
58
|
-
demand(value === "0", "unsupported Git repository format");
|
|
59
|
-
else if (key === "core.bare")
|
|
60
|
-
demand(boolean(value) === bare, "Git bare/layout mismatch");
|
|
61
|
-
else if (key === "core.filemode")
|
|
62
|
-
fileMode = boolean(value);
|
|
63
|
-
else if (["core.symlinks", "core.quotepath", "status.relativepaths"].includes(key))
|
|
64
|
-
demand(boolean(value), `unsupported Git ${key}`);
|
|
65
|
-
else if (["core.ignorecase", "core.precomposeunicode", "core.autocrlf", "core.safecrlf", "diff.renames", "status.renames"].includes(key))
|
|
66
|
-
demand(!boolean(value), `unsupported Git ${key}`);
|
|
67
|
-
else if (key === "core.eol")
|
|
68
|
-
demand(value === "lf", "unsupported Git core.eol");
|
|
69
|
-
else if (key === "core.abbrev")
|
|
70
|
-
demand(value === "7", "unsupported Git core.abbrev");
|
|
71
|
-
else if (key === "diff.context")
|
|
72
|
-
demand(value === "3", "unsupported Git diff.context");
|
|
73
|
-
else if (key === "core.logallrefupdates")
|
|
74
|
-
boolean(value);
|
|
75
|
-
else if (key === "user.name" || key === "user.email" || /^remote\..+\.(url|fetch|pushurl)$/.test(key) || /^branch\..+\.(remote|merge|description)$/.test(key))
|
|
76
|
-
continue;
|
|
77
|
-
else
|
|
78
|
-
demand(false, `unsupported Git config: ${key}`);
|
|
79
|
-
}
|
|
80
|
-
return { bare, fileMode };
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
session.release(bytes);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
export function environment(values) {
|
|
87
|
-
for (const key of Object.keys(values)) {
|
|
88
|
-
if (!key.startsWith("GIT_"))
|
|
89
|
-
continue;
|
|
90
|
-
const value = values[key];
|
|
91
|
-
if (key === "GIT_OPTIONAL_LOCKS" && (value === "0" || value === "1"))
|
|
92
|
-
continue;
|
|
93
|
-
if (key === "GIT_PAGER" && (value === "" || value === "cat"))
|
|
94
|
-
continue;
|
|
95
|
-
if (key === "GIT_TERMINAL_PROMPT" && value === "0")
|
|
96
|
-
continue;
|
|
97
|
-
demand(false, `unsupported virtual Git environment: ${key}`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/git/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crc.d.ts","sourceRoot":"","sources":["../../../src/commands/git/crc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,wBAAsB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAWhF"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export async function crc32(session, bytes) {
|
|
2
|
-
let value = 0xffffffff;
|
|
3
|
-
for (let offset = 0; offset < bytes.length; offset += 4096) {
|
|
4
|
-
const end = Math.min(bytes.length, offset + 4096);
|
|
5
|
-
await session.step(end - offset);
|
|
6
|
-
for (let cursor = offset; cursor < end; cursor++) {
|
|
7
|
-
value ^= bytes[cursor];
|
|
8
|
-
for (let bit = 0; bit < 8; bit++)
|
|
9
|
-
value = (value >>> 1) ^ ((value & 1) ? 0xedb88320 : 0);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
return (value ^ 0xffffffff) >>> 0;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=crc.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crc.js","sourceRoot":"","sources":["../../../src/commands/git/crc.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAgB,EAAE,KAAiB;IAC7D,IAAI,KAAK,GAAG,UAAU,CAAC;IACvB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC;QAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;QAClD,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;QACjC,KAAK,IAAI,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC;YACjD,KAAK,IAAI,KAAK,CAAC,MAAM,CAAE,CAAC;YACxB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE;gBAAE,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC"}
|