@poe-platform/safe-bash 0.1.718 → 0.1.720

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 (93) hide show
  1. package/README.md +11 -2
  2. package/dist/safe-bash/chunks/{chunk-N4PN6Z63.js → chunk-6G7AGS2B.js} +41 -5
  3. package/dist/safe-bash/chunks/chunk-6G7AGS2B.js.map +7 -0
  4. package/dist/safe-bash/chunks/{chunk-RVYQDJCC.js → chunk-AOT4SUBQ.js} +2 -2
  5. package/dist/safe-bash/chunks/{chunk-MCBWPJRQ.js → chunk-FOMU56TU.js} +18 -2
  6. package/dist/safe-bash/chunks/chunk-FOMU56TU.js.map +7 -0
  7. package/dist/safe-bash/chunks/{chunk-FXCEA7NR.js → chunk-IW6BX3VX.js} +18 -2
  8. package/dist/safe-bash/chunks/chunk-IW6BX3VX.js.map +7 -0
  9. package/dist/safe-bash/chunks/{chunk-JESM4RK2.js → chunk-KLEL3WAN.js} +41 -5
  10. package/dist/safe-bash/chunks/chunk-KLEL3WAN.js.map +7 -0
  11. package/dist/safe-bash/chunks/{chunk-LUQYNLH7.js → chunk-L4HKTYVE.js} +2 -2
  12. package/dist/safe-bash/chunks/{chunk-4C5H4M64.js → chunk-M7GLXFPU.js} +2 -2
  13. package/dist/safe-bash/chunks/{chunk-B5Y7TH7K.js → chunk-NF3OGIG4.js} +2 -2
  14. package/dist/safe-bash/chunks/{chunk-G5FT6GOL.js → chunk-RNWDFNH4.js} +2 -2
  15. package/dist/safe-bash/chunks/{chunk-WSCXISXW.js → chunk-RYXT5BJJ.js} +2 -2
  16. package/dist/safe-bash/chunks/{chunk-SACGNKFN.js → chunk-UZUKVBCC.js} +2 -2
  17. package/dist/safe-bash/chunks/{chunk-HC4S4QZD.js → chunk-WSX5CLK2.js} +2 -2
  18. package/dist/safe-bash/chunks/{chunk-BM3BGSH7.js → chunk-YJPA2BVP.js} +63 -20
  19. package/dist/safe-bash/chunks/chunk-YJPA2BVP.js.map +7 -0
  20. package/dist/safe-bash/chunks/{chunk-YOUOJRAP.js → chunk-ZHWEPWDW.js} +63 -20
  21. package/dist/safe-bash/chunks/chunk-ZHWEPWDW.js.map +7 -0
  22. package/dist/safe-bash/commands/archive/index.d.ts.map +1 -1
  23. package/dist/safe-bash/commands/archive/index.js +27 -0
  24. package/dist/safe-bash/commands/archive/index.js.map +1 -1
  25. package/dist/safe-bash/commands/archive/options.d.ts +1 -1
  26. package/dist/safe-bash/commands/archive/options.d.ts.map +1 -1
  27. package/dist/safe-bash/commands/archive/options.js +2 -0
  28. package/dist/safe-bash/commands/archive/options.js.map +1 -1
  29. package/dist/safe-bash/commands/basic.d.ts.map +1 -1
  30. package/dist/safe-bash/commands/basic.js +9 -2
  31. package/dist/safe-bash/commands/basic.js.map +1 -1
  32. package/dist/safe-bash/commands/csplit/index.browser.js +1 -1
  33. package/dist/safe-bash/commands/internal.d.ts +5 -2
  34. package/dist/safe-bash/commands/internal.d.ts.map +1 -1
  35. package/dist/safe-bash/commands/internal.js +48 -4
  36. package/dist/safe-bash/commands/internal.js.map +1 -1
  37. package/dist/safe-bash/commands/llm/index.browser.js +2 -2
  38. package/dist/safe-bash/commands/network/index.browser.js +2 -2
  39. package/dist/safe-bash/commands/node/index.browser.js +2 -2
  40. package/dist/safe-bash/commands/pandoc/index.js.map +2 -2
  41. package/dist/safe-bash/commands/regex-execution/ascii.d.ts +2 -0
  42. package/dist/safe-bash/commands/regex-execution/ascii.d.ts.map +1 -1
  43. package/dist/safe-bash/commands/regex-execution/ascii.js +4 -0
  44. package/dist/safe-bash/commands/regex-execution/ascii.js.map +1 -1
  45. package/dist/safe-bash/commands/regex-execution/bounded-provider.d.ts.map +1 -1
  46. package/dist/safe-bash/commands/regex-execution/bounded-provider.js +51 -21
  47. package/dist/safe-bash/commands/regex-execution/bounded-provider.js.map +1 -1
  48. package/dist/safe-bash/commands/regex-execution/ere/matcher.d.ts +2 -2
  49. package/dist/safe-bash/commands/regex-execution/ere/matcher.d.ts.map +1 -1
  50. package/dist/safe-bash/commands/regex-execution/ere/matcher.js +23 -9
  51. package/dist/safe-bash/commands/regex-execution/ere/matcher.js.map +1 -1
  52. package/dist/safe-bash/commands/search/grep.d.ts.map +1 -1
  53. package/dist/safe-bash/commands/search/grep.js +99 -4
  54. package/dist/safe-bash/commands/search/grep.js.map +1 -1
  55. package/dist/safe-bash/commands/search/options.d.ts +1 -0
  56. package/dist/safe-bash/commands/search/options.d.ts.map +1 -1
  57. package/dist/safe-bash/commands/search/options.js +4 -1
  58. package/dist/safe-bash/commands/search/options.js.map +1 -1
  59. package/dist/safe-bash/commands/search/rg-command.d.ts.map +1 -1
  60. package/dist/safe-bash/commands/search/rg-command.js +59 -0
  61. package/dist/safe-bash/commands/search/rg-command.js.map +1 -1
  62. package/dist/safe-bash/commands/streams.d.ts.map +1 -1
  63. package/dist/safe-bash/commands/streams.js +32 -12
  64. package/dist/safe-bash/commands/streams.js.map +1 -1
  65. package/dist/safe-bash/commands/structured/jq.d.ts.map +1 -1
  66. package/dist/safe-bash/commands/structured/jq.js +8 -4
  67. package/dist/safe-bash/commands/structured/jq.js.map +1 -1
  68. package/dist/safe-bash/commands/structured/values.d.ts +1 -0
  69. package/dist/safe-bash/commands/structured/values.d.ts.map +1 -1
  70. package/dist/safe-bash/commands/structured/values.js +18 -1
  71. package/dist/safe-bash/commands/structured/values.js.map +1 -1
  72. package/dist/safe-bash/commands/text-programs/sed.d.ts.map +1 -1
  73. package/dist/safe-bash/commands/text-programs/sed.js +10 -1
  74. package/dist/safe-bash/commands/text-programs/sed.js.map +1 -1
  75. package/dist/safe-bash/commands/xml/index.browser.js +2 -2
  76. package/dist/safe-bash/commands/yq/index.browser.js +2 -2
  77. package/dist/safe-bash/core.browser.js +248 -29
  78. package/dist/safe-bash/core.browser.js.map +3 -3
  79. package/package.json +2 -2
  80. package/dist/safe-bash/chunks/chunk-BM3BGSH7.js.map +0 -7
  81. package/dist/safe-bash/chunks/chunk-FXCEA7NR.js.map +0 -7
  82. package/dist/safe-bash/chunks/chunk-JESM4RK2.js.map +0 -7
  83. package/dist/safe-bash/chunks/chunk-MCBWPJRQ.js.map +0 -7
  84. package/dist/safe-bash/chunks/chunk-N4PN6Z63.js.map +0 -7
  85. package/dist/safe-bash/chunks/chunk-YOUOJRAP.js.map +0 -7
  86. /package/dist/safe-bash/chunks/{chunk-RVYQDJCC.js.map → chunk-AOT4SUBQ.js.map} +0 -0
  87. /package/dist/safe-bash/chunks/{chunk-LUQYNLH7.js.map → chunk-L4HKTYVE.js.map} +0 -0
  88. /package/dist/safe-bash/chunks/{chunk-4C5H4M64.js.map → chunk-M7GLXFPU.js.map} +0 -0
  89. /package/dist/safe-bash/chunks/{chunk-B5Y7TH7K.js.map → chunk-NF3OGIG4.js.map} +0 -0
  90. /package/dist/safe-bash/chunks/{chunk-G5FT6GOL.js.map → chunk-RNWDFNH4.js.map} +0 -0
  91. /package/dist/safe-bash/chunks/{chunk-WSCXISXW.js.map → chunk-RYXT5BJJ.js.map} +0 -0
  92. /package/dist/safe-bash/chunks/{chunk-SACGNKFN.js.map → chunk-UZUKVBCC.js.map} +0 -0
  93. /package/dist/safe-bash/chunks/{chunk-HC4S4QZD.js.map → chunk-WSX5CLK2.js.map} +0 -0
