poe-code 17.0.32 → 17.0.33

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 (81) hide show
  1. package/dist/{chunk-UC3KWJDL.js → chunk-4SR3FG2F.js} +8 -8
  2. package/dist/{chunk-GK6Z56OL.js → chunk-EW55GBOF.js} +2 -2
  3. package/dist/{chunk-54JM3XZC.js → chunk-NIIYLKZ6.js} +289 -38
  4. package/dist/chunk-NIIYLKZ6.js.map +7 -0
  5. package/dist/{core-BR637SCW.js → core-2UUUWCLM.js} +2 -2
  6. package/dist/index.js +2 -2
  7. package/dist/metafile.json +1 -1
  8. package/dist/{program-3DNB5ZIC.js → program-2FF4TQ2G.js} +3 -3
  9. package/dist/safe-bash.js +2 -2
  10. package/dist/{src-R4LATOF3.js → src-LTWZPB3P.js} +3 -3
  11. package/package.json +1 -1
  12. package/packages/package-lint/dist/bundle-policy.d.ts +3 -0
  13. package/packages/package-lint/dist/bundle-policy.js +4 -1
  14. package/packages/safe-bash/dist/chunks/{chunk-RVYQDJCC.js → chunk-4CEZRUSZ.js} +2 -2
  15. package/packages/safe-bash/dist/chunks/{chunk-MCBWPJRQ.js → chunk-MX6K5URO.js} +2 -2
  16. package/packages/safe-bash/dist/chunks/{chunk-WSCXISXW.js → chunk-RGSI3B5P.js} +2 -2
  17. package/packages/safe-bash/dist/chunks/{chunk-HC4S4QZD.js → chunk-TZ53QA73.js} +2 -2
  18. package/packages/safe-bash/dist/chunks/{chunk-LUQYNLH7.js → chunk-UKO4AP3K.js} +2 -2
  19. package/packages/safe-bash/dist/chunks/{chunk-JESM4RK2.js → chunk-UMCWCITQ.js} +4 -3
  20. package/packages/safe-bash/dist/chunks/chunk-UMCWCITQ.js.map +7 -0
  21. package/packages/safe-bash/dist/chunks/{chunk-BM3BGSH7.js → chunk-YJPA2BVP.js} +63 -20
  22. package/packages/safe-bash/dist/chunks/chunk-YJPA2BVP.js.map +7 -0
  23. package/packages/safe-bash/dist/commands/archive/index.d.ts.map +1 -1
  24. package/packages/safe-bash/dist/commands/archive/index.js +27 -0
  25. package/packages/safe-bash/dist/commands/archive/index.js.map +1 -1
  26. package/packages/safe-bash/dist/commands/archive/options.d.ts +1 -1
  27. package/packages/safe-bash/dist/commands/archive/options.d.ts.map +1 -1
  28. package/packages/safe-bash/dist/commands/archive/options.js +2 -0
  29. package/packages/safe-bash/dist/commands/archive/options.js.map +1 -1
  30. package/packages/safe-bash/dist/commands/csplit/index.browser.js +1 -1
  31. package/packages/safe-bash/dist/commands/internal.d.ts +1 -1
  32. package/packages/safe-bash/dist/commands/internal.d.ts.map +1 -1
  33. package/packages/safe-bash/dist/commands/internal.js +3 -2
  34. package/packages/safe-bash/dist/commands/internal.js.map +1 -1
  35. package/packages/safe-bash/dist/commands/llm/index.browser.js +2 -2
  36. package/packages/safe-bash/dist/commands/network/index.browser.js +2 -2
  37. package/packages/safe-bash/dist/commands/node/index.browser.js +2 -2
  38. package/packages/safe-bash/dist/commands/regex-execution/ascii.d.ts +2 -0
  39. package/packages/safe-bash/dist/commands/regex-execution/ascii.d.ts.map +1 -1
  40. package/packages/safe-bash/dist/commands/regex-execution/ascii.js +4 -0
  41. package/packages/safe-bash/dist/commands/regex-execution/ascii.js.map +1 -1
  42. package/packages/safe-bash/dist/commands/regex-execution/bounded-provider.d.ts.map +1 -1
  43. package/packages/safe-bash/dist/commands/regex-execution/bounded-provider.js +51 -21
  44. package/packages/safe-bash/dist/commands/regex-execution/bounded-provider.js.map +1 -1
  45. package/packages/safe-bash/dist/commands/regex-execution/ere/matcher.d.ts +2 -2
  46. package/packages/safe-bash/dist/commands/regex-execution/ere/matcher.d.ts.map +1 -1
  47. package/packages/safe-bash/dist/commands/regex-execution/ere/matcher.js +23 -9
  48. package/packages/safe-bash/dist/commands/regex-execution/ere/matcher.js.map +1 -1
  49. package/packages/safe-bash/dist/commands/search/grep.d.ts.map +1 -1
  50. package/packages/safe-bash/dist/commands/search/grep.js +99 -4
  51. package/packages/safe-bash/dist/commands/search/grep.js.map +1 -1
  52. package/packages/safe-bash/dist/commands/search/options.d.ts +1 -0
  53. package/packages/safe-bash/dist/commands/search/options.d.ts.map +1 -1
  54. package/packages/safe-bash/dist/commands/search/options.js +4 -1
  55. package/packages/safe-bash/dist/commands/search/options.js.map +1 -1
  56. package/packages/safe-bash/dist/commands/search/rg-command.d.ts.map +1 -1
  57. package/packages/safe-bash/dist/commands/search/rg-command.js +59 -0
  58. package/packages/safe-bash/dist/commands/search/rg-command.js.map +1 -1
  59. package/packages/safe-bash/dist/commands/streams.d.ts.map +1 -1
  60. package/packages/safe-bash/dist/commands/streams.js +32 -12
  61. package/packages/safe-bash/dist/commands/streams.js.map +1 -1
  62. package/packages/safe-bash/dist/commands/text-programs/sed.d.ts.map +1 -1
  63. package/packages/safe-bash/dist/commands/text-programs/sed.js +10 -1
  64. package/packages/safe-bash/dist/commands/text-programs/sed.js.map +1 -1
  65. package/packages/safe-bash/dist/commands/xml/index.browser.js +2 -2
  66. package/packages/safe-bash/dist/commands/yq/index.browser.js +2 -2
  67. package/packages/safe-bash/dist/core.browser.js +230 -23
  68. package/packages/safe-bash/dist/core.browser.js.map +3 -3
  69. package/dist/chunk-54JM3XZC.js.map +0 -7
  70. package/packages/safe-bash/dist/chunks/chunk-BM3BGSH7.js.map +0 -7
  71. package/packages/safe-bash/dist/chunks/chunk-JESM4RK2.js.map +0 -7
  72. /package/dist/{chunk-UC3KWJDL.js.map → chunk-4SR3FG2F.js.map} +0 -0
  73. /package/dist/{chunk-GK6Z56OL.js.map → chunk-EW55GBOF.js.map} +0 -0
  74. /package/dist/{core-BR637SCW.js.map → core-2UUUWCLM.js.map} +0 -0
  75. /package/dist/{program-3DNB5ZIC.js.map → program-2FF4TQ2G.js.map} +0 -0
  76. /package/dist/{src-R4LATOF3.js.map → src-LTWZPB3P.js.map} +0 -0
  77. /package/packages/safe-bash/dist/chunks/{chunk-RVYQDJCC.js.map → chunk-4CEZRUSZ.js.map} +0 -0
  78. /package/packages/safe-bash/dist/chunks/{chunk-MCBWPJRQ.js.map → chunk-MX6K5URO.js.map} +0 -0
  79. /package/packages/safe-bash/dist/chunks/{chunk-WSCXISXW.js.map → chunk-RGSI3B5P.js.map} +0 -0
  80. /package/packages/safe-bash/dist/chunks/{chunk-HC4S4QZD.js.map → chunk-TZ53QA73.js.map} +0 -0
  81. /package/packages/safe-bash/dist/chunks/{chunk-LUQYNLH7.js.map → chunk-UKO4AP3K.js.map} +0 -0
