@poe-platform/safe-bash 0.1.53 → 0.1.55
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/safe-bash/browser.d.ts +2 -0
- package/dist/safe-bash/browser.d.ts.map +1 -1
- package/dist/safe-bash/browser.js +3951 -874
- package/dist/safe-bash/browser.js.map +4 -4
- package/dist/safe-bash/commands/basic.d.ts.map +1 -1
- package/dist/safe-bash/commands/basic.js +7 -1
- package/dist/safe-bash/commands/basic.js.map +1 -1
- package/dist/safe-bash/commands/filesystem-requirements.d.ts +67 -0
- package/dist/safe-bash/commands/filesystem-requirements.d.ts.map +1 -0
- package/dist/safe-bash/commands/filesystem-requirements.js +81 -0
- package/dist/safe-bash/commands/filesystem-requirements.js.map +1 -0
- package/dist/safe-bash/commands/filesystem.d.ts.map +1 -1
- package/dist/safe-bash/commands/filesystem.js +106 -9
- package/dist/safe-bash/commands/filesystem.js.map +1 -1
- package/dist/safe-bash/commands/grep.d.ts.map +1 -1
- package/dist/safe-bash/commands/grep.js +3 -109
- package/dist/safe-bash/commands/grep.js.map +1 -1
- package/dist/safe-bash/commands/internal.d.ts +1 -0
- package/dist/safe-bash/commands/internal.d.ts.map +1 -1
- package/dist/safe-bash/commands/internal.js +22 -0
- package/dist/safe-bash/commands/internal.js.map +1 -1
- package/dist/safe-bash/commands/move.d.ts.map +1 -1
- package/dist/safe-bash/commands/move.js +21 -0
- package/dist/safe-bash/commands/move.js.map +1 -1
- package/dist/safe-bash/commands/network/curl.js +2 -0
- package/dist/safe-bash/commands/network/curl.js.map +1 -1
- package/dist/safe-bash/commands/network/output.d.ts.map +1 -1
- package/dist/safe-bash/commands/network/output.js +37 -33
- package/dist/safe-bash/commands/network/output.js.map +1 -1
- package/dist/safe-bash/commands/portable-requirements.d.ts +6 -0
- package/dist/safe-bash/commands/portable-requirements.d.ts.map +1 -0
- package/dist/safe-bash/commands/portable-requirements.js +18 -0
- package/dist/safe-bash/commands/portable-requirements.js.map +1 -0
- package/dist/safe-bash/commands/predicates.d.ts.map +1 -1
- package/dist/safe-bash/commands/predicates.js +9 -1
- package/dist/safe-bash/commands/predicates.js.map +1 -1
- package/dist/safe-bash/commands/regex-execution/client.d.ts +5 -67
- package/dist/safe-bash/commands/regex-execution/client.d.ts.map +1 -1
- package/dist/safe-bash/commands/regex-execution/client.js +13 -379
- package/dist/safe-bash/commands/regex-execution/client.js.map +1 -1
- package/dist/safe-bash/commands/regex-execution/portable.d.ts +71 -0
- package/dist/safe-bash/commands/regex-execution/portable.d.ts.map +1 -0
- package/dist/safe-bash/commands/regex-execution/portable.js +385 -0
- package/dist/safe-bash/commands/regex-execution/portable.js.map +1 -0
- package/dist/safe-bash/commands/regex-execution/protocol.js +1 -1
- package/dist/safe-bash/commands/regex-execution/protocol.js.map +1 -1
- package/dist/safe-bash/commands/regex-execution/provider.d.ts +24 -0
- package/dist/safe-bash/commands/regex-execution/provider.d.ts.map +1 -0
- package/dist/safe-bash/commands/regex-execution/provider.js +2 -0
- package/dist/safe-bash/commands/regex-execution/provider.js.map +1 -0
- package/dist/safe-bash/commands/regex-execution/public.d.ts +9 -0
- package/dist/safe-bash/commands/regex-execution/public.d.ts.map +1 -0
- package/dist/safe-bash/commands/regex-execution/public.js +6 -0
- package/dist/safe-bash/commands/regex-execution/public.js.map +1 -0
- package/dist/safe-bash/commands/search/glob.d.ts +1 -1
- package/dist/safe-bash/commands/search/glob.d.ts.map +1 -1
- package/dist/safe-bash/commands/search/glob.js +1 -1
- package/dist/safe-bash/commands/search/glob.js.map +1 -1
- package/dist/safe-bash/commands/search/grep.d.ts +4 -0
- package/dist/safe-bash/commands/search/grep.d.ts.map +1 -0
- package/dist/safe-bash/commands/search/grep.js +119 -0
- package/dist/safe-bash/commands/search/grep.js.map +1 -0
- package/dist/safe-bash/commands/search/matcher.d.ts +1 -1
- package/dist/safe-bash/commands/search/matcher.d.ts.map +1 -1
- package/dist/safe-bash/commands/search/matcher.js +1 -1
- package/dist/safe-bash/commands/search/matcher.js.map +1 -1
- package/dist/safe-bash/commands/search/output.d.ts +1 -1
- package/dist/safe-bash/commands/search/output.d.ts.map +1 -1
- package/dist/safe-bash/commands/search/output.js +8 -2
- package/dist/safe-bash/commands/search/output.js.map +1 -1
- package/dist/safe-bash/commands/search/portable.d.ts +14 -0
- package/dist/safe-bash/commands/search/portable.d.ts.map +1 -0
- package/dist/safe-bash/commands/search/portable.js +22 -0
- package/dist/safe-bash/commands/search/portable.js.map +1 -0
- package/dist/safe-bash/commands/search/requirements.d.ts +9 -0
- package/dist/safe-bash/commands/search/requirements.d.ts.map +1 -0
- package/dist/safe-bash/commands/search/requirements.js +72 -0
- package/dist/safe-bash/commands/search/requirements.js.map +1 -0
- package/dist/safe-bash/commands/search/rg-command.d.ts +5 -0
- package/dist/safe-bash/commands/search/rg-command.d.ts.map +1 -0
- package/dist/safe-bash/commands/search/rg-command.js +230 -0
- package/dist/safe-bash/commands/search/rg-command.js.map +1 -0
- package/dist/safe-bash/commands/search/rg.d.ts +2 -2
- package/dist/safe-bash/commands/search/rg.d.ts.map +1 -1
- package/dist/safe-bash/commands/search/rg.js +3 -216
- package/dist/safe-bash/commands/search/rg.js.map +1 -1
- package/dist/safe-bash/commands/search/shared.d.ts.map +1 -1
- package/dist/safe-bash/commands/search/shared.js +2 -0
- package/dist/safe-bash/commands/search/shared.js.map +1 -1
- package/dist/safe-bash/commands/search/walk.d.ts +1 -1
- package/dist/safe-bash/commands/search/walk.d.ts.map +1 -1
- package/dist/safe-bash/commands/search/walk.js +8 -1
- package/dist/safe-bash/commands/search/walk.js.map +1 -1
- package/dist/safe-bash/commands/streams.d.ts.map +1 -1
- package/dist/safe-bash/commands/streams.js +52 -108
- package/dist/safe-bash/commands/streams.js.map +1 -1
- package/dist/safe-bash/commands/text-programs/sed.d.ts.map +1 -1
- package/dist/safe-bash/commands/text-programs/sed.js +23 -14
- package/dist/safe-bash/commands/text-programs/sed.js.map +1 -1
- package/dist/safe-bash/commands/text-programs/shared.d.ts.map +1 -1
- package/dist/safe-bash/commands/text-programs/shared.js +3 -5
- package/dist/safe-bash/commands/text-programs/shared.js.map +1 -1
- package/dist/safe-bash/commands/text.d.ts.map +1 -1
- package/dist/safe-bash/commands/text.js +22 -4
- package/dist/safe-bash/commands/text.js.map +1 -1
- package/dist/safe-bash/contracts/command-requirements.d.ts +22 -0
- package/dist/safe-bash/contracts/command-requirements.d.ts.map +1 -0
- package/dist/safe-bash/contracts/command-requirements.js +47 -0
- package/dist/safe-bash/contracts/command-requirements.js.map +1 -0
- package/dist/safe-bash/contracts/command.d.ts +2 -0
- package/dist/safe-bash/contracts/command.d.ts.map +1 -1
- package/dist/safe-bash/contracts/command.js.map +1 -1
- package/dist/safe-bash/contracts/filesystem-output.d.ts +12 -0
- package/dist/safe-bash/contracts/filesystem-output.d.ts.map +1 -0
- package/dist/safe-bash/contracts/filesystem-output.js +160 -0
- package/dist/safe-bash/contracts/filesystem-output.js.map +1 -0
- package/dist/safe-bash/contracts/index.d.ts +1 -0
- package/dist/safe-bash/contracts/index.d.ts.map +1 -1
- package/dist/safe-bash/contracts/index.js +1 -0
- package/dist/safe-bash/contracts/index.js.map +1 -1
- package/dist/safe-bash/contracts/io.d.ts +2 -0
- package/dist/safe-bash/contracts/io.d.ts.map +1 -1
- package/dist/safe-bash/contracts/io.js +2 -0
- package/dist/safe-bash/contracts/io.js.map +1 -1
- package/dist/safe-bash/contracts/output.d.ts +1 -0
- package/dist/safe-bash/contracts/output.d.ts.map +1 -1
- package/dist/safe-bash/contracts/output.js +6 -1
- package/dist/safe-bash/contracts/output.js.map +1 -1
- package/dist/safe-bash/index.d.ts +2 -1
- package/dist/safe-bash/index.d.ts.map +1 -1
- package/dist/safe-bash/index.js +2 -0
- package/dist/safe-bash/index.js.map +1 -1
- package/dist/safe-bash/shell/runtime.d.ts +7 -2
- package/dist/safe-bash/shell/runtime.d.ts.map +1 -1
- package/dist/safe-bash/shell/runtime.js +247 -185
- package/dist/safe-bash/shell/runtime.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { bufferLimit, collect, diagnostic, input, integer, lines, options as parseOptions, output, UsageError, value } from "../internal.js";
|
|
2
|
+
import { AvailableRecords, RegexExecutor, RegexExecutionError, withRegexSession } from "../regex-execution/portable.js";
|
|
3
|
+
import { grepRequirements, requiredFileInput } from "./requirements.js";
|
|
4
|
+
export function createGrepCommands(executor) {
|
|
5
|
+
return [{ name: "grep", filesystemRequirements: grepRequirements, execute: context => withRegexSession(context, executor, async (session) => {
|
|
6
|
+
try {
|
|
7
|
+
const parsed = parseOptions(context.args, "EFivnclLqhHowxae:f:m:sz", { "extended-regexp": "E", "fixed-strings": "F", "ignore-case": "i", "invert-match": "v", "line-number": "n", count: "c", "files-with-matches": "l", "files-without-match": "L", quiet: "q", silent: "q", "no-filename": "h", "with-filename": "H", "only-matching": "o", "word-regexp": "w", "line-regexp": "x", regexp: "e", file: "f", "max-count": "m", "no-messages": "s", text: "a", "null-data": "z" });
|
|
8
|
+
let positionalPattern;
|
|
9
|
+
if (!parsed.flags.has("e") && !parsed.flags.has("f")) {
|
|
10
|
+
if (!parsed.operands.length)
|
|
11
|
+
throw new UsageError("missing pattern");
|
|
12
|
+
positionalPattern = parsed.operands.shift();
|
|
13
|
+
}
|
|
14
|
+
const names = parsed.operands.length ? parsed.operands : ["-"];
|
|
15
|
+
const patternFiles = parsed.values.get("f") ?? [];
|
|
16
|
+
const patterns = [];
|
|
17
|
+
const addPatterns = (text, file) => {
|
|
18
|
+
if (file && text === "")
|
|
19
|
+
return;
|
|
20
|
+
const parts = text.split("\n");
|
|
21
|
+
if (parts.length > 1 && parts.at(-1) === "")
|
|
22
|
+
parts.pop();
|
|
23
|
+
patterns.push(...parts);
|
|
24
|
+
};
|
|
25
|
+
for (const pattern of parsed.values.get("e") ?? [])
|
|
26
|
+
addPatterns(Buffer.from(pattern).toString("latin1"), false);
|
|
27
|
+
for (const name of patternFiles) {
|
|
28
|
+
const source = name === "-" ? input(context) : requiredFileInput(context, grepRequirements, "pattern-file", name, bufferLimit);
|
|
29
|
+
addPatterns(Buffer.from(await collect(source, context.signal)).toString("latin1"), true);
|
|
30
|
+
}
|
|
31
|
+
if (positionalPattern !== undefined)
|
|
32
|
+
addPatterns(Buffer.from(positionalPattern).toString("latin1"), false);
|
|
33
|
+
if (parsed.flags.has("E") && parsed.flags.has("F"))
|
|
34
|
+
throw new UsageError("conflicting matchers specified");
|
|
35
|
+
const descriptor = {
|
|
36
|
+
kind: "grep", patterns, fixed: parsed.flags.has("F"), extended: parsed.flags.has("E"),
|
|
37
|
+
insensitive: parsed.flags.has("i"), whole: parsed.flags.has("x"), word: parsed.flags.has("w"),
|
|
38
|
+
};
|
|
39
|
+
await session.run(descriptor, []);
|
|
40
|
+
const maxCount = value(parsed, "m") === undefined ? Infinity : integer(value(parsed, "m"));
|
|
41
|
+
const batchSize = Number.isFinite(maxCount) || parsed.flags.has("q") || parsed.flags.has("l") || parsed.flags.has("L") ? 1 : 128;
|
|
42
|
+
const delimiter = parsed.flags.has("z") ? "\0" : "\n";
|
|
43
|
+
let anySelected = false;
|
|
44
|
+
let failed = false;
|
|
45
|
+
for (const name of names) {
|
|
46
|
+
let count = 0;
|
|
47
|
+
let number = 0;
|
|
48
|
+
const named = name === "-" ? "(standard input)" : name;
|
|
49
|
+
const prefix = (lineNumber = false) => `${!parsed.flags.has("h") && (parsed.flags.has("H") || names.length > 1) ? `${named}:` : ""}${lineNumber && parsed.flags.has("n") ? `${number}:` : ""}`;
|
|
50
|
+
try {
|
|
51
|
+
const available = new AvailableRecords(parsed.flags.has("z") ? 0 : 10, bufferLimit);
|
|
52
|
+
const source = name === "-" ? input(context) : requiredFileInput(context, grepRequirements, "file", name, bufferLimit);
|
|
53
|
+
records: if (maxCount > 0)
|
|
54
|
+
for await (const batch of available.batches(lines(available.source(source), parsed.flags.has("z") ? 0 : 10), line => line.bytes.length, () => batchSize)) {
|
|
55
|
+
const results = await session.run(descriptor, batch.map(line => ({ bytes: line.bytes, all: parsed.flags.has("o"), terminated: line.terminated })));
|
|
56
|
+
for (let index = 0; index < batch.length; index++) {
|
|
57
|
+
const line = batch[index];
|
|
58
|
+
context.signal.throwIfAborted();
|
|
59
|
+
number++;
|
|
60
|
+
const found = results[index];
|
|
61
|
+
if ((found.length > 0) === parsed.flags.has("v"))
|
|
62
|
+
continue;
|
|
63
|
+
count++;
|
|
64
|
+
if (!parsed.flags.has("L"))
|
|
65
|
+
anySelected = true;
|
|
66
|
+
if (parsed.flags.has("q"))
|
|
67
|
+
return { exitCode: 0 };
|
|
68
|
+
if (parsed.flags.has("l") || parsed.flags.has("L"))
|
|
69
|
+
break records;
|
|
70
|
+
if (!parsed.flags.has("c")) {
|
|
71
|
+
if (parsed.flags.has("o")) {
|
|
72
|
+
if (!parsed.flags.has("v")) {
|
|
73
|
+
let end = -1;
|
|
74
|
+
for (const match of found) {
|
|
75
|
+
if (match.start === match.end || match.start < end)
|
|
76
|
+
continue;
|
|
77
|
+
await output(context, prefix(true));
|
|
78
|
+
await output(context, line.bytes.subarray(match.start, match.end));
|
|
79
|
+
await output(context, delimiter);
|
|
80
|
+
end = match.end;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
await output(context, prefix(true));
|
|
86
|
+
await output(context, line.bytes);
|
|
87
|
+
await output(context, delimiter);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (count >= maxCount)
|
|
91
|
+
break records;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (parsed.flags.has("l") && count > 0 || parsed.flags.has("L") && count === 0) {
|
|
95
|
+
await output(context, named + delimiter);
|
|
96
|
+
anySelected = true;
|
|
97
|
+
}
|
|
98
|
+
else if (parsed.flags.has("c") && !parsed.flags.has("l") && !parsed.flags.has("L"))
|
|
99
|
+
await output(context, prefix() + count + delimiter);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
context.signal.throwIfAborted();
|
|
103
|
+
if (error instanceof RegexExecutionError)
|
|
104
|
+
throw error;
|
|
105
|
+
failed = true;
|
|
106
|
+
if (!parsed.flags.has("s"))
|
|
107
|
+
await diagnostic(context, error);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return { exitCode: failed ? 2 : anySelected ? 0 : 1 };
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
context.signal.throwIfAborted();
|
|
114
|
+
await diagnostic(context, error);
|
|
115
|
+
return { exitCode: 2 };
|
|
116
|
+
}
|
|
117
|
+
}) }];
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=grep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../src/commands/search/grep.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type RegexSession } from "../regex-execution/
|
|
1
|
+
import { type RegexSession } from "../regex-execution/portable.js";
|
|
2
2
|
import type { Match, Row } from "../regex-execution/protocol.js";
|
|
3
3
|
import { type Arguments } from "./options.js";
|
|
4
4
|
export type { Match } from "../regex-execution/protocol.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../../../src/commands/search/matcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../../../src/commands/search/matcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACxF,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAoB,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,YAAY,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D,qBAAa,OAAO;IAEwC,OAAO,CAAC,QAAQ,CAAC,OAAO;IADlF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;gBAClC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAmB,OAAO,EAAE,YAAY;IAG1F,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAO/C,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAO,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAGlF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../../src/commands/search/matcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAqB,MAAM,
|
|
1
|
+
{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../../src/commands/search/matcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAqB,MAAM,gCAAgC,CAAC;AAExF,OAAO,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAC;AAI3D,MAAM,OAAO,OAAO;IAEyD;IAD1D,UAAU,CAAmB;IAC9C,YAAY,QAA2B,EAAE,IAAe,EAAmB,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;QAC9F,IAAI,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC7J,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,IAAoB;QAC9B,IAAI,CAAC;YAAC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAAC,CAAC;QAC7D,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,mBAAmB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzG,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,KAAiB,EAAE,GAAG,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI;QAC5D,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;IAC9D,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/commands/search/output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/commands/search/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,OAAO;;;;EAA2D,CAAC;AAChF,MAAM,WAAW,KAAK;IAAG,OAAO,EAAE,OAAO,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACxL,eAAO,MAAM,KAAK,QAAO,KAA8H,CAAC;AACxJ,wBAAgB,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAG5E;AAED,qBAAa,OAAO;IAIN,QAAQ,CAAC,IAAI,EAAE,SAAS;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;IAH7D,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAAqB;gBAChB,IAAI,EAAE,SAAS,EAAW,MAAM,EAAE,MAAM;IACvD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACtC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAGtE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAGvE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CA4BxH"}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import { isUtf8 } from "node:buffer";
|
|
2
1
|
import { Limits } from "./shared.js";
|
|
3
2
|
export const elapsed = Object.freeze({ secs: 0, nanos: 0, human: "0.000000s" });
|
|
4
3
|
export const stats = () => ({ elapsed, searches: 0, searches_with_match: 0, bytes_searched: 0, bytes_printed: 0, matched_lines: 0, matches: 0 });
|
|
5
|
-
export
|
|
4
|
+
export function data(bytes) {
|
|
5
|
+
try {
|
|
6
|
+
return { text: new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(bytes) };
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return { bytes: Buffer.from(bytes).toString("base64") };
|
|
10
|
+
}
|
|
11
|
+
}
|
|
6
12
|
export class Printer {
|
|
7
13
|
args;
|
|
8
14
|
limits;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/commands/search/output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/commands/search/output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { VirtualShellPlugin } from "../../contracts/index.js";
|
|
2
|
+
import type { BoundedRegexProvider } from "../regex-execution/provider.js";
|
|
3
|
+
import type { RegexExecutionOptions } from "../regex-execution/protocol.js";
|
|
4
|
+
import type { TextProgramOptions } from "../text-programs/shared.js";
|
|
5
|
+
import type { SearchOptions } from "./options.js";
|
|
6
|
+
export interface PortableSearchOptions {
|
|
7
|
+
readonly provider: BoundedRegexProvider;
|
|
8
|
+
readonly replace?: boolean;
|
|
9
|
+
readonly regex?: RegexExecutionOptions;
|
|
10
|
+
readonly search?: Omit<SearchOptions, "replace" | "regex">;
|
|
11
|
+
readonly sed?: Omit<TextProgramOptions, "replace">;
|
|
12
|
+
}
|
|
13
|
+
export declare function portableSearchCommands(options: PortableSearchOptions): VirtualShellPlugin;
|
|
14
|
+
//# sourceMappingURL=portable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable.d.ts","sourceRoot":"","sources":["../../../src/commands/search/portable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;IAC3D,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;CACpD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,GAAG,kBAAkB,CAazF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RegexExecutor } from "../regex-execution/portable.js";
|
|
2
|
+
import { sedCommand } from "../text-programs/sed.js";
|
|
3
|
+
import { createGrepCommands } from "./grep.js";
|
|
4
|
+
import { createRgCommand } from "./rg-command.js";
|
|
5
|
+
export function portableSearchCommands(options) {
|
|
6
|
+
const executor = new RegexExecutor(options.provider, options.regex);
|
|
7
|
+
const commands = [...createGrepCommands(executor), createRgCommand(executor, options.search), sedCommand(options.sed)];
|
|
8
|
+
return {
|
|
9
|
+
name: "portable-search-commands",
|
|
10
|
+
setup(host) {
|
|
11
|
+
if (!options.replace)
|
|
12
|
+
for (const command of commands) {
|
|
13
|
+
if (host.commands.has(command.name))
|
|
14
|
+
throw new Error(`Command already registered: ${command.name}`);
|
|
15
|
+
}
|
|
16
|
+
for (const command of commands)
|
|
17
|
+
host.commands.register(command, { replace: options.replace ?? false });
|
|
18
|
+
},
|
|
19
|
+
dispose: () => executor.dispose(),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=portable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portable.js","sourceRoot":"","sources":["../../../src/commands/search/portable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAG/D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAWlD,MAAM,UAAU,sBAAsB,CAAC,OAA8B;IACnE,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,CAAC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACvH,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,KAAK,CAAC,IAAI;YACR,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;wBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtG,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;QACzG,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE;KAClC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CommandContext } from "../../contracts/command.js";
|
|
2
|
+
import { type ByteSource } from "../../contracts/io.js";
|
|
3
|
+
import { type CommandFileSystemRequirement } from "../../contracts/command-requirements.js";
|
|
4
|
+
export declare const grepRequirements: readonly CommandFileSystemRequirement[];
|
|
5
|
+
export declare const searchRequirements: readonly CommandFileSystemRequirement[];
|
|
6
|
+
export declare const sedRequirements: readonly CommandFileSystemRequirement[];
|
|
7
|
+
export declare function assertPathRequirements(context: CommandContext, requirements: readonly CommandFileSystemRequirement[], modes: readonly string[], paths: readonly string[]): Promise<void>;
|
|
8
|
+
export declare function requiredFileInput(context: CommandContext, requirements: readonly CommandFileSystemRequirement[], mode: string, file: string, maxBytes: number): ByteSource;
|
|
9
|
+
//# sourceMappingURL=requirements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../../src/commands/search/requirements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAA6B,KAAK,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAIvH,eAAO,MAAM,gBAAgB,EAAE,SAAS,4BAA4B,EAGnE,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAAS,4BAA4B,EAOrE,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,SAAS,4BAA4B,EAOlE,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,4BAA4B,EAAE,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GACjI,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,wBAAuB,iBAAiB,CACtC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,4BAA4B,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAC3H,UAAU,CAuBZ"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { FsError } from "../../contracts/errors.js";
|
|
2
|
+
import { readBytes } from "../../contracts/io.js";
|
|
3
|
+
import { assertCommandRequirements } from "../../contracts/command-requirements.js";
|
|
4
|
+
import { pathOf } from "../internal.js";
|
|
5
|
+
import { inputRequirements } from "../portable-requirements.js";
|
|
6
|
+
export const grepRequirements = [
|
|
7
|
+
...inputRequirements,
|
|
8
|
+
{ id: "pattern-file", description: "Read grep pattern files (-f)", capabilities: [], anyOf: [["streamingRead"], ["read"]] },
|
|
9
|
+
];
|
|
10
|
+
export const searchRequirements = [
|
|
11
|
+
...inputRequirements,
|
|
12
|
+
{ id: "metadata", description: "Inspect named search operands", capabilities: ["stat"] },
|
|
13
|
+
{ id: "pattern-file", description: "Read rg pattern files (-f)", capabilities: ["read"] },
|
|
14
|
+
{ id: "directory", description: "Walk directories, including --files", capabilities: ["stat", "readdir", "realpath"] },
|
|
15
|
+
{ id: "canonical", description: "Resolve followed directory links for loop detection", capabilities: ["realpath"] },
|
|
16
|
+
{ id: "ignore-file", description: "Read directory ignore files unless disabled", capabilities: ["read"] },
|
|
17
|
+
];
|
|
18
|
+
export const sedRequirements = [
|
|
19
|
+
...inputRequirements,
|
|
20
|
+
{ id: "script-file", description: "Read sed program files (-f)", capabilities: ["read"] },
|
|
21
|
+
{ id: "script-read", description: "Read files referenced by sed r instructions", capabilities: [], anyOf: [["streamingRead"], ["read"]] },
|
|
22
|
+
{ id: "script-output", description: "Truncate and append files referenced by sed w instructions", capabilities: ["write", "append"], mutates: true },
|
|
23
|
+
{ id: "in-place", description: "Inspect and rewrite named files (-i)", capabilities: ["stat", "write"], mutates: true },
|
|
24
|
+
{ id: "backup", description: "Copy original files to backup destinations (-iSUFFIX)", capabilities: ["copy"], mutates: true },
|
|
25
|
+
];
|
|
26
|
+
export async function assertPathRequirements(context, requirements, modes, paths) {
|
|
27
|
+
if (!paths.length)
|
|
28
|
+
return;
|
|
29
|
+
assertCommandRequirements(context, requirements, modes);
|
|
30
|
+
if (!context.fs.capabilitiesFor)
|
|
31
|
+
return;
|
|
32
|
+
for (const path of new Set(paths)) {
|
|
33
|
+
try {
|
|
34
|
+
const capabilities = await context.fs.capabilitiesFor(pathOf(context, path), { signal: context.signal });
|
|
35
|
+
assertCommandRequirements(context, requirements, modes, capabilities);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
context.signal.throwIfAborted();
|
|
39
|
+
if (!["ENOENT", "ENOTDIR"].includes(error.code ?? ""))
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export async function* requiredFileInput(context, requirements, mode, file, maxBytes) {
|
|
45
|
+
assertCommandRequirements(context, requirements, [mode]);
|
|
46
|
+
const path = pathOf(context, file);
|
|
47
|
+
const capabilities = await context.fs.capabilitiesFor?.(path, { signal: context.signal }) ?? context.fs.capabilities;
|
|
48
|
+
assertCommandRequirements(context, requirements, [mode], capabilities);
|
|
49
|
+
if (context.fs.readStream && capabilities.streamingRead !== false && context.fs.capabilities.streamingRead !== false) {
|
|
50
|
+
let emitted = false;
|
|
51
|
+
let reading = true;
|
|
52
|
+
try {
|
|
53
|
+
for await (const chunk of readBytes(context.fs.readStream(path, { signal: context.signal }), context.signal)) {
|
|
54
|
+
reading = false;
|
|
55
|
+
if (chunk.byteLength)
|
|
56
|
+
emitted = true;
|
|
57
|
+
yield chunk;
|
|
58
|
+
reading = true;
|
|
59
|
+
}
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
context.signal.throwIfAborted();
|
|
64
|
+
if (!reading || emitted || !(error instanceof FsError) || error.code !== "ENOTSUP")
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (capabilities.read === false || context.fs.capabilities.read === false)
|
|
69
|
+
throw new FsError("ENOTSUP", { syscall: "readFile", path });
|
|
70
|
+
yield await context.fs.readFile(path, { signal: context.signal, maxBytes });
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=requirements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../../src/commands/search/requirements.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type CommandDefinition } from "../../contracts/index.js";
|
|
2
|
+
import { type SearchOptions } from "./options.js";
|
|
3
|
+
import { RegexExecutor } from "../regex-execution/portable.js";
|
|
4
|
+
export declare function createRgCommand(executor: RegexExecutor, options?: SearchOptions): CommandDefinition;
|
|
5
|
+
//# sourceMappingURL=rg-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rg-command.d.ts","sourceRoot":"","sources":["../../../src/commands/search/rg-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEjI,OAAO,EAAsC,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAItF,OAAO,EAAoB,aAAa,EAAyC,MAAM,gCAAgC,CAAC;AAoHxH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,aAAkB,GAAG,iBAAiB,CAsDvG"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { collectBytes, readBytes } from "../../contracts/index.js";
|
|
2
|
+
import { Matcher } from "./matcher.js";
|
|
3
|
+
import { parse, SearchError } from "./options.js";
|
|
4
|
+
import { data, elapsed, Printer, stats } from "./output.js";
|
|
5
|
+
import { diagnostic, Limits, lines, OutputClosed, pathFor } from "./shared.js";
|
|
6
|
+
import { Walker } from "./walk.js";
|
|
7
|
+
import { AvailableRecords, RegexExecutor, RegexExecutionError, withRegexSession } from "../regex-execution/portable.js";
|
|
8
|
+
import { assertPathRequirements, requiredFileInput, searchRequirements } from "./requirements.js";
|
|
9
|
+
function selectInput(context, args, options) {
|
|
10
|
+
if (args.paths.length)
|
|
11
|
+
return { paths: args.paths, implicit: false };
|
|
12
|
+
if (args.mode === "files" || options.defaultInput === "cwd" || args.patternFiles.includes("-"))
|
|
13
|
+
return { paths: ["."], implicit: true };
|
|
14
|
+
const stdin = options.defaultInput === "stdin" || context.stdinIsDefault === false;
|
|
15
|
+
return { paths: stdin ? ["-"] : ["."], implicit: !stdin };
|
|
16
|
+
}
|
|
17
|
+
async function patterns(context, args) {
|
|
18
|
+
const patterns = [...args.patterns];
|
|
19
|
+
for (const file of args.patternFiles) {
|
|
20
|
+
if (file !== "-")
|
|
21
|
+
await assertPathRequirements(context, searchRequirements, ["pattern-file"], [file]);
|
|
22
|
+
const bytes = file === "-" ? await collectBytes(context.stdin, { maxBytes: 1024 * 1024, signal: context.signal })
|
|
23
|
+
: await context.fs.readFile(pathFor(context, file), { signal: context.signal, maxBytes: 1024 * 1024 });
|
|
24
|
+
let text;
|
|
25
|
+
try {
|
|
26
|
+
text = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
throw new SearchError(`pattern file '${file}' is not UTF-8`);
|
|
30
|
+
}
|
|
31
|
+
const lines = text.split("\n");
|
|
32
|
+
if (lines.at(-1) === "")
|
|
33
|
+
lines.pop();
|
|
34
|
+
patterns.push(...lines.map(line => line.endsWith("\r") ? line.slice(0, -1) : line));
|
|
35
|
+
}
|
|
36
|
+
return patterns;
|
|
37
|
+
}
|
|
38
|
+
async function searchFile(context, args, limits, matcher, printer, target, stdin, filename) {
|
|
39
|
+
const totals = stats();
|
|
40
|
+
totals.searches = 1;
|
|
41
|
+
if (args.maxCount === 0)
|
|
42
|
+
return { found: false, stats: totals };
|
|
43
|
+
const state = { bytesRead: 0, bytesSearched: 0, binaryOffset: null, skipped: false };
|
|
44
|
+
const binary = args.binary === "text" ? "text" : args.binary === "binary" || target.explicit ? "binary" : "skip";
|
|
45
|
+
const source = target.path === "-" ? readBytes(stdin, limits.signal)
|
|
46
|
+
: readBytes(requiredFileInput(context, searchRequirements, "file", target.path, limits.maxFileBytes), limits.signal);
|
|
47
|
+
const before = [];
|
|
48
|
+
let beforeBytes = 0;
|
|
49
|
+
let lastPrinted = 0;
|
|
50
|
+
let after = 0;
|
|
51
|
+
let begun = false;
|
|
52
|
+
let binaryPrinted = false;
|
|
53
|
+
let lastSelectedEnd = 0;
|
|
54
|
+
let fileOutputStart = limits.outputBytes;
|
|
55
|
+
const begin = async () => {
|
|
56
|
+
if (begun)
|
|
57
|
+
return;
|
|
58
|
+
begun = true;
|
|
59
|
+
fileOutputStart = limits.outputBytes;
|
|
60
|
+
if (args.mode === "json")
|
|
61
|
+
await printer.event("begin", { path: data(Buffer.from(target.label)) });
|
|
62
|
+
};
|
|
63
|
+
const selectedOutput = !args.quiet && (args.mode === "lines" || args.mode === "json");
|
|
64
|
+
const binaryOutput = selectedOutput && args.mode === "lines" && binary === "binary";
|
|
65
|
+
const available = new AvailableRecords(args.nullData ? 0 : 10, limits.maxLineBytes, binary === "binary" ? 0 : -1);
|
|
66
|
+
const batchSize = () => Number.isFinite(args.maxCount) || args.quiet && args.mode !== "json" || args.mode === "with" || args.mode === "without" || binaryOutput && state.binaryOffset !== null ? 1 : 128;
|
|
67
|
+
records: for await (const batch of available.batches(lines(available.source(source), limits, state, binary, args.nullData), line => line.content.length, batchSize)) {
|
|
68
|
+
const rows = batch.map(line => ({ bytes: args.crlf && line.content.at(-1) === 13 ? line.content.subarray(0, -1) : line.content, all: args.onlyMatching || args.mode === "json" || args.mode === "matches", terminated: line.bytes.length !== line.content.length }));
|
|
69
|
+
const results = await matcher.batch(rows);
|
|
70
|
+
for (let index = 0; index < batch.length; index++) {
|
|
71
|
+
const line = batch[index];
|
|
72
|
+
state.bytesSearched = line.offset + line.bytes.length;
|
|
73
|
+
await limits.tick();
|
|
74
|
+
if (binaryOutput && state.binaryOffset !== null && totals.matched_lines > 0) {
|
|
75
|
+
await printer.binary(target.label, state.binaryOffset, filename);
|
|
76
|
+
binaryPrinted = true;
|
|
77
|
+
break records;
|
|
78
|
+
}
|
|
79
|
+
const matches = results[index];
|
|
80
|
+
const limitedInvertedTail = args.invert && totals.matched_lines >= args.maxCount && after > 0 && line.bytes.length === line.content.length;
|
|
81
|
+
const selected = (matches.length > 0) !== args.invert || limitedInvertedTail;
|
|
82
|
+
if (selected)
|
|
83
|
+
lastSelectedEnd = line.offset + line.bytes.length;
|
|
84
|
+
if (selected && totals.matched_lines < args.maxCount) {
|
|
85
|
+
totals.matched_lines++;
|
|
86
|
+
totals.matches += args.invert ? 0 : matches.length;
|
|
87
|
+
if (args.quiet && args.mode !== "json" || args.mode === "with" || args.mode === "without")
|
|
88
|
+
break records;
|
|
89
|
+
if (selectedOutput) {
|
|
90
|
+
await begin();
|
|
91
|
+
if (state.binaryOffset !== null && args.mode !== "json") {
|
|
92
|
+
if (!binaryPrinted) {
|
|
93
|
+
await printer.binary(target.label, state.binaryOffset, filename);
|
|
94
|
+
binaryPrinted = true;
|
|
95
|
+
}
|
|
96
|
+
break records;
|
|
97
|
+
}
|
|
98
|
+
for (const previous of before)
|
|
99
|
+
if (previous.line.number > lastPrinted) {
|
|
100
|
+
await printer.record(target.label, previous.line, previous.matches, false, filename);
|
|
101
|
+
lastPrinted = previous.line.number;
|
|
102
|
+
}
|
|
103
|
+
await printer.record(target.label, line, args.invert ? [] : matches, true, filename);
|
|
104
|
+
lastPrinted = line.number;
|
|
105
|
+
after = args.after;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else if (after && selectedOutput) {
|
|
109
|
+
if (selected) {
|
|
110
|
+
totals.matched_lines++;
|
|
111
|
+
totals.matches += args.invert && !limitedInvertedTail ? 0 : matches.length;
|
|
112
|
+
}
|
|
113
|
+
await printer.record(target.label, line, matches, selected, filename);
|
|
114
|
+
lastPrinted = line.number;
|
|
115
|
+
after--;
|
|
116
|
+
}
|
|
117
|
+
if (binaryOutput && args.before > 0 && state.binaryOffset !== null)
|
|
118
|
+
break records;
|
|
119
|
+
if (totals.matched_lines >= args.maxCount && (!selectedOutput || after === 0)) {
|
|
120
|
+
state.bytesSearched = Math.max(lastSelectedEnd, args.invert || line.bytes.length === line.content.length ? line.offset : 0);
|
|
121
|
+
break records;
|
|
122
|
+
}
|
|
123
|
+
before.push({ line, matches });
|
|
124
|
+
beforeBytes += line.bytes.length;
|
|
125
|
+
while (before.length > args.before)
|
|
126
|
+
beforeBytes -= before.shift().line.bytes.length;
|
|
127
|
+
if (beforeBytes > limits.maxFileBytes)
|
|
128
|
+
throw new SearchError("context buffer byte limit exceeded");
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (binaryOutput && state.binaryOffset !== null && totals.matched_lines > 0 && !binaryPrinted) {
|
|
132
|
+
await printer.binary(target.label, state.binaryOffset, filename);
|
|
133
|
+
}
|
|
134
|
+
const matched = totals.matched_lines > 0;
|
|
135
|
+
const found = args.mode === "without" ? !matched && !state.skipped : matched;
|
|
136
|
+
totals.searches_with_match = matched ? 1 : 0;
|
|
137
|
+
totals.bytes_searched = state.bytesSearched;
|
|
138
|
+
if (!args.quiet) {
|
|
139
|
+
if ((args.mode === "with" || args.mode === "without") && found)
|
|
140
|
+
await printer.filename(target.label);
|
|
141
|
+
if ((args.mode === "count" || args.mode === "matches") && (matched || args.includeZero) && !state.skipped) {
|
|
142
|
+
const amount = !args.invert && (args.mode === "matches" || args.onlyMatching) ? totals.matches : totals.matched_lines;
|
|
143
|
+
await printer.count(target.label, amount, filename);
|
|
144
|
+
}
|
|
145
|
+
if (begun && args.mode === "json") {
|
|
146
|
+
totals.bytes_printed = limits.outputBytes - fileOutputStart;
|
|
147
|
+
await printer.event("end", { path: data(Buffer.from(target.label)), binary_offset: state.binaryOffset, stats: totals });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return { found, stats: totals };
|
|
151
|
+
}
|
|
152
|
+
export function createRgCommand(executor, options = {}) {
|
|
153
|
+
return {
|
|
154
|
+
name: "rg",
|
|
155
|
+
filesystemRequirements: searchRequirements,
|
|
156
|
+
description: "Search virtual files or stdin with recursive filtering and structured results",
|
|
157
|
+
async execute(context) {
|
|
158
|
+
return withRegexSession(context, executor, async (session) => {
|
|
159
|
+
let args;
|
|
160
|
+
let failed = false;
|
|
161
|
+
let found = false;
|
|
162
|
+
try {
|
|
163
|
+
const limits = new Limits(context, options);
|
|
164
|
+
args = parse(context.args);
|
|
165
|
+
if (args.mode !== "files" && args.patternFiles.includes("-") && args.paths.includes("-")) {
|
|
166
|
+
throw new SearchError("cannot search stdin while also reading patterns from stdin");
|
|
167
|
+
}
|
|
168
|
+
const selection = selectInput(context, args, options);
|
|
169
|
+
const report = async (error) => {
|
|
170
|
+
context.signal.throwIfAborted();
|
|
171
|
+
failed = true;
|
|
172
|
+
if (args.messages)
|
|
173
|
+
await diagnostic(context, error);
|
|
174
|
+
};
|
|
175
|
+
const walker = new Walker(context, args, limits, report, session);
|
|
176
|
+
await walker.validate();
|
|
177
|
+
const matcher = new Matcher(args.mode === "files" ? [] : await patterns(context, args), args, session);
|
|
178
|
+
if (args.mode !== "files")
|
|
179
|
+
await matcher.batch([]);
|
|
180
|
+
if (args.mode !== "files" && args.maxCount === 0)
|
|
181
|
+
return { exitCode: 1 };
|
|
182
|
+
const printer = new Printer(args, limits);
|
|
183
|
+
const totals = stats();
|
|
184
|
+
const targets = async function* () {
|
|
185
|
+
for (const path of selection.paths) {
|
|
186
|
+
if (path !== "-")
|
|
187
|
+
await assertPathRequirements(context, searchRequirements, ["metadata"], [path]);
|
|
188
|
+
yield* walker.targets([path], selection.implicit);
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
for await (const target of targets()) {
|
|
192
|
+
if (args.mode === "files") {
|
|
193
|
+
found = true;
|
|
194
|
+
if (!args.quiet)
|
|
195
|
+
await printer.filename(target.label);
|
|
196
|
+
else
|
|
197
|
+
break;
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
const result = await searchFile(context, args, limits, matcher, printer, target, context.stdin, args.filename ?? (target.recursive || selection.paths.length > 1));
|
|
202
|
+
found ||= result.found;
|
|
203
|
+
for (const field of ["searches", "searches_with_match", "bytes_searched", "bytes_printed", "matched_lines", "matches"])
|
|
204
|
+
totals[field] += result.stats[field];
|
|
205
|
+
if (args.quiet && found && args.mode !== "json")
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
if (error instanceof SearchError || error instanceof RegexExecutionError)
|
|
210
|
+
throw error;
|
|
211
|
+
await report(error);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (args.mode === "json")
|
|
215
|
+
await printer.event("summary", { elapsed_total: elapsed, stats: totals });
|
|
216
|
+
return { exitCode: args.quiet && found ? 0 : failed ? 2 : found ? 0 : 1 };
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
context.signal.throwIfAborted();
|
|
220
|
+
if (error instanceof OutputClosed)
|
|
221
|
+
return { exitCode: 0 };
|
|
222
|
+
if (args?.messages !== false)
|
|
223
|
+
await diagnostic(context, error);
|
|
224
|
+
return { exitCode: 2 };
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
},
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=rg-command.js.map
|