@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.
Files changed (137) hide show
  1. package/dist/safe-bash/browser.d.ts +2 -0
  2. package/dist/safe-bash/browser.d.ts.map +1 -1
  3. package/dist/safe-bash/browser.js +3951 -874
  4. package/dist/safe-bash/browser.js.map +4 -4
  5. package/dist/safe-bash/commands/basic.d.ts.map +1 -1
  6. package/dist/safe-bash/commands/basic.js +7 -1
  7. package/dist/safe-bash/commands/basic.js.map +1 -1
  8. package/dist/safe-bash/commands/filesystem-requirements.d.ts +67 -0
  9. package/dist/safe-bash/commands/filesystem-requirements.d.ts.map +1 -0
  10. package/dist/safe-bash/commands/filesystem-requirements.js +81 -0
  11. package/dist/safe-bash/commands/filesystem-requirements.js.map +1 -0
  12. package/dist/safe-bash/commands/filesystem.d.ts.map +1 -1
  13. package/dist/safe-bash/commands/filesystem.js +106 -9
  14. package/dist/safe-bash/commands/filesystem.js.map +1 -1
  15. package/dist/safe-bash/commands/grep.d.ts.map +1 -1
  16. package/dist/safe-bash/commands/grep.js +3 -109
  17. package/dist/safe-bash/commands/grep.js.map +1 -1
  18. package/dist/safe-bash/commands/internal.d.ts +1 -0
  19. package/dist/safe-bash/commands/internal.d.ts.map +1 -1
  20. package/dist/safe-bash/commands/internal.js +22 -0
  21. package/dist/safe-bash/commands/internal.js.map +1 -1
  22. package/dist/safe-bash/commands/move.d.ts.map +1 -1
  23. package/dist/safe-bash/commands/move.js +21 -0
  24. package/dist/safe-bash/commands/move.js.map +1 -1
  25. package/dist/safe-bash/commands/network/curl.js +2 -0
  26. package/dist/safe-bash/commands/network/curl.js.map +1 -1
  27. package/dist/safe-bash/commands/network/output.d.ts.map +1 -1
  28. package/dist/safe-bash/commands/network/output.js +37 -33
  29. package/dist/safe-bash/commands/network/output.js.map +1 -1
  30. package/dist/safe-bash/commands/portable-requirements.d.ts +6 -0
  31. package/dist/safe-bash/commands/portable-requirements.d.ts.map +1 -0
  32. package/dist/safe-bash/commands/portable-requirements.js +18 -0
  33. package/dist/safe-bash/commands/portable-requirements.js.map +1 -0
  34. package/dist/safe-bash/commands/predicates.d.ts.map +1 -1
  35. package/dist/safe-bash/commands/predicates.js +9 -1
  36. package/dist/safe-bash/commands/predicates.js.map +1 -1
  37. package/dist/safe-bash/commands/regex-execution/client.d.ts +5 -67
  38. package/dist/safe-bash/commands/regex-execution/client.d.ts.map +1 -1
  39. package/dist/safe-bash/commands/regex-execution/client.js +13 -379
  40. package/dist/safe-bash/commands/regex-execution/client.js.map +1 -1
  41. package/dist/safe-bash/commands/regex-execution/portable.d.ts +71 -0
  42. package/dist/safe-bash/commands/regex-execution/portable.d.ts.map +1 -0
  43. package/dist/safe-bash/commands/regex-execution/portable.js +385 -0
  44. package/dist/safe-bash/commands/regex-execution/portable.js.map +1 -0
  45. package/dist/safe-bash/commands/regex-execution/protocol.js +1 -1
  46. package/dist/safe-bash/commands/regex-execution/protocol.js.map +1 -1
  47. package/dist/safe-bash/commands/regex-execution/provider.d.ts +24 -0
  48. package/dist/safe-bash/commands/regex-execution/provider.d.ts.map +1 -0
  49. package/dist/safe-bash/commands/regex-execution/provider.js +2 -0
  50. package/dist/safe-bash/commands/regex-execution/provider.js.map +1 -0
  51. package/dist/safe-bash/commands/regex-execution/public.d.ts +9 -0
  52. package/dist/safe-bash/commands/regex-execution/public.d.ts.map +1 -0
  53. package/dist/safe-bash/commands/regex-execution/public.js +6 -0
  54. package/dist/safe-bash/commands/regex-execution/public.js.map +1 -0
  55. package/dist/safe-bash/commands/search/glob.d.ts +1 -1
  56. package/dist/safe-bash/commands/search/glob.d.ts.map +1 -1
  57. package/dist/safe-bash/commands/search/glob.js +1 -1
  58. package/dist/safe-bash/commands/search/glob.js.map +1 -1
  59. package/dist/safe-bash/commands/search/grep.d.ts +4 -0
  60. package/dist/safe-bash/commands/search/grep.d.ts.map +1 -0
  61. package/dist/safe-bash/commands/search/grep.js +119 -0
  62. package/dist/safe-bash/commands/search/grep.js.map +1 -0
  63. package/dist/safe-bash/commands/search/matcher.d.ts +1 -1
  64. package/dist/safe-bash/commands/search/matcher.d.ts.map +1 -1
  65. package/dist/safe-bash/commands/search/matcher.js +1 -1
  66. package/dist/safe-bash/commands/search/matcher.js.map +1 -1
  67. package/dist/safe-bash/commands/search/output.d.ts +1 -1
  68. package/dist/safe-bash/commands/search/output.d.ts.map +1 -1
  69. package/dist/safe-bash/commands/search/output.js +8 -2
  70. package/dist/safe-bash/commands/search/output.js.map +1 -1
  71. package/dist/safe-bash/commands/search/portable.d.ts +14 -0
  72. package/dist/safe-bash/commands/search/portable.d.ts.map +1 -0
  73. package/dist/safe-bash/commands/search/portable.js +22 -0
  74. package/dist/safe-bash/commands/search/portable.js.map +1 -0
  75. package/dist/safe-bash/commands/search/requirements.d.ts +9 -0
  76. package/dist/safe-bash/commands/search/requirements.d.ts.map +1 -0
  77. package/dist/safe-bash/commands/search/requirements.js +72 -0
  78. package/dist/safe-bash/commands/search/requirements.js.map +1 -0
  79. package/dist/safe-bash/commands/search/rg-command.d.ts +5 -0
  80. package/dist/safe-bash/commands/search/rg-command.d.ts.map +1 -0
  81. package/dist/safe-bash/commands/search/rg-command.js +230 -0
  82. package/dist/safe-bash/commands/search/rg-command.js.map +1 -0
  83. package/dist/safe-bash/commands/search/rg.d.ts +2 -2
  84. package/dist/safe-bash/commands/search/rg.d.ts.map +1 -1
  85. package/dist/safe-bash/commands/search/rg.js +3 -216
  86. package/dist/safe-bash/commands/search/rg.js.map +1 -1
  87. package/dist/safe-bash/commands/search/shared.d.ts.map +1 -1
  88. package/dist/safe-bash/commands/search/shared.js +2 -0
  89. package/dist/safe-bash/commands/search/shared.js.map +1 -1
  90. package/dist/safe-bash/commands/search/walk.d.ts +1 -1
  91. package/dist/safe-bash/commands/search/walk.d.ts.map +1 -1
  92. package/dist/safe-bash/commands/search/walk.js +8 -1
  93. package/dist/safe-bash/commands/search/walk.js.map +1 -1
  94. package/dist/safe-bash/commands/streams.d.ts.map +1 -1
  95. package/dist/safe-bash/commands/streams.js +52 -108
  96. package/dist/safe-bash/commands/streams.js.map +1 -1
  97. package/dist/safe-bash/commands/text-programs/sed.d.ts.map +1 -1
  98. package/dist/safe-bash/commands/text-programs/sed.js +23 -14
  99. package/dist/safe-bash/commands/text-programs/sed.js.map +1 -1
  100. package/dist/safe-bash/commands/text-programs/shared.d.ts.map +1 -1
  101. package/dist/safe-bash/commands/text-programs/shared.js +3 -5
  102. package/dist/safe-bash/commands/text-programs/shared.js.map +1 -1
  103. package/dist/safe-bash/commands/text.d.ts.map +1 -1
  104. package/dist/safe-bash/commands/text.js +22 -4
  105. package/dist/safe-bash/commands/text.js.map +1 -1
  106. package/dist/safe-bash/contracts/command-requirements.d.ts +22 -0
  107. package/dist/safe-bash/contracts/command-requirements.d.ts.map +1 -0
  108. package/dist/safe-bash/contracts/command-requirements.js +47 -0
  109. package/dist/safe-bash/contracts/command-requirements.js.map +1 -0
  110. package/dist/safe-bash/contracts/command.d.ts +2 -0
  111. package/dist/safe-bash/contracts/command.d.ts.map +1 -1
  112. package/dist/safe-bash/contracts/command.js.map +1 -1
  113. package/dist/safe-bash/contracts/filesystem-output.d.ts +12 -0
  114. package/dist/safe-bash/contracts/filesystem-output.d.ts.map +1 -0
  115. package/dist/safe-bash/contracts/filesystem-output.js +160 -0
  116. package/dist/safe-bash/contracts/filesystem-output.js.map +1 -0
  117. package/dist/safe-bash/contracts/index.d.ts +1 -0
  118. package/dist/safe-bash/contracts/index.d.ts.map +1 -1
  119. package/dist/safe-bash/contracts/index.js +1 -0
  120. package/dist/safe-bash/contracts/index.js.map +1 -1
  121. package/dist/safe-bash/contracts/io.d.ts +2 -0
  122. package/dist/safe-bash/contracts/io.d.ts.map +1 -1
  123. package/dist/safe-bash/contracts/io.js +2 -0
  124. package/dist/safe-bash/contracts/io.js.map +1 -1
  125. package/dist/safe-bash/contracts/output.d.ts +1 -0
  126. package/dist/safe-bash/contracts/output.d.ts.map +1 -1
  127. package/dist/safe-bash/contracts/output.js +6 -1
  128. package/dist/safe-bash/contracts/output.js.map +1 -1
  129. package/dist/safe-bash/index.d.ts +2 -1
  130. package/dist/safe-bash/index.d.ts.map +1 -1
  131. package/dist/safe-bash/index.js +2 -0
  132. package/dist/safe-bash/index.js.map +1 -1
  133. package/dist/safe-bash/shell/runtime.d.ts +7 -2
  134. package/dist/safe-bash/shell/runtime.d.ts.map +1 -1
  135. package/dist/safe-bash/shell/runtime.js +247 -185
  136. package/dist/safe-bash/shell/runtime.js.map +1 -1
  137. 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/client.js";
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,8BAA8B,CAAC;AACtF,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
+ {"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,4 +1,4 @@
1
- import { RegexExecutionError } from "../regex-execution/client.js";
1
+ import { RegexExecutionError } from "../regex-execution/portable.js";
2
2
  import { SearchError } from "./options.js";
3
3
  export class Matcher {
4
4
  session;
@@ -1 +1 @@
1
- {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../../src/commands/search/matcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAqB,MAAM,8BAA8B,CAAC;AAEtF,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
+ {"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"}
@@ -16,7 +16,7 @@ export interface Stats {
16
16
  matches: number;
17
17
  }
18
18
  export declare const stats: () => Stats;
19
- export declare const data: (bytes: Uint8Array) => {
19
+ export declare function data(bytes: Uint8Array): {
20
20
  text: string;
21
21
  } | {
22
22
  bytes: string;
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/commands/search/output.ts"],"names":[],"mappings":"AACA,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,eAAO,MAAM,IAAI,GAAI,OAAO,UAAU,KAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAsH,CAAC;AAElM,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
+ {"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 const data = (bytes) => isUtf8(bytes) ? { text: Buffer.from(bytes).toString("utf8") } : { bytes: Buffer.from(bytes).toString("base64") };
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":"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"}
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