@@ -78,7 +78,7 @@ import {
78
78
  traceReaders,
79
79
  validateResolvedPromptVars,
80
80
  writeFrontmatter
81
- } from "./chunk-GK6Z56OL.js";
81
+ } from "./chunk-EW55GBOF.js";
82
82
  import {
83
83
  checkAuth,
84
84
  createCliEnvironment,
@@ -7692,7 +7692,7 @@ function registerBashCommand(program) {
7692
7692
  });
7693
7693
  try {
7694
7694
  if (ui) await once(ui, "open");
7695
- const { MemoryFileSystem, RealFileSystem } = await import("./src-R4LATOF3.js");
7695
+ const { MemoryFileSystem, RealFileSystem } = await import("./src-LTWZPB3P.js");
7696
7696
  const totals = { upload: 0, download: 0 };
7697
7697
  const result = await runBash({
7698
7698
  ...dryRun ? { dryRun: true } : {},
@@ -24002,4 +24002,4 @@ function suppressCommanderOutput(command) {
24002
24002
  export {
24003
24003
  createProgram
24004
24004
  };
24005
- //# sourceMappingURL=program-3DNB5ZIC.js.map
24005
+ //# sourceMappingURL=program-2FF4TQ2G.js.map
package/dist/safe-bash.js CHANGED
@@ -23,7 +23,7 @@ import {
23
23
  opCommands,
24
24
  posix,
25
25
  ssconvertCommands
26
- } from "./chunk-UC3KWJDL.js";
26
+ } from "./chunk-4SR3FG2F.js";
27
27
  import {
28
28
  ACCESS_MODES,
29
29
  CurlError,
@@ -212,7 +212,7 @@ import {
212
212
  writeText,
213
213
  xmlCommands,
214
214
  yqCommands
215
- } from "./chunk-54JM3XZC.js";
215
+ } from "./chunk-NIIYLKZ6.js";
216
216
  import {
217
217
  CommandArgumentIdentityError,
218
218
  CommandRegistry,
@@ -23,7 +23,7 @@ import {
23
23
  opCommands,
24
24
  posix,
25
25
  ssconvertCommands
26
- } from "./chunk-UC3KWJDL.js";
26
+ } from "./chunk-4SR3FG2F.js";
27
27
  import {
28
28
  ACCESS_MODES,
29
29
  CurlError,
@@ -212,7 +212,7 @@ import {
212
212
  writeText,
213
213
  xmlCommands,
214
214
  yqCommands
215
- } from "./chunk-54JM3XZC.js";
215
+ } from "./chunk-NIIYLKZ6.js";
216
216
  import {
217
217
  CommandArgumentIdentityError,
218
218
  CommandRegistry,
@@ -441,4 +441,4 @@ export {
441
441
  xmlCommands,
442
442
  yqCommands
443
443
  };
444
- //# sourceMappingURL=src-R4LATOF3.js.map
444
+ //# sourceMappingURL=src-LTWZPB3P.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "poe-code",
3
- "version": "17.0.32",
3
+ "version": "17.0.33",
4
4
  "description": "CLI tool to configure Poe API for developer workflows.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -167,6 +167,9 @@ export declare const canonicalFs: {
167
167
  readonly node: "packages/safe-fs/dist/node/filesystem.d.ts";
168
168
  readonly browser: "packages/safe-fs/dist/node-unavailable.d.ts";
169
169
  };
170
+ }, {
171
+ readonly workspace: "@poe-code/safe-fs/xml";
172
+ readonly specifier: "poe-code/safe-fs/core";
170
173
  }];
171
174
  };
172
175
  export interface BundleMetafile {
@@ -101,7 +101,10 @@ export const canonicalFs = {
101
101
  source: "packages/safe-fs/src/index.ts",
102
102
  runtime: "packages/safe-js/dist/safe-fs.js",
103
103
  types: "packages/safe-fs/dist/index.d.ts",
104
- routes: canonicalFsRoutes
104
+ routes: [
105
+ ...canonicalFsRoutes,
106
+ { workspace: "@poe-code/safe-fs/xml", specifier: "poe-code/safe-fs/core" }
107
+ ]
105
108
  };
106
109
  function record(value) {
107
110
  return value !== null && typeof value === "object" && !Array.isArray(value)
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  pathOf,
6
6
  writeDiagnostic
7
- } from "./chunk-JESM4RK2.js";
7
+ } from "./chunk-UMCWCITQ.js";
8
8
  import {
9
9
  createOutputOperation
10
10
  } from "./chunk-LCORBKFF.js";
@@ -1432,4 +1432,4 @@ export {
1432
1432
  createCurlCommands,
1433
1433
  curlCommands
1434
1434
  };
1435
- //# sourceMappingURL=chunk-RVYQDJCC.js.map
1435
+ //# sourceMappingURL=chunk-4CEZRUSZ.js.map
@@ -25,7 +25,7 @@ import {
25
25
  import {
26
26
  escapeText,
27
27
  pathOf
28
- } from "./chunk-JESM4RK2.js";
28
+ } from "./chunk-UMCWCITQ.js";
29
29
  import {
30
30
  createOutputOperation
31
31
  } from "./chunk-LCORBKFF.js";
@@ -5227,4 +5227,4 @@ export {
5227
5227
  createYqCommands,
5228
5228
  yqCommands
5229
5229
  };
5230
- //# sourceMappingURL=chunk-MCBWPJRQ.js.map
5230
+ //# sourceMappingURL=chunk-MX6K5URO.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  pathOf,
6
6
  writeDiagnostic
7
- } from "./chunk-JESM4RK2.js";
7
+ } from "./chunk-UMCWCITQ.js";
8
8
  import {
9
9
  yieldTurn
10
10
  } from "./chunk-BJ6PZ4F5.js";
@@ -527,4 +527,4 @@ export {
527
527
  createXmlCommands,
528
528
  xmlCommands
529
529
  };