@@ -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`);
@@ -407,7 +408,8 @@ function replaceArgument(source, pattern, replacement) {
407
408
  chunks.push(source.subarray(start));
408
409
  return concatenate(chunks);
409
410
  }
410
- function escapeBytes(text, zeroOctal = false, bareOctal = false) {
411
+ function escapeBytes(text, zeroOctal = false, bareOctal = false, unicode) {
412
+ if (unicode && typeof text === "string") text = encoder2.encode(text);
411
413
  if (typeof text === "string") {
412
414
  const chunks = [];
413
415
  const control2 = { a: 7, b: 8, e: 27, E: 27, f: 12, n: 10, r: 13, t: 9, v: 11, "\\": 92 };
@@ -444,7 +446,7 @@ function escapeBytes(text, zeroOctal = false, bareOctal = false) {
444
446
  return { bytes: concatenate(chunks), stop: false };
445
447
  }
446
448
  const source = text;
447
- const bytes = new Uint8Array(source.length);
449
+ const bytes = new Uint8Array(source.length * (unicode && !unicode.utf8 ? 3 : 1));
448
450
  const control = { 97: 7, 98: 8, 101: 27, 69: 27, 102: 12, 110: 10, 114: 13, 116: 9, 118: 11, 92: 92 };
449
451
  let size = 0;
450
452
  for (let index = 0; index < source.length; ) {
@@ -468,6 +470,40 @@ function escapeBytes(text, zeroOctal = false, bareOctal = false) {
468
470
  index = offset;
469
471
  continue;
470
472
  }
473
+ if (unicode && (next === 117 || next === 85)) {
474
+ const digits = next === 117 ? 4 : 8;
475
+ let offset = index + 2;
476
+ const end = Math.min(source.length, offset + digits);
477
+ let value2 = 0;
478
+ while (offset < end) {
479
+ const digit = source[offset];
480
+ const number = digit >= 48 && digit <= 57 ? digit - 48 : digit >= 65 && digit <= 70 ? digit - 55 : digit >= 97 && digit <= 102 ? digit - 87 : -1;
481
+ if (number < 0) break;
482
+ value2 = value2 * 16 + number;
483
+ offset++;
484
+ }
485
+ if (offset === index + 2) unicode.missingDigit(String.fromCharCode(next));
486
+ else {
487
+ if (value2 < 2147483648) {
488
+ if (!unicode.utf8 && value2 > 127) {
489
+ const literal = encoder2.encode(`\\${value2 <= 65535 ? "u" : "U"}${value2.toString(16).toUpperCase().padStart(value2 <= 65535 ? 4 : 8, "0")}`);
490
+ bytes.set(literal, size);
491
+ size += literal.length;
492
+ } else if (value2 < 128) bytes[size++] = value2;
493
+ else {
494
+ const length = value2 < 2048 ? 2 : value2 < 65536 ? 3 : value2 < 2097152 ? 4 : value2 < 67108864 ? 5 : 6;
495
+ for (let position = length - 1; position > 0; position--) {
496
+ bytes[size + position] = 128 | value2 & 63;
497
+ value2 = Math.floor(value2 / 64);
498
+ }
499
+ bytes[size] = 255 << 8 - length & 255 | value2;
500
+ size += length;
501
+ }
502
+ }
503
+ index = offset;
504
+ continue;
505
+ }
506
+ }
471
507
  if (next === 120) {
472
508
  let offset = index + 2;
473
509
  const end = Math.min(source.length, offset + 2);
@@ -524,4 +560,4 @@ export {
524
560
  replaceArgument,
525
561
  escapeBytes
526
562
  };
527
- //# sourceMappingURL=chunk-JESM4RK2.js.map
563
+ //# sourceMappingURL=chunk-KLEL3WAN.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,\n unicode?: { utf8: boolean; missingDigit: (escape: string) => void }): { bytes: Uint8Array; stop: boolean } {\n if (unicode && typeof text === \"string\") text = encoder.encode(text);\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 // C-locale fallback normalizes short escapes to four/eight uppercase digits.\n const bytes = new Uint8Array(source.length * (unicode && !unicode.utf8 ? 3 : 1));\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 (unicode && (next === 117 || next === 85)) {\n const digits = next === 117 ? 4 : 8;\n let offset = index + 2;\n const end = Math.min(source.length, offset + digits);\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) unicode.missingDigit(String.fromCharCode(next));\n else {\n // Bash discards values outside its signed 32-bit wide-character range.\n if (value < 0x80000000) {\n if (!unicode.utf8 && value > 127) {\n const literal = encoder.encode(`\\\\${value <= 0xffff ? \"u\" : \"U\"}${value.toString(16).toUpperCase().padStart(value <= 0xffff ? 4 : 8, \"0\")}`);\n bytes.set(literal, size);\n size += literal.length;\n } else if (value < 128) bytes[size++] = value;\n else {\n // Match Bash's byte encoding, including surrogate and extended values.\n const length = value < 0x800 ? 2 : value < 0x10000 ? 3 : value < 0x200000 ? 4 : value < 0x4000000 ? 5 : 6;\n for (let position = length - 1; position > 0; position--) {\n bytes[size + position] = 0x80 | value & 0x3f;\n value = Math.floor(value / 64);\n }\n bytes[size] = (0xff << (8 - length) & 0xff) | value;\n size += length;\n }\n }\n index = offset;\n continue;\n }\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
+ }
@@ -2,7 +2,7 @@ import {
2
2
  UsageError,
3
3
  pathOf,
4
4
  writeDiagnostic
5
- } from "./chunk-JESM4RK2.js";
5
+ } from "./chunk-KLEL3WAN.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-L4HKTYVE.js.map
@@ -2,7 +2,7 @@ import {
2
2
  UsageError,
3
3
  pathOf,
4
4
  writeDiagnostic
5
- } from "./chunk-N4PN6Z63.js";
5
+ } from "./chunk-6G7AGS2B.js";
6
6
  import {
7
7
  PublicDiagnostic,
8
8
  publicDiagnosticMessage
@@ -623,4 +623,4 @@ export {
623
623
  safeJsNodeCommands,
624
624
  createSafeJsNodeCommand
625
625
  };
626
- //# sourceMappingURL=chunk-4C5H4M64.js.map
626
+ //# sourceMappingURL=chunk-M7GLXFPU.js.map
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  pathOf,
9
9
  writeDiagnostic
10
- } from "./chunk-N4PN6Z63.js";
10
+ } from "./chunk-6G7AGS2B.js";
11
11
  import {
12
12
  yieldTurn
13
13
  } from "./chunk-KDK6ZRYP.js";