530
- //# sourceMappingURL=chunk-WSCXISXW.js.map
530
+ //# sourceMappingURL=chunk-RGSI3B5P.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  pathOf,
3
3
  writeDiagnostic
4
- } from "./chunk-JESM4RK2.js";
4
+ } from "./chunk-UMCWCITQ.js";
5
5
  import {
6
6
  createOutputOperation
7
7
  } from "./chunk-LCORBKFF.js";
@@ -285,4 +285,4 @@ export {
285
285
  createLlmCommands,
286
286
  llmCommands
287
287
  };
288
- //# sourceMappingURL=chunk-HC4S4QZD.js.map
288
+ //# sourceMappingURL=chunk-TZ53QA73.js.map
@@ -2,7 +2,7 @@ import {
2
2
  UsageError,
3
3
  pathOf,
4
4
  writeDiagnostic
5
- } from "./chunk-JESM4RK2.js";
5
+ } from "./chunk-UMCWCITQ.js";
6
6
  import {
7
7
  PublicDiagnostic,
8
8
  publicDiagnosticMessage
@@ -625,4 +625,4 @@ export {
625
625
  safeJsNodeCommands,
626
626
  createSafeJsNodeCommand
627
627
  };
628
- //# sourceMappingURL=chunk-LUQYNLH7.js.map
628
+ //# sourceMappingURL=chunk-UKO4AP3K.js.map
@@ -226,8 +226,9 @@ function options(args, short, long = {}, stopAtOperand = false, onOperand, onVal
226
226
  if (argument.startsWith("--")) {
227
227
  const equals = argument.indexOf("=");
228
228
  const name = argument.slice(2, equals < 0 ? void 0 : equals);
229
- const key = long[name];
230
- if (!key || !specifications.has(key)) throw new UsageError(`unrecognized option '${argument}'`);
229
+ const alias = long[name];
230
+ const key = alias === false ? name : alias;
231
+ if (!key || alias !== false && !specifications.has(key)) throw new UsageError(`unrecognized option '${argument}'`);
231
232
  if (specifications.get(key)) {
232
233
  const value2 = equals >= 0 ? argument.slice(equals + 1) : args[++index];
233
234
  if (value2 === void 0) throw new UsageError(`option '--${name}' requires an argument`);
@@ -524,4 +525,4 @@ export {
524
525
  replaceArgument,
525
526
  escapeBytes
526
527
  };
527
- //# sourceMappingURL=chunk-JESM4RK2.js.map
528
+ //# sourceMappingURL=chunk-UMCWCITQ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../safe-bash-contracts/src/command-requirements.ts", "../../src/escaping.ts", "../../src/commands/internal.ts", "../../src/commands/portable-requirements.ts", "../../src/commands/record-buffer.ts"],
4
+ "sourcesContent": ["import type { CommandContext, CommandDefinition } from \"./command.js\";\nimport type { FileSystemCapabilities } from \"./filesystem.js\";\nimport { FsError } from \"./errors.js\";\n\nexport interface CommandFileSystemRequirement {\n readonly id: string;\n readonly description: string;\n readonly capabilities: readonly string[];\n readonly anyOf?: readonly (readonly string[])[];\n readonly mutates?: boolean;\n}\n\nexport interface CommandModeSupport extends CommandFileSystemRequirement {\n readonly status: \"supported\" | \"unsupported\" | \"unknown\";\n readonly missing: readonly string[];\n readonly unknown: readonly string[];\n}\n\nexport interface CommandSupport {\n readonly status: \"supported\" | \"partial\" | \"unsupported\";\n readonly declared: boolean;\n readonly modes: readonly CommandModeSupport[];\n}\n\nfunction evaluateMode(requirement: CommandFileSystemRequirement, capabilities: FileSystemCapabilities): CommandModeSupport {\n const missing = requirement.capabilities.filter(name => capabilities[name] === false);\n const unknown = requirement.capabilities.filter(name => capabilities[name] === undefined);\n if (requirement.mutates && capabilities.readOnly === true) missing.push(\"readOnly\");\n const alternatives = requirement.anyOf;\n if (alternatives && !alternatives.some(group => group.every(name => capabilities[name] === true))) {\n if (alternatives.every(group => group.some(name => capabilities[name] === false))) {\n missing.push(...alternatives.flatMap(group => group.filter(name => capabilities[name] === false)));\n } else {\n unknown.push(...alternatives.filter(group => !group.some(name => capabilities[name] === false))\n .flatMap(group => group.filter(name => capabilities[name] === undefined)));\n }\n }\n return {\n ...requirement,\n status: missing.length ? \"unsupported\" : unknown.length ? \"unknown\" : \"supported\",\n missing: [...new Set(missing)], unknown: [...new Set(unknown)],\n };\n}\n\nexport function evaluateCommandSupport(\n command: Pick<CommandDefinition, \"filesystemRequirements\"> | CommandDefinition,\n capabilities: FileSystemCapabilities,\n): CommandSupport {\n const modes = (command.filesystemRequirements ?? []).map(requirement => evaluateMode(requirement, capabilities));\n return {\n declared: command.filesystemRequirements !== undefined,\n status: command.filesystemRequirements !== undefined && modes.every(mode => mode.status === \"supported\") ? \"supported\"\n : modes.length && modes.every(mode => mode.status === \"unsupported\") ? \"unsupported\" : \"partial\",\n modes,\n };\n}\n\nexport function assertCommandRequirements(\n context: Pick<CommandContext, \"fs\" | \"command\" | \"signal\">,\n requirements: readonly CommandFileSystemRequirement[],\n selected: readonly string[],\n capabilities: FileSystemCapabilities = context.fs.capabilities,\n): void {\n context.signal.throwIfAborted();\n for (const id of new Set(selected)) {\n const requirement = requirements.find(mode => mode.id === id);\n if (!requirement) throw new TypeError(`Unknown filesystem requirement mode: ${id}`);\n const support = evaluateMode(requirement, capabilities);\n if (support.status === \"unsupported\") {\n throw new FsError(support.missing.includes(\"readOnly\") ? \"EROFS\" : \"ENOTSUP\", {\n syscall: context.command,\n message: `${requirement.description} requires unavailable filesystem capabilities: ${support.missing.join(\", \")}`,\n });\n }\n }\n}\n", "import { writeBytes, type ByteSink } from \"./contracts/index.js\";\nimport { yieldTurn } from \"./contracts/yield.js\";\n\nconst controls: Readonly<Record<number, string>> = { 8: \"\\\\b\", 9: \"\\\\t\", 10: \"\\\\n\", 11: \"\\\\v\", 12: \"\\\\f\", 13: \"\\\\r\", 92: \"\\\\\\\\\" };\nconst encoder = new TextEncoder();\n\nfunction* parts(value: string, mode: \"display\" | \"diagnostic\"): Generator<string> {\n for (const character of value) {\n const point = character.codePointAt(0)!;\n if (mode === \"diagnostic\" && (point === 9 || point === 10 || point >= 32 && (point < 127 || point > 159))) {\n yield character;\n } else {\n for (const byte of encoder.encode(character)) {\n yield controls[byte] ?? (byte >= 32 && byte < 127 ? String.fromCharCode(byte) : `\\\\${byte.toString(8).padStart(3, \"0\")}`);\n }\n }\n }\n}\n\nexport function escapeText(value: string, mode: \"display\" | \"diagnostic\", checkOutput?: (bytes: number) => void): string {\n let result = \"\", bytes = 0;\n for (const part of parts(value, mode)) {\n bytes += Buffer.byteLength(part);\n checkOutput?.(bytes);\n result += part;\n }\n return result;\n}\n\nexport async function writeDiagnostic(sink: ByteSink, value: string, signal?: AbortSignal): Promise<void> {\n signal?.throwIfAborted();\n let chunk = \"\", bytes = 0, work = 0;\n for (const part of parts(value, \"diagnostic\")) {\n signal?.throwIfAborted();\n const size = Buffer.byteLength(part);\n if (bytes + size > 16_384) {\n await writeBytes(sink, encoder.encode(chunk), signal);\n chunk = \"\"; bytes = 0;\n }\n chunk += part; bytes += size;\n if (++work % 1024 === 0) await yieldTurn(signal);\n }\n if (bytes) await writeBytes(sink, encoder.encode(chunk), signal);\n signal?.throwIfAborted();\n}\n", "import { PublicDiagnostic, publicDiagnosticMessage } from \"../diagnostics.js\";\nimport { assertCommandRequirements } from \"../contracts/command-requirements.js\";\nimport { writeDiagnostic } from \"../escaping.js\";\nimport { inputRequirements } from \"./portable-requirements.js\";\nimport { RecordBuffer } from \"./record-buffer.js\";\nimport {\n FsError, isAbsolutePath, readBytes, toByteSource, validatePath, writeBytes,\n type ByteSource, type CommandContext, type CommandDefinition, type CommandHandler,\n} from \"../contracts/index.js\";\n\nexport const encoder = new TextEncoder();\nexport const decoder = new TextDecoder();\nexport const bufferLimit = 32 * 1024 * 1024;\n\nexport class UsageError extends PublicDiagnostic {}\n\nexport interface ParsedOptions {\n readonly flags: Set<string>;\n readonly values: Map<string, string[]>;\n readonly operands: string[];\n}\n\nexport function options(\n args: readonly string[], short: string, long: Readonly<Record<string, string | false>> = {},\n stopAtOperand = false, onOperand?: (index: number) => void,\n onValue?: (key: string, index: number, offset: number) => void,\n): ParsedOptions {\n const flags = new Set<string>();\n const values = new Map<string, string[]>();\n const operands: string[] = [];\n const specifications = new Map<string, boolean>();\n for (let index = 0; index < short.length; index++) {\n const key = short[index]!;\n specifications.set(key, short[index + 1] === \":\");\n if (short[index + 1] === \":\") index++;\n }\n let ended = false;\n for (let index = 0; index < args.length; index++) {\n const argument = args[index]!;\n if (ended || argument === \"-\" || !argument.startsWith(\"-\")) {\n operands.push(argument);\n onOperand?.(index);\n if (stopAtOperand) ended = true;\n continue;\n }\n if (argument === \"--\") { ended = true; continue; }\n if (argument.startsWith(\"--\")) {\n const equals = argument.indexOf(\"=\");\n const name = argument.slice(2, equals < 0 ? undefined : equals);\n const alias = long[name];\n const key = alias === false ? name : alias;\n if (!key || (alias !== false && !specifications.has(key))) throw new UsageError(`unrecognized option '${argument}'`);\n if (specifications.get(key)) {\n const value = equals >= 0 ? argument.slice(equals + 1) : args[++index];\n if (value === undefined) throw new UsageError(`option '--${name}' requires an argument`);\n onValue?.(key, index, equals >= 0 ? equals + 1 : 0);\n values.set(key, [...values.get(key) ?? [], value]);\n } else if (equals >= 0) throw new UsageError(`option '--${name}' does not take an argument`);\n flags.add(key);\n continue;\n }\n for (let offset = 1; offset < argument.length; offset++) {\n const key = argument[offset]!;\n if (!specifications.has(key)) throw new UsageError(`invalid option -- '${key}'`);\n if (specifications.get(key)) {\n const value = argument.slice(offset + 1) || args[++index];\n if (value === undefined) throw new UsageError(`option requires an argument -- '${key}'`);\n onValue?.(key, index, offset + 1 < argument.length ? offset + 1 : 0);\n values.set(key, [...values.get(key) ?? [], value]);\n offset = argument.length;\n }\n flags.add(key);\n }\n }\n return { flags, values, operands };\n}\n\nexport function value(parsed: ParsedOptions, key: string): string | undefined {\n return parsed.values.get(key)?.at(-1);\n}\n\nexport function integer(text: string, minimum = 0): number {\n if (!/^[+]?[0-9]+$/u.test(text)) throw new UsageError(`invalid number '${text}'`);\n const number = Number(text);\n if (!Number.isSafeInteger(number) || number < minimum) throw new UsageError(`invalid number '${text}'`);\n return number;\n}\n\nexport function requireOperands(operands: readonly string[], minimum = 1, maximum = Infinity): void {\n if (operands.length < minimum) throw new UsageError(\"missing operand\");\n if (operands.length > maximum) throw new UsageError(`extra operand '${operands[maximum]}'`);\n}\n\nexport function pathOf(context: Pick<CommandContext, \"cwd\">, path: string): string {\n if (!path) throw new FsError(\"ENOENT\", { path });\n validatePath(path);\n validatePath(context.cwd);\n if (!isAbsolutePath(context.cwd)) throw new FsError(\"EINVAL\", { path: context.cwd, message: \"cwd must be absolute\" });\n return isAbsolutePath(path) ? path : `${context.cwd.replace(/\\/$/u, \"\")}/${path}`;\n}\n\nexport function codeOf(error: unknown): string | undefined {\n return error instanceof Error && \"code\" in error ? String(error.code) : undefined;\n}\n\nexport async function output(context: CommandContext, text: string | Uint8Array): Promise<void> {\n context.signal.throwIfAborted();\n await writeBytes(context.stdout, typeof text === \"string\" ? encoder.encode(text) : text, context.signal);\n}\n\nexport async function diagnostic(context: CommandContext, error: unknown): Promise<void> {\n context.signal.throwIfAborted();\n await writeDiagnostic(context.stderr, `${context.command}: ${publicDiagnosticMessage(error, context.onInternalError)}\\n`, context.signal);\n}\n\nexport function define(name: string, handler: CommandHandler, failureCode = 1): CommandDefinition {\n return {\n name,\n async execute(context) {\n context.signal.throwIfAborted();\n try { return await handler(context); }\n catch (error) {\n context.signal.throwIfAborted();\n await diagnostic(context, error);\n return { exitCode: error instanceof UsageError ? 2 : failureCode };\n }\n },\n };\n}\n\nexport async function eachOperand(\n context: CommandContext, operands: readonly string[], operation: (operand: string) => Promise<void>,\n): Promise<{ exitCode: number }> {\n let exitCode = 0;\n for (const operand of operands) {\n context.signal.throwIfAborted();\n try { await operation(operand); }\n catch (error) { await diagnostic(context, error); exitCode = 1; }\n }\n return { exitCode };\n}\n\nexport async function* input(context: CommandContext, name = \"-\"): ByteSource {\n context.signal.throwIfAborted();\n if (name === \"-\") {\n yield* readBytes(context.stdin, context.signal);\n } else {\n await assertInputRequirements(context, [name]);\n const path = pathOf(context, name);\n const capabilities = await context.fs.capabilitiesFor?.(path, { signal: context.signal }) ?? context.fs.capabilities;\n if (context.fs.readStream && capabilities.streamingRead !== false) {\n let emitted = false;\n let reading = true;\n try {\n for await (const chunk of readBytes(context.fs.readStream(path, { signal: context.signal }), context.signal)) {\n reading = false;\n if (chunk.byteLength) emitted = true;\n yield chunk;\n reading = true;\n }\n return;\n } catch (error) {\n context.signal.throwIfAborted();\n if (!reading || emitted || !(error instanceof FsError) || error.code !== \"ENOTSUP\") throw error;\n }\n }\n if (capabilities.read === false) throw new FsError(\"ENOTSUP\", { syscall: \"readFile\", path });\n yield* readBytes({\n async *[Symbol.asyncIterator]() {\n const bytes = await context.fs.readFile(path, { signal: context.signal, maxBytes: bufferLimit });\n context.signal.throwIfAborted();\n if (bytes.byteLength > bufferLimit) throw new FsError(\"EFBIG\", { syscall: \"readFile\", path });\n yield bytes;\n },\n }, context.signal);\n }\n}\n\nexport async function assertInputRequirements(context: CommandContext, names: readonly string[]): Promise<void> {\n const files = names.filter(name => name !== \"-\");\n assertCommandRequirements(context, inputRequirements, [files.length ? \"file\" : \"stdin\"]);\n if (!context.fs.capabilitiesFor) return;\n for (const name of files) {\n try {\n const capabilities = await context.fs.capabilitiesFor(pathOf(context, name), { signal: context.signal });\n assertCommandRequirements(context, inputRequirements, [\"file\"], capabilities);\n } catch (error) {\n context.signal.throwIfAborted();\n if (codeOf(error) === \"ENOTSUP\" || codeOf(error) === \"EROFS\") throw error;\n }\n }\n}\n\nexport function concatenate(chunks: readonly Uint8Array[], size = chunks.reduce((sum, chunk) => sum + chunk.length, 0)): Uint8Array {\n const result = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) { result.set(chunk, offset); offset += chunk.length; }\n return result;\n}\n\nexport async function collect(source: ByteSource, signal: AbortSignal, limit = bufferLimit): Promise<Uint8Array> {\n const chunks: Uint8Array[] = [];\n let size = 0;\n for await (const chunk of source) {\n signal.throwIfAborted();\n size += chunk.length;\n if (size > limit) throw new FsError(\"EFBIG\", { message: `buffer limit exceeded (${limit} bytes)` });\n chunks.push(new Uint8Array(chunk));\n }\n return concatenate(chunks, size);\n}\n\nexport interface Line { readonly bytes: Uint8Array; readonly terminated: boolean }\n\nexport async function* lines(source: ByteSource, separator = 10, admit?: (size: number) => void): AsyncGenerator<Line> {\n const pending = new RecordBuffer(bufferLimit);\n try {\n for await (const chunk of source) {\n let start = 0;\n for (let offset = 0; offset < chunk.length; offset++) {\n if (chunk[offset] !== separator) continue;\n yield { bytes: pending.finish(admit, chunk, start, offset), terminated: true };\n start = offset + 1;\n }\n pending.append(chunk, start);\n }\n if (pending.size) yield { bytes: pending.finish(admit), terminated: false };\n } finally { pending.clear(); }\n}\n\nexport function emptyInput(): ByteSource { return toByteSource(\"\"); }\n\nexport function replaceArgument(source: string | Uint8Array, pattern: string, replacement: string): string | Uint8Array {\n if (typeof source === \"string\") return source.split(pattern).join(replacement);\n const needle = encoder.encode(pattern);\n if (!needle.length) throw new UsageError(\"replacement string cannot be empty\");\n const substituted = encoder.encode(replacement);\n const chunks: Uint8Array[] = [];\n let start = 0;\n for (let offset = 0; offset <= source.length - needle.length;) {\n if (needle.every((byte, index) => source[offset + index] === byte)) {\n chunks.push(source.subarray(start, offset), substituted);\n offset += needle.length;\n start = offset;\n } else offset++;\n }\n chunks.push(source.subarray(start));\n return concatenate(chunks);\n}\n\nexport function escapeBytes(text: string | Uint8Array, zeroOctal = false, bareOctal = false): { bytes: Uint8Array; stop: boolean } {\n if (typeof text === \"string\") {\n const chunks: Uint8Array[] = [];\n const control: Record<string, number> = { a: 7, b: 8, e: 27, E: 27, f: 12, n: 10, r: 13, t: 9, v: 11, \"\\\\\": 92 };\n for (let index = 0; index < text.length;) {\n if (text[index] !== \"\\\\\" || index + 1 === text.length) {\n const character = String.fromCodePoint(text.codePointAt(index)!);\n chunks.push(encoder.encode(character)); index += character.length; continue;\n }\n const next = text[index + 1]!;\n if (next === \"c\") return { bytes: concatenate(chunks), stop: true };\n if (control[next] !== undefined) { chunks.push(Uint8Array.of(control[next])); index += 2; continue; }\n const rest = text.slice(index + 1);\n const octal = zeroOctal ? (bareOctal ? /^(?:0([0-7]{0,3})|([1-7][0-7]{0,2}))/u : /^0([0-7]{0,3})/u).exec(rest) : /^([0-7]{1,3})/u.exec(rest);\n if (octal) { chunks.push(Uint8Array.of(parseInt(octal[1] || octal[2] || \"0\", 8) & 255)); index += 1 + octal[0].length; continue; }\n const hexadecimal = /^x([0-9a-fA-F]{1,2})/u.exec(rest);\n if (hexadecimal) { chunks.push(Uint8Array.of(parseInt(hexadecimal[1]!, 16))); index += 1 + hexadecimal[0].length; continue; }\n chunks.push(encoder.encode(`\\\\${next}`)); index += 2;\n }\n return { bytes: concatenate(chunks), stop: false };\n }\n const source = text;\n const bytes = new Uint8Array(source.length);\n const control: Record<number, number> = { 97: 7, 98: 8, 101: 27, 69: 27, 102: 12, 110: 10, 114: 13, 116: 9, 118: 11, 92: 92 };\n let size = 0;\n for (let index = 0; index < source.length;) {\n if (source[index] !== 92 || index + 1 === source.length) { bytes[size++] = source[index++]!; continue; }\n const next = source[index + 1]!;\n if (next === 99) return { bytes: bytes.subarray(0, size), stop: true };\n if (control[next] !== undefined) { bytes[size++] = control[next]; index += 2; continue; }\n if (zeroOctal ? next === 48 || bareOctal && next >= 49 && next <= 55 : next >= 48 && next <= 55) {\n let offset = index + (zeroOctal && next === 48 ? 2 : 1);\n const end = Math.min(source.length, offset + 3);\n let value = 0;\n while (offset < end && source[offset]! >= 48 && source[offset]! <= 55) value = value * 8 + source[offset++]! - 48;\n bytes[size++] = value & 255;\n index = offset;\n continue;\n }\n if (next === 120) {\n let offset = index + 2;\n const end = Math.min(source.length, offset + 2);\n let value = 0;\n while (offset < end) {\n const digit = source[offset]!;\n const number = digit >= 48 && digit <= 57 ? digit - 48 : digit >= 65 && digit <= 70 ? digit - 55 : digit >= 97 && digit <= 102 ? digit - 87 : -1;\n if (number < 0) break;\n value = value * 16 + number;\n offset++;\n }\n if (offset > index + 2) { bytes[size++] = value; index = offset; continue; }\n }\n bytes[size++] = 92;\n bytes[size++] = next;\n index += 2;\n }\n return { bytes: bytes.subarray(0, size), stop: false };\n}\n", "import type { CommandFileSystemRequirement } from \"../contracts/command-requirements.js\";\n\nexport const inputRequirements: readonly CommandFileSystemRequirement[] = [\n { id: \"stdin\", description: \"Read standard input\", capabilities: [] },\n { id: \"file\", description: \"Read file operands\", capabilities: [], anyOf: [[\"streamingRead\"], [\"read\"]] },\n];\n\nexport const textOutputRequirements: readonly CommandFileSystemRequirement[] = [\n ...inputRequirements,\n { id: \"output\", description: \"Write or truncate an output file\", capabilities: [], anyOf: [[\"streamingWrite\"], [\"write\"]], mutates: true },\n];\n\nexport const pwdRequirements: readonly CommandFileSystemRequirement[] = [\n { id: \"logical\", description: \"Print the logical working directory\", capabilities: [] },\n { id: \"physical\", description: \"Resolve the physical working directory (-P)\", capabilities: [\"realpath\"] },\n];\n\nexport const predicateRequirements: readonly CommandFileSystemRequirement[] = [\n { id: \"expression\", description: \"Evaluate strings and integers\", capabilities: [] },\n { id: \"metadata\", description: \"Inspect file metadata\", capabilities: [\"stat\"] },\n { id: \"access\", description: \"Inspect path access permissions\", capabilities: [\"access\"] },\n];\n", "import { FsError } from \"../contracts/index.js\";\n\nconst segmentSize = 4096;\n\nexport class RecordBuffer {\n #segments: Uint8Array[] = [];\n #size = 0;\n #allocated = 0;\n\n constructor(readonly capacity: number, readonly finalizationCapacity = capacity * 2) {}\n\n get size(): number { return this.#size; }\n\n #admit(length: number): void {\n if (length > this.capacity - this.#size) {\n throw new FsError(\"EFBIG\", { message: \"line buffer limit exceeded\" });\n }\n }\n\n append(bytes: Uint8Array, start = 0, end = bytes.length): void {\n this.#admit(end - start);\n let offset = start;\n while (offset < end) {\n let segment = this.#segments.at(-1);\n const used = this.#size % segmentSize;\n if (!segment || used === 0) {\n segment = new Uint8Array(Math.min(segmentSize, this.capacity - this.#allocated));\n this.#segments.push(segment);\n this.#allocated += segment.length;\n }\n const length = Math.min(end - offset, segment.length - used);\n segment.set(bytes.subarray(offset, offset + length), used);\n this.#size += length;\n offset += length;\n }\n }\n\n finish(admit?: (size: number) => void, bytes?: Uint8Array, start = 0, end = bytes?.length ?? 0): Uint8Array {\n this.#admit(end - start);\n const size = this.#size + end - start;\n admit?.(size);\n if (size > this.finalizationCapacity - this.#allocated) {\n throw new FsError(\"EFBIG\", { message: \"line finalization buffer limit exceeded\" });\n }\n const result = new Uint8Array(size);\n let offset = 0;\n for (const segment of this.#segments) {\n const length = Math.min(segment.length, this.#size - offset);\n result.set(segment.subarray(0, length), offset);\n offset += length;\n }\n if (bytes && end > start) result.set(bytes.subarray(start, end), offset);\n this.clear();\n return result;\n }\n\n clear(): void {\n this.#segments = [];\n this.#size = 0;\n this.#allocated = 0;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["value", "encoder", "value", "encoder", "control", "value"]
7
+ }
@@ -36,6 +36,9 @@ init_platform();
36
36
  function foldAscii(code) {
37
37
  return code >= 65 && code <= 90 ? code + 32 : code;
38
38
  }
39
+ function isAsciiWord(code) {
40
+ return code >= 65 && code <= 90 || code >= 97 && code <= 122 || code >= 48 && code <= 57 || code === 95;
41
+ }
39
42
 
40
43
  // packages/safe-bash/src/commands/expr/bre-engine.ts
41
44
  init_platform();
@@ -8807,7 +8810,7 @@ async function matchEre(program, subject, ledger, signal) {
8807
8810
  await admitAscii(subject, ledger, signal);
8808
8811
  return runMatcher(program, subject, ledger, signal, 0, true);
8809
8812
  }
8810
- async function prepareUtf8EreSubject(bytes2, ledger, signal) {
8813
+ async function prepareUtf8EreSubject(bytes2, ledger, signal, leftmostFirst = false, word = false) {
8811
8814
  ledger.check(signal);
8812
8815
  ledger.admitInput("subjectBytes", bytes2.length, signal);
8813
8816
  ledger.charge("allocationUnits", bytes2.length * 11 + 16, signal);
@@ -8818,7 +8821,7 @@ async function prepareUtf8EreSubject(bytes2, ledger, signal) {
8818
8821
  const offsets = [];
8819
8822
  for (let offset = 0; offset < owned.length; ) {
8820
8823
  const first = owned[offset];
8821
- const width = first < 128 ? 1 : first < 224 ? 2 : first < 240 ? 3 : 4;
8824
+ const width = word || first < 128 ? 1 : first < 224 ? 2 : first < 240 ? 3 : 4;
8822
8825
  ledger.charge("work", width, signal);
8823
8826
  await ledger.checkpoint(signal);
8824
8827
  offsets.push(offset);
@@ -8843,14 +8846,14 @@ async function prepareUtf8EreSubject(bytes2, ledger, signal) {
8843
8846
  else upper = middle;
8844
8847
  }
8845
8848
  if (offsets[lower] !== start) throw new RangeError("UTF-8 ERE cursor must be a scalar boundary");
8846
- const span = await runMatcher(program, subject, ledger, signal, lower, false);
8849
+ const span = await runMatcher(program, subject, ledger, signal, lower, false, leftmostFirst, word);
8847
8850
  if (!span) return void 0;
8848
8851
  ledger.charge("allocationUnits", 2, signal);
8849
8852
  return Object.freeze({ start: offsets[span.start], end: offsets[span.end] });
8850
8853
  };
8851
8854
  };
8852
8855
  }
8853
- async function runMatcher(program, subject, ledger, signal, from, materialize) {
8856
+ async function runMatcher(program, subject, ledger, signal, from, materialize, leftmostFirst = false, word = false) {
8854
8857
  const root = resolveEreProgram(program, ledger);
8855
8858
  const width = program.groups + 1;
8856
8859
  ledger.charge("work", width * 2, signal);
@@ -8869,6 +8872,11 @@ async function runMatcher(program, subject, ledger, signal, from, materialize) {
8869
8872
  pending.push({ position, task: next, captures, histories });
8870
8873
  };
8871
8874
  for (let start = from; start <= subject.length; start++) {
8875
+ if (word) {
8876
+ ledger.charge("work", 1, signal);
8877
+ await ledger.checkpoint(signal);
8878
+ if (isAsciiWord(subject.charCodeAt(start - 1))) continue;
8879
+ }
8872
8880
  push(start, task(() => ({ kind: "node", node: root, next: null })), emptyCaptures, emptyHistories);
8873
8881
  let best;
8874
8882
  while (pending.length > 0) {
@@ -8877,6 +8885,11 @@ async function runMatcher(program, subject, ledger, signal, from, materialize) {
8877
8885
  const state = pending.pop();
8878
8886
  const current = state.task;
8879
8887
  if (current === null) {
8888
+ if (word && isAsciiWord(subject.charCodeAt(state.position))) continue;
8889
+ if (leftmostFirst) {
8890
+ best = state;
8891
+ break;
8892
+ }
8880
8893
  if (!best || await preferred(state, best, ledger, signal)) best = state;
8881
8894
  continue;
8882
8895
  }
@@ -8918,7 +8931,7 @@ async function runMatcher(program, subject, ledger, signal, from, materialize) {
8918
8931
  case "literal":
8919
8932
  case "set": {
8920
8933
  const code = subject.charCodeAt(state.position);
8921
- if (state.position < subject.length && (node.kind === "dot" || node.kind === "literal" && (node.insensitive ? foldAscii(node.code) === foldAscii(code) : node.code === code) || node.kind === "set" && (code < 128 ? node.members[code] : node.nonAscii))) {
8934
+ if (state.position < subject.length && (node.kind === "dot" && (!leftmostFirst || code !== 10) || node.kind === "literal" && (node.insensitive ? foldAscii(node.code) === foldAscii(code) : node.code === code) || node.kind === "set" && (code < 128 ? node.members[code] : node.nonAscii))) {
8922
8935
  push(state.position + 1, current.next, state.captures, state.histories);
8923
8936
  }
8924
8937
  break;
@@ -9062,13 +9075,12 @@ function descriptor(value, limits) {
9062
9075
  if (value === null || typeof value !== "object") fail("protocol", "invalid descriptor");
9063
9076
  const kind = Object.getOwnPropertyDescriptor(value, "kind");
9064
9077
  if (!kind || !("value" in kind)) fail("protocol", "invalid descriptor kind");
9065
- if (kind.value !== "grep" && kind.value !== "rg") fail("unsupported", "only grep and fixed rg selection descriptors are supported");
9078
+ if (kind.value !== "grep" && kind.value !== "rg") fail("unsupported", "only grep and rg selection descriptors are supported");
9066
9079
  const flags = kind.value === "grep" ? ["fixed", "extended", "insensitive", "whole", "word"] : ["fixed", "whole", "word", "nullData"];
9067
9080
  record(value, ["kind", "patterns", ...flags, ...kind.value === "rg" ? ["case"] : []]);
9068
9081
  for (const flag of flags) if (typeof value[flag] !== "boolean") fail("protocol", `invalid ${flag} flag`);
9069
9082
  if (kind.value === "rg" && !["sensitive", "insensitive", "smart"].includes(value.case)) fail("protocol", "invalid case flag");
9070
- if (value.word || kind.value === "rg" && value.case !== "sensitive") fail("unsupported", "word matching and rg case-insensitive selection are unsupported");
9071
- if (kind.value === "rg" && !value.fixed) fail("unsupported", "rg regex modes are unsupported; use fixed UTF-8 patterns");
9083
+ if (kind.value === "rg" && (value.word || value.case !== "sensitive")) fail("unsupported", "rg word matching and case-insensitive selection are unsupported");
9072
9084
  array(value.patterns, limits.maxPatterns, "pattern");
9073
9085
  let bytes2 = 0;
9074
9086
  for (let index = 0; index < value.patterns.length; index++) {
@@ -9090,7 +9102,6 @@ function admit(input, limits, signal) {
9090
9102
  record(row, ["bytes", "all", "terminated"], ["directory", "ancestors"]);
9091
9103
  if (!(row.bytes instanceof Uint8Array) || typeof row.all !== "boolean" || typeof row.terminated !== "boolean" || Object.hasOwn(row, "directory") && typeof row.directory !== "boolean" || Object.hasOwn(row, "ancestors") && typeof row.ancestors !== "boolean") fail("protocol", "invalid row");
9092
9104
  if (Object.hasOwn(row, "directory") || Object.hasOwn(row, "ancestors")) fail("unsupported", "glob row flags are unsupported");
9093
- if (row.all && selected.kind !== "grep") fail("unsupported", "rg all-match enumeration is unsupported");
9094
9105
  const length = byteLength.call(row.bytes);
9095
9106
  if (length > limits.maxInputBytes - bytes2) fail("limit", "aggregate input byte limit exceeded");
9096
9107
  bytes2 += length;
@@ -9274,17 +9285,28 @@ async function compileLiteral(bytes2, ledger, signal, insensitive = false) {
9274
9285
  }
9275
9286
  return { bytes: bytes2, fallback, insensitive };
9276
9287
  }
9277
- async function literalStart(program, subject, whole, ledger, signal, from = 0) {
9288
+ async function literalStart(program, subject, whole, word, ledger, signal, from = 0) {
9278
9289
  const { bytes: bytes2, fallback } = program;
9279
9290
  ledger.charge("work", 1, signal);
9280
9291
  await ledger.checkpoint(signal);
9281
9292
  if (whole && (from !== 0 || bytes2.length !== subject.length) || bytes2.length > subject.length - from) return -1;
9282
- if (bytes2.length === 0) return from;
9293
+ if (bytes2.length === 0) {
9294
+ for (let start = from; start <= subject.length; start++) {
9295
+ ledger.charge("work", 1, signal);
9296
+ await ledger.checkpoint(signal);
9297
+ if (!word || !isAsciiWord(subject[start - 1] ?? -1) && !isAsciiWord(subject[start] ?? -1)) return start;
9298
+ }
9299
+ return -1;
9300
+ }
9283
9301
  for (let index = from, prefix = 0; index < subject.length; ) {
9284
9302
  ledger.charge("work", 1, signal);
9285
9303
  if ((program.insensitive ? foldAscii(subject[index]) : subject[index]) === bytes2[prefix]) {
9286
9304
  index++;
9287
- if (++prefix === bytes2.length) return index - prefix;
9305
+ if (++prefix === bytes2.length) {
9306
+ const start = index - prefix;
9307
+ if (!word || !isAsciiWord(subject[start - 1] ?? -1) && !isAsciiWord(subject[index] ?? -1)) return start;
9308
+ prefix = fallback[prefix - 1];
9309
+ }
9288
9310
  } else if (prefix > 0) prefix = fallback[prefix - 1];
9289
9311
  else index++;
9290
9312
  await ledger.checkpoint(signal);
@@ -9296,6 +9318,9 @@ async function enumerate(input, row, finders, usage, signal) {
9296
9318
  ledger.charge("allocationUnits", finders.length + 2, signal);
9297
9319
  const cached = new Array(finders.length);
9298
9320
  const ranges = [];
9321
+ const byteEmpty = input.descriptor.kind === "rg" && !input.descriptor.whole && input.descriptor.patterns.length === 1 && input.descriptor.patterns[0] === "";
9322
+ const byteCursor = input.descriptor.kind === "grep" && input.descriptor.word;
9323
+ let previousEnd = -1;
9299
9324
  for (let from = 0; from <= row.bytes.length; ) {
9300
9325
  let best;
9301
9326
  for (let index = 0; index < finders.length; index++) {
@@ -9306,9 +9331,14 @@ async function enumerate(input, row, finders, usage, signal) {
9306
9331
  candidate = await finders[index](from) ?? null;
9307
9332
  cached[index] = candidate;
9308
9333
  }
9309
- if (candidate && (!best || candidate.start < best.start || candidate.start === best.start && candidate.end > best.end)) best = candidate;
9334
+ if (candidate && (!best || candidate.start < best.start || input.descriptor.kind === "grep" && candidate.start === best.start && candidate.end > best.end)) best = candidate;
9335
+ }
9336
+ if (!best || byteEmpty && !row.terminated && best.start === row.bytes.length) break;
9337
+ if (input.descriptor.kind === "rg" && !byteEmpty && best.start === best.end && best.start === previousEnd) {
9338
+ const byte = row.bytes[best.end];
9339
+ from = best.end + (byte === void 0 || byte < 128 ? 1 : byte < 224 ? 2 : byte < 240 ? 3 : 4);
9340
+ continue;
9310
9341
  }
9311
- if (!best) break;
9312
9342
  if (ranges.length / 2 >= limits.maxMatchesPerLine) fail("limit", "matches per line limit exceeded");
9313
9343
  if (usage.count >= limits.maxTotalMatches) fail("limit", "total match limit exceeded");
9314
9344
  if (usage.count >= Math.floor(limits.maxResultBytes / 16)) fail("limit", "result byte limit exceeded");
@@ -9316,10 +9346,11 @@ async function enumerate(input, row, finders, usage, signal) {
9316
9346
  ledger.charge("allocationUnits", 24, signal);
9317
9347
  usage.count++;
9318
9348
  ranges.push(best.start, best.end);
9349
+ previousEnd = best.end;
9319
9350
  if (best.end > best.start) from = best.end;
9320
9351
  else {
9321
9352
  const byte = row.bytes[best.end];
9322
- from = best.end + (byte === void 0 || byte < 128 ? 1 : byte < 224 ? 2 : byte < 240 ? 3 : 4);
9353
+ from = best.end + (byteEmpty || byteCursor || byte === void 0 || byte < 128 ? 1 : byte < 224 ? 2 : byte < 240 ? 3 : 4);
9323
9354
  }
9324
9355
  }
9325
9356
  ledger.charge("work", ranges.length, signal);
@@ -9340,7 +9371,7 @@ async function executeLiteral(input, signal) {
9340
9371
  if (row.all) {
9341
9372
  ledger.charge("allocationUnits", programs2.length * 2, signal);
9342
9373
  const finders = programs2.map((program) => async (from) => {
9343
- const start2 = await literalStart(program, row.bytes, selected.whole, ledger, signal, from);
9374
+ const start2 = await literalStart(program, row.bytes, selected.whole, selected.word, ledger, signal, from);
9344
9375
  if (start2 < 0) return void 0;
9345
9376
  ledger.charge("allocationUnits", 2, signal);
9346
9377
  return { start: start2, end: start2 + program.bytes.length };
@@ -9351,7 +9382,7 @@ async function executeLiteral(input, signal) {
9351
9382
  let start = -1;
9352
9383
  let end = -1;
9353
9384
  for (const program of programs2) {
9354
- const candidate = await literalStart(program, row.bytes, selected.whole, ledger, signal);
9385
+ const candidate = await literalStart(program, row.bytes, selected.whole, selected.word, ledger, signal);
9355
9386
  if (candidate < 0) continue;
9356
9387
  if (start < 0 || candidate < start) {
9357
9388
  start = candidate;
@@ -9370,7 +9401,19 @@ async function executeLiteral(input, signal) {
9370
9401
  }
9371
9402
  async function execute(input, signal) {
9372
9403
  const { descriptor: selected, rows, ledger } = input;
9373
- if (selected.fixed) return executeLiteral(input, signal);
9404
+ let literal = selected.fixed;
9405
+ if (!literal && selected.kind === "rg") {
9406
+ literal = true;
9407
+ patterns: for (const pattern of selected.patterns) {
9408
+ ledger.charge("work", pattern.length, signal);
9409
+ await ledger.checkpoint(signal);
9410
+ for (const character of pattern) if ("\\.^$[]()|*+?{}".includes(character)) {
9411
+ literal = false;
9412
+ break patterns;
9413
+ }
9414
+ }
9415
+ }
9416
+ if (literal) return executeLiteral(input, signal);
9374
9417
  const programs2 = [];
9375
9418
  for (const pattern of selected.patterns) {
9376
9419
  if (selected.kind === "rg" && !selected.nullData && pattern.includes("\n")) fail("unsupported", "rg multiline matching is unsupported");
@@ -9388,7 +9431,7 @@ async function execute(input, signal) {
9388
9431
  const results = [];
9389
9432
  const usage = { count: 0 };
9390
9433
  for (const row of rows) {
9391
- const subject = await prepareUtf8EreSubject(row.bytes, ledger, signal);
9434
+ const subject = await prepareUtf8EreSubject(row.bytes, ledger, signal, selected.kind === "rg", selected.word);
9392
9435
  if (row.all) {
9393
9436
  ledger.charge("allocationUnits", programs2.length + 1, signal);
9394
9437
  const finders = [];
@@ -12160,4 +12203,4 @@ export {
12160
12203
  createCsplitCommands,
12161
12204
  csplitCommands
12162
12205
  };
12163
- //# sourceMappingURL=chunk-BM3BGSH7.js.map
12206
+ //# sourceMappingURL=chunk-YJPA2BVP.js.map