@@ -1423,4 +1423,4 @@ export {
1423
1423
  createCurlCommands,
1424
1424
  curlCommands
1425
1425
  };
1426
- //# sourceMappingURL=chunk-B5Y7TH7K.js.map
1426
+ //# sourceMappingURL=chunk-NF3OGIG4.js.map
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  pathOf,
9
9
  writeDiagnostic
10
- } from "./chunk-N4PN6Z63.js";
10
+ } from "./chunk-6G7AGS2B.js";
11
11
  import {
12
12
  yieldTurn
13
13
  } from "./chunk-KDK6ZRYP.js";
@@ -523,4 +523,4 @@ export {
523
523
  createXmlCommands,
524
524
  xmlCommands
525
525
  };
526
- //# sourceMappingURL=chunk-G5FT6GOL.js.map
526
+ //# sourceMappingURL=chunk-RNWDFNH4.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  pathOf,
6
6
  writeDiagnostic
7
- } from "./chunk-JESM4RK2.js";
7
+ } from "./chunk-KLEL3WAN.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-RYXT5BJJ.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  pathOf,
3
3
  writeDiagnostic
4
- } from "./chunk-N4PN6Z63.js";
4
+ } from "./chunk-6G7AGS2B.js";
5
5
  import {
6
6
  inheritYieldCheckpoint,
7
7
  yieldTurn
@@ -279,4 +279,4 @@ export {
279
279
  createLlmCommands,
280
280
  llmCommands
281
281
  };
282
- //# sourceMappingURL=chunk-SACGNKFN.js.map
282
+ //# sourceMappingURL=chunk-UZUKVBCC.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  pathOf,
3
3
  writeDiagnostic
4
- } from "./chunk-JESM4RK2.js";
4
+ } from "./chunk-KLEL3WAN.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-WSX5CLK2.js.map
@@ -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