@poe-platform/safe-bash 0.1.480 → 0.1.482
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/safe-bash/browser.js +65 -21893
- package/dist/safe-bash/browser.js.map +4 -4
- package/dist/safe-bash/chunks/chunk-7N5XPEGV.js +22529 -0
- package/dist/safe-bash/chunks/chunk-7N5XPEGV.js.map +7 -0
- package/dist/safe-bash/commands/expr/bre-engine.d.ts +6 -0
- package/dist/safe-bash/commands/expr/bre-engine.d.ts.map +1 -0
- package/dist/safe-bash/commands/expr/bre-engine.js +515 -0
- package/dist/safe-bash/commands/expr/bre-engine.js.map +1 -0
- package/dist/safe-bash/commands/expr/bre-worker.d.ts +1 -1
- package/dist/safe-bash/commands/expr/bre-worker.d.ts.map +1 -1
- package/dist/safe-bash/commands/expr/bre-worker.js +6 -439
- package/dist/safe-bash/commands/expr/bre-worker.js.map +1 -1
- package/dist/safe-bash/commands/expr/command.js +1 -1
- package/dist/safe-bash/commands/expr/command.js.map +1 -1
- package/dist/safe-bash/commands/regex-execution/bounded-provider.d.ts +1 -1
- package/dist/safe-bash/commands/regex-execution/bounded-provider.d.ts.map +1 -1
- package/dist/safe-bash/commands/regex-execution/bounded-provider.js +79 -6
- package/dist/safe-bash/commands/regex-execution/bounded-provider.js.map +1 -1
- package/dist/safe-bash/commands/regex-execution/client.d.ts +2 -0
- package/dist/safe-bash/commands/regex-execution/client.d.ts.map +1 -1
- package/dist/safe-bash/commands/regex-execution/client.js +13 -10
- package/dist/safe-bash/commands/regex-execution/client.js.map +1 -1
- package/dist/safe-bash/node.d.ts +3 -0
- package/dist/safe-bash/node.d.ts.map +1 -0
- package/dist/safe-bash/node.js +3 -0
- package/dist/safe-bash/node.js.map +1 -0
- package/dist/safe-bash/plugins/portable.d.ts +2 -2
- package/dist/safe-bash/plugins/portable.d.ts.map +1 -1
- package/dist/safe-bash/plugins/portable.js +5 -3
- package/dist/safe-bash/plugins/portable.js.map +1 -1
- package/dist/safe-bash/portable.js +2103 -23876
- package/dist/safe-bash/portable.js.map +4 -4
- package/package.json +7 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../node_modules/base64-js/index.js", "../../../../node_modules/ieee754/index.js", "../../../../node_modules/buffer/index.js", "../../browser/platform.mjs", "../../src/browser.ts", "../../src/commands/basic.ts", "../../src/escaping.ts", "../../src/contracts/command.ts", "../../src/contracts/value.ts", "../../src/contracts/command-requirements.ts", "../../src/contracts/errors.ts", "../../src/contracts/filesystem.ts", "../../src/contracts/io.ts", "../../src/contracts/output.ts", "../../src/contracts/path.ts", "../../src/contracts/plugin.ts", "../../src/contracts/yield.ts", "../../src/commands/internal.ts", "../../src/diagnostics.ts", "../../src/commands/portable-requirements.ts", "../../src/commands/record-buffer.ts", "../../src/commands/filesystem.ts", "../../src/commands/copy-identity.ts", "../../src/commands/move.ts", "../../src/commands/filesystem-requirements.ts", "../../src/commands/directory-admission.ts", "../../src/commands/predicates.ts", "../../src/commands/streams.ts", "../../src/contracts/filesystem-output.ts", "../../src/commands/tail-follow.ts", "../../src/commands/text.ts", "../../src/commands/sort-admission.ts", "../../src/commands/execution.ts", "../../src/commands/env-split.ts", "../../src/shell/index.ts", "../../src/shell/shell.ts", "../../src/shell/env-warning.ts", "../../src/shell/parser.ts", "../../src/shell/types.ts", "../../src/shell/parse-budget.ts", "../../src/shell/source-line-index.ts", "../../src/shell/arithmetic.ts", "../../src/shell/arrays/syntax.ts", "../../src/shell/conditional.ts", "../../src/shell/pattern.ts", "../../src/shell/string-operations.ts", "../../src/shell/input.ts", "../../src/shell/runtime.ts", "../../src/shell/value-state.ts", "../../src/shell/brace-expansion.ts", "../../src/shell/arithmetic-parameters.ts", "../../src/shell/locale.ts", "../../src/shell/display.ts", "../../src/shell/cleanup.ts", "../../src/shell/getopts.ts", "../../src/shell/cancellation.ts", "../../src/shell/arrays/ledger.ts", "../../src/shell/arrays/bindings.ts", "../../src/shell/arrays/state.ts", "../../src/shell/pipestatus.ts", "../../src/commands/regex-execution/ere/errors.ts", "../../src/commands/regex-execution/ere/limits.ts", "../../src/commands/regex-execution/ere/syntax.ts", "../../src/commands/regex-execution/ere/matcher.ts", "../../src/shell/path-lookup.ts", "../../src/shell/worker-limits.ts", "../../src/fs/memory/index.ts", "../../src/fs/readonly/index.ts", "../../src/fs/mount/index.ts", "../../src/fs/overlay/index.ts", "../../src/commands/network/fetch-transport.ts", "../../src/commands/network/types.ts", "../../src/commands/network/authorizer.ts", "../../src/commands/network/private-address.ts", "../../src/commands/search/portable.ts", "../../src/commands/regex-execution/portable.ts", "../../src/commands/regex-execution/protocol.ts", "../../src/commands/text-programs/sed.ts", "../../src/commands/text-programs/regex.ts", "../../src/commands/text-programs/shared.ts", "../../src/commands/search/requirements.ts", "../../src/commands/text-programs/replacement-buffer.ts", "../../src/commands/search/grep.ts", "../../src/commands/search/rg-command.ts", "../../src/commands/search/matcher.ts", "../../src/commands/search/options.ts", "../../src/commands/search/file-types.ts", "../../src/commands/search/output.ts", "../../src/commands/search/shared.ts", "../../src/commands/search/walk.ts", "../../src/commands/search/glob.ts", "../../src/commands/regex-execution/public.ts", "../../src/commands/regex-execution/bounded-provider.ts", "../../src/commands/expr/bre-engine.ts"],
|
|
4
|
+
"sourcesContent": ["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n", "/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n", "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n", "export { Buffer } from \"buffer\";\nexport { posixPath as posix } from \"poe-code/safe-fs/core\";\nexport const TransformStream = globalThis.TransformStream;\nexport const setImmediate = (callback, ...args) => setTimeout(callback, 0, ...args);\nexport const clearImmediate = clearTimeout;\n", "import type { CommandDefinition, VirtualShellPlugin } from \"./contracts/index.js\";\nimport { basicCommands } from \"./commands/basic.js\";\nimport { filesystemCommands } from \"./commands/filesystem.js\";\nimport { predicateCommands } from \"./commands/predicates.js\";\nimport { streamCommands } from \"./commands/streams.js\";\nimport { textCommands } from \"./commands/text.js\";\nimport { directExecutor, executionCommands, type ExecutionCommandsOptions } from \"./commands/execution.js\";\nimport { diagnostic } from \"./commands/internal.js\";\n\nexport * from \"./contracts/index.js\";\nexport * from \"./shell/index.js\";\nexport * from \"./fs/memory/index.js\";\nexport * from \"./fs/readonly/index.js\";\nexport * from \"./fs/mount/index.js\";\nexport * from \"./fs/overlay/index.js\";\nexport { createFetchTransport } from \"./commands/network/fetch-transport.js\";\nexport type { FetchTransportOptions } from \"./commands/network/fetch-transport.js\";\nexport { createOriginAuthorizer } from \"./commands/network/authorizer.js\";\nexport type { OriginAllowlist, OriginAuthorizerOptions } from \"./commands/network/authorizer.js\";\nexport { cloudflareWorkerNetworkLimits } from \"./commands/network/types.js\";\nexport { portableSearchCommands, type PortableSearchOptions } from \"./commands/search/portable.js\";\nexport * from \"./commands/regex-execution/public.js\";\nexport type { ExecutionCommandsOptions } from \"./commands/execution.js\";\n\nexport interface BrowserCommandsOptions {\n readonly execution?: ExecutionCommandsOptions;\n readonly replace?: boolean;\n readonly maxDirectoryEntries?: number;\n readonly maxTeeTargets?: number;\n readonly maxTailFollowHandles?: number;\n}\n\nexport function createBrowserCommands(options: BrowserCommandsOptions = {}): readonly CommandDefinition[] {\n const commands = [\n ...basicCommands(), ...filesystemCommands(options.maxDirectoryEntries), ...predicateCommands(),\n ...streamCommands(options.maxTeeTargets, options.maxTailFollowHandles), ...textCommands(),\n ];\n if (options.execution !== undefined) commands.push(...executionCommands(directExecutor(async context => {\n const command = commands.find(definition => definition.name === context.command);\n if (command) return command.execute(context);\n await diagnostic(context, new Error(\"command not found\"));\n return { exitCode: 127 };\n }), options.execution));\n return commands;\n}\n\nexport function browserCommands(options: BrowserCommandsOptions = {}): VirtualShellPlugin {\n return {\n name: \"browser-commands\",\n setup(host) {\n const commands = createBrowserCommands(options);\n if (!options.replace) {\n for (const command of commands) {\n if (host.commands.has(command.name)) throw new Error(`Command already registered: ${command.name}`);\n }\n }\n for (const command of commands) host.commands.register(command, { replace: options.replace ?? false });\n },\n };\n}\n", "import { writeDiagnostic } from \"../escaping.js\";\nimport { basename, dirname, getCommandArguments, type CommandContext, type CommandDefinition, type CommandResult } from \"../contracts/index.js\";\nimport { decoder, define, escapeBytes, options, output, requireOperands, UsageError, value } from \"./internal.js\";\nimport { assertCommandRequirements } from \"../contracts/command-requirements.js\";\nimport { pwdRequirements } from \"./portable-requirements.js\";\n\nexport function basicCommands(): CommandDefinition[] {\n return [\n define(\"true\", () => ({ exitCode: 0 })),\n define(\"false\", () => ({ exitCode: 1 })),\n define(\"echo\", async (context) => {\n const arguments_ = getCommandArguments(context);\n let newline = true;\n let escapes = false;\n let offset = 0;\n while (/^-[neE]+$/u.test(arguments_.args[offset] ?? \"\")) {\n for (const flag of arguments_.args[offset]!.slice(1)) {\n if (flag === \"n\") newline = false;\n else escapes = flag === \"e\";\n }\n offset++;\n }\n const joined = arguments_.slice(offset).join(\" \");\n const text = typeof joined === \"string\" ? joined : arguments_.withValues([joined]).bytes(0)!;\n if (escapes) {\n const escaped = escapeBytes(text, true);\n await output(context, escaped.bytes);\n if (escaped.stop) newline = false;\n } else await output(context, text);\n if (newline) await output(context, \"\\n\");\n return { exitCode: 0 };\n }),\n define(\"pwd\", async (context) => {\n const parsed = options(context.args, \"LP\");\n requireOperands(parsed.operands, 0, 0);\n const mode = parsed.flags.has(\"P\") ? \"physical\" : \"logical\";\n assertCommandRequirements(context, pwdRequirements, [mode]);\n if (mode === \"physical\" && context.fs.capabilitiesFor) assertCommandRequirements(context, pwdRequirements, [mode],\n await context.fs.capabilitiesFor(context.cwd, { signal: context.signal }));\n await output(context, `${parsed.flags.has(\"P\") ? await context.fs.realpath(context.cwd, { signal: context.signal }) : context.cwd}\\n`);\n return { exitCode: 0 };\n }),\n define(\"basename\", async (context) => {\n const parsed = options(context.args, \"as:z\", { multiple: \"a\", suffix: \"s\", zero: \"z\" });\n const multiple = parsed.flags.has(\"a\") || parsed.flags.has(\"s\");\n requireOperands(parsed.operands, 1, multiple ? Infinity : 2);\n const suffix = value(parsed, \"s\") ?? (multiple ? undefined : parsed.operands[1]);\n for (const operand of multiple ? parsed.operands : parsed.operands.slice(0, 1)) {\n let result = /^\\/+$/u.test(operand) ? \"/\" : basename(operand);\n if (suffix && result !== suffix && result.endsWith(suffix)) result = result.slice(0, -suffix.length);\n await output(context, result + (parsed.flags.has(\"z\") ? \"\\0\" : \"\\n\"));\n }\n return { exitCode: 0 };\n }),\n define(\"dirname\", async (context) => {\n const parsed = options(context.args, \"z\", { zero: \"z\" });\n requireOperands(parsed.operands);\n for (const operand of parsed.operands) await output(context, dirname(operand.replace(/\\/+$/u, \"\") || (operand.startsWith(\"/\") ? \"/\" : \".\")) + (parsed.flags.has(\"z\") ? \"\\0\" : \"\\n\"));\n return { exitCode: 0 };\n }),\n printfCommand,\n ].map(command => ({ ...command, filesystemRequirements: command.name === \"pwd\" ? pwdRequirements : [] }));\n}\n\nexport async function formatPrintf(context: CommandContext): Promise<CommandResult> {\n const incoming = getCommandArguments(context);\n const arguments_ = incoming.args[0] === \"--\" ? incoming.slice(1) : incoming;\n const args = arguments_.args;\n requireOperands(args);\n const format = args[0]!;\n if (format.startsWith(\"-\") && incoming.args[0] !== \"--\") throw new UsageError(`invalid option '${format}'`);\n const rawFormat = typeof arguments_.values[0] === \"string\" ? undefined : arguments_.bytes(0)!;\n const formatLength = rawFormat?.length ?? format.length;\n let argument = 1;\n let exitCode = 0;\n let stopped = false;\n do {\n const before = argument;\n for (let offset = 0; offset < formatLength && !stopped;) {\n if (rawFormat ? rawFormat[offset] !== 37 : format[offset] !== \"%\") {\n const end = rawFormat ? rawFormat.indexOf(37, offset) : format.indexOf(\"%\", offset);\n const limit = end < 0 ? formatLength : end;\n const literal = rawFormat ? rawFormat.subarray(offset, limit) : format.slice(offset, limit);\n const escaped = escapeBytes(literal);\n await output(context, escaped.bytes);\n stopped = escaped.stop;\n offset += literal.length;\n continue;\n }\n if (rawFormat ? rawFormat[offset + 1] === 37 : format[offset + 1] === \"%\") { await output(context, \"%\"); offset += 2; continue; }\n let tokenEnd = offset + 1;\n if (rawFormat) while (tokenEnd < rawFormat.length && (rawFormat[tokenEnd]! >= 48 && rawFormat[tokenEnd]! <= 57 || [32, 35, 43, 45, 46].includes(rawFormat[tokenEnd]!))) tokenEnd++;\n const fragment = rawFormat ? decoder.decode(rawFormat.subarray(offset, tokenEnd + 1)) : format.slice(offset);\n const match = /^%([-+ #0]*)(\\d+)?(?:\\.(\\d+))?([sbqcdiouxXfFeEgG])/u.exec(fragment);\n if (!match) throw new UsageError(`invalid format near '${fragment}'`);\n offset += match[0].length;\n const flags = match[1]!;\n const width = Number(match[2] ?? 0);\n const precision = match[3] === undefined ? undefined : Number(match[3]);\n if (width > 1_000_000 || (precision ?? 0) > 1000) throw new UsageError(\"format width or precision is too large\");\n const specifier = match[4]!;\n if (/[fFeEgG]/u.test(specifier) && (precision ?? 0) > 100) throw new UsageError(\"floating-point precision is too large\");\n const suppliedIndex = argument++;\n const supplied = args[suppliedIndex] ?? \"\";\n let text: string;\n if (specifier === \"b\" || specifier === \"s\") {\n const suppliedValue = arguments_.values[suppliedIndex] ?? \"\";\n const raw = specifier === \"b\" && typeof suppliedValue === \"string\" ? suppliedValue : arguments_.bytes(suppliedIndex) ?? new Uint8Array();\n const escaped = specifier === \"b\" ? escapeBytes(raw, true, true) : { bytes: raw as Uint8Array, stop: false };\n const bytes = escaped.bytes.subarray(0, precision);\n const padding = \" \".repeat(Math.max(0, width - bytes.length));\n if (!flags.includes(\"-\")) await output(context, padding);\n await output(context, bytes);\n if (flags.includes(\"-\")) await output(context, padding);\n stopped = escaped.stop;\n continue;\n }\n if (specifier === \"q\") text = supplied === \"\" ? \"''\" : supplied.replace(/[^a-zA-Z0-9_./-]/gu, character => character === \"\\n\" ? \"$'\\\\n'\" : `\\\\${character}`);\n else if (specifier === \"c\") text = supplied ? String.fromCodePoint(supplied.codePointAt(0)!) : \"\\0\";\n else {\n let number = supplied === \"\" ? 0 : /^[\"']/u.test(supplied) ? supplied.codePointAt(1) ?? 0 : Number(supplied);\n if (/^[+-]0[xX][0-9a-fA-F]+$/u.test(supplied.trim())) {\n number = Number(supplied.trim().slice(1)) * (supplied.trim().startsWith(\"-\") ? -1 : 1);\n }\n if (/^[+-]?0[0-9]+$/u.test(supplied) && !/[fFeEgG]/u.test(specifier)) {\n if (/[89]/u.test(supplied)) number = NaN;\n else number = parseInt(supplied.replace(/^[+-]?0/u, \"\"), 8) * (supplied.startsWith(\"-\") ? -1 : 1);\n }\n if (!Number.isFinite(number)) {\n await writeDiagnostic(context.stderr, `printf: '${supplied}': invalid number\\n`, context.signal);\n exitCode = 1; number = 0;\n }\n if (/[fF]/u.test(specifier)) text = number.toFixed(precision ?? 6);\n else if (/[eE]/u.test(specifier)) text = number.toExponential(precision ?? 6).replace(/e([+-])(\\d)$/u, \"e$10$2\");\n else if (/[gG]/u.test(specifier)) text = Number(number.toPrecision(Math.max(1, precision ?? 6))).toString();\n else {\n const radix = /[xX]/u.test(specifier) ? 16 : specifier === \"o\" ? 8 : 10;\n const unsigned = /[uoxX]/u.test(specifier);\n let integral: bigint;\n try {\n const token = supplied.trim();\n if (!token || /^[\"']/u.test(token)) integral = BigInt(Math.trunc(number));\n else {\n const magnitude = token.replace(/^[+-]/u, \"\");\n if (!/^(?:0[xX][0-9a-fA-F]+|0[0-7]*|[1-9][0-9]*)$/u.test(magnitude)) throw new Error(\"invalid integer\");\n integral = BigInt(/^0[0-7]+$/u.test(magnitude) ? `0o${magnitude.slice(1)}` : magnitude) * (token.startsWith(\"-\") ? -1n : 1n);\n }\n } catch {\n integral = 0n;\n if (exitCode === 0) await writeDiagnostic(context.stderr, `printf: '${supplied}': invalid integer\\n`, context.signal);\n exitCode = 1;\n }\n text = (unsigned ? BigInt.asUintN(64, integral) : integral).toString(radix);\n if (precision === 0 && integral === 0n) text = \"\";\n if (precision !== undefined) text = text.startsWith(\"-\") ? `-${text.slice(1).padStart(precision, \"0\")}` : text.padStart(precision, \"0\");\n if (flags.includes(\"#\")) {\n if (radix === 16 && integral !== 0n) text = \"0x\" + text;\n else if (radix === 8 && !text.startsWith(\"0\")) text = \"0\" + text;\n }\n }\n if (/[XFEG]/u.test(specifier)) text = text.toUpperCase();\n if (number >= 0 && /[difFeEgG]/u.test(specifier)) text = (flags.includes(\"+\") ? \"+\" : flags.includes(\" \") ? \" \" : \"\") + text;\n }\n if (flags.includes(\"-\")) text = text.padEnd(width, \" \");\n else if (flags.includes(\"0\") && /[diouxXfFeEgG]/u.test(specifier)\n && (precision === undefined || /[fFeEgG]/u.test(specifier))) {\n const prefix = /^[+ -]|^0[xX]/u.exec(text)?.[0] ?? \"\";\n text = prefix + text.slice(prefix.length).padStart(Math.max(0, width - prefix.length), \"0\");\n } else text = text.padStart(width, \" \");\n await output(context, text);\n }\n if (argument === before) break;\n } while (argument < args.length && !stopped);\n return { exitCode };\n}\n\nexport const printfCommand = define(\"printf\", formatPrintf);\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 type { FileSystem } from \"./filesystem.js\";\nimport type { CommandFileSystemRequirement } from \"./command-requirements.js\";\nimport type { ByteSink, ByteSource } from \"./io.js\";\nimport { concatShellValues, shellValueBytes, shellValueFromBytes, shellValueText, type ShellValue, type ValueAllocation, type ValueReservation } from \"./value.js\";\n\nexport interface CommandArguments {\n readonly args: readonly string[];\n readonly values: readonly ShellValue[];\n bytes(index: number): Uint8Array | undefined;\n slice(start?: number, end?: number): CommandArguments;\n select(indices: readonly number[]): CommandArguments;\n concat(...others: readonly CommandArguments[]): CommandArguments;\n withValues(values: readonly (ShellValue | Uint8Array)[]): CommandArguments;\n join(separator?: ShellValue): ShellValue;\n}\n\nconst argumentCarriers = new WeakSet<CommandArguments>();\n\nexport class CommandArgumentIdentityError extends TypeError {\n constructor() {\n super(\"Command argument identity does not match its carrier\");\n }\n}\n\nfunction argumentAllocation(allocation?: ValueAllocation) {\n const reservations: ValueReservation[] = [];\n const tracked: ValueAllocation | undefined = allocation && {\n assertOpen() { allocation.assertOpen(); },\n reserve(bytes, slots) {\n const reservation = allocation.reserve(bytes, slots);\n let released = false;\n const owned: ValueReservation = {\n commit(value) { reservation.commit(value); },\n release() {\n if (released) return;\n released = true;\n reservation.release();\n },\n };\n reservations.push(owned);\n return owned;\n },\n };\n return {\n allocation: tracked,\n rollback(error: unknown): never {\n const failures: unknown[] = [error];\n for (let index = reservations.length - 1; index >= 0; index--) {\n try { reservations[index]!.release(); }\n catch (cleanup) { failures.push(cleanup); }\n }\n if (failures.length > 1) throw new AggregateError(failures, \"Command argument allocation and release failed\");\n throw error;\n },\n };\n}\n\nfunction ownedCommandArguments(\n size: number | (() => number), valueAt: (index: number) => ShellValue | Uint8Array, allocation?: ValueAllocation,\n extent?: () => number,\n): CommandArguments {\n allocation?.assertOpen();\n const length = typeof size === \"number\" ? size : size();\n const bytes = 128 + length * 40;\n const slots = length * 4 + 1;\n if (!Number.isSafeInteger(length) || length < 0 || !Number.isSafeInteger(bytes) || !Number.isSafeInteger(slots)) {\n throw new RangeError(\"Command argument allocation is too large\");\n }\n const transaction = argumentAllocation(allocation);\n const reservation = transaction.allocation?.reserve(bytes, slots);\n try {\n if (extent && extent() !== length) throw new TypeError(\"Command argument extent changed during admission\");\n const snapshot: (ShellValue | Uint8Array)[] = [];\n for (let index = 0; index < length; index++) snapshot.push(valueAt(index));\n if (extent && extent() !== length) throw new TypeError(\"Command argument extent changed during admission\");\n const values: ShellValue[] = [];\n const args: string[] = [];\n for (const incoming of snapshot) {\n const value = incoming instanceof Uint8Array ? shellValueFromBytes(incoming, transaction.allocation) : incoming;\n args.push(shellValueText(value));\n values.push(value);\n }\n Object.freeze(values);\n Object.freeze(args);\n const carrier: CommandArguments = Object.freeze({\n args, values,\n bytes(index: number) {\n return Number.isInteger(index) && index >= 0 && index < length ? shellValueBytes(values[index]!, allocation) : undefined;\n },\n slice(start = 0, end = length) {\n const offset = (index: number): number => {\n const integral = Math.trunc(index) || 0;\n return integral < 0 ? Math.max(0, length + integral) : Math.min(length, integral);\n };\n const first = offset(start);\n return ownedCommandArguments(Math.max(0, offset(end) - first), index => values[first + index]!, allocation);\n },\n select(indices: readonly number[]) {\n return ownedCommandArguments(() => {\n if (!Array.isArray(indices)) throw new TypeError(\"Command argument selection must be an array\");\n return indices.length;\n }, index => {\n const selected = indices[index]!;\n if (!Number.isInteger(selected) || selected < 0 || selected >= length) throw new RangeError(\"Command argument index is out of range\");\n return values[selected]!;\n }, allocation, () => indices.length);\n },\n concat(...others: readonly CommandArguments[]) {\n let total = length;\n for (const other of others) {\n if (!argumentCarriers.has(other)) throw new TypeError(\"Expected owned command arguments\");\n total += other.values.length;\n }\n return ownedCommandArguments(total, index => {\n if (index < length) return values[index]!;\n let offset = index - length;\n for (const other of others) {\n if (offset < other.values.length) return other.values[offset]!;\n offset -= other.values.length;\n }\n throw new RangeError(\"Command argument index is out of range\");\n }, allocation);\n },\n withValues(incoming: readonly (ShellValue | Uint8Array)[]) {\n return ownedCommandArguments(() => {\n if (!Array.isArray(incoming)) throw new TypeError(\"Command arguments must be an array\");\n return incoming.length;\n }, index => incoming[index]!, allocation, () => incoming.length);\n },\n join(separator: ShellValue = \"\") {\n allocation?.assertOpen();\n const count = Math.max(0, length * 2 - 1);\n const bytes = 128 + count * 16;\n if (!Number.isSafeInteger(bytes) || !Number.isSafeInteger(count + 1)) throw new RangeError(\"Command argument join allocation is too large\");\n const transaction = argumentAllocation(allocation);\n const scratch = transaction.allocation?.reserve(bytes, count + 1);\n try {\n const parts: ShellValue[] = [];\n for (let index = 0; index < length; index++) {\n if (index) parts.push(separator);\n parts.push(values[index]!);\n }\n Object.freeze(parts);\n scratch?.commit(parts);\n const result = concatShellValues(parts, transaction.allocation);\n scratch?.release();\n return result;\n } catch (error) {\n return transaction.rollback(error);\n }\n },\n });\n reservation?.commit(carrier);\n argumentCarriers.add(carrier);\n return carrier;\n } catch (error) {\n return transaction.rollback(error);\n }\n}\n\nexport function createCommandArguments(values: readonly ShellValue[], allocation?: ValueAllocation): CommandArguments {\n return ownedCommandArguments(() => {\n if (!Array.isArray(values)) throw new TypeError(\"Command arguments must be an array\");\n return values.length;\n }, index => values[index]!, allocation, () => values.length);\n}\n\nexport function getCommandArguments(context: Pick<CommandContext, \"args\" | \"argumentValues\">): CommandArguments {\n const carrier = context.argumentValues;\n if (carrier === undefined) return createCommandArguments(context.args);\n if (!argumentCarriers.has(carrier)) throw new TypeError(\"Expected owned command arguments\");\n if (carrier.args !== context.args) throw new CommandArgumentIdentityError();\n return carrier;\n}\n\nexport interface CommandInvokeOptions {\n readonly argumentValues?: CommandArguments;\n readonly signal?: AbortSignal | undefined;\n readonly stdin?: ByteSource;\n readonly stdinIsDefault?: boolean;\n readonly stdout?: ByteSink;\n readonly stderr?: ByteSink;\n readonly cwd?: string;\n readonly env?: Readonly<Record<string, string>>;\n readonly replaceEnv?: boolean;\n}\n\nexport type CommandInvoker = (\n command: string,\n args: readonly string[],\n options?: CommandInvokeOptions,\n) => Promise<CommandResult>;\n\nexport type InvocationCleanup = () => void | Promise<void>;\n\nexport type InternalErrorHandler = (error: unknown) => void | Promise<void>;\n\nexport interface CommandContext {\n readonly onInternalError?: InternalErrorHandler | undefined;\n readonly executionScope?: object;\n readonly command: string;\n readonly args: readonly string[];\n readonly argumentValues?: CommandArguments;\n readonly stdin: ByteSource;\n readonly stdinIsDefault?: boolean;\n readonly stdout: ByteSink;\n readonly stderr: ByteSink;\n cwd: string;\n env: Record<string, string>;\n readonly fs: FileSystem;\n readonly signal: AbortSignal;\n readonly invoke?: CommandInvoker;\n readonly registerCleanup?: (cleanup: InvocationCleanup) => void;\n}\n\nexport interface CommandResult {\n readonly exitCode: number;\n}\n\nexport type CommandHandler = (\n context: CommandContext,\n) => CommandResult | Promise<CommandResult>;\n\nexport type AsyncCommandHandler = (context: CommandContext) => Promise<CommandResult>;\n\nexport interface CommandDefinition {\n readonly name: string;\n readonly description?: string;\n readonly filesystemRequirements?: readonly CommandFileSystemRequirement[];\n readonly execute: CommandHandler;\n}\n\nexport interface RegisterCommandOptions {\n readonly replace?: boolean;\n}\n\nexport class CommandRegistry {\n readonly #commands = new Map<string, CommandDefinition>();\n\n constructor(commands: Iterable<CommandDefinition> = []) {\n for (const command of commands) this.register(command);\n }\n\n register(command: CommandDefinition, options: RegisterCommandOptions = {}): this {\n const { name, execute } = command;\n if (typeof name !== \"string\" || !name || /[\\s/\\0]/u.test(name)) {\n throw new TypeError(\"Command names must be nonempty and contain no whitespace, slash, or NUL\");\n }\n if (typeof execute !== \"function\") {\n throw new TypeError(\"Command execute must be a function\");\n }\n if (this.#commands.has(name) && !options.replace) {\n throw new Error(`Command already registered: ${name}`);\n }\n this.#commands.set(name, Object.freeze({ ...command, name, execute }));\n return this;\n }\n\n get(name: string): CommandDefinition | undefined {\n return this.#commands.get(name);\n }\n\n has(name: string): boolean {\n return this.#commands.has(name);\n }\n\n unregister(name: string): boolean {\n return this.#commands.delete(name);\n }\n\n list(): readonly CommandDefinition[] {\n return Array.from(this.#commands.values());\n }\n}\n\nexport function validateExitCode(exitCode: number): number {\n if (!Number.isInteger(exitCode) || exitCode < 0 || exitCode > 255) {\n throw new RangeError(\"Exit status must be an integer between 0 and 255\");\n }\n return exitCode;\n}\n", "declare const byteValueBrand: unique symbol;\n\nexport interface ByteShellValue {\n readonly [byteValueBrand]: true;\n}\n\nexport type ShellValue = string | ByteShellValue;\n\nexport interface ValueReservation {\n commit(value: object): void;\n release(): void;\n}\n\nexport interface ValueAllocation {\n assertOpen(): void;\n reserve(bytes: number, slots: number): ValueReservation;\n}\n\nconst byteValues = new WeakMap<ByteShellValue, { bytes: Uint8Array; text: string }>();\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder(\"utf-8\", { ignoreBOM: true });\nconst typedArrayPrototype = Object.getPrototypeOf(Uint8Array.prototype) as object;\nconst viewBuffer = Object.getOwnPropertyDescriptor(typedArrayPrototype, \"buffer\")!.get!;\nconst viewOffset = Object.getOwnPropertyDescriptor(typedArrayPrototype, \"byteOffset\")!.get!;\nconst viewLength = Object.getOwnPropertyDescriptor(typedArrayPrototype, \"byteLength\")!.get!;\n\nfunction record(value: ByteShellValue): { bytes: Uint8Array; text: string } {\n const result = byteValues.get(value);\n if (!result) throw new TypeError(\"Expected an owned shell byte value\");\n return result;\n}\n\nfunction allocationSize(length: number, multiplier: number): number {\n const result = length * multiplier + 64;\n if (!Number.isSafeInteger(result)) throw new RangeError(\"Shell value allocation is too large\");\n return result;\n}\n\nfunction allocate<Result extends object>(bytes: number, allocation: ValueAllocation | undefined, create: () => Result, slots = 1): Result {\n allocation?.assertOpen();\n const reservation = allocation?.reserve(bytes, slots);\n try {\n const result = create();\n reservation?.commit(result);\n return result;\n } catch (error) {\n try { reservation?.release(); }\n catch (cleanup) { throw new AggregateError([error, cleanup], \"Shell value allocation and release failed\"); }\n throw error;\n }\n}\n\nfunction ownedBytes(bytes: Uint8Array): ByteShellValue {\n const value = Object.freeze({}) as ByteShellValue;\n byteValues.set(value, { bytes, text: decoder.decode(bytes) });\n return value;\n}\n\nexport function shellValueFromBytes(bytes: Uint8Array, allocation?: ValueAllocation): ByteShellValue {\n if (!(bytes instanceof Uint8Array)) throw new TypeError(\"Shell bytes must be Uint8Array\");\n const buffer = viewBuffer.call(bytes) as ArrayBuffer;\n const offset = viewOffset.call(bytes) as number;\n const length = viewLength.call(bytes) as number;\n return allocate(allocationSize(length, 3), allocation, () => {\n if (viewOffset.call(bytes) !== offset || viewLength.call(bytes) < length) throw new TypeError(\"Shell byte input extent changed during admission\");\n return ownedBytes(new Uint8Array(new Uint8Array(buffer, offset, length)));\n });\n}\n\nexport function shellValueText(value: ShellValue): string {\n return typeof value === \"string\" ? value : record(value).text;\n}\n\nexport function shellValueByteLength(value: ShellValue): number {\n return typeof value === \"string\" ? Buffer.byteLength(value) : record(value).bytes.byteLength;\n}\n\nexport function shellValueRetainedBytes(value: ByteShellValue): number {\n const stored = record(value);\n return stored.bytes.byteLength + stored.text.length * 2 + 64;\n}\n\nexport function shellValueBytes(value: ShellValue, allocation?: ValueAllocation): Uint8Array {\n const length = shellValueByteLength(value);\n return allocate(allocationSize(length, 1), allocation, () => typeof value === \"string\" ? encoder.encode(value) : new Uint8Array(record(value).bytes));\n}\n\nexport function concatShellValues(values: readonly ShellValue[], allocation?: ValueAllocation): ShellValue {\n allocation?.assertOpen();\n if (!Array.isArray(values)) throw new TypeError(\"Shell value concatenation requires an array\");\n const count = values.length;\n if (!Number.isSafeInteger(count) || count < 0 || count > 0xffffffff) throw new RangeError(\"Invalid shell value input extent\");\n if (!count) return \"\";\n if (count === 1) {\n const value = values[0]!;\n if (typeof value !== \"string\") record(value);\n if (values.length !== count) throw new TypeError(\"Shell value input extent changed\");\n return value;\n }\n let textOnly = true;\n for (let index = 0; index < count; index++) {\n if (typeof values[index] !== \"string\") { textOnly = false; break; }\n }\n if (textOnly) {\n let text = \"\";\n for (let index = 0; index < count; index++) {\n const value = values[index];\n if (typeof value !== \"string\") throw new TypeError(\"Shell value input type changed during text concatenation\");\n text += value;\n }\n if (values.length !== count) throw new TypeError(\"Shell value input extent changed\");\n return text;\n }\n let reservation = allocation?.reserve(allocationSize(count, 16), count + 1);\n const release = (): void => { const pending = reservation; reservation = undefined; pending?.release(); };\n try {\n if (values.length !== count) throw new TypeError(\"Shell value input extent changed during metadata admission\");\n const snapshot: ShellValue[] = new Array(count);\n for (let index = 0; index < count; index++) {\n const value = values[index]!;\n if (typeof value !== \"string\") record(value);\n snapshot[index] = value;\n }\n if (values.length !== count) throw new TypeError(\"Shell value input extent changed during snapshot capture\");\n Object.freeze(snapshot);\n reservation?.commit(snapshot);\n if (snapshot.every(value => typeof value === \"string\")) {\n const result = snapshot.join(\"\");\n release();\n return result;\n }\n const length = encodeValues(snapshot);\n return allocate(allocationSize(length, 3), allocation, () => {\n const bytes = new Uint8Array(length);\n encodeValues(snapshot, bytes);\n const result = ownedBytes(bytes);\n release();\n return result;\n });\n } catch (error) {\n try { release(); }\n catch (cleanup) { throw new AggregateError([error, cleanup], \"Shell value snapshot and release failed\"); }\n throw error;\n }\n}\n\nfunction encodeValues(values: readonly ShellValue[], output?: Uint8Array): number {\n let offset = 0;\n let high = 0;\n const write = (byte: number): void => { if (output) output[offset] = byte; offset++; };\n const point = (code: number): void => {\n if (code < 0x80) write(code);\n else if (code < 0x800) { write(0xc0 | code >> 6); write(0x80 | code & 0x3f); }\n else if (code < 0x10000) { write(0xe0 | code >> 12); write(0x80 | code >> 6 & 0x3f); write(0x80 | code & 0x3f); }\n else { write(0xf0 | code >> 18); write(0x80 | code >> 12 & 0x3f); write(0x80 | code >> 6 & 0x3f); write(0x80 | code & 0x3f); }\n };\n for (const value of values) {\n if (typeof value !== \"string\") {\n if (high) { point(0xfffd); high = 0; }\n const bytes = record(value).bytes;\n output?.set(bytes, offset);\n offset += bytes.byteLength;\n continue;\n }\n for (let index = 0; index < value.length; index++) {\n const code = value.charCodeAt(index);\n if (high) {\n const previous = high;\n high = 0;\n if (code >= 0xdc00 && code <= 0xdfff) { point(0x10000 + ((previous - 0xd800) << 10) + code - 0xdc00); continue; }\n point(0xfffd);\n }\n if (code >= 0xd800 && code <= 0xdbff) high = code;\n else point(code >= 0xdc00 && code <= 0xdfff ? 0xfffd : code);\n }\n }\n if (high) point(0xfffd);\n if (!Number.isSafeInteger(offset)) throw new RangeError(\"Shell value allocation is too large\");\n return offset;\n}\n", "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", "export { isErrnoCode, isFsError, toFsError, FsError } from \"poe-code/safe-fs/core\";\nexport type { ErrnoCode, FsErrorOptions } from \"poe-code/safe-fs/core\";\n", "export { ACCESS_MODES } from \"poe-code/safe-fs/core\";\nexport type { FileType, EntryComparison, FileStat, DirectoryEntry, FileSystemCapabilities, FsOptions, FileReadHandle, ReadFileOptions, ReadDirectoryOptions, WriteFileOptions, AppendFileOptions, MkdirOptions, RemoveOptions, CopyFileOptions, ReadStreamOptions, FileSystem, FileSystemFactory } from \"poe-code/safe-fs/core\";\n", "import { collectBytes, readBytes } from \"poe-code/safe-fs/core\";\nimport type { ByteSource, CollectOptions } from \"poe-code/safe-fs/core\";\nexport { collectBytes, readBytes, toByteSource } from \"poe-code/safe-fs/core\";\nexport type { ByteSource, CollectOptions } from \"poe-code/safe-fs/core\";\nimport { TransformStream } from \"node:stream/web\";\nimport { FsError } from \"./errors.js\";\n\nexport const outputFailure = Symbol(\"output failure\");\n\nexport interface ByteSink {\n write(chunk: Uint8Array): Promise<void>;\n readonly [outputFailure]?: (reason: unknown) => Promise<void>;\n readonly ownedOutput?: {\n readonly consumerClosed: AbortSignal;\n write(chunk: Uint8Array): Promise<void>;\n };\n}\n\nexport interface BytePipe {\n readonly readable: ByteSource;\n readonly writable: ByteSink;\n close(): Promise<void>;\n abort(reason?: unknown): Promise<void>;\n}\n\nexport interface BytePipeOptions {\n readonly highWaterMark?: number;\n readonly signal?: AbortSignal;\n}\n\nexport function createBytePipe(options: BytePipeOptions = {}): BytePipe {\n const highWaterMark = options.highWaterMark ?? 64 * 1024;\n const signal = options.signal;\n if (!Number.isSafeInteger(highWaterMark) || highWaterMark < 1) {\n throw new RangeError(\"highWaterMark must be a positive safe integer\");\n }\n const stream = new TransformStream<Uint8Array, Uint8Array>(\n undefined,\n { highWaterMark: 1 },\n { highWaterMark, size: (chunk) => chunk.byteLength },\n );\n const reader = stream.readable.getReader();\n const writer = stream.writable.getWriter();\n let ended = false;\n let failed = false;\n let failure: unknown;\n let closePromise: Promise<void> | undefined;\n let abortPromise: Promise<void> | undefined;\n let finished = false;\n const consumer = new AbortController();\n const abort = (reason: unknown = new FsError(\"EPIPE\", { syscall: \"pipe\" })): Promise<void> => {\n if (abortPromise) return abortPromise;\n if (finished) return Promise.resolve();\n failed = true;\n failure = reason;\n ended = true;\n consumer.abort(reason);\n abortPromise = Promise.allSettled([reader.cancel(reason), writer.abort(reason)]).then(() => {});\n return abortPromise;\n };\n const onAbort = (): void => { void abort(signal?.reason); };\n const cleanup = (): void => signal?.removeEventListener(\"abort\", onAbort);\n void writer.closed.catch(() => {});\n void reader.closed.then(cleanup, cleanup);\n if (signal?.aborted) onAbort();\n else signal?.addEventListener(\"abort\", onAbort, { once: true });\n const iterator = (async function* (): AsyncGenerator<Uint8Array> {\n try {\n while (true) {\n if (failed) throw failure;\n const result = await reader.read();\n if (failed) throw failure;\n if (result.done) {\n finished = true;\n return;\n }\n yield result.value;\n }\n } finally {\n if (!finished) await abort();\n reader.releaseLock();\n }\n })();\n const readable: AsyncIterableIterator<Uint8Array> = {\n [Symbol.asyncIterator]() { return this; },\n next() { return iterator.next(); },\n async return() {\n if (!finished) await abort();\n try {\n return await iterator.return(undefined);\n } finally {\n reader.releaseLock();\n }\n },\n async throw(reason) {\n await abort(reason);\n try {\n return await iterator.throw(reason);\n } finally {\n reader.releaseLock();\n }\n },\n };\n const write = async (chunk: Uint8Array): Promise<void> => {\n if (failed) throw failure;\n if (ended) throw new FsError(\"EPIPE\", { syscall: \"write\" });\n if (!(chunk instanceof Uint8Array)) throw new TypeError(\"Byte sinks require Uint8Array chunks\");\n if (chunk.byteLength > 0) await writer.write(new Uint8Array(chunk));\n };\n return {\n readable,\n writable: {\n write,\n [outputFailure]: abort,\n ownedOutput: { consumerClosed: consumer.signal, write },\n },\n close() {\n if (failed) return Promise.reject(failure);\n ended = true;\n closePromise ??= writer.close();\n return closePromise;\n },\n abort,\n };\n}\n\nexport async function writeText(sink: ByteSink, text: string): Promise<void> {\n await sink.write(new TextEncoder().encode(text));\n}\n\nexport async function writeBytes(sink: ByteSink, chunk: Uint8Array, signal?: AbortSignal): Promise<void> {\n if (!(chunk instanceof Uint8Array)) throw new TypeError(\"Byte sinks require Uint8Array chunks\");\n await abortable(() => sink.write(chunk), signal);\n}\n\nexport async function pipeBytes(source: ByteSource, sink: ByteSink, signal?: AbortSignal): Promise<void> {\n signal?.throwIfAborted();\n for await (const chunk of readBytes(source, signal)) {\n await writeBytes(sink, chunk, signal);\n }\n signal?.throwIfAborted();\n}\n\nexport async function collectText(source: ByteSource, options: CollectOptions): Promise<string> {\n return new TextDecoder().decode(await collectBytes(source, options));\n}\n\nasync function abortable<Result>(operation: () => PromiseLike<Result>, signal?: AbortSignal): Promise<Result> {\n signal?.throwIfAborted();\n if (!signal) return operation();\n return new Promise<Result>((resolve, reject) => {\n const onAbort = (): void => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(signal.reason);\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n Promise.resolve(operation()).then(\n (result) => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve(result);\n },\n (error: unknown) => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(error);\n },\n );\n } catch (error) {\n signal.removeEventListener(\"abort\", onAbort);\n reject(error);\n }\n });\n}\n", "import type { CommandContext, InvocationCleanup } from \"./command.js\";\nimport { outputFailure, writeBytes, type ByteSink } from \"./io.js\";\n\nexport interface OutputOperation {\n readonly signal: AbortSignal;\n readonly output: ByteSink;\n child(destination: ByteSink): OutputOperation;\n registerCleanup(cleanup: InvocationCleanup): void;\n acquire<Value>(start: (signal: AbortSignal) => Value | Promise<Value>, release: (resource: Value) => void | Promise<void>): Promise<Value>;\n close(): Promise<void>;\n abort(reason: unknown): Promise<void>;\n}\n\nexport function createOutputOperation(context: Pick<CommandContext, \"signal\" | \"registerCleanup\">, destination: ByteSink): OutputOperation {\n const controller = new AbortController();\n const signal = controller.signal;\n const capability = destination.ownedOutput;\n const callbacks: InvocationCleanup[] = [];\n const children: OutputOperation[] = [];\n const closedReason = new Error(\"Output operation is closed\");\n let accepting = true;\n let drain: Promise<void> | undefined;\n const assertOpen = (): void => {\n context.signal.throwIfAborted();\n signal.throwIfAborted();\n if (!accepting) throw closedReason;\n };\n const close = (): Promise<void> => {\n if (drain) return drain;\n accepting = false;\n drain = Promise.resolve().then(async () => {\n try {\n const results = await Promise.allSettled(callbacks.map(async cleanup => cleanup()));\n const failures = results.filter(result => result.status === \"rejected\").map(result => result.reason);\n if (failures.length === 1) throw failures[0];\n if (failures.length) throw new AggregateError(failures, \"Output operation cleanup failed\");\n } finally {\n context.signal.removeEventListener(\"abort\", callerAbort);\n capability?.consumerClosed.removeEventListener(\"abort\", outputAbort);\n }\n });\n void drain.catch(() => {});\n for (const child of children) void child.close().catch(() => {});\n return drain;\n };\n const abort = (reason: unknown): void => {\n controller.abort(reason);\n void close().catch(() => {});\n };\n const callerAbort = (): void => abort(context.signal.reason);\n const outputAbort = (): void => abort(capability?.consumerClosed.reason);\n const registerCleanup = (cleanup: InvocationCleanup): void => {\n assertOpen();\n if (typeof cleanup !== \"function\") throw new TypeError(\"Cleanup must be callable\");\n callbacks.push(cleanup);\n };\n const wait = <Value>(pending: Promise<Value>): Promise<Value> => new Promise((resolve, reject) => {\n const aborted = (): void => reject(signal.reason);\n if (signal.aborted) aborted();\n else signal.addEventListener(\"abort\", aborted, { once: true });\n pending.then(value => {\n signal.removeEventListener(\"abort\", aborted);\n resolve(value);\n }, error => {\n signal.removeEventListener(\"abort\", aborted);\n reject(error);\n });\n });\n context.registerCleanup?.(close);\n if (context.signal.aborted) callerAbort();\n else if (capability?.consumerClosed.aborted) outputAbort();\n else {\n context.signal.addEventListener(\"abort\", callerAbort, { once: true });\n capability?.consumerClosed.addEventListener(\"abort\", outputAbort, { once: true });\n }\n return {\n signal,\n output: {\n ...(destination[outputFailure] ? { [outputFailure]: destination[outputFailure] } : {}),\n async write(chunk) {\n assertOpen();\n await writeBytes(capability ?? destination, chunk, signal);\n },\n },\n registerCleanup,\n child(destination) {\n assertOpen();\n const child = createOutputOperation({ signal, registerCleanup }, destination);\n children.push(child);\n return child;\n },\n async acquire<Value>(start: (signal: AbortSignal) => Value | Promise<Value>, release: (resource: Value) => void | Promise<void>) {\n assertOpen();\n let resource: { value: Value } | undefined;\n let settled!: () => void;\n const admitted = new Promise<void>(resolve => { settled = resolve; });\n let released: Promise<void> | undefined;\n const dispose = (): Promise<void> => {\n released ??= admitted.then(async () => { if (resource) await release(resource.value); });\n return released;\n };\n registerCleanup(dispose);\n let acquisition: Promise<Value>;\n try { acquisition = Promise.resolve(start(signal)); }\n catch (error) { acquisition = Promise.reject(error); }\n const pending = acquisition.then(async value => {\n resource = { value };\n settled();\n if (!accepting) {\n await dispose();\n throw signal.aborted ? signal.reason : closedReason;\n }\n return value;\n }, error => {\n settled();\n throw error;\n });\n return wait(pending);\n },\n close,\n abort(reason) {\n abort(reason);\n return close();\n },\n };\n}\n", "export { validatePath, resolvePath, normalizePath, relativePath, isPathWithin, assertPathWithin, basename, dirname, extname, joinPath, isAbsolutePath } from \"poe-code/safe-fs/core\";\nexport { posix as posixPath } from \"node:path\";\n", "import type { AsyncCommandHandler, CommandContext, CommandHandler, CommandRegistry, CommandResult } from \"./command.js\";\nimport type { FileSystemFactory } from \"./filesystem.js\";\n\nexport type Next = () => Promise<CommandResult>;\n\nexport type Middleware = (\n context: CommandContext,\n next: Next,\n) => CommandResult | Promise<CommandResult>;\n\nexport interface PluginHost {\n readonly commands: CommandRegistry;\n use(middleware: Middleware): void;\n registerFileSystem(scheme: string, factory: FileSystemFactory): void;\n}\n\nexport interface VirtualShellPlugin {\n readonly name: string;\n setup(host: PluginHost): void | Promise<void>;\n dispose?(): void | Promise<void>;\n}\n\nexport function composeMiddleware(\n middleware: readonly Middleware[],\n terminal: CommandHandler,\n): AsyncCommandHandler {\n const stack = [...middleware];\n if (typeof terminal !== \"function\" || stack.some((handler) => typeof handler !== \"function\")) {\n throw new TypeError(\"Middleware and terminal handlers must be functions\");\n }\n return async (context) => {\n let lastIndex = -1;\n const dispatch = async (index: number): Promise<CommandResult> => {\n if (index <= lastIndex) throw new Error(\"next() may only be called once per middleware\");\n lastIndex = index;\n context.signal.throwIfAborted();\n const handler = stack[index];\n if (!handler) return terminal(context);\n let active = true;\n let downstream: Promise<CommandResult> | undefined;\n let downstreamPending = false;\n const next: Next = () => {\n const result = active\n ? dispatch(index + 1)\n : Promise.reject<CommandResult>(new Error(\"next() cannot be called after middleware completed\"));\n if (active && !downstream) {\n downstream = result;\n downstreamPending = true;\n void result.then(\n () => { downstreamPending = false; },\n () => { downstreamPending = false; },\n );\n } else void result.catch(() => {});\n return result;\n };\n try {\n const result = await handler(context, next);\n if (downstreamPending) throw new Error(\"Middleware must await or return next()\");\n return result;\n } finally {\n active = false;\n if (downstream) await downstream.then(() => {}, () => {});\n }\n };\n return dispatch(0);\n };\n}\n", "type ImmediateHost = typeof globalThis & {\n setImmediate?: (callback: () => void) => unknown;\n clearImmediate?: (handle: unknown) => void;\n};\n\nexport type TurnHandle =\n | { kind: \"immediate\"; value: unknown }\n | { kind: \"timeout\"; value: ReturnType<typeof setTimeout> };\nconst checkpoints = new WeakMap<AbortSignal, () => void>();\n\nexport function monotonicNow(): number {\n return globalThis.performance?.now() ?? Date.now();\n}\n\nexport function registerYieldCheckpoint(signal: AbortSignal, checkpoint: () => void): void {\n checkpoints.set(signal, checkpoint);\n}\n\nexport function scheduleTurn(callback: () => void): TurnHandle {\n const host = globalThis as ImmediateHost;\n return host.setImmediate\n ? { kind: \"immediate\", value: host.setImmediate(callback) }\n : { kind: \"timeout\", value: setTimeout(callback, 0) };\n}\n\nexport function cancelTurn(handle: TurnHandle | undefined): void {\n if (handle?.kind === \"immediate\") (globalThis as ImmediateHost).clearImmediate?.(handle.value);\n else if (handle) clearTimeout(handle.value);\n}\n\nexport function yieldTurn(signal?: AbortSignal): Promise<void> {\n signal?.throwIfAborted();\n if (signal) checkpoints.get(signal)?.();\n return new Promise<void>((resolve, reject) => {\n let handle: TurnHandle | undefined;\n const finish = (): void => {\n signal?.removeEventListener(\"abort\", abort);\n resolve();\n };\n const abort = (): void => {\n cancelTurn(handle);\n reject(signal!.reason);\n };\n signal?.addEventListener(\"abort\", abort, { once: true });\n if (signal?.aborted) abort();\n else handle = scheduleTurn(finish);\n });\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>> = {},\n stopAtOperand = false, onOperand?: (index: 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 key = long[name];\n if (!key || !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 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 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: CommandContext, 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 if (context.fs.readStream && context.fs.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 (context.fs.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 { FsError } from \"./contracts/errors.js\";\nimport { CommandArgumentIdentityError, type InternalErrorHandler } from \"./contracts/command.js\";\n\nexport class PublicDiagnostic extends Error {}\n\nexport function publicDiagnosticMessage(error: unknown, onInternalError?: InternalErrorHandler): string {\n if (error instanceof FsError || error instanceof CommandArgumentIdentityError) return error.message;\n if (error instanceof PublicDiagnostic && !Object.hasOwn(error, \"cause\")) return error.message;\n const original: unknown = error instanceof PublicDiagnostic ? error.cause : error;\n const detail = error instanceof PublicDiagnostic ? error.message : \"internal error\";\n try {\n const pending = onInternalError?.(original);\n if (pending !== undefined) void Promise.resolve(pending).catch(() => undefined);\n } catch { return detail; }\n return detail;\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", "import {\n basename, dirname, FsError, isPathWithin, joinPath, relativePath,\n type CommandContext, type CommandDefinition, type FileStat,\n} from \"../contracts/index.js\";\nimport { codeOf, define, eachOperand, options, output, pathOf, requireOperands, UsageError, value } from \"./internal.js\";\nimport { escapeText } from \"../escaping.js\";\nimport { compareCopyIdentity, compareObservedEntries } from \"./copy-identity.js\";\nimport { MoveBudget, moveAcrossDevices } from \"./move.js\";\nimport { admitFilesystemModes, filesystemCommandRequirements } from \"./filesystem-requirements.js\";\nimport { createDirectoryReader, type DirectoryReader } from \"./directory-admission.js\";\nimport { yieldTurn } from \"../contracts/yield.js\";\n\n// Operand directories start at depth zero; files inside the last admitted\n// directory do not consume another directory-recursion level.\nconst MAX_RECURSIVE_DIRECTORY_DEPTH = 1024;\n\nasync function preflightOperands(\n context: CommandContext, operands: readonly string[], check: (operand: string) => Promise<void>,\n): Promise<void> {\n for (const operand of operands) {\n try { await check(operand); }\n catch (error) {\n context.signal.throwIfAborted();\n if (codeOf(error) === \"ENOTSUP\" || codeOf(error) === \"EROFS\"\n || codeOf(error) === \"ENOTEMPTY\" && error instanceof FsError && codeOf(error.cause) === \"ENOTSUP\") throw error;\n }\n }\n}\n\nasync function maybeStat(context: CommandContext, path: string, follow = true): Promise<FileStat | undefined> {\n try { return await context.fs[follow ? \"stat\" : \"lstat\"](path, { signal: context.signal }); }\n catch (error) { context.signal.throwIfAborted(); if (codeOf(error) === \"ENOENT\") return undefined; throw error; }\n}\n\nasync function canonicalMissing(\n context: CommandContext, path: string, mode: \"copy\" | \"preflight\" | \"realpath\" = \"copy\",\n): Promise<string> {\n if (mode !== \"copy\") {\n context.signal.throwIfAborted();\n const canonical = context.fs.canonicalizeMissingTarget?.(path, { signal: context.signal });\n context.signal.throwIfAborted();\n if (canonical !== undefined) return canonical;\n }\n const suffix: string[] = [];\n let canonical: string;\n while (true) {\n if (mode === \"realpath\") {\n context.signal.throwIfAborted();\n if (suffix.length > 0 && suffix.length % 32 === 0) await yieldTurn(context.signal);\n }\n try { canonical = await context.fs.realpath(path, { signal: context.signal }); break; }\n catch (error) {\n context.signal.throwIfAborted();\n if (codeOf(error) !== \"ENOENT\" || path === \"/\") throw error;\n const link = await maybeStat(context, path, false);\n if (link?.type === \"symlink\") throw error;\n suffix.push(basename(path));\n path = dirname(path);\n }\n }\n for (let index = suffix.length - 1; index >= 0; index--) {\n if (mode === \"realpath\") {\n context.signal.throwIfAborted();\n if ((suffix.length - index) % 32 === 0) await yieldTurn(context.signal);\n }\n canonical = joinPath(canonical, suffix[index]!);\n }\n return canonical;\n}\n\nfunction needCapability(context: CommandContext, capability: \"symlink\" | \"link\" | \"readlink\" | \"utimes\"): void {\n const declaration = { symlink: \"symlinks\", link: \"hardlinks\", readlink: \"readlink\", utimes: \"timestamps\" }[capability];\n if (!context.fs.capabilitiesFor && context.fs.capabilities[declaration] === false) throw new FsError(\"ENOTSUP\", { syscall: capability });\n if (!context.fs[capability]) throw new FsError(\"ENOTSUP\", { syscall: capability });\n}\n\nasync function admitEmptyDirectory(context: CommandContext, path: string, readDirectory: DirectoryReader): Promise<void> {\n try { await admitFilesystemModes(context, \"rmdir\", [\"directory\"], [path]); }\n catch (error) {\n context.signal.throwIfAborted();\n if (codeOf(error) === \"ENOTSUP\") {\n const capabilities = await context.fs.capabilitiesFor?.(path, { signal: context.signal }) ?? context.fs.capabilities;\n if (capabilities.write !== false && capabilities.readdir !== false\n && (await readDirectory(context, path)).length) {\n throw new FsError(\"ENOTEMPTY\", { syscall: \"rmdir\", path, cause: error });\n }\n }\n throw error;\n }\n}\n\nasync function removeEmptyDirectory(context: CommandContext, path: string, readDirectory: DirectoryReader): Promise<void> {\n await admitEmptyDirectory(context, path, readDirectory);\n context.signal.throwIfAborted();\n if (!context.fs.rmdir) throw new FsError(\"ENOTSUP\", { syscall: \"rmdir\", path });\n await context.fs.rmdir(path, { signal: context.signal });\n}\n\nasync function destinations(context: CommandContext, operands: readonly string[]) {\n requireOperands(operands, 2);\n const target = pathOf(context, operands.at(-1)!);\n const directory = (await maybeStat(context, target))?.type === \"directory\";\n if (operands.length > 2 && !directory) throw new FsError(\"ENOTDIR\", { path: target });\n return { target, directory, sources: operands.slice(0, -1) };\n}\n\nasync function copy(\n context: CommandContext, source: string, target: string,\n flags: ReadonlySet<string>, readDirectory: DirectoryReader, top = true, ancestors = new Set<string>(),\n preflight = false,\n): Promise<void> {\n context.signal.throwIfAborted();\n const link = await context.fs.lstat(source, { signal: context.signal });\n const preserveLink = link.type === \"symlink\" && !flags.has(\"L\") && (flags.has(\"P\") || !top);\n const sourceStat = preserveLink ? link : await context.fs.stat(source, { signal: context.signal });\n const targetStat = await maybeStat(context, target, !preserveLink);\n const physicalSource = preserveLink\n ? joinPath(await context.fs.realpath(dirname(source), { signal: context.signal }), basename(source))\n : await context.fs.realpath(source, { signal: context.signal });\n const physicalTarget = preserveLink\n ? joinPath(preflight ? await canonicalMissing(context, dirname(target), \"preflight\")\n : await context.fs.realpath(dirname(target), { signal: context.signal }), basename(target))\n : await canonicalMissing(context, target, preflight ? \"preflight\" : \"copy\");\n if (physicalSource === physicalTarget || compareCopyIdentity(sourceStat, targetStat) === \"same\") {\n throw new FsError(\"EINVAL\", { path: source, dest: target, message: \"source and destination are the same file\" });\n }\n if (flags.has(\"n\") && await maybeStat(context, target, false)) return;\n if (!preflight && !preserveLink && targetStat && await compareObservedEntries(context.fs, source, sourceStat, context.fs, target, targetStat, { signal: context.signal }) === \"same\") {\n throw new FsError(\"EINVAL\", { path: source, dest: target, message: \"source and destination are the same file\" });\n }\n if (sourceStat.type === \"directory\") {\n if (!flags.has(\"r\") && !flags.has(\"R\")) throw new FsError(\"EISDIR\", { path: source, message: \"omitting directory (use -R)\" });\n if (isPathWithin(physicalSource, physicalTarget)) throw new FsError(\"EINVAL\", { path: target, message: \"cannot copy a directory into itself\" });\n if (ancestors.has(physicalSource)) throw new FsError(\"ELOOP\", { path: source });\n if (targetStat && targetStat.type !== \"directory\") throw new FsError(\"ENOTDIR\", { path: target });\n context.signal.throwIfAborted();\n if (ancestors.size > MAX_RECURSIVE_DIRECTORY_DEPTH) {\n throw new FsError(\"ELOOP\", { path: source, message: `cp directory depth limit exceeded (${MAX_RECURSIVE_DIRECTORY_DEPTH})` });\n }\n await admitFilesystemModes(context, \"cp\", [\"recursive\"], [target]);\n ancestors.add(physicalSource);\n try {\n if (!targetStat && !preflight) await context.fs.mkdir(target, { mode: sourceStat.mode & 0o777, signal: context.signal });\n for (const entry of await readDirectory(context, source, true)) {\n await copy(context, joinPath(source, entry.name), joinPath(target, entry.name), flags, readDirectory, false, ancestors, preflight);\n }\n } finally { ancestors.delete(physicalSource); }\n } else if (preserveLink) {\n await admitFilesystemModes(context, \"cp\", [\"symlink\"], [target]);\n needCapability(context, \"symlink\"); needCapability(context, \"readlink\");\n const linkTarget = await context.fs.readlink!(source, { signal: context.signal });\n const existing = await maybeStat(context, target, false);\n if (existing) {\n await admitFilesystemModes(context, \"cp\", [\"replace\"], [target]);\n if (existing.type === \"directory\") throw new FsError(\"EISDIR\", { path: target });\n const sourceEntry = await context.fs.lstat(source, { signal: context.signal });\n const identity = compareCopyIdentity(sourceEntry, existing);\n if (identity === \"same\") throw new FsError(\"EINVAL\", { path: source, dest: target, message: \"source and destination are the same file\" });\n if (identity === \"unknown\") throw new FsError(\"ENOTSUP\", { path: source, dest: target, message: \"symbolic link copy unlink lacks authoritative distinctness\" });\n context.signal.throwIfAborted();\n if (!preflight) await context.fs.rm(target, { recursive: false, signal: context.signal });\n }\n if (!preflight) await context.fs.symlink!(linkTarget, target, { signal: context.signal });\n } else {\n await admitFilesystemModes(context, \"cp\", [\"file\", ...flags.has(\"f\") && targetStat ? [\"replace\", \"exclusive\"] : []], [target]);\n if (targetStat?.type === \"directory\") throw new FsError(\"EISDIR\", { path: target });\n if (preflight) return;\n try { await context.fs.copyFile(source, target, { signal: context.signal }); }\n catch (error) {\n context.signal.throwIfAborted();\n if (!flags.has(\"f\") || !targetStat || codeOf(error) !== \"EACCES\") throw error;\n const existing = await maybeStat(context, target, false);\n if (existing) {\n const sourceEntry = await context.fs.lstat(source, { signal: context.signal });\n const sourceContents = await context.fs.stat(source, { signal: context.signal });\n const contentsIdentity = existing.type === \"symlink\" ? compareCopyIdentity(sourceContents, existing)\n : await compareObservedEntries(context.fs, source, sourceContents, context.fs, target, existing, { signal: context.signal });\n const entryIdentity = sourceEntry.type === \"symlink\" ? compareCopyIdentity(sourceEntry, existing) : contentsIdentity;\n const identities = [entryIdentity, contentsIdentity];\n if (identities.includes(\"same\")) throw new FsError(\"EINVAL\", { path: source, dest: target, message: \"source and destination are the same file\" });\n if (identities.includes(\"unknown\")) throw new FsError(\"ENOTSUP\", { path: source, dest: target, message: \"forced copy unlink lacks authoritative distinctness\" });\n await context.fs.rm(target, { recursive: false, signal: context.signal });\n }\n await context.fs.copyFile(source, target, { exclusive: true, signal: context.signal });\n }\n }\n if (!preflight && flags.has(\"v\")) await output(context, `'${escapeText(source, \"display\")}' -> '${escapeText(target, \"display\")}'\\n`);\n}\n\nfunction modeText(stat: FileStat): string {\n let text = stat.type === \"directory\" ? \"d\" : stat.type === \"symlink\" ? \"l\" : \"-\";\n for (const shift of [6, 3, 0]) {\n const mode = stat.mode >> shift;\n text += (mode & 4 ? \"r\" : \"-\") + (mode & 2 ? \"w\" : \"-\") + (mode & 1 ? \"x\" : \"-\");\n }\n if (stat.mode & 0o4000) text = text.slice(0, 3) + (stat.mode & 0o100 ? \"s\" : \"S\") + text.slice(4);\n if (stat.mode & 0o2000) text = text.slice(0, 6) + (stat.mode & 0o010 ? \"s\" : \"S\") + text.slice(7);\n if (stat.mode & 0o1000) text = text.slice(0, 9) + (stat.mode & 0o001 ? \"t\" : \"T\");\n return text;\n}\n\nexport function filesystemCommands(maxDirectoryEntries?: number): CommandDefinition[] {\n const readDirectory = createDirectoryReader(maxDirectoryEntries);\n return [\n define(\"mkdir\", async context => {\n const parsed = options(context.args, \"pm:v\", { parents: \"p\", mode: \"m\", verbose: \"v\" });\n requireOperands(parsed.operands);\n const mode = value(parsed, \"m\");\n if (mode !== undefined && !/^[0-7]{1,4}$/u.test(mode)) throw new UsageError(`invalid mode '${mode}' (octal required)`);\n await preflightOperands(context, parsed.operands, operand => admitFilesystemModes(context, \"mkdir\",\n [parsed.flags.has(\"p\") ? \"parents\" : \"directory\"], [pathOf(context, operand)]));\n return eachOperand(context, parsed.operands, async operand => {\n await context.fs.mkdir(pathOf(context, operand), { recursive: parsed.flags.has(\"p\"), ...(mode === undefined ? {} : { mode: parseInt(mode, 8) }), signal: context.signal });\n if (parsed.flags.has(\"v\")) await output(context, `mkdir: created directory '${escapeText(operand, \"display\")}'\\n`);\n });\n }),\n define(\"touch\", async context => {\n const parsed = options(context.args, \"camr:\", { \"no-create\": \"c\", reference: \"r\" });\n requireOperands(parsed.operands);\n const reference = value(parsed, \"r\");\n const times = reference === undefined ? undefined : await context.fs.stat(pathOf(context, reference), { signal: context.signal });\n const now = Date.now();\n await preflightOperands(context, parsed.operands, async operand => {\n const path = pathOf(context, operand);\n const existing = await maybeStat(context, path);\n const modes = existing ? [\"existing\"] : parsed.flags.has(\"c\") ? [\"no-create\"]\n : reference === undefined ? [\"create\"] : [\"create\", \"existing\"];\n await admitFilesystemModes(context, \"touch\", modes, [path]);\n });\n return eachOperand(context, parsed.operands, async operand => {\n const path = pathOf(context, operand);\n let existing = await maybeStat(context, path);\n if (!existing) {\n if (parsed.flags.has(\"c\")) return;\n await admitFilesystemModes(context, \"touch\", reference === undefined ? [\"create\"] : [\"create\", \"existing\"], [path]);\n if (reference !== undefined) needCapability(context, \"utimes\");\n await context.fs.writeFile(path, new Uint8Array(), { flag: \"wx\", signal: context.signal });\n if (reference === undefined) return;\n existing = await context.fs.stat(path, { signal: context.signal });\n }\n needCapability(context, \"utimes\");\n await admitFilesystemModes(context, \"touch\", [\"existing\"], [path]);\n const accessOnly = parsed.flags.has(\"a\") && !parsed.flags.has(\"m\");\n const modifyOnly = parsed.flags.has(\"m\") && !parsed.flags.has(\"a\");\n await context.fs.utimes!(path, modifyOnly ? existing.atimeMs : times?.atimeMs ?? now,\n accessOnly ? existing.mtimeMs : times?.mtimeMs ?? now, { signal: context.signal });\n });\n }),\n define(\"cp\", async context => {\n const parsed = options(context.args, \"rRfnvPL\", { recursive: \"R\", force: \"f\", \"no-clobber\": \"n\", verbose: \"v\", dereference: \"L\", \"no-dereference\": \"P\" });\n if (parsed.flags.has(\"P\") && parsed.flags.has(\"L\")) throw new UsageError(\"-P and -L cannot be combined\");\n const destination = await destinations(context, parsed.operands);\n await preflightOperands(context, destination.sources, async operand => {\n const source = pathOf(context, operand);\n await copy(context, source, destination.directory ? joinPath(destination.target, basename(source)) : destination.target,\n parsed.flags, readDirectory, true, new Set(), true);\n });\n return eachOperand(context, destination.sources, async operand => {\n const source = pathOf(context, operand);\n await copy(context, source, destination.directory ? joinPath(destination.target, basename(source)) : destination.target, parsed.flags, readDirectory);\n });\n }),\n define(\"mv\", async context => {\n const parsed = options(context.args, \"fnv\", { force: \"f\", \"no-clobber\": \"n\", verbose: \"v\" });\n const destination = await destinations(context, parsed.operands);\n const budget = new MoveBudget(context.signal);\n await preflightOperands(context, destination.sources, async operand => {\n const source = pathOf(context, operand);\n const target = destination.directory ? joinPath(destination.target, basename(source)) : destination.target;\n if (parsed.flags.has(\"n\") && await maybeStat(context, target, false)) return;\n await admitFilesystemModes(context, \"mv\", [\"rename\"], [source, target]);\n });\n return eachOperand(context, destination.sources, async operand => {\n const source = pathOf(context, operand);\n const target = destination.directory ? joinPath(destination.target, basename(source)) : destination.target;\n if (parsed.flags.has(\"n\") && await maybeStat(context, target, false)) return;\n try { await context.fs.rename(source, target, { signal: context.signal }); }\n catch (error) {\n context.signal.throwIfAborted();\n if (codeOf(error) !== \"EXDEV\") throw error;\n if (!await moveAcrossDevices(context, source, target, parsed.flags.has(\"n\"), budget)) {\n if (!parsed.flags.has(\"n\")) throw new FsError(\"EINVAL\", { path: source, dest: target, message: \"source and destination are the same file\" });\n return;\n }\n }\n if (parsed.flags.has(\"v\")) await output(context, `'${escapeText(operand, \"display\")}' -> '${escapeText(target, \"display\")}'\\n`);\n });\n }),\n define(\"rm\", async context => {\n const parsed = options(context.args, \"rRfdv\", { recursive: \"r\", force: \"f\", dir: \"d\", verbose: \"v\" });\n if (!parsed.flags.has(\"f\")) requireOperands(parsed.operands);\n await preflightOperands(context, parsed.operands, async operand => {\n const path = pathOf(context, operand);\n const stat = await maybeStat(context, path, false);\n if (!stat) return;\n const mode = stat.type === \"directory\" ? parsed.flags.has(\"r\") || parsed.flags.has(\"R\") ? \"recursive\" : \"directory\" : \"file\";\n if (mode === \"directory\") await admitEmptyDirectory(context, path, readDirectory);\n else await admitFilesystemModes(context, \"rm\", [mode], [path]);\n });\n return eachOperand(context, parsed.operands, async operand => {\n const path = pathOf(context, operand);\n if (path === \"/\" || [\".\", \"..\"].includes(operand.replace(/\\/+$/u, \"\").split(\"/\").at(-1)!)) throw new FsError(\"EBUSY\", { path, message: \"refusing to remove root, '.' or '..'\" });\n const stat = await maybeStat(context, path, false);\n if (!stat) {\n if (parsed.flags.has(\"f\")) return;\n throw new FsError(\"ENOENT\", { path });\n }\n const recursive = parsed.flags.has(\"r\") || parsed.flags.has(\"R\");\n if (stat.type === \"directory\" && !recursive && !parsed.flags.has(\"d\")) throw new FsError(\"EISDIR\", { path });\n if (stat.type === \"directory\" && !recursive) {\n try { await removeEmptyDirectory(context, path, readDirectory); }\n catch (error) {\n context.signal.throwIfAborted();\n if (!parsed.flags.has(\"f\") || codeOf(error) !== \"ENOENT\") throw error;\n }\n } else {\n await context.fs.rm(path, { recursive, force: parsed.flags.has(\"f\"), signal: context.signal });\n }\n if (parsed.flags.has(\"v\")) await output(context, `removed '${escapeText(operand, \"display\")}'\\n`);\n });\n }),\n define(\"rmdir\", async context => {\n const parsed = options(context.args, \"pv\", { parents: \"p\", verbose: \"v\" });\n requireOperands(parsed.operands);\n await preflightOperands(context, parsed.operands, async operand => {\n let path = pathOf(context, operand);\n const stop = dirname(pathOf(context, operand.split(\"/\").find(part => part && part !== \".\") ?? operand));\n do {\n await admitEmptyDirectory(context, path, readDirectory);\n path = dirname(path);\n } while (parsed.flags.has(\"p\") && path !== \"/\" && path !== stop);\n });\n return eachOperand(context, parsed.operands, async operand => {\n let path = pathOf(context, operand);\n const stop = dirname(pathOf(context, operand.split(\"/\").find(part => part && part !== \".\") ?? operand));\n do {\n if (path === \"/\") throw new FsError(\"EBUSY\", { path });\n await removeEmptyDirectory(context, path, readDirectory);\n if (parsed.flags.has(\"v\")) await output(context, `rmdir: removing directory '${escapeText(path, \"display\")}'\\n`);\n path = dirname(path);\n } while (parsed.flags.has(\"p\") && path !== \"/\" && path !== stop);\n });\n }),\n define(\"ln\", async context => {\n const parsed = options(context.args, \"sfnT\", { symbolic: \"s\", force: \"f\", \"no-dereference\": \"n\", \"no-target-directory\": \"T\" });\n requireOperands(parsed.operands);\n if (parsed.flags.has(\"T\")) requireOperands(parsed.operands, 2, 2);\n const operands = parsed.operands.length === 1 ? [...parsed.operands, \".\"] : parsed.operands;\n const target = pathOf(context, operands.at(-1)!);\n const directory = !parsed.flags.has(\"T\") && (await maybeStat(context, target, !parsed.flags.has(\"n\")))?.type === \"directory\";\n if (operands.length > 2 && !directory) throw new FsError(\"ENOTDIR\", { path: target });\n const symbolic = parsed.flags.has(\"s\");\n needCapability(context, symbolic ? \"symlink\" : \"link\");\n await preflightOperands(context, operands.slice(0, -1), async operand => {\n const destination = directory ? joinPath(target, basename(operand)) : target;\n const replacing = parsed.flags.has(\"f\") && await maybeStat(context, destination, false);\n await admitFilesystemModes(context, \"ln\", [symbolic ? \"symbolic\" : \"hard\", ...replacing ? [\"replace\"] : []], [destination]);\n });\n return eachOperand(context, operands.slice(0, -1), async operand => {\n const destination = directory ? joinPath(target, basename(operand)) : target;\n const source = pathOf(context, operand);\n if (!symbolic && source === destination) throw new FsError(\"EEXIST\", { path: destination });\n const existing = await maybeStat(context, destination, false);\n if (existing && parsed.flags.has(\"f\")) {\n if (existing.type === \"directory\") throw new FsError(\"EISDIR\", { path: destination });\n if (!symbolic) {\n await context.fs.stat(source, { signal: context.signal });\n const sourceEntry = joinPath(await context.fs.realpath(dirname(source), { signal: context.signal }), basename(source));\n const targetEntry = joinPath(await context.fs.realpath(dirname(destination), { signal: context.signal }), basename(destination));\n if (sourceEntry === targetEntry) throw new FsError(\"EEXIST\", { path: destination, message: \"source and destination are the same file\" });\n }\n await context.fs.rm(destination, { signal: context.signal });\n }\n if (symbolic) await context.fs.symlink!(operand, destination, { signal: context.signal });\n else await context.fs.link!(source, destination, { signal: context.signal });\n });\n }),\n define(\"readlink\", async context => {\n const parsed = options(context.args, \"fenz\", { canonicalize: \"f\", \"canonicalize-existing\": \"e\", zero: \"z\", \"no-newline\": \"n\" });\n requireOperands(parsed.operands);\n return eachOperand(context, parsed.operands, async operand => {\n const path = pathOf(context, operand);\n await admitFilesystemModes(context, \"readlink\", [parsed.flags.has(\"e\") || parsed.flags.has(\"f\") ? \"canonical\" : \"link\"], [path]);\n let result: string;\n if (parsed.flags.has(\"e\")) result = await context.fs.realpath(path, { signal: context.signal });\n else if (parsed.flags.has(\"f\")) {\n const existing = await maybeStat(context, path, false);\n result = existing ? await context.fs.realpath(path, { signal: context.signal }) : joinPath(await context.fs.realpath(dirname(path), { signal: context.signal }), basename(path));\n } else {\n needCapability(context, \"readlink\");\n result = await context.fs.readlink!(path, { signal: context.signal });\n }\n await output(context, result + (parsed.flags.has(\"n\") ? \"\" : parsed.flags.has(\"z\") ? \"\\0\" : \"\\n\"));\n });\n }),\n define(\"realpath\", async context => {\n const args: string[] = [];\n const relative = new Map<string, string>();\n let ended = false;\n for (let index = 0; index < context.args.length; index++) {\n const argument = context.args[index]!;\n if (argument === \"--\") ended = true;\n const key = argument.split(\"=\", 1)[0]!;\n if (!ended && (key === \"--relative-to\" || key === \"--relative-base\")) {\n const equals = argument.indexOf(\"=\");\n const directory = equals < 0 ? context.args[++index] : argument.slice(equals + 1);\n if (directory === undefined) throw new UsageError(`option '${key}' requires an argument`);\n relative.set(key, directory);\n } else args.push(argument);\n }\n const parsed = options(args, \"emz\", { \"canonicalize-existing\": \"e\", \"canonicalize-missing\": \"m\", zero: \"z\" });\n requireOperands(parsed.operands);\n const canonical = async (operand: string): Promise<string> => {\n const path = pathOf(context, operand);\n await admitFilesystemModes(context, \"realpath\", [\"canonical\"], [path]);\n const existing = await maybeStat(context, path, false);\n return parsed.flags.has(\"m\") ? await canonicalMissing(context, path, \"realpath\")\n : parsed.flags.has(\"e\") || existing ? await context.fs.realpath(path, { signal: context.signal })\n : joinPath(await context.fs.realpath(dirname(path), { signal: context.signal }), basename(path));\n };\n const baseOperand = relative.get(\"--relative-base\");\n const toOperand = relative.get(\"--relative-to\") ?? baseOperand;\n const base = baseOperand === undefined ? undefined : await canonical(baseOperand);\n const to = toOperand === undefined ? undefined : await canonical(toOperand);\n return eachOperand(context, parsed.operands, async operand => {\n const resolved = await canonical(operand);\n const display = to !== undefined && (base === undefined || isPathWithin(base, to) && isPathWithin(base, resolved))\n ? relativePath(to, resolved) || \".\" : resolved;\n await output(context, display + (parsed.flags.has(\"z\") ? \"\\0\" : \"\\n\"));\n });\n }),\n define(\"ls\", async context => {\n let sort: \"name\" | \"time\" | \"size\" = \"name\";\n let ended = false;\n const args: string[] = [];\n for (let index = 0; index < context.args.length; index++) {\n const argument = context.args[index]!;\n if (!ended && (argument === \"--sort\" || argument.startsWith(\"--sort=\"))) {\n const selection = argument === \"--sort\" ? context.args[++index] : argument.slice(7);\n if (selection !== \"time\" && selection !== \"size\") throw new UsageError(\"--sort requires 'time' or 'size'\");\n sort = selection;\n args.push(selection === \"time\" ? \"-t\" : \"-S\");\n continue;\n }\n args.push(argument);\n if (argument === \"--\") ended = true;\n if (!ended && argument.startsWith(\"-\") && !argument.startsWith(\"--\")) for (const flag of argument.slice(1)) {\n if (flag === \"t\") sort = \"time\";\n else if (flag === \"S\") sort = \"size\";\n }\n }\n const parsed = options(args, \"aAl1dFprRLhtS\", { all: \"a\", \"almost-all\": \"A\", directory: \"d\", classify: \"F\", reverse: \"r\", recursive: \"R\", dereference: \"L\", \"human-readable\": \"h\" });\n const operands = parsed.operands.length ? parsed.operands : [\".\"];\n interface ListingEntry { path: string; display: string; stat: FileStat }\n let outputWritten = false;\n const inspect = async (path: string, display: string, operand = false): Promise<ListingEntry> => {\n await admitFilesystemModes(context, \"ls\", [\"entry\"], [path]);\n let stat = await context.fs[parsed.flags.has(\"L\") ? \"stat\" : \"lstat\"](path, { signal: context.signal });\n context.signal.throwIfAborted();\n if (operand && stat.type === \"symlink\" && !parsed.flags.has(\"L\") && !parsed.flags.has(\"d\") && !parsed.flags.has(\"l\") && !parsed.flags.has(\"F\")) {\n try {\n const target = await context.fs.stat(path, { signal: context.signal });\n if (target.type === \"directory\") stat = target;\n } catch (error) { context.signal.throwIfAborted(); if (codeOf(error) !== \"ENOENT\") throw error; }\n context.signal.throwIfAborted();\n }\n return { path, display, stat };\n };\n const order = async (entries: ListingEntry[], lexical = false): Promise<void> => {\n await yieldTurn(context.signal);\n if (sort !== \"name\" || !lexical) entries.sort((left, right) => {\n context.signal.throwIfAborted();\n if (sort !== \"name\") {\n const key = sort === \"time\" ? \"mtimeMs\" : \"size\";\n if (left.stat[key] > right.stat[key]) return -1;\n if (left.stat[key] < right.stat[key]) return 1;\n }\n return left.display < right.display ? -1 : left.display > right.display ? 1 : 0;\n });\n if (parsed.flags.has(\"r\")) entries.reverse();\n await yieldTurn(context.signal);\n };\n const humanSize = (size: number, path: string): string => {\n if (!Number.isSafeInteger(size) || size < 0) throw new FsError(\"EINVAL\", { path, message: \"human-readable size must be a nonnegative safe integer\" });\n if (size < 1024) return String(size);\n const bytes = BigInt(size);\n const units = \"KMGTPEZY\";\n let unit = 0;\n let scale = 1024n;\n while (unit < units.length - 1 && bytes > 1023n * scale) { scale *= 1024n; unit++; }\n const tenths = (bytes * 10n + scale - 1n) / scale;\n return (tenths < 100n ? `${tenths / 10n}.${tenths % 10n}` : String((bytes + scale - 1n) / scale)) + units[unit]!;\n };\n const render = async ({ path, display, stat }: ListingEntry): Promise<void> => {\n let suffix = stat.type === \"directory\" && (parsed.flags.has(\"F\") || parsed.flags.has(\"p\")) ? \"/\" : \"\";\n if (parsed.flags.has(\"F\") && stat.type === \"symlink\") suffix = \"@\";\n else if (parsed.flags.has(\"F\") && stat.type === \"file\" && stat.mode & 0o111) suffix = \"*\";\n if (parsed.flags.has(\"l\")) {\n const size = parsed.flags.has(\"h\") ? humanSize(stat.size, path) : String(stat.size);\n const date = new Date(stat.mtimeMs).toISOString().slice(0, 16).replace(\"T\", \" \");\n let target = \"\";\n if (stat.type === \"symlink\") {\n await admitFilesystemModes(context, \"ls\", [\"link\"], [path]);\n needCapability(context, \"readlink\"); target = ` -> ${escapeText(await context.fs.readlink!(path, { signal: context.signal }), \"display\")}`;\n }\n await output(context, `${modeText(stat)} ${stat.nlink ?? 1} ${stat.uid ?? 0} ${stat.gid ?? 0} ${size} ${date} ${escapeText(display, \"display\")}${suffix}${target}\\n`);\n } else await output(context, `${escapeText(display, \"display\")}${suffix}\\n`);\n outputWritten = true;\n };\n const list = async ({ path, display }: ListingEntry, header: boolean, ancestors = new Set<string>()): Promise<void> => {\n context.signal.throwIfAborted();\n await admitFilesystemModes(context, \"ls\", [\"directory\"], [path]);\n const physical = await context.fs.realpath(path, { signal: context.signal });\n if (ancestors.has(physical)) throw new FsError(\"ELOOP\", { path });\n context.signal.throwIfAborted();\n if (ancestors.size > MAX_RECURSIVE_DIRECTORY_DEPTH) {\n throw new FsError(\"ELOOP\", { path, message: `ls directory depth limit exceeded (${MAX_RECURSIVE_DIRECTORY_DEPTH})` });\n }\n ancestors.add(physical);\n try {\n if (header) { await output(context, `${outputWritten ? \"\\n\" : \"\"}${escapeText(display, \"display\")}:\\n`); outputWritten = true; }\n const entries = await readDirectory(context, path, true);\n const names = entries.map(entry => entry.name).filter(name => parsed.flags.has(\"a\") || parsed.flags.has(\"A\") || !name.startsWith(\".\"));\n if (parsed.flags.has(\"a\")) for (const name of [\".\", \"..\"]) {\n const index = names.findIndex(entry => entry > name);\n names.splice(index < 0 ? names.length : index, 0, name);\n }\n const children: ListingEntry[] = [];\n for (const [index, name] of names.entries()) {\n if (index % 128 === 0) await yieldTurn(context.signal);\n children.push(await inspect(joinPath(path, name), name));\n }\n await order(children, true);\n for (const child of children) await render(child);\n if (parsed.flags.has(\"R\")) for (const child of children) {\n if (child.display === \".\" || child.display === \"..\") continue;\n if (child.stat.type === \"directory\") await list({ ...child, display: `${display.replace(/\\/$/u, \"\")}/${child.display}` }, true, ancestors);\n }\n } finally { ancestors.delete(physical); }\n };\n const entries: ListingEntry[] = [];\n let admitted = 0;\n const result = await eachOperand(context, operands, async operand => {\n if (admitted++ % 128 === 0) await yieldTurn(context.signal);\n entries.push(await inspect(pathOf(context, operand), operand, true));\n });\n const files = entries.filter(entry => parsed.flags.has(\"d\") || entry.stat.type !== \"directory\");\n const directories = entries.filter(entry => !parsed.flags.has(\"d\") && entry.stat.type === \"directory\");\n await order(files);\n await order(directories);\n for (const entry of [...files, ...directories]) {\n const rendered = await eachOperand(context, [entry.display], async () => {\n if (entry.stat.type !== \"directory\" || parsed.flags.has(\"d\")) await render(entry);\n else await list(entry, operands.length > 1 || parsed.flags.has(\"R\"));\n });\n result.exitCode = Math.max(result.exitCode, rendered.exitCode);\n }\n return result;\n }),\n ].map(command => {\n const requirements = filesystemCommandRequirements[command.name as keyof typeof filesystemCommandRequirements];\n return requirements ? { ...command, filesystemRequirements: requirements } : command;\n });\n}\n", "import { FsError, type EntryComparison, type FileStat, type FileSystem, type FsOptions } from \"../contracts/index.js\";\n\nfunction complete(stat: FileStat): boolean {\n return ((typeof stat.identityScope === \"object\" && stat.identityScope !== null) || typeof stat.identityScope === \"symbol\")\n && typeof stat.dev === \"number\" && Number.isSafeInteger(stat.dev) && stat.dev >= 0\n && typeof stat.ino === \"number\" && Number.isSafeInteger(stat.ino) && stat.ino >= 0;\n}\n\nexport function compareCopyIdentity(left: FileStat | undefined, right: FileStat | undefined): \"same\" | \"distinct\" | \"unknown\" {\n if (!left || !right || !complete(left) || !complete(right)) return \"unknown\";\n return left.identityScope === right.identityScope && left.dev === right.dev && left.ino === right.ino ? \"same\" : \"distinct\";\n}\n\nexport async function compareObservedEntries(\n fs: FileSystem, path: string, stat: FileStat,\n peer: FileSystem, peerPath: string, peerStat: FileStat,\n options: FsOptions = {},\n): Promise<EntryComparison> {\n options.signal?.throwIfAborted();\n const identity = compareCopyIdentity(stat, peerStat);\n if (identity !== \"unknown\") return identity;\n let result: EntryComparison = \"unknown\";\n const operands: readonly [FileSystem, string, FileSystem, string][] = fs === peer\n ? [[fs, path, peer, peerPath]]\n : [[fs, path, peer, peerPath], [peer, peerPath, fs, path]];\n for (const [owner, ownPath, other, otherPath] of operands) {\n options.signal?.throwIfAborted();\n if (!owner.compareEntry) continue;\n let answer: EntryComparison;\n try { answer = await owner.compareEntry(ownPath, other, otherPath, options); }\n catch (error) { options.signal?.throwIfAborted(); throw error; }\n options.signal?.throwIfAborted();\n if (answer !== \"same\" && answer !== \"distinct\" && answer !== \"unknown\") {\n throw new FsError(\"EIO\", { path, dest: peerPath, message: \"invalid entry comparison answer\" });\n }\n if (answer === \"unknown\") continue;\n if (result !== \"unknown\" && result !== answer) {\n throw new FsError(\"EIO\", { path, dest: peerPath, message: \"conflicting entry comparison answers\" });\n }\n result = answer;\n }\n return result;\n}\n", "import { PublicDiagnostic } from \"../diagnostics.js\";\nimport { yieldTurn } from \"../contracts/yield.js\";\nimport { dirname, FsError, isPathWithin, joinPath, type CommandContext, type FileStat } from \"../contracts/index.js\";\nimport { compareCopyIdentity, compareObservedEntries } from \"./copy-identity.js\";\nimport { codeOf, diagnostic } from \"./internal.js\";\nimport { admitFilesystemModes } from \"./filesystem-requirements.js\";\n\ninterface MoveEntry {\n readonly source: string;\n readonly target: string;\n readonly stat: FileStat;\n readonly targetStat: FileStat | undefined;\n readonly link: string | undefined;\n}\n\nexport class MoveBudget {\n private steps = 0;\n constructor(readonly signal: AbortSignal) {}\n get remaining(): number { return 100_000 - this.steps; }\n async step(): Promise<void> {\n this.signal.throwIfAborted();\n if (++this.steps > 100_000) throw new FsError(\"EFBIG\", { message: \"cross-device move entry limit exceeded\" });\n if (this.steps % 128 === 0) await yieldTurn();\n this.signal.throwIfAborted();\n }\n}\n\nasync function optionalStat(context: CommandContext, path: string): Promise<FileStat | undefined> {\n try { return await context.fs.lstat(path, { signal: context.signal }); }\n catch (error) { context.signal.throwIfAborted(); if (codeOf(error) === \"ENOENT\") return undefined; throw error; }\n}\n\nfunction unchanged(before: FileStat, after: FileStat, content: boolean): boolean {\n const identity = compareCopyIdentity(before, after);\n const stableIdentity = compareCopyIdentity(before, before) === \"same\" ? identity === \"same\" : identity !== \"distinct\";\n return stableIdentity && before.type === after.type\n && (!content || (before.size === after.size && before.mtimeMs === after.mtimeMs && before.mode === after.mode));\n}\n\nasync function recheck(context: CommandContext, entry: MoveEntry, content = true): Promise<void> {\n context.signal.throwIfAborted();\n const current = await context.fs.lstat(entry.source, { signal: context.signal });\n if (!unchanged(entry.stat, current, content)) throw new FsError(\"EBUSY\", { path: entry.source, message: \"move source changed before removal\" });\n}\n\nexport async function moveAcrossDevices(context: CommandContext, source: string, target: string, noClobber: boolean, budget: MoveBudget): Promise<boolean> {\n const plan: MoveEntry[] = [];\n const sourceStat = await context.fs.lstat(source, { signal: context.signal });\n const targetStat = await optionalStat(context, target);\n if (noClobber && targetStat) return false;\n if (source === target || compareCopyIdentity(sourceStat, targetStat) === \"same\") return false;\n const compare = (origin: string, destination: string, stat: FileStat, existing: FileStat) =>\n stat.type === \"symlink\" || existing.type === \"symlink\" ? Promise.resolve(compareCopyIdentity(stat, existing))\n : compareObservedEntries(context.fs, origin, stat, context.fs, destination, existing, { signal: context.signal });\n const rootIdentity = targetStat ? await compare(source, target, sourceStat, targetStat) : \"unknown\";\n if (rootIdentity === \"same\") return false;\n if (source === \"/\") throw new FsError(\"EBUSY\", { path: source });\n if (sourceStat.type === \"directory\") {\n if (!context.fs.rmdir) throw new FsError(\"ENOTSUP\", { syscall: \"rmdir\", path: source });\n if (isPathWithin(source, target)) throw new FsError(\"EINVAL\", { path: target, message: \"cannot move a directory into itself\" });\n let parent = dirname(target);\n while (true) {\n await budget.step();\n const parentStat = await optionalStat(context, parent);\n if (compareCopyIdentity(sourceStat, parentStat) === \"same\") throw new FsError(\"EINVAL\", { path: target, message: \"cannot move a directory into itself\" });\n if (parent === \"/\") break;\n parent = dirname(parent);\n }\n }\n const visit = async (origin: string, destination: string, stat: FileStat, existing: FileStat | undefined, depth: number): Promise<void> => {\n await budget.step();\n if (depth > 128) throw new FsError(\"EFBIG\", { message: \"cross-device move depth limit exceeded\" });\n if (existing) {\n const identity = depth === 0 ? rootIdentity : await compare(origin, destination, stat, existing);\n if (identity === \"same\") throw new FsError(\"EINVAL\", { path: origin, dest: destination, message: \"move source and destination are aliases\" });\n if (identity === \"unknown\") throw new FsError(\"ENOTSUP\", { path: origin, dest: destination, message: \"existing move destination lacks authoritative distinctness\" });\n if ((stat.type === \"directory\") !== (existing.type === \"directory\")) throw new FsError(existing.type === \"directory\" ? \"EISDIR\" : \"ENOTDIR\", { path: destination });\n if (stat.type === \"directory\" && (await context.fs.readdir(destination, { signal: context.signal })).length) throw new FsError(\"ENOTEMPTY\", { path: destination });\n }\n let link: string | undefined;\n if (stat.type === \"symlink\") {\n if (!context.fs.readlink || !context.fs.symlink) throw new FsError(\"ENOTSUP\", { syscall: \"symlink\", path: origin });\n link = await context.fs.readlink(origin, { signal: context.signal });\n }\n plan.push({ source: origin, target: destination, stat, targetStat: existing, link });\n if (stat.type === \"directory\") {\n const entries = await context.fs.readdir(origin, { signal: context.signal });\n if (entries.length > budget.remaining) throw new FsError(\"EFBIG\", { message: \"cross-device move entry limit exceeded\" });\n for (const entry of entries.sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0)) {\n const child = joinPath(origin, entry.name), childTarget = joinPath(destination, entry.name);\n await visit(child, childTarget, await context.fs.lstat(child, { signal: context.signal }), await optionalStat(context, childTarget), depth + 1);\n }\n }\n };\n await visit(source, target, sourceStat, targetStat, 0);\n for (const entry of plan) {\n const sourceMode = entry.stat.type === \"directory\" ? \"cross-directory-source\"\n : entry.stat.type === \"symlink\" ? \"cross-link-source\" : \"cross-source\";\n await admitFilesystemModes(context, \"mv\", [sourceMode], [entry.source]);\n if (entry.stat.type === \"directory\") {\n if (!entry.targetStat) await admitFilesystemModes(context, \"mv\", [\"cross-directory\"], [entry.target]);\n } else if (entry.stat.type === \"symlink\") {\n await admitFilesystemModes(context, \"mv\", [\"cross-link\"], [entry.target]);\n if (entry.targetStat) await admitFilesystemModes(context, \"mv\", [\"cross-replace\"], [entry.target]);\n } else {\n await admitFilesystemModes(context, \"mv\", [\"cross-file\",\n ...!entry.targetStat || entry.targetStat.type === \"symlink\" ? [\"cross-exclusive\"] : [],\n ...entry.targetStat?.type === \"symlink\" ? [\"cross-replace\"] : [],\n ], [entry.target]);\n }\n }\n for (const entry of plan) {\n await recheck(context, entry);\n try {\n if (entry.stat.type === \"directory\") {\n if (!entry.targetStat) await context.fs.mkdir(entry.target, { mode: 0o700, signal: context.signal });\n } else if (entry.stat.type === \"symlink\") {\n if (entry.targetStat) await context.fs.rm(entry.target, { recursive: false, signal: context.signal });\n await context.fs.symlink!(entry.link!, entry.target, { signal: context.signal });\n } else {\n if (entry.targetStat?.type === \"symlink\") await context.fs.rm(entry.target, { recursive: false, signal: context.signal });\n await context.fs.copyFile(entry.source, entry.target, { exclusive: !entry.targetStat || entry.targetStat.type === \"symlink\", signal: context.signal });\n }\n } catch (error) {\n context.signal.throwIfAborted();\n if (noClobber && entry === plan[0] && !entry.targetStat && codeOf(error) === \"EEXIST\") return false;\n throw error;\n }\n }\n for (const entry of [...plan].reverse()) {\n context.signal.throwIfAborted();\n if (entry.stat.type !== \"symlink\") {\n if (context.fs.capabilities.permissions === true && context.fs.chmod) await context.fs.chmod(entry.target, entry.stat.mode & 0o7777, { signal: context.signal });\n if (context.fs.capabilities.timestamps === true && context.fs.utimes) {\n try { await context.fs.utimes(entry.target, entry.stat.atimeMs, entry.stat.mtimeMs, { signal: context.signal }); }\n catch (error) {\n context.signal.throwIfAborted();\n if (codeOf(error) !== \"ENOTSUP\" && codeOf(error) !== \"EOPNOTSUPP\") throw error;\n await diagnostic(context, new PublicDiagnostic(`cannot preserve timestamps for '${entry.target}': operation not supported; retaining copied data`));\n }\n }\n }\n }\n for (const entry of plan) await recheck(context, entry);\n for (const entry of [...plan].reverse()) {\n await recheck(context, entry, entry.stat.type !== \"directory\");\n if (entry.stat.type === \"directory\") await context.fs.rmdir!(entry.source, { signal: context.signal });\n else await context.fs.rm(entry.source, { recursive: false, signal: context.signal });\n }\n return true;\n}\n", "import { assertCommandRequirements, type CommandFileSystemRequirement } from \"../contracts/command-requirements.js\";\nimport { dirname, FsError, type CommandContext } from \"../contracts/index.js\";\nimport { codeOf } from \"./internal.js\";\n\nexport const filesystemCommandRequirements = {\n mkdir: [\n { id: \"directory\", description: \"Create explicit directories\", capabilities: [\"explicitDirectories\", \"mkdir\"], mutates: true },\n { id: \"parents\", description: \"Create parent directories (-p)\", capabilities: [\"explicitDirectories\", \"recursiveMkdir\"], mutates: true },\n ],\n touch: [\n { id: \"create\", description: \"Create a missing file exclusively\", capabilities: [\"stat\", \"exclusiveCreate\"], mutates: true },\n { id: \"existing\", description: \"Update existing file timestamps\", capabilities: [\"stat\", \"timestamps\"], mutates: true },\n { id: \"no-create\", description: \"Skip missing files (-c)\", capabilities: [\"stat\"] },\n ],\n cp: [\n { id: \"file\", description: \"Copy file contents\", capabilities: [\"stat\", \"realpath\", \"copy\"], mutates: true },\n { id: \"recursive\", description: \"Copy directory trees (-r/-R)\", capabilities: [\"stat\", \"realpath\", \"readdir\", \"explicitDirectories\", \"mkdir\", \"copy\"], mutates: true },\n { id: \"symlink\", description: \"Copy symbolic links without dereferencing\", capabilities: [\"stat\", \"realpath\", \"readlink\", \"symlinks\"], mutates: true },\n { id: \"replace\", description: \"Remove a destination before replacing it\", capabilities: [\"remove\"], mutates: true },\n { id: \"exclusive\", description: \"Exclusively copy after forced removal\", capabilities: [\"exclusiveCopy\"], mutates: true },\n ],\n mv: [\n { id: \"rename\", description: \"Rename files or directories\", capabilities: [\"stat\", \"rename\"], mutates: true },\n { id: \"cross-source\", description: \"Remove file sources after an existing cross-device transfer\", capabilities: [\"stat\", \"remove\"], mutates: true },\n { id: \"cross-directory-source\", description: \"Traverse and remove cross-device source directories\", capabilities: [\"stat\", \"readdir\", \"removeDirectory\"], mutates: true },\n { id: \"cross-link-source\", description: \"Inspect and remove cross-device source links\", capabilities: [\"stat\", \"readlink\", \"remove\"], mutates: true },\n { id: \"cross-file\", description: \"Publish file contents through the existing cross-device copy route\", capabilities: [\"stat\", \"copy\"], mutates: true },\n { id: \"cross-exclusive\", description: \"Publish a missing cross-device destination exclusively\", capabilities: [\"exclusiveCopy\"], mutates: true },\n { id: \"cross-directory\", description: \"Create missing cross-device destination directories\", capabilities: [\"mkdir\"], mutates: true },\n { id: \"cross-link\", description: \"Publish cross-device destination links\", capabilities: [\"symlinks\"], mutates: true },\n { id: \"cross-replace\", description: \"Remove entries replaced by a cross-device transfer\", capabilities: [\"remove\"], mutates: true },\n ],\n rm: [\n { id: \"file\", description: \"Remove file entries\", capabilities: [\"stat\", \"remove\"], mutates: true },\n { id: \"directory\", description: \"Remove empty directories (-d)\", capabilities: [\"stat\", \"removeDirectory\"], mutates: true },\n { id: \"recursive\", description: \"Remove directory trees (-r/-R)\", capabilities: [\"stat\", \"recursiveRemove\"], mutates: true },\n ],\n rmdir: [\n { id: \"directory\", description: \"Remove empty directories, including parents (-p)\", capabilities: [\"removeDirectory\"], mutates: true },\n ],\n ln: [\n { id: \"hard\", description: \"Create hard links\", capabilities: [\"stat\", \"hardlinks\"], mutates: true },\n { id: \"symbolic\", description: \"Create symbolic links (-s)\", capabilities: [\"stat\", \"symlinks\"], mutates: true },\n { id: \"replace\", description: \"Remove existing destinations (-f)\", capabilities: [\"remove\"], mutates: true },\n ],\n readlink: [\n { id: \"link\", description: \"Read symbolic link targets\", capabilities: [\"readlink\"] },\n { id: \"canonical\", description: \"Canonicalize paths (-f/-e)\", capabilities: [\"stat\", \"realpath\"] },\n ],\n realpath: [\n { id: \"canonical\", description: \"Canonicalize existing or missing paths\", capabilities: [\"stat\", \"realpath\"] },\n ],\n ls: [\n { id: \"entry\", description: \"Inspect individual directory entries\", capabilities: [\"stat\"] },\n { id: \"directory\", description: \"List directories, including recursive listings (-R)\", capabilities: [\"stat\", \"readdir\", \"realpath\"] },\n { id: \"link\", description: \"Show symbolic link targets in long listings (-l)\", capabilities: [\"readlink\"] },\n ],\n} satisfies Record<string, readonly CommandFileSystemRequirement[]>;\n\nexport async function admitFilesystemModes(\n context: CommandContext, command: keyof typeof filesystemCommandRequirements, modes: readonly string[], paths: readonly string[],\n): Promise<void> {\n const requirements = filesystemCommandRequirements[command];\n for (const path of paths) {\n let candidate = path;\n while (true) {\n try {\n assertCommandRequirements(context, requirements, modes, context.fs.capabilities.readOnly === true ? { readOnly: true } : {});\n const capabilities = await context.fs.capabilitiesFor?.(candidate, { signal: context.signal }) ?? context.fs.capabilities;\n assertCommandRequirements(context, requirements, modes, capabilities);\n break;\n } catch (error) {\n context.signal.throwIfAborted();\n if (codeOf(error) === \"ENOTSUP\" || codeOf(error) === \"EROFS\") {\n throw new FsError(codeOf(error) === \"EROFS\" ? \"EROFS\" : \"ENOTSUP\", { syscall: command, path, cause: error });\n }\n if (codeOf(error) !== \"ENOENT\" || candidate === \"/\") throw error;\n candidate = dirname(candidate);\n }\n }\n }\n}\n", "import { FsError, type CommandContext, type DirectoryEntry } from \"../contracts/index.js\";\nimport { yieldTurn } from \"../contracts/yield.js\";\n\nexport function createDirectoryReader(maxEntries = 10000) {\n if (!Number.isSafeInteger(maxEntries) || maxEntries < 0) {\n throw new RangeError(\"maxDirectoryEntries must be a nonnegative safe integer\");\n }\n return async (context: CommandContext, path: string, ordered = false): Promise<DirectoryEntry[]> => {\n context.signal.throwIfAborted();\n const entries = await context.fs.readdir(path, { signal: context.signal, maxEntries });\n context.signal.throwIfAborted();\n if (entries.length > maxEntries) {\n throw new FsError(\"EFBIG\", { syscall: \"readdir\", path, message: \"directory entry limit exceeded\" });\n }\n await yieldTurn(context.signal);\n if (ordered) {\n for (let index = 1; index < entries.length; index++) {\n if (index % 256 === 0) await yieldTurn(context.signal);\n if (entries[index - 1]!.name > entries[index]!.name) {\n return entries.slice().sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0);\n }\n }\n }\n return entries;\n };\n}\n\nexport type DirectoryReader = ReturnType<typeof createDirectoryReader>;\n", "import { type CommandContext, type CommandDefinition, type FileStat } from \"../contracts/index.js\";\nimport { codeOf, define, pathOf, UsageError } from \"./internal.js\";\nimport { assertCommandRequirements } from \"../contracts/command-requirements.js\";\nimport { predicateRequirements } from \"./portable-requirements.js\";\n\ntype Predicate = () => Promise<boolean>;\n\nconst maxExpressionDepth = 256;\n\nasync function metadata(context: CommandContext, path: string, link = false): Promise<FileStat | undefined> {\n assertCommandRequirements(context, predicateRequirements, [\"metadata\"]);\n try {\n if (context.fs.capabilitiesFor) assertCommandRequirements(context, predicateRequirements, [\"metadata\"],\n await context.fs.capabilitiesFor(pathOf(context, path), { signal: context.signal }));\n return await context.fs[link ? \"lstat\" : \"stat\"](pathOf(context, path), { signal: context.signal });\n }\n catch (error) {\n context.signal.throwIfAborted();\n if ([\"ENOENT\", \"ENOTDIR\", \"EACCES\", \"ELOOP\"].includes(codeOf(error) ?? \"\")) return undefined;\n throw error;\n }\n}\n\nexport function predicateCommands(): CommandDefinition[] {\n return [\"test\", \"[\"].map(name => define(name, async context => {\n const args = [...context.args];\n if (name === \"[\") {\n if (args.pop() !== \"]\") throw new UsageError(\"missing ']'\");\n }\n if (!args.length) return { exitCode: 1 };\n if (args.length === 1) return { exitCode: args[0] ? 0 : 1 };\n if (args.length === 2 && args[0] === \"!\") return { exitCode: args[1] ? 1 : 0 };\n const unary = new Set([\"-n\", \"-z\", \"-e\", \"-a\", \"-f\", \"-d\", \"-L\", \"-h\", \"-s\", \"-r\", \"-w\", \"-x\"]);\n const binary = new Set([\"=\", \"==\", \"!=\", \"<\", \">\", \"-eq\", \"-ne\", \"-lt\", \"-le\", \"-gt\", \"-ge\", \"-nt\", \"-ot\", \"-ef\"]);\n let offset = 0;\n const number = (text: string): bigint => {\n if (!/^[ \\t]*[+-]?[0-9]+[ \\t]*$/u.test(text)) throw new UsageError(`integer expression expected: '${text}'`);\n return BigInt(text.trim());\n };\n const primary = (depth: number): Predicate => {\n const token = args[offset++];\n if (token === undefined) throw new UsageError(\"argument expected\");\n if ((token === \"!\" || token === \"(\") && !binary.has(args[offset] ?? \"\")) {\n if (depth >= maxExpressionDepth) throw new UsageError(`expression nesting exceeds ${maxExpressionDepth}`);\n if (token === \"!\") { const inner = primary(depth + 1); return async () => !await inner(); }\n const inner = disjunction(depth + 1);\n if (args[offset++] !== \")\") throw new UsageError(\"missing ')'\");\n return inner;\n }\n const operator = args[offset];\n if (operator !== undefined && binary.has(operator)) {\n offset++;\n const right = args[offset++];\n if (right === undefined) throw new UsageError(\"binary operator requires two operands\");\n return async () => {\n if (operator === \"=\" || operator === \"==\") return token === right;\n if (operator === \"!=\") return token !== right;\n if (operator === \"<\") return token < right;\n if (operator === \">\") return token > right;\n if ([\"-nt\", \"-ot\", \"-ef\"].includes(operator)) {\n const leftStat = await metadata(context, token);\n const rightStat = await metadata(context, right);\n if (operator === \"-nt\") return leftStat !== undefined && (!rightStat || leftStat.mtimeMs > rightStat.mtimeMs);\n if (operator === \"-ot\") return rightStat !== undefined && (!leftStat || leftStat.mtimeMs < rightStat.mtimeMs);\n return leftStat?.ino !== undefined && rightStat?.ino !== undefined && leftStat.ino === rightStat.ino && leftStat.dev === rightStat.dev;\n }\n const leftNumber = number(token);\n const rightNumber = number(right);\n if (operator === \"-eq\") return leftNumber === rightNumber;\n if (operator === \"-ne\") return leftNumber !== rightNumber;\n if (operator === \"-lt\") return leftNumber < rightNumber;\n if (operator === \"-le\") return leftNumber <= rightNumber;\n if (operator === \"-gt\") return leftNumber > rightNumber;\n return leftNumber >= rightNumber;\n };\n }\n if (unary.has(token)) {\n const operand = args[offset++];\n if (operand === undefined) throw new UsageError(\"unary operator requires an operand\");\n return async () => {\n if (token === \"-n\") return operand !== \"\";\n if (token === \"-z\") return operand === \"\";\n if ([\"-r\", \"-w\", \"-x\"].includes(token)) {\n assertCommandRequirements(context, predicateRequirements, [\"access\"]);\n try {\n if (context.fs.capabilitiesFor) assertCommandRequirements(context, predicateRequirements, [\"access\"],\n await context.fs.capabilitiesFor(pathOf(context, operand), { signal: context.signal }));\n await context.fs.access(pathOf(context, operand), token === \"-r\" ? 4 : token === \"-w\" ? 2 : 1, { signal: context.signal });\n return true;\n }\n catch (error) { context.signal.throwIfAborted(); if ([\"ENOENT\", \"ENOTDIR\", \"EACCES\", \"EROFS\"].includes(codeOf(error) ?? \"\")) return false; throw error; }\n }\n const stat = await metadata(context, operand, token === \"-L\" || token === \"-h\");\n if (!stat) return false;\n if (token === \"-f\") return stat.type === \"file\";\n if (token === \"-d\") return stat.type === \"directory\";\n if (token === \"-L\" || token === \"-h\") return stat.type === \"symlink\";\n if (token === \"-s\") return stat.size > 0;\n return true;\n };\n }\n return async () => token !== \"\";\n };\n const conjunction = (depth: number): Predicate => {\n let predicate = primary(depth);\n while (args[offset] === \"-a\") {\n offset++;\n const left = predicate;\n const right = primary(depth);\n predicate = async () => await left() && await right();\n }\n return predicate;\n };\n const disjunction = (depth: number): Predicate => {\n let predicate = conjunction(depth);\n while (args[offset] === \"-o\") {\n offset++;\n const left = predicate;\n const right = conjunction(depth);\n predicate = async () => await left() || await right();\n }\n return predicate;\n };\n const evaluate = disjunction(0);\n if (offset !== args.length) throw new UsageError(`unexpected argument '${args[offset]}'`);\n return { exitCode: await evaluate() ? 0 : 1 };\n })).map(command => ({ ...command, filesystemRequirements: predicateRequirements }));\n}\n", "import { createOutputOperation, FsError, type ByteSource, type CommandContext, type CommandDefinition } from \"../contracts/index.js\";\nimport { openFileOutput, type FileOutput } from \"../contracts/filesystem-output.js\";\nimport { outputFailure } from \"../contracts/io.js\";\nimport { assertCommandRequirements, type CommandFileSystemRequirement } from \"../contracts/command-requirements.js\";\nimport { inputRequirements } from \"./portable-requirements.js\";\nimport { followTail, parseTailFollow } from \"./tail-follow.js\";\nimport {\n assertInputRequirements, bufferLimit, concatenate, define, diagnostic, encoder, escapeBytes, input, integer,\n lines, options, output, pathOf, UsageError, value,\n} from \"./internal.js\";\n\nconst inspectedInputRequirements: readonly CommandFileSystemRequirement[] = inputRequirements.map(mode => mode.id === \"file\" ? { ...mode, capabilities: [\"stat\", \"access\"] } : mode);\nconst countRequirements: readonly CommandFileSystemRequirement[] = [\n ...inputRequirements,\n { id: \"width\", description: \"Inspect file sizes for column widths\", capabilities: [\"stat\"] },\n];\nconst teeRequirements: readonly CommandFileSystemRequirement[] = [\n { id: \"stdout\", description: \"Copy standard input to standard output\", capabilities: [] },\n { id: \"overwrite\", description: \"Write output files\", capabilities: [], anyOf: [[\"streamingWrite\"], [\"write\", \"append\"]], mutates: true },\n { id: \"append\", description: \"Append to output files\", capabilities: [], anyOf: [[\"streamingAppend\"], [\"append\"]], mutates: true },\n];\nconst streamRequirements: Readonly<Record<string, readonly CommandFileSystemRequirement[]>> = {\n cat: inputRequirements, head: inspectedInputRequirements, tail: inspectedInputRequirements,\n wc: countRequirements, tee: teeRequirements, tr: [],\n};\n\nasync function* combinedInput(context: CommandContext, names: readonly string[], state: { exitCode: number }): ByteSource {\n for (const name of names.length ? names : [\"-\"]) {\n try { yield* input(context, name); }\n catch (error) { await diagnostic(context, error); state.exitCode = 1; }\n }\n}\n\nasync function prefix(context: CommandContext, source: ByteSource, count: number, bytes: boolean, skip: boolean): Promise<void> {\n let remaining = count;\n if (!remaining && !skip) return;\n for await (const chunk of source) {\n context.signal.throwIfAborted();\n let offset = 0;\n if (remaining) {\n if (bytes) { offset = Math.min(chunk.length, remaining); remaining -= offset; }\n else {\n for (; offset < chunk.length && remaining; offset++) if (chunk[offset] === 10) remaining--;\n }\n }\n if (skip) { if (!remaining && offset < chunk.length) await output(context, chunk.subarray(offset)); }\n else {\n if (offset) await output(context, chunk.subarray(0, offset));\n if (!remaining) return;\n }\n }\n}\n\nasync function suffix(context: CommandContext, source: ByteSource, count: number, bytes: boolean, omit: boolean): Promise<void> {\n let pending: Uint8Array[] = [];\n let start = 0;\n let size = 0;\n const records: ByteSource = bytes ? source : (async function* () {\n for await (const line of lines(source)) yield line.terminated ? concatenate([line.bytes, Uint8Array.of(10)]) : line.bytes;\n })();\n for await (const chunk of records) {\n context.signal.throwIfAborted();\n if (bytes && !chunk.length) continue;\n pending.push(new Uint8Array(chunk));\n size += chunk.length;\n if (bytes) {\n let excess = Math.max(0, size - count);\n while (excess && start < pending.length) {\n const first = pending[start]!;\n const consume = Math.min(excess, first.length);\n if (omit) await output(context, first.subarray(0, consume));\n if (consume === first.length) delete pending[start++];\n else {\n const remaining = first.subarray(consume);\n pending[start] = remaining.length * 2 <= first.buffer.byteLength ? new Uint8Array(remaining) : remaining;\n }\n size -= consume; excess -= consume;\n }\n } else while (pending.length - start > count) {\n const first = pending[start++]!;\n size -= first.length;\n if (omit) await output(context, first);\n }\n if (size > bufferLimit) throw new FsError(\"EFBIG\", { message: \"tail buffer limit exceeded\" });\n if (start > 1024) { pending = pending.slice(start); start = 0; }\n }\n if (!omit) for (const chunk of pending.slice(start)) await output(context, chunk);\n}\n\nfunction wcUtf8(consume: (point: number | undefined) => void) {\n let remaining = 0;\n let lead = 0;\n let point = 0;\n let first = false;\n return {\n write(bytes: Uint8Array): void {\n for (const byte of bytes) {\n if (remaining) {\n const continuation = byte >= 0x80 && byte <= 0xbf\n && (!first || (lead !== 0xe0 || byte >= 0xa0) && (lead !== 0xed || byte <= 0x9f)\n && (lead !== 0xf0 || byte >= 0x90) && (lead !== 0xf4 || byte <= 0x8f));\n if (continuation) {\n point = point * 64 + (byte & 0x3f);\n first = false;\n if (--remaining === 0) consume(point);\n continue;\n }\n consume(undefined);\n remaining = 0;\n }\n if (byte < 0x80) consume(byte);\n else if (byte >= 0xc2 && byte <= 0xf4) {\n lead = byte;\n remaining = byte < 0xe0 ? 1 : byte < 0xf0 ? 2 : 3;\n point = byte & (remaining === 1 ? 0x1f : remaining === 2 ? 0x0f : 0x07);\n first = true;\n } else consume(undefined);\n }\n },\n finish(): void { if (remaining) consume(undefined); remaining = 0; },\n };\n}\n\nfunction wcSpace(point: number, posix: boolean): boolean {\n return point === 32 || point >= 9 && point <= 13 || point === 0xa0 || point === 0x1680\n || point >= 0x2000 && point <= 0x200a || point === 0x2028 || point === 0x2029\n || point === 0x202f || point === 0x205f || point === 0x3000 || !posix && point === 0x2060;\n}\n\nfunction headTail(name: \"head\" | \"tail\", maxTailFollowHandles = 64): CommandDefinition {\n return define(name, async context => {\n const args = context.args[0] && /^-[0-9]+$/u.test(context.args[0]) ? [\"-n\", context.args[0].slice(1), ...context.args.slice(1)] : context.args;\n const follow = name === \"tail\" ? parseTailFollow(args) : undefined;\n const parsed = options(follow?.args ?? args, \"n:c:qv\", { lines: \"n\", bytes: \"c\", quiet: \"q\", silent: \"q\", verbose: \"v\" });\n if (parsed.flags.has(\"n\") && parsed.flags.has(\"c\")) throw new UsageError(\"cannot combine line and byte counts\");\n const bytes = parsed.flags.has(\"c\");\n const amount = value(parsed, bytes ? \"c\" : \"n\") ?? \"10\";\n const positive = amount.startsWith(\"+\");\n const negative = amount.startsWith(\"-\");\n const count = integer(amount.replace(/^[+-]/u, \"\"));\n const names = parsed.operands.length ? parsed.operands : [\"-\"];\n if (follow?.mode) return followTail(context, {\n names, mode: follow.mode, idleMs: follow.idleMs, count, bytes, positive,\n headers: parsed.flags.has(\"v\") || names.length > 1 && !parsed.flags.has(\"q\"),\n }, maxTailFollowHandles, (target, source) => positive\n ? prefix(target, source, Math.max(0, count - 1), bytes, true)\n : suffix(target, source, count, bytes, false));\n await assertInputRequirements(context, names);\n assertCommandRequirements(context, inspectedInputRequirements, [names.some(name => name !== \"-\") ? \"file\" : \"stdin\"]);\n let exitCode = 0;\n let headerWritten = false;\n for (const file of names) {\n try {\n if (file !== \"-\") {\n const path = pathOf(context, file);\n assertCommandRequirements(context, inspectedInputRequirements, [\"file\"], await context.fs.capabilitiesFor?.(path, { signal: context.signal }) ?? context.fs.capabilities);\n if ((await context.fs.stat(path, { signal: context.signal })).type === \"directory\") throw new FsError(\"EISDIR\", { path });\n await context.fs.access(path, 4, { signal: context.signal });\n }\n if (parsed.flags.has(\"v\") || names.length > 1 && !parsed.flags.has(\"q\")) {\n await output(context, `${headerWritten ? \"\\n\" : \"\"}==> ${file === \"-\" ? \"standard input\" : file} <==\\n`);\n headerWritten = true;\n }\n if (name === \"head\" && !negative) await prefix(context, input(context, file), count, bytes, false);\n else if (name === \"tail\" && positive) await prefix(context, input(context, file), Math.max(0, count - 1), bytes, true);\n else await suffix(context, input(context, file), count, bytes, name === \"head\");\n } catch (error) { await diagnostic(context, error); exitCode = 1; }\n }\n return { exitCode };\n });\n}\n\nfunction characterSet(specification: string): number[] {\n const classes: Record<string, number[]> = {\n lower: Array.from({ length: 26 }, (_, offset) => 97 + offset),\n upper: Array.from({ length: 26 }, (_, offset) => 65 + offset),\n digit: Array.from({ length: 10 }, (_, offset) => 48 + offset),\n space: [9, 10, 11, 12, 13, 32], blank: [9, 32],\n cntrl: [...Array.from({ length: 32 }, (_, offset) => offset), 127],\n graph: Array.from({ length: 94 }, (_, offset) => 33 + offset),\n print: Array.from({ length: 95 }, (_, offset) => 32 + offset),\n };\n classes.alpha = [...classes.upper!, ...classes.lower!];\n classes.alnum = [...classes.digit!, ...classes.alpha];\n classes.xdigit = [...classes.digit!, ...classes.upper!.slice(0, 6), ...classes.lower!.slice(0, 6)];\n classes.punct = classes.graph!.filter(byte => !classes.alnum!.includes(byte));\n const tokens: { bytes: number[]; literal: boolean }[] = [];\n for (let offset = 0; offset < specification.length;) {\n const classMatch = /^\\[:([a-z]+):\\]/u.exec(specification.slice(offset));\n if (classMatch) {\n const bytes = classes[classMatch[1]!];\n if (!bytes) throw new UsageError(`unknown character class '${classMatch[1]}'`);\n tokens.push({ bytes, literal: false }); offset += classMatch[0].length; continue;\n }\n if (specification.startsWith(\"[:\", offset)) throw new UsageError(\"unterminated character class\");\n if (specification[offset] === \"\\\\\") {\n const escape = /^\\\\(?:[0-7]{1,3}|x[0-9a-fA-F]{1,2}|.)/su.exec(specification.slice(offset));\n if (!escape) throw new UsageError(\"trailing backslash in character set\");\n const decoded = escapeBytes(escape[0]);\n tokens.push({ bytes: [...decoded.bytes], literal: false }); offset += escape[0].length; continue;\n }\n const character = String.fromCodePoint(specification.codePointAt(offset)!);\n tokens.push({ bytes: [...encoder.encode(character)], literal: character === \"-\" }); offset += character.length;\n }\n const result: number[] = [];\n for (let index = 0; index < tokens.length; index++) {\n const current = tokens[index]!;\n if (current.bytes.length === 1 && tokens[index + 1]?.literal && tokens[index + 2]?.bytes.length === 1) {\n const first = current.bytes[0]!;\n const last = tokens[index + 2]!.bytes[0]!;\n if (last < first) throw new UsageError(\"range endpoints are in reverse order\");\n for (let byte = first; byte <= last; byte++) result.push(byte);\n index += 2;\n } else result.push(...current.bytes);\n }\n return result;\n}\n\nexport function streamCommands(maxTeeTargets = 64, maxTailFollowHandles = 64): CommandDefinition[] {\n if (!Number.isSafeInteger(maxTeeTargets) || maxTeeTargets < 0) {\n throw new RangeError(\"maxTeeTargets must be a nonnegative safe integer\");\n }\n if (!Number.isSafeInteger(maxTailFollowHandles) || maxTailFollowHandles < 0) {\n throw new RangeError(\"maxTailFollowHandles must be a nonnegative safe integer\");\n }\n return [\n define(\"cat\", async context => {\n const parsed = options(context.args, \"nbsvETAute\", { number: \"n\", \"number-nonblank\": \"b\", \"squeeze-blank\": \"s\", \"show-ends\": \"E\", \"show-tabs\": \"T\", \"show-nonprinting\": \"v\", \"show-all\": \"A\" });\n await assertInputRequirements(context, parsed.operands);\n if (parsed.flags.has(\"A\")) for (const flag of [\"v\", \"E\", \"T\"]) parsed.flags.add(flag);\n if (parsed.flags.has(\"e\")) { parsed.flags.add(\"v\"); parsed.flags.add(\"E\"); }\n if (parsed.flags.has(\"t\")) { parsed.flags.add(\"v\"); parsed.flags.add(\"T\"); }\n const caller = context;\n const operation = parsed.operands.length && !parsed.operands.includes(\"-\") ? createOutputOperation(context, context.stdout) : undefined;\n if (operation) context = { ...context, signal: operation.signal, stdout: operation.output };\n try {\n const state = { exitCode: 0 };\n const source = combinedInput(context, parsed.operands, state);\n operation?.registerCleanup(async () => { await source[Symbol.asyncIterator]().return?.(); });\n if (![...parsed.flags].some(flag => flag !== \"u\")) {\n for await (const chunk of source) await output(context, chunk);\n return state;\n }\n let lineStart = true;\n let blankCount = 0;\n let number = 1;\n for await (const chunk of source) {\n const transformed: number[] = [];\n const append = (text: string) => { for (const byte of encoder.encode(text)) transformed.push(byte); };\n for (const byte of chunk) {\n if (lineStart && byte === 10 && parsed.flags.has(\"s\") && blankCount > 0) continue;\n if (lineStart && (parsed.flags.has(\"b\") ? byte !== 10 : parsed.flags.has(\"n\"))) append(`${String(number++).padStart(6)}\\t`);\n if (byte === 10) {\n if (parsed.flags.has(\"E\")) transformed.push(36);\n transformed.push(10);\n blankCount = lineStart ? blankCount + 1 : 0;\n lineStart = true;\n } else {\n lineStart = false; blankCount = 0;\n if (byte === 9) {\n if (parsed.flags.has(\"T\")) append(\"^I\");\n else transformed.push(byte);\n } else if (parsed.flags.has(\"v\")) {\n let visible = byte;\n if (visible >= 128) { append(\"M-\"); visible -= 128; }\n if (visible < 32) append(`^${String.fromCharCode(visible + 64)}`);\n else if (visible === 127) append(\"^?\");\n else transformed.push(visible);\n } else transformed.push(byte);\n }\n if (transformed.length >= 8192) { await output(context, Uint8Array.from(transformed)); transformed.length = 0; }\n }\n if (transformed.length) await output(context, Uint8Array.from(transformed));\n }\n return state;\n } catch (error) {\n caller.signal.throwIfAborted();\n if (operation?.signal.aborted && operation.signal.reason instanceof FsError && operation.signal.reason.code === \"EPIPE\") return { exitCode: 141 };\n throw error;\n } finally { await operation?.close(); }\n }),\n headTail(\"head\"), headTail(\"tail\", maxTailFollowHandles),\n define(\"wc\", async context => {\n const parsed = options(context.args, \"lwcm\", { lines: \"l\", words: \"w\", bytes: \"c\", chars: \"m\" });\n if (!parsed.flags.size) for (const flag of [\"l\", \"w\", \"c\"]) parsed.flags.add(flag);\n const selected = [\"l\", \"w\", \"m\", \"c\"].filter(flag => parsed.flags.has(flag));\n const names = parsed.operands.length ? parsed.operands : [\"-\"];\n await assertInputRequirements(context, names);\n const totals: Record<string, number> = { l: 0, w: 0, m: 0, c: 0 };\n const locale = context.env.LC_ALL || context.env.LC_CTYPE || context.env.LANG || \"C.UTF-8\";\n const singleByte = locale === \"C\" || locale === \"POSIX\";\n const posix = Object.hasOwn(context.env, \"POSIXLY_CORRECT\");\n let width = 1;\n if (names.length > 1 || selected.length > 1) {\n let totalSize = 0n;\n for (const name of names) {\n if (name === \"-\") { width = Math.max(width, 7); continue; }\n assertCommandRequirements(context, countRequirements, [\"width\"]);\n try {\n const stat = await context.fs.stat(pathOf(context, name), { signal: context.signal });\n if (stat.type !== \"file\") width = Math.max(width, 7);\n else if (Number.isSafeInteger(stat.size) && stat.size >= 0) totalSize += BigInt(stat.size);\n } catch { context.signal.throwIfAborted(); }\n }\n width = Math.max(width, totalSize.toString().length);\n }\n let exitCode = 0;\n const print = async (counts: Record<string, number>, name?: string) => output(context, selected.map(flag => String(counts[flag]).padStart(width)).join(\" \") + (name === undefined ? \"\" : ` ${name}`) + \"\\n\");\n for (const name of names) {\n const counts: Record<string, number> = { l: 0, w: 0, m: 0, c: 0 };\n let inWord = false;\n const word = (whitespace: boolean) => {\n if (!whitespace && !inWord) counts.w!++;\n inWord = !whitespace;\n };\n const utf8 = wcUtf8(point => {\n if (point !== undefined) counts.m!++;\n word(point !== undefined && wcSpace(point, posix));\n });\n try {\n for await (const chunk of input(context, name)) {\n context.signal.throwIfAborted();\n counts.c! += chunk.length;\n for (const byte of chunk) {\n if (byte === 10) counts.l!++;\n if (singleByte) word(byte === 32 || byte >= 9 && byte <= 13 || !posix && byte === 0xa0);\n }\n if (singleByte) counts.m! += chunk.length;\n else utf8.write(chunk);\n }\n if (!singleByte) utf8.finish();\n for (const field of Object.keys(totals)) totals[field]! += counts[field]!;\n await print(counts, parsed.operands.length ? name : undefined);\n } catch (error) { await diagnostic(context, error); exitCode = 1; }\n }\n if (names.length > 1) await print(totals, \"total\");\n return { exitCode };\n }),\n define(\"tee\", async context => {\n const parsed = options(context.args, \"a\", { append: \"a\" });\n if (parsed.operands.length > maxTeeTargets) {\n throw new UsageError(`too many tee targets (limit ${maxTeeTargets})`);\n }\n const targets = new Set<FileOutput>();\n let exitCode = 0;\n try {\n for (const operand of parsed.operands) {\n try {\n assertCommandRequirements(context, teeRequirements, [parsed.flags.has(\"a\") ? \"append\" : \"overwrite\"]);\n targets.add(await openFileOutput(context, pathOf(context, operand), parsed.flags.has(\"a\") ? \"a\" : \"w\"));\n }\n catch (error) {\n context.signal.throwIfAborted();\n await diagnostic(context, error);\n exitCode = 1;\n }\n }\n for await (const chunk of input(context)) {\n await output(context, chunk);\n for (const target of targets) {\n try { await target.sink.write(chunk); }\n catch (error) {\n context.signal.throwIfAborted();\n await target.abort(error);\n targets.delete(target);\n exitCode = 1;\n await diagnostic(context, error);\n }\n }\n }\n for (const target of targets) {\n try { await target.finish(); }\n catch (error) {\n context.signal.throwIfAborted();\n await diagnostic(context, error);\n exitCode = 1;\n }\n targets.delete(target);\n }\n return { exitCode };\n } catch (error) {\n await context.stdout[outputFailure]?.(error);\n throw error;\n } finally {\n await Promise.allSettled([...targets].map(target => target.abort(context.signal.aborted ? context.signal.reason : new FsError(\"ECANCELED\"))));\n }\n }),\n define(\"tr\", async context => {\n const parsed = options(context.args, \"dscC\", { delete: \"d\", \"squeeze-repeats\": \"s\", complement: \"c\" });\n const deleting = parsed.flags.has(\"d\");\n const squeezing = parsed.flags.has(\"s\");\n const translating = !deleting && parsed.operands.length === 2;\n if (parsed.operands.length < 1 || parsed.operands.length > 2 || !deleting && !squeezing && parsed.operands.length !== 2\n || deleting && !squeezing && parsed.operands.length !== 1 || deleting && squeezing && parsed.operands.length !== 2) throw new UsageError(\"invalid number of character sets\");\n let first = characterSet(parsed.operands[0]!);\n if (parsed.flags.has(\"c\") || parsed.flags.has(\"C\")) {\n const selected = new Set(first);\n first = Array.from({ length: 256 }, (_, offset) => offset).filter(byte => !selected.has(byte));\n }\n const second = parsed.operands[1] === undefined ? [] : characterSet(parsed.operands[1]);\n if (translating && !second.length) throw new UsageError(\"second character set must not be empty\");\n const mapping = Array.from({ length: 256 }, (_, offset) => offset);\n if (translating) first.forEach((byte, index) => { mapping[byte] = second[Math.min(index, second.length - 1)]!; });\n const removed = new Set(deleting ? first : []);\n const squeezed = new Set(squeezing ? parsed.operands.length === 2 ? second : first : []);\n let previous = -1;\n for await (const chunk of input(context)) {\n context.signal.throwIfAborted();\n const transformed = new Uint8Array(chunk.length);\n let count = 0;\n for (const byte of chunk) {\n if (removed.has(byte)) continue;\n const translated = mapping[byte]!;\n if (translated === previous && squeezed.has(translated)) continue;\n transformed[count++] = translated; previous = translated;\n }\n if (count) await output(context, transformed.subarray(0, count));\n }\n return { exitCode: 0 };\n }),\n ].map(command => ({ ...command, filesystemRequirements: streamRequirements[command.name]! }));\n}\n", "import type { CommandContext } from \"./command.js\";\nimport { FsError } from \"./errors.js\";\nimport { createBytePipe, outputFailure, type BytePipe, type ByteSink, type ByteSource } from \"./io.js\";\nimport { createOutputOperation } from \"./output.js\";\n\nconst filesystemOutputBudgets = new WeakMap<NonNullable<CommandContext[\"registerCleanup\"]>, (sink: ByteSink) => ByteSink>();\n\nexport type FileOutputContext = Pick<CommandContext, \"fs\" | \"signal\" | \"registerCleanup\">;\n\nexport function bindFileOutputBudget(context: Pick<CommandContext, \"registerCleanup\">, budget: (sink: ByteSink) => ByteSink): void {\n if (!context.registerCleanup) throw new TypeError(\"Shell output budgets require invocation cleanup ownership\");\n filesystemOutputBudgets.set(context.registerCleanup, budget);\n}\n\nexport async function writeFileOutput(context: Pick<CommandContext, \"signal\" | \"registerCleanup\">, bytes: Uint8Array, write: (bytes: Uint8Array) => Promise<void>): Promise<void> {\n context.signal.throwIfAborted();\n const budget = context.registerCleanup && filesystemOutputBudgets.get(context.registerCleanup);\n let pending: Promise<void> | undefined;\n const destination: ByteSink = { write(chunk) {\n context.signal.throwIfAborted();\n return pending = (async () => { await write(chunk); })();\n } };\n try { await (budget?.(destination) ?? destination).write(bytes); }\n catch (error) {\n // Shell sink cancellation may win its race before the direct host call.\n // Keep the original awaited-write lifetime without a retained cleanup hook.\n await pending?.catch(() => {});\n context.signal.throwIfAborted();\n throw error;\n }\n context.signal.throwIfAborted();\n}\n\nexport interface FileOutput {\n readonly sink: ByteSink;\n readonly signal: AbortSignal;\n finish(): Promise<void>;\n abort(reason: unknown): Promise<void>;\n}\n\nexport async function openFileOutput(context: FileOutputContext, path: string, flag: \"w\" | \"a\", incremental?: () => Promise<ByteSink>): Promise<FileOutput> {\n let pipe: BytePipe | undefined;\n let task: Promise<void> | undefined;\n let completed = false;\n let ended = false;\n let closing = false;\n let failure: { reason: unknown } | undefined;\n const consumer = new AbortController();\n let writes = Promise.resolve();\n let acknowledge: (() => void) | undefined;\n const acknowledgeWrite = (): void => {\n const accepted = acknowledge;\n acknowledge = undefined;\n accepted?.();\n };\n let ready!: () => void;\n const opened = new Promise<void>(resolve => { ready = resolve; });\n const destination: ByteSink = {\n [outputFailure]: reason => operation.abort(reason),\n async write(chunk) {\n if (closing) throw new FsError(\"EBADF\", { path, syscall: \"write\" });\n const writing = writes.then(async () => {\n for (let offset = 0; offset < chunk.byteLength; offset += 64 * 1024) {\n const accepted = new Promise<void>(resolve => { acknowledge = resolve; });\n await pipe!.writable.write(chunk.subarray(offset, offset + 64 * 1024));\n await accepted;\n if (failure) throw failure.reason;\n operation.signal.throwIfAborted();\n }\n });\n writes = writing.catch(() => {});\n await writing;\n },\n };\n const budget = context.registerCleanup && filesystemOutputBudgets.get(context.registerCleanup);\n const operation = createOutputOperation(context, budget?.(destination) ?? destination);\n operation.registerCleanup(async () => {\n closing = true;\n if (!completed) {\n void operation.abort(operation.signal.aborted ? operation.signal.reason : new FsError(\"ECANCELED\", { path, syscall: \"write\" }));\n await pipe?.abort(operation.signal.reason);\n }\n await task?.catch(() => {});\n await writes;\n });\n try {\n pipe = createBytePipe({ highWaterMark: 1, signal: operation.signal });\n let reading = false;\n const source: ByteSource = {\n [Symbol.asyncIterator]() {\n return (async function* () {\n reading = true;\n ready();\n for await (const chunk of pipe!.readable) {\n yield chunk;\n acknowledgeWrite();\n }\n operation.signal.throwIfAborted();\n ended = true;\n })();\n },\n };\n task = (async () => {\n const { fs } = context;\n const signal = operation.signal;\n signal.throwIfAborted();\n const capabilities = await fs.capabilitiesFor?.(path, { signal }) ?? fs.capabilities;\n if (capabilities.readOnly === true) throw new FsError(\"EROFS\", { path, syscall: \"write\" });\n try { await fs.access(path, 2, { signal }); }\n catch (error) {\n signal.throwIfAborted();\n if (!(error instanceof FsError) || error.code !== \"ENOENT\" && error.code !== \"ENOTSUP\") throw error;\n }\n signal.throwIfAborted();\n const streaming = flag === \"a\" ? capabilities.streamingAppend ?? capabilities.streamingWrite : capabilities.streamingWrite;\n if ((!incremental || capabilities.descriptorWriteStream === true) && streaming !== false && fs.writeStream) {\n try {\n await fs.writeStream(path, source, { flag, signal });\n if (!ended) throw new FsError(\"EIO\", { path, message: \"Streaming writer returned before consuming output\" });\n return;\n } catch (error) {\n signal.throwIfAborted();\n if (reading || !(error instanceof FsError) || error.code !== \"ENOTSUP\") throw error;\n }\n }\n if (flag === \"w\" && capabilities.write === false) throw new FsError(\"ENOTSUP\", { path, syscall: \"writeFile\" });\n if ((!incremental || flag === \"a\") && capabilities.append === false) throw new FsError(\"ENOTSUP\", { path, syscall: \"appendFile\" });\n const sink = incremental ? await incremental() : await (async (): Promise<ByteSink> => {\n if (flag === \"a\") await fs.appendFile(path, new Uint8Array(), { signal });\n else await fs.writeFile(path, new Uint8Array(), { flag, signal });\n return { write: chunk => fs.appendFile(path, chunk, { signal }) };\n })();\n for await (const chunk of source) {\n signal.throwIfAborted();\n await sink.write(chunk);\n }\n })();\n void task.then(acknowledgeWrite, error => {\n failure = { reason: error };\n acknowledgeWrite();\n if (!operation.signal.aborted) consumer.abort(error);\n void operation.abort(error).catch(() => {});\n });\n await Promise.race([opened, task]);\n operation.signal.throwIfAborted();\n const write = async (chunk: Uint8Array): Promise<void> => {\n try { await operation.output.write(chunk); }\n catch (error) { throw failure ? failure.reason : error; }\n };\n return {\n signal: operation.signal,\n sink: {\n [outputFailure]: destination[outputFailure]!,\n ownedOutput: { consumerClosed: consumer.signal, write },\n write,\n },\n async finish() {\n closing = true;\n try {\n await writes;\n await pipe!.close();\n await task;\n operation.signal.throwIfAborted();\n completed = true;\n } catch (error) { throw failure ? failure.reason : error; }\n finally { await operation.close(); }\n },\n abort: reason => operation.abort(reason),\n };\n } catch (error) {\n await operation.abort(error);\n throw error;\n }\n}\n", "import { PublicDiagnostic } from \"../diagnostics.js\";\nimport { createOutputOperation, FsError, type ByteSource, type CommandContext, type FileReadHandle, type FileStat, type OutputOperation } from \"../contracts/index.js\";\nimport { monotonicNow, yieldTurn } from \"../contracts/yield.js\";\nimport { compareCopyIdentity } from \"./copy-identity.js\";\nimport { diagnostic, output, pathOf, UsageError } from \"./internal.js\";\n\nexport interface TailFollowScheduler {\n now(): number;\n setTimeout(callback: () => void, milliseconds: number): unknown;\n clearTimeout(handle: unknown): void;\n}\n\nexport const tailFollowScheduler: TailFollowScheduler = {\n now: monotonicNow,\n setTimeout: (callback, milliseconds) => setTimeout(callback, milliseconds),\n clearTimeout: handle => clearTimeout(handle as ReturnType<typeof setTimeout>),\n};\n\nexport function parseTailFollow(arguments_: readonly string[]): { args: string[]; mode: \"f\" | \"F\" | undefined; idleMs: number | undefined } {\n const args: string[] = [];\n let mode: \"f\" | \"F\" | undefined;\n let idleMs: number | undefined;\n let ended = false;\n for (let index = 0; index < arguments_.length; index++) {\n const argument = arguments_[index]!;\n if (ended || argument === \"-\" || !argument.startsWith(\"-\")) { args.push(argument); continue; }\n if (argument === \"--\") { ended = true; args.push(argument); continue; }\n if (argument === \"--max-idle\" || argument.startsWith(\"--max-idle=\")) {\n const text = argument === \"--max-idle\" ? arguments_[++index] : argument.slice(11);\n if (text === undefined || !/^(?:[0-9]+(?:\\.[0-9]+)?|\\.[0-9]+)$/u.test(text)) throw new UsageError(\"max-idle must be nonnegative decimal seconds\");\n const [whole = \"\", fraction = \"\"] = text.split(\".\");\n if (fraction.slice(3).split(\"\").some(digit => digit !== \"0\")) throw new UsageError(\"max-idle must resolve to integer milliseconds\");\n const milliseconds = BigInt(whole || \"0\") * 1000n + BigInt(fraction.slice(0, 3).padEnd(3, \"0\"));\n if (milliseconds > BigInt(Number.MAX_SAFE_INTEGER)) throw new UsageError(\"max-idle exceeds safe milliseconds\");\n idleMs = Number(milliseconds);\n } else if (argument.startsWith(\"--\")) {\n args.push(argument);\n if ((argument === \"--lines\" || argument === \"--bytes\") && index + 1 < arguments_.length) args.push(arguments_[++index]!);\n } else {\n let kept = \"-\";\n for (let offset = 1; offset < argument.length; offset++) {\n const flag = argument[offset]!;\n if (flag === \"f\" || flag === \"F\") mode = flag;\n else {\n kept += flag;\n if (flag === \"n\" || flag === \"c\") {\n kept += argument.slice(offset + 1);\n if (offset + 1 === argument.length && index + 1 < arguments_.length) {\n args.push(kept, arguments_[++index]!);\n kept = \"-\";\n }\n break;\n }\n }\n }\n if (kept !== \"-\") args.push(kept);\n }\n }\n if (idleMs !== undefined && mode === undefined) throw new UsageError(\"max-idle requires -f or -F\");\n return { args, mode, idleMs };\n}\n\ninterface Reader {\n readonly handle: FileReadHandle;\n closing?: Promise<void>;\n}\n\ninterface FollowEntry {\n readonly name: string;\n reader: Reader | undefined;\n identity: FileStat | undefined;\n offset: number;\n error: string | undefined;\n active: boolean;\n}\n\ninterface FollowSelection {\n readonly names: readonly string[];\n readonly mode: \"f\" | \"F\";\n readonly idleMs: number | undefined;\n readonly count: number;\n readonly bytes: boolean;\n readonly positive: boolean;\n readonly headers: boolean;\n}\n\nconst idleExpired = Symbol(\"tail idle expired\");\n\nclass FollowSession {\n readonly operation: OutputOperation;\n readonly context: CommandContext;\n readonly readers = new Set<Reader>();\n readonly pending = new Set<Promise<void>>();\n readonly waiting = new Set<() => void>();\n readonly failures: unknown[] = [];\n accepting = true;\n opening = 0;\n closeFailed = false;\n private drain: Promise<void> | undefined;\n private stdin: { iterator: AsyncIterator<Uint8Array>; finished: boolean; closing?: Promise<void> } | undefined;\n\n constructor(readonly caller: CommandContext, readonly cap: number, readonly scheduler: TailFollowScheduler) {\n this.operation = createOutputOperation(caller, caller.stdout);\n this.context = { ...caller, stdout: this.operation.output, signal: this.operation.signal };\n this.operation.registerCleanup(() => this.close());\n }\n\n assertOpen(): void {\n this.caller.signal.throwIfAborted();\n this.operation.signal.throwIfAborted();\n if (!this.accepting || this.closeFailed) throw new Error(\"Tail follow admission is closed\");\n }\n\n wait<Value>(pending: Promise<Value> | undefined, milliseconds?: number): Promise<Value | typeof idleExpired> {\n this.assertOpen();\n return new Promise((resolve, reject) => {\n let settled = false;\n let timer: unknown;\n let armed = false;\n const finish = (outcome: { value: Value | typeof idleExpired } | { reason: unknown }) => {\n if (settled) return;\n settled = true;\n this.waiting.delete(cancel);\n this.operation.signal.removeEventListener(\"abort\", cancel);\n try { if (armed) this.scheduler.clearTimeout(timer); }\n catch (reason) { this.failures.push(reason); if (!(\"reason\" in outcome)) outcome = { reason }; }\n if (\"reason\" in outcome) reject(outcome.reason);\n else resolve(outcome.value);\n };\n const cancel = () => finish({ reason: this.operation.signal.aborted ? this.operation.signal.reason : new PublicDiagnostic(\"Tail follow is closed\") });\n this.waiting.add(cancel);\n this.operation.signal.addEventListener(\"abort\", cancel, { once: true });\n pending?.then(value => finish({ value }), reason => finish({ reason }));\n if (milliseconds !== undefined) {\n try {\n timer = this.scheduler.setTimeout(() => finish({ value: idleExpired }), Math.min(2_147_483_647, Math.max(0, milliseconds)));\n armed = true;\n } catch (reason) { finish({ reason }); }\n }\n if (this.operation.signal.aborted || !this.accepting) cancel();\n });\n }\n\n async work<Value>(start: () => Promise<Value>): Promise<Value> {\n this.assertOpen();\n const pending = Promise.resolve().then(() => { this.assertOpen(); return start(); });\n const settled = pending.then(() => {}, () => {});\n this.pending.add(settled);\n void settled.then(() => { this.pending.delete(settled); });\n return await this.wait(pending) as Value;\n }\n\n async open(name: string): Promise<Reader> {\n this.assertOpen();\n if (this.readers.size + this.opening >= this.cap) throw new FsError(\"EMFILE\", { message: \"maxTailFollowHandles exhausted\" });\n this.opening++;\n try {\n return await this.work(async () => {\n const path = pathOf(this.context, name);\n const capabilities = await this.caller.fs.capabilitiesFor?.(path, { signal: this.operation.signal }) ?? this.caller.fs.capabilities;\n this.assertOpen();\n if (capabilities.retainedRead !== true || typeof this.caller.fs.openReadFile !== \"function\") throw new FsError(\"ENOTSUP\", { path, message: \"tail follow requires retainedRead and openReadFile\" });\n const handle = await this.caller.fs.openReadFile(path, { signal: this.operation.signal });\n const reader = { handle };\n this.readers.add(reader);\n if (!this.accepting || this.operation.signal.aborted) { await this.release(reader); this.assertOpen(); }\n return reader;\n });\n } finally { this.opening--; }\n }\n\n release(reader: Reader): Promise<void> {\n reader.closing ??= Promise.resolve().then(() => reader.handle.close()).then(() => {\n this.readers.delete(reader);\n }, reason => {\n this.closeFailed = true;\n this.failures.push(reason);\n throw reason;\n });\n void reader.closing.catch(() => {});\n return reader.closing;\n }\n\n async stat(reader: Reader): Promise<FileStat> {\n const stat = await this.work(() => reader.handle.stat({ signal: this.operation.signal }));\n if (stat.type !== \"file\") throw new FsError(\"EISDIR\");\n if (!Number.isSafeInteger(stat.size) || stat.size < 0) throw new FsError(\"EIO\", { message: \"invalid retained file size\" });\n return stat;\n }\n\n async read(reader: Reader, offset: number, end: number): Promise<Uint8Array> {\n const maximum = Math.min(64 * 1024, end - offset);\n const chunk = await this.work(() => reader.handle.read(offset, maximum, { signal: this.operation.signal }));\n if (!(chunk instanceof Uint8Array) || chunk.byteLength > maximum) throw new FsError(\"EIO\", { message: \"invalid retained read result\" });\n return chunk;\n }\n\n closeInput(): Promise<void> {\n const stdin = this.stdin;\n if (!stdin) return Promise.resolve();\n stdin.closing ??= Promise.resolve().then(async () => { if (!stdin.finished) await stdin.iterator.return?.(); }).catch(reason => {\n this.failures.push(reason);\n throw reason;\n });\n void stdin.closing.catch(() => {});\n return stdin.closing;\n }\n\n async *input(idleMs: number | undefined): ByteSource {\n this.assertOpen();\n const stdin = { iterator: this.caller.stdin[Symbol.asyncIterator](), finished: false };\n this.stdin = stdin;\n let deadline = idleMs === undefined ? undefined : this.scheduler.now() + idleMs;\n let failed = false;\n try {\n while (true) {\n const pending = Promise.resolve().then(() => { this.assertOpen(); return stdin.iterator.next(); });\n const result = await this.wait(pending, deadline === undefined ? undefined : Math.max(0, deadline - this.scheduler.now()));\n if (result === idleExpired) break;\n if (result.done) { stdin.finished = true; break; }\n if (!(result.value instanceof Uint8Array)) throw new TypeError(\"Shell stdin must yield Uint8Array\");\n yield result.value;\n if (result.value.byteLength && idleMs !== undefined) deadline = this.scheduler.now() + idleMs;\n await yieldTurn(this.caller.signal);\n }\n } catch (reason) {\n failed = true;\n throw reason;\n } finally {\n await this.closeInput().catch(reason => { if (!failed) throw reason; });\n }\n }\n\n close(): Promise<void> {\n if (!this.drain) {\n this.accepting = false;\n for (const cancel of this.waiting) cancel();\n this.drain = Promise.resolve().then(async () => {\n await Promise.allSettled([...this.pending, ...[...this.readers].map(reader => this.release(reader)), this.closeInput()]);\n if (this.failures.length === 1) throw this.failures[0];\n if (this.failures.length) throw new AggregateError(this.failures, \"Tail follow cleanup failed\");\n });\n }\n return this.drain;\n }\n}\n\nclass FollowReadError {\n constructor(readonly reason: unknown) {}\n}\n\nexport async function followTail(\n caller: CommandContext,\n selection: FollowSelection,\n cap: number,\n select: (context: CommandContext, source: ByteSource) => Promise<void>,\n scheduler: TailFollowScheduler = tailFollowScheduler,\n): Promise<{ exitCode: number }> {\n const named = selection.names.filter(name => name !== \"-\").length;\n if (named + Number(selection.mode === \"F\" && named > 0) > cap) throw new UsageError(`maxTailFollowHandles exceeded (limit ${cap})`);\n if (selection.mode === \"F\" && selection.names.includes(\"-\")) throw new FsError(\"ENOTSUP\", { message: \"cannot follow standard input by name\" });\n const session = new FollowSession(caller, cap, scheduler);\n const context = session.context;\n const entries: FollowEntry[] = selection.names.map(name => ({ name, reader: undefined, identity: undefined, offset: 0, error: undefined, active: name !== \"-\" }));\n let lastHeader: FollowEntry | undefined;\n let exitCode = 0;\n let primary: { reason: unknown } | undefined;\n let acknowledged = scheduler.now();\n const header = async (entry: FollowEntry) => {\n if (selection.headers && lastHeader !== entry) {\n await output(context, `${lastHeader ? \"\\n\" : \"\"}==> ${entry.name === \"-\" ? \"standard input\" : entry.name} <==\\n`);\n lastHeader = entry;\n }\n };\n const failure = async (entry: FollowEntry, reason: unknown, initial: boolean) => {\n session.assertOpen();\n if (!(reason instanceof FsError) || ![\"ENOENT\", \"ENOTDIR\", \"EACCES\", \"EPERM\", \"EISDIR\"].includes(reason.code)) throw reason;\n if (initial) exitCode = 1;\n if (initial && reason.code === \"EISDIR\" || !initial && reason.code === \"EACCES\" && entry.reader) await header(entry);\n if (entry.error !== reason.code) await diagnostic(context, reason);\n entry.error = reason.code;\n if (entry.reader) { await session.release(entry.reader); entry.reader = undefined; }\n if (selection.mode === \"f\") { entry.active = false; exitCode = 1; }\n };\n const acquire = async (entry: FollowEntry, initial: boolean): Promise<FileStat | undefined> => {\n let candidate: Reader | undefined;\n let stat: FileStat;\n try {\n candidate = await session.open(entry.name);\n stat = await session.stat(candidate);\n if (selection.mode === \"F\" && compareCopyIdentity(stat, stat) === \"unknown\") throw new FsError(\"ENOTSUP\", { path: entry.name, message: \"name follow requires complete retained identity\" });\n } catch (reason) {\n if (candidate) {\n try { await session.release(candidate); }\n catch { throw reason; }\n }\n await failure(entry, reason, initial);\n return undefined;\n }\n if (entry.reader && compareCopyIdentity(entry.identity, stat) === \"same\") {\n await session.release(candidate);\n return stat;\n }\n const replaced = entry.reader !== undefined;\n if (entry.reader) await session.release(entry.reader);\n entry.reader = candidate;\n entry.identity = stat;\n entry.offset = 0;\n if (!initial) {\n const message = replaced ? \"has been replaced; following new file\" : entry.error === \"ENOENT\" ? \"has appeared; following new file\" : \"has become accessible\";\n await diagnostic(context, new PublicDiagnostic(`'${entry.name}' ${message}`));\n }\n entry.error = undefined;\n return stat;\n };\n try {\n for (const entry of entries) {\n if (entry.name === \"-\") {\n await header(entry);\n await select(context, session.input(selection.idleMs));\n continue;\n }\n const stat = await acquire(entry, true);\n if (!stat) {\n if (entry.error === \"EISDIR\" && selection.positive && !selection.bytes) break;\n continue;\n }\n await header(entry);\n if (!selection.positive && selection.count === 0) entry.offset = stat.size;\n else {\n if (selection.bytes && !selection.positive) entry.offset = Math.max(0, stat.size - selection.count);\n const source = (async function* (): ByteSource {\n while (entry.offset < stat.size) {\n let chunk: Uint8Array;\n try { chunk = await session.read(entry.reader!, entry.offset, stat.size); }\n catch (reason) { throw new FollowReadError(reason); }\n if (!chunk.byteLength) break;\n yield chunk;\n entry.offset += chunk.byteLength;\n await yieldTurn(caller.signal);\n }\n })();\n try { await select(context, source); }\n catch (reason) {\n if (!(reason instanceof FollowReadError)) throw reason;\n await failure(entry, reason.reason, true);\n }\n if (selection.bytes && selection.positive) entry.offset = Math.max(entry.offset, selection.count - 1);\n }\n }\n acknowledged = scheduler.now();\n if (selection.idleMs !== 0 && !(selection.positive && !selection.bytes && entries.some(entry => entry.error === \"EISDIR\"))) {\n while (entries.some(entry => entry.active)) {\n session.assertOpen();\n if (selection.idleMs !== undefined && scheduler.now() - acknowledged >= selection.idleMs) break;\n const round: { entry: FollowEntry; end: number }[] = [];\n for (const entry of entries) {\n if (!entry.active) continue;\n let stat: FileStat | undefined;\n if (selection.mode === \"F\") stat = await acquire(entry, false);\n else {\n try { stat = await session.stat(entry.reader!); }\n catch (reason) { await failure(entry, reason, false); }\n }\n if (!stat) continue;\n if (stat.size < entry.offset) {\n await diagnostic(context, new PublicDiagnostic(`${entry.name}: file truncated`));\n entry.offset = 0;\n }\n if (stat.size > entry.offset) round.push({ entry, end: stat.size });\n }\n let progressed = false;\n while (round.some(item => item.entry.reader && item.entry.offset < item.end)) {\n for (const item of round) {\n const { entry } = item;\n if (!entry.reader || entry.offset >= item.end) continue;\n let chunk: Uint8Array;\n try { chunk = await session.read(entry.reader, entry.offset, item.end); }\n catch (reason) { await failure(entry, reason, false); item.end = entry.offset; continue; }\n if (!chunk.byteLength) { item.end = entry.offset; continue; }\n await header(entry);\n await output(context, chunk);\n entry.offset += chunk.byteLength;\n acknowledged = scheduler.now();\n progressed = true;\n await yieldTurn(caller.signal);\n }\n }\n await yieldTurn(caller.signal);\n if (!progressed && entries.some(entry => entry.active)) {\n const remaining = selection.idleMs === undefined ? 100 : Math.min(100, selection.idleMs - (scheduler.now() - acknowledged));\n if (remaining <= 0) break;\n await session.wait<void>(undefined, remaining);\n }\n }\n }\n } catch (reason) { primary = { reason }; }\n finally {\n try { await session.operation.close(); }\n catch (reason) { primary ??= { reason }; }\n }\n caller.signal.throwIfAborted();\n if (primary) {\n if (session.operation.signal.aborted && session.operation.signal.reason instanceof FsError && session.operation.signal.reason.code === \"EPIPE\") return { exitCode: 141 };\n throw primary.reason;\n }\n return { exitCode };\n}\n", "import { PublicDiagnostic } from \"../diagnostics.js\";\nimport { FsError, type ByteSource, type CommandContext, type CommandDefinition } from \"../contracts/index.js\";\nimport { assertInputRequirements, bufferLimit, concatenate, define, diagnostic, encoder, input, integer, lines, options, output, pathOf, requireOperands, UsageError, value } from \"./internal.js\";\nimport { assertCommandRequirements } from \"../contracts/command-requirements.js\";\nimport { inputRequirements, textOutputRequirements } from \"./portable-requirements.js\";\nimport { yieldTurn } from \"../contracts/yield.js\";\nimport { RecordBuffer } from \"./record-buffer.js\";\nimport { SortRecordBudget } from \"./sort-admission.js\";\n\nclass SortWork {\n #pending = 0;\n\n constructor(readonly signal: AbortSignal) {}\n\n charge(units = 1): Promise<void> | undefined {\n this.signal.throwIfAborted();\n this.#pending += units;\n if (this.#pending >= 4096) return this.#checkpoint();\n }\n\n async #checkpoint(): Promise<void> {\n while (this.#pending >= 4096) {\n this.#pending -= 4096;\n await yieldTurn(this.signal);\n this.signal.throwIfAborted();\n }\n }\n}\n\nasync function sortRecords<Record>(records: Record[], compare: (left: Record, right: Record) => Promise<number>, work: SortWork): Promise<Record[]> {\n if (records.length < 2) return records;\n let source = records;\n let target = new Array<Record>(records.length);\n for (let width = 1; width < records.length; width *= 2) {\n for (let begin = 0; begin < records.length; begin += width * 2) {\n const middle = Math.min(begin + width, records.length);\n const end = Math.min(begin + width * 2, records.length);\n let left = begin;\n let right = middle;\n for (let index = begin; index < end; index++) {\n const checkpoint = work.charge();\n if (checkpoint) await checkpoint;\n if (left < middle && (right === end || await compare(source[left]!, source[right]!) <= 0)) target[index] = source[left++]!;\n else target[index] = source[right++]!;\n }\n }\n [source, target] = [target, source];\n }\n return source;\n}\n\ninterface CutRange { start: number; end: number }\n\nasync function cutRanges(list: string, work: SortWork): Promise<CutRange[]> {\n const ranges: CutRange[] = [];\n let tokenStart = 0;\n let dash = -1;\n let start = 0;\n let end = 0;\n let invalid = false;\n for (let index = 0; index <= list.length; index++) {\n const checkpoint = work.charge();\n if (checkpoint) await checkpoint;\n const character = list[index];\n if (character === \",\" || character === \" \" || index === list.length) {\n if (index === tokenStart) {\n if (index === 0 || index === list.length) throw new UsageError(\"invalid range ''\");\n tokenStart = index + 1;\n continue;\n }\n if (invalid || (dash === tokenStart && dash === index - 1)) throw new UsageError(`invalid range '${list.slice(tokenStart, index)}'`);\n if (dash === tokenStart) start = 1;\n if (dash < 0) end = start;\n const openEnd = dash >= 0 && dash === index - 1;\n if (openEnd) end = Infinity;\n if (!Number.isSafeInteger(start) || start < 1) throw new UsageError(`invalid number '${list.slice(tokenStart, dash < 0 ? index : dash)}'`);\n if (!openEnd && (!Number.isSafeInteger(end) || end < 1)) throw new UsageError(`invalid number '${list.slice(dash < 0 ? tokenStart : dash + 1, index)}'`);\n if (end < start) throw new UsageError(`decreasing range '${list.slice(tokenStart, index)}'`);\n ranges.push({ start, end });\n tokenStart = index + 1;\n dash = -1;\n start = 0;\n end = 0;\n invalid = false;\n } else if (character === \"-\" && dash < 0) {\n dash = index;\n } else {\n const digit = list.charCodeAt(index) - 48;\n if (digit < 0 || digit > 9) invalid = true;\n else if (dash < 0) start = start * 10 + digit;\n else end = end * 10 + digit;\n }\n }\n const ordered = await sortRecords(ranges, async (left, right) => left.start - right.start, work);\n const normalized: CutRange[] = [];\n for (const range of ordered) {\n const checkpoint = work.charge();\n if (checkpoint) await checkpoint;\n const previous = normalized.at(-1);\n if (previous && range.start <= previous.end + 1) previous.end = Math.max(previous.end, range.end);\n else normalized.push(range);\n }\n return normalized;\n}\n\nclass CutOutput {\n readonly #buffer = new Uint8Array(64 * 1024);\n #used = 0;\n\n constructor(readonly context: CommandContext, readonly work: SortWork) {}\n\n async write(bytes: Uint8Array): Promise<void> {\n for (let offset = 0; offset < bytes.length;) {\n const length = Math.min(4096, bytes.length - offset, this.#buffer.length - this.#used);\n const checkpoint = this.work.charge(length);\n if (checkpoint) await checkpoint;\n this.#buffer.set(bytes.subarray(offset, offset + length), this.#used);\n this.#used += length;\n offset += length;\n if (this.#used === this.#buffer.length) await this.flush();\n }\n }\n\n async text(text: string): Promise<void> {\n for (let offset = 0; offset < text.length;) {\n let end = Math.min(offset + 4096, text.length);\n const last = text.charCodeAt(end - 1);\n if (end < text.length && last >= 0xd800 && last <= 0xdbff) end--;\n await this.write(encoder.encode(text.slice(offset, end)));\n offset = end;\n }\n }\n\n async flush(): Promise<void> {\n if (!this.#used) return;\n const bytes = this.#buffer.slice(0, this.#used);\n this.#used = 0;\n await output(this.context, bytes);\n }\n}\n\nasync function cutFieldBoundary(record: Buffer, separator: Uint8Array, start: number, work: SortWork): Promise<number> {\n for (let offset = start; offset < record.length; offset += 4096) {\n const window = record.subarray(offset, Math.min(record.length, offset + 4096 + separator.length - 1));\n const found = window.indexOf(separator);\n const checkpoint = work.charge(found < 0 ? Math.min(4096, window.length) : found + separator.length);\n if (checkpoint) await checkpoint;\n if (found >= 0) return offset + found;\n }\n return -1;\n}\n\nasync function compareSortBytes(left: Uint8Array, right: Uint8Array, work: SortWork): Promise<number> {\n const length = Math.min(left.length, right.length);\n for (let offset = 0; offset < length; offset += 1024) {\n const end = Math.min(offset + 1024, length);\n await work.charge(2 * (end - offset));\n const compared = Buffer.compare(left.subarray(offset, end), right.subarray(offset, end));\n if (compared) return compared;\n }\n return left.length - right.length;\n}\n\nasync function foldSortBytes(bytes: Uint8Array, work: SortWork): Promise<Uint8Array> {\n const folded = new Uint8Array(bytes.length);\n for (let offset = 0; offset < bytes.length; offset += 1024) {\n const end = Math.min(offset + 1024, bytes.length);\n await work.charge(end - offset);\n for (let index = offset; index < end; index++) {\n const byte = bytes[index]!;\n folded[index] = byte >= 97 && byte <= 122 ? byte - 32 : byte;\n }\n }\n return folded;\n}\n\nasync function admitTextOutput(context: CommandContext, destination: string | undefined): Promise<void> {\n if (destination === undefined) return;\n assertCommandRequirements(context, textOutputRequirements, [\"output\"]);\n if (context.fs.capabilitiesFor) assertCommandRequirements(context, textOutputRequirements, [\"output\"],\n await context.fs.capabilitiesFor(pathOf(context, destination), { signal: context.signal }));\n}\n\nfunction compareBytes(left: Uint8Array, right: Uint8Array): number { return Buffer.compare(left, right); }\nfunction fold(bytes: Uint8Array): Uint8Array { return bytes.map(byte => byte >= 97 && byte <= 122 ? byte - 32 : byte); }\n\ninterface NumericValue { whole: string; fraction: string; negative: boolean; suffixRank: number }\n\nasync function parseNumeric(bytes: Uint8Array, work: SortWork, human = false): Promise<NumericValue> {\n await work.charge(bytes.length);\n const match = /^[ \\t]*(-?)([0-9]*)(?:\\.([0-9]*))?/u.exec(Buffer.from(bytes).toString(\"latin1\"))!;\n const whole = (match[2] ?? \"\").replace(/^0+/u, \"\") || \"0\";\n const fraction = (match[3] ?? \"\").replace(/0+$/u, \"\");\n const nonzero = whole !== \"0\" || fraction !== \"\";\n const suffix = bytes[match[0].length];\n const suffixRank = human && nonzero ? \"KMGTPEZYRQ\".indexOf(String.fromCharCode(suffix === 107 ? 75 : suffix ?? 0)) + 1 : 0;\n return { whole, fraction, negative: match[1] === \"-\" && nonzero, suffixRank };\n}\n\nasync function compareNumericValues(first: NumericValue, second: NumericValue, work: SortWork): Promise<number> {\n if (first.negative !== second.negative) return first.negative ? -1 : 1;\n let compared = first.suffixRank - second.suffixRank;\n if (!compared) compared = first.whole.length - second.whole.length;\n if (!compared) {\n for (let offset = 0; offset < first.whole.length && !compared; offset += 1024) {\n const end = Math.min(offset + 1024, first.whole.length);\n await work.charge(2 * (end - offset));\n const firstWhole = first.whole.slice(offset, end);\n const secondWhole = second.whole.slice(offset, end);\n compared = firstWhole < secondWhole ? -1 : firstWhole > secondWhole ? 1 : 0;\n }\n }\n if (!compared) {\n const width = Math.max(first.fraction.length, second.fraction.length);\n for (let offset = 0; offset < width && !compared; offset += 1024) {\n const end = Math.min(offset + 1024, width);\n await work.charge(2 * (end - offset));\n const firstFraction = first.fraction.slice(offset, end).padEnd(end - offset, \"0\");\n const secondFraction = second.fraction.slice(offset, end).padEnd(end - offset, \"0\");\n compared = firstFraction < secondFraction ? -1 : firstFraction > secondFraction ? 1 : 0;\n }\n }\n return first.negative ? -compared : compared;\n}\n\ninterface SortKey { start: number; startCharacter: number; end?: number; endCharacter?: number; flags: Set<string> }\n\nfunction sortKey(specification: string): SortKey {\n const match = /^([0-9]+)(?:\\.([0-9]+))?([bfhnr]*)(?:,([0-9]+)(?:\\.([0-9]+))?([bfhnr]*))?$/u.exec(specification);\n if (!match) throw new UsageError(`invalid key '${specification}'`);\n return {\n start: integer(match[1]!, 1), startCharacter: integer(match[2] ?? \"1\", 1),\n ...(match[4] === undefined ? {} : { end: integer(match[4], 1) }),\n ...(match[5] === undefined ? {} : { endCharacter: integer(match[5], 1) }),\n flags: new Set((match[3] ?? \"\") + (match[6] ?? \"\")),\n };\n}\n\nasync function keyBytes(line: Uint8Array, key: SortKey, separator: number | undefined, blanks: boolean, work: SortWork): Promise<Uint8Array> {\n const fields: { start: number; end: number }[] = [];\n if (separator !== undefined) {\n let start = 0;\n for (let offset = 0; offset <= line.length; offset++) {\n if (offset > 0 && offset % 1024 === 0) await work.charge(1024);\n if (offset === line.length || line[offset] === separator) {\n fields.push({ start, end: offset }); start = offset + 1;\n }\n }\n } else {\n let offset = 0;\n while (offset < line.length) {\n const leading = offset;\n while (offset < line.length && (line[offset] === 32 || line[offset] === 9)) {\n if (++offset % 1024 === 0) await work.charge(1024);\n }\n const start = blanks ? offset : leading;\n if (offset === line.length) break;\n while (offset < line.length && line[offset] !== 32 && line[offset] !== 9) {\n if (++offset % 1024 === 0) await work.charge(1024);\n }\n fields.push({ start, end: offset });\n }\n }\n await work.charge(line.length % 1024);\n const start = (fields[key.start - 1]?.start ?? line.length) + key.startCharacter - 1;\n const last = key.end === undefined ? undefined : fields[key.end - 1];\n const end = key.end === undefined ? line.length : last === undefined ? line.length\n : key.endCharacter === undefined ? last.end : Math.min(last.end, last.start + key.endCharacter);\n return line.subarray(Math.min(start, line.length), Math.max(start, end));\n}\n\nasync function emitRecords(context: CommandContext, records: ByteSource, destination?: string): Promise<void> {\n if (destination === undefined) { for await (const bytes of records) await output(context, bytes); return; }\n await admitTextOutput(context, destination);\n if (context.fs.writeStream && context.fs.capabilities.streamingWrite !== false) await context.fs.writeStream(pathOf(context, destination), records, { signal: context.signal });\n else {\n if (context.fs.capabilities.write === false) throw new FsError(\"ENOTSUP\", { syscall: \"writeFile\", path: pathOf(context, destination) });\n let size = 0;\n const chunks: Uint8Array[] = [];\n for await (const bytes of records) {\n size += bytes.length;\n if (size > bufferLimit) throw new FsError(\"EFBIG\", { message: \"output buffer limit exceeded\" });\n chunks.push(bytes);\n }\n await context.fs.writeFile(pathOf(context, destination), concatenate(chunks, size), { signal: context.signal });\n }\n}\n\nasync function collectSortRecords(\n source: ByteSource, delimiter: number, budget: SortRecordBudget, signal: AbortSignal,\n accept: (bytes: Uint8Array) => boolean | void | Promise<boolean | void>,\n): Promise<boolean> {\n const pending = new RecordBuffer(bufferLimit);\n const admit = (length: number): void => {\n signal.throwIfAborted();\n budget.admit(length);\n };\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] !== delimiter) continue;\n const accepted = accept(pending.finish(admit, chunk, start, offset));\n if ((accepted instanceof Promise ? await accepted : accepted) === false) return false;\n start = offset + 1;\n }\n pending.append(chunk, start);\n }\n if (pending.size) return await accept(pending.finish(admit)) !== false;\n return true;\n } finally { pending.clear(); }\n}\n\nexport function textCommands(): CommandDefinition[] {\n return [\n define(\"sort\", async context => {\n const parsed = options(context.args, \"hnrfbuszt:k:o:c\", { \"human-numeric-sort\": \"h\", \"numeric-sort\": \"n\", reverse: \"r\", \"ignore-case\": \"f\", \"ignore-leading-blanks\": \"b\", unique: \"u\", stable: \"s\", \"zero-terminated\": \"z\", \"field-separator\": \"t\", key: \"k\", output: \"o\", check: \"c\" });\n await assertInputRequirements(context, parsed.operands);\n if (!parsed.flags.has(\"c\")) await admitTextOutput(context, value(parsed, \"o\"));\n const separatorText = value(parsed, \"t\");\n if (separatorText !== undefined && encoder.encode(separatorText).length !== 1) throw new UsageError(\"field separator must be one byte\");\n const separator = separatorText === undefined ? undefined : encoder.encode(separatorText)[0];\n const keys = (parsed.values.get(\"k\") ?? []).map(sortKey);\n for (const key of keys.length ? keys : [undefined]) {\n const flags = key?.flags.size ? key.flags : parsed.flags;\n if (flags.has(\"h\") && flags.has(\"n\")) throw new UsageError(\"options '-hn' are incompatible\");\n }\n const simple = !keys.length && ![\"b\", \"f\", \"h\", \"n\"].some(flag => parsed.flags.has(flag));\n const direction = parsed.flags.has(\"r\") ? -1 : 1;\n const work = new SortWork(context.signal);\n let compareNumeric = async (left: Uint8Array, right: Uint8Array, human: boolean) => compareNumericValues(await parseNumeric(left, work, human), await parseNumeric(right, work, human), work);\n if (!keys.length && (parsed.flags.has(\"n\") || parsed.flags.has(\"h\")) && ![\"b\", \"f\", \"c\"].some(flag => parsed.flags.has(flag))) {\n const numericValues = new Map<Uint8Array, NumericValue>();\n let retainedBytes = 0;\n const numericValue = async (bytes: Uint8Array): Promise<NumericValue> => {\n const cached = numericValues.get(bytes);\n if (cached !== undefined) return cached;\n context.signal.throwIfAborted();\n const charge = 6 * bytes.length + 10;\n if (numericValues.size >= 16_384 || charge > 1_048_576 - retainedBytes) return parseNumeric(bytes, work, parsed.flags.has(\"h\"));\n const parsedValue = await parseNumeric(bytes, work, parsed.flags.has(\"h\"));\n numericValues.set(bytes, parsedValue);\n retainedBytes += charge;\n return parsedValue;\n };\n compareNumeric = async (left, right) => compareNumericValues(await numericValue(left), await numericValue(right), work);\n }\n let keyCompare = async (left: Uint8Array, right: Uint8Array) => {\n const checkpoint = work.charge();\n if (checkpoint) await checkpoint;\n if (simple) return await compareSortBytes(left, right, work) * direction;\n for (const key of keys.length ? keys : [undefined]) {\n await work.charge();\n const flags = key?.flags.size ? key.flags : parsed.flags;\n let first = key ? await keyBytes(left, key, separator, flags.has(\"b\"), work) : left;\n let second = key ? await keyBytes(right, key, separator, flags.has(\"b\"), work) : right;\n if (!key && flags.has(\"b\")) {\n const trim = async (bytes: Uint8Array) => {\n let offset = 0;\n while (bytes[offset] === 9 || bytes[offset] === 32) {\n if (++offset % 1024 === 0) await work.charge(1024);\n }\n await work.charge(offset % 1024);\n return bytes.subarray(offset);\n };\n first = await trim(first); second = await trim(second);\n }\n if (flags.has(\"f\")) { first = await foldSortBytes(first, work); second = await foldSortBytes(second, work); }\n let result = flags.has(\"n\") || flags.has(\"h\") ? await compareNumeric(first, second, flags.has(\"h\")) : await compareSortBytes(first, second, work);\n if (flags.has(\"r\")) result = -result;\n if (result) return result;\n }\n return 0;\n };\n const numericKey = keys.length === 1 ? keys[0] : undefined;\n const numericKeyFlags = numericKey?.flags.size ? numericKey.flags : parsed.flags;\n if (numericKey && (numericKeyFlags.has(\"n\") || numericKeyFlags.has(\"h\")) && ![\"b\", \"f\"].some(flag => numericKeyFlags.has(flag)) && !parsed.flags.has(\"c\")) {\n const keyedNumericValues = new Map<Uint8Array, NumericValue>();\n let retainedKeyBytes = 0;\n const keyedNumericValue = async (record: Uint8Array): Promise<NumericValue> => {\n const cached = keyedNumericValues.get(record);\n if (cached !== undefined) return cached;\n context.signal.throwIfAborted();\n const bytes = await keyBytes(record, numericKey, separator, false, work);\n const charge = 6 * bytes.length + 10;\n if (keyedNumericValues.size >= 16_384 || charge > 1_048_576 - retainedKeyBytes) return parseNumeric(bytes, work, numericKeyFlags.has(\"h\"));\n const parsedValue = await parseNumeric(bytes, work, numericKeyFlags.has(\"h\"));\n keyedNumericValues.set(record, parsedValue);\n retainedKeyBytes += charge;\n return parsedValue;\n };\n keyCompare = async (left, right) => {\n const checkpoint = work.charge();\n if (checkpoint) await checkpoint;\n const result = await compareNumericValues(await keyedNumericValue(left), await keyedNumericValue(right), work);\n return numericKeyFlags.has(\"r\") ? -result : result;\n };\n }\n const compare = async (left: Uint8Array, right: Uint8Array) => {\n const result = await keyCompare(left, right);\n return result || (simple || parsed.flags.has(\"s\") || parsed.flags.has(\"u\") ? 0 : await compareSortBytes(left, right, work) * direction);\n };\n const records: Uint8Array[] = [];\n const recordBudget = new SortRecordBudget();\n const exitCode: number = 0;\n const delimiter = parsed.flags.has(\"z\") ? 0 : 10;\n for (const name of parsed.operands.length ? parsed.operands : [\"-\"]) {\n try {\n const complete = await collectSortRecords(input(context, name), delimiter, recordBudget, context.signal, bytes => {\n context.signal.throwIfAborted();\n if (!parsed.flags.has(\"c\")) { records.push(bytes); return; }\n return (async () => {\n if (records.length && (await compare(records.at(-1)!, bytes) > 0 || parsed.flags.has(\"u\") && await keyCompare(records.at(-1)!, bytes) === 0)) {\n await diagnostic(context, new PublicDiagnostic(`disorder at record ${records.length + 1}`));\n return false;\n }\n records.push(bytes);\n })();\n });\n if (!complete) return { exitCode: 1 };\n } catch (error) { await diagnostic(context, error); return { exitCode: 2 }; }\n }\n if (parsed.flags.has(\"c\")) return { exitCode };\n const ordered = await sortRecords(records, compare, work);\n const sorted = (async function* (): ByteSource {\n let previous: Uint8Array | undefined;\n let buffer = new Uint8Array(64 * 1024);\n let used = 0;\n for (const record of ordered) {\n context.signal.throwIfAborted();\n if (parsed.flags.has(\"u\") && previous !== undefined && await keyCompare(previous, record) === 0) continue;\n let offset = 0;\n while (offset < record.length) {\n const length = Math.min(record.length - offset, buffer.length - used);\n buffer.set(record.subarray(offset, offset + length), used);\n offset += length; used += length;\n if (used === buffer.length) { yield buffer; buffer = new Uint8Array(64 * 1024); used = 0; }\n }\n buffer[used++] = delimiter;\n if (used === buffer.length) { yield buffer; buffer = new Uint8Array(64 * 1024); used = 0; }\n previous = record;\n }\n if (used) yield buffer.subarray(0, used);\n })();\n await emitRecords(context, sorted, value(parsed, \"o\"));\n return { exitCode };\n }),\n define(\"uniq\", async context => {\n const parsed = options(context.args, \"cduif:s:w:z\", { count: \"c\", repeated: \"d\", unique: \"u\", \"ignore-case\": \"i\", \"skip-fields\": \"f\", \"skip-chars\": \"s\", \"check-chars\": \"w\", \"zero-terminated\": \"z\" });\n requireOperands(parsed.operands, 0, 2);\n await assertInputRequirements(context, parsed.operands.slice(0, 1));\n await admitTextOutput(context, parsed.operands[1]);\n const skipFields = integer(value(parsed, \"f\") ?? \"0\");\n const skipCharacters = integer(value(parsed, \"s\") ?? \"0\");\n const width = value(parsed, \"w\") === undefined ? Infinity : integer(value(parsed, \"w\")!);\n const delimiter = parsed.flags.has(\"z\") ? 0 : 10;\n const key = (bytes: Uint8Array) => {\n let offset = 0;\n for (let field = 0; field < skipFields; field++) {\n while (offset < bytes.length && (bytes[offset] === 32 || bytes[offset] === 9)) offset++;\n while (offset < bytes.length && bytes[offset] !== 32 && bytes[offset] !== 9) offset++;\n }\n offset += skipCharacters;\n const result = bytes.subarray(offset, width === Infinity ? undefined : offset + width);\n return parsed.flags.has(\"i\") ? fold(result) : result;\n };\n const records = (async function* (): ByteSource {\n let previous: Uint8Array | undefined;\n let previousKey: Uint8Array | undefined;\n let count = 0;\n const selected = () => (!parsed.flags.has(\"d\") || count > 1) && (!parsed.flags.has(\"u\") || count === 1);\n const record = () => concatenate([...(parsed.flags.has(\"c\") ? [encoder.encode(`${String(count).padStart(7)} `)] : []), previous!, Uint8Array.of(delimiter)]);\n for await (const line of lines(input(context, parsed.operands[0]), delimiter)) {\n context.signal.throwIfAborted();\n const currentKey = key(line.bytes);\n if (previousKey && compareBytes(previousKey, currentKey) === 0) count++;\n else {\n if (previous !== undefined && selected()) yield record();\n previous = line.bytes; previousKey = currentKey; count = 1;\n }\n }\n if (previous !== undefined && selected()) yield record();\n })();\n if (parsed.operands[1] !== undefined && parsed.operands[0] !== \"-\"\n && pathOf(context, parsed.operands[0]!) === pathOf(context, parsed.operands[1])) throw new UsageError(\"input and output must be different files\");\n await emitRecords(context, records, parsed.operands[1]);\n return { exitCode: 0 };\n }),\n define(\"cut\", async context => {\n const parsed = options(context.args, \"b:c:f:d:szo:C\", { bytes: \"b\", characters: \"c\", fields: \"f\", delimiter: \"d\", \"only-delimited\": \"s\", \"zero-terminated\": \"z\", \"output-delimiter\": \"o\", complement: \"C\" });\n await assertInputRequirements(context, parsed.operands);\n const modes = [\"b\", \"c\", \"f\"].filter(mode => parsed.flags.has(mode));\n if (modes.length !== 1) throw new UsageError(\"exactly one byte, character, or field list is required\");\n const mode = modes[0]!;\n if (mode !== \"f\" && (parsed.flags.has(\"d\") || parsed.flags.has(\"s\"))) throw new UsageError(\"delimiter options require field mode\");\n const work = new SortWork(context.signal);\n const ranges = await cutRanges(value(parsed, mode)!, work);\n const complement = parsed.flags.has(\"C\");\n const delimiter = value(parsed, \"d\") ?? \"\\t\";\n if (delimiter.length !== (delimiter.codePointAt(0)! > 0xffff ? 2 : 1)) throw new UsageError(\"delimiter must be a single character\");\n const outputDelimiter = value(parsed, \"o\");\n const recordDelimiter = parsed.flags.has(\"z\") ? 0 : 10;\n const separator = Buffer.from(delimiter);\n const writer = new CutOutput(context, work);\n let exitCode = 0;\n for (const name of parsed.operands.length ? parsed.operands : [\"-\"]) {\n try {\n for await (const line of lines(input(context, name), recordDelimiter)) {\n context.signal.throwIfAborted();\n let cursor = 0;\n const selected = (position: number) => {\n while (cursor < ranges.length && position > ranges[cursor]!.end) cursor++;\n return (cursor < ranges.length && position >= ranges[cursor]!.start) !== complement;\n };\n if (mode === \"f\") {\n const record = Buffer.from(line.bytes.buffer, line.bytes.byteOffset, line.bytes.byteLength);\n let boundary = await cutFieldBoundary(record, separator, 0, work);\n if (boundary < 0) {\n if (parsed.flags.has(\"s\")) continue;\n await writer.write(line.bytes);\n } else {\n let field = 1;\n let start = 0;\n let emitted = false;\n while (true) {\n const checkpoint = work.charge();\n if (checkpoint) await checkpoint;\n if (selected(field++)) {\n if (emitted) await writer.text(outputDelimiter ?? delimiter);\n await writer.write(record.subarray(start, boundary < 0 ? record.length : boundary));\n emitted = true;\n }\n if (boundary < 0) break;\n start = boundary + separator.length;\n boundary = await cutFieldBoundary(record, separator, start, work);\n }\n }\n } else if (mode === \"b\") {\n let emitted = false;\n let previousIncluded = false;\n for (let offset = 0; offset < line.bytes.length; offset += 4096) {\n const end = Math.min(line.bytes.length, offset + 4096);\n const checkpoint = work.charge(end - offset);\n if (checkpoint) await checkpoint;\n let start = -1;\n for (let index = offset; index < end; index++) {\n const included = selected(index + 1);\n if (included && start < 0) {\n if (!previousIncluded && emitted && outputDelimiter !== undefined) await writer.text(outputDelimiter);\n start = index;\n emitted = true;\n }\n if (!included && start >= 0) { await writer.write(line.bytes.subarray(start, index)); start = -1; }\n previousIncluded = included;\n }\n if (start >= 0) await writer.write(line.bytes.subarray(start, end));\n }\n } else {\n const decoder = new TextDecoder(\"utf-8\", { ignoreBOM: true });\n let index = 0;\n let emitted = false;\n let previousIncluded = false;\n for (let offset = 0; offset < line.bytes.length; offset += 4096) {\n const end = Math.min(line.bytes.length, offset + 4096);\n const checkpoint = work.charge(end - offset);\n if (checkpoint) await checkpoint;\n const text = decoder.decode(line.bytes.subarray(offset, end), { stream: end < line.bytes.length });\n let start = -1;\n let position = 0;\n for (const character of text) {\n const checkpoint = work.charge();\n if (checkpoint) await checkpoint;\n const included = selected(++index);\n if (included && start < 0) {\n if (!previousIncluded && emitted && outputDelimiter !== undefined) await writer.text(outputDelimiter);\n start = position;\n emitted = true;\n }\n if (!included && start >= 0) { await writer.text(text.slice(start, position)); start = -1; }\n position += character.length;\n previousIncluded = included;\n }\n if (start >= 0) await writer.text(text.slice(start));\n }\n }\n await writer.write(Uint8Array.of(recordDelimiter));\n await writer.flush();\n }\n } catch (error) { await diagnostic(context, error); exitCode = 1; }\n }\n return { exitCode };\n }),\n ].map(command => ({ ...command, filesystemRequirements: command.name === \"cut\" ? inputRequirements : textOutputRequirements }));\n}\n", "import { FsError } from \"../contracts/index.js\";\nimport { bufferLimit } from \"./internal.js\";\n\n/** Invocation-wide admission for owned sort records, not a host-memory estimate. */\nexport class SortRecordBudget {\n #records = 0;\n #bytes = 0;\n\n admit(byteLength: number): void {\n const bytes = byteLength + 1;\n if (this.#records >= 100_000 || bytes > bufferLimit - this.#bytes) {\n throw new FsError(\"EFBIG\", { message: \"sort buffer limit exceeded\" });\n }\n this.#records++;\n this.#bytes += bytes;\n }\n}\n", "import { FsError, getCommandArguments, readBytes, type ByteSource, type CommandDefinition, type CommandHandler } from \"../contracts/index.js\";\nimport { writeDiagnostic } from \"../escaping.js\";\nimport { shellValueByteLength } from \"../contracts/value.js\";\nimport { define, emptyInput, encoder, escapeBytes, integer, options, output, pathOf, replaceArgument, UsageError, value } from \"./internal.js\";\nimport { EnvSplitError, parseEnvOptions } from \"./env-split.js\";\n\nexport interface ExecutionCommandsOptions {\n readonly maxParallelProcesses?: number;\n}\n\nexport function directExecutor(fallback: CommandHandler): CommandHandler {\n return async context => {\n context.signal.throwIfAborted();\n const argumentValues = getCommandArguments(context);\n const invoke = context.invoke;\n if (invoke) return invoke(context.command, argumentValues.args, {\n argumentValues,\n stdin: context.stdin, cwd: context.cwd, env: context.env, stdout: context.stdout, stderr: context.stderr,\n ...(context.stdinIsDefault === undefined ? {} : { stdinIsDefault: context.stdinIsDefault }),\n });\n return fallback({ ...context, args: argumentValues.args, argumentValues });\n };\n}\n\nasync function* argumentsFrom(source: ByteSource, signal: AbortSignal, delimiter?: string, replacement = false): AsyncGenerator<string> {\n const utf8 = new TextDecoder(\"utf-8\", { fatal: true });\n let current = \"\";\n let active = false;\n let escaped = false;\n let quote = \"\";\n const parse = function* (text: string): Generator<string> {\n for (const character of text) {\n if (delimiter !== undefined) {\n if (character === delimiter) { yield current; current = \"\"; active = false; }\n else { current += character; active = true; }\n } else if (escaped) { current += character; active = true; escaped = false; }\n else if (quote) {\n if (character === \"\\n\") throw new UsageError(\"unmatched quote in input\");\n if (character === quote) quote = \"\";\n else current += character;\n } else if (character === \"\\\\\") { escaped = true; active = true; }\n else if (character === \"'\" || character === '\"') { quote = character; active = true; }\n else if (character === \"\\n\" || !replacement && /[ \\t\\r\\v\\f]/u.test(character)) {\n if (active) { yield current; current = \"\"; active = false; }\n } else if (replacement && !active && /[ \\t]/u.test(character)) continue;\n else { current += character; active = true; }\n if (current.length > 131072) throw new UsageError(\"argument exceeds 128 KiB limit\");\n }\n };\n for await (const chunk of readBytes(source, signal)) { signal.throwIfAborted(); yield* parse(utf8.decode(chunk, { stream: true })); }\n yield* parse(utf8.decode());\n if (quote || escaped) throw new UsageError(quote ? \"unmatched quote in input\" : \"trailing backslash in input\");\n if (active) yield current;\n}\n\nexport function executionCommands(execute: CommandHandler, configuration: ExecutionCommandsOptions = {}): CommandDefinition[] {\n const configured = configuration.maxParallelProcesses;\n const maxParallelProcesses = configured === undefined ? 4 : configured;\n if (!Number.isSafeInteger(maxParallelProcesses) || maxParallelProcesses < 1) throw new RangeError(\"maxParallelProcesses must be a positive safe integer\");\n return [\n define(\"env\", async context => {\n const argumentValues = getCommandArguments(context);\n let parsed: Awaited<ReturnType<typeof parseEnvOptions>>;\n try { parsed = await parseEnvOptions(argumentValues.args, context.env, context.signal, argumentValues); }\n catch (error) {\n context.signal.throwIfAborted();\n if (!(error instanceof EnvSplitError)) throw error;\n await writeDiagnostic(context.stderr, `${context.command}: ${error.message}\\n`, context.signal);\n return { exitCode: 125 };\n }\n const env: Record<string, string> = Object.assign(Object.create(null) as Record<string, string>, parsed.flags.has(\"i\") ? {} : context.env);\n for (const name of parsed.values.get(\"u\") ?? []) delete env[name];\n const inheritedNames = Object.keys(env);\n const addedNames: string[] = [];\n let offset = 0;\n while (parsed.operands[offset]?.includes(\"=\")) {\n const assignment = parsed.operands[offset++]!;\n const equals = assignment.indexOf(\"=\");\n const name = assignment.slice(0, equals);\n if (!name || name.includes(\"\\0\")) throw new UsageError(\"invalid environment variable name\");\n const content = assignment.slice(equals + 1);\n if (content.includes(\"\\0\")) throw new UsageError(\"environment values cannot contain NUL\");\n if (!Object.hasOwn(env, name)) addedNames.push(name);\n env[name] = content;\n }\n const names = [...addedNames.reverse(), ...inheritedNames];\n if (offset < parsed.operands.length && parsed.flags.has(\"0\")) throw new UsageError(\"cannot specify --null with a command\");\n let cwd = context.cwd;\n const directory = value(parsed, \"C\");\n if (directory !== undefined) {\n cwd = pathOf(context, directory);\n if ((await context.fs.stat(cwd, { signal: context.signal })).type !== \"directory\") throw new FsError(\"ENOTDIR\", { path: cwd });\n cwd = await context.fs.realpath(cwd, { signal: context.signal });\n }\n if (offset < parsed.operands.length) {\n const childArguments = parsed.operandValues!.slice(offset + 1);\n const childEnv: Record<string, string> = Object.assign(Object.create(null) as Record<string, string>, Object.fromEntries(names.map(name => [name, env[name]!])));\n if (context.invoke) return context.invoke(parsed.operands[offset]!, childArguments.args, {\n argumentValues: childArguments,\n env: childEnv, replaceEnv: true, cwd, stdin: context.stdin, stdout: context.stdout, stderr: context.stderr,\n ...(context.stdinIsDefault === undefined ? {} : { stdinIsDefault: context.stdinIsDefault }),\n });\n return execute({ ...context, command: parsed.operands[offset]!, args: childArguments.args, argumentValues: childArguments, env: childEnv, cwd });\n }\n for (const name of names) await output(context, `${name}=${env[name]}${parsed.flags.has(\"0\") ? \"\\0\" : \"\\n\"}`);\n return { exitCode: 0 };\n }),\n define(\"xargs\", async context => {\n const argumentValues = getCommandArguments(context);\n const operandIndices: number[] = [];\n const parsed = options(argumentValues.args, \"0rn:s:I:d:tP:xE:\", { null: \"0\", \"no-run-if-empty\": \"r\", \"max-args\": \"n\", \"max-chars\": \"s\", replace: \"I\", delimiter: \"d\", verbose: \"t\", \"max-procs\": \"P\", exit: \"x\", eof: \"E\" }, true, index => { operandIndices.push(index); });\n const requested = integer(value(parsed, \"P\") ?? \"1\");\n const parallelism = requested === 0 ? maxParallelProcesses : Math.min(requested, maxParallelProcesses);\n const replacement = value(parsed, \"I\");\n if (replacement === \"\") throw new UsageError(\"replacement string cannot be empty\");\n if (replacement !== undefined && parsed.flags.has(\"n\")) throw new UsageError(\"cannot combine -I and -n\");\n const maxArgs = replacement === undefined ? integer(value(parsed, \"n\") ?? \"5000\", 1) : 1;\n const maxBytes = integer(value(parsed, \"s\") ?? \"131072\", 1);\n if (maxBytes > 131072) throw new UsageError(\"command size limit cannot exceed 128 KiB\");\n let delimiter = parsed.flags.has(\"0\") ? \"\\0\" : undefined;\n const suppliedDelimiter = value(parsed, \"d\");\n if (suppliedDelimiter !== undefined) {\n const bytes = escapeBytes(suppliedDelimiter).bytes;\n if (bytes.length !== 1 || bytes[0]! > 127) throw new UsageError(\"delimiter must be one ASCII byte\");\n delimiter = String.fromCharCode(bytes[0]!);\n }\n const command = parsed.operands[0] ?? \"echo\";\n const initial = argumentValues.select(operandIndices).slice(1);\n const baseBytes = encoder.encode(command).length + 1 + initial.values.reduce((sum, argument) => sum + shellValueByteLength(argument) + 1, 0);\n if (baseBytes >= maxBytes) throw new UsageError(\"initial arguments exceed command size limit\");\n let batch: string[] = [];\n let bytes = baseBytes;\n let executed = false;\n let status = 0;\n let stop = false;\n let terminal = false;\n let failure: { reason: unknown } | undefined;\n let finishing = false;\n let cleanupPromise: Promise<void> | undefined;\n let inputIterator: AsyncIterator<Uint8Array> | undefined;\n let inputFinished = false;\n let inputReturn: Promise<IteratorResult<Uint8Array>> | undefined;\n let wake: (() => void) | undefined;\n const active = new Set<Promise<void>>();\n const children = new AbortController();\n const input = new AbortController();\n const inputStopped = new Error(\"xargs input admission closed\");\n const childSignal = AbortSignal.any([context.signal, children.signal]);\n const inputSignal = AbortSignal.any([context.signal, input.signal]);\n const notify = () => { const waiting = wake; wake = undefined; waiting?.(); };\n const stopInput = () => { stop = true; input.abort(inputStopped); notify(); };\n const closeInput = (): Promise<IteratorResult<Uint8Array>> => {\n inputReturn ??= Promise.resolve().then(() => inputFinished ? { done: true, value: undefined } : inputIterator?.return?.() ?? { done: true, value: undefined });\n return inputReturn;\n };\n const fail = (reason: unknown) => {\n failure ??= { reason };\n stopInput();\n children.abort(reason);\n };\n const cancelled = () => { stopInput(); children.abort(context.signal.reason); };\n const cleanup = (): Promise<void> => {\n if (!cleanupPromise) {\n stopInput();\n if (!finishing) children.abort(inputStopped);\n cleanupPromise = Promise.resolve().then(async () => {\n try {\n const results = await Promise.allSettled([closeInput(), ...active]);\n for (const result of results) if (result.status === \"rejected\") throw result.reason;\n } finally { context.signal.removeEventListener(\"abort\", cancelled); }\n });\n }\n return cleanupPromise;\n };\n context.registerCleanup?.(cleanup);\n context.signal.addEventListener(\"abort\", cancelled, { once: true });\n if (context.signal.aborted) cancelled();\n const source: ByteSource = { [Symbol.asyncIterator]() {\n inputSignal.throwIfAborted();\n inputIterator = context.stdin[Symbol.asyncIterator]();\n return {\n async next() {\n const result = await inputIterator!.next();\n inputFinished = result.done === true;\n return result;\n },\n return: closeInput,\n };\n } };\n const capacity = async () => {\n while (!stop && active.size >= parallelism) await new Promise<void>(resolve => { wake = resolve; });\n };\n const dispatch = async () => {\n if (stop) return;\n const childArguments = initial.withValues(replacement === undefined ? [...initial.values, ...batch] : initial.values.map((argument, index) => replaceArgument(typeof argument === \"string\" ? argument : initial.bytes(index)!, replacement, batch[0] ?? \"\")));\n const args = childArguments.args;\n const size = encoder.encode(command).length + 1 + childArguments.values.reduce((sum, argument) => sum + shellValueByteLength(argument) + 1, 0);\n if (size > maxBytes) throw new UsageError(\"expanded arguments exceed command size limit\");\n if (parsed.flags.has(\"t\")) await writeDiagnostic(context.stderr, [command, ...args].map(argument => /^[A-Za-z0-9_./-]+$/u.test(argument) ? argument : `'${argument.replaceAll(\"'\", \"'\\\\''\")}'`).join(\" \") + \"\\n\", context.signal);\n if (stop) return;\n context.signal.throwIfAborted();\n executed = true;\n batch = []; bytes = baseBytes;\n const pending = Promise.resolve().then(() => {\n childSignal.throwIfAborted();\n if (context.invoke) return context.invoke(command, args, {\n argumentValues: childArguments, stdin: emptyInput(), stdinIsDefault: true,\n cwd: context.cwd, env: { ...context.env }, stdout: context.stdout, stderr: context.stderr, signal: childSignal,\n });\n return execute({ ...context, command, args, argumentValues: childArguments, stdin: emptyInput(), stdinIsDefault: true, env: { ...context.env }, signal: childSignal });\n }).then(result => {\n const exitCode = result.exitCode;\n if (!terminal && (exitCode === 255 || exitCode === 126 || exitCode === 127)) {\n terminal = true;\n status = exitCode === 255 ? 124 : exitCode;\n stopInput();\n } else if (!terminal && exitCode !== 0) status = 123;\n }).catch(fail).then(() => { active.delete(pending); notify(); });\n active.add(pending);\n };\n const eof = value(parsed, \"E\");\n try {\n for await (const argument of argumentsFrom(source, inputSignal, delimiter, replacement !== undefined)) {\n if (stop || delimiter === undefined && eof !== undefined && eof !== \"\" && argument === eof) break;\n const size = encoder.encode(argument).length + 1;\n if (replacement === undefined && baseBytes + size > maxBytes) throw new UsageError(\"single argument exceeds command size limit\");\n if (batch.length && (batch.length === maxArgs || bytes + size > maxBytes)) {\n if (parsed.flags.has(\"x\") && batch.length < maxArgs) throw new UsageError(\"command size limit exceeded\");\n await dispatch();\n await capacity();\n if (stop) break;\n }\n batch.push(argument); bytes += size;\n if (batch.length === maxArgs) {\n await dispatch();\n await capacity();\n if (stop) break;\n }\n }\n if (!stop && (batch.length || !executed && !parsed.flags.has(\"r\") && replacement === undefined)) await dispatch();\n } catch (error) {\n if (error !== inputStopped) fail(error);\n } finally {\n finishing = true;\n try { await cleanup(); }\n catch (error) { failure ??= { reason: error }; }\n }\n context.signal.throwIfAborted();\n if (failure) throw failure.reason;\n return { exitCode: status };\n }),\n ];\n}\n", "import { yieldTurn } from \"../contracts/yield.js\";\nimport { createCommandArguments, getCommandArguments, type CommandArguments } from \"../contracts/command.js\";\nimport { type ShellValue } from \"../contracts/value.js\";\nimport { decoder, encoder, UsageError, type ParsedOptions } from \"./internal.js\";\n\nexport class EnvSplitError extends Error {}\n\nclass SplitWork {\n private bytes = 0;\n private arguments = 0;\n private expansions = 0;\n private work = 0;\n private nextYield = 4096;\n\n constructor(private readonly signal: AbortSignal) {}\n\n account(text: string | Uint8Array): void {\n this.signal.throwIfAborted();\n if (text.length > 131072 - this.bytes) throw new EnvSplitError(\"split-string byte limit exceeded (131072)\");\n this.bytes += typeof text === \"string\" ? Buffer.byteLength(text) : text.byteLength;\n if (this.bytes > 131072) throw new EnvSplitError(\"split-string byte limit exceeded (131072)\");\n if (typeof text === \"string\" ? text.includes(\"\\0\") : text.includes(0)) throw new EnvSplitError(\"NUL is not supported in -S strings\");\n }\n\n argument(): void {\n if (++this.arguments > 10000) throw new EnvSplitError(\"split-string argument limit exceeded (10000)\");\n }\n\n expansion(): void {\n this.signal.throwIfAborted();\n if (++this.expansions > 32) throw new EnvSplitError(\"split-string expansion limit exceeded (32)\");\n if (this.work > 1048576) throw new EnvSplitError(\"split-string work limit exceeded (1048576)\");\n }\n\n tick(amount = 1): boolean {\n this.signal.throwIfAborted();\n this.work += amount;\n if (this.expansions && this.work > 1048576) throw new EnvSplitError(\"split-string work limit exceeded (1048576)\");\n return this.work >= this.nextYield;\n }\n\n async pause(): Promise<void> {\n await yieldTurn();\n this.signal.throwIfAborted();\n this.nextYield = this.work + 4096;\n }\n}\n\nasync function splitString(source: string, environment: Readonly<Record<string, string>>, work: SplitWork): Promise<string[]> {\n work.expansion();\n work.account(source);\n const result: string[] = [];\n let parts: string[] = [];\n let active = false;\n let quote = \"\";\n const start = () => {\n if (!active) { work.argument(); active = true; }\n };\n const append = (text: string) => {\n work.account(text);\n start();\n parts.push(text);\n };\n const finish = () => {\n if (active) result.push(parts.join(\"\"));\n parts = [];\n active = false;\n };\n for (let index = 0; index < source.length;) {\n if (work.tick()) await work.pause();\n const character = String.fromCodePoint(source.codePointAt(index)!);\n if ((character === \"'\" || character === '\"') && (!quote || character === quote)) {\n start();\n quote = quote ? \"\" : character;\n index++;\n continue;\n }\n if (!quote && /[ \\t\\n\\r\\v\\f]/u.test(character)) {\n finish();\n index++;\n continue;\n }\n if (character === \"#\" && !active) break;\n if (character === \"\\\\\" && (quote !== \"'\" || source[index + 1] === \"\\\\\" || source[index + 1] === \"'\")) {\n const escaped = source[index + 1];\n if (escaped === undefined) throw new EnvSplitError(\"invalid backslash at end of string in -S\");\n index += 2;\n if (escaped === \"c\") {\n if (quote === '\"') throw new EnvSplitError(\"'\\\\c' must not appear in double-quoted -S string\");\n break;\n }\n if (escaped === \"_\") {\n if (quote === '\"') append(\" \");\n else finish();\n continue;\n }\n const controls: Readonly<Record<string, string>> = { f: \"\\f\", n: \"\\n\", r: \"\\r\", t: \"\\t\", v: \"\\v\" };\n if (Object.hasOwn(controls, escaped)) append(controls[escaped]!);\n else if ('\"#$\\'\\\\'.includes(escaped)) append(escaped);\n else throw new EnvSplitError(`invalid sequence '\\\\${escaped}' in -S`);\n continue;\n }\n if (character === \"$\" && quote !== \"'\") {\n let end = index + 2;\n if (source[index + 1] !== \"{\" || !/^[A-Za-z_]$/u.test(source[end] ?? \"\")) {\n throw new EnvSplitError(`only \\${VARNAME} expansion is supported, error at: ${source.slice(index)}`);\n }\n while (/^[A-Za-z_0-9]$/u.test(source[end] ?? \"\")) {\n if (work.tick()) await work.pause();\n end++;\n }\n if (source[end] !== \"}\") throw new EnvSplitError(`only \\${VARNAME} expansion is supported, error at: ${source.slice(index)}`);\n const name = source.slice(index + 2, end);\n if (Object.hasOwn(environment, name)) {\n const text = environment[name]!;\n append(text);\n if (work.tick(text.length)) await work.pause();\n }\n index = end + 1;\n continue;\n }\n append(character);\n index += character.length;\n }\n if (quote) throw new EnvSplitError(\"no terminating quote in -S string\");\n finish();\n return result;\n}\n\nasync function splitBytes(source: Uint8Array, environment: Readonly<Record<string, string>>, work: SplitWork): Promise<Uint8Array[]> {\n work.expansion();\n work.account(source);\n const result: Uint8Array[] = [];\n let pending: number[] = [];\n let active = false;\n let quote = 0;\n const start = () => { if (!active) { work.argument(); active = true; } };\n const append = (bytes: Uint8Array) => {\n work.account(bytes);\n start();\n for (const byte of bytes) pending.push(byte);\n };\n const finish = () => {\n if (active) result.push(Uint8Array.from(pending));\n pending = [];\n active = false;\n };\n const nameStart = (byte: number | undefined): boolean => byte !== undefined && (byte >= 65 && byte <= 90 || byte >= 97 && byte <= 122 || byte === 95);\n for (let index = 0; index < source.length;) {\n if (work.tick()) await work.pause();\n const character = source[index]!;\n if ((character === 39 || character === 34) && (!quote || character === quote)) { start(); quote = quote ? 0 : character; index++; continue; }\n if (!quote && [32, 9, 10, 13, 11, 12].includes(character)) { finish(); index++; continue; }\n if (character === 35 && !active) break;\n if (character === 92 && (quote !== 39 || source[index + 1] === 92 || source[index + 1] === 39)) {\n const escaped = source[index + 1];\n if (escaped === undefined) throw new EnvSplitError(\"invalid backslash at end of string in -S\");\n index += 2;\n if (escaped === 99) {\n if (quote === 34) throw new EnvSplitError(\"'\\\\c' must not appear in double-quoted -S string\");\n break;\n }\n if (escaped === 95) { if (quote === 34) append(Uint8Array.of(32)); else finish(); continue; }\n const controls: Readonly<Record<number, number>> = { 102: 12, 110: 10, 114: 13, 116: 9, 118: 11 };\n if (Object.hasOwn(controls, escaped)) append(Uint8Array.of(controls[escaped]!));\n else if ([34, 35, 36, 39, 92].includes(escaped)) append(Uint8Array.of(escaped));\n else throw new EnvSplitError(`invalid sequence '\\\\${String.fromCharCode(escaped)}' in -S`);\n continue;\n }\n if (character === 36 && quote !== 39) {\n let end = index + 2;\n if (source[index + 1] !== 123 || !nameStart(source[end])) throw new EnvSplitError(`only \\${VARNAME} expansion is supported, error at: ${decoder.decode(source.subarray(index))}`);\n while (nameStart(source[end]) || source[end] !== undefined && source[end]! >= 48 && source[end]! <= 57) {\n if (work.tick()) await work.pause();\n end++;\n }\n if (source[end] !== 125) throw new EnvSplitError(`only \\${VARNAME} expansion is supported, error at: ${decoder.decode(source.subarray(index))}`);\n const name = decoder.decode(source.subarray(index + 2, end));\n if (Object.hasOwn(environment, name)) {\n const text = environment[name]!;\n append(encoder.encode(text));\n if (work.tick(text.length)) await work.pause();\n }\n index = end + 1;\n continue;\n }\n append(source.subarray(index, index + 1));\n index++;\n }\n if (quote) throw new EnvSplitError(\"no terminating quote in -S string\");\n finish();\n return result;\n}\n\nexport async function parseEnvOptions(\n args: readonly string[], environment: Readonly<Record<string, string>>, signal: AbortSignal, argumentValues?: CommandArguments,\n): Promise<ParsedOptions & { readonly operandValues?: CommandArguments }> {\n const work = new SplitWork(signal);\n const incoming = argumentValues === undefined ? createCommandArguments(args) : getCommandArguments({ args, argumentValues });\n const frames: { arguments: CommandArguments; offset: number }[] = [{ arguments: incoming, offset: 0 }];\n let currentValue: ShellValue = \"\";\n const next = (): string | undefined => {\n while (frames.length) {\n const frame = frames.at(-1)!;\n if (frame.offset < frame.arguments.args.length) {\n currentValue = frame.arguments.values[frame.offset]!;\n return frame.arguments.args[frame.offset++];\n }\n frames.pop();\n }\n return undefined;\n };\n const flags = new Set<string>();\n const values = new Map<string, string[]>();\n const operands: string[] = [];\n const operandValues: ShellValue[] = [];\n const longOptions = new Map([\n [\"ignore-environment\", \"i\"], [\"unset\", \"u\"], [\"null\", \"0\"], [\"chdir\", \"C\"], [\"split-string\", \"S\"],\n ]);\n const accept = async (key: string, content?: string, source: ShellValue = content ?? \"\") => {\n if (key === \"S\") {\n const expanded = typeof source === \"string\" ? await splitString(source, environment, work) : await splitBytes(incoming.withValues([source]).bytes(0)!, environment, work);\n frames.push({ arguments: incoming.withValues(expanded), offset: 0 });\n } else {\n flags.add(key);\n if (content !== undefined) {\n const entries = values.get(key) ?? [];\n entries.push(content);\n values.set(key, entries);\n }\n }\n };\n for (;;) {\n const argument = next();\n if (argument === undefined) break;\n const argumentValue = currentValue;\n const remainder = (offset: number): ShellValue => typeof argumentValue === \"string\" ? argumentValue.slice(offset) : incoming.withValues([incoming.withValues([argumentValue]).bytes(0)!.subarray(offset)]).values[0]!;\n if (work.tick(argument.length + 1)) await work.pause();\n if (argument === \"--\") break;\n if (argument === \"-\" || !argument.startsWith(\"-\")) { operands.push(argument); operandValues.push(argumentValue); break; }\n if (argument.startsWith(\"--\")) {\n const equals = argument.indexOf(\"=\");\n const name = argument.slice(2, equals < 0 ? undefined : equals);\n const key = longOptions.get(name);\n if (!key) throw new UsageError(`unrecognized option '${argument}'`);\n const required = key === \"u\" || key === \"C\" || key === \"S\";\n if (!required && equals >= 0) throw new UsageError(`option '--${name}' does not take an argument`);\n const content = required ? equals < 0 ? next() : argument.slice(equals + 1) : undefined;\n if (required && content === undefined) throw new UsageError(`option '--${name}' requires an argument`);\n await accept(key, content, key === \"S\" ? equals < 0 ? currentValue : remainder(equals + 1) : content);\n continue;\n }\n for (let index = 1; index < argument.length; index++) {\n if (work.tick()) await work.pause();\n const key = argument[index]!;\n if (key !== \"i\" && key !== \"u\" && key !== \"0\" && key !== \"C\" && key !== \"S\") throw new UsageError(`invalid option -- '${key}'`);\n const required = key === \"u\" || key === \"C\" || key === \"S\";\n const attached = argument.slice(index + 1);\n const content = required ? attached || next() : undefined;\n if (required && content === undefined) throw new UsageError(`option requires an argument -- '${key}'`);\n await accept(key, content, key === \"S\" ? attached ? remainder(index + 1) : currentValue : content);\n if (required) break;\n }\n }\n for (;;) {\n const argument = next();\n if (argument === undefined) break;\n if (work.tick()) await work.pause();\n operands.push(argument);\n operandValues.push(currentValue);\n }\n if (operands[0] === \"-\") { flags.add(\"i\"); operands.shift(); operandValues.shift(); }\n signal.throwIfAborted();\n return { flags, values, operands, ...(argumentValues === undefined ? {} : { operandValues: incoming.withValues(operandValues) }) };\n}\n", "export { Shell } from \"./shell.js\";\nexport { parseShell } from \"./parser.js\";\nexport { ShellLimitError, ShellSyntaxError } from \"./types.js\";\nexport type { ShellCommandContext, ShellExecOptions, ShellInvokeOptions, ShellLimits, ShellOptions, ShellParseOptions, ShellResult } from \"./types.js\";\nexport { cloudflareWorkerLimits } from \"./worker-limits.js\";\n", "import { writeDiagnostic } from \"../escaping.js\";\nimport { CommandRegistry, resolvePath, toByteSource } from \"../contracts/index.js\";\nimport type {\n ByteSink, CommandDefinition, FileSystemFactory, Middleware, PluginHost,\n RegisterCommandOptions, VirtualShellPlugin,\n} from \"../contracts/index.js\";\nimport { warnIfHostProcessEnv } from \"./env-warning.js\";\nimport { parseShellUnit } from \"./parser.js\";\nimport { SourceLineIndex } from \"./source-line-index.js\";\nimport { ShellInput } from \"./input.js\";\nimport { byteLocale } from \"./locale.js\";\nimport { Budget, Capture, interruptible, resolveLimits, Runtime, RuntimeCancellationState } from \"./runtime.js\";\nimport type { State } from \"./runtime.js\";\nimport { ShellLimitError, ShellSyntaxError } from \"./types.js\";\nimport type { ShellExecOptions, ShellOptions, ShellResult } from \"./types.js\";\nimport { InvocationScope, invocationScope, throwCleanupFailures } from \"./cleanup.js\";\nimport {\n createRootCancellationLink, selectRuntimeCancellationOutcome, subscribeCancellation,\n} from \"./cancellation.js\";\nimport type {\n CancellationBoundary, CancellationOrigin, CancellationSelection, CapturedCancellationOutcome,\n} from \"./cancellation.js\";\n\nclass RootInvocationCancellationOwner {\n readonly finalized: Promise<void>;\n #resolveFinalized!: () => void;\n #admissionOpen = true;\n #boundary: CancellationBoundary | undefined;\n #observedOrigin: CancellationOrigin | undefined;\n #captureCancellation: ((origin: CancellationOrigin) => void) | undefined;\n #detach: (() => void) | undefined;\n #finished = false;\n\n constructor(readonly scope: InvocationScope) {\n this.finalized = new Promise<void>(resolve => { this.#resolveFinalized = resolve; });\n scope.register(() => { this.#admissionOpen = false; });\n }\n\n activate(boundary: CancellationBoundary): void {\n if (!this.#admissionOpen) throw new Error(\"Root cancellation admission is closed\");\n this.#boundary = boundary;\n this.#detach = subscribeCancellation(boundary, origin => { this.#captureCancellation?.(origin); });\n }\n\n assertAdmissionOpen(): void {\n if (!this.#admissionOpen) throw new Error(\"Root cancellation admission is closed\");\n }\n\n capture<Value>(execute: () => Promise<Value>): Promise<CapturedCancellationOutcome<Value>> {\n return new Promise(resolve => {\n let settled = false;\n let raw: Promise<Value> | undefined;\n let queuedOrigin = false;\n const settle = (captured: CapturedCancellationOutcome<Value>): void => {\n if (settled) return;\n settled = true;\n this.#captureCancellation = undefined;\n resolve(captured);\n };\n this.#captureCancellation = origin => {\n if (settled || queuedOrigin) return;\n queuedOrigin = true;\n queueMicrotask(() => {\n if (settled) return;\n this.#observedOrigin = origin;\n settle({ kind: \"throw\", reason: origin.signal.reason });\n void raw?.catch(() => undefined);\n });\n };\n try { raw = Promise.resolve(execute()); }\n catch (reason) { settle({ kind: \"throw\", reason }); return; }\n void raw.then(\n value => settle({ kind: \"return\", value }),\n reason => settle({ kind: \"throw\", reason }),\n );\n if (settled) void raw.catch(() => undefined);\n });\n }\n\n finish<Value>(captured: CapturedCancellationOutcome<Value>): CancellationSelection<Value> {\n if (this.#finished) throw new Error(\"Root cancellation was already finalized\");\n this.#finished = true;\n this.#admissionOpen = false;\n try {\n try { this.#detach?.(); } catch (error) { this.scope.failures.push(error); }\n this.#detach = undefined;\n const close = this.#boundary!.close();\n this.scope.failures.push(...close.failures);\n return selectRuntimeCancellationOutcome(this.#boundary!, captured, this.#observedOrigin);\n } finally { this.#resolveFinalized(); }\n }\n}\n\nexport class Shell implements PluginHost {\n readonly commands: CommandRegistry;\n readonly #middleware: Middleware[] = [];\n readonly #filesystems = new Map<string, FileSystemFactory>();\n readonly #plugins: VirtualShellPlugin[] = [];\n readonly #options: ShellOptions;\n #ready: Promise<void> = Promise.resolve();\n #disposed = false;\n #disposal: Promise<void> | undefined;\n readonly #active = new Set<{ scope: InvocationScope; budget: Budget; owner: RootInvocationCancellationOwner }>();\n\n constructor(options: ShellOptions) {\n if (!options?.fs) throw new TypeError(\"Shell requires an explicit filesystem\");\n if (options.onInternalError !== undefined && typeof options.onInternalError !== \"function\") throw new TypeError(\"onInternalError must be callable\");\n warnIfHostProcessEnv(options.env);\n resolveLimits(options.limits);\n this.#options = { ...options, cwd: resolvePath(\"/\", options.cwd ?? \"/\"), env: { ...options.env }, limits: { ...options.limits } };\n this.commands = options.commands ?? new CommandRegistry();\n }\n\n use(middleware: Middleware | VirtualShellPlugin): this {\n if (this.#disposed) throw new Error(\"Shell is disposed\");\n this.#install(middleware);\n return this;\n }\n\n #install(middleware: Middleware | VirtualShellPlugin): void {\n if (typeof middleware === \"function\") this.#middleware.push(middleware);\n else {\n if (!middleware || typeof middleware.setup !== \"function\") throw new TypeError(\"Expected middleware or shell plugin\");\n this.#ready = this.#ready.then(async () => {\n let active = true;\n const admit = () => {\n if (this.#disposed && !active) throw new Error(\"Shell is disposed\");\n };\n const host: PluginHost = {\n commands: this.commands,\n use: (middleware) => { admit(); this.#install(middleware); },\n registerFileSystem: (scheme, factory) => { admit(); this.#registerFileSystem(scheme, factory); },\n };\n try {\n await middleware.setup(host);\n this.#plugins.push(middleware);\n } finally { active = false; }\n });\n void this.#ready.catch(() => undefined);\n }\n }\n\n register(command: CommandDefinition, options?: RegisterCommandOptions): this {\n if (this.#disposed) throw new Error(\"Shell is disposed\");\n this.commands.register(command, options);\n return this;\n }\n\n registerFileSystem(scheme: string, factory: FileSystemFactory): void {\n if (this.#disposed) throw new Error(\"Shell is disposed\");\n this.#registerFileSystem(scheme, factory);\n }\n\n #registerFileSystem(scheme: string, factory: FileSystemFactory): void {\n if (!/^[a-z][a-z0-9+.-]*$/u.test(scheme)) throw new TypeError(\"Invalid filesystem scheme\");\n if (this.#filesystems.has(scheme)) throw new Error(`Filesystem already registered: ${scheme}`);\n this.#filesystems.set(scheme, factory);\n }\n\n async createFileSystem(scheme: string, options: Readonly<Record<string, unknown>> = {}): Promise<Awaited<ReturnType<FileSystemFactory>>> {\n if (this.#disposed) throw new Error(\"Shell is disposed\");\n await this.#ready;\n const factory = this.#filesystems.get(scheme);\n if (!factory) throw new Error(`Unknown filesystem scheme: ${scheme}`);\n return factory(options);\n }\n\n async exec(source: string, options: ShellExecOptions = {}): Promise<ShellResult> {\n if (this.#disposed) throw new Error(\"Shell is disposed\");\n if (options.onInternalError !== undefined && typeof options.onInternalError !== \"function\") throw new TypeError(\"onInternalError must be callable\");\n warnIfHostProcessEnv(options.env);\n const budget = new Budget(resolveLimits(this.#options.limits, options.limits), options.signal, options.onInternalError ?? this.#options.onInternalError);\n const scope = new InvocationScope(options.signal);\n const cancellationState = new RuntimeCancellationState();\n const owner = new RootInvocationCancellationOwner(scope);\n const boundary = createRootCancellationLink({\n admission: Runtime.rootCancellationAdmission(budget),\n callerSignal: options.signal,\n controls: [{ role: \"budget-control\", signal: budget.controller.signal }],\n });\n try { owner.activate(boundary); }\n catch (error) {\n scope.failures.push(...boundary.close().failures);\n await scope.close();\n cancellationState.close();\n throw error;\n }\n const active = { scope, budget, owner };\n this.#active.add(active);\n let captured: CapturedCancellationOutcome<ShellResult>;\n try { captured = await owner.capture(() => this.#execute(source, options, scope, budget, boundary, cancellationState, owner)); }\n finally { budget.close(); await scope.close(); }\n const selection = owner.finish(captured);\n cancellationState.close();\n this.#active.delete(active);\n if (selection.outcome.kind === \"throw\") throw selection.outcome.reason;\n throwCleanupFailures(scope.failures);\n return selection.outcome.value;\n }\n\n async #execute(\n source: string,\n options: ShellExecOptions,\n scope: InvocationScope,\n budget: Budget,\n cancellation: CancellationBoundary,\n cancellationState: RuntimeCancellationState,\n owner: RootInvocationCancellationOwner,\n ): Promise<ShellResult> {\n if (typeof source !== \"string\") throw new TypeError(\"Shell source must be a string\");\n if (Buffer.byteLength(source) > budget.limits.maxSourceBytes) throw new ShellLimitError(\"maxSourceBytes\");\n budget.source(Buffer.byteLength(source));\n budget.signal.throwIfAborted();\n const stdout = new Capture();\n const stderr = new Capture();\n const sink = (capture: Capture, external?: ByteSink): ByteSink => budget.sink({\n ...(external?.ownedOutput ? { ownedOutput: {\n consumerClosed: external.ownedOutput.consumerClosed,\n write: async (chunk: Uint8Array) => {\n await capture.write(chunk);\n await external.ownedOutput!.write(chunk);\n },\n } } : {}),\n write: async (chunk) => {\n await capture.write(chunk);\n if (external) await external.write(chunk);\n },\n });\n let stdin: ShellInput | undefined;\n const io = {\n [invocationScope]: scope,\n stdin: toByteSource(\"\"),\n stdinIsDefault: options.stdin === undefined,\n stdout: sink(stdout, options.stdout), stderr: sink(stderr, options.stderr),\n };\n let exitCode: number;\n let failed = false;\n try {\n try {\n const lineIndex = new SourceLineIndex(source, budget.parsing);\n let unit = parseShellUnit(source, 0, byteLocale({ ...this.#options.env, ...options.env }), budget.parsing, lineIndex);\n stdin = new ShellInput(typeof options.stdin === \"string\" || options.stdin instanceof Uint8Array ? toByteSource(options.stdin) : options.stdin ?? toByteSource(\"\"), budget);\n io.stdin = stdin;\n await interruptible(this.#ready, budget.signal);\n const cwd = resolvePath(\"/\", options.cwd ?? this.#options.cwd ?? \"/\");\n const variables = Object.assign(Object.create(null) as Record<string, string>, this.#options.env, options.env, { PWD: cwd });\n for (const [name, value] of Object.entries(variables)) {\n if (name.includes(\"\\0\") || name.includes(\"=\") || typeof value !== \"string\" || value.includes(\"\\0\")) throw new TypeError(\"Invalid environment entry\");\n }\n const exported = new Set(Object.keys(variables));\n variables.OPTIND = \"1\";\n variables.OPTERR = \"1\";\n const state: State = {\n cwd, variables, exported, functions: new Map(), positional: [], getopts: { cursor: { index: 0 }, integer: true },\n directoryStack: { entries: [], bytes: 0 },\n dotglob: false,\n status: 0, substitutionStatus: 0, depth: 0, loopDepth: 0, functionDepth: 0, locals: [], pipefail: false, profile: \"bash\",\n };\n const admission = Runtime.rootCancellationAdmission(budget);\n const runtime = new Runtime(\n options.fs ?? this.#options.fs,\n this.commands,\n [...this.#middleware],\n budget,\n AbortSignal.any([cancellation.deliverySignal, scope.signal]),\n undefined,\n undefined,\n cancellation.deliverySignal,\n cancellation,\n cancellationState,\n owner,\n 0,\n admission.maxDepth,\n );\n exitCode = 0;\n while (true) {\n for (const warning of unit.script.warnings ?? []) await writeDiagnostic(io.stderr, `shell: warning: ${warning}\\n`);\n if (unit.script.lists.length) {\n const result = await interruptible(runtime.runUnit(unit.script, state, io), budget.signal);\n exitCode = result.exitCode;\n if (result.terminated) break;\n }\n if (unit.next >= source.length) break;\n budget.signal.throwIfAborted();\n unit = parseShellUnit(source, unit.next, byteLocale(state.variables), budget.parsing, lineIndex);\n }\n } catch (error) {\n if (!(error instanceof ShellSyntaxError)) throw error;\n const line = source.slice(0, error.offset).split(\"\\n\").length;\n if (error.unclosedQuote) {\n await writeDiagnostic(io.stderr, `shell: -c: line ${error.unclosedQuote.line}: unexpected EOF while looking for matching \\`${error.unclosedQuote.quote}'\\n`);\n } else if (error.exitCode === 127) {\n const token = /^[;&|()<>]|^[^\\s;&|()<>]+/u.exec(source.slice(error.offset))?.[0] ?? \"newline\";\n await writeDiagnostic(io.stderr, `shell: -c: line ${line}: syntax error near unexpected token \\`${token}'\\nshell: -c: line ${line}: \\`${source.split(\"\\n\")[line - 1] ?? \"\"}'\\n`);\n } else if (error.offset >= source.length && !/Unterminated|nesting|Unsupported/u.test(error.reason)) {\n const context = error.incompleteCommand ? ` from \\`${error.incompleteCommand.name}' command on line ${error.incompleteCommand.line}` : \"\";\n await writeDiagnostic(io.stderr, `shell: -c: line ${source.split(\"\\n\").length + Number(!source.endsWith(\"\\n\"))}: syntax error: unexpected end of file${context}\\n`);\n } else await writeDiagnostic(io.stderr, `shell: ${error.message}\\n`);\n exitCode = error.exitCode;\n }\n } catch (error) { failed = true; throw error; }\n finally {\n if (failed) await stdin?.close().catch(() => {});\n else await stdin?.close();\n }\n const stdoutBytes = stdout.takeBytes();\n const stderrBytes = stderr.takeBytes();\n return {\n stdout: new TextDecoder(\"utf-8\", { ignoreBOM: true }).decode(stdoutBytes),\n stderr: new TextDecoder(\"utf-8\", { ignoreBOM: true }).decode(stderrBytes),\n stdoutBytes, stderrBytes, exitCode,\n };\n }\n\n dispose(): Promise<void> {\n if (this.#disposal) return this.#disposal;\n this.#disposed = true;\n const active = [...this.#active];\n const drains: Promise<void>[] = [];\n this.#disposal = Promise.resolve().then(() => this.#dispose(active, drains));\n for (const { scope, budget } of active) {\n const drain = scope.close();\n budget.controller.abort(new Error(\"Shell is disposed\"));\n drains.push(drain);\n }\n return this.#disposal;\n }\n\n async #dispose(active: readonly { scope: InvocationScope; owner: RootInvocationCancellationOwner }[], drains: readonly Promise<void>[]): Promise<void> {\n await Promise.all(drains);\n await Promise.all(active.map(({ owner }) => owner.finalized));\n let ready: Promise<void>;\n do {\n ready = this.#ready;\n await ready.catch(() => undefined);\n } while (ready !== this.#ready);\n const failures: unknown[] = [];\n for (const plugin of [...this.#plugins].reverse()) {\n try { await plugin.dispose?.(); } catch (error) { failures.push(error); }\n }\n const cleanupFailures = active.flatMap(({ scope }) => scope.failures);\n if (failures.length) throw new AggregateError([...cleanupFailures, ...failures], \"Plugin disposal failed\");\n throwCleanupFailures(cleanupFailures);\n }\n}\n", "const warned = new WeakSet<object>();\n\nexport function warnIfHostProcessEnv(env: Readonly<Record<string, string>> | undefined): void {\n if (!env || typeof process === \"undefined\" || !process.env) return;\n if (warned.has(env)) return;\n if (env !== process.env) return;\n warned.add(env);\n console.warn(\"[safe-bash] warning: the shell `env` is the host `process.env`. Scripts executed in this shell can read every value in it, including secrets; on Cloudflare Workers with nodejs_compat, process.env contains the Worker's secret bindings. Pass only the variables your scripts need. See docs/issues/safe-bash-cloudflare-security-audit.md (finding 1).\");\n}\n", "import { ShellSyntaxError } from \"./types.js\";\nimport type { ShellParseOptions } from \"./types.js\";\nimport { ParseBudget } from \"./parse-budget.js\";\nimport { SourceLineIndex } from \"./source-line-index.js\";\nimport { arithmeticEnd, prepareArithmetic } from \"./arithmetic.js\";\nimport type { ArithmeticProgram } from \"./arithmetic.js\";\nimport { arraySelector, compoundEntry, compoundHead, elementAssignment, getArrayAssignment, scalarAssignmentName, setArrayAssignment, setArraySelector, setQuoteMarker } from \"./arrays/syntax.js\";\nimport type { ArrayEntry, ArraySelector } from \"./arrays/syntax.js\";\nimport { conditionalBinary, conditionalUnary } from \"./conditional.js\";\nimport type { ConditionalExpression } from \"./conditional.js\";\nimport { shellValueFromBytes, shellValueText } from \"../contracts/value.js\";\nimport type { ByteShellValue, ShellValue } from \"../contracts/value.js\";\n\nexport type WordPart =\n | { kind: \"text\"; value: string; quoted: boolean; byteValue?: ByteShellValue }\n | { kind: \"arithmetic\"; expression: ArithmeticProgram; source: string; line: number; quoted: boolean }\n | { kind: \"variable\"; name: string; quoted: boolean; line?: number; length?: boolean; operator?: string; alternate?: Word; replacement?: Word; substring?: { offset: Word; length?: Word; source: string } }\n | { kind: \"failed-substitution\"; diagnostic: string; quoted: boolean }\n | { kind: \"substitution\"; script: Script; line: number; sourceLine?: number; quoted: boolean };\n\nexport interface Word {\n readonly parts: WordPart[];\n readonly offset: number;\n readonly plain?: string;\n readonly spelling?: string;\n readonly printedNewlines?: number;\n}\n\nexport const compoundEntryWords = new WeakMap<ArrayEntry, Word>();\nexport const expansionSpellings = new WeakMap<WordPart, { source: string; start: number; end: number; ansi?: boolean }>();\n\ninterface Token {\n kind: \"word\" | \"operator\" | \"end\";\n value: string;\n offset: number;\n end: number;\n word?: Word;\n document?: HereDocument;\n}\n\nexport interface HereDocument {\n readonly delimiter: string;\n readonly quoted: boolean;\n readonly stripTabs: boolean;\n readonly offset: number;\n readonly depth: number;\n body: string;\n endLine: number;\n}\n\nexport class HereDocumentSyntaxError extends Error {\n constructor(readonly diagnostic: string) { super(diagnostic); }\n}\n\nexport interface Redirect {\n readonly descriptor: number;\n readonly operator: string;\n readonly target: Word;\n readonly move?: boolean;\n readonly document?: HereDocument;\n readonly line?: number;\n readonly implicitPipeline?: boolean;\n}\n\nexport interface CaseClause {\n readonly patterns: Word[];\n readonly body: Script;\n readonly terminator: \";;\" | \";&\" | \";;&\" | \"esac\";\n}\n\nexport type Command = (\n | { kind: \"simple\"; words: Word[] }\n | { kind: \"subshell\"; body: Script }\n | { kind: \"group\"; body: Script }\n | { kind: \"if\"; branches: { condition: Script; body: Script }[]; otherwise?: Script }\n | { kind: \"case\"; subject: Word; clauses: CaseClause[] }\n | { kind: \"while\"; condition: Script; body: Script }\n | { kind: \"until\"; condition: Script; body: Script }\n | { kind: \"for\"; name: string; words?: Word[]; body: Script }\n | { kind: \"function\"; name: string; body: Command }\n | { kind: \"arithmetic\"; expression: ArithmeticProgram; source: string }\n | { kind: \"conditional\"; expression: ConditionalExpression; source: string }\n) & { redirects: Redirect[]; line?: number; sourceName?: string };\n\nexport interface Pipeline {\n readonly commands: Command[];\n readonly negate: boolean;\n}\n\nexport interface AndOr {\n readonly pipelines: Pipeline[];\n readonly operators: (\"&&\" | \"||\")[];\n}\n\nexport interface Script {\n readonly lists: AndOr[];\n readonly warnings?: readonly string[];\n readonly line?: number;\n readonly printedLines?: ReadonlyMap<Command, number>;\n readonly printedNewlines?: number;\n}\n\nfunction printedSimpleLines(lists: readonly AndOr[], separators: readonly boolean[], budget: ParseBudget): Pick<Script, \"printedLines\" | \"printedNewlines\"> {\n budget.admit();\n const printedLines = new Map<Command, number>();\n let line = 1;\n for (let index = 0; index < lists.length; index++) {\n for (const pipeline of lists[index]!.pipelines) for (const command of pipeline.commands) {\n if (command.kind !== \"simple\" || !command.words.length || command.redirects.some(redirect => redirect.document)) return {};\n const words = [...command.words, ...command.redirects.map(redirect => redirect.target)];\n if (words.some(word => word.printedNewlines === undefined)) return {};\n printedLines.set(command, line + command.words[0]!.printedNewlines!);\n for (const word of words) line += word.printedNewlines!;\n }\n if (index < lists.length - 1 && separators[index]) line++;\n }\n return { printedLines, printedNewlines: line - 1 };\n}\n\nclass IncompleteShellInput extends Error {}\n\nclass Lexer {\n position = 0;\n operandDepth = 0;\n printedNewlineReduction = 0;\n unprintedWords = 0;\n delimiterOperator: string | undefined;\n conditional = false;\n conditionalPattern: \"pattern\" | \"regex\" | undefined;\n braceReplay?: ReadonlyMap<number, ShellValue>;\n readonly documents: HereDocument[] = [];\n constructor(readonly budget: ParseBudget, readonly source: string, readonly depth: number, readonly warnings: string[] = [], readonly lineOffset = 0, readonly byteLocale = false, readonly documentLine?: number, readonly partial = false, readonly lineIndex = new SourceLineIndex(source, budget), readonly sourceOffset = 0) {\n if (depth > 64) throw new ShellSyntaxError(\"Syntax nesting exceeds 64\", 0);\n }\n\n lineAt(position: number): number {\n return this.lineOffset + this.lineIndex.lineAt(this.sourceOffset + position) - this.lineIndex.lineAt(this.sourceOffset) + 1;\n }\n\n error(message: string, unclosedQuote?: { quote: string; line: number }): never {\n throw new ShellSyntaxError(message, this.position, 2, undefined, unclosedQuote);\n }\n\n next(): Token {\n this.budget.admit();\n while (this.position < this.source.length) {\n const current = this.source[this.position]!;\n if (current === \" \" || current === \"\\t\" || this.conditional && current === \"\\n\") {\n this.position++;\n } else if (current === \"\\\\\" && this.source[this.position + 1] === \"\\n\") {\n this.position += 2;\n } else if (current === \"#\") {\n while (this.position < this.source.length && this.source[this.position] !== \"\\n\") this.position++;\n } else break;\n }\n const offset = this.position;\n if (offset === this.source.length) {\n if (this.partial) throw new IncompleteShellInput();\n this.readDocuments();\n return { kind: \"end\", value: \"\", offset, end: offset };\n }\n let logical = \"\";\n let cursor = offset;\n const ends: number[] = [];\n while (cursor < this.source.length && logical.length < 3) {\n if (this.source.startsWith(\"\\\\\\n\", cursor)) { cursor += 2; continue; }\n logical += this.source[cursor++]!;\n ends.push(cursor);\n }\n const operator = this.conditionalPattern ? undefined : /^(?:;;&|<<<|<<-|&>>|;&|&&|\\|\\||\\|&|>>|>&|<&|>\\||<<|;;|&>|[;\\n|&()<>])/u.exec(logical)?.[0];\n if (operator) {\n if ([\"&\", \"&>>\"].includes(operator)) this.error(`Unsupported operator ${operator}`);\n this.position = ends[operator.length - 1]!;\n if (operator === \"<<\" || operator === \"<<-\") this.delimiterOperator = operator;\n if (operator === \"\\n\") this.readDocuments();\n return { kind: \"operator\", value: operator, offset, end: this.position };\n }\n const delimiterOperator = this.delimiterOperator;\n this.delimiterOperator = undefined;\n const word = this.word(undefined, false, delimiterOperator !== undefined);\n if (this.position <= offset) this.error(\"Tokenizer made no progress\");\n let document: HereDocument | undefined;\n if (delimiterOperator) {\n this.budget.admit();\n document = {\n delimiter: word.parts.map((part) => part.kind === \"text\" ? part.value : \"\").join(\"\"),\n quoted: word.parts.some((part) => part.quoted), stripTabs: delimiterOperator === \"<<-\", offset,\n body: \"\", endLine: this.lineAt(offset), depth: this.depth,\n };\n this.documents.push(document);\n }\n this.budget.admit();\n return { kind: \"word\", value: word.plain ?? \"\", offset, end: this.position, word: { ...word, spelling: this.source.slice(offset, this.position) }, ...(document ? { document } : {}) };\n }\n\n readDocuments(): void {\n for (const document of this.documents.splice(0)) {\n let body = \"\";\n let terminated = false;\n while (this.position < this.source.length) {\n let line = \"\";\n while (this.position < this.source.length) {\n const current = this.source[this.position++]!;\n if (!document.quoted && current === \"\\\\\" && this.position < this.source.length) {\n const next = this.source[this.position++]!;\n if (next !== \"\\n\") line += current + next;\n } else if (current === \"\\n\") break;\n else line += current;\n }\n if (line === document.delimiter || (document.stripTabs && line.replace(/^\\t+/u, \"\") === document.delimiter)) {\n terminated = true;\n break;\n }\n body += (document.stripTabs ? line.replace(/^\\t+/u, \"\") : line) + \"\\n\";\n }\n if (!terminated && this.partial) throw new IncompleteShellInput();\n if (!terminated) this.warnings.push(`here-document at offset ${document.offset} delimited by end-of-file (wanted ${JSON.stringify(document.delimiter)})`);\n document.body = body;\n document.endLine = this.lineAt(Math.max(0, this.position - 1));\n }\n }\n\n *documentWords(): Generator<Word> {\n let text = \"\";\n while (this.position < this.source.length) {\n const current = this.source[this.position]!;\n if (current === \"$\" || current === \"`\") {\n if (text) { this.budget.admit(2); yield { offset: 0, parts: [{ kind: \"text\", value: text, quoted: true }] }; text = \"\"; }\n const offset = this.position;\n this.budget.admit();\n const parts: WordPart[] = [];\n try { this.expansion(parts, true); }\n catch (error) {\n if (!(error instanceof ShellSyntaxError) || /nesting|exceeds/u.test(error.reason)) throw error;\n if (this.source.startsWith(\"${\", offset)) throw new HereDocumentSyntaxError(`shell: line ${this.documentLine}: ${this.source}: bad substitution\\n`);\n if (current === \"`\") throw new HereDocumentSyntaxError(`shell: line ${this.documentLine}: bad substitution: no closing \"\\`\" in ${this.source.slice(offset)}\\n`);\n if (this.source.startsWith(\"$((\", offset) && error.reason === \"Unterminated arithmetic expression\") throw new HereDocumentSyntaxError(`shell: line ${this.documentLine}: bad substitution: no closing \\`)' in ${this.source}\\n`);\n throw new HereDocumentSyntaxError(`shell: line ${this.documentLine}: ${error.message}\\n`);\n }\n yield { offset, parts };\n } else if (current === \"\\\\\" && /[$`\\\\]/u.test(this.source[this.position + 1] ?? \"\")) {\n text += this.source[this.position + 1]!;\n this.position += 2;\n } else {\n text += current;\n this.position++;\n }\n if (text.length >= 1024) { this.budget.admit(2); yield { offset: 0, parts: [{ kind: \"text\", value: text, quoted: true }] }; text = \"\"; }\n }\n if (text) { this.budget.admit(2); yield { offset: 0, parts: [{ kind: \"text\", value: text, quoted: true }] }; }\n }\n\n documentSubstitutionError(source: string, error: ShellSyntaxError, backtick = false): HereDocumentSyntaxError {\n const line = this.documentLine! + source.slice(0, error.offset).split(\"\\n\").length;\n if (error.offset >= source.length) {\n return new HereDocumentSyntaxError(backtick\n ? `shell: command substitution: line ${line}: syntax error: unexpected end of file\\n`\n : `shell: command substitution: line ${line}: unexpected EOF while looking for matching \\`)'\\n`);\n }\n const token = /^[;&|()<>]|^[^\\s;&|()<>]+/u.exec(source.slice(error.offset))?.[0] ?? \"newline\";\n const sourceLine = source.split(\"\\n\")[source.slice(0, error.offset).split(\"\\n\").length - 1] ?? \"\";\n return new HereDocumentSyntaxError(`shell: command substitution: line ${line}: syntax error near unexpected token \\`${token}'\\nshell: command substitution: line ${line}: \\`${sourceLine}'\\n`);\n }\n\n literalExpansion(): string {\n const backtick = this.source[this.position] === \"`\";\n const opening = this.source[this.position + 1];\n if (!backtick && opening !== \"(\" && opening !== \"{\") return this.source[this.position++]!;\n let value = backtick ? \"`\" : `$${opening}`;\n this.position += backtick ? 1 : 2;\n const closers = [backtick ? \"`\" : opening === \"(\" ? \")\" : \"}\"];\n let quote = \"\";\n while (this.position < this.source.length) {\n const current = this.source[this.position++]!;\n if (current === \"\\\\\" && quote !== \"'\") {\n const next = this.source[this.position++];\n if (next === undefined) this.error(\"Trailing delimiter escape\");\n if (next !== \"\\n\") value += quote === '\"' && !/[$`\"\\\\]/u.test(next) ? current + next : next;\n } else if (quote) {\n if (current === quote) quote = \"\";\n else value += current;\n } else if (current === \"'\" || current === '\"') quote = current;\n else {\n value += current;\n if (current === closers.at(-1)) {\n closers.pop();\n if (!closers.length) return value;\n } else if ((current === \"(\" && (closers.at(-1) === \")\" || this.source[this.position - 2] === \"$\"))\n || (current === \"{\" && (closers.at(-1) === \"}\" || this.source[this.position - 2] === \"$\"))) {\n closers.push(current === \"(\" ? \")\" : \"}\");\n if (closers.length + this.depth > 64) this.error(\"Syntax nesting exceeds 64\");\n }\n }\n }\n this.error(\"Unterminated delimiter expansion syntax\");\n }\n\n word(terminator?: string, enclosingQuoted = false, literal = false, arithmetic = false): Word {\n this.budget.admit();\n const offset = this.position;\n const reduction = this.printedNewlineReduction;\n const unprinted = this.unprintedWords;\n const parts: WordPart[] = [];\n let parentheses = 0;\n let conditionals = 0;\n let patternParentheses = 0;\n let regexBracket = false;\n let regexBracketFirst = false;\n let regexBracketNegation = false;\n let regexClass = \"\";\n const conditionalPattern = terminator === undefined ? this.conditionalPattern : undefined;\n let plain = true;\n const text = (value: ShellValue, quoted: boolean, synthetic = false, start = this.position, end = start + shellValueText(value).length, ansi = false) => {\n const projection = shellValueText(value);\n if (conditionalPattern === \"regex\" && regexBracket && quoted && projection.length) { regexBracketFirst = false; regexBracketNegation = false; }\n const previous = parts.at(-1);\n if (previous?.kind === \"text\" && previous.quoted === quoted && !previous.byteValue && typeof value === \"string\" && !ansi && !expansionSpellings.get(previous)?.ansi) {\n previous.value += value;\n const spelling = expansionSpellings.get(previous);\n if (spelling) spelling.end = end;\n if (!synthetic) setQuoteMarker(previous, false);\n } else {\n this.budget.admit();\n const part: WordPart = { kind: \"text\", value: projection, quoted, ...(typeof value === \"string\" ? {} : { byteValue: value }) };\n setQuoteMarker(part, synthetic);\n if ((quoted || ansi) && this.documentLine === undefined) {\n this.budget.admit();\n expansionSpellings.set(part, { source: this.source, start, end, ...(ansi ? { ansi } : {}) });\n }\n parts.push(part);\n }\n };\n while (this.position < this.source.length) {\n const current = this.source[this.position]!;\n const opaque = this.braceReplay?.get(this.position);\n if (opaque !== undefined) { text(opaque, false); this.position++; continue; }\n if (conditionalPattern) {\n if (/[ \\t\\n;]/u.test(current)) break;\n const bracketMaterial = conditionalPattern === \"regex\" && (regexBracket || current === \"[\");\n if (bracketMaterial) {\n if (!regexBracket) { regexBracket = true; regexBracketFirst = true; regexBracketNegation = true; }\n else if (regexClass) {\n if (current === \"]\" && this.source[this.position - 1] === regexClass) regexClass = \"\";\n } else if (current === \"[\" && [\":\", \".\", \"=\"].includes(this.source[this.position + 1] ?? \"\")) { regexClass = this.source[this.position + 1]!; regexBracketFirst = false; }\n else if (current === \"]\" && !regexBracketFirst) regexBracket = false;\n else if (current === \"^\" && regexBracketFirst && regexBracketNegation) regexBracketNegation = false;\n else { regexBracketFirst = false; regexBracketNegation = false; }\n } else if (current === \"(\" && (conditionalPattern === \"regex\" || patternParentheses > 0 || \"?*+@!\".includes(this.source[this.position - 1] ?? \" \"))) {\n if (++patternParentheses > 64) this.error(\"Conditional syntax nesting exceeds 64\");\n } else if (current === \")\" && patternParentheses > 0) patternParentheses--;\n else if (/[()<>]/u.test(current) || patternParentheses === 0 && (this.source.startsWith(\"&&\", this.position) || this.source.startsWith(\"||\", this.position))) break;\n } else if (terminator ? terminator.includes(current) && (!arithmetic || current !== \":\" || parentheses === 0 && conditionals === 0) : !this.braceReplay && /[ \\t\\n;|&()<>]/u.test(current)) break;\n if (current === \"$\" && this.source[this.position + 1] === \"'\" && !enclosingQuoted && !literal) {\n plain = false;\n this.unprintedWords++;\n const start = this.position;\n const value = this.ansiWord();\n text(value, true, false, start, this.position, true);\n } else if (current === \"'\" && !enclosingQuoted) {\n plain = false;\n let end = this.source.indexOf(\"'\", this.position + 1);\n if (end === -1) {\n if (!this.braceReplay) this.error(\"Unterminated single quote\", { quote: \"'\", line: this.lineAt(this.position) });\n end = this.source.length;\n }\n if (this.braceReplay?.size) {\n let start = this.position + 1;\n for (let position = start; position < end; position++) {\n const opaque = this.braceReplay.get(position);\n if (opaque === undefined) continue;\n if (position > start) text(this.source.slice(start, position), true, false, start, position);\n text(opaque, true, false, position, position + 1);\n start = position + 1;\n }\n text(this.source.slice(start, end), true, false, start, end);\n } else text(this.source.slice(this.position + 1, end), true, false, this.position, Math.min(end + 1, this.source.length));\n this.position = Math.min(end + 1, this.source.length);\n } else if (current === '\"') {\n plain = false;\n const quoteLine = this.lineAt(this.position);\n this.position++;\n text(\"\", true, true, this.position - 1, this.position);\n const quoteParts = parts.length;\n while (this.position < this.source.length && this.source[this.position] !== '\"') {\n const inner = this.source[this.position]!;\n const opaque = this.braceReplay?.get(this.position);\n if (opaque !== undefined) { text(opaque, true); this.position++; }\n else if (!literal && (inner === \"$\" || inner === \"`\")) this.expansion(parts, true);\n else if (inner === \"\\\\\" && /[$`\"\\\\\\n]/u.test(this.source[this.position + 1] ?? \"\")) {\n const escaped = this.source[this.position + 1]!;\n if (escaped !== \"\\n\") text(escaped, true, false, this.position, this.position + 2);\n else this.printedNewlineReduction++;\n this.position += 2;\n } else {\n text(inner, true);\n this.position++;\n }\n }\n if (this.source[this.position] !== '\"' && !this.braceReplay) this.error(\"Unterminated double quote\", { quote: '\"', line: quoteLine });\n if (parts.length === quoteParts) setQuoteMarker(parts.at(-1)!, false);\n const spelling = expansionSpellings.get(parts.at(-1)!);\n if (spelling) spelling.end = Math.min(this.position + 1, this.source.length);\n if (this.position < this.source.length) this.position++;\n } else if (current === \"\\\\\") {\n if (this.source[this.position + 1] !== \"\\n\") plain = false;\n this.position++;\n if (this.position === this.source.length) {\n if (!this.braceReplay) this.error(\"Trailing escape\");\n text(\"\", true);\n break;\n }\n if (this.source[this.position] !== \"\\n\") text(this.source[this.position]!, true, false, this.position - 1, this.position + 1);\n else this.printedNewlineReduction++;\n this.position++;\n } else if (current === \"$\" || current === \"`\") {\n plain = false;\n if (literal) {\n if (current === \"$\" && [\"'\", '\"'].includes(this.source[this.position + 1] ?? \"\")) this.error(\"Unsupported shell quoting in here-document delimiter\");\n text(this.literalExpansion(), current === \"`\");\n }\n else this.expansion(parts, enclosingQuoted);\n } else {\n if (arithmetic) {\n if (current === \"(\") parentheses++;\n else if (current === \")\") parentheses--;\n else if (current === \"?\") conditionals++;\n else if (current === \":\" && conditionals > 0) conditionals--;\n }\n text(current, false);\n this.position++;\n }\n }\n if (conditionalPattern === \"regex\" && patternParentheses > 0) this.error(\"Unterminated conditional regular expression group\");\n const printedNewlines = this.source.slice(offset, this.position).split(\"\\n\").length - 1 - (this.printedNewlineReduction - reduction);\n return { parts, offset, ...(unprinted === this.unprintedWords ? { printedNewlines } : {}), ...(plain ? { plain: parts.map((part) => part.kind === \"text\" ? part.value : \"\").join(\"\") } : {}) };\n }\n\n ansiWord(): ShellValue {\n const quoteLine = this.lineAt(this.position);\n this.position += 2;\n const bytes: number[] = [];\n const encoder = new TextEncoder();\n const escapes: Readonly<Record<string, number>> = { a: 7, b: 8, e: 27, E: 27, f: 12, n: 10, r: 13, t: 9, v: 11, \"\\\\\": 92, \"'\": 39, '\"': 34, \"?\": 63 };\n while (this.position < this.source.length) {\n const character = String.fromCodePoint(this.source.codePointAt(this.position)!);\n this.position += character.length;\n if (character === \"'\") {\n const nul = bytes.indexOf(0);\n const raw = Uint8Array.from(nul < 0 ? bytes : bytes.slice(0, nul));\n try { return new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(raw); }\n catch (error) {\n if (!(error instanceof TypeError) || !(\"code\" in error) || error.code !== \"ERR_ENCODING_INVALID_ENCODED_DATA\") throw error;\n this.budget.admit(2);\n return shellValueFromBytes(raw);\n }\n }\n if (character !== \"\\\\\") { bytes.push(...encoder.encode(character)); continue; }\n const escape = this.source[this.position++];\n if (escape === undefined) this.error(\"Unterminated ANSI-C quote\", { quote: \"'\", line: quoteLine });\n if (escapes[escape] !== undefined) { bytes.push(escapes[escape]!); continue; }\n if (/[0-7]/u.test(escape)) {\n const digits = escape + (/^[0-7]{0,2}/u.exec(this.source.slice(this.position))?.[0] ?? \"\");\n this.position += digits.length - 1;\n bytes.push(parseInt(digits, 8) & 255);\n } else if ([\"x\", \"u\", \"U\"].includes(escape)) {\n const maximum = escape === \"x\" ? 2 : escape === \"u\" ? 4 : 8;\n const digits = new RegExp(`^[0-9a-fA-F]{1,${maximum}}`, \"u\").exec(this.source.slice(this.position))?.[0];\n if (!digits) { bytes.push(92, escape.charCodeAt(0)); continue; }\n this.position += digits.length;\n const code = parseInt(digits, 16);\n if (escape === \"x\") bytes.push(code);\n else if (this.byteLocale && code > 127) {\n bytes.push(...encoder.encode(`\\\\${code <= 0xffff ? \"u\" : \"U\"}${code.toString(16).toUpperCase().padStart(code <= 0xffff ? 4 : 8, \"0\")}`));\n } else {\n if (code > 0x10ffff || (code >= 0xd800 && code <= 0xdfff)) this.error(\"Unsupported non-scalar ANSI-C Unicode escape\");\n bytes.push(...encoder.encode(String.fromCodePoint(code)));\n }\n } else if (escape === \"c\" && this.source[this.position] !== \"'\" && this.position < this.source.length) {\n const control = this.source[this.position++]!;\n if (control === \"\\\\\" && this.source[this.position] === \"\\\\\") this.position++;\n bytes.push(control === \"?\" ? 127 : control.toUpperCase().charCodeAt(0) & 31);\n } else bytes.push(92, ...encoder.encode(escape));\n }\n this.error(\"Unterminated ANSI-C quote\", { quote: \"'\", line: quoteLine });\n }\n\n expansion(parts: WordPart[], quoted: boolean): void {\n this.budget.admit();\n const spellingStart = this.position;\n const line = this.documentLine ?? this.lineAt(this.position);\n if (this.source[this.position] === \"`\") {\n if (this.braceReplay && this.position === this.source.length - 1) {\n parts.push({ kind: \"text\", value: \"`\", quoted });\n this.position++;\n return;\n }\n this.position++;\n let source = \"\";\n while (this.position < this.source.length && this.source[this.position] !== \"`\") {\n if (this.source[this.position] === \"\\\\\" && /[$`\\\\]/u.test(this.source[this.position + 1] ?? \"\")) this.position++;\n source += this.source[this.position++]!;\n }\n if (this.source[this.position] !== \"`\") this.error(\"Unterminated command substitution\");\n this.position++;\n try { parts.push({ kind: \"substitution\", script: parseSource(source, this.depth + this.operandDepth + 1, this.warnings, line - 1, this.byteLocale, this.budget), line, quoted }); }\n catch (error) {\n if (this.documentLine === undefined || !(error instanceof ShellSyntaxError) || /nesting|exceeds/u.test(error.reason)) throw error;\n this.budget.admit();\n parts.push({ kind: \"failed-substitution\", diagnostic: this.documentSubstitutionError(source, error, true).diagnostic, quoted });\n }\n if (this.documentLine === undefined) {\n this.budget.admit();\n expansionSpellings.set(parts.at(-1)!, { source: this.source, start: spellingStart, end: this.position });\n }\n return;\n }\n this.position++;\n if ([\"$\", \"!\"].includes(this.source[this.position] ?? \"\") || (!quoted && [\"'\", '\"'].includes(this.source[this.position] ?? \"\"))) this.error(\"Unsupported shell quoting or special parameter\");\n if (this.source.startsWith(\"((\", this.position)) {\n const start = this.position + 2;\n const end = arithmeticEnd(this.source, start);\n const source = this.source.slice(start, end);\n parts.push({ kind: \"arithmetic\", expression: prepareArithmetic(source, this.budget), source, line, quoted });\n this.position = end + 2;\n } else if (this.source[this.position] === \"(\") {\n const start = this.position + 1;\n let nested: Parser;\n let script: Script;\n try {\n this.budget.admit();\n nested = new Parser(this.budget, this.source.slice(start), this.depth + this.operandDepth + 1, this.warnings, this.lineAt(start) - 1, undefined, this.byteLocale, false, this.lineIndex, this.sourceOffset + start);\n script = nested.script(new Set([\")\"]));\n }\n catch (error) {\n if (this.documentLine !== undefined && error instanceof ShellSyntaxError && !/nesting|exceeds/u.test(error.reason)) throw this.documentSubstitutionError(this.source.slice(start), error);\n if (error instanceof ShellSyntaxError && !/Unterminated|nesting|exceeds/u.test(error.reason)) throw new ShellSyntaxError(error.reason, start + error.offset, 127);\n throw error;\n }\n if (nested.current.value !== \")\") {\n if (this.documentLine !== undefined) throw this.documentSubstitutionError(this.source.slice(start), new ShellSyntaxError(\"Unterminated command substitution\", nested.current.offset));\n this.error(\"Unterminated command substitution\");\n }\n if (nested.lexer.documents.length) this.error(\"Here-document requires a newline before closing command substitution\");\n this.position += nested.current.end + 1;\n if (script.printedNewlines === undefined) this.unprintedWords++;\n else this.printedNewlineReduction += this.source.slice(start, this.position - 1).split(\"\\n\").length - 1 - script.printedNewlines;\n parts.push({ kind: \"substitution\", script, line, sourceLine: script.line ?? line, quoted });\n } else if (this.source[this.position] === \"{\") {\n this.position++;\n const parameterStart = this.position - 2;\n const length = this.source[this.position] === \"#\" && /[a-zA-Z_]/u.test(this.source[this.position + 1] ?? \"\");\n if (length) this.position++;\n const name = /^(?:[a-zA-Z_][a-zA-Z_0-9]*|[0-9]+|[?@*#-])/u.exec(this.source.slice(this.position))?.[0];\n if (!name) this.error(\"Unsupported parameter expansion\");\n this.position += name.length;\n let selector: ArraySelector | undefined;\n if (this.source[this.position] === \"[\") {\n if (!/^[a-zA-Z_][a-zA-Z_0-9]*$/u.test(name)) this.error(\"Unsupported indexed-array parameter\");\n const start = ++this.position;\n const end = this.source.indexOf(\"]\", start);\n if (end < 0) this.error(\"Unterminated indexed-array subscript\");\n selector = arraySelector(this.source.slice(start, end), start, this.budget);\n this.position = end + 1;\n if (this.source[this.position] !== \"}\") this.error(\"Unsupported indexed-array operator\");\n }\n const operator = /^(?::[-=+?]|##|%%|\\/\\/|\\/[#%]?|[-=+?#%])/u.exec(this.source.slice(this.position))?.[0];\n let alternate: Word | undefined;\n let replacement: Word | undefined;\n let substring: Extract<WordPart, { kind: \"variable\" }>[\"substring\"];\n if (operator || this.source[this.position] === \":\") {\n if (this.depth + this.operandDepth + 1 > 64) this.error(\"Syntax nesting exceeds 64\");\n this.operandDepth++;\n try {\n if (operator) {\n if (length) this.error(\"Invalid length expansion\");\n this.position += operator.length;\n alternate = this.word(operator.startsWith(\"/\") ? \"/}\" : \"}\", quoted && ![\"#\", \"##\", \"%\", \"%%\"].includes(operator) && !operator.startsWith(\"/\"));\n if (operator.startsWith(\"/\") && this.source[this.position] === \"/\") {\n this.position++;\n replacement = this.word(\"}\");\n }\n } else {\n if (length || !/^(?:[a-zA-Z_][a-zA-Z_0-9]*|[0-9]+)$/u.test(name)) this.error(\"Unsupported non-scalar substring expansion\");\n this.position++;\n const offset = this.word(\":}\", true, false, true);\n let substringLength: Word | undefined;\n if (this.source[this.position] === \":\") {\n this.position++;\n substringLength = this.word(\"}\", true, false, true);\n }\n this.budget.admit();\n substring = { offset, ...(substringLength ? { length: substringLength } : {}), source: this.source.slice(parameterStart, this.position + 1) };\n }\n } finally { this.operandDepth--; }\n }\n if (this.source[this.position] !== \"}\") this.error(\"Unterminated or unsupported parameter expansion\");\n this.position++;\n const part: WordPart = { kind: \"variable\", name, quoted, line, ...(length ? { length } : {}), ...(operator ? { operator, alternate: alternate! } : {}), ...(replacement ? { replacement } : {}), ...(substring ? { substring } : {}) };\n if (selector) setArraySelector(part, selector);\n parts.push(part);\n } else {\n const name = /^(?:[a-zA-Z_][a-zA-Z_0-9]*|[?@*#0-9-])/u.exec(this.source.slice(this.position))?.[0];\n if (name) {\n this.position += name.length;\n parts.push({ kind: \"variable\", name, quoted, line });\n } else parts.push({ kind: \"text\", value: \"$\", quoted });\n }\n if (this.documentLine === undefined) {\n this.budget.admit();\n expansionSpellings.set(parts.at(-1)!, { source: this.source, start: spellingStart, end: this.position });\n }\n }\n}\n\nclass Parser {\n readonly lexer: Lexer;\n current: Token;\n lookahead: Token | undefined;\n nesting = 0;\n readonly openCommands: { name: string; line: number }[] = [];\n\n constructor(readonly budget: ParseBudget, source: string, depth: number, warnings: string[] = [], lineOffset = 0, position?: number, byteLocale = false, partial = false, lineIndex = new SourceLineIndex(source, budget), sourceOffset = 0) {\n if (position === undefined && depth === 0 && source.includes(\"\\0\")) throw new ShellSyntaxError(\"NUL bytes are not valid shell source\", source.indexOf(\"\\0\"));\n budget.admit();\n this.lexer = new Lexer(budget, source, depth, warnings, lineOffset, byteLocale, undefined, partial, lineIndex, sourceOffset);\n this.lexer.position = position ?? 0;\n this.current = this.lexer.next();\n }\n\n error(message: string): never {\n const command = this.current.kind === \"end\" ? this.openCommands.findLast((command) => [\"{\", \"if\", \"while\", \"until\", \"for\", \"case\"].includes(command.name)) : undefined;\n throw new ShellSyntaxError(message, this.current.offset, 2, command);\n }\n\n advance(): Token {\n const previous = this.current;\n this.current = this.lookahead ?? this.lexer.next();\n this.lookahead = undefined;\n return previous;\n }\n\n peek(): Token {\n return this.lookahead ??= this.lexer.next();\n }\n\n is(value: string): boolean { return this.current.value === value; }\n\n isEnd(): boolean { return this.current.kind === \"end\"; }\n\n expect(value: string): void {\n if (!this.is(value)) this.error(`Expected ${value}`);\n this.advance();\n }\n\n newlines(): void { while (this.is(\"\\n\")) this.advance(); }\n\n script(stops = new Set<string>(), inputUnit = false): Script {\n this.budget.admit();\n const lists: AndOr[] = [];\n const separators: boolean[] = [];\n this.newlines();\n const line = this.lexer.lineAt(this.current.offset);\n while (this.current.kind !== \"end\" && !stops.has(this.current.value)) {\n this.budget.admit();\n const pipelines = [this.pipeline()];\n const operators: (\"&&\" | \"||\")[] = [];\n while (this.is(\"&&\") || this.is(\"||\")) {\n operators.push(this.advance().value as \"&&\" | \"||\");\n this.newlines();\n pipelines.push(this.pipeline());\n }\n lists.push({ pipelines, operators });\n separators.push(this.is(\"\\n\"));\n if (inputUnit && this.is(\"\\n\")) break;\n if (this.is(\";\") || this.is(\"\\n\")) {\n this.advance();\n if (inputUnit && this.is(\"\\n\")) break;\n this.newlines();\n } else if (!this.isEnd() && !this.is(\")\") && !(stops.has(this.current.value) && [\";;\", \";&\", \";;&\"].includes(this.current.value))) this.error(\"Expected command separator\");\n }\n const printed = printedSimpleLines(lists, separators, this.budget);\n return { lists, line, ...printed };\n }\n\n pipeline(): Pipeline {\n this.budget.admit();\n const negate = this.is(\"!\");\n if (negate) this.advance();\n const commands = [this.command()];\n while (this.is(\"|\") || this.is(\"|&\")) {\n const operator = this.advance();\n if (operator.value === \"|&\") {\n this.budget.admit(3);\n commands.at(-1)!.redirects.push({\n descriptor: 2, operator: \">&\", implicitPipeline: true,\n target: { offset: operator.offset, plain: \"1\", spelling: \"1\", parts: [{ kind: \"text\", value: \"1\", quoted: false }] },\n });\n }\n this.newlines();\n commands.push(this.command());\n }\n return { commands, negate };\n }\n\n command(): Command {\n if (++this.nesting + this.lexer.depth > 64) this.error(\"Syntax nesting exceeds 64\");\n this.budget.admit();\n const line = this.lexer.lineAt(this.current.offset);\n this.openCommands.push({ name: this.current.value, line });\n try {\n const command = this.commandInner();\n this.budget.admit();\n return { ...command, line: command.line ?? line };\n } finally { this.nesting--; this.openCommands.pop(); }\n }\n\n commandInner(): Command {\n this.budget.admit();\n let command: Command;\n if (this.is(\"[[\")) {\n const start = this.current.end;\n this.lexer.conditional = true;\n this.advance();\n let nodes = 0;\n const grouped = new WeakSet<ConditionalExpression>();\n const admit = (): void => { if (nodes >= 4096) this.error(\"Conditional syntax exceeds 4096 nodes\"); nodes++; };\n const operand = (): Word => {\n if (this.current.kind !== \"word\" || this.is(\"]]\")) this.error(\"Expected conditional operand\");\n return this.advance().word!;\n };\n const primary = (depth: number): ConditionalExpression => {\n if (depth > 64) this.error(\"Conditional syntax nesting exceeds 64\");\n if (this.is(\"!\")) {\n admit();\n this.advance();\n const expression = primary(depth + 1);\n if (expression.kind === \"not\" && !grouped.has(expression)) return expression.operand;\n this.budget.admit();\n return { kind: \"not\", operand: expression };\n }\n if (this.is(\"(\")) { this.advance(); const expression = disjunction(depth + 1); this.expect(\")\"); grouped.add(expression); return expression; }\n admit();\n this.budget.admit();\n const first = operand();\n if (conditionalBinary.has(this.current.value)) {\n const operator = this.current.value;\n this.lexer.conditionalPattern = operator === \"=~\" ? \"regex\" : [\"=\", \"==\", \"!=\"].includes(operator) ? \"pattern\" : undefined;\n this.advance();\n this.lexer.conditionalPattern = undefined;\n return { kind: \"binary\", operator, left: first, right: operand() };\n }\n if (first.plain !== undefined && conditionalUnary.has(first.plain) && this.current.kind === \"word\" && !this.is(\"]]\")) return { kind: \"unary\", operator: first.plain, operand: operand() };\n return { kind: \"nonempty\", operand: first };\n };\n const conjunction = (depth: number): ConditionalExpression => {\n let expression = primary(depth);\n while (this.is(\"&&\")) { admit(); this.budget.admit(); this.advance(); expression = { kind: \"and\", left: expression, right: primary(depth) }; }\n return expression;\n };\n const disjunction = (depth: number): ConditionalExpression => {\n let expression = conjunction(depth);\n while (this.is(\"||\")) { admit(); this.budget.admit(); this.advance(); expression = { kind: \"or\", left: expression, right: conjunction(depth) }; }\n return expression;\n };\n const expression = disjunction(1);\n if (!this.is(\"]]\")) this.error(\"Expected ]]\");\n const source = this.lexer.source.slice(start, this.current.offset);\n this.lexer.conditional = false;\n this.advance();\n command = { kind: \"conditional\", expression, source, redirects: [] };\n } else if (this.is(\"(\") && this.lexer.source.startsWith(\"((\", this.current.offset)) {\n const start = this.current.offset + 2;\n const end = arithmeticEnd(this.lexer.source, start);\n const source = this.lexer.source.slice(start, end);\n command = { kind: \"arithmetic\", expression: prepareArithmetic(source, this.budget), source, redirects: [] };\n this.lexer.position = end + 2;\n this.lookahead = undefined;\n this.current = this.lexer.next();\n } else if (this.is(\"(\") || this.is(\"{\")) {\n const subshell = this.is(\"(\");\n this.advance();\n const body = this.script(new Set([subshell ? \")\" : \"}\"]));\n if (!body.lists.length) this.error(\"Empty compound command\");\n this.expect(subshell ? \")\" : \"}\");\n command = { kind: subshell ? \"subshell\" : \"group\", body, redirects: [] };\n } else if (this.is(\"if\")) {\n this.advance();\n const branches: { condition: Script; body: Script }[] = [];\n while (true) {\n const condition = this.nonemptyScript(new Set([\"then\"]));\n this.expect(\"then\");\n const body = this.nonemptyScript(new Set([\"elif\", \"else\", \"fi\"]));\n this.budget.admit();\n branches.push({ condition, body });\n if (!this.is(\"elif\")) break;\n this.advance();\n }\n let otherwise: Script | undefined;\n if (this.is(\"else\")) {\n this.advance();\n otherwise = this.nonemptyScript(new Set([\"fi\"]));\n }\n this.expect(\"fi\");\n command = { kind: \"if\", branches, ...(otherwise ? { otherwise } : {}), redirects: [] };\n } else if (this.is(\"case\")) {\n this.advance();\n if (!this.current.word) this.error(\"Expected case subject\");\n const subject = this.advance().word!;\n this.newlines();\n this.expect(\"in\");\n this.newlines();\n const clauses: CaseClause[] = [];\n while (!this.is(\"esac\")) {\n if (this.is(\"(\")) this.advance();\n const patterns: Word[] = [];\n while (true) {\n if (!this.current.word) this.error(\"Expected case pattern\");\n patterns.push(this.advance().word!);\n if (!this.is(\"|\")) break;\n this.advance();\n }\n this.expect(\")\");\n const body = this.script(new Set([\";;\", \";&\", \";;&\", \"esac\"]));\n if (![\";;\", \";&\", \";;&\", \"esac\"].includes(this.current.value)) this.error(\"Expected case terminator\");\n const terminator = this.current.value as CaseClause[\"terminator\"];\n this.budget.admit();\n clauses.push({ patterns, body, terminator });\n if (terminator === \"esac\") break;\n this.advance();\n this.newlines();\n }\n this.expect(\"esac\");\n command = { kind: \"case\", subject, clauses, redirects: [] };\n } else if (this.is(\"while\") || this.is(\"until\")) {\n const kind = this.advance().value as \"while\" | \"until\";\n const condition = this.nonemptyScript(new Set([\"do\"]));\n this.expect(\"do\");\n const body = this.nonemptyScript(new Set([\"done\"]));\n this.expect(\"done\");\n command = { kind, condition, body, redirects: [] };\n } else if (this.is(\"for\")) {\n this.advance();\n const name = this.advance().value;\n if (!/^[a-zA-Z_][a-zA-Z_0-9]*$/u.test(name)) this.error(\"Invalid for variable\");\n this.newlines();\n let words: Word[] | undefined;\n if (this.is(\"in\")) {\n this.advance();\n words = [];\n while (this.current.kind === \"word\") words.push(this.advance().word!);\n }\n if (this.is(\";\") || this.is(\"\\n\")) this.advance();\n else if (words) this.error(\"Expected for separator\");\n this.newlines();\n this.expect(\"do\");\n const body = this.nonemptyScript(new Set([\"done\"]));\n this.expect(\"done\");\n command = { kind: \"for\", name, ...(words ? { words } : {}), body, redirects: [] };\n } else if (this.is(\"function\")) {\n this.advance();\n if (this.current.kind !== \"word\" || !/^[a-zA-Z_][a-zA-Z_0-9]*$/u.test(this.current.value)) this.error(\"Invalid function name\");\n const name = this.advance().value;\n if (this.is(\"(\")) {\n this.advance();\n this.expect(\")\");\n }\n this.newlines();\n if (!this.is(\"{\")) this.error(\"Expected brace function body\");\n command = { kind: \"function\", name, body: this.command(), redirects: [] };\n } else if (this.current.kind === \"word\" && !compoundHead(this.current.word!, this.budget) && this.peek().value === \"(\") {\n const name = this.advance().value;\n if (!/^[a-zA-Z_][a-zA-Z_0-9]*$/u.test(name)) this.error(\"Invalid function name\");\n this.expect(\"(\");\n this.expect(\")\");\n this.newlines();\n if (![\"{\", \"(\", \"if\", \"case\", \"while\", \"until\", \"for\", \"[[\"].includes(this.current.value)) this.error(\"Expected function body\");\n command = { kind: \"function\", name, body: this.command(), redirects: [] };\n } else {\n if ([\"!\", \"then\", \"else\", \"elif\", \"fi\", \"do\", \"done\", \"}\", \"case\", \"esac\", \"select\", \"function\", \"[[\", \"]]\"].includes(this.current.value)) this.error(`Unexpected or unsupported keyword ${this.current.value}`);\n const words: Word[] = [];\n const redirects: Redirect[] = [];\n let line: number | undefined;\n while (true) {\n const wordLine = this.lexer.lineAt(Math.max(this.current.offset, this.current.end - 1));\n const redirect = this.redirect();\n if (redirect) { line ??= redirect.line; redirects.push(redirect); }\n else if (this.current.kind === \"word\") {\n line ??= wordLine;\n let word = this.advance().word!;\n const head = compoundHead(word, this.budget);\n if (head && this.is(\"(\")) {\n this.advance();\n const entries: ArrayEntry[] = [];\n this.newlines();\n while (this.current.kind === \"word\") {\n const original = this.advance().word!;\n const entry = compoundEntry(original, this.budget);\n if (entry.index) { this.budget.admit(); compoundEntryWords.set(entry, original); }\n entries.push(entry);\n this.newlines();\n }\n if (!this.is(\")\")) this.error(\"Unsupported indexed-array compound assignment\");\n const end = this.advance().end;\n this.budget.admit(2);\n word = { offset: word.offset, parts: word.parts, spelling: this.lexer.source.slice(word.offset, end) };\n setArrayAssignment(word, { kind: \"compound\", ...head, entries });\n } else {\n const assignment = words.every(previous => getArrayAssignment(previous) || scalarAssignmentName(previous)) ? elementAssignment(word, this.budget) : undefined;\n if (assignment) setArrayAssignment(word, assignment);\n }\n words.push(word);\n }\n else break;\n }\n if (!words.length && !redirects.length) this.error(\"Expected command\");\n if (words.some(word => getArrayAssignment(word)) && words.some(word => !getArrayAssignment(word) && !scalarAssignmentName(word))) this.error(\"Indexed-array command prefixes are unsupported\");\n return { kind: \"simple\", words, redirects, ...(line === undefined ? {} : { line }) };\n }\n let redirect: Redirect | undefined;\n while ((redirect = this.redirect())) command.redirects.push(redirect);\n return command;\n }\n\n nonemptyScript(stops: Set<string>): Script {\n const script = this.script(stops);\n if (!script.lists.length) this.error(\"Expected nonempty compound list\");\n return script;\n }\n\n redirect(): Redirect | undefined {\n let descriptor: number | undefined;\n if (this.current.kind === \"word\" && /^\\d+$/u.test(this.current.value)) {\n const next = this.peek();\n if (/^(?:>|>>|<|<<|<<-|<<<|>&|<&|>\\|)$/u.test(next.value) && this.current.end === next.offset) descriptor = Number(this.advance().value);\n }\n if (!/^(?:>|>>|<|<<|<<-|<<<|>&|<&|>\\||&>)$/u.test(this.current.value) || this.current.kind !== \"operator\") return undefined;\n this.budget.admit();\n const operator = this.advance().value;\n descriptor ??= operator.startsWith(\"<\") ? 0 : 1;\n if (!Number.isSafeInteger(descriptor) || descriptor > 255) this.error(\"File descriptor must be between 0 and 255\");\n if (!this.current.word) this.error(\"Expected redirect target\");\n const target = this.advance();\n return { descriptor, operator, target: target.word!, line: this.lexer.lineAt(Math.max(target.offset, target.end - 1)), ...((operator === \"<&\" || operator === \">&\") && this.lexer.source[target.end - 1] === \"-\" ? { move: true } : {}), ...(target.document ? { document: target.document } : {}) };\n }\n}\n\nexport function parseShell(source: string, depth = 0, options: ShellParseOptions = {}): Script {\n const budget = new ParseBudget(options.maxParseUnits);\n const warnings: string[] = [];\n const script = parseSource(source, depth, warnings, 0, false, budget);\n budget.admit();\n return { ...script, ...(warnings.length ? { warnings } : {}) };\n}\n\nexport function parseBraceWord(source: string, opaque: ReadonlyMap<number, ShellValue>, budget: ParseBudget): Word {\n budget.admit(source.length + 1);\n const lexer = new Lexer(budget, source, 0);\n lexer.braceReplay = opaque;\n return lexer.word();\n}\n\nexport function* hereDocumentWords(document: HereDocument, line: number, byteLocale: boolean, warnings: string[], budget = new ParseBudget()): Generator<Word> {\n if (document.quoted) { budget.admit(2); yield { offset: document.offset, parts: [{ kind: \"text\", value: document.body, quoted: true }] }; }\n else { budget.admit(); yield* new Lexer(budget, document.body, document.depth, warnings, line - 1, byteLocale, line).documentWords(); }\n}\n\nexport function parseShellUnit(source: string, position = 0, byteLocale = false, budget = new ParseBudget(), lineIndex = new SourceLineIndex(source, budget)): { script: Script; next: number } {\n const warnings: string[] = [];\n budget.admit();\n if (lineIndex.source !== source || lineIndex.budget !== budget) throw new TypeError(\"Source line index belongs to a different source or parse budget\");\n const parser = new Parser(budget, source, 0, warnings, 0, position, byteLocale, false, lineIndex);\n const script = parser.script(new Set(), true);\n const next = parser.current.end;\n const nul = source.indexOf(\"\\0\", position);\n if (nul >= 0 && nul < next) throw new ShellSyntaxError(\"NUL bytes are not valid shell source\", nul);\n budget.admit(2);\n return { script: { ...script, ...(warnings.length ? { warnings } : {}) }, next };\n}\n\nexport function parseShellInputUnit(source: string, byteLocale = false, budget = new ParseBudget(), lineIndex = new SourceLineIndex(source, budget)): { script: Script; next: number } | undefined {\n const warnings: string[] = [];\n try {\n budget.admit();\n if (lineIndex.source !== source || lineIndex.budget !== budget) throw new TypeError(\"Source line index belongs to a different source or parse budget\");\n const parser = new Parser(budget, source, 0, warnings, 0, 0, byteLocale, true, lineIndex);\n const script = parser.script(new Set(), true);\n budget.admit(2);\n return { script: { ...script, ...(warnings.length ? { warnings } : {}) }, next: parser.current.end };\n } catch (error) {\n if (error instanceof IncompleteShellInput) return undefined;\n if (error instanceof ShellSyntaxError && (/^Unterminated|^Trailing escape/u.test(error.reason) || (error.offset >= source.length && !/Unsupported|unsupported|nesting|exceeds/u.test(error.reason)))) return undefined;\n throw error;\n }\n}\n\nfunction parseSource(source: string, depth: number, warnings: string[], lineOffset: number, byteLocale: boolean, budget: ParseBudget): Script {\n budget.admit();\n const parser = new Parser(budget, source, depth, warnings, lineOffset, undefined, byteLocale);\n const script = parser.script();\n if (parser.current.kind !== \"end\") parser.error(\"Unexpected token\");\n return script;\n}\n", "import type { ByteSink, ByteSource, CommandContext, CommandRegistry, CommandResult, FileSystem } from \"../contracts/index.js\";\nimport type { InternalErrorHandler, CommandArguments } from \"../contracts/command.js\";\n\nexport interface ShellInvokeOptions {\n readonly argumentValues?: CommandArguments;\n readonly signal?: AbortSignal | undefined;\n readonly stdin?: ByteSource;\n readonly stdinIsDefault?: boolean;\n readonly stdout?: ByteSink;\n readonly stderr?: ByteSink;\n readonly cwd?: string;\n readonly env?: Readonly<Record<string, string>>;\n readonly replaceEnv?: boolean;\n}\n\nexport interface ShellCommandContext extends CommandContext {\n readonly invoke: (command: string, args: readonly string[], options?: ShellInvokeOptions) => Promise<CommandResult>;\n}\n\nexport interface ShellLimits {\n readonly maxParseUnits?: number;\n readonly maxInputBytes?: number;\n readonly maxOutputBytes?: number;\n readonly maxCommands?: number;\n readonly maxFileSystemOperations?: number;\n readonly maxPathComponents?: number;\n /** Maximum redirects per executed command, including implicit |&; defaults to 64.\n * Zero permits only redirect-free commands. Not a global byte or filesystem-call budget. */\n readonly maxRedirects?: number;\n readonly maxPipelineStages?: number;\n readonly maxLoopIterations?: number;\n readonly maxSubstitutionDepth?: number;\n readonly maxSourceBytes?: number;\n readonly maxExpansionFields?: number;\n readonly maxExpansionBytes?: number;\n readonly maxWallClockMs?: number;\n readonly maxCpuMs?: number;\n readonly pipeHighWaterMark?: number;\n}\n\nexport interface ShellParseOptions {\n readonly maxParseUnits?: number;\n}\n\nexport interface ShellOptions {\n readonly onInternalError?: InternalErrorHandler;\n readonly fs: FileSystem;\n readonly commands?: CommandRegistry;\n readonly cwd?: string;\n readonly env?: Readonly<Record<string, string>>;\n readonly limits?: ShellLimits;\n}\n\nexport interface ShellExecOptions {\n readonly onInternalError?: InternalErrorHandler;\n readonly fs?: FileSystem;\n readonly cwd?: string;\n readonly env?: Readonly<Record<string, string>>;\n readonly stdin?: string | Uint8Array | ByteSource;\n readonly stdout?: ByteSink;\n readonly stderr?: ByteSink;\n readonly signal?: AbortSignal;\n readonly limits?: ShellLimits;\n}\n\nexport interface ShellResult {\n readonly stdout: string;\n readonly stderr: string;\n readonly stdoutBytes: Uint8Array;\n readonly stderrBytes: Uint8Array;\n readonly exitCode: number;\n}\n\nexport class ShellSyntaxError extends SyntaxError {\n constructor(readonly reason: string, readonly offset: number, readonly exitCode = 2, readonly incompleteCommand?: { name: string; line: number }, readonly unclosedQuote?: { quote: string; line: number }) {\n super(`${reason} at offset ${offset}`);\n this.name = \"ShellSyntaxError\";\n }\n}\n\nexport class ShellLimitError extends Error {\n constructor(readonly limit: keyof ShellLimits) {\n super(`Shell limit exceeded: ${limit}`);\n this.name = \"ShellLimitError\";\n }\n}\n", "import { ShellLimitError } from \"./types.js\";\n\nexport const defaultMaxParseUnits = 262_144;\n\nexport class ParseBudget {\n #remaining: number;\n #failure: ShellLimitError | undefined;\n\n constructor(maximum = defaultMaxParseUnits, private readonly signal?: AbortSignal, private readonly onLimit?: (error: ShellLimitError) => void) {\n if (!Number.isSafeInteger(maximum) || maximum < 0) throw new RangeError(\"maxParseUnits must be a nonnegative safe integer\");\n this.#remaining = maximum;\n }\n\n admit(units = 1): void {\n this.signal?.throwIfAborted();\n if (this.#failure) throw this.#failure;\n if (!Number.isSafeInteger(units) || units < 0) throw new RangeError(\"Parse admission must be a nonnegative safe integer\");\n if (units > this.#remaining) {\n const error = this.#failure = new ShellLimitError(\"maxParseUnits\");\n this.onLimit?.(error);\n throw error;\n }\n this.#remaining -= units;\n }\n}\n", "import { ParseBudget } from \"./parse-budget.js\";\n\nexport class SourceLineIndex {\n #source: string;\n #scanned = 0;\n #newlines: number[] | undefined;\n\n constructor(source: string, readonly budget: ParseBudget) { this.#source = source; }\n\n get source(): string { return this.#source; }\n\n append(source: string): void { this.#source += source; }\n\n lineAt(position: number): number {\n this.budget.admit(0);\n if (!Number.isSafeInteger(position) || position < 0 || position > this.#source.length) throw new RangeError(\"Invalid source line position\");\n if (position === 0 || position === 1 && this.#source[0] !== \"\\n\") return 1;\n while (this.#scanned < position) {\n if (this.#scanned % 1024 === 0) this.budget.admit();\n if (this.#source.charCodeAt(this.#scanned) === 10) {\n this.budget.admit();\n (this.#newlines ??= []).push(this.#scanned);\n }\n this.#scanned++;\n }\n this.budget.admit(0);\n let low = 0;\n let high = this.#newlines?.length ?? 0;\n while (low < high) {\n const middle = low + Math.floor((high - low) / 2);\n if (this.#newlines![middle]! < position) low = middle + 1;\n else high = middle;\n }\n return low + 1;\n }\n}\n", "import { PublicDiagnostic } from \"../diagnostics.js\";\nimport { ShellSyntaxError } from \"./types.js\";\nimport { ParseBudget } from \"./parse-budget.js\";\n\nexport type Arithmetic = (\n | { kind: \"literal\"; value: bigint }\n | { kind: \"name\"; name: string }\n | { kind: \"unary\"; operator: string; operand: Arithmetic; postfix: boolean }\n | { kind: \"binary\"; operator: string; left: Arithmetic; right: Arithmetic }\n | { kind: \"conditional\"; condition: Arithmetic; yes: Arithmetic; no: Arithmetic }\n) & { start?: number };\n\nexport interface ArithmeticProgram {\n readonly source: string;\n readonly tree?: Arithmetic;\n readonly error?: ShellSyntaxError;\n}\n\nclass ArithmeticFailure extends Error {\n constructor(message: string, readonly offset: number) { super(message); }\n}\n\nexport function prepareArithmetic(source: string, budget = new ParseBudget()): ArithmeticProgram {\n budget.admit();\n try { return { source, tree: parseArithmetic(source, 0, budget) }; }\n catch (error) {\n if (!(error instanceof ShellSyntaxError) || /nesting/u.test(error.reason)) throw error;\n budget.admit();\n return { source, error };\n }\n}\n\nconst precedence: Record<string, number> = {\n \",\": 1, \"=\": 2, \"+=\": 2, \"-=\": 2, \"*=\": 2, \"/=\": 2, \"%=\": 2,\n \"<<=\": 2, \">>=\": 2, \"&=\": 2, \"^=\": 2, \"|=\": 2,\n \"?\": 3, \"||\": 4, \"&&\": 5, \"|\": 6, \"^\": 7, \"&\": 8,\n \"==\": 9, \"!=\": 9, \"<\": 10, \"<=\": 10, \">\": 10, \">=\": 10,\n \"<<\": 11, \">>\": 11, \"+\": 12, \"-\": 12, \"*\": 13, \"/\": 13, \"%\": 13, \"**\": 14,\n};\n\nfunction integer(text: string): bigint {\n if (/^0[xX][\\da-fA-F]+$/u.test(text)) return BigInt(text);\n if (/^0[0-7]+$/u.test(text)) return BigInt(`0o${text.slice(1)}`);\n if (/^0\\d+$/u.test(text)) throw new PublicDiagnostic(\"Invalid octal constant\");\n if (/^\\d+$/u.test(text)) return BigInt(text);\n const match = /^(\\d+)#([\\da-zA-Z@_]+)$/u.exec(text);\n if (!match) throw new PublicDiagnostic(\"Invalid arithmetic constant\");\n const base = Number(match[1]);\n if (base < 2 || base > 64) throw new PublicDiagnostic(\"Invalid arithmetic base\");\n let value = 0n;\n for (const character of match[2]!) {\n const digit = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_\".indexOf(base <= 36 ? character.toLowerCase() : character);\n if (digit >= base || digit < 0) throw new PublicDiagnostic(\"Digit exceeds arithmetic base\");\n value = BigInt.asIntN(64, value * BigInt(base) + BigInt(digit));\n }\n return value;\n}\n\nexport function parseArithmetic(source: string, offset = 0, budget = new ParseBudget()): Arithmetic {\n const tokens: { value: string; offset: number }[] = [];\n let position = 0;\n while (position < source.length) {\n if (/\\s/u.test(source[position]!)) { position++; continue; }\n const value = /^(?:\\d+#[\\da-zA-Z@_]+|0[xX][\\da-fA-F]+|\\d+|[a-zA-Z_][a-zA-Z_0-9]*|<<=|>>=|\\*\\*|\\+\\+|--|&&|\\|\\||<<|>>|[+*/%&^|!<>=-]=|[()+*/%~!<>=&^|?:,\\-])/u.exec(source.slice(position))?.[0];\n if (!value) throw new ShellSyntaxError(\"Unsupported arithmetic token\", offset + position);\n budget.admit();\n tokens.push({ value, offset: offset + position });\n position += value.length;\n }\n let cursor = 0;\n let depth = 0;\n const current = () => tokens[cursor]?.value ?? \"\";\n const error = (message: string): never => { throw new ShellSyntaxError(message, tokens[cursor]?.offset ?? offset + source.length); };\n const expression = (minimum = 1): Arithmetic => {\n if (++depth > 64) error(\"Arithmetic nesting exceeds 64\");\n let left: Arithmetic;\n const start = tokens[cursor]?.offset ?? offset + source.length;\n const token = current();\n cursor++;\n if ([\"+\", \"-\", \"!\", \"~\", \"++\", \"--\"].includes(token)) {\n budget.admit();\n const operand = expression(15);\n if ([\"++\", \"--\"].includes(token) && operand.kind !== \"name\") error(\"Arithmetic assignment requires a variable\");\n left = { kind: \"unary\", operator: token, operand, postfix: false };\n } else if (token === \"(\") {\n left = expression();\n if (current() !== \")\") error(\"Unclosed arithmetic parenthesis\");\n cursor++;\n } else if (/^[a-zA-Z_]/u.test(token)) { budget.admit(); left = { kind: \"name\", name: token }; }\n else {\n budget.admit();\n try { left = { kind: \"literal\", value: BigInt.asIntN(64, integer(token)) }; }\n catch { error(\"Invalid arithmetic operand\"); }\n }\n left!.start = start;\n while (true) {\n const operator = current();\n if (operator === \"++\" || operator === \"--\") {\n if (left!.kind !== \"name\") error(\"Arithmetic assignment requires a variable\");\n cursor++;\n budget.admit();\n left = { kind: \"unary\", operator, operand: left!, postfix: true, start };\n continue;\n }\n const priority = Object.hasOwn(precedence, operator) ? precedence[operator]! : 0;\n if (priority < minimum || priority === 0) break;\n cursor++;\n budget.admit();\n if (operator === \"?\") {\n const yes = expression();\n if (current() !== \":\") error(\"Expected arithmetic colon\");\n cursor++;\n left = { kind: \"conditional\", condition: left!, yes, no: expression(3), start };\n } else {\n const assignment = priority === 2;\n if (assignment && left!.kind !== \"name\") error(\"Arithmetic assignment requires a variable\");\n const right = expression(priority + (assignment || operator === \"**\" ? 0 : 1));\n left = { kind: \"binary\", operator, left: left!, right, start };\n }\n }\n depth--;\n return left!;\n };\n if (!tokens.length) { budget.admit(); return { kind: \"literal\", value: 0n }; }\n const tree = expression();\n if (cursor < tokens.length) error(\"Unexpected arithmetic token\");\n return tree;\n}\n\nexport function arithmeticEnd(source: string, start: number): number {\n let depth = 0;\n for (let position = start; position < source.length; position++) {\n const character = source[position];\n if (character === \"(\") depth++;\n if (character === \")\") {\n if (depth === 0 && source[position + 1] === \")\") return position;\n if (--depth < 0) break;\n }\n }\n throw new ShellSyntaxError(\"Unterminated arithmetic expression\", start);\n}\n\nexport function evaluateArithmetic(program: ArithmeticProgram, variables: Record<string, string>, budget = new ParseBudget()): bigint {\n const visiting = new Set<string>();\n let steps = 0;\n const binary = (operator: string, left: bigint, right: bigint, offset: number): bigint => {\n switch (operator) {\n case \"+\": return left + right;\n case \"-\": return left - right;\n case \"*\": return left * right;\n case \"/\": if (right === 0n) throw new ArithmeticFailure(\"division by 0\", offset); return left / right;\n case \"%\": if (right === 0n) throw new ArithmeticFailure(\"division by 0\", offset); return left % right;\n case \"**\": {\n if (right < 0n) throw new ArithmeticFailure(\"exponent less than 0\", offset);\n let result = 1n;\n let base = left;\n let exponent = right;\n while (exponent) {\n if (exponent & 1n) result = BigInt.asIntN(64, result * base);\n exponent >>= 1n;\n base = BigInt.asIntN(64, base * base);\n }\n return result;\n }\n case \"<<\": return left << (right & 63n);\n case \">>\": return left >> (right & 63n);\n case \"&\": return left & right;\n case \"|\": return left | right;\n case \"^\": return left ^ right;\n case \"==\": return BigInt(left === right);\n case \"!=\": return BigInt(left !== right);\n case \"<\": return BigInt(left < right);\n case \"<=\": return BigInt(left <= right);\n case \">\": return BigInt(left > right);\n case \">=\": return BigInt(left >= right);\n default: throw new PublicDiagnostic(`Unsupported arithmetic operator ${operator}`);\n }\n };\n type Frame = { kind: \"evaluate\"; node: Arithmetic }\n | { kind: \"variable\"; name: string }\n | { kind: \"conditional\"; node: Extract<Arithmetic, { kind: \"conditional\" }> }\n | { kind: \"unary\"; node: Extract<Arithmetic, { kind: \"unary\" }> }\n | { kind: \"left\"; node: Extract<Arithmetic, { kind: \"binary\" }> }\n | { kind: \"right\"; node: Extract<Arithmetic, { kind: \"binary\" }>; left?: bigint }\n | { kind: \"logical\" };\n try {\n if (program.error) throw program.error;\n const pending: Frame[] = [{ kind: \"evaluate\", node: program.tree! }];\n let value = 0n;\n while (pending.length) {\n const frame = pending.pop()!;\n if (frame.kind === \"evaluate\") {\n if (++steps > 10_000) throw new PublicDiagnostic(\"Arithmetic operation limit exceeded\");\n const node = frame.node;\n if (node.kind === \"literal\") value = node.value;\n else if (node.kind === \"name\") {\n if (visiting.has(node.name) || visiting.size >= 64) throw new PublicDiagnostic(\"Arithmetic variable recursion\");\n visiting.add(node.name);\n pending.push({ kind: \"variable\", name: node.name }, { kind: \"evaluate\", node: parseArithmetic(variables[node.name] ?? \"0\", 0, budget) });\n } else if (node.kind === \"conditional\") {\n pending.push({ kind: \"conditional\", node }, { kind: \"evaluate\", node: node.condition });\n } else if (node.kind === \"unary\") {\n pending.push({ kind: \"unary\", node }, { kind: \"evaluate\", node: node.operand });\n } else if (node.operator === \"=\") {\n pending.push({ kind: \"right\", node }, { kind: \"evaluate\", node: node.right });\n } else {\n pending.push({ kind: \"left\", node }, { kind: \"evaluate\", node: node.left });\n }\n } else if (frame.kind === \"variable\") visiting.delete(frame.name);\n else if (frame.kind === \"conditional\") {\n pending.push({ kind: \"evaluate\", node: value ? frame.node.yes : frame.node.no });\n } else if (frame.kind === \"unary\") {\n const { node } = frame;\n const operand = value;\n if (node.operator === \"+\") value = operand;\n else if (node.operator === \"-\") value = -operand;\n else if (node.operator === \"!\") value = BigInt(!operand);\n else if (node.operator === \"~\") value = ~operand;\n else {\n value = BigInt.asIntN(64, operand + (node.operator === \"++\" ? 1n : -1n));\n variables[(node.operand as Extract<Arithmetic, { kind: \"name\" }>).name] = String(value);\n if (node.postfix) value = operand;\n }\n value = BigInt.asIntN(64, value);\n } else if (frame.kind === \"left\") {\n const { node } = frame;\n if (node.operator === \"&&\" || node.operator === \"||\") {\n if (node.operator === \"&&\" ? value === 0n : value !== 0n) value = BigInt(value !== 0n);\n else pending.push({ kind: \"logical\" }, { kind: \"evaluate\", node: node.right });\n } else {\n if (node.operator !== \",\") pending.push({ kind: \"right\", node, left: value });\n pending.push({ kind: \"evaluate\", node: node.right });\n }\n } else if (frame.kind === \"right\") {\n const { node } = frame;\n if (node.operator !== \"=\") value = binary(precedence[node.operator] === 2 ? node.operator.slice(0, -1) : node.operator, frame.left!, value, node.right.start ?? 0);\n if (precedence[node.operator] === 2) variables[(node.left as Extract<Arithmetic, { kind: \"name\" }>).name] = String(BigInt.asIntN(64, value));\n value = BigInt.asIntN(64, value);\n } else value = BigInt(value !== 0n);\n }\n return value;\n } catch (error) {\n if (error instanceof ArithmeticFailure) throw new PublicDiagnostic(`${program.source.trimStart()}: ${error.message} (error token is \"${program.source.slice(error.offset)}\")`);\n if (error instanceof ShellSyntaxError) {\n const offset = error.offset >= program.source.trimEnd().length ? Math.max(0, program.source.trimEnd().length - 1) : error.offset;\n const reason = error.reason === \"Invalid arithmetic operand\" ? \"arithmetic syntax error: operand expected\" : \"arithmetic syntax error in expression\";\n throw new PublicDiagnostic(`${program.source.trimStart()}: ${reason} (error token is \"${program.source.slice(offset)}\")`);\n }\n throw error;\n }\n}\n", "import { ShellSyntaxError } from \"../types.js\";\nimport { ParseBudget } from \"../parse-budget.js\";\nimport type { Word, WordPart } from \"../parser.js\";\n\nexport interface LiteralIndex {\n readonly decimal: string;\n}\n\nexport type ArraySelector =\n | { readonly kind: \"element\"; readonly index: LiteralIndex }\n | { readonly kind: \"members\"; readonly separator: \"@\" | \"*\" };\n\nexport interface ArrayEntry {\n readonly index?: LiteralIndex;\n readonly value: Word;\n}\n\nexport type ArrayAssignment =\n | { readonly kind: \"element\"; readonly name: string; readonly index: LiteralIndex; readonly append: boolean; readonly value: Word }\n | { readonly kind: \"compound\"; readonly name: string; readonly append: boolean; readonly entries: readonly ArrayEntry[] };\n\nconst assignments = new WeakMap<Word, ArrayAssignment>();\nconst selectors = new WeakMap<WordPart, ArraySelector>();\nconst quoteMarkers = new WeakSet<WordPart>();\n\nexport function setQuoteMarker(part: WordPart, synthetic: boolean): void {\n if (synthetic) quoteMarkers.add(part);\n else quoteMarkers.delete(part);\n}\n\nexport function isQuoteMarker(part: WordPart): boolean {\n return quoteMarkers.has(part);\n}\n\nexport function literalIndex(source: string, offset: number, budget = new ParseBudget()): LiteralIndex {\n let decimal = source;\n if (source[0] === \"'\" || source[0] === '\"') {\n if (source.length < 2 || source.at(-1) !== source[0]) throw new ShellSyntaxError(\"Unsupported indexed-array subscript\", offset);\n decimal = source.slice(1, -1);\n }\n if (!/^(?:0|[1-9][0-9]*)$/u.test(decimal)) throw new ShellSyntaxError(\"Unsupported indexed-array subscript\", offset);\n budget.admit();\n return { decimal };\n}\n\nexport function numericIndex(index: LiteralIndex): number | undefined {\n if (index.decimal.length > 10 || index.decimal.length === 10 && index.decimal > \"2147483647\") return undefined;\n return Number(index.decimal);\n}\n\nexport function arraySelector(source: string, offset: number, budget = new ParseBudget()): ArraySelector {\n budget.admit();\n return source === \"@\" || source === \"*\"\n ? { kind: \"members\", separator: source }\n : { kind: \"element\", index: literalIndex(source, offset, budget) };\n}\n\nexport function setArraySelector(part: WordPart, selector: ArraySelector): void {\n selectors.set(part, selector);\n}\n\nexport function getArraySelector(part: WordPart): ArraySelector | undefined {\n return selectors.get(part);\n}\n\nexport function copyArraySelector(original: WordPart, copy: WordPart): WordPart {\n const selector = selectors.get(original);\n if (selector) selectors.set(copy, selector);\n setQuoteMarker(copy, isQuoteMarker(original));\n return copy;\n}\n\nexport function setArrayAssignment(word: Word, assignment: ArrayAssignment): void {\n assignments.set(word, assignment);\n}\n\nexport function getArrayAssignment(word: Word): ArrayAssignment | undefined {\n return assignments.get(word);\n}\n\nfunction removePrefix(word: Word, length: number, budget: ParseBudget): Word {\n budget.admit();\n const parts: WordPart[] = [];\n for (const part of word.parts) {\n if (length === 0) parts.push(part);\n else {\n if (part.kind !== \"text\") throw new ShellSyntaxError(\"Unsupported indexed-array subscript\", word.offset);\n if (part.value.length <= length) length -= part.value.length;\n else {\n budget.admit();\n parts.push({ ...part, value: part.value.slice(length) });\n length = 0;\n }\n }\n }\n if (length !== 0) throw new ShellSyntaxError(\"Invalid indexed-array assignment\", word.offset);\n return { offset: word.offset, parts };\n}\n\nexport function elementAssignment(word: Word, budget = new ParseBudget()): Extract<ArrayAssignment, { kind: \"element\" }> | undefined {\n const source = word.spelling;\n const first = word.parts[0];\n if (source === undefined || first?.kind !== \"text\" || first.quoted) return undefined;\n const name = /^([a-zA-Z_][a-zA-Z_0-9]*)\\[/u.exec(source)?.[1];\n if (!name) return undefined;\n const end = source.indexOf(\"]\", name.length + 1);\n if (end < 0 || !/^(?:\\+?=)/u.test(source.slice(end + 1))) {\n if (source.includes(\"=\")) throw new ShellSyntaxError(\"Invalid indexed-array assignment\", word.offset);\n return undefined;\n }\n budget.admit();\n const index = literalIndex(source.slice(name.length + 1, end), word.offset + name.length + 1, budget);\n const append = source[end + 1] === \"+\";\n const value = removePrefix(word, name.length + index.decimal.length + (append ? 4 : 3), budget);\n return { kind: \"element\", name, index, append, value };\n}\n\nexport function compoundHead(word: Word, budget = new ParseBudget()): { readonly name: string; readonly append: boolean } | undefined {\n if (word.parts.length !== 1) return undefined;\n const first = word.parts[0];\n if (first?.kind !== \"text\" || first.quoted) return undefined;\n const match = /^([a-zA-Z_][a-zA-Z_0-9]*)(\\+?)=$/u.exec(first.value);\n if (!match) return undefined;\n budget.admit();\n return { name: match[1]!, append: match[2] === \"+\" };\n}\n\nexport function compoundEntry(word: Word, budget = new ParseBudget()): ArrayEntry {\n budget.admit();\n const source = word.spelling;\n const first = word.parts[0];\n if (source === undefined || source[0] !== \"[\" || first?.kind !== \"text\" || first.quoted) return { value: word };\n const end = source.indexOf(\"]\", 1);\n if (end < 0 || source[end + 1] !== \"=\") {\n if (source.includes(\"=\")) throw new ShellSyntaxError(\"Invalid indexed-array entry\", word.offset);\n return { value: word };\n }\n const index = literalIndex(source.slice(1, end), word.offset + 1, budget);\n return { index, value: removePrefix(word, index.decimal.length + 3, budget) };\n}\n\nexport function scalarAssignmentName(word: Word): string | undefined {\n const first = word.parts[0];\n return first?.kind === \"text\" && !first.quoted\n ? /^([a-zA-Z_][a-zA-Z_0-9]*)\\+?=/u.exec(first.value)?.[1]\n : undefined;\n}\n", "import { yieldTurn } from \"../contracts/yield.js\";\nimport type { FileSystem } from \"../contracts/index.js\";\nimport { isFsError, resolvePath } from \"../contracts/index.js\";\nimport type { Word } from \"./parser.js\";\nimport { matchesPattern } from \"./pattern.js\";\nimport type { StringWork } from \"./string-operations.js\";\n\nexport type ConditionalExpression =\n | { kind: \"nonempty\"; operand: Word }\n | { kind: \"unary\"; operator: string; operand: Word }\n | { kind: \"binary\"; operator: string; left: Word; right: Word }\n | { kind: \"not\"; operand: ConditionalExpression }\n | { kind: \"and\"; left: ConditionalExpression; right: ConditionalExpression }\n | { kind: \"or\"; left: ConditionalExpression; right: ConditionalExpression };\n\nexport const conditionalUnary = new Set([\"-n\", \"-z\", \"-e\", \"-a\", \"-f\", \"-d\", \"-s\", \"-L\", \"-h\", \"-r\", \"-w\", \"-x\", \"-v\", \"-o\", \"-b\", \"-c\", \"-p\", \"-S\", \"-t\", \"-O\", \"-G\", \"-R\", \"-N\", \"-u\", \"-g\", \"-k\"]);\nexport const conditionalBinary = new Set([\"=\", \"==\", \"!=\", \"<\", \">\", \"=~\", \"-eq\", \"-ne\", \"-lt\", \"-le\", \"-gt\", \"-ge\", \"-nt\", \"-ot\", \"-ef\"]);\n\nexport class ConditionalUnsupported extends Error {}\n\ninterface ConditionalContext {\n readonly fs: FileSystem;\n readonly cwd: string;\n readonly signal: AbortSignal;\n readonly locale: string;\n readonly work: StringWork;\n expand(word: Word, pattern?: boolean): Promise<string>;\n regex?(subject: string, pattern: Word): Promise<number>;\n present(name: string): boolean;\n option(name: string): boolean;\n}\n\nfunction unsupported(detail: string): never { throw new ConditionalUnsupported(`[[ ${detail}: unsupported conditional profile`); }\n\nasync function charge(context: ConditionalContext, amount = 1): Promise<void> {\n context.signal.throwIfAborted();\n if (amount > context.work.remaining) context.work.exhausted();\n const previous = context.work.remaining;\n context.work.remaining -= amount;\n if ((previous >>> 10) !== (context.work.remaining >>> 10)) {\n await yieldTurn();\n context.signal.throwIfAborted();\n }\n}\n\nfunction cLocale(context: ConditionalContext): void {\n if (context.locale !== \"C\" && context.locale !== \"POSIX\") unsupported(\"collation locale\");\n}\n\nasync function patternAdmission(pattern: string, context: ConditionalContext): Promise<void> {\n cLocale(context);\n let bracket = false;\n let bracketStart = 0;\n for (let index = 0; index < pattern.length; index++) {\n await charge(context);\n const character = pattern[index]!;\n if (character === \"\\\\\") { if (++index < pattern.length) await charge(context); continue; }\n if (\"?*+@!\".includes(character) && pattern[index + 1] === \"(\") unsupported(\"extglob\");\n if (character === \"[\") {\n if (bracket || [\":\", \".\", \"=\"].includes(pattern[index + 1] ?? \"\")) unsupported(\"bracket class or collation\");\n bracket = true; bracketStart = index;\n } else if (character === \"]\" && bracket && index > bracketStart + 1) bracket = false;\n }\n if (bracket) unsupported(\"unclosed bracket pattern\");\n}\n\nasync function integer(value: string, context: ConditionalContext): Promise<bigint> {\n await charge(context, value.length);\n const text = value.trim();\n if (!text) return 0n;\n let position = 0, sign = 1n;\n if (text[position] === \"+\" || text[position] === \"-\") { if (text[position] === \"-\") sign = -1n; position++; }\n let base = 10;\n const separator = text.indexOf(\"#\", position);\n if (separator >= 0) {\n base = 0;\n if (separator === position) unsupported(\"numeric literal\");\n while (position < separator) {\n const digit = text.charCodeAt(position++) - 48;\n if (digit < 0 || digit > 9 || base > 64) unsupported(\"numeric literal\");\n base = base * 10 + digit;\n }\n if (base < 2 || base > 64) unsupported(\"numeric base\");\n position++;\n } else if (text.slice(position, position + 2).toLowerCase() === \"0x\") { base = 16; position += 2; }\n else if (text[position] === \"0\" && position + 1 < text.length) base = 8;\n if (position >= text.length) unsupported(\"numeric literal\");\n let result = 0n;\n const digits = \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_\";\n for (; position < text.length; position++) {\n await charge(context);\n const character = text[position]!;\n const digit = digits.indexOf(base <= 36 ? character.toLowerCase() : character);\n if (digit < 0 || digit >= base) unsupported(\"numeric expression or literal\");\n result = BigInt.asIntN(64, result * BigInt(base) + BigInt(digit));\n }\n return BigInt.asIntN(64, result * sign);\n}\n\nasync function unary(operator: string, value: string, context: ConditionalContext): Promise<boolean> {\n if (operator === \"-n\") return value.length > 0;\n if (operator === \"-z\") return value.length === 0;\n if (operator === \"-v\") {\n if (value.endsWith(\"[@]\") || value.endsWith(\"[*]\")) unsupported(\"aggregate variable selector\");\n return context.present(value);\n }\n if (operator === \"-o\") return context.option(value);\n if (![\"-e\", \"-a\", \"-f\", \"-d\", \"-s\", \"-L\", \"-h\", \"-r\", \"-w\", \"-x\"].includes(operator)) unsupported(operator);\n if (value === \"\") return false;\n if (/^\\/dev\\/(?:fd(?:\\/|$)|stdin$|stdout$|stderr$)/u.test(value)) unsupported(\"descriptor predicate\");\n const access = [\"-r\", \"-w\", \"-x\"].includes(operator);\n if (access && context.fs.capabilities.permissions !== true) unsupported(\"unobservable access permission\");\n try {\n if (access) {\n await context.fs.access(resolvePath(context.cwd, value), operator === \"-r\" ? 4 : operator === \"-w\" ? 2 : 1, { signal: context.signal });\n context.signal.throwIfAborted(); return true;\n }\n const metadata = await (operator === \"-L\" || operator === \"-h\" ? context.fs.lstat(resolvePath(context.cwd, value), { signal: context.signal }) : context.fs.stat(resolvePath(context.cwd, value), { signal: context.signal }));\n context.signal.throwIfAborted();\n if (operator === \"-f\") return metadata.type === \"file\";\n if (operator === \"-d\") return metadata.type === \"directory\";\n if (operator === \"-s\") return metadata.size > 0;\n if (operator === \"-L\" || operator === \"-h\") return metadata.type === \"symlink\";\n return true;\n } catch (error) {\n context.signal.throwIfAborted();\n if (!isFsError(error)) throw error;\n const errno = error.code;\n if (errno === \"ENOENT\" || errno === \"ENOTDIR\" || errno === \"EACCES\" || errno === \"EPERM\") return false;\n if (access && errno === \"EROFS\") return false;\n if (errno === \"ENOTSUP\" || errno === \"EOPNOTSUPP\" || errno === \"ENOSYS\") unsupported(\"filesystem capability\");\n throw error;\n }\n}\n\nasync function leaf(node: Extract<ConditionalExpression, { kind: \"nonempty\" | \"unary\" | \"binary\" }>, context: ConditionalContext): Promise<boolean | number> {\n if (node.kind === \"nonempty\") return (await context.expand(node.operand)).length > 0;\n if (node.kind === \"unary\") return unary(node.operator, await context.expand(node.operand), context);\n const left = await context.expand(node.left);\n if (node.operator === \"=~\" && context.regex) return context.regex(left, node.right);\n const pattern = [\"=\", \"==\", \"!=\"].includes(node.operator);\n const right = await context.expand(node.right, pattern);\n if (node.operator === \"=~\" || [\"-nt\", \"-ot\", \"-ef\"].includes(node.operator)) unsupported(node.operator);\n if (pattern) {\n await patternAdmission(right, context);\n const match = await matchesPattern(right, left, context.work);\n return node.operator === \"!=\" ? !match : match;\n }\n if (node.operator === \"<\" || node.operator === \">\") {\n cLocale(context);\n await charge(context, Buffer.byteLength(left) + Buffer.byteLength(right));\n const order = Buffer.compare(Buffer.from(left), Buffer.from(right));\n return node.operator === \"<\" ? order < 0 : order > 0;\n }\n const first = await integer(left, context), second = await integer(right, context);\n switch (node.operator) {\n case \"-eq\": return first === second;\n case \"-ne\": return first !== second;\n case \"-lt\": return first < second;\n case \"-le\": return first <= second;\n case \"-gt\": return first > second;\n case \"-ge\": return first >= second;\n default: return unsupported(node.operator);\n }\n}\n\nexport async function evaluateConditional(expression: ConditionalExpression, context: ConditionalContext): Promise<number> {\n const stack: { node: ConditionalExpression; stage: number }[] = [{ node: expression, stage: 0 }];\n let result = 1;\n while (stack.length) {\n await charge(context);\n const frame = stack.at(-1)!, node = frame.node;\n if (node.kind === \"not\") {\n if (frame.stage++ === 0) stack.push({ node: node.operand, stage: 0 });\n else { result = result === 0 ? 1 : 0; stack.pop(); }\n } else if (node.kind === \"and\" || node.kind === \"or\") {\n if (frame.stage === 0) { frame.stage = 1; stack.push({ node: node.left, stage: 0 }); }\n else if (frame.stage === 1 && (node.kind === \"and\" ? result === 0 : result !== 0)) { frame.stage = 2; stack.push({ node: node.right, stage: 0 }); }\n else stack.pop();\n } else { const value = await leaf(node, context); result = typeof value === \"number\" ? value : Number(!value); stack.pop(); }\n }\n context.signal.throwIfAborted();\n return result;\n}\n", "import { yieldTurn } from \"../contracts/yield.js\";\nimport type { ValueReservation } from \"../contracts/value.js\";\nimport { nextCodePointOffset, previousCodePointOffset, stringCheckpoint } from \"./string-operations.js\";\nimport type { StringWork } from \"./string-operations.js\";\ntype PatternToken = { kind: \"star\" } | { kind: \"any\" } | { kind: \"literal\"; value: string } | { kind: \"class\"; expression: RegExp };\n\nconst characterClasses: Readonly<Record<string, string>> = {\n alnum: \"a-zA-Z0-9\", alpha: \"a-zA-Z\", ascii: \"\\\\x00-\\\\x7f\", blank: \" \\\\t\",\n cntrl: \"\\\\x00-\\\\x1f\\\\x7f\", digit: \"0-9\", graph: \"\\\\x21-\\\\x7e\", lower: \"a-z\",\n print: \"\\\\x20-\\\\x7e\", punct: \"\\\\x21-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\x7e\",\n space: \" \\\\t\\\\r\\\\n\\\\v\\\\f\", upper: \"A-Z\", word: \"a-zA-Z0-9_\", xdigit: \"a-fA-F0-9\",\n};\n\nasync function tokens(pattern: string, work: StringWork): Promise<{ patternTokens: PatternToken[]; reservation: ValueReservation | undefined }> {\n const admission = stringCheckpoint(work, pattern.length);\n if (admission) await admission;\n const reservation = work.allocation?.reserve(128 + pattern.length * 64, 0);\n const result: PatternToken[] = [];\n const characters = Array.from(pattern);\n const lastClosingBracket = characters.lastIndexOf(\"]\");\n let steps = 0;\n const tick = (): Promise<void> | undefined => {\n if (--work.remaining < 0) work.exhausted();\n if (++steps % 1024 === 0) return yieldTurn(work.signal);\n return undefined;\n };\n for (let index = 0; index < characters.length; index++) {\n const pending = tick();\n if (pending) await pending;\n const character = characters[index]!;\n if (character === \"\\\\\" && index + 1 < characters.length) result.push({ kind: \"literal\", value: characters[++index]! });\n else if (character === \"*\") {\n if (result.at(-1)?.kind !== \"star\") result.push({ kind: \"star\" });\n } else if (character === \"?\") result.push({ kind: \"any\" });\n else if (character === \"[\" && index < lastClosingBracket) {\n let cursor = index + 1;\n let contents = \"\";\n if ([\"!\", \"^\"].includes(characters[cursor] ?? \"\")) { contents = \"^\"; cursor++; }\n if (characters[cursor] === \"]\") { contents += \"\\\\]\"; cursor++; }\n let valid = true;\n for (; cursor < characters.length && characters[cursor] !== \"]\"; cursor++) {\n const pending = tick();\n if (pending) await pending;\n const member = characters[cursor]!;\n if (member === \"\\\\\" && cursor + 1 < characters.length) {\n contents += `\\\\u{${characters[++cursor]!.codePointAt(0)!.toString(16)}}`;\n } else if (member === \"[\" && characters[cursor + 1] === \":\") {\n let end = cursor + 2;\n while (end < characters.length && characters[end] !== \":\" && characters[end] !== \"]\") {\n const pending = tick();\n if (pending) await pending;\n end++;\n }\n if (characters[end] === \":\" && characters[end + 1] === \"]\") {\n const name = characters.slice(cursor + 2, end).join(\"\");\n valid &&= characterClasses[name] !== undefined;\n contents += characterClasses[name] ?? \"\";\n cursor = end + 1;\n } else contents += \"\\\\[\";\n } else contents += member === \"[\" || member === \"^\" ? `\\\\${member}` : member;\n }\n if (cursor < characters.length && cursor > index + 1) {\n let expression: RegExp;\n try { expression = valid ? new RegExp(`^[${contents}](?![\\\\s\\\\S])`, \"u\") : /(?!)/u; }\n catch { expression = /(?!)/u; }\n result.push({ kind: \"class\", expression });\n index = cursor;\n } else result.push({ kind: \"literal\", value: character });\n } else result.push({ kind: \"literal\", value: character });\n }\n return { patternTokens: result, reservation };\n}\n\nexport async function compilePattern(pattern: string, work: StringWork): Promise<(value: string, start?: number, end?: number) => Promise<boolean>> {\n work.signal.throwIfAborted();\n const { patternTokens } = await tokens(pattern, work);\n return (value, start = 0, end = value.length) => matchTokens(patternTokens, value, work, start, end);\n}\n\nexport async function matchesPattern(pattern: string, value: string, work: StringWork): Promise<boolean> {\n const { patternTokens, reservation } = await tokens(pattern, work);\n try { return await matchTokens(patternTokens, value, work, 0, value.length); }\n finally { reservation?.release(); }\n}\n\nexport async function compilePatternBoundaries(pattern: string, work: StringWork): Promise<(value: string, shortest?: boolean, suffix?: boolean) => Promise<Float64Array>> {\n work.signal.throwIfAborted();\n const { patternTokens } = await tokens(pattern, work);\n return async (value, shortest = false, suffix = false) => {\n let rowReservation: ValueReservation | undefined;\n let resultReservation: ValueReservation | undefined;\n try {\n const rowSize = patternTokens.length + 1;\n const resultSize = value.length + 1;\n const initialized = stringCheckpoint(work, rowSize + resultSize);\n if (initialized) await initialized;\n rowReservation = work.allocation?.reserve(64 + rowSize * 8, 0);\n resultReservation = work.allocation?.reserve(64 + resultSize * 8, 0);\n const row = new Float64Array(rowSize).fill(-1);\n const ends = new Float64Array(resultSize).fill(-1);\n let position = value.length;\n while (true) {\n const advanced = stringCheckpoint(work);\n if (advanced) await advanced;\n const point = position < value.length ? value.codePointAt(position)! : undefined;\n let diagonal = row[patternTokens.length]!;\n row[patternTokens.length] = !suffix || position === value.length ? position : -1;\n for (let index = patternTokens.length - 1; index >= 0; index--) {\n const pending = stringCheckpoint(work);\n if (pending) await pending;\n const previous = row[index]!;\n const token = patternTokens[index]!;\n if (token.kind === \"star\") {\n const skip = row[index + 1]!;\n const consume = point === undefined ? -1 : previous;\n row[index] = skip < 0 ? consume : consume < 0 ? skip : shortest ? Math.min(skip, consume) : Math.max(skip, consume);\n } else {\n const accepts = point !== undefined && (token.kind === \"any\" || (token.kind === \"literal\" ? token.value.codePointAt(0) === point : token.expression.test(String.fromCodePoint(point))));\n row[index] = accepts ? diagonal : -1;\n }\n diagonal = previous;\n }\n ends[position] = row[0]!;\n if (position === 0) break;\n position = previousCodePointOffset(value, position);\n }\n work.signal.throwIfAborted();\n return ends;\n } catch (error) {\n resultReservation?.release();\n throw error;\n } finally { rowReservation?.release(); }\n };\n}\n\nasync function matchTokens(patternTokens: PatternToken[], value: string, work: StringWork, start: number, end: number): Promise<boolean> {\n work.signal.throwIfAborted();\n let position = start;\n let tokenIndex = 0;\n let star = -1;\n let retry = start;\n while (position < end) {\n const pending = stringCheckpoint(work);\n if (pending) await pending;\n work.signal.throwIfAborted();\n const token = patternTokens[tokenIndex];\n const point = value.codePointAt(position)!;\n if (token?.kind === \"star\") { star = tokenIndex++; retry = position; }\n else if (token && (token.kind === \"any\" || (token.kind === \"literal\" ? token.value.codePointAt(0) === point : token.expression.test(String.fromCodePoint(point))))) {\n position += point > 0xffff ? 2 : 1;\n tokenIndex++;\n } else if (star !== -1) { tokenIndex = star + 1; retry = nextCodePointOffset(value, retry); position = retry; }\n else return false;\n }\n work.signal.throwIfAborted();\n while (patternTokens[tokenIndex]?.kind === \"star\") tokenIndex++;\n return tokenIndex === patternTokens.length;\n}\n", "import type { ValueAllocation } from \"../contracts/value.js\";\nimport { yieldTurn } from \"../contracts/yield.js\";\n\nexport interface StringWork {\n remaining: number;\n signal: AbortSignal;\n exhausted(): never;\n allocation?: ValueAllocation;\n steps?: number;\n}\n\nexport function stringCheckpoint(work: StringWork, units = 1): Promise<void> | undefined {\n work.signal.throwIfAborted();\n work.remaining -= units;\n if (work.remaining < 0) work.exhausted();\n work.steps = (work.steps ?? 0) + units;\n if (work.steps < 128) return undefined;\n work.steps %= 128;\n return yieldTurn(work.signal);\n}\n\nexport function nextCodePointOffset(value: string, offset: number): number {\n if (offset >= value.length) return value.length;\n return offset + (value.codePointAt(offset)! > 0xffff ? 2 : 1);\n}\n\nexport function previousCodePointOffset(value: string, offset: number): number {\n if (offset <= 0) return 0;\n const last = value.charCodeAt(offset - 1);\n const previous = value.charCodeAt(offset - 2);\n return offset - (last >= 0xdc00 && last <= 0xdfff && previous >= 0xd800 && previous <= 0xdbff ? 2 : 1);\n}\n\nexport async function scanString(value: string, work: StringWork, start = 0, end = value.length, maximum = Infinity): Promise<{ end: number; count: number; bytes: number }> {\n let position = start;\n let count = 0;\n let bytes = 0;\n while (position < end && count < maximum) {\n const pending = stringCheckpoint(work);\n if (pending) await pending;\n work.signal.throwIfAborted();\n const point = position + 1 < end ? value.codePointAt(position)! : value.charCodeAt(position);\n position += point > 0xffff ? 2 : 1;\n bytes += point <= 0x7f ? 1 : point <= 0x7ff ? 2 : point <= 0xffff ? 3 : 4;\n count++;\n }\n work.signal.throwIfAborted();\n return { end: position, count, bytes };\n}\n", "import { PublicDiagnostic } from \"../diagnostics.js\";\nimport { FsError, toByteSource } from \"../contracts/index.js\";\nimport type { ByteSource, FileSystem } from \"../contracts/index.js\";\nimport { yieldTurn } from \"../contracts/yield.js\";\nimport { Budget, interruptible } from \"./runtime.js\";\n\nexport async function fileInput(fs: FileSystem, path: string, maxBytes: number, signal: AbortSignal): Promise<ByteSource> {\n signal.throwIfAborted();\n async function bufferedInput(): Promise<ByteSource> {\n signal.throwIfAborted();\n const bytes = await interruptible(fs.readFile(path, { signal, maxBytes }), signal);\n signal.throwIfAborted();\n if (bytes.byteLength > maxBytes) throw new FsError(\"EFBIG\", { syscall: \"readFile\", path });\n return toByteSource(bytes);\n }\n const readStream = fs.readStream;\n if (!readStream || fs.capabilities.streamingRead === false) return bufferedInput();\n let iterator: AsyncIterator<Uint8Array>;\n try { iterator = readStream.call(fs, path, { signal })[Symbol.asyncIterator](); }\n catch (error) {\n signal.throwIfAborted();\n if (!(error instanceof FsError) || error.code !== \"ENOTSUP\") throw error;\n return bufferedInput();\n }\n let size = 0;\n let buffered = false;\n let closed = false;\n let returned: Promise<IteratorResult<Uint8Array>> | undefined;\n function closeIterator(): Promise<IteratorResult<Uint8Array>> {\n returned ??= Promise.resolve().then(() => iterator.return?.() ?? { done: true, value: undefined });\n return returned;\n }\n return {\n [Symbol.asyncIterator]: () => ({\n async next() {\n signal.throwIfAborted();\n if (closed) return { done: true, value: undefined };\n let result: IteratorResult<Uint8Array>;\n try { result = await interruptible(Promise.resolve(iterator.next()), signal); }\n catch (error) {\n signal.throwIfAborted();\n if (buffered || size > 0 || !(error instanceof FsError) || error.code !== \"ENOTSUP\") throw error;\n await interruptible(closeIterator(), signal);\n signal.throwIfAborted();\n if (closed) return { done: true, value: undefined };\n const source = await bufferedInput();\n if (closed) return { done: true, value: undefined };\n iterator = source[Symbol.asyncIterator]();\n buffered = true;\n returned = undefined;\n result = await iterator.next();\n }\n signal.throwIfAborted();\n if (!result.done) {\n if (!(result.value instanceof Uint8Array)) throw new TypeError(\"Shell stdin must yield Uint8Array\");\n if (result.value.byteLength > maxBytes - size) throw new FsError(\"EFBIG\", { syscall: \"readFile\", path });\n size += result.value.byteLength;\n }\n return result;\n },\n return() {\n closed = true;\n return closeIterator();\n },\n }),\n };\n}\n\nclass InputCursor {\n readonly #iterator: AsyncIterator<Uint8Array>;\n remainder: Uint8Array | undefined;\n #read: Promise<IteratorResult<Uint8Array>> | undefined;\n #readFailed = false;\n #turn = Promise.resolve();\n #returned: Promise<void> | undefined;\n #ended = false;\n #closed = false;\n\n constructor(source: ByteSource) {\n this.#iterator = source[Symbol.asyncIterator]();\n }\n\n async consume<Value>(signal: AbortSignal, operation: () => Promise<Value>): Promise<Value> {\n signal.throwIfAborted();\n const previous = this.#turn;\n let release!: () => void;\n const completed = new Promise<void>((resolve) => { release = resolve; });\n this.#turn = previous.then(() => completed);\n try {\n await interruptible(previous, signal);\n signal.throwIfAborted();\n return await operation();\n } finally { release(); }\n }\n\n async take(signal: AbortSignal): Promise<IteratorResult<Uint8Array>> {\n signal.throwIfAborted();\n if (this.remainder) {\n const value = this.remainder;\n this.remainder = undefined;\n return { value, done: false };\n }\n if (this.#ended || this.#closed) return { value: undefined, done: true };\n if (!this.#read) {\n this.#read = Promise.resolve().then(() => this.#closed ? { value: undefined, done: true as const } : this.#iterator.next()).then((result) => {\n if (result.done) return { value: undefined, done: true };\n if (!(result.value instanceof Uint8Array)) throw new TypeError(\"Shell stdin must yield Uint8Array\");\n return { value: new Uint8Array(result.value), done: false };\n });\n }\n try {\n const result = await interruptible(this.#read, signal);\n signal.throwIfAborted();\n this.#read = undefined;\n if (result.done) this.#ended = true;\n return result;\n } catch (error) {\n if (!signal.aborted) { this.#read = undefined; this.#readFailed = true; this.#closed = true; }\n throw error;\n }\n }\n\n async close(signal: AbortSignal): Promise<void> {\n if (this.#ended) { signal.throwIfAborted(); return; }\n this.#closed = true;\n this.remainder = undefined;\n this.#returned ??= Promise.resolve().then(() => this.#iterator.return?.()).then(() => undefined);\n void this.#returned.catch(() => undefined);\n try { await interruptible(this.#returned, signal); }\n catch (error) { if (!this.#readFailed) throw error; }\n signal.throwIfAborted();\n }\n}\n\nclass ReadText {\n readonly #chunks: string[] = [];\n readonly #pending: string[] = [];\n\n append(value: string): void {\n if (!value) return;\n this.#pending.push(value);\n if (this.#pending.length === 1024) {\n this.#chunks.push(this.#pending.join(\"\"));\n this.#pending.length = 0;\n }\n }\n\n finish(): string { return this.#chunks.join(\"\") + this.#pending.join(\"\"); }\n}\n\nexport class ShellInput implements ByteSource {\n readonly #cursor: InputCursor;\n readonly #owned: boolean;\n readonly #lifetime = new AbortController();\n readonly #cleanupSignal: AbortSignal;\n readonly signal: AbortSignal;\n #closing: Promise<void> | undefined;\n\n constructor(source: ByteSource, readonly budget: Budget, signal = budget.signal) {\n this.#owned = !(source instanceof ShellInput);\n this.#cursor = source instanceof ShellInput ? source.#cursor : new InputCursor(source);\n this.#cleanupSignal = signal;\n this.signal = AbortSignal.any([signal, this.#lifetime.signal]);\n }\n\n next(): Promise<IteratorResult<Uint8Array>> {\n return this.#cursor.consume(this.signal, () => this.#cursor.take(this.signal));\n }\n\n [Symbol.asyncIterator](): AsyncIterableIterator<Uint8Array> {\n return { next: () => this.next(), [Symbol.asyncIterator]() { return this; } };\n }\n\n sourceLine(): Promise<Uint8Array | undefined> {\n return this.#cursor.consume(this.signal, async () => {\n const chunks: Uint8Array[] = [];\n let length = 0;\n let pulls = 0;\n while (true) {\n if (++pulls % 128 === 0) await yieldTurn(this.signal);\n const result = await this.#cursor.take(this.signal);\n if (result.done) {\n if (!length) return undefined;\n break;\n }\n const newline = result.value.indexOf(10);\n const end = newline < 0 ? result.value.length : newline + 1;\n if (end < result.value.length) this.#cursor.remainder = result.value.subarray(end);\n this.budget.source(end);\n if (end) chunks.push(result.value.subarray(0, end));\n length += end;\n if (newline >= 0) break;\n }\n const bytes = new Uint8Array(length);\n let offset = 0;\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.length; }\n return bytes;\n });\n }\n\n line(raw: boolean, options?: { count?: number; delimiter?: number; byteCount?: boolean; exact?: boolean }): Promise<{ value: string; escaped: ReadonlySet<number>; terminated: boolean }> {\n return this.#cursor.consume(this.signal, () => options ? this.readBounded(raw, options) : this.readLine(raw));\n }\n\n private async readBounded(raw: boolean, options: { count?: number; delimiter?: number; byteCount?: boolean; exact?: boolean }): Promise<{ value: string; escaped: ReadonlySet<number>; terminated: boolean }> {\n const text = new ReadText();\n let characters = 0;\n const escaped = new Set<number>();\n const decoder = new TextDecoder(\"utf-8\", { fatal: true });\n const delimiter = options.delimiter ?? 10;\n let chunk: Uint8Array = new Uint8Array();\n let offset = 0;\n let length = 0;\n let escaping = false;\n let escapedCharacter = false;\n let units = 0;\n let pulls = 0;\n let terminated = options.count === 0;\n try {\n while (!terminated) {\n if (offset === chunk.length) {\n if (++pulls % 128 === 0) await yieldTurn(this.signal);\n const result = await this.#cursor.take(this.signal);\n if (result.done) {\n break;\n }\n chunk = result.value;\n offset = 0;\n if (!chunk.length) continue;\n }\n const byte = chunk[offset++]!;\n if (!options.exact && !escaping && byte === delimiter) { terminated = true; break; }\n if (++length > this.budget.limits.maxOutputBytes) this.budget.fail(\"maxOutputBytes\");\n if (length % 1024 === 0) {\n await yieldTurn(this.signal);\n this.signal.throwIfAborted();\n }\n if (byte === 0) continue;\n if (!raw && !escaping && byte === 92) { escaping = true; continue; }\n if (escaping) {\n escaping = false;\n if (byte === 10) continue;\n escapedCharacter = true;\n }\n const decoded = decoder.decode(Uint8Array.of(byte), { stream: true });\n let decodedCharacters = 0;\n for (const character of decoded) {\n if (escapedCharacter) {\n escapedCharacter = false;\n escaped.add(characters);\n }\n text.append(character);\n characters++;\n decodedCharacters++;\n }\n units += options.byteCount ? 1 : decodedCharacters;\n if (units === options.count) terminated = true;\n }\n decoder.decode();\n return { value: text.finish(), escaped, terminated };\n } catch (error) {\n if (error instanceof TypeError && error.message.includes(\"encoded data\")) throw new PublicDiagnostic(\"read: unsupported non-UTF-8 text boundary\");\n throw error;\n } finally {\n if (offset < chunk.length) this.#cursor.remainder = chunk.subarray(offset);\n }\n }\n\n private async readLine(raw: boolean): Promise<{ value: string; escaped: ReadonlySet<number>; terminated: boolean }> {\n const chunks: Uint8Array[] = [];\n let length = 0;\n let terminated = false;\n while (true) {\n const result = await this.#cursor.take(this.signal);\n if (result.done) break;\n const newline = result.value.indexOf(10);\n const chunk = newline < 0 ? result.value : result.value.subarray(0, newline);\n if (chunk.byteLength > this.budget.limits.maxOutputBytes - length) this.budget.fail(\"maxOutputBytes\");\n chunks.push(new Uint8Array(chunk));\n length += chunk.byteLength;\n if (newline >= 0) {\n if (newline + 1 < result.value.length) this.#cursor.remainder = result.value.subarray(newline + 1);\n let slashes = 0;\n if (!raw) {\n for (let chunkIndex = chunks.length - 1; chunkIndex >= 0; chunkIndex--) {\n const bytes = chunks[chunkIndex]!;\n let offset = bytes.length - 1;\n while (offset >= 0 && bytes[offset] === 92) { slashes++; offset--; }\n if (offset >= 0) break;\n }\n }\n if (slashes % 2 === 1) {\n while (chunks.at(-1)?.length === 0) chunks.pop();\n chunks[chunks.length - 1] = chunks.at(-1)!.subarray(0, -1);\n length--;\n } else { terminated = true; break; }\n }\n }\n const bytes = new Uint8Array(length);\n let offset = 0;\n for (const chunk of chunks) { bytes.set(chunk, offset); offset += chunk.length; }\n const value = new TextDecoder().decode(bytes).replace(/\\0/gu, \"\");\n const escaped = new Set<number>();\n if (raw || !value.includes(\"\\\\\")) return { value, escaped, terminated };\n const text = new ReadText();\n let characters = 0;\n for (let index = 0; index < value.length;) {\n const slash = value.indexOf(\"\\\\\", index);\n const span = value.slice(index, slash < 0 ? value.length : slash);\n text.append(span);\n for (let pointOffset = 0; pointOffset < span.length; pointOffset += span.codePointAt(pointOffset)! > 0xffff ? 2 : 1) characters++;\n if (slash < 0 || slash + 1 === value.length) break;\n const character = String.fromCodePoint(value.codePointAt(slash + 1)!);\n escaped.add(characters++);\n text.append(character);\n index = slash + 1 + character.length;\n }\n return { value: text.finish(), escaped, terminated };\n }\n\n close(): Promise<void> {\n if (!this.#closing) {\n this.#lifetime.abort(new Error(\"Shell input view closed\"));\n this.#closing = this.#owned ? this.#cursor.close(this.#cleanupSignal) : Promise.resolve();\n }\n return this.#closing;\n }\n}\n", "import type { InternalErrorHandler } from \"../contracts/command.js\";\nimport { PublicDiagnostic, publicDiagnosticMessage } from \"../diagnostics.js\";\nimport { writeDiagnostic } from \"../escaping.js\";\nimport { cancelTurn, monotonicNow, registerYieldCheckpoint, scheduleTurn, yieldTurn, type TurnHandle } from \"../contracts/yield.js\";\nimport {\n ACCESS_MODES, FsError, composeMiddleware, createBytePipe, pipeBytes, resolvePath, toByteSource, validateExitCode, writeText,\n} from \"../contracts/index.js\";\nimport type {\n ByteSink, ByteSource, CommandContext, CommandInvoker, CommandRegistry, CommandResult, FileSystem, Middleware,\n} from \"../contracts/index.js\";\nimport { concatShellValues, shellValueByteLength, shellValueBytes, shellValueFromBytes, shellValueText } from \"../contracts/value.js\";\nimport type { ShellValue, ValueReservation } from \"../contracts/value.js\";\nimport { createCommandArguments, getCommandArguments } from \"../contracts/command.js\";\nimport type { CommandArguments } from \"../contracts/command.js\";\nimport { ValueArena } from \"./value-state.js\";\nimport type { HeldValue, ValueScope, ValueStore } from \"./value-state.js\";\nimport type { Command, HereDocument, Pipeline, Redirect, Script, Word, WordPart } from \"./parser.js\";\nimport { compoundEntryWords, HereDocumentSyntaxError, hereDocumentWords, parseShellInputUnit, parseShellUnit } from \"./parser.js\";\nimport { SourceLineIndex } from \"./source-line-index.js\";\nimport { ShellLimitError, ShellSyntaxError } from \"./types.js\";\nimport type { ShellCommandContext, ShellInvokeOptions, ShellLimits } from \"./types.js\";\nimport { scopeFileSystem } from \"poe-code/safe-fs/core\";\nimport { fileInput, ShellInput } from \"./input.js\";\nimport { evaluateArithmetic, prepareArithmetic } from \"./arithmetic.js\";\nimport { defaultMaxParseUnits, ParseBudget } from \"./parse-budget.js\";\nimport { BraceExpansionFailure, expandBraces } from \"./brace-expansion.js\";\nimport { evaluatePositionalArithmetic } from \"./arithmetic-parameters.js\";\nimport { compilePattern, compilePatternBoundaries, matchesPattern } from \"./pattern.js\";\nimport { nextCodePointOffset, previousCodePointOffset, scanString, stringCheckpoint } from \"./string-operations.js\";\nimport type { StringWork } from \"./string-operations.js\";\nimport { byteLocale } from \"./locale.js\";\nimport { functionDisplay } from \"./display.js\";\nimport { ConditionalUnsupported, evaluateConditional } from \"./conditional.js\";\nimport { invocationScope, throwCleanupFailures, type InvocationScope } from \"./cleanup.js\";\nimport { bindFileOutputBudget, openFileOutput } from \"../contracts/filesystem-output.js\";\nimport { outputFailure } from \"../contracts/io.js\";\nimport { executionCommands } from \"../commands/execution.js\";\nimport { formatPrintf, printfCommand } from \"../commands/basic.js\";\nimport { UsageError } from \"../commands/internal.js\";\nimport { cloneGetoptsState, createGetoptsInput, createGetoptsState, GetoptsError, getoptsInputAllocationSize, scanGetopts, withGetoptsIndex } from \"./getopts.js\";\nimport type { GetoptsState } from \"./getopts.js\";\nimport {\n activateChildCancellation, prepareChildCancellation, selectRuntimeCancellationOutcome, subscribeCancellation,\n} from \"./cancellation.js\";\nimport type {\n CancellationAdmissionSnapshot, CancellationBoundary, CancellationControlOriginInput, CancellationOrigin,\n CancellationReport, CancellationSelection, CapturedCancellationOutcome, PreparedChildCancellation,\n} from \"./cancellation.js\";\nimport { getArrayAssignment, getArraySelector, copyArraySelector, numericIndex, literalIndex, isQuoteMarker } from \"./arrays/syntax.js\";\nimport type { ArrayAssignment } from \"./arrays/syntax.js\";\nimport { ArrayFailure, ArrayOwner, exactSum } from \"./arrays/ledger.js\";\nimport { controlNames, IndexedBinding, textToken } from \"./arrays/bindings.js\";\nimport { arrayStore, guestArrays, requireArrays, snapshotState, stateMonitor, trackState } from \"./arrays/state.js\";\nimport { publishPipelineStatus } from \"./pipestatus.js\";\nimport type { Restoration } from \"./arrays/state.js\";\nimport type { Admission } from \"./arrays/ledger.js\";\nimport type { BindingWatch, OwnedText } from \"./arrays/bindings.js\";\nimport { EreProfileLimitError, EreSyntaxError, EreUnsupportedError } from \"../commands/regex-execution/ere/errors.js\";\nimport { EreLedger } from \"../commands/regex-execution/ere/limits.js\";\nimport { compileEre } from \"../commands/regex-execution/ere/syntax.js\";\nimport { matchEre } from \"../commands/regex-execution/ere/matcher.js\";\nimport type { EreFragment } from \"../commands/regex-execution/ere/types.js\";\nimport { PathLookup, pathTargets } from \"./path-lookup.js\";\n\nexport const defaultLimits: Required<ShellLimits> = {\n maxParseUnits: defaultMaxParseUnits,\n maxInputBytes: 32 * 1024 * 1024,\n maxOutputBytes: 16 * 1024 * 1024,\n maxCommands: 10_000,\n maxFileSystemOperations: 100_000,\n maxPathComponents: 64,\n maxRedirects: 64,\n maxPipelineStages: 64,\n maxLoopIterations: 10_000,\n maxSubstitutionDepth: 64,\n maxSourceBytes: 1024 * 1024,\n maxExpansionFields: 10_000,\n maxExpansionBytes: 16 * 1024 * 1024,\n maxWallClockMs: 30_000,\n maxCpuMs: 30_000,\n pipeHighWaterMark: 64 * 1024,\n};\n\nconst shellBuiltinNames = new Set([\n \":\", \"true\", \"false\", \"pwd\", \"cd\", \"set\", \"shift\", \"export\", \"local\", \"unset\", \"read\",\n \"exit\", \"return\", \"break\", \"continue\", \"command\", \"builtin\", \"type\", \"readonly\", \"echo\", \"printf\", \"test\", \"[\", \".\", \"source\", \"eval\", \"getopts\", \"let\", \"pushd\", \"dirs\", \"popd\", \"shopt\",\n]);\n\nconst implementedBuiltins = new Set([...shellBuiltinNames].filter(name => ![\"echo\", \"printf\", \"test\", \"[\"].includes(name)));\nconst specialBuiltinNames = new Set([\":\", \".\", \"break\", \"continue\", \"eval\", \"exit\", \"export\", \"readonly\", \"return\", \"set\", \"shift\", \"unset\"]);\nconst unsupportedSetOptionNames = new Set([\n \"allexport\", \"emacs\", \"errtrace\", \"functrace\", \"hashall\", \"histexpand\", \"history\",\n \"ignoreeof\", \"interactive-comments\", \"keyword\", \"monitor\", \"noclobber\", \"noexec\", \"noglob\", \"nolog\",\n \"notify\", \"onecmd\", \"physical\", \"posix\", \"privileged\", \"verbose\", \"vi\", \"xtrace\",\n]);\ntype Discovery = { kind: \"function\" | \"builtin\" | \"command\" | \"interpreter\" | \"file\"; name: string };\n\nexport function resolveLimits(...limits: (ShellLimits | undefined)[]): Required<ShellLimits> {\n const result = Object.assign({}, defaultLimits, ...limits) as Required<ShellLimits>;\n for (const [key, value] of Object.entries(result)) {\n if (!Number.isSafeInteger(value) || value < (key === \"pipeHighWaterMark\" ? 1 : 0)) {\n throw new RangeError(`${key} must be a ${key === \"pipeHighWaterMark\" ? \"positive\" : \"nonnegative\"} safe integer`);\n }\n }\n return result;\n}\n\nconst budgetedSinks = new WeakMap<ByteSink, { budget: Budget; write: ByteSink[\"write\"] }>();\n\nexport class Budget {\n readonly executionScope = Object.freeze({});\n readonly pathLookup = new PathLookup();\n readonly parsing: ParseBudget;\n readonly values: ValueArena;\n commands = 0;\n iterations = 0;\n bytes = 0;\n sourceBytes = 0;\n readonly controller = new AbortController();\n readonly signal: AbortSignal;\n #wallClockTimer: ReturnType<typeof setTimeout> | undefined;\n #wallClockDeadline = 0;\n #pipelineStages = 0;\n #fileSystemOperations = 0;\n readonly #cpuStarted = monotonicNow();\n\n constructor(readonly limits: Required<ShellLimits>, signal?: AbortSignal, readonly onInternalError?: InternalErrorHandler) {\n this.signal = signal ? AbortSignal.any([signal, this.controller.signal]) : this.controller.signal;\n this.parsing = new ParseBudget(limits.maxParseUnits, this.signal, error => this.controller.abort(error));\n this.values = new ValueArena(limits.maxExpansionBytes, limits.maxExpansionFields, () => this.signal.throwIfAborted(), limit => this.fail(limit));\n this.#wallClockDeadline = Date.now() + limits.maxWallClockMs;\n this.#armWallClock();\n }\n\n #armWallClock(): void {\n const remaining = this.#wallClockDeadline - Date.now();\n if (remaining <= 0) {\n this.controller.abort(new ShellLimitError(\"maxWallClockMs\"));\n return;\n }\n this.#wallClockTimer = setTimeout(() => this.#armWallClock(), Math.min(remaining, 2_147_483_647));\n const timer = this.#wallClockTimer as ReturnType<typeof setTimeout> & { unref?: () => void };\n timer.unref?.();\n }\n\n close(): void {\n if (this.#wallClockTimer !== undefined) clearTimeout(this.#wallClockTimer);\n this.#wallClockTimer = undefined;\n }\n\n fail(limit: keyof ShellLimits): never {\n const error = new ShellLimitError(limit);\n this.controller.abort(error);\n throw error;\n }\n\n cpuCheckpoint(): void {\n this.signal.throwIfAborted();\n if (monotonicNow() - this.#cpuStarted > this.limits.maxCpuMs) this.fail(\"maxCpuMs\");\n }\n\n tick(): void {\n this.cpuCheckpoint();\n this.signal.throwIfAborted();\n if (++this.commands > this.limits.maxCommands) this.fail(\"maxCommands\");\n }\n\n fileSystemOperation(): void {\n this.cpuCheckpoint();\n if (this.#fileSystemOperations >= this.limits.maxFileSystemOperations) this.fail(\"maxFileSystemOperations\");\n this.#fileSystemOperations++;\n }\n\n reservePipelineStages(count: number): () => void {\n this.signal.throwIfAborted();\n if (count > this.limits.maxPipelineStages - this.#pipelineStages) this.fail(\"maxPipelineStages\");\n this.#pipelineStages += count;\n let released = false;\n return () => {\n if (released) return;\n released = true;\n this.#pipelineStages -= count;\n };\n }\n\n loop(): void {\n this.signal.throwIfAborted();\n if (++this.iterations > this.limits.maxLoopIterations) this.fail(\"maxLoopIterations\");\n }\n\n source(bytes: number): void {\n this.signal.throwIfAborted();\n if (bytes > this.limits.maxSourceBytes - this.sourceBytes) this.fail(\"maxSourceBytes\");\n this.sourceBytes += bytes;\n }\n\n sink(sink: ByteSink, signal = this.signal): ByteSink {\n const ownership = budgetedSinks.get(sink);\n if (ownership?.budget === this && ownership.write === sink.write) return signalSink(sink, signal);\n const output: ByteSink = {\n ...(sink[outputFailure] ? { [outputFailure]: sink[outputFailure] } : {}),\n ...(sink.ownedOutput ? { ownedOutput: {\n consumerClosed: sink.ownedOutput.consumerClosed,\n write: async (chunk: Uint8Array) => {\n signal.throwIfAborted();\n if (!(chunk instanceof Uint8Array)) throw new TypeError(\"Shell output must be Uint8Array\");\n if (chunk.byteLength > this.limits.maxOutputBytes - this.bytes) this.fail(\"maxOutputBytes\");\n this.bytes += chunk.byteLength;\n await interruptible(sink.ownedOutput!.write(chunk), signal);\n },\n } } : {}),\n write: async (chunk) => {\n signal.throwIfAborted();\n if (!(chunk instanceof Uint8Array)) throw new TypeError(\"Shell output must be Uint8Array\");\n if (chunk.byteLength > this.limits.maxOutputBytes - this.bytes) this.fail(\"maxOutputBytes\");\n this.bytes += chunk.byteLength;\n await interruptible(sink.write(chunk), signal);\n },\n };\n budgetedSinks.set(output, { budget: this, write: output.write });\n return output;\n }\n}\n\nexport async function interruptible<Value>(promise: Promise<Value>, signal: AbortSignal): Promise<Value> {\n if (signal.aborted) {\n void promise.catch(() => undefined);\n throw signal.reason;\n }\n let abort: (() => void) | undefined;\n const aborted = new Promise<never>((_resolve, reject) => {\n abort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", abort, { once: true });\n });\n try { return await Promise.race([promise, aborted]); }\n finally { signal.removeEventListener(\"abort\", abort!); }\n}\n\nexport class Capture implements ByteSink {\n readonly chunks: Uint8Array[] = [];\n length = 0;\n #tail: Uint8Array | undefined;\n #tailLength = 0;\n\n async write(chunk: Uint8Array): Promise<void> {\n if (!chunk.byteLength) return;\n let offset = 0;\n while (offset < chunk.byteLength) {\n if (!this.#tail || this.#tailLength === this.#tail.byteLength) {\n this.#tail = new Uint8Array(Math.max(4096, Math.min(64 * 1024, chunk.byteLength - offset)));\n this.#tailLength = 0;\n this.chunks.push(this.#tail.subarray(0, 0));\n }\n const size = Math.min(chunk.byteLength - offset, this.#tail.byteLength - this.#tailLength);\n this.#tail.set(chunk.subarray(offset, offset + size), this.#tailLength);\n this.#tailLength += size;\n offset += size;\n this.chunks[this.chunks.length - 1] = this.#tail.subarray(0, this.#tailLength);\n }\n this.length += chunk.byteLength;\n }\n\n bytes(): Uint8Array {\n const bytes = new Uint8Array(this.length);\n let offset = 0;\n for (const chunk of this.chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n }\n\n takeBytes(): Uint8Array {\n const chunk = this.chunks.length === 1 ? this.chunks[0] : undefined;\n const bytes = chunk && chunk.byteLength === chunk.buffer.byteLength ? chunk : this.bytes();\n this.chunks.length = 0;\n this.length = 0;\n this.#tail = undefined;\n this.#tailLength = 0;\n return bytes;\n }\n}\n\ninterface GetoptsBinding {\n cursor: GetoptsState;\n integer: boolean;\n}\n\ninterface SavedVariable {\n value: string | undefined;\n heldValue?: HeldValue;\n exported: boolean;\n readOnly?: boolean;\n getopts?: GetoptsBinding;\n superseded?: boolean;\n}\n\ninterface TypedSavedVariable {\n readonly owner: ArrayOwner;\n readonly binding: IndexedBinding | undefined;\n readonly tickets: Admission;\n readonly prepared: { readonly name: OwnedText; readonly admission: Admission };\n readonly watch: BindingWatch;\n overlayVersion?: number;\n readonly scalarLegacy: boolean;\n}\n\nconst typedSavedVariables = new WeakMap<SavedVariable, TypedSavedVariable>();\nconst valueScope = Symbol(\"shell value allocation scope\");\nconst invokedValues = new WeakMap<WordPart, ShellValue>();\n\nexport interface State {\n cwd: string;\n variables: Record<string, string>;\n exported: Set<string>;\n functions: Map<string, Command>;\n positional: string[];\n positionalSetVersion?: number;\n sourceDepth?: number;\n arg0?: string;\n profile?: \"bash\" | \"sh\";\n readonlyVariables?: Set<string>;\n pathUnset?: boolean;\n status: number;\n substitutionStatus: number;\n depth: number;\n loopDepth: number;\n functionDepth: number;\n locals: Map<string, SavedVariable>[];\n getopts?: GetoptsBinding;\n directoryStack?: { readonly entries: readonly string[]; readonly bytes: number };\n directoryStackCwdPublication?: symbol;\n dotglob?: boolean;\n braceexpand?: boolean;\n pipefail: boolean;\n errexit?: boolean;\n nounset?: boolean;\n isolated?: boolean;\n redirectAssignments?: ReadonlyMap<string, ShellValue>;\n}\n\ninterface IO {\n readonly [invocationScope]: InvocationScope;\n readonly [valueScope]?: ValueScope;\n readonly parameterDepth?: number;\n readonly execution?: { readonly ignoreErrexit: boolean };\n readonly stdin: ByteSource;\n readonly stdinIsDefault?: boolean;\n readonly stdout: ByteSink;\n readonly stderr: ByteSink;\n readonly diagnosticLine?: number;\n readonly diagnosticOffset?: number;\n readonly substitutionDiagnosticLine?: number;\n readonly substitutionDiagnosticLines?: ReadonlyMap<Command, number>;\n readonly scriptName?: string;\n descriptors?: ReadonlyMap<number, Descriptor>;\n}\n\ninterface Descriptor {\n closed?: boolean;\n readonly input?: ByteSource;\n readonly stdinIsDefault?: boolean;\n readonly output?: ByteSink;\n}\n\nfunction isolateIO(io: IO): IO {\n return { ...io, ...(io.descriptors ? { descriptors: new Map([...io.descriptors].map(([number, descriptor]) => [number, { ...descriptor }])) } : {}) };\n}\n\nfunction activeIO(io: IO): IO {\n const input = io.descriptors?.get(0);\n const output = io.descriptors?.get(1);\n const error = io.descriptors?.get(2);\n if (!(input?.closed && input.input === io.stdin) && !(output?.closed && output.output === io.stdout) && !(error?.closed && error.output === io.stderr)) return io;\n return {\n ...io,\n ...(input?.closed && input.input === io.stdin ? { stdin: closedSource, stdinIsDefault: false } : {}),\n ...(output?.closed && output.output === io.stdout ? { stdout: closedSink } : {}),\n ...(error?.closed && error.output === io.stderr ? { stderr: closedSink } : {}),\n };\n}\n\ninterface OutputFile {\n data: Uint8Array | undefined;\n references: number;\n}\n\nfunction appendOutputBytes(current: Uint8Array, chunk: Uint8Array): Uint8Array {\n const length = current.length + chunk.length;\n const bytes = current.buffer.byteLength - current.byteOffset >= length\n ? new Uint8Array(current.buffer, current.byteOffset, length)\n : new Uint8Array(Math.max(length, current.length * 2, 64));\n if (bytes.buffer !== current.buffer) bytes.set(current);\n bytes.set(chunk, current.length);\n return bytes.subarray(0, length);\n}\n\ntype OutputCompletion = { reason: unknown } | { status: number };\n\nclass Flow extends Error {\n constructor(readonly kind: \"exit\" | \"return\" | \"break\" | \"continue\", readonly status: number, public levels = 1) {\n super(kind);\n }\n}\n\nconst completedFlows = new WeakSet<Flow>();\n\nfunction completedExit(status: number, kind: Flow[\"kind\"] = \"exit\", levels = 1): Flow {\n const flow = new Flow(kind, status, levels);\n completedFlows.add(flow);\n return flow;\n}\n\nclass ExecutionFailure extends Error {\n constructor(readonly original: unknown, readonly io: IO, readonly diagnostic?: string) { super(message(original)); }\n}\n\nclass ExpansionFailure extends Error {\n constructor(message: string, readonly line?: number) { super(message); }\n}\n\nclass CommandFailure extends Error {\n constructor(message: string, readonly status: number) { super(message); }\n}\n\nclass FatalCommandFailure extends CommandFailure {}\n\nclass ParameterExpansionFailure extends ExpansionFailure {}\n\nclass NounsetFailure extends ExpansionFailure {}\n\nclass NounsetDiagnosticFailure extends Flow {\n constructor(readonly reason: unknown) { super(\"exit\", 1); }\n}\n\nclass PipelineClosed extends Error {\n readonly code = \"EPIPE\";\n constructor() { super(\"Pipeline consumer exited\"); }\n}\n\nfunction signalSink(sink: ByteSink, signal: AbortSignal): ByteSink {\n const ownership = budgetedSinks.get(sink);\n const owned = ownership?.write === sink.write ? ownership : undefined;\n const write = owned ? owned.write.bind(sink) : (chunk: Uint8Array) => sink.write(chunk);\n const output: ByteSink = {\n ...(sink[outputFailure] ? { [outputFailure]: sink[outputFailure] } : {}),\n ...(sink.ownedOutput ? { ownedOutput: {\n consumerClosed: sink.ownedOutput.consumerClosed,\n async write(chunk: Uint8Array) { signal.throwIfAborted(); await interruptible(sink.ownedOutput!.write(chunk), signal); },\n } } : {}),\n async write(chunk) { signal.throwIfAborted(); await interruptible(write(chunk), signal); },\n };\n if (owned) budgetedSinks.set(output, { budget: owned.budget, write: output.write });\n return output;\n}\n\nasync function cloneState(state: State, signal: AbortSignal, scope?: InvocationScope, inheritLocals = true): Promise<State> {\n const destination = await snapshotState(state, () => ({\n ...state,\n variables: Object.assign(Object.create(null) as Record<string, string>, state.variables),\n exported: new Set(state.exported), functions: new Map(state.functions), positional: [...state.positional],\n readonlyVariables: new Set(state.readonlyVariables),\n getopts: cloneGetoptsBinding(state),\n directoryStack: { entries: [...state.directoryStack?.entries ?? []], bytes: state.directoryStack?.bytes ?? 0 },\n locals: inheritLocals ? state.locals.map((scope) => new Map([...scope].map(([name, saved]) => [name, { ...saved, ...(saved.getopts ? { getopts: { integer: saved.getopts.integer, cursor: cloneGetoptsState(saved.getopts.cursor) } } : {}) }]))) : [],\n }), signal, async (destination, owner) => {\n const store = arrayStore(destination) ?? requireArrays(destination);\n for (let index = 0; index < destination.locals.length; index++) {\n const sourceFrame = state.locals[index]!;\n const copiedFrame = destination.locals[index]!;\n for (const [name, saved] of sourceFrame) {\n const typed = typedSavedVariables.get(saved);\n if (typed) {\n const copied = copiedFrame.get(name);\n if (!copied) throw new ArrayFailure(\"stale state snapshot\");\n const savedOwner = ArrayOwner.create(owner.ledger, owner);\n let binding: IndexedBinding | undefined;\n let releaseBinding: Promise<void> | undefined;\n try {\n scope?.register(async () => { await savedOwner.completion; await releaseBinding; });\n const watch = await store.watch(name, savedOwner, signal);\n const tickets = savedOwner.reserve({ generation: true, version: true, epoch: true, slots: 1, metadata: 64, work: 14 });\n const token = await textToken(savedOwner, name, signal);\n const admission = savedOwner.reserve({ slots: 1, metadata: 32, work: 5 });\n binding = typed.binding?.retain();\n typedSavedVariables.set(copied, { owner: savedOwner, binding, tickets, prepared: { name: token, admission }, watch, scalarLegacy: typed.scalarLegacy });\n tickets.cleanup = () => {\n if (typedSavedVariables.delete(copied) && scope) releaseBinding = scope.cleanup(async () => { await binding?.release(); });\n };\n } catch (error) { await binding?.release(); await savedOwner.close(); throw error; }\n }\n await owner.ledger.checkpoint(signal);\n }\n }\n }, scope);\n try {\n for (const frame of destination.locals) for (const saved of frame.values()) {\n if (saved.heldValue) saved.heldValue = stateMonitor(destination)!.values.scope.hold(saved.heldValue.value);\n }\n return destination;\n } catch (error) { stateMonitor(destination)?.closeValues(); throw error; }\n}\n\nfunction cloneGetoptsBinding(state: State): GetoptsBinding {\n return { cursor: state.getopts ? cloneGetoptsState(state.getopts.cursor) : createGetoptsState(), integer: state.getopts?.integer ?? false };\n}\n\nfunction saveVariable(state: State, name: string): SavedVariable {\n const monitor = stateMonitor(state);\n const value = monitor?.values.get(name, state.variables[name] ?? \"\");\n const heldValue = state.variables[name] !== undefined && value !== undefined ? monitor!.values.scope.hold(value) : undefined;\n return { value: state.variables[name], ...(heldValue ? { heldValue } : {}), exported: state.exported.has(name), readOnly: state.readonlyVariables?.has(name) ?? false, ...(name === \"OPTIND\" ? { getopts: cloneGetoptsBinding(state) } : {}) };\n}\n\nfunction publishVariable(state: State, name: string, value: ShellValue): void {\n const text = shellValueText(value);\n const store = stateMonitor(state)?.values;\n if (store) store.publish(name, value, () => { state.variables[name] = text; return true; });\n else state.variables[name] = text;\n}\n\nasync function restoreVariable(state: State, name: string, saved: SavedVariable): Promise<void> {\n try {\n const restoreScalar = (): void => {\n const store = stateMonitor(state)?.values;\n if (saved.value === undefined) delete state.variables[name];\n else if (saved.heldValue && store) {\n store.restoreHeld(name, saved.heldValue, () => { state.variables[name] = saved.value!; });\n delete saved.heldValue;\n } else publishVariable(state, name, saved.value);\n };\n const typed = typedSavedVariables.get(saved);\n if (typed) {\n typedSavedVariables.delete(saved);\n const store = requireArrays(state);\n let released: Promise<void> | undefined;\n stateMonitor(state)!.publish(typed.tickets, name, () => {\n if (typed.binding) {\n delete state.variables[name];\n released = store.publish(name, typed.binding, typed.tickets, typed.prepared, true);\n } else {\n released = store.remove(name, typed.tickets);\n restoreScalar();\n }\n if (saved.exported) state.exported.add(name);\n else state.exported.delete(name);\n if (!typed.scalarLegacy || name === \"OPTIND\") {\n if (saved.readOnly) { state.readonlyVariables ??= new Set(); state.readonlyVariables.add(name); }\n else state.readonlyVariables?.delete(name);\n }\n if (name === \"OPTIND\" && saved.getopts) state.getopts = saved.getopts;\n });\n typed.watch.close();\n await released;\n await typed.owner.close();\n return;\n }\n restoreScalar();\n if (saved.exported) state.exported.add(name);\n else state.exported.delete(name);\n if (name === \"OPTIND\" && saved.getopts) {\n state.getopts = { integer: saved.getopts.integer, cursor: cloneGetoptsState(saved.getopts.cursor) };\n if (!saved.readOnly) state.readonlyVariables?.delete(name);\n else { state.readonlyVariables ??= new Set(); state.readonlyVariables.add(name); }\n }\n } finally { saved.heldValue?.release(); delete saved.heldValue; }\n}\n\nfunction localDeclarationOptions(args: readonly string[], signal: AbortSignal): { readonly indexed: boolean; readonly offset: number; readonly error: string | undefined } {\n signal.throwIfAborted();\n let indexed = false;\n let offset = 0;\n while (args[offset]?.startsWith(\"-\")) {\n signal.throwIfAborted();\n const option = args[offset++]!;\n if (option === \"--\") break;\n if (option !== \"-a\") return { indexed, offset, error: option };\n indexed = true;\n }\n return { indexed, offset, error: undefined };\n}\n\nfunction decimalIndex(value: string): number {\n let position = 0;\n while (position < value.length && /[\\t\\n\\v\\f\\r ]/u.test(value[position]!)) position++;\n const negative = value[position] === \"-\";\n if (negative || value[position] === \"+\") position++;\n let index = 0;\n for (; position < value.length; position++) {\n const digit = value.charCodeAt(position) - 48;\n if (digit < 0 || digit > 9) break;\n index = (Math.imul(index, 10) + digit) | 0;\n }\n return negative ? -index | 0 : index;\n}\n\nfunction saturatedProduct(left: number, right: number): number {\n return right !== 0 && left > Math.floor(Number.MAX_SAFE_INTEGER / right) ? Number.MAX_SAFE_INTEGER : left * right;\n}\n\nfunction saturatedSum(left: number, right: number): number {\n return left > Number.MAX_SAFE_INTEGER - right ? Number.MAX_SAFE_INTEGER : left + right;\n}\n\nfunction errorCode(error: unknown): string | undefined {\n return typeof error === \"object\" && error !== null && \"code\" in error ? String(error.code) : undefined;\n}\n\nfunction message(error: unknown, onInternalError?: InternalErrorHandler): string {\n if (error instanceof ExpansionFailure || error instanceof CommandFailure || error instanceof ArrayFailure || error instanceof BraceExpansionFailure) return error.message;\n return publicDiagnosticMessage(error, onInternalError);\n}\n\nfunction filesystemDiagnostic(error: unknown, target: string, onInternalError?: InternalErrorHandler): string | undefined {\n const descriptions: Readonly<Record<string, string>> = { ENOENT: \"No such file or directory\", EACCES: \"Permission denied\", EPERM: \"Operation not permitted\", ENOTDIR: \"Not a directory\", EISDIR: \"Is a directory\", ELOOP: \"Too many levels of symbolic links\", ENOSPC: \"No space left on device\", EROFS: \"Read-only file system\" };\n const description = descriptions[errorCode(error) ?? \"\"];\n if (!description) return undefined;\n publicDiagnosticMessage(error, onInternalError);\n return `${target}: ${description}`;\n}\n\nfunction cdUtf8Width(codePoint: number): number {\n return codePoint <= 0x7f ? 1 : codePoint <= 0x7ff ? 2 : codePoint <= 0xffff ? 3 : 4;\n}\n\nfunction cdDiagnostic(fragments: readonly string[]): string {\n const chunks: string[] = [];\n let bytes = 0;\n let suffixBoundary = 0;\n let units = 0;\n for (const fragment of fragments) {\n let index = 0;\n while (index < fragment.length) {\n const codePoint = fragment.codePointAt(index)!;\n const width = cdUtf8Width(codePoint);\n if (bytes + width > 65_792) {\n chunks.push(fragment.slice(0, index));\n return `${chunks.join(\"\").slice(0, suffixBoundary)} [truncated]`;\n }\n bytes += width;\n const length = codePoint > 0xffff ? 2 : 1;\n index += length;\n units += length;\n if (bytes <= 65_780) suffixBoundary = units;\n }\n chunks.push(fragment);\n }\n return chunks.join(\"\");\n}\n\nclass CdLookup {\n private spent = 0;\n private probes = 0;\n\n constructor(private readonly signal: AbortSignal) {}\n\n private async charge(amount: number): Promise<void> {\n this.signal.throwIfAborted();\n if (amount > 8_388_608 - this.spent) throw new PublicDiagnostic(\"cd: helper work limit exceeded\");\n while (amount > 0) {\n const step = Math.min(amount, 128 - this.spent % 128);\n this.spent += step;\n amount -= step;\n if (this.spent % 128 === 0) {\n this.signal.throwIfAborted();\n await yieldTurn(this.signal);\n this.signal.throwIfAborted();\n }\n }\n }\n\n private async scan(value: string, search = false): Promise<{\n bytes: number; components: { start: number; end: number; bytes: number }[];\n }> {\n let bytes = 0;\n let start = 0;\n let startBytes = 0;\n let slots = 1;\n const components: { start: number; end: number; bytes: number }[] = [];\n for (let index = 0; index < value.length;) {\n const codePoint = value.codePointAt(index)!;\n const width = cdUtf8Width(codePoint);\n if (bytes + width > 65_536) throw new PublicDiagnostic(search ? \"cd: CDPATH exceeds 65536 UTF-8 bytes\" : \"cd: path exceeds 65536 UTF-8 bytes\");\n if (search && codePoint === 58 && ++slots > 4096) throw new PublicDiagnostic(\"cd: CDPATH exceeds 4096 components\");\n await this.charge(width);\n if (search && codePoint === 58) {\n components.push({ start, end: index, bytes: bytes - startBytes });\n start = index + 1;\n startBytes = bytes + width;\n }\n bytes += width;\n index += codePoint > 0xffff ? 2 : 1;\n }\n if (search) components.push({ start, end: value.length, bytes: bytes - startBytes });\n return { bytes, components };\n }\n\n async find(fs: FileSystem, cwd: string, target: string, cdpath: string | undefined): Promise<{ path: string; print: boolean }> {\n const targetBytes = (await this.scan(target)).bytes;\n const absolute = target.startsWith(\"/\");\n const cwdBytes = absolute ? 0 : (await this.scan(cwd)).bytes;\n const eligible = !absolute && target !== \".\" && target !== \"..\" && !target.startsWith(\"./\") && !target.startsWith(\"../\");\n const search = eligible && cdpath ? await this.scan(cdpath, true) : undefined;\n const probe = async (component: string, componentBytes: number): Promise<string> => {\n const rawBytes = absolute ? targetBytes : component.startsWith(\"/\") ? componentBytes + 1 + targetBytes\n : cwdBytes + 1 + (component ? componentBytes + 1 : 0) + targetBytes;\n if (rawBytes > 65_536) throw new PublicDiagnostic(\"cd: path exceeds 65536 UTF-8 bytes\");\n await this.charge(2 * rawBytes);\n const raw = absolute ? target : component.startsWith(\"/\") ? `${component}/${target}`\n : component ? `${cwd}/${component}/${target}` : `${cwd}/${target}`;\n const path = resolvePath(cwd, raw);\n await this.scan(path);\n this.signal.throwIfAborted();\n if (++this.probes > 4097) throw new PublicDiagnostic(\"cd: probe limit exceeded\");\n await this.charge(1);\n this.signal.throwIfAborted();\n const stat = await fs.stat(path, { signal: this.signal });\n this.signal.throwIfAborted();\n if (stat.type !== \"directory\") throw new FsError(\"ENOTDIR\", { path });\n await this.charge(1);\n this.signal.throwIfAborted();\n await fs.access(path, ACCESS_MODES.X_OK, { signal: this.signal });\n this.signal.throwIfAborted();\n return path;\n };\n for (const component of search?.components ?? []) {\n try {\n const path = await probe(cdpath!.slice(component.start, component.end), component.bytes);\n return { path, print: component.start !== component.end };\n } catch (error) {\n this.signal.throwIfAborted();\n if (!(error instanceof FsError) || ![\"ENOENT\", \"ENOTDIR\", \"EACCES\"].includes(error.code)) throw error;\n }\n }\n return { path: await probe(\"\", 0), print: false };\n }\n}\n\nclass DirectoryStackWork {\n private spent = 0;\n private flushed = 0;\n private outputBytes = 0;\n private chunk = \"\";\n private chunkBytes = 0;\n\n constructor(private readonly name: string, private readonly signal: AbortSignal, private readonly stdout: ByteSink) {}\n\n fail(text: string, status = 1): never {\n throw new CommandFailure(cdDiagnostic([this.name, \": \", text]), status);\n }\n\n async charge(amount: number): Promise<void> {\n this.signal.throwIfAborted();\n if (!Number.isSafeInteger(amount) || amount < 0 || amount > 8_388_608 - this.spent) this.fail(\"helper work limit exceeded\");\n while (amount > 0) {\n const step = Math.min(amount, 128 - this.spent % 128);\n this.spent += step;\n amount -= step;\n if (this.spent % 128 === 0) await this.flushWork();\n }\n }\n\n async flushWork(): Promise<void> {\n this.signal.throwIfAborted();\n if (this.flushed === this.spent) return;\n await yieldTurn(this.signal);\n this.signal.throwIfAborted();\n this.flushed = this.spent;\n }\n\n async scan(value: string, kind: \"argument\" | \"path\" | \"HOME\"): Promise<number> {\n let bytes = 0;\n for (let offset = 0; offset < value.length;) {\n const point = value.codePointAt(offset)!;\n const width = cdUtf8Width(point);\n if (width > 65_536 - bytes) this.fail(`${kind} exceeds 65536 UTF-8 bytes`);\n await this.charge(width);\n bytes += width;\n offset += point > 0xffff ? 2 : 1;\n }\n return bytes;\n }\n\n async number(token: string): Promise<bigint> {\n let phase: \"leading\" | \"sign\" | \"digits\" | \"trailing\" = \"leading\";\n let negative = false;\n let digits = false;\n let value = 0n;\n await this.charge(1);\n for (let offset = 1; offset < token.length; offset++) {\n await this.charge(1);\n const code = token.charCodeAt(offset);\n const whitespace = code === 32 || code >= 9 && code <= 13;\n if (phase === \"leading\" && whitespace) continue;\n if (phase === \"leading\" && (code === 43 || code === 45)) {\n negative = code === 45;\n phase = \"sign\";\n continue;\n }\n if (code >= 48 && code <= 57 && phase !== \"trailing\") {\n phase = \"digits\";\n digits = true;\n value = value * 10n + BigInt(code - 48);\n if (value > (negative ? 9_223_372_036_854_775_808n : 9_223_372_036_854_775_807n)) this.fail(\"invalid directory stack index\", 2);\n } else if (phase === \"digits\" && whitespace || phase === \"trailing\" && whitespace) phase = \"trailing\";\n else this.fail(\"invalid directory stack index\", 2);\n }\n if (!digits) this.fail(\"invalid directory stack index\", 2);\n return negative ? -value : value;\n }\n\n async emit(text: string): Promise<void> {\n for (let offset = 0; offset < text.length;) {\n const point = text.codePointAt(offset)!;\n const width = cdUtf8Width(point);\n if (width > 8_388_608 - this.outputBytes) this.fail(\"display exceeds 8388608 UTF-8 bytes\");\n await this.charge(width);\n if (width > 16_384 - this.chunkBytes) await this.flushOutput();\n const units = point > 0xffff ? 2 : 1;\n this.chunk += text.slice(offset, offset + units);\n this.chunkBytes += width;\n this.outputBytes += width;\n offset += units;\n }\n }\n\n async flushOutput(): Promise<void> {\n this.signal.throwIfAborted();\n if (!this.chunkBytes) return;\n const text = this.chunk;\n this.chunk = \"\";\n this.chunkBytes = 0;\n await writeText(this.stdout, text);\n this.signal.throwIfAborted();\n }\n\n async display(cwd: string, entries: readonly string[], options: { long: boolean; lines: boolean; verbose: boolean; index?: number }, home: string | undefined): Promise<void> {\n await this.scan(cwd, \"path\");\n const homeBytes = !options.long && home !== undefined ? await this.scan(home, \"HOME\") : 0;\n const start = options.index ?? 0;\n const end = options.index ?? entries.length;\n for (let index = start; index <= end; index++) {\n await this.charge(1);\n let entry = index === 0 ? cwd : entries[index - 1]!;\n if (homeBytes > 1 && home !== undefined && entry.length >= home.length) {\n let matches = true;\n for (let offset = 0; offset < home.length; offset++) {\n await this.charge(1);\n if (entry.charCodeAt(offset) !== home.charCodeAt(offset)) { matches = false; break; }\n }\n if (matches) {\n if (entry.length > home.length) await this.charge(1);\n if (entry.length === home.length || entry[home.length] === \"/\") entry = `~${entry.slice(home.length)}`;\n }\n }\n if (index !== start && !options.lines && !options.verbose) await this.emit(\" \");\n if (options.verbose) await this.emit(`${String(index).padStart(2, \" \")} `);\n await this.emit(entry);\n if (options.lines || options.verbose) await this.emit(\"\\n\");\n }\n if (!options.lines && !options.verbose) await this.emit(\"\\n\");\n await this.flushOutput();\n }\n}\n\nconst closedSink: ByteSink = { async write() { throw Object.assign(new PublicDiagnostic(\"Bad file descriptor\"), { code: \"EBADF\" }); } };\nconst closedSource: ByteSource = { [Symbol.asyncIterator]() {\n let closed = false;\n let completion = Promise.resolve();\n const enqueue = <Value>(operation: () => Value | PromiseLike<Value>): Promise<Value> => {\n const pending = completion.then(operation);\n completion = pending.then(() => {}, () => {});\n return pending;\n };\n const iterator: AsyncIterableIterator<Uint8Array> = {\n next() {\n return enqueue<IteratorResult<Uint8Array>>(() => {\n if (closed) return { done: true, value: undefined };\n closed = true;\n throw Object.assign(new PublicDiagnostic(\"Bad file descriptor\"), { code: \"EBADF\" });\n });\n },\n return(value?: unknown) { return enqueue(async () => { closed = true; return { done: true, value: await value }; }); },\n throw(error?: unknown) { return enqueue(() => { closed = true; throw error; }); },\n [Symbol.asyncIterator]() { return this; },\n };\n return iterator;\n} };\n\ninterface RuntimeOutcomeFrame {\n report?: CancellationReport | undefined;\n}\n\ninterface InvokeOutcomeRecord {\n readonly promise: Promise<CommandResult>;\n readonly boundary: CancellationBoundary;\n finalized: boolean;\n consumed: boolean;\n selection?: CancellationSelection<CommandResult> | undefined;\n}\n\n/** Internal to the shell/runtime pair; it is not exported by the package root. */\nexport class RuntimeCancellationState {\n readonly #records = new Set<InvokeOutcomeRecord>();\n #diagnostics = new WeakMap<object, NounsetDiagnosticFailure>();\n #closed = false;\n\n recordDiagnostic(promise: Promise<CommandResult>, failure: NounsetDiagnosticFailure): void {\n if (!this.#closed) this.#diagnostics.set(promise, failure);\n }\n\n consumeDiagnostic(rawReturn: unknown): NounsetDiagnosticFailure | undefined {\n if (rawReturn === null || typeof rawReturn !== \"object\" && typeof rawReturn !== \"function\") return undefined;\n const failure = this.#diagnostics.get(rawReturn);\n this.#diagnostics.delete(rawReturn);\n return failure;\n }\n\n bind(promise: Promise<CommandResult>, boundary: CancellationBoundary): InvokeOutcomeRecord {\n if (this.#closed) throw new Error(\"Cancellation outcome admission is closed\");\n const record: InvokeOutcomeRecord = { promise, boundary, finalized: false, consumed: false };\n this.#records.add(record);\n return record;\n }\n\n finalize(record: InvokeOutcomeRecord, selection: CancellationSelection<CommandResult>): void {\n if (record.consumed || !this.#records.has(record)) return;\n record.selection = selection;\n record.finalized = true;\n }\n\n consume(rawReturn: unknown, capturedReason: unknown): CancellationReport | undefined {\n for (const record of this.#records) {\n if (record.promise !== rawReturn) continue;\n record.consumed = true;\n this.#records.delete(record);\n const selection = record.selection;\n if (!record.finalized || selection?.outcome.kind !== \"throw\"\n || !Object.is(selection.outcome.reason, capturedReason)) return undefined;\n return selection.report;\n }\n return undefined;\n }\n\n discard(record: InvokeOutcomeRecord | undefined): void {\n if (!record) return;\n record.consumed = true;\n this.#records.delete(record);\n }\n\n close(): void {\n this.#closed = true;\n for (const record of this.#records) record.consumed = true;\n this.#records.clear();\n this.#diagnostics = new WeakMap();\n }\n}\n\ninterface CancellationAdmissionOwner {\n assertAdmissionOpen(): void;\n}\n\nclass InvocationCancellationOwner implements CancellationAdmissionOwner {\n readonly finalized: Promise<void>;\n readonly #failures: unknown[];\n readonly #outcomes: RuntimeCancellationState;\n readonly #publicPromise: Promise<CommandResult> | undefined;\n readonly #retireCleanup: () => void;\n #resolveFinalized!: () => void;\n #admissionOpen = true;\n #boundary: CancellationBoundary | undefined;\n #boundaryClosed = false;\n #record: InvokeOutcomeRecord | undefined;\n #observedOrigin: CancellationOrigin | undefined;\n #captureCancellation: ((origin: CancellationOrigin) => void) | undefined;\n #detach: (() => void) | undefined;\n #finish: Promise<CancellationSelection<CommandResult>> | undefined;\n\n constructor(\n parent: InvocationScope,\n readonly prepared: PreparedChildCancellation,\n outcomes: RuntimeCancellationState,\n publicPromise?: Promise<CommandResult>,\n ) {\n this.#failures = parent.failures;\n this.#outcomes = outcomes;\n this.#publicPromise = publicPromise;\n this.finalized = new Promise<void>(resolve => { this.#resolveFinalized = resolve; });\n this.#retireCleanup = parent.register(async () => {\n this.requestClose();\n await this.finalized;\n });\n }\n\n assertAdmissionOpen(): void {\n if (!this.#admissionOpen) throw new Error(\"Cancellation invocation admission is closed\");\n }\n\n requestClose(): void { this.#admissionOpen = false; }\n\n activate(): CancellationBoundary {\n this.assertAdmissionOpen();\n const boundary = activateChildCancellation(this.prepared);\n this.#boundary = boundary;\n try {\n this.#detach = subscribeCancellation(boundary, origin => { this.#captureCancellation?.(origin); });\n if (this.#publicPromise) this.#record = this.#outcomes.bind(this.#publicPromise, boundary);\n return boundary;\n } catch (error) {\n this.#closeBoundary();\n throw error;\n }\n }\n\n capture(\n execute: () => Promise<CommandResult>,\n frame: RuntimeOutcomeFrame,\n ): Promise<CapturedCancellationOutcome<CommandResult>> {\n return new Promise(resolve => {\n let settled = false;\n let raw: Promise<CommandResult> | undefined;\n let queuedOrigin = false;\n const settle = (captured: CapturedCancellationOutcome<CommandResult>): void => {\n if (settled) return;\n settled = true;\n this.#captureCancellation = undefined;\n resolve(captured);\n };\n this.#captureCancellation = origin => {\n if (settled || queuedOrigin) return;\n queuedOrigin = true;\n queueMicrotask(() => {\n if (settled) return;\n this.#observedOrigin = origin;\n settle({ kind: \"throw\", reason: origin.signal.reason });\n void raw?.catch(() => undefined);\n });\n };\n try { raw = Promise.resolve(execute()); }\n catch (reason) { settle({ kind: \"throw\", reason }); return; }\n void raw.then(\n value => settle({ kind: \"return\", value }),\n reason => settle(frame.report && Object.is(frame.report.origin.signal.reason, reason)\n ? { kind: \"throw\", reason, report: frame.report }\n : { kind: \"throw\", reason }),\n );\n if (settled) void raw.catch(() => undefined);\n });\n }\n\n finish(barrier: Promise<void>, captured: CapturedCancellationOutcome<CommandResult>): Promise<CancellationSelection<CommandResult>> {\n this.#finish ??= this.#finishOnce(barrier, captured);\n return this.#finish;\n }\n\n async abandon(barrier: Promise<void>): Promise<void> {\n this.requestClose();\n try { await barrier; }\n finally {\n this.#outcomes.discard(this.#record);\n this.#closeBoundary();\n this.#resolveFinalized();\n this.#retireCleanup();\n }\n }\n\n async #finishOnce(barrier: Promise<void>, captured: CapturedCancellationOutcome<CommandResult>): Promise<CancellationSelection<CommandResult>> {\n this.requestClose();\n try {\n await barrier;\n this.#closeBoundary();\n const selection = selectRuntimeCancellationOutcome(this.#boundary!, captured, this.#observedOrigin);\n if (this.#record) this.#outcomes.finalize(this.#record, selection);\n return selection;\n } finally {\n this.#resolveFinalized();\n this.#retireCleanup();\n }\n }\n\n #closeBoundary(): void {\n if (!this.#boundary || this.#boundaryClosed) return;\n this.#boundaryClosed = true;\n try { this.#detach?.(); } catch (error) { this.#failures.push(error); }\n this.#detach = undefined;\n const result = this.#boundary.close();\n this.#failures.push(...result.failures);\n }\n}\n\nexport class Runtime {\n constructor(\n readonly fs: FileSystem,\n readonly commands: CommandRegistry,\n readonly middleware: readonly Middleware[],\n readonly budget: Budget,\n readonly signal: AbortSignal = budget.signal,\n readonly fileWrites = new Map<string, Promise<void>>(),\n readonly outputFiles = new Map<string, OutputFile>(),\n readonly commandSignal: AbortSignal = signal,\n readonly cancellation: CancellationBoundary,\n readonly cancellationState: RuntimeCancellationState,\n readonly cancellationOwner: CancellationAdmissionOwner | undefined,\n readonly cancellationDepth: number,\n readonly cancellationMaxDepth: number,\n readonly outcomeFrame: RuntimeOutcomeFrame | undefined = undefined,\n ) {\n this.fs = scopeFileSystem(fs, () => budget.fileSystemOperation(), signal);\n const checkpoint = () => budget.cpuCheckpoint();\n registerYieldCheckpoint(signal, checkpoint);\n registerYieldCheckpoint(commandSignal, checkpoint);\n }\n\n private async ereDiagnostic(io: IO, detail: string): Promise<void> {\n try { await this.diagnostic(io, detail); }\n catch (reason) {\n this.signal.throwIfAborted();\n if (reason instanceof ShellLimitError) throw reason;\n throw new NounsetDiagnosticFailure(reason);\n }\n }\n\n private async ere(subject: string, pattern: Word, state: State, io: IO): Promise<number> {\n const scope = io[invocationScope];\n scope.assertOpen();\n const store = requireArrays(state);\n let operation: ArrayOwner | undefined;\n let holding: ReturnType<ArrayOwner[\"hold\"]> | undefined;\n let staged: IndexedBinding | undefined;\n let closing: Promise<void> | undefined;\n const close = (): Promise<void> => closing ??= Promise.resolve().then(async () => {\n try { await staged?.release(); } finally { try { await operation?.close(); } finally { holding?.release(); } }\n });\n let primary = false;\n try {\n operation = ArrayOwner.create(store.owner.ledger, store.owner);\n holding = store.owner.hold();\n await this.prepareArrayObservers(state, operation);\n operation.reserve({ metadata: 64, allocatedSlots: 1, work: 2 });\n const fragments: EreFragment[] = [];\n await this.word(pattern, state, io, false, false, false, false, (text, literal) => {\n operation!.reserve({ metadata: 64, allocatedSlots: 1, payload: Buffer.byteLength(text), work: text.length + 2 });\n fragments.push({ text, literal });\n });\n const collation = state.variables.LC_ALL || state.variables.LC_COLLATE || state.variables.LANG || \"C\";\n const characters = state.variables.LC_ALL || state.variables.LC_CTYPE || state.variables.LANG || \"C\";\n if (![collation, characters].every(locale => locale === \"C\" || locale === \"POSIX\")) {\n await this.ereDiagnostic(io, \"[[ unsupported ERE profile: locale must be C or POSIX\");\n return 2;\n }\n await textToken(operation, subject, this.signal);\n const name = \"BASH_REMATCH\";\n const watch = await store.watch(name, operation, this.signal);\n const ledger = new EreLedger({\n maxExpansionBytes: this.budget.limits.maxExpansionBytes,\n maxExpansionFields: this.budget.limits.maxExpansionFields,\n });\n let result: Awaited<ReturnType<typeof matchEre>>;\n try {\n const program = await compileEre(fragments, ledger, this.signal);\n result = await matchEre(program, subject, ledger, this.signal);\n }\n catch (error) {\n this.signal.throwIfAborted();\n if (error instanceof EreSyntaxError || error instanceof EreUnsupportedError) {\n await this.ereDiagnostic(io, `[[ ${error.message}`);\n return 2;\n }\n throw error;\n }\n const status = result.matched ? 0 : 1;\n this.signal.throwIfAborted();\n scope.assertOpen();\n if (state.readonlyVariables?.has(name)) { await this.ereDiagnostic(io, `${name}: readonly variable`); return status; }\n if (state.exported.has(name)) throw new ArrayFailure(\"exported binding cannot be indexed\");\n if (!watch.valid()) throw new ArrayFailure(\"stale binding\");\n const supersede = await stateMonitor(state)!.prepareTypedPublication(name, operation, this.signal);\n const tickets = operation.reserve({ generation: true, version: true, epoch: true, work: 8 });\n const prepared = await store.prepareName(name, operation, this.signal);\n staged = IndexedBinding.create(store.owner);\n if (result.matched) for (let index = 0; index < result.captures.length; index++) {\n const span = result.captures[index]!;\n const size = span === null ? 0 : span.end - span.start;\n operation.reserve({ payload: size, metadata: 32, work: size + 2 });\n const value = span === null ? \"\" : subject.slice(span.start, span.end);\n const token = await textToken(staged.owner, value, this.signal);\n try { staged.insert(index, token); } catch (error) { token.release(); throw error; }\n }\n this.signal.throwIfAborted();\n scope.assertOpen();\n if (state.readonlyVariables?.has(name)) { await this.ereDiagnostic(io, `${name}: readonly variable`); return status; }\n if (state.exported.has(name)) throw new ArrayFailure(\"exported binding cannot be indexed\");\n if (!watch.valid()) throw new ArrayFailure(\"stale binding\");\n let released: Promise<void> | undefined;\n stateMonitor(state)!.publish(tickets, name, () => {\n supersede();\n delete state.variables[name];\n released = store.publish(name, staged!, tickets, prepared);\n });\n staged = undefined;\n watch.close();\n await released;\n return status;\n } catch (error) { primary = true; throw error; }\n finally {\n await close().catch(error => {\n if (primary) scope.failures.push(error);\n else throw new NounsetDiagnosticFailure(error);\n });\n }\n }\n\n static rootCancellationAdmission(budget: Budget): CancellationAdmissionSnapshot {\n const maxDepth = saturatedSum(budget.limits.maxCommands, saturatedSum(budget.limits.maxSubstitutionDepth, 1));\n return {\n depth: 0,\n maxDepth,\n resourceLimit: Runtime.cancellationResourceLimit(budget, 0, maxDepth, 2),\n };\n }\n\n private static cancellationResourceLimit(budget: Budget, depth: number, maxDepth: number, controls: number): number {\n const remainingCommands = Math.max(0, budget.limits.maxCommands - budget.commands);\n const remainingDepth = Math.max(0, maxDepth - depth);\n return saturatedSum(saturatedSum(4, controls), saturatedSum(remainingCommands, remainingDepth));\n }\n\n private cancellationAdmission(depth: number, controls = 0): CancellationAdmissionSnapshot {\n return {\n depth,\n maxDepth: this.cancellationMaxDepth,\n resourceLimit: Runtime.cancellationResourceLimit(this.budget, depth, this.cancellationMaxDepth, controls),\n };\n }\n\n private observeRuntimeReturn<Value>(\n rawReturn: Value | PromiseLike<Value>,\n frame: RuntimeOutcomeFrame,\n downstream: () => Promise<CommandResult> | undefined = () => undefined,\n ): Promise<Value> {\n const raw = rawReturn as unknown;\n return Promise.resolve(rawReturn).then(\n value => {\n if (raw !== downstream()) frame.report = undefined;\n return value;\n },\n reason => {\n const report = this.cancellationState.consume(raw, reason);\n if (report) frame.report = report;\n else if (raw !== downstream()) frame.report = undefined;\n const diagnostic = this.cancellationState.consumeDiagnostic(raw);\n if (diagnostic) throw diagnostic;\n throw reason;\n },\n );\n }\n\n private invokeChild(\n options: ShellInvokeOptions,\n state: State,\n parent: InvocationScope,\n validate: () => void,\n execute: (runtime: Runtime, scope: InvocationScope) => Promise<CommandResult>,\n ): Promise<CommandResult> {\n const publicPromise: Promise<CommandResult> = Promise.resolve().then(async () => {\n if (!this.cancellation.deliverySignal.aborted) parent.assertOpen();\n const childDepth = this.cancellationDepth + 1;\n const prepared = prepareChildCancellation(\n this.cancellation,\n options,\n this.cancellationAdmission(childDepth),\n );\n this.cancellationOwner?.assertAdmissionOpen();\n validate();\n\n let scope: InvocationScope | undefined;\n let boundary: CancellationBoundary;\n let owner: InvocationCancellationOwner | undefined;\n try {\n if (prepared.owned) {\n owner = new InvocationCancellationOwner(parent, prepared, this.cancellationState, publicPromise);\n scope = parent.child();\n boundary = owner.activate();\n } else {\n scope = parent.child();\n boundary = activateChildCancellation(prepared);\n }\n } catch (error) {\n if (owner) await owner.abandon(scope?.close() ?? Promise.resolve());\n else await scope?.close();\n throw error;\n }\n\n const frame: RuntimeOutcomeFrame = {};\n const runtime = new Runtime(\n this.fs,\n this.commands,\n this.middleware,\n this.budget,\n AbortSignal.any([boundary.deliverySignal, scope.signal]),\n this.fileWrites,\n this.outputFiles,\n boundary.deliverySignal,\n boundary,\n this.cancellationState,\n owner ?? this.cancellationOwner,\n prepared.owned ? childDepth : this.cancellationDepth,\n this.cancellationMaxDepth,\n frame,\n );\n let captured: CapturedCancellationOutcome<CommandResult>;\n const executeChild = (): Promise<CommandResult> => execute(runtime, scope);\n if (owner) captured = await owner.capture(executeChild, frame);\n else {\n try { captured = { kind: \"return\", value: await executeChild() }; }\n catch (reason) {\n captured = frame.report && Object.is(frame.report.origin.signal.reason, reason)\n ? { kind: \"throw\", reason, report: frame.report }\n : { kind: \"throw\", reason };\n }\n }\n\n let selection: CancellationSelection<CommandResult>;\n if (owner) selection = await owner.finish(scope.close(), captured);\n else {\n await scope.close();\n const close = boundary.close();\n scope.failures.push(...close.failures);\n selection = selectRuntimeCancellationOutcome(boundary, captured);\n }\n if (selection.outcome.kind === \"throw\") {\n const reason = selection.outcome.reason;\n if (reason instanceof NounsetDiagnosticFailure) {\n this.cancellationState.recordDiagnostic(publicPromise, reason);\n throw reason.reason;\n }\n throw reason;\n }\n return selection.outcome.value;\n });\n return publicPromise;\n }\n\n private clearOutcomeReport(): void {\n if (this.outcomeFrame) this.outcomeFrame.report = undefined;\n }\n\n diagnostic(io: IO, text: string): Promise<void> {\n return writeDiagnostic(io.stderr, `${io.scriptName ?? \"shell\"}: line ${io.diagnosticLine ?? 1}: ${text}\\n`);\n }\n\n writeVariable(state: State, name: string, value: ShellValue, origin: \"assignment\" | \"arithmetic\" | \"getopts\" = \"assignment\"): void {\n if (arrayStore(state)?.get(name)) throw new ArrayFailure(origin === \"arithmetic\" ? \"indexed arithmetic is unsupported\" : \"indexed write requires prepared publication\");\n if (state.readonlyVariables?.has(name)) throw new PublicDiagnostic(`${name}: readonly variable`);\n if (shellValueByteLength(value) > this.budget.limits.maxExpansionBytes) this.budget.fail(\"maxExpansionBytes\");\n if (name === \"OPTIND\" && state.getopts?.integer && origin !== \"arithmetic\") {\n try { value = String(evaluateArithmetic(prepareArithmetic(shellValueText(value) || \"0\", this.budget.parsing), this.arithmeticVariables(state), this.budget.parsing)); }\n catch (error) { this.rethrowArithmeticControl(error); throw new ExpansionFailure(message(error, this.budget.onInternalError)); }\n }\n publishVariable(state, name, value);\n if (name === \"OPTIND\" && origin !== \"getopts\") this.syncGetopts(state);\n }\n\n private syncGetopts(state: State): void {\n state.getopts ??= cloneGetoptsBinding(state);\n const value = state.variables.OPTIND;\n if (value === undefined) {\n state.getopts.integer = false;\n state.getopts.cursor = createGetoptsState();\n } else state.getopts.cursor = withGetoptsIndex(state.getopts.cursor, decimalIndex(value));\n }\n\n private reconcileGetopts(state: State, previous: string | undefined): void {\n if (state.variables.OPTIND !== previous) this.syncGetopts(state);\n }\n\n private unsetVariable(state: State, name: string, internal = false): void {\n if (state.readonlyVariables?.has(name)) throw new PublicDiagnostic(`${name}: readonly variable`);\n delete state.variables[name];\n state.exported.delete(name);\n if (name === \"OPTIND\" && !internal) this.syncGetopts(state);\n }\n\n private rethrowArithmeticControl(error: unknown): void {\n this.signal.throwIfAborted();\n if (error instanceof NounsetFailure || error instanceof Flow || error instanceof ShellLimitError || error instanceof ShellSyntaxError) throw error;\n }\n\n arithmeticVariables(state: State, line?: number): Record<string, string> {\n return new Proxy(state.variables, {\n get: (target, key) => {\n this.signal.throwIfAborted();\n if (arrayStore(state)?.get(String(key))) throw new ArrayFailure(\"indexed arithmetic is unsupported\");\n const value = Reflect.get(target, key);\n if (state.nounset && typeof key === \"string\" && value === undefined) throw new NounsetFailure(`${key}: unbound variable`, line);\n return value;\n },\n set: (_target, key, value: string) => { this.writeVariable(state, String(key), value, \"arithmetic\"); return true; },\n });\n }\n\n variable(state: State, name: string): string | undefined {\n const binding = arrayStore(state)?.get(name);\n return binding ? binding.get(0) : state.variables[name];\n }\n\n private requireParameter(value: string | undefined, name: string, state: State, io: IO, line?: number): void {\n if (state.nounset && value === undefined) throw new NounsetFailure(`${name}: unbound variable`, io.diagnosticLine ?? line);\n }\n\n async assignVariable(state: State, name: string, value: ShellValue, origin: \"assignment\" | \"getopts\" = \"assignment\"): Promise<void> {\n if (!arrayStore(state)?.get(name)) { this.writeVariable(state, name, value, origin); return; }\n await this.arrayZero(state, name, async () => shellValueText(value));\n }\n\n async prepareVariable(state: State, name: string, saved: SavedVariable, scalarLegacy = false): Promise<void> {\n const store = requireArrays(state);\n const failures = stateMonitor(state)!.session.scope.failures;\n const owner = ArrayOwner.create(store.owner.ledger, store.owner);\n let holding: ReturnType<ArrayOwner[\"hold\"]> | undefined;\n let binding: IndexedBinding | undefined;\n let primaryPresent = false;\n let primary: unknown;\n const cleanup = async (action: () => void | Promise<void>): Promise<void> => {\n try { await action(); }\n catch (error) {\n if (primaryPresent) failures.push(error);\n else { primaryPresent = true; primary = error; }\n }\n };\n try {\n holding = store.owner.hold();\n const watch = await store.watch(name, owner, this.signal);\n const tickets = owner.reserve({ generation: true, version: true, epoch: true, slots: 1, metadata: 64, work: 14 });\n const token = await textToken(owner, name, this.signal);\n const admission = owner.reserve({ slots: 1, metadata: 32, work: 5 });\n if (saved.value !== undefined) await textToken(owner, saved.value, this.signal);\n if (!watch.valid()) throw new ArrayFailure(\"stale binding\");\n binding = scalarLegacy ? undefined : store.get(name)?.retain();\n typedSavedVariables.set(saved, { owner, binding, tickets, prepared: { name: token, admission }, watch, scalarLegacy });\n tickets.cleanup = () => { typedSavedVariables.delete(saved); };\n } catch (error) {\n primaryPresent = true;\n primary = error;\n await cleanup(() => binding?.release());\n await cleanup(() => owner.close());\n } finally { await cleanup(() => holding?.release()); }\n if (primaryPresent) throw primary;\n }\n\n async prepareArrayObservers(state: State, owner: ArrayOwner): Promise<void> {\n owner.reserve({ metadata: 128, work: 6 });\n for (const frame of state.locals) for (const [name, saved] of frame) {\n if (!typedSavedVariables.has(saved)) await this.prepareVariable(state, name, saved);\n await owner.ledger.checkpoint(this.signal);\n }\n for (const frame of stateMonitor(state)!.overlayFrames()) for (const [name, record] of frame) {\n const saved = record as SavedVariable;\n if (!saved.superseded && !typedSavedVariables.has(saved)) await this.prepareVariable(state, name, saved, true);\n await owner.ledger.checkpoint(this.signal);\n }\n }\n\n async discardVariable(saved: SavedVariable): Promise<void> {\n saved.heldValue?.release();\n delete saved.heldValue;\n const typed = typedSavedVariables.get(saved);\n if (!typed) return;\n typedSavedVariables.delete(saved);\n typed.watch.close();\n await typed.binding?.release();\n await typed.owner.close();\n }\n\n async indexedEnvironment(state: State, env: Readonly<Record<string, string>>): Promise<void> {\n const store = requireArrays(state);\n const operation = ArrayOwner.create(store.owner.ledger, store.owner);\n const holding = store.owner.hold();\n const epoch = stateMonitor(state)!.epoch;\n try {\n const keys = Object.keys(env);\n operation.reserve({ metadata: 128 + keys.length * 64, allocatedSlots: keys.length * 2, work: keys.length * 5 + 8 });\n for (const key of keys) {\n const value = env[key];\n if (key.includes(\"\\0\") || key.includes(\"=\") || typeof value !== \"string\" || value.includes(\"\\0\")) throw new TypeError(\"Invalid invoke environment entry\");\n if (state.readonlyVariables?.has(key)) throw new ArrayFailure(\"readonly environment collision\");\n }\n const publications = new Map<string, Admission>();\n for (const key of keys) {\n await textToken(store.owner, key, this.signal);\n await textToken(store.owner, env[key]!, this.signal);\n publications.set(key, operation.reserve({ generation: true, version: true, epoch: true, work: 8 }));\n }\n const controls = operation.reserve({ epoch: true, work: state.exported.size + keys.length + 5 });\n this.signal.throwIfAborted();\n if (stateMonitor(state)!.epoch !== epoch) throw new ArrayFailure(\"stale state snapshot\");\n stateMonitor(state)!.publish(controls, undefined, () => {\n for (const key of state.exported) delete state.variables[key];\n state.exported = new Set(keys);\n });\n for (const key of keys) {\n const tickets = publications.get(key)!;\n stateMonitor(state)!.publish(tickets, key, () => {\n void store.remove(key, tickets);\n publishVariable(state, key, env[key]!);\n });\n }\n } finally { try { await operation.close(); } finally { holding.release(); } }\n }\n\n async unsetIndexed(state: State, name: string, index?: number | \"members\"): Promise<void> {\n const store = requireArrays(state);\n const operation = ArrayOwner.create(store.owner.ledger, store.owner);\n const holding = store.owner.hold();\n let staged: IndexedBinding | undefined;\n try {\n if (state.readonlyVariables?.has(name)) throw new ArrayFailure(\"readonly binding\");\n const watch = await store.watch(name, operation, this.signal);\n const tickets = operation.reserve({ generation: true, version: true, epoch: true, work: 8 });\n const current = store.get(name);\n if (index !== undefined && current) {\n staged = index === \"members\" ? IndexedBinding.create(store.owner) : await current.copy(this.signal);\n let maximum = -1;\n for (const key of staged.values.keys()) {\n operation.reserve({ work: 2 }).release();\n if (key !== index && key > maximum) maximum = key;\n await operation.ledger.checkpoint(this.signal, 2);\n }\n if (typeof index === \"number\") staged.values.get(index)?.slot.release();\n staged.maximum = maximum;\n }\n this.signal.throwIfAborted();\n if (state.readonlyVariables?.has(name)) throw new ArrayFailure(\"readonly binding\");\n if (!watch.valid()) throw new ArrayFailure(\"stale binding\");\n let released: Promise<void> | undefined;\n stateMonitor(state)!.publish(tickets, name, () => {\n if (staged) released = store.publish(name, staged, tickets);\n else if (index === undefined) {\n released = store.remove(name, tickets);\n delete state.variables[name];\n state.exported.delete(name);\n } else if (index === 0 || index === \"members\") delete state.variables[name];\n });\n staged = undefined;\n watch.close();\n await released;\n } finally { try { await staged?.release(); await operation.close(); } finally { holding.release(); } }\n }\n\n async arrayZero(state: State, name: string, expand: () => Promise<string>, append = false, freeze = false): Promise<void> {\n const store = requireArrays(state);\n const operation = ArrayOwner.create(store.owner.ledger, store.owner);\n const holding = store.owner.hold();\n let staged: IndexedBinding | undefined;\n try {\n const watch = await store.watch(name, operation, this.signal);\n const tickets = operation.reserve({ generation: true, version: true, epoch: true, work: 8 });\n let frozenAttributes: Set<string> | undefined;\n if (freeze) {\n store.owner.reserve({ metadata: state.readonlyVariables ? 32 : 96, slots: 1, work: 5 });\n if (!state.readonlyVariables) frozenAttributes = stateMonitor(state)!.prepareCollection(new Set<string>(), \"readonlyVariables\");\n }\n const expanded = await expand();\n this.signal.throwIfAborted();\n if (state.readonlyVariables?.has(name)) throw new ArrayFailure(\"readonly binding\");\n if (!watch.valid()) throw new ArrayFailure(\"stale binding\");\n const current = store.get(name);\n if (!current) throw new ArrayFailure(\"stale binding\");\n staged = await current.copy(this.signal);\n const value = append ? await this.arrayJoin(operation, [current.get(0) ?? \"\", expanded], \"\") : expanded;\n const token = await textToken(staged.owner, value, this.signal);\n try { staged.insert(0, token); } catch (error) { token.release(); throw error; }\n const supersede = await stateMonitor(state)!.prepareTypedPublication(name, operation, this.signal);\n this.signal.throwIfAborted();\n if (state.readonlyVariables?.has(name)) throw new ArrayFailure(\"readonly binding\");\n if (!watch.valid()) throw new ArrayFailure(\"stale binding\");\n let released: Promise<void> | undefined;\n stateMonitor(state)!.publish(tickets, name, () => {\n supersede();\n released = store.publish(name, staged!, tickets);\n if (freeze) { state.readonlyVariables ??= frozenAttributes!; state.readonlyVariables.add(name); }\n });\n staged = undefined;\n watch.close();\n await released;\n } finally { try { await staged?.release(); await operation.close(); } finally { holding.release(); } }\n }\n\n async arrayJoin(owner: ArrayOwner, values: readonly string[], separator: string): Promise<string> {\n let bytes = 0;\n for (const value of values) {\n owner.reserve({ work: value.length + 1 }).release();\n bytes = exactSum(bytes, Buffer.byteLength(value));\n await owner.ledger.checkpoint(this.signal, value.length + 1);\n }\n bytes = exactSum(bytes, Math.max(0, values.length - 1) * Buffer.byteLength(separator));\n owner.reserve({ metadata: exactSum(96, values.length * 32), payload: bytes, allocatedSlots: values.length, work: values.length * 3 + 7 });\n this.signal.throwIfAborted();\n const result = values.join(separator);\n await owner.ledger.checkpoint(this.signal);\n return result;\n }\n\n async arrayAssignment(assignment: ArrayAssignment, state: State, io: IO): Promise<void> {\n const name = assignment.name;\n this.signal.throwIfAborted();\n if (state.readonlyVariables?.has(name)) throw new ArrayFailure(\"readonly binding\");\n if (controlNames.has(name)) throw new ArrayFailure(\"control binding cannot be indexed\");\n if (state.exported.has(name)) throw new ArrayFailure(\"exported binding cannot be indexed\");\n const store = requireArrays(state);\n const operation = ArrayOwner.create(store.owner.ledger, store.owner);\n const holding = store.owner.hold();\n let staged: IndexedBinding | undefined;\n try {\n const watch = await store.watch(name, operation, this.signal);\n const current = store.get(name);\n const initialMaximum = current?.maximum ?? (state.variables[name] === undefined ? -1 : 0);\n let planned: number | null = assignment.append && assignment.kind === \"compound\" ? initialMaximum + 1 : 0;\n if (assignment.kind === \"element\") {\n operation.reserve({ work: assignment.index.decimal.length + 1 }).release();\n if (numericIndex(assignment.index) === undefined) throw new ArrayFailure(\"index outside 0..2147483647\");\n } else for (const entry of assignment.entries) {\n operation.reserve({ work: entry.value.parts.length + (entry.index?.decimal.length ?? 0) + 2 }).release();\n if (entry.index) {\n const index = numericIndex(entry.index);\n if (index === undefined) throw new ArrayFailure(\"index outside 0..2147483647\");\n planned = index + 1;\n } else {\n const quotedScalar = (part: WordPart): boolean => {\n const selector = getArraySelector(part);\n return part.quoted && !(part.kind === \"variable\" && (part.name === \"@\" || selector?.kind === \"members\" && selector.separator === \"@\"));\n };\n const certain = entry.value.parts.every(part => part.kind === \"text\" ? part.quoted || !/[*?[]/u.test(part.value) : quotedScalar(part));\n const demanded = entry.value.parts.some(part => part.kind === \"text\" ? part.quoted || part.value.length > 0 : quotedScalar(part));\n if (demanded && planned !== null && planned > 2147483647) throw new ArrayFailure(\"index outside 0..2147483647\");\n if (certain && planned !== null) {\n planned++;\n } else planned = null;\n }\n await operation.ledger.checkpoint(this.signal, entry.value.parts.length + 2);\n }\n const supersede = await stateMonitor(state)!.prepareTypedPublication(name, operation, this.signal);\n await this.prepareArrayObservers(state, operation);\n const tickets = operation.reserve({ generation: true, version: true, epoch: true, work: 8 });\n const prepared = await store.prepareName(name, operation, this.signal);\n const preserve = assignment.kind === \"element\" || assignment.append;\n staged = preserve && current ? await current.copy(this.signal) : IndexedBinding.create(store.owner);\n if (preserve && !current && state.variables[name] !== undefined) {\n const token = await textToken(staged.owner, state.variables[name]!, this.signal);\n try { staged.insert(0, token); } catch (error) { token.release(); throw error; }\n }\n let writes = 0;\n let cursor = assignment.append && assignment.kind === \"compound\" ? initialMaximum + 1 : 0;\n const insert = async (index: number, value: string) => {\n if (index > 2147483647) throw new ArrayFailure(\"index outside 0..2147483647\");\n const token = await textToken(staged!.owner, value, this.signal);\n try { staged!.insert(index, token); } catch (error) { token.release(); throw error; }\n writes++;\n };\n if (assignment.kind === \"element\") {\n const index = numericIndex(assignment.index)!;\n const fields = await this.word(assignment.value, state, io, false);\n let value = await this.arrayJoin(operation, fields, \"\");\n if (assignment.append) value = await this.arrayJoin(operation, [staged.get(index) ?? \"\", value], \"\");\n await insert(index, value);\n } else for (const entry of assignment.entries) {\n const original = compoundEntryWords.get(entry);\n if (entry.index && original && state.braceexpand !== false && original.parts.some(part => part.kind === \"text\" && !part.quoted && part.value.includes(\"{\"))) {\n let expandedEntry = false;\n for await (const expanded of expandBraces(original, this.budget, this.signal)) {\n if (expanded === original) break;\n expandedEntry = true;\n const values = await this.valueWord(expanded, state, io, true, false, false, false, undefined, false);\n for (const value of values) { await insert(cursor, shellValueText(value)); cursor++; }\n }\n if (expandedEntry) continue;\n }\n const fields = await this.word(entry.value, state, io, entry.index === undefined);\n if (entry.index) {\n const index = numericIndex(entry.index)!;\n await insert(index, await this.arrayJoin(operation, fields, \"\"));\n cursor = index + 1;\n } else for (const value of fields) { await insert(cursor, value); cursor++; }\n }\n this.signal.throwIfAborted();\n if (state.readonlyVariables?.has(name)) throw new ArrayFailure(\"readonly binding\");\n if (!watch.valid()) throw new ArrayFailure(\"stale binding\");\n if (!(assignment.kind === \"compound\" && assignment.append && writes === 0)) {\n let released: Promise<void> | undefined;\n stateMonitor(state)!.publish(tickets, name, () => {\n supersede();\n delete state.variables[name];\n released = store.publish(name, staged!, tickets, prepared);\n });\n staged = undefined;\n await released;\n }\n watch.close();\n } finally { try { await staged?.release(); await operation.close(); } finally { holding.release(); } }\n }\n\n async run(script: Script, state: State, io: IO): Promise<number> {\n return (await this.runUnit(script, state, io)).exitCode;\n }\n\n async runUnit(script: Script, state: State, io: IO): Promise<{ exitCode: number; terminated: boolean }> {\n state = trackState(state, this.budget, io[invocationScope]);\n try { return { exitCode: await this.script(script, state, io), terminated: false }; }\n catch (error) {\n if (error instanceof NounsetDiagnosticFailure) {\n if (state.isolated) throw error;\n throw error.reason;\n }\n if (error instanceof Flow && error.kind === \"exit\") return { exitCode: error.status, terminated: true };\n throw error;\n }\n }\n\n async script(script: Script, state: State, io: IO): Promise<number> {\n for (const list of script.lists) {\n for (let index = 0; index < list.pipelines.length; index++) {\n const operator = list.operators[index - 1];\n if ((operator === \"&&\" && state.status !== 0) || (operator === \"||\" && state.status === 0)) continue;\n const pipeline = list.pipelines[index]!;\n const ignored = io.execution?.ignoreErrexit || index < list.pipelines.length - 1 || pipeline.negate;\n const completion = stateMonitor(state)?.restoration();\n try {\n const status = await this.pipeline(pipeline, state, ignored ? { ...io, execution: { ignoreErrexit: true } } : io);\n if (completion) completion.apply(() => { state.status = status; });\n else state.status = status;\n } finally { completion?.close(); }\n }\n }\n return script.lists.length ? state.status : 0;\n }\n\n async pipeline(pipeline: Pipeline, state: State, io: IO): Promise<number> {\n this.signal.throwIfAborted();\n let status: number;\n if (pipeline.commands.length === 1) status = await this.command(pipeline.commands[0]!, state, io, false, pipeline.negate);\n else {\n const release = this.budget.reservePipelineStages(pipeline.commands.length);\n const retained = new Set<Promise<unknown>>();\n let setupClosed = false;\n const retain = (work: Promise<unknown>): void => {\n retained.add(work);\n const settled = (): void => {\n retained.delete(work);\n if (setupClosed && !retained.size) release();\n };\n void work.then(settled, settled);\n };\n const pipes: ReturnType<typeof createBytePipe>[] = [];\n const controllers: AbortController[] = [];\n const written = new Set<number>();\n const completed = new Set<number>();\n const closing = new Set<TurnHandle>();\n let statuses: number[];\n try {\n for (let index = 1; index < pipeline.commands.length; index++) pipes.push(createBytePipe({\n highWaterMark: this.budget.limits.pipeHighWaterMark, signal: this.signal,\n }));\n for (let index = 0; index < pipeline.commands.length; index++) controllers.push(new AbortController());\n const tasks = pipeline.commands.map(async (command, index) => {\n const incoming = pipes[index - 1];\n const outgoing = pipes[index];\n const childDepth = this.cancellationDepth + 1;\n const controls: readonly CancellationControlOriginInput[] = [\n { role: \"pipeline-control\", signal: controllers[index]!.signal },\n ];\n const prepared = prepareChildCancellation(\n this.cancellation,\n undefined,\n this.cancellationAdmission(childDepth, controls.length),\n controls,\n );\n const owner = new InvocationCancellationOwner(io[invocationScope], prepared, this.cancellationState);\n let boundary: CancellationBoundary;\n try { boundary = owner.activate(); }\n catch (error) { await owner.abandon(Promise.resolve()); throw error; }\n const signal = AbortSignal.any([boundary.deliverySignal, io[invocationScope].signal]);\n const frame: RuntimeOutcomeFrame = {};\n const runtime = new Runtime(\n this.fs, this.commands, this.middleware, this.budget, signal, this.fileWrites, this.outputFiles,\n boundary.deliverySignal, boundary, this.cancellationState, owner,\n childDepth, this.cancellationMaxDepth, frame,\n );\n const input = new ShellInput(incoming?.readable ?? io.stdin, this.budget, signal);\n const pipeOutput: ByteSink | undefined = outgoing && { [outputFailure]: outgoing.abort, ownedOutput: outgoing.writable.ownedOutput!, write: async (chunk) => {\n try {\n await outgoing.writable.write(chunk);\n if (chunk.byteLength) written.add(index);\n }\n catch (error) {\n if (errorCode(error) === \"EPIPE\") {\n const closed = new PipelineClosed();\n controllers[index]!.abort(closed);\n throw closed;\n }\n throw error;\n }\n } };\n const executeStage = async (): Promise<CommandResult> => {\n try {\n let exitCode: number;\n try {\n const child = await cloneState(state, this.signal);\n child.isolated = true;\n const work = runtime.runCommandIsolated(command, child, {\n ...isolateIO(io),\n stdin: input,\n ...(incoming ? { stdinIsDefault: false } : {}),\n stdout: pipeOutput ? this.budget.sink(pipeOutput, signal) : signalSink(io.stdout, signal),\n stderr: signalSink(io.stderr, signal),\n }).finally(() => stateMonitor(child)?.closeValues());\n retain(work);\n exitCode = await interruptible(work, signal);\n } catch (error) {\n if (!(error instanceof PipelineClosed)) throw error;\n exitCode = 141;\n }\n return { exitCode };\n } finally {\n completed.add(index);\n if (incoming) {\n const upstream = index - 1;\n const close = scheduleTurn(() => {\n closing.delete(close);\n if (written.has(upstream) && !completed.has(upstream)) controllers[upstream]!.abort(new PipelineClosed());\n });\n closing.add(close);\n await incoming.abort();\n }\n await input.close().catch((error: unknown) => { if (!(error instanceof PipelineClosed)) throw error; });\n if (outgoing) await outgoing.close().catch(() => undefined);\n }\n };\n let captured: CapturedCancellationOutcome<CommandResult>;\n try { captured = { kind: \"return\", value: await executeStage() }; }\n catch (reason) {\n captured = frame.report && Object.is(frame.report.origin.signal.reason, reason)\n ? { kind: \"throw\", reason, report: frame.report }\n : { kind: \"throw\", reason };\n }\n const selection = await owner.finish(Promise.resolve(), captured);\n if (selection.outcome.kind === \"throw\") throw selection.outcome.reason;\n return selection.outcome.value.exitCode;\n });\n for (const task of tasks) retain(task);\n statuses = await interruptible(Promise.all(tasks), this.signal);\n } finally {\n try {\n for (const close of closing) cancelTurn(close);\n for (const [index, controller] of controllers.entries()) if (!completed.has(index) || written.has(index)) controller.abort(new PipelineClosed());\n const aborts = pipes.map((pipe) => pipe.abort());\n for (const abort of aborts) retain(abort);\n await Promise.all(aborts);\n } finally {\n setupClosed = true;\n if (!retained.size) release();\n }\n }\n await this.publishStatus(state, statuses, io);\n status = state.pipefail ? statuses.findLast((status) => status !== 0) ?? 0 : statuses.at(-1)!;\n }\n if (pipeline.commands.length > 1) this.errexit(status, state, io);\n return pipeline.negate ? Number(status === 0) : status;\n }\n\n async runCommandIsolated(command: Command, state: State, io: IO, fileShortcut = false): Promise<number> {\n try { return await this.command(command, state, io, fileShortcut); }\n catch (error) {\n if (error instanceof NounsetDiagnosticFailure) throw error;\n if (error instanceof Flow && (error.kind === \"exit\" || error.kind === \"return\")) return error.status;\n throw error;\n }\n }\n\n errexit(status: number, state: State, io: IO): void {\n this.signal.throwIfAborted();\n if (status !== 0 && state.errexit && !io.execution?.ignoreErrexit) throw new Flow(\"exit\", status);\n }\n\n private async publishStatus(state: State, statuses: readonly number[], io: IO): Promise<void> {\n this.signal.throwIfAborted();\n try { throwCleanupFailures(io[invocationScope].failures); }\n catch (error) { throw new NounsetDiagnosticFailure(error); }\n await publishPipelineStatus(trackState(state, this.budget, io[invocationScope]), statuses, this.signal, io[invocationScope]);\n }\n\n async command(command: Command, state: State, io: IO, fileShortcut = false, publicationNegate = false): Promise<number> {\n io[invocationScope].assertOpen();\n const publishes = command.kind === \"simple\" || command.kind === \"subshell\" || command.kind === \"arithmetic\" || command.kind === \"conditional\";\n let status: number;\n try { status = await io[invocationScope].run(() => this.executeCommand(command, state, io, fileShortcut)); }\n catch (error) {\n if (publishes && error instanceof Flow && completedFlows.has(error)) {\n completedFlows.delete(error);\n this.signal.throwIfAborted();\n if (!io[invocationScope].failures.length) await this.publishStatus(state, [error.status], io);\n }\n throw error;\n }\n if (publishes) {\n const reported = publicationNegate && (command.kind === \"conditional\" || command.kind === \"arithmetic\") ? Number(status === 0) : status;\n await this.publishStatus(state, [reported], io);\n this.errexit(status, state, io);\n }\n return status;\n }\n\n async executeCommand(command: Command, state: State, originalIO: IO, fileShortcut = false): Promise<number> {\n state = trackState(state, this.budget, originalIO[invocationScope]);\n originalIO = activeIO(originalIO);\n originalIO.descriptors ??= new Map<number, Descriptor>([\n [0, { input: originalIO.stdin, ...(originalIO.stdinIsDefault === undefined ? {} : { stdinIsDefault: originalIO.stdinIsDefault }) }],\n [1, { output: originalIO.stdout }], [2, { output: originalIO.stderr }],\n ]);\n const diagnosticLine = (command.line ?? 1) + (originalIO.diagnosticOffset ?? 0);\n originalIO = { ...originalIO, diagnosticLine, substitutionDiagnosticLine: originalIO.substitutionDiagnosticLines?.get(command) ?? diagnosticLine };\n if (command.kind === \"subshell\") originalIO = isolateIO(originalIO);\n this.budget.tick();\n if (this.budget.commands % 128 === 0) await yieldTurn(this.signal);\n this.signal.throwIfAborted();\n const inputs = new Set<ShellInput>();\n const outputs = new Set<(completion: OutputCompletion) => void | Promise<void>>();\n const finishOutputs = async (status: number): Promise<void> => {\n const pending = [...outputs];\n outputs.clear();\n const settled = await Promise.allSettled(pending.map(close => close({ status })));\n throwCleanupFailures(settled.filter(result => result.status === \"rejected\").map(result => result.reason));\n };\n const allocation = this.budget.values.scope();\n originalIO = { ...originalIO, [valueScope]: allocation };\n let io = originalIO;\n let diagnosticFailure: NounsetDiagnosticFailure | undefined;\n let snapshotScope: InvocationScope | undefined;\n let finishSnapshot: (() => void) | undefined;\n try {\n const execute = async (): Promise<number> => {\n if (command.kind === \"function\") {\n if (state.profile === \"sh\" && specialBuiltinNames.has(command.name)) {\n await this.diagnostic(io, `\\`${command.name}': is a special builtin`);\n throw new Flow(\"exit\", 2);\n }\n state.functions.set(command.name, { ...command.body, sourceName: io.scriptName ?? \"shell\" });\n return 0;\n }\n if (command.kind === \"simple\") return await this.simple(command, state, originalIO, inputs, outputs, () => {\n snapshotScope = originalIO[invocationScope].child();\n void snapshotScope.run(() => new Promise<void>(resolve => { finishSnapshot = resolve; }));\n return snapshotScope;\n }, fileShortcut);\n io = await this.redirect(command.redirects, state, io, inputs, outputs, command.kind === \"subshell\", command.kind !== \"subshell\");\n if (command.kind === \"conditional\") {\n try {\n return await evaluateConditional(command.expression, {\n fs: this.fs, cwd: state.cwd, signal: this.signal,\n locale: state.variables.LC_ALL || state.variables.LC_COLLATE || state.variables.LANG || \"C\",\n work: { remaining: this.budget.limits.maxExpansionBytes, signal: this.signal, exhausted: (): never => this.budget.fail(\"maxExpansionBytes\"), allocation },\n expand: async (word, pattern = false) => (await this.word(word, state, io, false, pattern, false, pattern)).join(\"\"),\n regex: (subject, pattern) => this.ere(subject, pattern, state, io),\n option: name => name === \"braceexpand\" ? state.braceexpand !== false : name === \"errexit\" ? !!state.errexit : name === \"nounset\" ? !!state.nounset : name === \"pipefail\" ? state.pipefail : false,\n present: name => {\n const match = /^([a-zA-Z_][a-zA-Z_0-9]*)(?:\\[(0|[1-9][0-9]*|[@*])\\])?$/u.exec(name);\n if (!match) throw new ConditionalUnsupported(\"[[ variable selector: unsupported conditional profile\");\n const binding = arrayStore(state)?.get(match[1]!);\n const selector = match[2];\n if (selector === \"@\" || selector === \"*\") return binding ? binding.values.size > 0 : this.variable(state, match[1]!) !== undefined;\n const index = selector === undefined ? 0 : numericIndex({ decimal: selector });\n if (index === undefined) throw new ConditionalUnsupported(\"[[ variable index: unsupported conditional profile\");\n return binding ? binding.get(index) !== undefined : index === 0 && this.variable(state, match[1]!) !== undefined;\n },\n });\n } catch (error) {\n this.signal.throwIfAborted();\n if (error instanceof NounsetDiagnosticFailure) { diagnosticFailure = error; throw error; }\n if (error instanceof EreProfileLimitError) {\n try { await this.diagnostic(io, `[[ ${error.message}`); }\n catch (reason) { this.signal.throwIfAborted(); if (reason instanceof ShellLimitError) throw reason; diagnosticFailure = new NounsetDiagnosticFailure(reason); throw diagnosticFailure; }\n return 3;\n }\n if (error instanceof ConditionalUnsupported) {\n try { await this.diagnostic(io, error.message); }\n catch (reason) { this.signal.throwIfAborted(); if (reason instanceof ShellLimitError) throw reason; diagnosticFailure = new NounsetDiagnosticFailure(reason); throw diagnosticFailure; }\n return 2;\n }\n if (error instanceof ExpansionFailure || error instanceof Flow || error instanceof ShellLimitError || error instanceof ShellSyntaxError || error instanceof ArrayFailure) throw error;\n diagnosticFailure = new NounsetDiagnosticFailure(error);\n throw diagnosticFailure;\n }\n }\n if (command.kind === \"arithmetic\") {\n try {\n return Number(evaluatePositionalArithmetic(command.expression, {\n parseBudget: this.budget.parsing,\n positional: state.positional, arg0: state.arg0 ?? \"virtual-bash\", owner: arrayStore(state)?.owner,\n maximumBytes: this.budget.limits.maxExpansionBytes,\n checkpoint: () => this.signal.throwIfAborted(),\n requireParameter: (name, value) => this.requireParameter(value, name, state, io),\n limit: () => this.budget.fail(\"maxExpansionBytes\"),\n }, (prepared) => evaluateArithmetic(prepared, this.arithmeticVariables(state, io.diagnosticLine), this.budget.parsing)) === 0n);\n }\n catch (error) { this.rethrowArithmeticControl(error); throw new PublicDiagnostic(`((: ${message(error, this.budget.onInternalError)}`); }\n }\n if (command.kind === \"subshell\") {\n const child = await cloneState(state, this.signal);\n child.isolated = true;\n child.loopDepth = 0;\n try { return await this.run(command.body, child, io); }\n finally { stateMonitor(child)?.closeValues(); }\n }\n if (command.kind === \"group\") return await this.script(command.body, state, io);\n if (command.kind === \"if\") {\n for (const branch of command.branches) {\n if (await this.script(branch.condition, state, { ...io, execution: { ignoreErrexit: true } }) === 0) return await this.script(branch.body, state, io);\n }\n return command.otherwise ? await this.script(command.otherwise, state, io) : 0;\n }\n if (command.kind === \"case\") {\n const subject = (await this.word(command.subject, state, io, false)).join(\"\");\n const work = { remaining: this.budget.limits.maxExpansionBytes, signal: this.signal, exhausted: (): never => this.budget.fail(\"maxExpansionBytes\"), allocation };\n let status = 0;\n let fallthrough = false;\n let patterns = 0;\n for (const clause of command.clauses) {\n let matched = fallthrough;\n if (!matched) for (const word of clause.patterns) {\n if (++patterns % 128 === 0) await yieldTurn(this.signal);\n const pattern = (await this.word(word, state, io, false, true)).join(\"\");\n if (await matchesPattern(pattern, subject, work)) { matched = true; break; }\n }\n if (!matched) continue;\n if (clause.body.lists.length) status = await this.script(clause.body, state, io);\n if (clause.terminator === \";;\" || clause.terminator === \"esac\") break;\n fallthrough = clause.terminator === \";&\";\n }\n return status;\n }\n let status = 0;\n const loopRestoration = stateMonitor(state)?.restoration();\n state.loopDepth++;\n try {\n if (command.kind === \"for\") {\n const values = command.words ? await this.valueWords(command.words, state, io) : this.positionalValues(state);\n for (const value of values) {\n this.budget.loop();\n await this.assignVariable(state, command.name, value);\n const result = await this.loopBody(command.body, state, io);\n status = result.status;\n if (result.stop) break;\n }\n } else {\n while (true) {\n this.budget.loop();\n const condition = await this.script(command.condition, state, { ...io, execution: { ignoreErrexit: true } });\n if ((condition === 0) !== (command.kind === \"while\")) break;\n const result = await this.loopBody(command.body, state, io);\n status = result.status;\n if (result.stop) break;\n }\n }\n } finally {\n if (loopRestoration) loopRestoration.apply(() => { state.loopDepth--; });\n else state.loopDepth--;\n }\n return status;\n };\n const status = await execute();\n await finishOutputs(status);\n return status;\n } catch (caught) {\n const diagnostic = caught instanceof ExecutionFailure ? caught.diagnostic : undefined;\n const error = caught instanceof ExecutionFailure ? caught.original : caught;\n if (caught instanceof ExecutionFailure) io = caught.io;\n if (error instanceof NounsetDiagnosticFailure) diagnosticFailure = error;\n this.signal.throwIfAborted();\n if (error instanceof Flow) await finishOutputs(error.status);\n if (error instanceof Flow || error instanceof ShellLimitError || error instanceof ShellSyntaxError) throw error;\n this.clearOutcomeReport();\n if (error instanceof HereDocumentSyntaxError) {\n await writeDiagnostic(io.stderr, error.diagnostic);\n if (command.kind !== \"simple\" && command.kind !== \"subshell\" && command.kind !== \"arithmetic\" && command.kind !== \"conditional\") this.errexit(1, state, io);\n return 1;\n }\n if (errorCode(error) === \"EPIPE\") {\n if (command.kind !== \"simple\" && command.kind !== \"subshell\" && command.kind !== \"arithmetic\" && command.kind !== \"conditional\") this.errexit(141, state, io);\n return 141;\n }\n const publicMessage = message(error, this.budget.onInternalError);\n const line = error instanceof ExpansionFailure ? error.line ?? io.diagnosticLine ?? 1 : io.diagnosticLine ?? 1;\n if (error instanceof NounsetFailure || error instanceof ParameterExpansionFailure) {\n const detail = error instanceof ParameterExpansionFailure ? diagnostic ?? publicMessage : publicMessage;\n try { await writeDiagnostic(io.stderr, `${io.scriptName ?? \"shell\"}: line ${line}: ${detail}\\n`); }\n catch (reason) {\n this.signal.throwIfAborted();\n if (reason instanceof ShellLimitError) throw reason;\n diagnosticFailure = new NounsetDiagnosticFailure(reason);\n throw diagnosticFailure;\n }\n throw completedExit(error instanceof ParameterExpansionFailure && !state.isolated ? 127 : 1);\n }\n if (error instanceof ArrayFailure) await writeDiagnostic(io.stderr, `${io.scriptName ?? \"shell\"}: line ${line}: ${diagnostic ?? publicMessage}\\n`);\n else {\n try { await writeDiagnostic(io.stderr, `${io.scriptName ?? \"shell\"}: line ${line}: ${diagnostic ?? publicMessage}\\n`); }\n catch (failure) { this.signal.throwIfAborted(); publicDiagnosticMessage(failure, this.budget.onInternalError); }\n }\n if (error instanceof ExpansionFailure || error instanceof BraceExpansionFailure) throw completedExit(error instanceof ParameterExpansionFailure && !state.isolated ? 127 : 1);\n if (error instanceof FatalCommandFailure) throw completedExit(error.status);\n const status = error instanceof CommandFailure ? error.status : 1;\n if (command.kind !== \"simple\" && command.kind !== \"subshell\" && command.kind !== \"arithmetic\" && command.kind !== \"conditional\") this.errexit(status, state, io);\n return status;\n } finally {\n try {\n await Promise.allSettled([\n ...[...outputs].map(async close => close({ reason: new FsError(\"ECANCELED\", { syscall: \"redirect\" }) })),\n ...[...inputs].map(async input => input.close()),\n ]).then(results => {\n const failures = results.filter(result => result.status === \"rejected\").map(result => result.reason);\n if (diagnosticFailure) io[invocationScope].failures.push(...failures);\n else throwCleanupFailures(failures);\n }).finally(() => allocation.close());\n } finally {\n finishSnapshot?.();\n await snapshotScope?.close();\n }\n }\n }\n\n async loopBody(body: Script, state: State, io: IO): Promise<{ status: number; stop: boolean }> {\n try { return { status: await this.script(body, state, io), stop: false }; }\n catch (error) {\n if (!(error instanceof Flow) || (error.kind !== \"break\" && error.kind !== \"continue\")) throw error;\n if (--error.levels > 0) throw error;\n return { status: 0, stop: error.kind === \"break\" };\n }\n }\n\n async document(document: HereDocument, state: State, io: IO, line = document.endLine): Promise<string> {\n this.signal.throwIfAborted();\n let value = \"\";\n let size = 0;\n let words = 0;\n const warnings: string[] = [];\n try {\n for (const word of hereDocumentWords(document, line, byteLocale(state.variables), warnings, this.budget.parsing)) {\n this.signal.throwIfAborted();\n for (const warning of warnings.splice(0)) await writeDiagnostic(io.stderr, `shell: warning: ${warning}\\n`);\n if (++words % 128 === 0) await yieldTurn(this.signal);\n const part = (await this.word(word, state, io, false)).join(\"\");\n size += Buffer.byteLength(part);\n if (size > this.budget.limits.maxExpansionBytes) this.budget.fail(\"maxExpansionBytes\");\n value += part;\n }\n } finally {\n for (const warning of warnings.splice(0)) await writeDiagnostic(io.stderr, `shell: warning: ${warning}\\n`);\n }\n return value;\n }\n\n async redirect(redirects: readonly Redirect[], state: State, io: IO, inputs: Set<ShellInput>, outputs: Set<(completion: OutputCompletion) => void | Promise<void>>, isolatedInlineInput = false, persistMoves = false, fileShortcut = false, line?: number): Promise<IO> {\n this.signal.throwIfAborted();\n if (redirects.length > this.budget.limits.maxRedirects) this.budget.fail(\"maxRedirects\");\n io.descriptors ??= new Map<number, Descriptor>([\n [0, { input: io.stdin, ...(io.stdinIsDefault === undefined ? {} : { stdinIsDefault: io.stdinIsDefault }) }],\n [1, { output: io.stdout }], [2, { output: io.stderr }],\n ]);\n const inputDescriptor = io.descriptors.get(0);\n const outputDescriptor = io.descriptors.get(1);\n const errorDescriptor = io.descriptors.get(2);\n const descriptors = new Map<number, Descriptor>([\n ...io.descriptors ?? [],\n [0, inputDescriptor?.input === io.stdin ? inputDescriptor : { input: io.stdin, ...(io.stdinIsDefault === undefined ? {} : { stdinIsDefault: io.stdinIsDefault }) }],\n [1, outputDescriptor?.output === io.stdout ? outputDescriptor : { output: io.stdout }],\n [2, errorDescriptor?.output === io.stderr ? errorDescriptor : { output: io.stderr }],\n ]);\n const replaced = new Set<number>();\n let errorTarget: string | undefined;\n if (io.stdin === closedSource) descriptors.delete(0);\n if (io.stdout === closedSink) descriptors.delete(1);\n if (io.stderr === closedSink) descriptors.delete(2);\n const currentIO = (): IO => {\n const descriptor = descriptors.get(0)?.closed ? undefined : descriptors.get(0);\n const stdinIsDefault = descriptor?.input ? descriptor.stdinIsDefault : false;\n return {\n [invocationScope]: io[invocationScope],\n ...(io.execution === undefined ? {} : { execution: io.execution }),\n ...(io.diagnosticLine === undefined ? {} : { diagnosticLine: io.diagnosticLine }),\n ...(io.diagnosticOffset === undefined ? {} : { diagnosticOffset: io.diagnosticOffset }),\n ...(io.scriptName === undefined ? {} : { scriptName: io.scriptName }),\n ...(io.substitutionDiagnosticLine === undefined ? {} : { substitutionDiagnosticLine: io.substitutionDiagnosticLine }),\n ...(io.substitutionDiagnosticLines === undefined ? {} : { substitutionDiagnosticLines: io.substitutionDiagnosticLines }),\n stdin: descriptor?.input ?? closedSource,\n ...(stdinIsDefault === undefined ? {} : { stdinIsDefault }),\n stdout: descriptors.get(1)?.closed ? closedSink : descriptors.get(1)?.output ?? closedSink,\n stderr: descriptors.get(2)?.closed ? closedSink : descriptors.get(2)?.output ?? closedSink,\n descriptors,\n };\n };\n try { for (const redirect of redirects) {\n replaced.add(redirect.descriptor);\n if (redirect.document || redirect.operator === \"<<<\") {\n const hereString = redirect.operator === \"<<<\";\n let value: string;\n try { value = redirect.document ? await this.document(redirect.document, state, currentIO(), line) : (await this.word(redirect.target, state, currentIO(), false, false, hereString)).join(\"\"); }\n catch (error) {\n if (error instanceof NounsetFailure) throw error;\n if (error instanceof ParameterExpansionFailure && !isolatedInlineInput) throw error;\n if (error instanceof ParameterExpansionFailure) throw new CommandFailure(error.message, state.isolated ? 1 : 127);\n if (error instanceof ExpansionFailure) throw new PublicDiagnostic(error.message);\n throw error;\n }\n if (hereString) {\n if (Buffer.byteLength(value) >= this.budget.limits.maxExpansionBytes) this.budget.fail(\"maxExpansionBytes\");\n value += \"\\n\";\n }\n const input = new ShellInput(toByteSource(value), this.budget, this.signal);\n inputs.add(input);\n descriptors.set(redirect.descriptor, { input, stdinIsDefault: false });\n continue;\n }\n const targets = await this.word(redirect.target, state, currentIO());\n if (targets.length !== 1) throw new PublicDiagnostic(\"Ambiguous redirect\");\n const target = targets[0]!;\n errorTarget = target;\n if (redirect.operator.endsWith(\"&\")) {\n if (target === \"-\") descriptors.delete(redirect.descriptor);\n else {\n if (!/^\\d+-?$/u.test(target)) throw new PublicDiagnostic(`${target}: Bad file descriptor`);\n const move = target.endsWith(\"-\");\n if (move && !redirect.move) throw new PublicDiagnostic(`${target}: ambiguous redirect`);\n const sourceDescriptor = Number(move ? target.slice(0, -1) : target);\n const descriptor = descriptors.get(sourceDescriptor);\n if (!descriptor || descriptor.closed || (!move && (redirect.operator === \"<&\" ? !descriptor.input : !descriptor.output))) throw new PublicDiagnostic(`${move ? sourceDescriptor : target}: Bad file descriptor`);\n descriptors.set(redirect.descriptor, { ...descriptor });\n if (move && sourceDescriptor !== redirect.descriptor) {\n descriptors.delete(sourceDescriptor);\n if (persistMoves && !replaced.has(sourceDescriptor)) descriptor.closed = true;\n }\n }\n } else {\n const path = resolvePath(state.cwd, target);\n const options = { signal: this.signal };\n if (redirect.operator === \"<\") {\n await interruptible(this.fs.access(path, 4, options), this.signal);\n const stat = await interruptible(this.fs.stat(path, options), this.signal);\n if (stat.type === \"directory\" && !fileShortcut) throw new PublicDiagnostic(`${target}: Is a directory`);\n const source = stat.type === \"directory\" ? toByteSource(\"\")\n : await fileInput(this.fs, path, this.budget.limits.maxInputBytes, this.signal);\n const input = new ShellInput(source, this.budget, this.signal);\n inputs.add(input);\n descriptors.set(redirect.descriptor, { input, stdinIsDefault: false });\n } else {\n const append = redirect.operator === \">>\";\n const capabilities = await this.fs.capabilitiesFor?.(path, options) ?? this.fs.capabilities;\n const random = capabilities.randomAccessWrite === true;\n let file!: OutputFile;\n await this.fileOperation(path, async () => {\n file = this.outputFiles.get(path) ?? { data: undefined, references: 0 };\n if (!random && file.references) throw new FsError(\"ENOTSUP\", { path, message: \"Conflicting sequential output descriptors\" });\n file.references++;\n this.outputFiles.set(path, file);\n });\n let closed = false;\n let offset = 0;\n const incremental = async (): Promise<ByteSink> => {\n await this.fileOperation(path, async () => {\n if (append) await this.fs.appendFile(path, new Uint8Array(), options);\n else await this.fs.writeFile(path, new Uint8Array(), { ...options, flag: \"w\" });\n if (!append) file.data = new Uint8Array();\n });\n return { write: (chunk) => {\n const copy = new Uint8Array(chunk);\n return this.fileOperation(path, async () => {\n if (closed) throw new Error(\"Output descriptor is closed\");\n const current = file.data;\n let atEOF = false;\n if (!append && current && offset === current.length && capabilities.append === true && capabilities.stat !== false) {\n try {\n atEOF = (await interruptible(this.fs.stat(path, options), this.signal)).size === offset;\n } catch {\n // Metadata is optional for this optimization; writes need no read access.\n this.signal.throwIfAborted();\n }\n this.signal.throwIfAborted();\n }\n if (append || atEOF) {\n // Preparing a larger view only touches the unpublished tail of current.\n const bytes = current ? appendOutputBytes(current, copy) : undefined;\n await this.fs.appendFile(path, copy, options);\n file.data = bytes;\n } else {\n const bytes = new Uint8Array(Math.max(current?.length ?? 0, offset + copy.length));\n if (current) bytes.set(current);\n bytes.set(copy, offset);\n await this.fs.writeFile(path, bytes, options);\n file.data = bytes;\n }\n if (!append) offset += copy.length;\n });\n } };\n };\n const resumePathCache = this.budget.pathLookup.suspend();\n const release = (): void => {\n if (closed) return;\n closed = true;\n resumePathCache();\n if (--file.references === 0 && this.outputFiles.get(path) === file) this.outputFiles.delete(path);\n };\n let target;\n let outputScope: InvocationScope | undefined;\n try {\n outputScope = io[invocationScope].child();\n target = await openFileOutput({ fs: this.fs, signal: this.signal, registerCleanup: cleanup => { outputScope!.register(cleanup); } }, path, append ? \"a\" : \"w\", random ? incremental : undefined);\n } catch (error) {\n try { await outputScope?.close(); }\n finally { release(); }\n throw error;\n }\n outputs.add(async completion => {\n try {\n if (this.signal.aborted) await target.abort(this.signal.reason);\n else if (\"reason\" in completion) await target.abort(completion.reason);\n else {\n try { await target.finish(); }\n catch (error) {\n this.signal.throwIfAborted();\n if (completion.status === 0) throw error;\n }\n }\n } finally {\n try { await outputScope?.close(); }\n finally { release(); }\n }\n });\n const output = this.budget.sink(target.sink, this.signal);\n descriptors.set(redirect.descriptor, { output });\n if (redirect.operator === \"&>\") {\n replaced.add(2);\n descriptors.set(2, { output });\n }\n }\n }\n } } catch (error) {\n const diagnostic = errorTarget === undefined ? undefined : filesystemDiagnostic(error, errorTarget);\n throw new ExecutionFailure(error, currentIO(), diagnostic);\n }\n return currentIO();\n }\n\n async fileOperation(path: string, operation: () => Promise<void>): Promise<void> {\n const previous = this.fileWrites.get(path) ?? Promise.resolve();\n const pending = previous.catch(() => undefined).then(() => { this.signal.throwIfAborted(); return operation(); });\n this.fileWrites.set(path, pending);\n try { await interruptible(pending, this.signal); }\n finally { if (this.fileWrites.get(path) === pending) this.fileWrites.delete(path); }\n }\n\n assignment(word: Word): { name: string; value: Word; append: boolean } | undefined {\n const first = word.parts[0];\n if (first?.kind !== \"text\" || first.quoted) return undefined;\n const match = /^([a-zA-Z_][a-zA-Z_0-9]*)(\\+?)=/u.exec(first.value);\n if (!match) return undefined;\n return { name: match[1]!, append: match[2] === \"+\", value: { offset: word.offset, parts: [{ ...first, value: first.value.slice(match[0].length) }, ...word.parts.slice(1)] } };\n }\n\n async simple(command: Extract<Command, { kind: \"simple\" }>, state: State, originalIO: IO, inputs: Set<ShellInput>, outputs: Set<(completion: OutputCompletion) => void | Promise<void>>, createSnapshotScope: () => InvocationScope, fileShortcut = false): Promise<number> {\n state.substitutionStatus = 0;\n const assignments: ({ name: string; value: Word; append: boolean; kind?: undefined } | ArrayAssignment)[] = [];\n let wordIndex = 0;\n for (; wordIndex < command.words.length; wordIndex++) {\n const assignment = getArrayAssignment(command.words[wordIndex]!) ?? this.assignment(command.words[wordIndex]!);\n if (!assignment) break;\n assignments.push(assignment);\n }\n const commandWords = command.words.slice(wordIndex);\n let declarationIndex = 0;\n while (commandWords[declarationIndex]?.plain === \"command\") {\n declarationIndex++;\n if (commandWords[declarationIndex]?.plain === \"--\") declarationIndex++;\n }\n const wordValues = await this.valueWords(commandWords, state, originalIO, [\"export\", \"local\", \"readonly\"].includes(commandWords[declarationIndex]?.plain ?? \"\"));\n const words = wordValues.map(shellValueText);\n const special = state.profile === \"sh\" && specialBuiltinNames.has(words[0] ?? \"\");\n const inlineInput = command.redirects.some((redirect) => redirect.document || redirect.operator === \"<<<\");\n const functionCommand = words.length > 0 && state.functions.has(words[0]!);\n const isolatedInlineInput = inlineInput && words.length > 0 && !shellBuiltinNames.has(words[0]!) && !functionCommand;\n const snapshotScope = isolatedInlineInput ? createSnapshotScope() : undefined;\n let io = snapshotScope ? { ...originalIO, [invocationScope]: snapshotScope } : originalIO;\n const previous = new Map<string, SavedVariable>();\n const assign = async () => {\n for (const assignment of assignments) {\n if (assignment.kind) { await this.arrayAssignment(assignment, state, io); continue; }\n if (arrayStore(state)?.get(assignment.name)) {\n if (words.length) {\n await this.word(assignment.value, state, io, false);\n throw new ArrayFailure(\"indexed binding cannot be a command prefix\");\n }\n await this.arrayZero(state, assignment.name, async () => {\n const fields = await this.word(assignment.value, state, io, false);\n return this.arrayJoin(requireArrays(state).owner, fields, \"\");\n }, assignment.append);\n continue;\n }\n let value = concatShellValues(await this.valueWord(assignment.value, state, io, false), io[valueScope]);\n if (assignment.append) value = concatShellValues([stateMonitor(state)?.values.get(assignment.name, state.variables[assignment.name] ?? \"\") ?? state.variables[assignment.name] ?? \"\", value], io[valueScope]);\n if (state.readonlyVariables?.has(assignment.name)) {\n await this.diagnostic(io, `${assignment.name}: readonly variable`);\n if (state.profile === \"sh\" || !words.length) throw new Flow(\"exit\", state.profile === \"sh\" && (special || !words.length) ? 127 : 1);\n continue;\n }\n if (!previous.has(assignment.name)) {\n const saved = saveVariable(state, assignment.name);\n if (words.length && guestArrays(state)) await this.prepareVariable(state, assignment.name, saved, true);\n previous.set(assignment.name, saved);\n }\n this.writeVariable(state, assignment.name, value);\n if (words.length) state.exported.add(assignment.name);\n }\n };\n let overlayOpen = false;\n try {\n if (snapshotScope) state = await cloneState(state, this.signal, snapshotScope);\n if (words.length) {\n stateMonitor(state)?.openOverlay(previous);\n overlayOpen = true;\n }\n if (inlineInput || (state.profile === \"sh\" || !words.length) && assignments.some(assignment => state.readonlyVariables?.has(assignment.name))) await assign();\n if (inlineInput && functionCommand && previous.size) {\n const redirectState = await cloneState(state, this.signal);\n const variables = redirectState.variables;\n const redirectAssignments = new Map<string, ShellValue>();\n for (const [name, saved] of previous) {\n redirectAssignments.set(name, stateMonitor(state)!.values.get(name, state.variables[name]!));\n if (saved.value === undefined) delete variables[name];\n else publishVariable(redirectState, name, saved.heldValue?.value ?? saved.value);\n }\n redirectState.redirectAssignments = redirectAssignments;\n const savedIndex = previous.get(\"OPTIND\");\n if (savedIndex?.getopts) redirectState.getopts = { integer: savedIndex.getopts.integer, cursor: cloneGetoptsState(savedIndex.getopts.cursor) };\n const parentStore = arrayStore(state);\n const copyOwner = parentStore ? ArrayOwner.create(parentStore.owner.ledger, parentStore.owner) : undefined;\n const holding = parentStore?.owner.hold();\n copyOwner?.reserve({ metadata: 64, work: 3 });\n const publications = new Map<string, { binding: IndexedBinding; tickets: Admission }>();\n if (parentStore && copyOwner) for (const [name, entry] of parentStore.bindings) {\n copyOwner.reserve({ slots: 1, metadata: 32, work: 5 });\n publications.set(name, { binding: entry.binding, tickets: copyOwner.reserve({ generation: true, version: true, epoch: true, work: 8 }) });\n }\n const epoch = stateMonitor(state)?.epoch;\n try {\n io = await this.redirect(command.redirects, redirectState, io, inputs, outputs, false, true, false, command.line ?? 1);\n if (parentStore && stateMonitor(state)!.epoch !== epoch) throw new ArrayFailure(\"stale state snapshot\");\n } finally {\n try {\n const stale = parentStore && stateMonitor(state)!.epoch !== epoch;\n if (!stale) {\n if (parentStore) for (const [name, publication] of publications) {\n const changed = arrayStore(redirectState)!.get(name);\n if (!previous.has(name) && changed && changed !== publication.binding) {\n let released: Promise<void> | undefined;\n stateMonitor(state)!.publish(publication.tickets, name, () => { released = parentStore.publish(name, changed.retain(), publication.tickets); });\n await released;\n }\n }\n state.substitutionStatus = redirectState.substitutionStatus;\n for (const [name, value] of Object.entries(variables)) {\n if (!previous.has(name)) publishVariable(state, name, stateMonitor(redirectState)!.values.get(name, value));\n }\n for (const [name, saved] of previous) {\n saved.value = variables[name];\n const value = stateMonitor(redirectState)!.values.get(name, saved.value ?? \"\");\n const held = saved.value === undefined ? undefined : stateMonitor(state)!.values.scope.hold(value);\n saved.heldValue?.release();\n if (held) saved.heldValue = held;\n else delete saved.heldValue;\n if (name === \"OPTIND\") saved.getopts = cloneGetoptsBinding(redirectState);\n }\n if (!previous.has(\"OPTIND\")) state.getopts = cloneGetoptsBinding(redirectState);\n }\n } finally { try { await copyOwner?.close(); } finally { holding?.release(); stateMonitor(redirectState)?.closeValues(); } }\n }\n } else io = await this.redirect(command.redirects, state, io, inputs, outputs, isolatedInlineInput, !words.length || shellBuiltinNames.has(words[0]!) || functionCommand, fileShortcut, command.line ?? 1);\n if (!inlineInput) await assign();\n if (fileShortcut) {\n const input = io.descriptors?.get(command.redirects[0]!.descriptor)?.input;\n if (!input) throw new PublicDiagnostic(\"Bad file descriptor\");\n await pipeBytes(input, io.stdout, this.signal);\n return 0;\n }\n return words.length ? await this.dispatch(words[0]!, words.slice(1), state, io, previous, false, wordValues.slice(1)) : state.substitutionStatus;\n } catch (error) {\n if (error instanceof Flow) throw error;\n this.signal.throwIfAborted();\n const original = error instanceof ExecutionFailure ? error.original : error;\n if (special && !(original instanceof ShellLimitError) && !(original instanceof ExpansionFailure) && !(original instanceof Flow) && !(original instanceof ShellSyntaxError)) {\n throw new ExecutionFailure(new FatalCommandFailure(message(original, this.budget.onInternalError), 1), error instanceof ExecutionFailure ? error.io : io, error instanceof ExecutionFailure ? error.diagnostic : undefined);\n }\n if (error instanceof ExecutionFailure) throw error;\n throw new ExecutionFailure(error, io);\n } finally {\n if (overlayOpen) {\n for (const [key, saved] of previous) await originalIO[invocationScope].cleanup(async () => {\n if (saved.superseded) await this.discardVariable(saved);\n else await restoreVariable(state, key, saved);\n });\n await originalIO[invocationScope].cleanup(() => stateMonitor(state)?.closeOverlay(previous));\n } else for (const saved of previous.values()) saved.heldValue?.release();\n }\n }\n\n async dispatch(name: string, args: readonly string[], state: State, io: IO, assignments: Map<string, SavedVariable>, bypassFunctions = false, values: readonly ShellValue[] = args): Promise<number> {\n const scope = io[invocationScope].child();\n const runtime = new Runtime(\n this.fs, this.commands, this.middleware, this.budget,\n AbortSignal.any([this.signal, scope.signal]), this.fileWrites, this.outputFiles, this.commandSignal,\n this.cancellation, this.cancellationState, this.cancellationOwner,\n this.cancellationDepth, this.cancellationMaxDepth, this.outcomeFrame,\n );\n try { return await runtime.dispatchScoped(name, values, state, { ...io, [invocationScope]: scope }, assignments, bypassFunctions); }\n finally { await scope.close(); }\n }\n\n private async dispatchScoped(name: string, values: readonly ShellValue[], state: State, io: IO, assignments: Map<string, SavedVariable>, bypassFunctions: boolean): Promise<number> {\n const { [invocationScope]: scope, ...publicIO } = io;\n const allocation = this.budget.values.scope();\n scope.register(() => allocation.close());\n const argumentValues = this.admitArguments(values, allocation);\n let builtinFailure: { error: unknown; diagnostic: string } | undefined;\n const env = Object.create(null) as Record<string, string>;\n for (const key of state.exported) {\n const value = state.variables[key];\n if (value !== undefined) env[key] = value;\n }\n const initialEnv = { ...env };\n const runtimeFrame: RuntimeOutcomeFrame = {};\n const context: ShellCommandContext = {\n ...publicIO, command: name, args: argumentValues.args, argumentValues, env, cwd: state.cwd, fs: this.fs, signal: this.commandSignal,\n executionScope: this.budget.executionScope,\n onInternalError: this.budget.onInternalError,\n registerCleanup: (cleanup) => { scope.register(cleanup); },\n invoke: (name, args, options) => {\n const invocation = this.invoke(name, args, options, context, state, scope);\n void invocation.catch(() => undefined);\n return invocation;\n },\n };\n bindFileOutputBudget(context, sink => this.budget.sink(sink, this.signal));\n if (argumentValues.values.every(value => typeof value === \"string\")) Reflect.deleteProperty(context, \"argumentValues\");\n const middleware = this.middleware.map<Middleware>((handler) => (context, next) => {\n scope.assertOpen();\n this.budget.pathLookup.suspendUntilClosed(scope);\n let downstream: Promise<CommandResult> | undefined;\n const raw = handler(context, () => {\n downstream = next();\n return downstream;\n });\n return this.observeRuntimeReturn(raw, runtimeFrame, () => downstream);\n });\n const execute = composeMiddleware(middleware, (forwarded) => scope.run(async () => {\n scope.assertOpen();\n const forwardedValues = getCommandArguments(forwarded);\n const admitted = forwardedValues === argumentValues ? argumentValues : this.admitArguments(forwardedValues.values, allocation);\n const context = { ...forwarded, args: admitted.args, argumentValues: admitted, [invocationScope]: scope };\n const previous = new Map<string, SavedVariable & { overlay: string | undefined }>();\n const cwd = state.cwd;\n const directoryStackCwdPublication = state.directoryStackCwdPublication;\n const environmentKeys = new Set([...Object.keys(initialEnv), ...Object.keys(context.env)]);\n const typedEnvironment = [...environmentKeys].some(key => arrayStore(state)?.get(key) && initialEnv[key] !== context.env[key]);\n const cwdRestoration = stateMonitor(state)?.restoration(true);\n if (typedEnvironment) {\n const store = requireArrays(state);\n store.owner.reserve({ metadata: 64 + environmentKeys.size * 64, allocatedSlots: environmentKeys.size * 2, work: environmentKeys.size * 4 + 4 });\n const publications = new Map<string, Admission>();\n try {\n for (const key of environmentKeys) {\n const value: unknown = Object.hasOwn(context.env, key) ? context.env[key] : undefined;\n if (key.includes(\"\\0\") || key.includes(\"=\") || Object.hasOwn(context.env, key) && (typeof value !== \"string\" || value.includes(\"\\0\"))) throw new TypeError(\"Invalid middleware environment value\");\n if (initialEnv[key] === value) continue;\n if (state.readonlyVariables?.has(key)) throw new ArrayFailure(\"readonly environment collision\");\n }\n for (const key of environmentKeys) {\n const value = Object.hasOwn(context.env, key) ? context.env[key] : undefined;\n if (initialEnv[key] === value) continue;\n const saved = { ...saveVariable(state, key), overlay: value };\n await this.prepareVariable(state, key, saved);\n if (value !== undefined) await textToken(store.owner, value, this.signal);\n previous.set(key, saved);\n publications.set(key, store.tickets(key));\n }\n const cwdPublication = store.tickets();\n for (const [key, saved] of previous) {\n if (state.readonlyVariables?.has(key)) throw new ArrayFailure(\"readonly environment collision\");\n if (!typedSavedVariables.get(saved)!.watch.valid()) throw new ArrayFailure(\"stale binding\");\n }\n this.signal.throwIfAborted();\n stateMonitor(state)!.publish(cwdPublication, undefined, () => { state.cwd = resolvePath(\"/\", context.cwd); });\n cwdPublication.release();\n for (const [key, saved] of previous) {\n const publication = publications.get(key)!;\n stateMonitor(state)!.publish(publication, key, () => {\n void store.remove(key, publication);\n if (saved.overlay === undefined) { delete state.variables[key]; state.exported.delete(key); }\n else { publishVariable(state, key, saved.overlay); state.exported.add(key); }\n if (key === \"OPTIND\") this.reconcileGetopts(state, saved.value);\n });\n typedSavedVariables.get(saved)!.overlayVersion = publication.version;\n publication.release();\n }\n } catch (error) {\n for (const saved of previous.values()) await this.discardVariable(saved);\n for (const publication of publications.values()) publication.release();\n cwdRestoration?.close();\n throw error;\n }\n } else {\n state.cwd = resolvePath(\"/\", context.cwd);\n for (const key of environmentKeys) {\n if (Object.hasOwn(context.env, key) && typeof context.env[key] !== \"string\") throw new TypeError(\"Invalid middleware environment value\");\n if (initialEnv[key] === context.env[key]) continue;\n const value = context.env[key];\n if (key.includes(\"\\0\") || key.includes(\"=\") || (value !== undefined && (typeof value !== \"string\" || value.includes(\"\\0\")))) throw new TypeError(\"Invalid middleware environment value\");\n previous.set(key, { ...saveVariable(state, key), overlay: value });\n if (value === undefined) { delete state.variables[key]; state.exported.delete(key); }\n else { publishVariable(state, key, value); state.exported.add(key); }\n if (key === \"OPTIND\") this.reconcileGetopts(state, previous.get(key)!.value);\n }\n }\n stateMonitor(state)?.openOverlay(previous);\n try {\n const selected = this.internalDiscovery(context.command, state, bypassFunctions)[0];\n const body = selected?.kind === \"function\" ? state.functions.get(context.command) : undefined;\n if (body) {\n if (state.depth >= this.budget.limits.maxSubstitutionDepth) this.budget.fail(\"maxSubstitutionDepth\");\n const positional = state.positional;\n const savedPositionals = stateMonitor(state)!.positionals.clone();\n const positionalSetVersion = state.positionalSetVersion ?? 0;\n const frameOwner = guestArrays(state)?.owner;\n frameOwner?.reserve({ metadata: 256 + context.args.length * 32, allocatedSlots: context.args.length + 1, work: context.args.length + 16 });\n const getoptsEntry = cloneGetoptsBinding(state);\n const functionRestoration = stateMonitor(state)?.restoration(true);\n let getoptsRestoration: Restoration | undefined;\n const locals = new Map<string, SavedVariable>();\n try {\n getoptsRestoration = stateMonitor(state)?.restoration();\n const stack = state.locals;\n const argumentsCopy = [...context.args];\n const monitor = stateMonitor(state);\n const preparedLocals = frameOwner ? monitor!.prepareCollection(locals, \"locals\") : locals;\n const preparedArguments = frameOwner ? monitor!.prepareCollection(argumentsCopy, \"positional\") : argumentsCopy;\n const entry = () => {\n this.replacePositionals(state, context.argumentValues.values, () => { state.positional = preparedArguments; });\n state.functionDepth++;\n state.depth++;\n stack.push(preparedLocals);\n };\n if (frameOwner) {\n const tickets = frameOwner.reserve({ epoch: true, work: 8 });\n monitor!.publish(tickets, undefined, entry);\n tickets.release();\n } else entry();\n } catch (error) { savedPositionals.close(); getoptsRestoration?.close(); functionRestoration?.close(); throw error; }\n try { return { exitCode: await this.command(body, state, { ...io, ...context, scriptName: body.sourceName ?? io.scriptName ?? \"shell\" }) }; }\n catch (error) {\n if (error instanceof Flow && error.kind === \"return\") return { exitCode: error.status };\n throw error;\n } finally {\n const restoreControls = () => {\n stateMonitor(state)!.positionals.restore(savedPositionals, () => { state.positional = positional; });\n savedPositionals.close();\n state.positionalSetVersion = positionalSetVersion;\n state.functionDepth--;\n state.depth--;\n state.locals.pop();\n };\n await scope.cleanup(() => {\n if (functionRestoration) functionRestoration.apply(restoreControls, false);\n else restoreControls();\n });\n for (const [name, previous] of locals) await scope.cleanup(async () => {\n const typed = typedSavedVariables.has(previous);\n await restoreVariable(state, name, previous);\n if (!typed && !previous.readOnly) state.readonlyVariables?.delete(name);\n });\n if (locals.has(\"OPTIND\")) await scope.cleanup(() => {\n const restoreGetopts = () => {\n state.getopts ??= getoptsEntry;\n state.getopts.cursor = getoptsEntry.cursor;\n };\n if (getoptsRestoration) getoptsRestoration.apply(restoreGetopts);\n else restoreGetopts();\n });\n await scope.cleanup(() => getoptsRestoration?.close());\n await scope.cleanup(() => functionRestoration?.close());\n }\n }\n if (selected?.kind === \"builtin\") {\n if (context.command === \"command\" || context.command === \"builtin\" || context.command === \"type\") return { exitCode: await this.discoveryBuiltin(context, state, io, assignments) };\n const special = state.profile === \"sh\" && !bypassFunctions && specialBuiltinNames.has(context.command);\n if (special) assignments.clear();\n if (context.command === \".\" || context.command === \"source\") return { exitCode: await this.sourceBuiltin(context, state, { ...io, ...context }, special) };\n if (context.command === \"eval\") return { exitCode: await this.evalBuiltin(context, state, { ...io, ...context }, special) };\n const builtinWork = this.builtin(context, state, assignments, (error, diagnostic) => { builtinFailure = { error, diagnostic }; }, bypassFunctions);\n const builtin = arrayStore(state) ? await interruptible(builtinWork, this.signal) : await builtinWork;\n if (builtin !== undefined) {\n if (special && builtin !== 0 && context.command !== \"shift\") throw new Flow(\"exit\", builtin);\n return { exitCode: builtin };\n }\n }\n const definition = this.commands.get(context.command);\n if (context.command === \"printf\" && definition?.execute === printfCommand.execute && context.args[0]?.startsWith(\"-v\")) {\n return { exitCode: await this.printfVariable(context, state, assignments) };\n }\n if (!definition) {\n if (context.command === \"bash\" || context.command === \"sh\") return { exitCode: await this.interpreter(context, state, io) };\n if (context.command.includes(\"/\") || state.variables.PATH === undefined && state.pathUnset) return { exitCode: await this.scriptFile(context, state, io, context.command, context.args, true) };\n const target = await this.searchPath(context.command, state);\n if (target !== undefined) return { exitCode: await this.scriptFile(context, state, io, target, context.args, true) };\n await this.diagnostic({ ...io, ...context }, `${context.command}: command not found`);\n return { exitCode: 127 };\n }\n this.budget.pathLookup.suspendUntilClosed(scope);\n const raw = definition.execute(forwarded);\n const observed = this.observeRuntimeReturn(raw, runtimeFrame);\n return await interruptible(observed, this.signal);\n } finally {\n const restoreCwd = () => {\n if (context.command !== \"cd\" && state.cwd === context.cwd && state.directoryStackCwdPublication === directoryStackCwdPublication) state.cwd = cwd;\n };\n await scope.cleanup(() => {\n if (cwdRestoration) cwdRestoration.apply(restoreCwd, false);\n else restoreCwd();\n });\n for (const [key, saved] of previous) await scope.cleanup(async () => {\n const typed = typedSavedVariables.get(saved);\n if (typed) {\n const owned = typed.binding ? typed.watch.watch.version === typed.overlayVersion : state.variables[key] === saved.overlay && typed.watch.watch.typedVersion === typed.watch.typedVersion;\n if (owned) await restoreVariable(state, key, saved);\n else await this.discardVariable(saved);\n return;\n }\n if (saved.superseded || state.variables[key] !== saved.overlay) { await this.discardVariable(saved); return; }\n await restoreVariable(state, key, saved);\n });\n await scope.cleanup(() => stateMonitor(state)?.closeOverlay(previous));\n await scope.cleanup(() => cwdRestoration?.close());\n }\n }));\n try { return validateExitCode((await interruptible(execute(context), this.signal)).exitCode); }\n catch (error) {\n if (builtinFailure && error === builtinFailure.error) throw new ExecutionFailure(error, io, builtinFailure.diagnostic);\n if (runtimeFrame.report && Object.is(runtimeFrame.report.origin.signal.reason, error) && this.outcomeFrame) {\n this.outcomeFrame.report = runtimeFrame.report;\n }\n throw error;\n }\n }\n\n internalDiscovery(name: string, state: State, bypassFunctions = false): Discovery[] {\n const matches: Discovery[] = [];\n if (!bypassFunctions && state.functions.has(name)) matches.push({ kind: \"function\", name });\n if (implementedBuiltins.has(name)) matches.push({ kind: \"builtin\", name });\n else if (this.commands.has(name)) matches.push({ kind: \"command\", name });\n else if (name === \"bash\" || name === \"sh\") matches.push({ kind: \"interpreter\", name });\n if (state.profile === \"sh\" && specialBuiltinNames.has(name)) matches.sort((left, right) => Number(right.kind === \"builtin\") - Number(left.kind === \"builtin\"));\n return matches;\n }\n\n async discoveryBuiltin(context: CommandContext, state: State, io: IO, assignments: Map<string, SavedVariable>): Promise<number> {\n const args = [...context.args];\n const command = context.command === \"command\";\n const builtin = context.command === \"builtin\";\n let mode: \"describe\" | \"name\" | \"kind\" | \"path\" = \"describe\";\n let discover = !command && !builtin;\n let all = false;\n let skipFunctions = false;\n let forcePath = false;\n while (args[0]?.startsWith(\"-\") && args[0] !== \"-\") {\n const option = args.shift()!;\n if (option === \"--\") break;\n if (builtin) { await this.diagnostic({ ...io, ...context }, `builtin: ${option}: invalid option`); return 2; }\n for (const flag of option.slice(1)) {\n if (command && (flag === \"v\" || flag === \"V\")) { discover = true; mode = flag === \"v\" ? \"name\" : \"describe\"; }\n else if (!command && flag === \"a\") all = true;\n else if (!command && flag === \"f\") skipFunctions = true;\n else if (!command && flag === \"t\") mode = \"kind\";\n else if (!command && (flag === \"p\" || flag === \"P\")) { mode = \"path\"; if (flag === \"P\") forcePath = true; }\n else {\n if (command && flag !== \"p\") {\n await this.diagnostic({ ...io, ...context }, `command: -${flag}: invalid option`);\n await writeDiagnostic(context.stderr, \"command: usage: command [-pVv] command [arg ...]\\n\");\n } else await writeDiagnostic(context.stderr, `${context.command}: ${option}: unsupported option\\n`);\n return 2;\n }\n }\n }\n if (!discover) {\n const target = args.shift();\n if (target === undefined) return 0;\n if (builtin && !shellBuiltinNames.has(target)) {\n await this.diagnostic({ ...io, ...context }, `builtin: ${target}: not a shell builtin`);\n return 1;\n }\n this.budget.tick();\n if (state.depth >= this.budget.limits.maxSubstitutionDepth) this.budget.fail(\"maxSubstitutionDepth\");\n const restoration = stateMonitor(state)?.restoration(true);\n try { state.depth++; }\n catch (error) { restoration?.close(); throw error; }\n try { return await this.dispatch(target, args, state, { ...io, ...context }, assignments, true, getCommandArguments(context).values.slice(context.args.length - args.length)); }\n finally {\n const restore = () => { state.depth--; };\n if (restoration) restoration.apply(restore);\n else restore();\n }\n }\n let found = 0;\n for (const name of args) {\n this.signal.throwIfAborted();\n let matches = forcePath || all && mode === \"path\" ? [] : this.internalDiscovery(name, state, skipFunctions);\n if (!all) matches = matches.slice(0, 1);\n if (all || !matches.length) {\n const paths = await this.searchPaths(name, state, all, true);\n matches.push(...paths.map(path => {\n const absolute = command && mode === \"describe\";\n if ((absolute || state.profile === \"sh\") && !name.includes(\"/\") && !path.startsWith(\"/\")) {\n const relative = absolute && path.startsWith(\"./\") ? path.slice(2) : path;\n path = `${state.cwd === \"/\" ? \"\" : state.cwd}/${relative}`;\n }\n return { kind: \"file\" as const, name: path };\n }));\n }\n if (!matches.length) {\n if (mode === \"describe\") await writeDiagnostic(context.stderr, `${io.scriptName ?? \"shell\"}: line ${io.diagnosticLine ?? 1}: ${context.command}: ${name}: not found\\n`);\n continue;\n }\n found++;\n for (const match of matches) {\n if (mode === \"path\" && match.kind !== \"file\") continue;\n let text: string;\n if (mode === \"kind\") text = `${match.kind}\\n`;\n else if (mode === \"name\" || mode === \"path\") text = `${match.name}\\n`;\n else if (match.kind === \"function\") text = `${name} is a function\\n${functionDisplay(name, state.functions.get(name)!)}`;\n else text = `${name} is ${match.kind === \"builtin\" ? \"a shell builtin\" : match.kind === \"command\" ? \"a registered command\" : match.kind === \"interpreter\" ? \"a virtual shell interpreter\" : match.name}\\n`;\n await writeText(context.stdout, text);\n }\n }\n return (command ? found > 0 || args.length === 0 : found === args.length) ? 0 : 1;\n }\n\n async searchPath(name: string, state: State): Promise<string | undefined> {\n return (await this.searchPaths(name, state))[0];\n }\n\n async searchPaths(name: string, state: State, all = false, discovery = false): Promise<string[]> {\n if (!name) return [];\n let denied: CommandFailure | undefined;\n const matches: string[] = [];\n for (const target of pathTargets(name, state.variables.PATH, this.budget.limits, this.signal, limit => this.budget.fail(limit))) {\n const resolved = resolvePath(state.cwd, target);\n try {\n const options = { signal: this.signal };\n if (!await interruptible(this.budget.pathLookup.isFile(this.fs, resolved, this.signal), this.signal)) continue;\n if (this.fs.capabilities.permissions !== true) throw new CommandFailure(`${target}: execution permissions are not supported by this filesystem`, 126);\n await interruptible(this.fs.access(resolved, ACCESS_MODES.X_OK, options), this.signal);\n matches.push(target);\n if (!all) return matches;\n } catch (error) {\n this.signal.throwIfAborted();\n if (error instanceof ShellLimitError) throw error;\n if (error instanceof CommandFailure) { if (discovery) continue; throw error; }\n const code = errorCode(error);\n if (code === \"ENOENT\" || code === \"ENOTDIR\") continue;\n if (code !== \"EACCES\" && code !== \"EPERM\") throw new CommandFailure(filesystemDiagnostic(error, target, this.budget.onInternalError) ?? `${target}: ${message(error, this.budget.onInternalError)}`, 126);\n denied ??= new CommandFailure(filesystemDiagnostic(error, target, this.budget.onInternalError) ?? `${target}: ${message(error, this.budget.onInternalError)}`, 126);\n }\n }\n if (denied && !matches.length && !discovery) throw denied;\n return matches;\n }\n\n processState(context: CommandContext, state: State, arg0: string, args: readonly string[]): State {\n if (state.depth >= this.budget.limits.maxSubstitutionDepth) this.budget.fail(\"maxSubstitutionDepth\");\n const variables = Object.assign(Object.create(null) as Record<string, string>, context.env, { PWD: state.cwd });\n const exported = new Set(Object.keys(variables));\n variables.OPTIND = \"1\";\n variables.OPTERR = \"1\";\n return {\n cwd: state.cwd, variables, exported, functions: new Map(), getopts: { cursor: createGetoptsState(), integer: true },\n directoryStack: { entries: [], bytes: 0 },\n dotglob: false,\n positional: [...args], arg0, profile: context.command === \"sh\" ? \"sh\" : \"bash\", status: 0, substitutionStatus: 0, depth: state.depth + 1,\n loopDepth: 0, functionDepth: 0, locals: [], pipefail: false, isolated: true,\n errexit: false,\n };\n }\n\n async interpreter(context: CommandContext, state: State, io: IO, loadedSource?: { path: string; source: string }): Promise<number> {\n const args = [...context.args];\n let commandString = false;\n let standardInput = false;\n let errexit = false;\n let braceexpand = true;\n while (args.length && /^[+-]/u.test(args[0]!)) {\n const option = args.shift()!;\n if (option === \"--\" || option === \"-\") break;\n if ((option === \"-o\" || option === \"+o\") && args[0] === \"braceexpand\") {\n braceexpand = option === \"-o\";\n args.shift();\n continue;\n }\n const flags = option.slice(1);\n if (!flags.length || [...flags].some(flag => !(option[0] === \"-\" ? \"cseB\" : \"eB\").includes(flag))) {\n await writeDiagnostic(context.stderr, `${context.command}: ${option}: unsupported option; supported flags are -c, -s, -e, +e, -B, +B and +/-o braceexpand\\n`);\n return 2;\n }\n commandString ||= option.includes(\"c\");\n standardInput ||= option.includes(\"s\");\n if (option.includes(\"e\")) errexit = option.startsWith(\"-\");\n if (option.includes(\"B\")) braceexpand = option.startsWith(\"-\");\n }\n if (!commandString && !standardInput && args.length) return this.scriptFile(context, state, io, args[0]!, args.slice(1), false, errexit, loadedSource, braceexpand);\n const source = commandString ? args.shift() : undefined;\n if (commandString && source === undefined) {\n await writeDiagnostic(context.stderr, `${context.command}: -c: option requires an argument\\n`);\n return 2;\n }\n const arg0 = commandString ? args.shift() ?? context.command : context.command;\n const child = this.processState(context, state, arg0, args);\n child.errexit = errexit;\n child.braceexpand = braceexpand;\n const childIO = isolateIO({ ...io, ...context, execution: { ignoreErrexit: false }, diagnosticLine: 1, diagnosticOffset: 0, scriptName: arg0 });\n if (source !== undefined) {\n this.budget.source(Buffer.byteLength(source));\n return this.runCommandString(source, child, childIO);\n }\n const input = new ShellInput(context.stdin, this.budget, this.signal);\n return this.runStandardInput(input, child, { ...childIO, stdin: input });\n }\n\n async syntaxFailure(error: ShellSyntaxError, source: string, io: IO, commandString: boolean): Promise<number> {\n const offset = io.diagnosticOffset ?? 0;\n const line = source.slice(0, error.offset).split(\"\\n\").length;\n const prefix = `${io.scriptName ?? \"shell\"}:${commandString ? \" -c:\" : \"\"}`;\n if (error.unclosedQuote) await writeDiagnostic(io.stderr, `${prefix} line ${offset + error.unclosedQuote.line}: unexpected EOF while looking for matching \\`${error.unclosedQuote.quote}'\\n`);\n else if (error.offset >= source.length && !/Unterminated|nesting|Unsupported/u.test(error.reason)) {\n const context = error.incompleteCommand ? ` from \\`${error.incompleteCommand.name}' command on line ${offset + error.incompleteCommand.line}` : \"\";\n await writeDiagnostic(io.stderr, `${prefix} line ${offset + source.split(\"\\n\").length + Number(!source.endsWith(\"\\n\"))}: syntax error: unexpected end of file${context}\\n`);\n } else {\n const token = /^[;&|()<>]|^[^\\s;&|()<>]+/u.exec(source.slice(error.offset))?.[0] ?? \"newline\";\n await writeDiagnostic(io.stderr, `${prefix} line ${offset + line}: syntax error near unexpected token \\`${token}'\\n${prefix} line ${offset + line}: \\`${source.split(\"\\n\")[line - 1] ?? \"\"}'\\n`);\n }\n return error.exitCode;\n }\n\n async runCommandString(source: string, state: State, io: IO): Promise<number> {\n const lineIndex = new SourceLineIndex(source, this.budget.parsing);\n let position = 0;\n let status = 0;\n try {\n do {\n this.signal.throwIfAborted();\n const unit = parseShellUnit(source, position, byteLocale(state.variables), this.budget.parsing, lineIndex);\n for (const warning of unit.script.warnings ?? []) await writeDiagnostic(io.stderr, `${io.scriptName}: warning: ${warning}\\n`);\n if (unit.script.lists.length) {\n const result = await this.runUnit(unit.script, state, io);\n status = result.exitCode;\n if (result.terminated) return status;\n }\n position = unit.next;\n } while (position < source.length);\n return status;\n } catch (error) {\n if (!(error instanceof ShellSyntaxError)) throw error;\n return this.syntaxFailure(error, source, io, true);\n }\n }\n\n sourceText(bytes: Uint8Array, name: string): string {\n if (bytes.some(byte => byte < 9 || byte > 10 && byte < 13 || byte > 13 && byte < 32 || byte === 127)) throw new CommandFailure(`${name}: cannot execute binary script`, 126);\n try { return new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(bytes); }\n catch { throw new CommandFailure(`${name}: cannot execute binary or non-UTF-8 script`, 126); }\n }\n\n async runStandardInput(input: ShellInput, state: State, io: IO): Promise<number> {\n let source = \"\";\n let lineIndex = new SourceLineIndex(source, this.budget.parsing);\n let offset = 0;\n let status = 0;\n let lines = 0;\n while (true) {\n if (++lines % 32 === 0) await yieldTurn(this.signal);\n this.signal.throwIfAborted();\n const bytes = await input.sourceLine();\n const eof = bytes === undefined;\n if (bytes) {\n lineIndex.append(this.sourceText(bytes, io.scriptName ?? \"shell\"));\n source = lineIndex.source;\n }\n const unitIO = { ...io, diagnosticOffset: offset };\n try {\n const unit = eof ? parseShellUnit(source, 0, byteLocale(state.variables), this.budget.parsing, lineIndex) : parseShellInputUnit(source, byteLocale(state.variables), this.budget.parsing, lineIndex);\n if (unit) {\n for (const warning of unit.script.warnings ?? []) await writeDiagnostic(io.stderr, `${io.scriptName}: warning: ${warning}\\n`);\n if (unit.script.lists.length) {\n const result = await this.runUnit(unit.script, state, unitIO);\n status = result.exitCode;\n if (result.terminated) return status;\n }\n offset += source.slice(0, unit.next).split(\"\\n\").length - 1;\n source = source.slice(unit.next);\n lineIndex = new SourceLineIndex(source, this.budget.parsing);\n }\n } catch (error) {\n if (!(error instanceof ShellSyntaxError)) throw error;\n return this.syntaxFailure(error, source, unitIO, false);\n }\n if (eof) return status;\n }\n }\n\n private static readonly envShebangCommand = executionCommands(() => { throw new Error(\"Unreserved shebang invocation\"); }).find(command => command.name === \"env\");\n\n private async shebangState(context: CommandContext, state: State): Promise<State> {\n const child = await cloneState(state, this.signal);\n child.cwd = resolvePath(\"/\", context.cwd);\n if (guestArrays(child) || Object.keys(context.env).some(key => arrayStore(child)?.get(key))) {\n await this.indexedEnvironment(child, context.env);\n this.reconcileGetopts(child, state.variables.OPTIND);\n return child;\n }\n for (const key of child.exported) delete child.variables[key];\n for (const [key, value] of Object.entries(context.env)) {\n if (key.includes(\"\\0\") || key.includes(\"=\") || typeof value !== \"string\" || value.includes(\"\\0\")) throw new TypeError(\"Invalid middleware environment value\");\n child.variables[key] = value;\n }\n child.exported = new Set(Object.keys(context.env));\n this.reconcileGetopts(child, state.variables.OPTIND);\n return child;\n }\n\n private async shebangStage(\n incoming: CommandContext, state: State, io: IO,\n terminal: (runtime: Runtime, context: ShellCommandContext, child: State, childIO: IO) => Promise<CommandResult>,\n prepare?: (runtime: Runtime, context: ShellCommandContext, child: State, childIO: IO) => CommandInvoker,\n replacementInput?: ByteSource,\n existingScope?: InvocationScope,\n ): Promise<number> {\n const scope = existingScope ?? io[invocationScope].child();\n const ownsScope = existingScope === undefined;\n const runtime = new Runtime(\n this.fs, this.commands, this.middleware, this.budget,\n AbortSignal.any([this.signal, scope.signal]), this.fileWrites, this.outputFiles, this.commandSignal,\n this.cancellation, this.cancellationState, this.cancellationOwner,\n this.cancellationDepth, this.cancellationMaxDepth, this.outcomeFrame,\n );\n let input: ShellInput | undefined;\n try {\n const allocation = this.budget.values.scope();\n scope.register(() => allocation.close());\n const argumentValues = this.admitArguments(getCommandArguments(incoming).values, allocation);\n scope.register(async () => {\n try { await input?.close(); }\n catch (error) { if (!this.signal.aborted || error !== this.signal.reason) throw error; }\n });\n if (replacementInput !== undefined) input = new ShellInput(replacementInput, this.budget, this.signal);\n const invocationOverride: { current: CommandInvoker | undefined } = { current: undefined };\n const context: ShellCommandContext = {\n ...incoming, args: argumentValues.args, argumentValues,\n executionScope: this.budget.executionScope,\n onInternalError: this.budget.onInternalError,\n env: Object.assign(Object.create(null) as Record<string, string>, incoming.env),\n stdin: input ?? incoming.stdin,\n stdout: this.budget.sink(incoming.stdout, runtime.signal), stderr: this.budget.sink(incoming.stderr, runtime.signal),\n signal: this.commandSignal, registerCleanup: cleanup => { scope.register(cleanup); },\n invoke: (name, args, options) => {\n const invocation = invocationOverride.current ? invocationOverride.current(name, args, options) : runtime.invoke(name, args, options, context, child, scope);\n void invocation.catch(() => undefined);\n return invocation;\n },\n };\n bindFileOutputBudget(context, sink => this.budget.sink(sink, runtime.signal));\n if (argumentValues.values.every(value => typeof value === \"string\")) Reflect.deleteProperty(context, \"argumentValues\");\n const child = await runtime.shebangState(context, state);\n const childIO = { ...io, ...context, [invocationScope]: scope };\n invocationOverride.current = prepare?.(runtime, context, child, childIO);\n const runtimeFrame: RuntimeOutcomeFrame = {};\n const middleware = this.middleware.map<Middleware>(handler => (context, next) => {\n scope.assertOpen();\n this.budget.pathLookup.suspendUntilClosed(scope);\n let downstream: Promise<CommandResult> | undefined;\n const raw = handler(context, () => {\n downstream = next();\n return downstream;\n });\n return runtime.observeRuntimeReturn(raw, runtimeFrame, () => downstream);\n });\n const execute = composeMiddleware(middleware, async () => {\n scope.assertOpen();\n const forwardedValues = getCommandArguments(context);\n const admitted = forwardedValues === argumentValues ? argumentValues : runtime.admitArguments(forwardedValues.values, allocation);\n const selected = { ...context, args: admitted.args, argumentValues: admitted };\n const forwarded = await runtime.shebangState(selected, child);\n selected.cwd = forwarded.cwd;\n const raw = terminal(runtime, selected, forwarded, { ...childIO, ...selected });\n return await runtime.observeRuntimeReturn(raw, runtimeFrame);\n });\n try {\n const result = await interruptible(execute(context), runtime.signal);\n runtime.signal.throwIfAborted();\n return validateExitCode(result.exitCode);\n } catch (error) {\n if (runtimeFrame.report && Object.is(runtimeFrame.report.origin.signal.reason, error) && runtime.outcomeFrame) {\n runtime.outcomeFrame.report = runtimeFrame.report;\n }\n throw error;\n }\n } finally { if (ownsScope) await scope.close(); }\n }\n\n private shebangTarget(context: CommandContext, state: State, io: IO, command: string, args: readonly string[], options: ShellInvokeOptions, target: string, loadedSource: { path: string; source: string }): Promise<CommandResult> {\n return this.invokeChild(options, state, io[invocationScope], () => {\n this.signal.throwIfAborted();\n io[invocationScope].assertOpen();\n if (typeof command !== \"string\" || command.includes(\"\\0\") || !Array.isArray(args)\n || args.some(argument => typeof argument !== \"string\" || argument.includes(\"\\0\"))) {\n throw new TypeError(\"invoke requires a command and literal string arguments without NUL\");\n }\n this.budget.tick();\n if (args.length + 1 > this.budget.limits.maxExpansionFields) this.budget.fail(\"maxExpansionFields\");\n for (const argument of [command, ...args]) {\n if (Buffer.byteLength(argument) > this.budget.limits.maxExpansionBytes) this.budget.fail(\"maxExpansionBytes\");\n }\n }, (runtime, scope) => runtime.shebangTargetScoped(context, state, io, command, args, options, target, loadedSource, scope));\n }\n\n private async shebangTargetScoped(context: CommandContext, state: State, io: IO, command: string, args: readonly string[], options: ShellInvokeOptions, target: string, loadedSource: { path: string; source: string }, scope: InvocationScope): Promise<CommandResult> {\n const reserved = command === \"bash\" || command === \"sh\";\n const direct = command.includes(\"/\");\n const definition = this.commands.get(command);\n const child = await this.shebangState(context, state);\n child.cwd = resolvePath(context.cwd, options.cwd ?? \".\");\n if (!reserved) {\n if (child.depth >= this.budget.limits.maxSubstitutionDepth) this.budget.fail(\"maxSubstitutionDepth\");\n child.depth++;\n child.loopDepth = 0;\n child.functionDepth = 0;\n child.sourceDepth = 0;\n child.locals = [];\n }\n const stdinIsDefault = options.stdin === undefined ? context.stdinIsDefault : options.stdinIsDefault ?? false;\n const argumentValues = getCommandArguments({ args, ...(options.argumentValues ? { argumentValues: options.argumentValues } : {}) });\n const selected: CommandContext = {\n ...context, command, args: argumentValues.args, argumentValues, cwd: child.cwd,\n env: options.replaceEnv ? { ...options.env } : { ...context.env, ...options.env, PWD: child.cwd },\n stdin: options.stdin ?? context.stdin,\n stdout: options.stdout ?? context.stdout, stderr: options.stderr ?? context.stderr,\n ...(stdinIsDefault === undefined ? {} : { stdinIsDefault }),\n };\n const exitCode = await this.shebangStage(selected, child, io, async (runtime, forwarded, state, childIO) => {\n if (reserved) {\n if (definition) {\n await runtime.diagnostic(childIO, `${target}: unsupported interpreter override: ${command}`);\n return { exitCode: 126 };\n }\n return { exitCode: await runtime.interpreter(forwarded, state, childIO, loadedSource) };\n }\n if (direct) return { exitCode: await runtime.scriptFile(forwarded, state, childIO, command, forwarded.args, true) };\n if (definition) {\n runtime.budget.pathLookup.suspendUntilClosed(childIO[invocationScope]);\n return definition.execute(forwarded);\n }\n await writeDiagnostic(forwarded.stderr, `env: ${command}: command not found\\n`);\n return { exitCode: 127 };\n }, undefined, options.stdin !== context.stdin ? options.stdin : undefined, scope);\n return { exitCode };\n }\n\n private async envShebang(context: CommandContext, state: State, io: IO, optionalArgument: string | undefined, target: string, args: readonly string[], loadedSource: { path: string; source: string }): Promise<number> {\n const definition = Runtime.envShebangCommand;\n if (!definition) throw new CommandFailure(`${target}: env interpreter is unavailable`, 126);\n const allocation = this.budget.values.scope();\n io[invocationScope].register(() => allocation.close());\n const incoming = getCommandArguments({ args, ...(context.argumentValues ? { argumentValues: context.argumentValues } : {}) });\n const argumentValues = this.admitArguments([...(optionalArgument === undefined ? [] : [optionalArgument]), target, ...incoming.values], allocation);\n return this.shebangStage({\n ...context, command: \"env\", args: argumentValues.args, argumentValues,\n }, state, io, async (runtime, forwarded) => {\n runtime.budget.pathLookup.suspendUntilClosed(io[invocationScope]);\n let failed = false;\n let failure: unknown;\n let failureReport: CancellationReport | undefined;\n const result = await interruptible(Promise.resolve(definition.execute({\n ...forwarded,\n invoke: (command, arguments_, options) => {\n const raw = forwarded.invoke(command, arguments_, options);\n return raw.catch(error => {\n failed = true;\n failure = error;\n failureReport = runtime.cancellationState.consume(raw, error);\n return { exitCode: 1 };\n });\n },\n })), runtime.signal);\n runtime.signal.throwIfAborted();\n if (failed) {\n if (failureReport && runtime.outcomeFrame) runtime.outcomeFrame.report = failureReport;\n throw failure;\n }\n return { exitCode: validateExitCode(result.exitCode) };\n }, (runtime, forwarded, child, childIO) => (command, arguments_, options = {}) =>\n runtime.shebangTarget(forwarded, child, childIO, command, arguments_, options, target, loadedSource));\n }\n\n async scriptFile(context: CommandContext, state: State, io: IO, target: string, args: readonly string[], direct: boolean, errexit = false, loadedSource?: { path: string; source: string }, braceexpand = true): Promise<number> {\n if (target === \"\") throw new CommandFailure(`${context.command}: : No such file or directory`, 127);\n if (state.depth >= this.budget.limits.maxSubstitutionDepth) this.budget.fail(\"maxSubstitutionDepth\");\n const path = resolvePath(state.cwd, target);\n let source: string;\n let environmentInterpreter: RegExpExecArray | null = null;\n let interpreterProfile: \"bash\" | \"sh\" | undefined;\n try {\n if (loadedSource?.path === path) source = loadedSource.source;\n else {\n const options = { signal: this.signal };\n const stat = await interruptible(this.fs.stat(path, options), this.signal);\n if (stat.type !== \"file\") throw new CommandFailure(`${target}: ${stat.type === \"directory\" ? \"Is a directory\" : \"not a regular file\"}`, 126);\n if (direct && this.fs.capabilities.permissions !== true) throw new CommandFailure(`${target}: execution permissions are not supported by this filesystem`, 126);\n await interruptible(this.fs.access(path, ACCESS_MODES.R_OK | (direct ? ACCESS_MODES.X_OK : 0), options), this.signal);\n const maxBytes = this.budget.limits.maxSourceBytes - this.budget.sourceBytes;\n if (stat.size > maxBytes) this.budget.fail(\"maxSourceBytes\");\n const bytes = await interruptible(this.fs.readFile(path, { ...options, maxBytes }), this.signal);\n this.budget.source(bytes.byteLength);\n source = this.sourceText(bytes, target);\n }\n if (direct && source.startsWith(\"#!\")) {\n const interpreter = source.split(\"\\n\", 1)[0]!.slice(2).replace(/^[ \\t]+|[ \\t]+$/gu, \"\");\n environmentInterpreter = /^\\/usr\\/bin\\/env(?:[ \\t]+([^\\n]*))?$/u.exec(interpreter);\n if (!environmentInterpreter) {\n const shell = /^\\/(?:usr\\/)?bin\\/(bash|sh)(?:[ \\t]+([-+]e+))?$/u.exec(interpreter);\n if (!shell) throw new CommandFailure(`${target}: unsupported interpreter: ${interpreter}`, 126);\n interpreterProfile = shell[1] === \"sh\" ? \"sh\" : \"bash\";\n if (shell[2]) errexit = shell[2].startsWith(\"-\");\n }\n }\n } catch (error) {\n this.signal.throwIfAborted();\n if (error instanceof ShellLimitError || error instanceof CommandFailure) throw error;\n if (errorCode(error) === \"EFBIG\") this.budget.fail(\"maxSourceBytes\");\n throw new CommandFailure(filesystemDiagnostic(error, target, this.budget.onInternalError) ?? `${target}: ${message(error, this.budget.onInternalError)}`, errorCode(error) === \"ENOENT\" ? 127 : 126);\n }\n if (direct && environmentInterpreter) return this.envShebang(context, state, io, environmentInterpreter[1], target, args, { path, source });\n const units: Script[] = [];\n const lineIndex = new SourceLineIndex(source, this.budget.parsing);\n try {\n let position = 0;\n do {\n this.signal.throwIfAborted();\n const unit = parseShellUnit(source, position, byteLocale(context.env), this.budget.parsing, lineIndex);\n units.push(unit.script);\n position = unit.next;\n } while (position < source.length);\n } catch (error) {\n if (!(error instanceof ShellSyntaxError)) throw error;\n const line = source.slice(0, error.offset).split(\"\\n\").length;\n await writeDiagnostic(context.stderr, `${target}: line ${line}: syntax error: ${error.reason}\\n`);\n return error.exitCode;\n }\n const child = this.processState(context, state, target, args);\n child.errexit = errexit;\n child.braceexpand = braceexpand;\n if (direct) child.profile = interpreterProfile ?? state.profile ?? \"bash\";\n const childIO = isolateIO({ ...io, ...context, execution: { ignoreErrexit: false }, diagnosticLine: 1, diagnosticOffset: 0, scriptName: target });\n let status = 0;\n for (const unit of units) {\n for (const warning of unit.warnings ?? []) await writeDiagnostic(context.stderr, `${target}: warning: ${warning}\\n`);\n if (!unit.lists.length) continue;\n const result = await this.runUnit(unit, child, childIO);\n status = result.exitCode;\n if (result.terminated) break;\n }\n return status;\n }\n\n async runCurrentText(source: string, state: State, io: IO, fatalSyntax: boolean, syntaxName?: string): Promise<number> {\n const lineIndex = new SourceLineIndex(source, this.budget.parsing);\n let position = 0;\n let status = 0;\n let executed = false;\n try {\n do {\n this.signal.throwIfAborted();\n const unit = parseShellUnit(source, position, byteLocale(state.variables), this.budget.parsing, lineIndex);\n for (const warning of unit.script.warnings ?? []) await writeDiagnostic(io.stderr, `${io.scriptName ?? \"shell\"}: warning: ${warning}\\n`);\n if (unit.script.lists.length) {\n status = await this.script(unit.script, state, io);\n executed = true;\n }\n position = unit.next;\n } while (position < source.length);\n return status;\n } catch (error) {\n if (!(error instanceof ShellSyntaxError)) throw error;\n const status = await this.syntaxFailure(error, source, syntaxName === undefined ? io : { ...io, scriptName: syntaxName }, false);\n if (fatalSyntax && !executed) throw new Flow(\"exit\", status);\n return status;\n }\n }\n\n async evalBuiltin(context: CommandContext, state: State, io: IO, special: boolean): Promise<number> {\n const args = [...context.args];\n if (args[0] === \"--\") args.shift();\n else if (args[0]?.startsWith(\"-\") && args[0] !== \"-\") {\n await this.diagnostic(io, `eval: -${args[0][1]}: invalid option`);\n await writeDiagnostic(io.stderr, \"eval: usage: eval [arg ...]\\n\");\n if (special) throw new Flow(\"exit\", 2);\n return 2;\n }\n if (!args.length) return 0;\n if (state.depth >= this.budget.limits.maxSubstitutionDepth) this.budget.fail(\"maxSubstitutionDepth\");\n const source = args.join(\" \");\n this.budget.source(Buffer.byteLength(source));\n this.sourceText(Buffer.from(source), \"eval\");\n const restoration = stateMonitor(state)?.restoration(true);\n try { state.depth++; }\n catch (error) { restoration?.close(); throw error; }\n try {\n return await this.runCurrentText(source, state, { ...io, diagnosticOffset: (io.diagnosticLine ?? 1) - 1 }, special, `${io.scriptName ?? \"shell\"}: eval`);\n } finally {\n const restore = () => { state.depth--; };\n if (restoration) restoration.apply(restore);\n else restore();\n }\n }\n\n async sourceBuiltin(context: CommandContext, state: State, io: IO, special: boolean): Promise<number> {\n const args = [...context.args];\n if (args[0] === \"--\") args.shift();\n else if (args[0]?.startsWith(\"-\") && args[0] !== \"-\") {\n await this.diagnostic(io, `${context.command}: ${args[0]}: unsupported option`);\n if (special) throw new Flow(\"exit\", 2);\n return 2;\n }\n const filename = args.shift();\n if (filename === undefined) {\n await this.diagnostic(io, `${context.command}: filename argument required`);\n await writeDiagnostic(io.stderr, `${context.command}: usage: ${context.command} [-p path] filename [arguments]\\n`);\n if (special) throw new Flow(\"exit\", 2);\n return 2;\n }\n if (state.depth >= this.budget.limits.maxSubstitutionDepth) this.budget.fail(\"maxSubstitutionDepth\");\n let target = filename;\n let source: string;\n try {\n const options = { signal: this.signal };\n if (filename && !filename.includes(\"/\") && state.variables.PATH) {\n let found = false;\n for (const candidate of pathTargets(filename, state.variables.PATH, this.budget.limits, this.signal, limit => this.budget.fail(limit))) {\n const path = resolvePath(state.cwd, candidate);\n try {\n if (!await interruptible(this.budget.pathLookup.isFile(this.fs, path, this.signal), this.signal)) continue;\n await interruptible(this.fs.access(path, ACCESS_MODES.R_OK, options), this.signal);\n target = candidate;\n found = true;\n break;\n } catch (error) {\n this.signal.throwIfAborted();\n if (![\"ENOENT\", \"ENOTDIR\", \"EACCES\", \"EPERM\"].includes(errorCode(error) ?? \"\")) throw error;\n }\n }\n if (!found && state.profile === \"sh\") throw new CommandFailure(`${context.command}: ${filename}: file not found`, 1);\n }\n if (!filename) throw new CommandFailure(\": No such file or directory\", 1);\n const path = resolvePath(state.cwd, target);\n const stat = await interruptible(this.fs.stat(path, options), this.signal);\n if (stat.type === \"directory\") throw new CommandFailure(`${context.command}: ${target}: is a directory`, 1);\n if (stat.type !== \"file\") throw new CommandFailure(`${target}: not a regular file`, 1);\n await interruptible(this.fs.access(path, ACCESS_MODES.R_OK, options), this.signal);\n const maxBytes = this.budget.limits.maxSourceBytes - this.budget.sourceBytes;\n if (stat.size > maxBytes) this.budget.fail(\"maxSourceBytes\");\n const bytes = await interruptible(this.fs.readFile(path, { ...options, maxBytes }), this.signal);\n this.budget.source(bytes.byteLength);\n source = this.sourceText(bytes, target);\n } catch (error) {\n this.signal.throwIfAborted();\n if (error instanceof ShellLimitError) throw error;\n if (errorCode(error) === \"EFBIG\") this.budget.fail(\"maxSourceBytes\");\n const diagnostic = error instanceof CommandFailure ? error.message : filesystemDiagnostic(error, target, this.budget.onInternalError) ?? `${target}: ${message(error, this.budget.onInternalError)}`;\n if (special) throw new FatalCommandFailure(diagnostic, 1);\n throw new CommandFailure(diagnostic, error instanceof CommandFailure ? error.status : 1);\n }\n const positional = state.positional;\n const version = state.positionalSetVersion ?? 0;\n const sourceDepth = state.sourceDepth ?? 0;\n const monitor = stateMonitor(state);\n const restoration = monitor?.restoration(true);\n let savedPositionals: ValueStore | undefined;\n try {\n if (args.length) savedPositionals = monitor!.positionals.clone();\n const owner = arrayStore(state)?.owner;\n if (owner) {\n owner.reserve({ metadata: 64 + args.length * 32, allocatedSlots: args.length, work: args.length + 4 });\n monitor!.prepareCollection(args, \"positional\");\n }\n const entry = () => {\n if (args.length) this.replacePositionals(state, getCommandArguments(context).values.slice(context.args.length - args.length), () => { state.positional = args; });\n state.sourceDepth = (state.sourceDepth ?? 0) + 1;\n state.depth++;\n };\n if (owner) {\n const tickets = owner.reserve({ epoch: true, work: 8 });\n monitor!.publish(tickets, undefined, entry);\n tickets.release();\n } else entry();\n } catch (error) { savedPositionals?.close(); restoration?.close(); throw error; }\n try {\n return await this.runCurrentText(source, state, { ...io, scriptName: target, diagnosticOffset: 0, diagnosticLine: 1 }, special);\n } catch (error) {\n if (error instanceof Flow && error.kind === \"return\") return error.status;\n throw error;\n } finally {\n const restore = () => {\n state.depth--;\n state.sourceDepth = sourceDepth;\n if (savedPositionals && (state.functionDepth > 0 || (state.positionalSetVersion ?? 0) === version)) {\n monitor!.positionals.restore(savedPositionals, () => {\n state.positional = positional;\n state.positionalSetVersion = version;\n });\n }\n };\n try {\n if (restoration) restoration.apply(restore);\n else restore();\n } finally { savedPositionals?.close(); }\n }\n }\n\n invoke(name: string, args: readonly string[], options: ShellInvokeOptions = {}, context: ShellCommandContext, state: State, parent: InvocationScope): Promise<{ exitCode: number }> {\n return this.invokeChild(options, state, parent, () => {\n if (typeof name !== \"string\" || name.includes(\"\\0\") || !Array.isArray(args)\n || args.some((arg) => typeof arg !== \"string\" || arg.includes(\"\\0\"))) {\n throw new TypeError(\"invoke requires a command and literal string arguments without NUL\");\n }\n if (state.depth >= this.budget.limits.maxSubstitutionDepth) this.budget.fail(\"maxSubstitutionDepth\");\n }, (runtime, scope) => runtime.invokeScoped(name, args, options, context, state, scope));\n }\n\n private async invokeScoped(name: string, args: readonly string[], options: ShellInvokeOptions, context: ShellCommandContext, state: State, scope: InvocationScope): Promise<{ exitCode: number }> {\n this.signal.throwIfAborted();\n const allocation = this.budget.values.scope();\n scope.register(() => allocation.close());\n const carrier = this.admitArguments(getCommandArguments({ args, ...(options.argumentValues ? { argumentValues: options.argumentValues } : {}) }).values, allocation);\n const child = await cloneState(state, this.signal, scope, false);\n child.cwd = resolvePath(context.cwd, options.cwd ?? \".\");\n const env = options.replaceEnv ? { ...options.env } : { ...context.env, ...options.env, PWD: child.cwd };\n if (guestArrays(child) || Object.keys(env).some(key => arrayStore(child)?.get(key))) await this.indexedEnvironment(child, env);\n else {\n for (const key of child.exported) delete child.variables[key];\n for (const [key, value] of Object.entries(env)) {\n if (key.includes(\"\\0\") || key.includes(\"=\") || typeof value !== \"string\" || value.includes(\"\\0\")) throw new TypeError(\"Invalid invoke environment entry\");\n publishVariable(child, key, value);\n }\n child.exported = new Set(Object.keys(env));\n }\n this.reconcileGetopts(child, state.variables.OPTIND);\n child.depth++;\n child.loopDepth = 0;\n child.functionDepth = 0;\n child.sourceDepth = 0;\n child.locals = [];\n const input = options.stdin === undefined ? undefined : new ShellInput(options.stdin, this.budget, this.signal);\n const stdinIsDefault = options.stdin === undefined ? context.stdinIsDefault : (options.stdinIsDefault ?? false);\n const io = {\n ...context,\n [invocationScope]: scope,\n stdin: input ?? context.stdin,\n ...(stdinIsDefault === undefined ? {} : { stdinIsDefault }),\n stdout: options.stdout ? this.budget.sink(options.stdout, this.signal) : context.stdout,\n stderr: options.stderr ? this.budget.sink(options.stderr, this.signal) : context.stderr,\n };\n const command: Command = {\n kind: \"simple\", redirects: [],\n words: [name, ...carrier.values].map((value) => {\n const part: WordPart = { kind: \"text\", value: shellValueText(value), quoted: true };\n if (typeof value !== \"string\") invokedValues.set(part, value);\n return { offset: 0, parts: [part] };\n }),\n };\n try { return { exitCode: await this.runCommandIsolated(command, child, io) }; }\n finally { stateMonitor(child)?.closeValues(); await input?.close(); }\n }\n\n private async setOptions(context: CommandContext & IO, state: State): Promise<number> {\n const { args, stdout, stderr } = context;\n let index = 0;\n let positionals = false;\n while (index < args.length) {\n this.signal.throwIfAborted();\n const option = args[index]!;\n if (option === \"--\") { index++; positionals = true; break; }\n if (option === \"-\") { index++; positionals = index < args.length; break; }\n if (option[0] !== \"-\" && option[0] !== \"+\") { positionals = true; break; }\n const enabled = option[0] === \"-\";\n let valid = option.length > 1;\n for (let position = 1; valid && position < option.length; position++) {\n const flag = option[position];\n if (flag === \"e\") state.errexit = enabled;\n else if (flag === \"u\") state.nounset = enabled;\n else if (flag === \"B\") state.braceexpand = enabled;\n else if (flag === \"o\" && position === option.length - 1) {\n const name = args[index + 1];\n if (name === undefined) {\n const options = [[\"braceexpand\", state.braceexpand !== false], [\"errexit\", !!state.errexit], [\"nounset\", !!state.nounset], [\"pipefail\", state.pipefail]] as const;\n for (const [name, active] of options) await writeText(stdout, enabled ? `${name}\\t${active ? \"on\" : \"off\"}\\n` : `set ${active ? \"-\" : \"+\"}o ${name}\\n`);\n } else {\n if (name === \"errexit\") state.errexit = enabled;\n else if (name === \"nounset\") state.nounset = enabled;\n else if (name === \"pipefail\") state.pipefail = enabled;\n else if (name === \"braceexpand\") state.braceexpand = enabled;\n else {\n const unsupported = unsupportedSetOptionNames.has(name);\n await this.diagnostic(context, `set: ${name}: ${unsupported ? \"unsupported shell option\" : \"invalid option name\"}`);\n return unsupported ? 1 : 2;\n }\n index++;\n }\n } else valid = false;\n }\n if (!valid) {\n await writeDiagnostic(stderr, \"set: unsupported shell option; supported forms are +/- e/u/B clusters, -- arguments and terminal o with braceexpand, pipefail, errexit or nounset\\n\");\n return 1;\n }\n index++;\n }\n if (positionals) { this.replacePositionals(state, getCommandArguments(context).values.slice(index)); state.positionalSetVersion = (state.positionalSetVersion ?? 0) + 1; }\n return 0;\n }\n\n private async letBuiltin(context: CommandContext & IO, state: State): Promise<number> {\n this.signal.throwIfAborted();\n const { maxExpansionBytes: bytes, maxExpansionFields: fields } = this.budget.limits;\n const admit = (value: unknown): void => {\n if (typeof value !== \"string\" || value.includes(\"\\0\")) throw new CommandFailure(\"let: arguments must be strings without NUL\", 2);\n if (value.length > bytes || Buffer.byteLength(value) > bytes) this.budget.fail(\"maxExpansionBytes\");\n };\n const checkpoint = async (): Promise<void> => {\n this.signal.throwIfAborted();\n await yieldTurn(this.signal);\n this.signal.throwIfAborted();\n };\n const { args } = context;\n if (!Array.isArray(args)) throw new CommandFailure(\"let: argument array required\", 2);\n if (args.length + 1 > fields) this.budget.fail(\"maxExpansionFields\");\n admit(context.command);\n for (let index = 0; index < args.length; index++) {\n this.signal.throwIfAborted();\n admit(args[index]);\n if ((index + 1) % 128 === 0) await checkpoint();\n }\n if (args[0] === \"--help\") throw new CommandFailure(\"let: --help: unsupported option\", 2);\n const offset = args[0] === \"--\" ? 1 : 0;\n if (args.length === offset) throw new CommandFailure(\"let: expression expected\", 1);\n const variables = new Proxy(this.arithmeticVariables(state, context.diagnosticLine), { get: (target, key) => {\n this.signal.throwIfAborted();\n const value: unknown = Reflect.get(target, key);\n if (typeof value === \"string\" && (value.length > bytes || Buffer.byteLength(value) > bytes)) this.budget.fail(\"maxExpansionBytes\");\n return value;\n } });\n let value = 0n;\n for (let index = offset; index < args.length; index++) {\n this.signal.throwIfAborted();\n try { value = evaluateArithmetic(prepareArithmetic(args[index]!, this.budget.parsing), variables, this.budget.parsing); }\n catch (error) {\n this.rethrowArithmeticControl(error);\n throw new PublicDiagnostic(`let: ${message(error, this.budget.onInternalError)}`);\n }\n if ((index - offset + 1) % 128 === 0) await checkpoint();\n }\n this.signal.throwIfAborted();\n return Number(value === 0n);\n }\n\n private async getoptsBuiltin(context: CommandContext & IO, state: State): Promise<number> {\n this.signal.throwIfAborted();\n const { maxExpansionBytes: bytes, maxExpansionFields: fields } = this.budget.limits;\n const admit = (value: unknown): void => {\n if (typeof value !== \"string\") throw new CommandFailure(\"getopts: arguments must be strings without NUL\", 2);\n if (value.length > bytes || Buffer.byteLength(value) > bytes) this.budget.fail(\"maxExpansionBytes\");\n if (value.includes(\"\\0\")) throw new CommandFailure(\"getopts: arguments must be strings without NUL\", 2);\n };\n const checkpoint = async (): Promise<void> => {\n this.signal.throwIfAborted();\n await yieldTurn(this.signal);\n this.signal.throwIfAborted();\n };\n if (!Array.isArray(context.args)) throw new CommandFailure(\"getopts: argument array required\", 2);\n if (context.args.length + 1 > fields) this.budget.fail(\"maxExpansionFields\");\n admit(context.command);\n for (let index = 0; index < context.args.length; index++) {\n this.signal.throwIfAborted();\n admit(context.args[index]);\n if ((index + 1) % 128 === 0) await checkpoint();\n }\n const offset = context.args[0] === \"--\" ? 1 : 0;\n if (!offset && context.args[0]?.startsWith(\"-\") && context.args[0] !== \"-\") {\n await this.diagnostic(context, `getopts: -${context.args[0][1]}: invalid option`);\n await writeDiagnostic(context.stderr, \"getopts: usage: getopts optstring name [arg ...]\\n\");\n return 2;\n }\n if (context.args.length - offset < 2) {\n await writeDiagnostic(context.stderr, \"getopts: usage: getopts optstring name [arg ...]\\n\");\n return 2;\n }\n const optstring = context.args[offset]!;\n const name = context.args[offset + 1]!;\n const explicit = context.args.length > offset + 2;\n const monitor = explicit ? undefined : stateMonitor(state);\n const revision = monitor?.positionalRevision;\n const supplied = explicit ? context.args.slice(offset + 2) : state.positional;\n if (supplied.length > fields) this.budget.fail(\"maxExpansionFields\");\n const maxBytes = saturatedProduct(bytes, saturatedSum(supplied.length, 1));\n const maxSteps = saturatedSum(saturatedProduct(maxBytes, 2), saturatedSum(supplied.length, 2));\n const work = { maxArguments: fields, maxBytes, maxSteps, yieldEvery: 128, signal: this.signal, checkpoint };\n let input = monitor?.getoptsInput;\n let allocation: ValueScope | undefined;\n let result;\n try {\n if (!input && monitor) {\n const size = getoptsInputAllocationSize(supplied.length);\n const arena = this.budget.values;\n const usage = arena.usage;\n if (size.bytes + 64 <= arena.maximumBytes - usage.bytes && size.slots + 1 <= arena.maximumSlots - usage.slots) {\n allocation = arena.scope();\n input = await createGetoptsInput(supplied, allocation, work);\n }\n }\n const args = input?.args ?? supplied;\n if (!input || allocation) for (let index = 0; index < args.length; index++) {\n this.signal.throwIfAborted();\n admit(args[index]);\n if ((index + 1) % 128 === 0) await checkpoint();\n }\n state.getopts ??= cloneGetoptsBinding(state);\n try {\n result = await scanGetopts(state.getopts.cursor, optstring, input ?? args, {\n reportErrors: state.variables.OPTERR === undefined || state.variables.OPTERR === \"\" || decimalIndex(state.variables.OPTERR) !== 0,\n work,\n });\n } catch (error) {\n this.signal.throwIfAborted();\n if (error instanceof GetoptsError && (error.code === \"NON_ASCII_OPTION\" || error.code === \"INVALID_INPUT\")) throw new CommandFailure(`getopts: ${error.message}`, 2);\n throw error;\n }\n this.signal.throwIfAborted();\n if (monitor && monitor.positionalRevision !== revision) throw new CommandFailure(\"getopts: positional arguments changed during validation\", 2);\n if (allocation && monitor!.retainGetoptsInput(revision!, input!, allocation)) allocation = undefined;\n } finally { allocation?.close(); }\n this.signal.throwIfAborted();\n state.getopts.cursor = result.state;\n if (result.diagnostic) {\n const explanation = result.diagnostic.kind === \"unknown-option\" ? \"illegal option\" : \"option requires an argument\";\n await writeDiagnostic(context.stderr, `${state.arg0 ?? context.scriptName ?? \"shell\"}: ${explanation} -- ${result.diagnostic.option}\\n`);\n }\n this.signal.throwIfAborted();\n this.writeVariable(state, \"OPTIND\", String(result.optind), \"getopts\");\n if (result.argument.kind === \"set\") this.writeVariable(state, \"OPTARG\", result.argument.value, \"getopts\");\n else this.unsetVariable(state, \"OPTARG\", true);\n if (!/^[a-zA-Z_][a-zA-Z_0-9]*$/u.test(name)) throw new PublicDiagnostic(`getopts: \\`${name}': not a valid identifier`);\n await this.assignVariable(state, name, result.option, \"getopts\");\n return result.status;\n }\n\n private async changeDirectory(context: CommandContext & IO, state: State, args: readonly string[], diagnose?: (error: unknown, diagnostic: string) => void, stackHooks?: { name: string; onCwdPublished(): void; emit(text: string): Promise<void> }): Promise<number> {\n const name = stackHooks?.name ?? \"cd\";\n this.signal.throwIfAborted();\n if (args.length > 1) { await writeDiagnostic(context.stderr, `${name}: too many arguments\\n`); return 1; }\n const target = args[0] === \"-\" ? state.variables.OLDPWD : (args[0] ?? state.variables.HOME);\n if (target === undefined) { await writeDiagnostic(context.stderr, `${name}: ${args[0] === \"-\" ? \"OLDPWD\" : \"HOME\"} not set\\n`); return 1; }\n let selected: { path: string; print: boolean };\n try {\n selected = await new CdLookup(this.signal).find(this.fs, state.cwd, target || \".\", state.variables.CDPATH);\n } catch (error) {\n this.signal.throwIfAborted();\n const description = filesystemDiagnostic(error, \"\", this.budget.onInternalError);\n const text = description ? \"\" : message(error, this.budget.onInternalError);\n diagnose?.(error, cdDiagnostic(description ? [name, \": \", target, description]\n : stackHooks && text.startsWith(\"cd: \") ? [name, text.slice(2)] : [text]));\n throw error;\n }\n this.signal.throwIfAborted();\n const { path } = selected;\n this.writeVariable(state, \"OLDPWD\", state.cwd);\n state.cwd = path;\n stackHooks?.onCwdPublished();\n this.writeVariable(state, \"PWD\", path);\n state.exported.add(\"PWD\");\n state.exported.add(\"OLDPWD\");\n if (selected.print || args[0] === \"-\") {\n if (stackHooks) await stackHooks.emit(`${path}\\n`);\n else await writeText(context.stdout, `${path}\\n`);\n }\n return 0;\n }\n\n private async directoryStackBuiltin(context: CommandContext & IO, state: State, diagnose?: (error: unknown, diagnostic: string) => void): Promise<number> {\n const { command, args } = context;\n const work = new DirectoryStackWork(command, this.signal, context.stdout);\n const tail = state.directoryStack ?? { entries: [], bytes: 0 };\n const count = tail.entries.length;\n let noCd = false;\n let clear = false;\n let long = false;\n let lines = false;\n let verbose = false;\n let selected: bigint | undefined;\n let target: string | undefined;\n let targetBytes: number | undefined;\n const boundedIndex = (index: bigint): number => {\n if (index < 0n || index > BigInt(count)) work.fail(\"directory stack index out of range\");\n return Number(index);\n };\n const field = async (value: string): Promise<number> => {\n await work.charge(1);\n return work.scan(value, \"argument\");\n };\n const plan = async (length: number, removed: number | undefined, added: string | undefined, addedBytes: number | undefined, entry: (index: number) => string): Promise<NonNullable<State[\"directoryStack\"]>> => {\n if (length > 4096) work.fail(\"directory stack exceeds 4096 entries\");\n const removedBytes = removed === undefined ? 0 : await work.scan(tail.entries[removed]!, \"path\");\n const extraBytes = added === undefined ? 0 : addedBytes ?? await work.scan(added, \"path\");\n const bytes = tail.bytes - removedBytes + extraBytes;\n if (!Number.isSafeInteger(bytes) || bytes < 0 || bytes > 4_194_304) work.fail(\"directory stack exceeds 4194304 UTF-8 bytes\");\n await work.charge(length);\n const entries = new Array<string>(length);\n for (let index = 0; index < length; index++) entries[index] = entry(index);\n return { entries, bytes };\n };\n const publish = async (next: NonNullable<State[\"directoryStack\"]>): Promise<void> => {\n await work.flushWork();\n state.directoryStack = next;\n };\n const cd = async (path: string): Promise<number> => {\n await work.flushWork();\n return this.changeDirectory(context, state, [path], diagnose, {\n name: command,\n onCwdPublished() { state.directoryStackCwdPublication = Symbol(); },\n async emit(text) { await work.emit(text); await work.flushOutput(); },\n });\n };\n const display = async (index?: number): Promise<void> => {\n await work.display(state.cwd, state.directoryStack?.entries ?? [], { long, lines, verbose, ...(index !== undefined ? { index } : {}) }, state.variables.HOME);\n };\n try {\n for (let offset = 0; offset < args.length; offset++) {\n const token = args[offset]!;\n const bytes = await field(token);\n if (token === \"--\") {\n if (command === \"pushd\" && selected === undefined && offset + 1 < args.length) {\n target = args[offset + 1]!;\n targetBytes = await field(target);\n if (!noCd && offset + 2 < args.length) work.fail(\"too many arguments\");\n }\n break;\n }\n if (command === \"dirs\" && [\"-c\", \"-l\", \"-p\", \"-v\"].includes(token)) {\n if (token === \"-c\") clear = true;\n if (token === \"-l\") long = true;\n if (token === \"-p\") lines = true;\n if (token === \"-v\") verbose = true;\n continue;\n }\n if (command !== \"dirs\" && token === \"-n\") { noCd = true; continue; }\n if ((token.startsWith(\"+\") || token.startsWith(\"-\")) && !(command === \"pushd\" && token === \"-\")) {\n const number = await work.number(token);\n selected = token.startsWith(\"+\") ? number : BigInt(count) - number;\n if (command === \"pushd\") boundedIndex(selected);\n continue;\n }\n if (command === \"popd\" && token === \"\") break;\n if (command !== \"pushd\") work.fail(\"invalid directory stack argument\", 2);\n if (selected === undefined) {\n target = token;\n targetBytes = bytes;\n if (!noCd && offset + 1 < args.length) work.fail(\"too many arguments\");\n }\n break;\n }\n if (command === \"dirs\") {\n if (clear) await publish({ entries: [], bytes: 0 });\n else await display(selected === undefined ? undefined : boundedIndex(selected));\n } else if (command === \"pushd\") {\n if (selected !== undefined) {\n const index = boundedIndex(selected);\n if (!(noCd && index === 0)) {\n const cwd = state.cwd;\n const at = (fullIndex: number): string => fullIndex === 0 ? cwd : tail.entries[fullIndex - 1]!;\n const next = await plan(count, index === 0 ? undefined : index - 1, index === 0 ? undefined : cwd, undefined,\n slot => at((index + slot + 1) % (count + 1)));\n await publish(next);\n if (!noCd) {\n const status = await cd(at(index));\n if (status !== 0) return status;\n await display();\n }\n }\n } else if (target !== undefined) {\n const saved = noCd ? target : state.cwd;\n const next = await plan(count + 1, undefined, saved, noCd ? targetBytes : undefined,\n slot => slot === 0 ? saved : tail.entries[slot - 1]!);\n if (!noCd) {\n const status = await cd(target);\n if (status !== 0) return status;\n }\n await publish(next);\n await display();\n } else if (!noCd) {\n if (!count) work.fail(\"no other directory\");\n const cwd = state.cwd;\n const next = await plan(count, 0, cwd, undefined, slot => slot === 0 ? cwd : tail.entries[slot]!);\n await publish(next);\n const status = await cd(tail.entries[0]!);\n if (status !== 0) return status;\n await display();\n }\n } else {\n const index = boundedIndex(selected ?? 0n);\n if (!count) work.fail(\"directory stack empty\");\n const removed = Math.max(0, index - 1);\n const next = await plan(count - 1, removed, undefined, undefined,\n slot => tail.entries[slot < removed ? slot : slot + 1]!);\n if (index === 0 && !noCd) {\n const status = await cd(tail.entries[0]!);\n if (status !== 0) return status;\n }\n await publish(next);\n await display();\n }\n return 0;\n } finally {\n await work.flushWork();\n }\n }\n\n private async shoptBuiltin(context: CommandContext & IO, state: State): Promise<number> {\n let print = false;\n let quiet = false;\n let set = false;\n let unset = false;\n let index = 0;\n for (; index < context.args.length; index++) {\n this.signal.throwIfAborted();\n const option = context.args[index]!;\n if (option === \"--\") { index++; break; }\n if (!option.startsWith(\"-\") || option === \"-\") break;\n for (const flag of option.slice(1)) {\n this.signal.throwIfAborted();\n if (flag === \"p\") print = true;\n else if (flag === \"q\") quiet = true;\n else if (flag === \"s\") set = true;\n else if (flag === \"u\") unset = true;\n else {\n await this.diagnostic(context, `shopt: ${option.startsWith(\"--\") ? option : `-${flag}`}: unsupported option`);\n await writeDiagnostic(context.stderr, \"shopt: usage: shopt [-pqsu] [--] [dotglob ...]\\n\");\n return 2;\n }\n }\n }\n if (set && unset) {\n await this.diagnostic(context, \"shopt: cannot set and unset shell options simultaneously\");\n return 1;\n }\n const emit = async (): Promise<void> => {\n if (!quiet) await writeText(context.stdout, print ? `shopt -${state.dotglob ? \"s\" : \"u\"} dotglob\\n` : `dotglob \\t${state.dotglob ? \"on\" : \"off\"}\\n`);\n };\n if (index === context.args.length) {\n if ((!set || state.dotglob) && (!unset || !state.dotglob)) await emit();\n return 0;\n }\n let status = 0;\n for (; index < context.args.length; index++) {\n this.signal.throwIfAborted();\n const name = context.args[index]!;\n if (name !== \"dotglob\") {\n await this.diagnostic(context, `shopt: ${name}: unsupported shell option name (only dotglob is supported)`);\n status = 1;\n } else if (set || unset) state.dotglob = set;\n else {\n await emit();\n if (!state.dotglob) status = 1;\n }\n }\n return status;\n }\n\n private async printfVariable(context: CommandContext & IO, state: State, assignments: Map<string, SavedVariable>): Promise<number> {\n const incoming = getCommandArguments(context);\n let offset = 0;\n let name = \"\";\n let index: ReturnType<typeof literalIndex> | undefined;\n while (incoming.args[offset]?.startsWith(\"-v\")) {\n const option = incoming.args[offset++]!;\n const target = option.slice(2) || incoming.args[offset++];\n if (target === undefined) {\n await writeDiagnostic(context.stderr, \"printf: -v: option requires an argument\\n\");\n return 2;\n }\n const bracket = target.indexOf(\"[\");\n name = bracket < 0 ? target : target.slice(0, bracket);\n if (!/^[a-zA-Z_][a-zA-Z_0-9]*$/u.test(name) || bracket >= 0 && !target.endsWith(\"]\")) {\n await writeDiagnostic(context.stderr, `printf: '${target}': not a valid identifier\\n`);\n return 2;\n }\n index = undefined;\n if (bracket >= 0) {\n if (target[bracket + 1] === \"'\" || target[bracket + 1] === '\"') {\n await writeDiagnostic(context.stderr, `printf: '${target}': unsupported indexed-array subscript\\n`);\n return 2;\n }\n try { index = literalIndex(target.slice(bracket + 1, -1), 0, this.budget.parsing); }\n catch (error) {\n this.signal.throwIfAborted();\n if (!(error instanceof ShellSyntaxError)) throw error;\n await writeDiagnostic(context.stderr, `printf: '${target}': unsupported indexed-array subscript\\n`);\n return 2;\n }\n if (numericIndex(index) === undefined) {\n await writeDiagnostic(context.stderr, \"printf: index outside 0..2147483647\\n\");\n return 2;\n }\n }\n }\n const arguments_ = incoming.slice(offset);\n const format = arguments_.args[0] === \"--\" ? arguments_.args[1] : arguments_.args[0];\n if (format === undefined || arguments_.args[0] !== \"--\" && format.startsWith(\"-\")) {\n await writeDiagnostic(context.stderr, \"printf: usage: printf [-v var] format [arguments]\\n\");\n return 2;\n }\n const allocation = this.budget.values.scope();\n context[invocationScope].register(() => allocation.close());\n const chunks: ShellValue[] = [];\n let length = 0;\n let terminated = false;\n const stdout: ByteSink = { write: async chunk => {\n this.budget.cpuCheckpoint();\n if (chunk.byteLength > this.budget.limits.maxExpansionBytes - length) this.budget.fail(\"maxExpansionBytes\");\n length += chunk.byteLength;\n if (terminated || !chunk.byteLength) return;\n const nul = chunk.indexOf(0);\n const bytes = nul < 0 ? chunk : chunk.subarray(0, nul);\n if (bytes.byteLength) chunks.push(shellValueFromBytes(bytes, allocation));\n terminated = nul >= 0;\n } };\n try {\n let status: number;\n try { status = (await formatPrintf({ ...context, args: arguments_.args, argumentValues: arguments_, stdout })).exitCode; }\n catch (error) {\n this.signal.throwIfAborted();\n if (!(error instanceof UsageError)) throw error;\n await writeDiagnostic(context.stderr, `printf: ${error.message}\\n`);\n status = 1;\n }\n const value = concatShellValues(chunks, allocation);\n this.signal.throwIfAborted();\n if (state.readonlyVariables?.has(name)) {\n await writeDiagnostic(context.stderr, `printf: ${name}: readonly variable\\n`);\n return 1;\n }\n if (index || arrayStore(state)?.get(name)) {\n const decoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true });\n const decode = (bytes: Uint8Array): string | undefined => {\n try { return decoder.decode(bytes); }\n catch (error) {\n this.signal.throwIfAborted();\n if (!(error instanceof TypeError)) throw error;\n return undefined;\n }\n };\n let text = decode(shellValueBytes(value, allocation));\n if (text !== undefined && index && numericIndex(index) !== 0 && !arrayStore(state)?.get(name) && state.variables[name] !== undefined) {\n const previous = stateMonitor(state)!.values.get(name, state.variables[name]!);\n if (decode(shellValueBytes(previous, allocation)) === undefined) text = undefined;\n }\n if (text === undefined) {\n await writeDiagnostic(context.stderr, \"printf: indexed variables do not support non-UTF-8 bytes\\n\");\n return 1;\n }\n if (index) await this.arrayAssignment({ kind: \"element\", name, index, append: false, value: { offset: 0, parts: [{ kind: \"text\", value: text, quoted: true }] } }, state, context);\n else await this.assignVariable(state, name, text);\n } else this.writeVariable(state, name, value);\n const previous = assignments.get(name);\n if (previous) {\n if (!previous.exported) state.exported.delete(name);\n await this.discardVariable(previous);\n assignments.delete(name);\n }\n return status;\n } finally { allocation.close(); }\n }\n\n async builtin(context: CommandContext & IO, state: State, assignments: Map<string, SavedVariable>, diagnose?: (error: unknown, diagnostic: string) => void, suppressSpecial = false): Promise<number | undefined> {\n const { command, args, stdout, stderr } = context;\n if (command === \":\" || command === \"true\") return 0;\n if (command === \"false\") return 1;\n if (command === \"shopt\") return this.shoptBuiltin(context, state);\n if (command === \"let\") return this.letBuiltin(context, state);\n if (command === \"getopts\") return this.getoptsBuiltin(context, state);\n if (command === \"pushd\" || command === \"dirs\" || command === \"popd\") return this.directoryStackBuiltin(context, state, diagnose);\n if (command === \"pwd\") {\n if (args.some((arg) => arg !== \"-L\" && arg !== \"-P\")) { await writeDiagnostic(stderr, \"pwd: invalid option\\n\"); return 2; }\n const path = args.at(-1) === \"-P\" ? await this.fs.realpath(state.cwd, { signal: this.signal }) : state.cwd;\n await writeText(stdout, `${path}\\n`);\n return 0;\n }\n if (command === \"cd\") return this.changeDirectory(context, state, args, diagnose);\n if (command === \"set\") {\n if (state.profile === \"bash\" && args.length) return this.setOptions(context, state);\n let index = 0;\n let positionals = false;\n while (index < args.length) {\n const option = args[index]!;\n if (option === \"--\") { index++; positionals = true; break; }\n if (option === \"-\") { index++; positionals = index < args.length; break; }\n const flags = /^[-+]([eu]*o|[eu]+)$/u.exec(option)?.[1];\n const named = flags?.endsWith(\"o\");\n const name = named ? args[index + 1] : undefined;\n if (flags && (!named || name === \"pipefail\" || name === \"errexit\" || name === \"nounset\")) {\n const enabled = option.startsWith(\"-\");\n for (const flag of flags) {\n if (flag === \"e\" || flag === \"o\" && name === \"errexit\") state.errexit = enabled;\n else if (flag === \"u\" || flag === \"o\" && name === \"nounset\") state.nounset = enabled;\n else if (flag === \"o\" && name === \"pipefail\") state.pipefail = enabled;\n }\n index += named ? 2 : 1;\n continue;\n }\n if (/^[+-]/u.test(option)) {\n await writeDiagnostic(stderr, \"set: unsupported shell option; supported forms are +/- e/u clusters, -- arguments and terminal o with pipefail, errexit or nounset\\n\");\n if (state.profile === \"sh\" && suppressSpecial) return 2;\n throw new Flow(\"exit\", 2);\n }\n positionals = true;\n break;\n }\n if (positionals) { this.replacePositionals(state, getCommandArguments(context).values.slice(index)); state.positionalSetVersion = (state.positionalSetVersion ?? 0) + 1; }\n if (args.length) return 0;\n await writeDiagnostic(stderr, \"set: supported forms are +/- e/u clusters, -- arguments and terminal o with pipefail, errexit or nounset\\n\");\n return 2;\n }\n if (command === \"shift\") {\n const count = args[0] === undefined ? 1 : Number(args[0]);\n if (args.length > 1 || !Number.isSafeInteger(count) || count < 0 || count > state.positional.length) return 1;\n this.replacePositionals(state, this.positionalValues(state).slice(count));\n return 0;\n }\n if (command === \"export\" || command === \"local\" || command === \"readonly\") {\n const declarationArgs = [...args];\n let indexedLocal = false;\n if (command === \"local\") {\n const options = localDeclarationOptions(declarationArgs, this.signal);\n if (options.error !== undefined) {\n await writeDiagnostic(stderr, `local: ${options.error}: unsupported option\\n`);\n return 2;\n }\n indexedLocal = options.indexed;\n declarationArgs.splice(0, options.offset);\n if (indexedLocal && declarationArgs.length === 0) {\n await writeDiagnostic(stderr, \"local: -a requires a variable name\\n\");\n return 2;\n }\n }\n if (command === \"readonly\") {\n while (declarationArgs[0]?.startsWith(\"-\")) {\n const option = declarationArgs.shift();\n if (option === \"--\") break;\n if (option !== \"-p\") { await writeDiagnostic(stderr, `readonly: ${option}: unsupported option\\n`); return 2; }\n }\n }\n const locals = state.locals.at(-1);\n if (command === \"local\" && !locals) { await writeDiagnostic(stderr, \"local: not in a function\\n\"); return 1; }\n let status = 0;\n if (!declarationArgs.length) {\n const names = command === \"readonly\" ? state.readonlyVariables ?? [] : state.exported;\n for (const name of names) if (arrayStore(state)?.get(name)) { await this.diagnostic(context, \"indexed array: listing indexed bindings is unsupported\"); return 2; }\n const prefix = state.profile === \"sh\" ? command : command === \"readonly\" ? \"declare -r\" : \"declare -x\";\n for (const name of [...names].sort()) await writeText(stdout, `${prefix} ${name}=${JSON.stringify(state.variables[name] ?? \"\")}\\n`);\n }\n const declarationValues = getCommandArguments(context).values;\n const declarationOffset = args.length - declarationArgs.length;\n for (let declarationIndex = 0; declarationIndex < declarationArgs.length; declarationIndex++) {\n const arg = declarationArgs[declarationIndex]!;\n const match = /^([a-zA-Z_][a-zA-Z_0-9]*)(?:=(.*))?$/su.exec(arg);\n if (!match) { await this.diagnostic(context, `${command}: \\`${arg}': not a valid identifier`); status = 1; continue; }\n const name = match[1]!;\n if (state.readonlyVariables?.has(name) && (match[2] !== undefined || command === \"local\")) {\n await this.diagnostic(context, `${name}: readonly variable`); status = 1; continue;\n }\n if (arrayStore(state)?.get(name) && command === \"export\") {\n await this.diagnostic(context, \"indexed array: indexed binding cannot be exported\"); status = 1; continue;\n }\n if (command === \"local\" && indexedLocal) {\n if (controlNames.has(name)) throw new ArrayFailure(\"control binding cannot be indexed\");\n if (state.exported.has(name)) throw new ArrayFailure(\"exported binding cannot be indexed\");\n const existingLocal = locals!.get(name);\n const saved = existingLocal ? undefined : assignments.get(name) ?? saveVariable(state, name);\n let operation: ArrayOwner | undefined;\n let holding: ReturnType<ArrayOwner[\"hold\"]> | undefined;\n let shadow: IndexedBinding | undefined;\n let preparedExisting = false;\n let preparedSaved = false;\n let published = false;\n let primaryPresent = false;\n let primary: unknown;\n try {\n if (existingLocal && !typedSavedVariables.has(existingLocal)) {\n preparedExisting = true;\n await this.prepareVariable(state, name, existingLocal, true);\n }\n if (saved && !typedSavedVariables.has(saved)) {\n preparedSaved = true;\n await this.prepareVariable(state, name, saved);\n }\n const store = requireArrays(state);\n operation = ArrayOwner.create(store.owner.ledger, store.owner);\n holding = store.owner.hold();\n const watch = await store.watch(name, operation, this.signal);\n const tickets = operation.reserve({ generation: true, version: true, epoch: true, work: 8 });\n const prepared = await store.prepareName(name, operation, this.signal);\n const current = store.get(name);\n shadow = !saved && current ? await current.copy(this.signal) : IndexedBinding.create(store.owner);\n const value = match[2] ?? (!saved && !current && Object.hasOwn(state.variables, name) ? state.variables[name] : undefined);\n if (value !== undefined) {\n const token = await textToken(shadow.owner, value, this.signal);\n try { shadow.insert(0, token); } catch (error) { token.release(); throw error; }\n }\n this.signal.throwIfAborted();\n if (state.readonlyVariables?.has(name)) throw new ArrayFailure(\"readonly binding\");\n if (!watch.valid()) throw new ArrayFailure(\"stale binding\");\n let released: Promise<void> | undefined;\n stateMonitor(state)!.publish(tickets, name, () => {\n if (saved) locals!.set(name, saved);\n delete state.variables[name];\n released = store.publish(name, shadow!, tickets, prepared);\n });\n shadow = undefined;\n published = true;\n watch.close();\n await released;\n assignments.delete(name);\n } catch (error) {\n primaryPresent = true;\n primary = error;\n } finally {\n const cleanup = async (action: () => void | Promise<void>): Promise<void> => {\n try { await action(); }\n catch (error) {\n if (primaryPresent) context[invocationScope].failures.push(error);\n else { primaryPresent = true; primary = error; }\n }\n };\n if (preparedSaved && saved && !locals!.has(name)) await cleanup(() => this.discardVariable(saved));\n if (preparedExisting && existingLocal && !published) await cleanup(() => this.discardVariable(existingLocal));\n await cleanup(() => shadow?.release());\n await cleanup(() => operation?.close());\n await cleanup(() => holding?.release());\n }\n if (primaryPresent) throw primary;\n continue;\n }\n if (command === \"local\" && !locals!.has(name)) {\n const saved = assignments.get(name) ?? saveVariable(state, name);\n if (name === \"PIPESTATUS\" && arrayStore(state)?.get(name)) {\n await this.prepareVariable(state, name, saved);\n const store = requireArrays(state);\n const operation = ArrayOwner.create(store.owner.ledger, store.owner);\n const holding = store.owner.hold();\n try {\n const tickets = operation.reserve({ generation: true, version: true, epoch: true, work: 8 });\n const value = match[2] ?? \"\";\n await textToken(operation, value, this.signal);\n this.signal.throwIfAborted();\n if (state.readonlyVariables?.has(name)) throw new ArrayFailure(\"readonly binding\");\n if (!typedSavedVariables.get(saved)!.watch.valid()) throw new ArrayFailure(\"stale binding\");\n let released: Promise<void> | undefined;\n stateMonitor(state)!.publish(tickets, name, () => {\n locals!.set(name, saved);\n released = store.remove(name, tickets);\n state.variables[name] = value;\n });\n await released;\n } finally { try { await operation.close(); } finally { holding.release(); } }\n assignments.delete(name);\n continue;\n }\n if (arrayStore(state)?.get(name)) {\n await this.prepareVariable(state, name, saved);\n const store = requireArrays(state);\n const operation = ArrayOwner.create(store.owner.ledger, store.owner);\n const holding = store.owner.hold();\n let shadow: IndexedBinding | undefined;\n try {\n const tickets = operation.reserve({ generation: true, version: true, epoch: true, work: 8 });\n shadow = IndexedBinding.create(store.owner);\n if (match[2] !== undefined) {\n const token = await textToken(shadow.owner, match[2], this.signal);\n try { shadow.insert(0, token); } catch (error) { token.release(); throw error; }\n }\n this.signal.throwIfAborted();\n if (state.readonlyVariables?.has(name)) throw new ArrayFailure(\"readonly binding\");\n if (!typedSavedVariables.get(saved)!.watch.valid()) throw new ArrayFailure(\"stale binding\");\n let released: Promise<void> | undefined;\n stateMonitor(state)!.publish(tickets, name, () => {\n locals!.set(name, saved);\n released = store.publish(name, shadow!, tickets);\n });\n shadow = undefined;\n await released;\n } finally { try { await shadow?.release(); await operation.close(); } finally { holding.release(); } }\n assignments.delete(name);\n continue;\n }\n if (guestArrays(state)) await this.prepareVariable(state, name, saved);\n locals!.set(name, saved);\n if (!assignments.has(name) && match[2] === undefined) {\n if (name === \"PIPESTATUS\") state.variables[name] = \"\";\n else delete state.variables[name];\n }\n if (name === \"OPTIND\") {\n state.getopts ??= cloneGetoptsBinding(state);\n state.getopts.integer = false;\n }\n }\n if (match[2] !== undefined && arrayStore(state)?.get(name)) {\n await this.arrayZero(state, name, async () => match[2]!, false, command === \"readonly\");\n assignments.delete(name);\n continue;\n }\n if (match[2] !== undefined) {\n const original = declarationValues[declarationOffset + declarationIndex]!;\n const value = typeof original === \"string\" ? match[2] : shellValueFromBytes(shellValueBytes(original, context[valueScope]).subarray(name.length + 1), context[valueScope]);\n this.writeVariable(state, name, value);\n }\n else if (command === \"local\" && name === \"OPTIND\") this.syncGetopts(state);\n if (command === \"export\") state.exported.add(name);\n if (command === \"readonly\") { state.readonlyVariables ??= new Set(); state.readonlyVariables.add(name); }\n const previous = assignments.get(name);\n if (previous && locals?.get(name) !== previous) previous.heldValue?.release();\n assignments.delete(name);\n }\n return status;\n }\n if (command === \"unset\") {\n let status = 0;\n for (const name of args) {\n const selected = /^([a-zA-Z_][a-zA-Z_0-9]*)\\[(.*)\\]$/su.exec(name);\n if (selected) {\n const base = selected[1]!;\n const selector = selected[2]!;\n if (state.readonlyVariables?.has(base)) { await this.diagnostic(context, \"indexed array: readonly binding\"); status = 1; continue; }\n if (selector === \"@\" || selector === \"*\") await this.unsetIndexed(state, base, \"members\");\n else {\n let index: number | undefined;\n try { index = numericIndex(literalIndex(selector, 0, this.budget.parsing)); }\n catch (error) {\n this.signal.throwIfAborted();\n if (error instanceof ShellLimitError) throw error;\n await this.diagnostic(context, \"indexed array: unsupported subscript\"); status = 2; continue;\n }\n if (index === undefined) { await this.diagnostic(context, \"indexed array: index outside 0..2147483647\"); status = 1; continue; }\n await this.unsetIndexed(state, base, index);\n }\n continue;\n }\n if (!/^[a-zA-Z_][a-zA-Z_0-9]*$/u.test(name)) { await writeDiagnostic(stderr, `unset: ${name}: not a valid identifier\\n`); status = 1; continue; }\n if (state.readonlyVariables?.has(name)) { await this.diagnostic(context, `unset: ${name}: cannot unset: readonly variable`); status = 1; continue; }\n if (name === \"PATH\") state.pathUnset = true;\n if (arrayStore(state)?.get(name)) await this.unsetIndexed(state, name);\n else this.unsetVariable(state, name);\n if (state.profile === \"sh\") assignments.delete(name);\n }\n return status;\n }\n if (command === \"read\") {\n const names = [...args];\n let raw = false;\n let count: number | undefined;\n let exact = false;\n let delimiter: number | undefined;\n let invalid = false;\n while (names[0]?.startsWith(\"-\") && names[0] !== \"--\" && names[0] !== \"-\") {\n const option = names.shift()!;\n for (let index = 1; index < option.length; index++) {\n const flag = option[index];\n if (flag === \"r\") { raw = true; continue; }\n if (flag !== \"n\" && flag !== \"N\" && flag !== \"d\") { invalid = true; break; }\n if (flag === \"N\") exact = true;\n const value = option.slice(index + 1) || names.shift();\n if (value === undefined) invalid = true;\n else if (flag === \"d\") delimiter = new TextEncoder().encode(value)[0] ?? 0;\n else if (exact && (!/^[ \\t]*[+-]?\\d+[ \\t]*$/u.test(value) || !Number.isSafeInteger(Number(value)) || Number(value) < 0)) {\n const diagnosticIO: IO = context;\n await writeDiagnostic(stderr, `${diagnosticIO.scriptName ?? \"shell\"}: line ${diagnosticIO.diagnosticLine ?? 1}: read: ${value}: invalid ${/^[+-]?0[xX]/u.test(value) ? \"hex \" : \"\"}number\\n`);\n return 1;\n }\n else if (!exact && (!/^\\d+$/u.test(value) || !Number.isSafeInteger(Number(value)))) invalid = true;\n else count = Number(value);\n break;\n }\n if (invalid) break;\n }\n if (names[0] === \"--\") names.shift();\n const invalidName = names.find(name => !/^[a-zA-Z_][a-zA-Z_0-9]*$/u.test(name));\n if (exact && !invalid && invalidName !== undefined) {\n const diagnosticIO: IO = context;\n await writeDiagnostic(stderr, `${diagnosticIO.scriptName ?? \"shell\"}: line ${diagnosticIO.diagnosticLine ?? 1}: read: \\`${invalidName}': not a valid identifier\\n`);\n return 1;\n }\n if (invalid || names.some((name) => !/^[a-zA-Z_][a-zA-Z_0-9]*$/u.test(name))) {\n await writeDiagnostic(stderr, \"read: invalid variable name or unsupported option\\n\");\n return 2;\n }\n const input = context.stdin instanceof ShellInput ? context.stdin : new ShellInput(context.stdin, this.budget, this.signal);\n const line = count === 0 && context.stdin === closedSource ? { value: \"\", escaped: new Set<number>(), terminated: false }\n : await input.line(raw, count === undefined && delimiter === undefined ? undefined : {\n ...(count === undefined ? {} : { count }), ...(delimiter === undefined ? {} : { delimiter }), byteCount: byteLocale(state.variables), exact,\n });\n if (!names.length) {\n if (state.readonlyVariables?.has(\"REPLY\")) { await this.diagnostic(context, \"REPLY: readonly variable\"); return 1; }\n this.writeVariable(state, \"REPLY\", line.value);\n }\n else {\n const separators = exact ? \"\" : state.variables.IFS ?? \" \\t\\n\";\n let end = 0;\n let offset = 0;\n let point = 0;\n for (const character of line.value) {\n offset += character.length;\n if (line.escaped.has(point) || !separators.includes(character) || !\" \\t\\n\".includes(character)) end = offset;\n point++;\n }\n let position = 0;\n point = 0;\n const separator = (): boolean => position < end && !line.escaped.has(point) && separators.includes(String.fromCodePoint(line.value.codePointAt(position)!));\n const whitespace = (): boolean => separator() && \" \\t\\n\".includes(line.value[position]!);\n const advance = (): void => { position += line.value.codePointAt(position)! > 0xffff ? 2 : 1; point++; };\n while (position < end && whitespace()) advance();\n const fields: { start: number; end: number }[] = [];\n while (position < end && fields.length < names.length) {\n const start = position;\n while (position < end && !separator()) advance();\n fields.push({ start, end: position });\n while (position < end && whitespace()) advance();\n if (position < end && separator()) advance();\n while (position < end && whitespace()) advance();\n }\n for (let index = 0; index < names.length; index++) {\n if (state.readonlyVariables?.has(names[index]!)) {\n await this.diagnostic(context, `${names[index]}: readonly variable`);\n return index === names.length - 1 ? 1 : 2;\n }\n const field = fields[index];\n await this.assignVariable(state, names[index]!, field ? line.value.slice(field.start, index === names.length - 1 && position < end ? end : field.end) : \"\");\n }\n }\n return line.terminated ? 0 : 1;\n }\n if (command === \"exit\" || command === \"return\") {\n if (command === \"return\" && state.functionDepth === 0 && !state.sourceDepth) { await writeDiagnostic(stderr, \"return: not in a function\\n\"); return 1; }\n if (args.length > 1) { await writeDiagnostic(stderr, `${command}: too many arguments\\n`); return 1; }\n if (args[0] !== undefined && !/^[+-]?\\d+$/u.test(args[0])) {\n await writeDiagnostic(stderr, `${command}: ${args[0]}: numeric argument required\\n`);\n throw completedExit(2, command);\n }\n const status = args[0] === undefined ? state.status : Number((BigInt(args[0]) % 256n + 256n) % 256n);\n throw completedExit(status, command);\n }\n if (command === \"break\" || command === \"continue\") {\n const levels = args[0] === undefined ? 1 : Number(args[0]);\n if (args.length > 1 || !Number.isSafeInteger(levels) || levels < 1) { await writeDiagnostic(stderr, `${command}: invalid loop count\\n`); return 1; }\n if (!state.loopDepth) { await writeDiagnostic(stderr, `${command}: only meaningful in a loop\\n`); return 0; }\n throw completedExit(0, command, Math.min(levels, state.loopDepth));\n }\n return undefined;\n }\n\n async words(words: readonly Word[], state: State, io: IO, declaration = false): Promise<string[]> {\n return (await this.valueWords(words, state, io, declaration)).map(shellValueText);\n }\n\n private async valueWords(words: readonly Word[], state: State, io: IO, declaration = false): Promise<ShellValue[]> {\n const fields: ShellValue[] = [];\n for (const word of words) {\n const values = await this.valueWord(word, state, io, !(declaration && this.assignment(word)), false, false, false, undefined, true);\n if (values.length > this.budget.limits.maxExpansionFields - fields.length) this.budget.fail(\"maxExpansionFields\");\n for (const value of values) fields.push(value);\n }\n return fields;\n }\n\n async part(part: Exclude<WordPart, { kind: \"text\" }>, state: State, io: IO, hereString = false): Promise<string> {\n return shellValueText(await this.valuePart(part, state, io, hereString));\n }\n\n private async valuePart(part: Exclude<WordPart, { kind: \"text\" }>, state: State, io: IO, hereString = false): Promise<ShellValue> {\n const binding = part.kind === \"variable\" ? arrayStore(state)?.get(part.name) : undefined;\n const holding = binding ? requireArrays(state).owner.hold() : undefined;\n const selector = getArraySelector(part);\n const index = selector?.kind === \"element\" ? numericIndex(selector.index) : 0;\n const token = index === undefined || selector?.kind === \"members\" ? undefined : binding?.values.get(index)?.text;\n token?.retain();\n try {\n const value = await this.partValue(part, state, io, hereString);\n if (binding) await textToken(requireArrays(state).owner, shellValueText(value), this.signal);\n return value;\n } finally { token?.release(); holding?.release(); }\n }\n\n private parameterOperandIO(word: Word, state: State, io: IO): IO {\n this.signal.throwIfAborted();\n const parameterDepth = (io.parameterDepth ?? 0) + 1;\n if (state.depth + parameterDepth > 64) throw new ShellSyntaxError(\"Syntax nesting exceeds 64\", word.offset);\n return { ...io, parameterDepth };\n }\n\n private async partValue(part: Exclude<WordPart, { kind: \"text\" }>, state: State, io: IO, hereString: boolean): Promise<ShellValue> {\n this.signal.throwIfAborted();\n if (part.kind === \"failed-substitution\") {\n if (state.depth >= this.budget.limits.maxSubstitutionDepth) this.budget.fail(\"maxSubstitutionDepth\");\n await writeDiagnostic(io.stderr, part.diagnostic);\n state.status = state.substitutionStatus = 2;\n return \"\";\n }\n if (part.kind === \"arithmetic\") {\n try {\n return String(evaluatePositionalArithmetic(part.expression, {\n parseBudget: this.budget.parsing,\n positional: state.positional, arg0: state.arg0 ?? \"virtual-bash\", owner: arrayStore(state)?.owner,\n maximumBytes: this.budget.limits.maxExpansionBytes,\n checkpoint: () => this.signal.throwIfAborted(),\n requireParameter: (name, value) => this.requireParameter(value, name, state, io, part.line),\n limit: () => this.budget.fail(\"maxExpansionBytes\"),\n }, (prepared) => evaluateArithmetic(prepared, this.arithmeticVariables(state, io.diagnosticLine ?? part.line), this.budget.parsing)));\n }\n catch (error) { this.rethrowArithmeticControl(error); throw new ExpansionFailure(message(error, this.budget.onInternalError), io.diagnosticLine ?? part.line); }\n }\n if (part.kind === \"substitution\") {\n if (state.depth >= this.budget.limits.maxSubstitutionDepth) this.budget.fail(\"maxSubstitutionDepth\");\n const parameterDepth = io.parameterDepth ?? 0;\n if (parameterDepth > 0 && state.depth + parameterDepth + 1 > 64) throw new ShellSyntaxError(\"Syntax nesting exceeds 64\", 0);\n const capture = new Capture();\n const child = await cloneState(state, this.signal);\n child.isolated = true;\n if (state.profile !== \"sh\") child.errexit = false;\n for (const [name, value] of state.redirectAssignments ?? []) {\n this.writeVariable(child, name, value);\n child.exported.add(name);\n }\n delete child.redirectAssignments;\n child.depth++;\n child.loopDepth = 0;\n const pipeline = part.script.lists.length === 1 && part.script.lists[0]!.pipelines.length === 1 ? part.script.lists[0]!.pipelines[0] : undefined;\n const command = pipeline && !pipeline.negate && pipeline.commands.length === 1 ? pipeline.commands[0] : undefined;\n const fileShortcut = command?.kind === \"simple\" && command.words.length === 0 && command.redirects.length === 1 && command.redirects[0]!.operator === \"<\";\n const warningLine = io.substitutionDiagnosticLine ?? io.diagnosticLine ?? part.line;\n const substitutionDiagnosticLines = new Map<Command, number>();\n for (const [command, line] of part.script.printedLines ?? []) substitutionDiagnosticLines.set(command,\n part.sourceLine === undefined ? warningLine + (command.line ?? part.line) - part.line : warningLine + line - 1);\n const captureIO = { ...isolateIO(io), substitutionDiagnosticLines, diagnosticOffset: (io.diagnosticLine ?? part.line) - (part.sourceLine ?? part.line), stdout: this.budget.sink(capture, this.signal) };\n try { state.substitutionStatus = fileShortcut ? await this.runCommandIsolated(command, child, captureIO, true) : await this.run(part.script, child, captureIO); }\n finally { stateMonitor(child)?.closeValues(); }\n state.status = state.substitutionStatus;\n const bytes = capture.bytes();\n if (bytes.includes(0)) await writeDiagnostic(io.stderr, `${io.scriptName ?? \"shell\"}: line ${warningLine}: warning: command substitution: ignored null byte in input\\n`);\n let length = 0;\n for (const byte of bytes) if (byte !== 0) bytes[length++] = byte;\n while (length && bytes[length - 1] === 10) length--;\n const sanitized = bytes.subarray(0, length);\n try { return new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(sanitized); }\n catch (error) {\n if (!(error instanceof TypeError) || (error as NodeJS.ErrnoException).code !== \"ERR_ENCODING_INVALID_ENCODED_DATA\") throw error;\n return shellValueFromBytes(sanitized, io[valueScope]);\n }\n }\n const selector = getArraySelector(part);\n if (selector) {\n const store = requireArrays(state);\n const binding = store.get(part.name);\n if (selector.kind === \"element\") {\n const index = numericIndex(selector.index);\n if (index === undefined) throw new ArrayFailure(\"index outside 0..2147483647\");\n const value = binding ? binding.get(index) : index === 0 ? state.variables[part.name] : undefined;\n this.requireParameter(value, `${part.name}[${selector.index}]`, state, io, part.line);\n return part.length ? this.parameterLength(value ?? \"\") : value ?? \"\";\n }\n if (part.length) return String(binding?.values.size ?? (state.variables[part.name] === undefined ? 0 : 1));\n const values = await this.arrayMembers(part.name, state);\n return this.arrayJoin(store.owner, values, Array.from(state.variables.IFS ?? \" \")[0] ?? \"\");\n }\n let value = part.name === \"?\" ? String(state.status)\n : part.name === \"-\" ? `${state.errexit ? \"e\" : \"\"}${state.nounset ? \"u\" : \"\"}${state.braceexpand !== false ? \"B\" : \"\"}`\n : part.name === \"#\" ? String(state.positional.length)\n : part.name === \"@\" || part.name === \"*\" ? state.positional.join(hereString && (part.name === \"@\" || !part.quoted) ? \" \" : Array.from(state.variables.IFS ?? \" \")[0] ?? \"\")\n : /^0+$/u.test(part.name) ? state.arg0 ?? \"virtual-bash\"\n : /^\\d+$/u.test(part.name) ? state.positional[Number(part.name) - 1]\n : this.variable(state, part.name);\n let retained: ShellValue | undefined = value;\n if (!part.length && value !== undefined) {\n if (/^[a-zA-Z_][a-zA-Z_0-9]*$/u.test(part.name) && !arrayStore(state)?.get(part.name)) retained = stateMonitor(state)?.values.get(part.name, value) ?? value;\n else if (/^[1-9][0-9]*$/u.test(part.name)) retained = stateMonitor(state)?.positionals.get(String(Number(part.name) - 1), value) ?? value;\n else if (part.name === \"@\" || part.name === \"*\") {\n const separator = hereString && (part.name === \"@\" || !part.quoted) ? \" \" : Array.from(state.variables.IFS ?? \" \")[0] ?? \"\";\n const values = this.positionalValues(state);\n retained = concatShellValues(values.flatMap((entry, index) => index ? [separator, entry] : [entry]), io[valueScope]);\n }\n }\n if (part.substring) {\n this.requireParameter(value, part.name, state, io, part.line);\n return this.substring(part, value, state, io);\n }\n if (part.operator) {\n if ([\"#\", \"##\", \"%\", \"%%\"].includes(part.operator) || part.operator.startsWith(\"/\")) {\n this.requireParameter(value, part.name, state, io, part.line);\n return this.parameterPattern(part, value ?? \"\", state, io, hereString);\n }\n const missing = value === undefined || (part.operator.startsWith(\":\") && value === \"\");\n const operator = part.operator.at(-1)!;\n if ((operator === \"+\" && !missing) || (operator !== \"+\" && missing)) {\n const operandIO = this.parameterOperandIO(part.alternate!, state, io);\n let alternate: string;\n if (operator === \"=\" && arrayStore(state)?.get(part.name)) {\n alternate = \"\";\n await this.arrayZero(state, part.name, async () => {\n alternate = await this.arrayJoin(requireArrays(state).owner, await this.word(part.alternate!, state, operandIO, false, false, hereString), \"\");\n return alternate;\n });\n value = alternate;\n return part.length ? this.parameterLength(value) : value;\n }\n retained = concatShellValues(await this.valueWord(part.alternate!, state, operandIO, false, false, hereString), io[valueScope]);\n alternate = shellValueText(retained);\n if (operator === \"?\") throw new ParameterExpansionFailure(`${part.name}: ${alternate || (part.operator.startsWith(\":\") ? \"parameter null or not set\" : \"parameter not set\")}`, io.diagnosticLine ?? part.line);\n if (operator === \"=\") {\n if (!/^[a-zA-Z_][a-zA-Z_0-9]*$/u.test(part.name)) throw new PublicDiagnostic(\"Cannot assign special parameter\");\n this.writeVariable(state, part.name, retained);\n }\n value = alternate;\n } else if (operator === \"+\") { value = \"\"; retained = \"\"; }\n } else this.requireParameter(value, part.name, state, io, part.line);\n return part.length ? this.parameterLength(value ?? \"\") : retained ?? \"\";\n }\n\n private async parameterLength(value: string): Promise<string> {\n const limit = this.budget.limits.maxExpansionBytes;\n const work = { remaining: Math.min(Number.MAX_SAFE_INTEGER, limit * 4 + 1024), signal: this.signal, exhausted: (): never => this.budget.fail(\"maxExpansionBytes\") };\n const scanned = await scanString(value, work);\n if (scanned.bytes > limit) this.budget.fail(\"maxExpansionBytes\");\n return String(scanned.count);\n }\n\n async substring(part: Extract<WordPart, { kind: \"variable\" }>, value: string | undefined, state: State, io: IO): Promise<string> {\n const owner = arrayStore(state)?.get(part.name) ? requireArrays(state).owner : undefined;\n const expression = part.substring!;\n const line = io.diagnosticLine ?? part.line;\n if (!expression.offset.parts.length && !expression.length) throw new ExpansionFailure(`${expression.source}: bad substitution`, line);\n if (value === undefined) return \"\";\n const limit = this.budget.limits.maxExpansionBytes;\n if (Buffer.byteLength(value) > limit) this.budget.fail(\"maxExpansionBytes\");\n const scratch = this.budget.values.scope();\n const work = { remaining: Math.min(Number.MAX_SAFE_INTEGER, limit * 4 + 1024), signal: this.signal, exhausted: (): never => this.budget.fail(\"maxExpansionBytes\") };\n try {\n const variables = new Proxy(this.arithmeticVariables(state, line), { get: (target, key) => {\n this.signal.throwIfAborted();\n const value: unknown = Reflect.get(target, key);\n if (typeof value === \"string\" && Buffer.byteLength(value) > limit) this.budget.fail(\"maxExpansionBytes\");\n return value;\n } });\n const arithmetic = async (word: Word): Promise<{ value: bigint; source: string }> => {\n const operandIO = this.parameterOperandIO(word, state, io);\n let source = \"\";\n let bytes = 0;\n let retained: ValueReservation | undefined;\n for (const entry of word.parts) {\n this.signal.throwIfAborted();\n const text = entry.kind === \"text\" ? entry.value : await this.part(entry, state, operandIO);\n bytes += Buffer.byteLength(text);\n if (bytes > limit) this.budget.fail(\"maxExpansionBytes\");\n owner?.reserve({ metadata: 32, payload: bytes, work: text.length + 4 });\n const pending = stringCheckpoint(work, text.length + 1);\n if (pending) await pending;\n const next = scratch.reserve((source.length + text.length) * 2, 0);\n source += text;\n retained?.release();\n retained = next;\n }\n this.signal.throwIfAborted();\n try { return { value: evaluateArithmetic(prepareArithmetic(source, this.budget.parsing), variables, this.budget.parsing), source }; }\n catch (error) {\n this.rethrowArithmeticControl(error);\n throw new ExpansionFailure(`${part.name}: ${message(error, this.budget.onInternalError)}`, line);\n }\n finally { retained?.release(); }\n };\n const offsetExpression = await arithmetic(expression.offset);\n let bytes: Buffer | undefined;\n if (byteLocale(state.variables)) {\n scratch.reserve(Buffer.byteLength(value), 0);\n bytes = Buffer.from(value);\n }\n const size = BigInt(bytes?.byteLength ?? (await scanString(value, work)).count);\n const offset = offsetExpression.value < 0n ? size + offsetExpression.value : offsetExpression.value;\n if (offset < 0n || offset > size) return \"\";\n let end = size;\n if (expression.length) {\n const length = await arithmetic(expression.length);\n end = length.value < 0n ? size + length.value : offset + length.value;\n if (end < offset) throw new ExpansionFailure(`${length.source}: substring expression < 0`, line);\n if (end > size) end = size;\n }\n this.signal.throwIfAborted();\n if (!bytes) {\n const start = (await scanString(value, work, 0, value.length, Number(offset))).end;\n const finish = (await scanString(value, work, start, value.length, Number(end - offset))).end;\n if (finish > start) scratch.reserve((finish - start) * 2, 0);\n return value.slice(start, finish);\n }\n scratch.reserve(Number(end - offset) * 2, 0);\n try { return new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(bytes.subarray(Number(offset), Number(end))); }\n catch { throw new ExpansionFailure(\"substring expansion splits a UTF-8 character in a byte locale\", line); }\n } finally { scratch.close(); }\n }\n\n async parameterPattern(part: Extract<WordPart, { kind: \"variable\" }>, text: string, state: State, io: IO, hereString: boolean): Promise<string> {\n const limit = this.budget.limits.maxExpansionBytes;\n if (Buffer.byteLength(text) > limit) this.budget.fail(\"maxExpansionBytes\");\n const scratch = this.budget.values.scope();\n const work = { remaining: Math.min(Number.MAX_SAFE_INTEGER, limit * 4 + 1024), signal: this.signal, exhausted: (): never => this.budget.fail(\"maxExpansionBytes\"), allocation: scratch };\n try {\n const patternFields = await this.word(part.alternate!, state, this.parameterOperandIO(part.alternate!, state, io), false, true, hereString);\n let patternUnits = 0;\n for (const field of patternFields) {\n const pending = stringCheckpoint(work, field.length + 1);\n if (pending) await pending;\n patternUnits += field.length;\n }\n scratch.reserve(patternUnits * 2, 0);\n const pattern = patternFields.join(\"\");\n const size = (await scanString(text, work)).count;\n const boundaries = await compilePatternBoundaries(pattern, work);\n const operator = part.operator!;\n if (!operator.startsWith(\"/\")) {\n const longest = operator.length === 2;\n const prefix = operator.startsWith(\"#\");\n const ends = await boundaries(text, !longest && prefix, !prefix);\n let boundary = longest === prefix ? text.length : 0;\n for (let length = longest ? size : 0; longest ? length >= 0 : length <= size; length += longest ? -1 : 1) {\n const pending = stringCheckpoint(work);\n if (pending) await pending;\n if (ends[prefix ? 0 : boundary] === (prefix ? boundary : text.length)) {\n const start = prefix ? boundary : 0;\n const end = prefix ? text.length : boundary;\n scratch.reserve((end - start) * 2, 0);\n return text.slice(start, end);\n }\n boundary = longest === prefix ? previousCodePointOffset(text, boundary) : nextCodePointOffset(text, boundary);\n }\n return text;\n }\n scratch.reserve(64, 0);\n const replacements: { value: string; quoted: boolean }[] = [];\n let replacementBytes = 0;\n const replacementIO = part.replacement ? this.parameterOperandIO(part.replacement, state, io) : io;\n for (const [index, entry] of (part.replacement?.parts ?? []).entries()) {\n let value = entry.kind === \"text\" ? entry.value : await this.part(entry, state, replacementIO, hereString);\n if (index === 0 && !entry.quoted && /^~(?:\\/|$)/u.test(value)) {\n const home = state.variables.HOME ?? \"~\";\n scratch.reserve((home.length + value.length - 1) * 2, 0);\n value = home + value.slice(1);\n }\n replacementBytes += Buffer.byteLength(value);\n if (replacementBytes > limit) this.budget.fail(\"maxExpansionBytes\");\n const pending = stringCheckpoint(work, value.length + 1);\n if (pending) await pending;\n scratch.reserve(64 + value.length * 2, 0);\n replacements.push({ value, quoted: entry.quoted });\n }\n if (!pattern && operator !== \"/#\" && operator !== \"/%\") return text;\n let result = \"\";\n let resultBytes = 0;\n let retained: ValueReservation | undefined;\n const append = async (value: string, start = 0, end = value.length): Promise<void> => {\n resultBytes += (await scanString(value, work, start, end)).bytes;\n if (resultBytes > limit) this.budget.fail(\"maxExpansionBytes\");\n if (start === end) return;\n const fragment = scratch.reserve((end - start) * 2, 0);\n const next = scratch.reserve((result.length + end - start) * 2, 0);\n result += value.slice(start, end);\n fragment.release();\n retained?.release();\n retained = next;\n };\n const ends = await boundaries(text, false, operator === \"/%\");\n let position = 0;\n while (position <= text.length) {\n let found = false;\n for (let start = position; start <= text.length; start = nextCodePointOffset(text, start)) {\n if (operator === \"/#\" && start !== 0) break;\n const pending = stringCheckpoint(work);\n if (pending) await pending;\n const end = ends[start]!;\n if (end < 0) {\n if (start === text.length) break;\n continue;\n }\n await append(text, position, start);\n for (const replacement of replacements) {\n if (replacement.quoted) await append(replacement.value);\n else {\n let fragment = 0;\n for (let cursor = 0; cursor < replacement.value.length; cursor++) {\n const pending = stringCheckpoint(work);\n if (pending) await pending;\n if (replacement.value[cursor] !== \"&\") continue;\n await append(replacement.value, fragment, cursor);\n await append(text, start, end);\n fragment = cursor + 1;\n }\n await append(replacement.value, fragment);\n }\n }\n position = end;\n found = true;\n if (operator !== \"//\" || end === text.length) { await append(text, end); return result; }\n if (end === start) {\n position = nextCodePointOffset(text, end);\n await append(text, end, position);\n }\n break;\n }\n if (!found) {\n if (position === 0) return text;\n await append(text, position);\n break;\n }\n }\n return result;\n } finally { scratch.close(); }\n }\n\n async word(word: Word, state: State, io: IO, split = true, pattern = false, hereString = false, conditionalPattern = false, regexAppend?: (text: string, literal: boolean) => void): Promise<string[]> {\n return (await this.valueWord(word, state, io, split, pattern, hereString, conditionalPattern, regexAppend)).map(shellValueText);\n }\n\n private async valueWord(word: Word, state: State, io: IO, split = true, pattern = false, hereString = false, conditionalPattern = false, regexAppend?: (text: string, literal: boolean) => void, braces = split && !pattern && !hereString): Promise<ShellValue[]> {\n if (braces && state.braceexpand !== false && word.parts.some(part => part.kind === \"text\" && !part.quoted && part.value.includes(\"{\"))) {\n const fields: ShellValue[] = [];\n let bytes = 0;\n for await (const expanded of expandBraces(word, this.budget, this.signal)) {\n const values = await this.valueWord(expanded, state, io, split, pattern, hereString, conditionalPattern, regexAppend, false);\n if (values.length > this.budget.limits.maxExpansionFields - fields.length) this.budget.fail(\"maxExpansionFields\");\n for (const value of values) {\n const size = shellValueByteLength(value);\n if (size > this.budget.limits.maxExpansionBytes - bytes) this.budget.fail(\"maxExpansionBytes\");\n bytes += size;\n io[valueScope]?.reserve(32 + (typeof value === \"string\" ? value.length * 2 : 0), 0);\n fields.push(value);\n }\n }\n return fields;\n }\n const arrayOwned = word.parts.some(part => part.kind === \"variable\" && (getArraySelector(part) !== undefined || arrayStore(state)?.get(part.name) !== undefined));\n const owner = arrayOwned ? requireArrays(state).owner : undefined;\n const holding = owner?.hold();\n const scratch = !owner && split && state.variables.IFS !== \"\" && word.parts.some(part => !part.quoted && part.kind !== \"text\")\n ? this.budget.values.scope() : undefined;\n try {\n if (owner) await this.prepareArrayObservers(state, owner);\n owner?.reserve({ metadata: 128 + word.parts.length * 32, allocatedSlots: word.parts.length + 1, work: word.parts.length + 5 });\n scratch?.reserve(word.parts.length * 32, 0);\n const fields: { fragments: ShellValue[]; bytes: boolean; patterns: string[] | undefined; present: boolean }[] = [];\n const addField = (): void => {\n if (fields.length >= this.budget.limits.maxExpansionFields) this.budget.fail(\"maxExpansionFields\");\n scratch?.reserve(32, 0);\n owner?.reserve({ metadata: 32, allocatedSlots: 1, work: 3 });\n fields.push({ fragments: [], bytes: false, patterns: undefined, present: false });\n };\n addField();\n let expansionBytes = 0;\n const append = (value: ShellValue, glob: boolean, present: boolean) => {\n const text = shellValueText(value);\n const size = shellValueByteLength(value);\n if (size > this.budget.limits.maxExpansionBytes - expansionBytes) this.budget.fail(\"maxExpansionBytes\");\n expansionBytes += size;\n const field = fields.at(-1)!;\n let escapes = 0;\n if (!glob) {\n const special = conditionalPattern ? \"\\\\*?[]-^()|+!@\" : \"\\\\*?[]-^\";\n for (const character of text) if (special.includes(character)) escapes++;\n }\n scratch?.reserve(32, 0);\n if (owner) owner.reserve({ payload: size + (escapes ? size + escapes : 0), metadata: 64, work: text.length + 8 });\n if (escapes) {\n scratch?.reserve((field.patterns ? 32 : 32 * (field.fragments.length + 1)) + (text.length + escapes) * 2, 0);\n field.patterns ??= field.fragments.map(shellValueText);\n field.patterns.push(text.replace(conditionalPattern ? /[\\\\*?[\\]\\-^()|+!@]/gu : /[\\\\*?[\\]\\-^]/gu, \"\\\\$&\"));\n } else if (field.patterns) {\n scratch?.reserve(32, 0);\n field.patterns.push(text);\n }\n if (typeof value !== \"string\" || field.bytes) {\n if (!scratch) io[valueScope]?.reserve(32 * (field.bytes ? 1 : field.fragments.length + 1), field.bytes ? 1 : field.fragments.length + 1);\n if (typeof value !== \"string\") io[valueScope]?.hold(value);\n field.bytes = true;\n }\n regexAppend?.(text, !glob);\n field.fragments.push(value);\n field.present ||= present;\n };\n const appendSplit = async (value: ShellValue): Promise<void> => {\n this.budget.cpuCheckpoint();\n if (shellValueByteLength(value) === 0) return;\n const separators = state.variables.IFS ?? \" \\t\\n\";\n const separatorScope = this.budget.values.scope();\n try {\n separatorScope.reserve(64, 0);\n const points = new Set<number>();\n const addSeparator = (point: number): void => {\n if (points.has(point)) return;\n separatorScope.reserve(32, 0);\n points.add(point);\n };\n let asciiSeparators = true;\n const work = this.splitWork ??= { scanned: 0 };\n for (let index = 0; index < separators.length; index++) {\n const unit = separators.charCodeAt(index);\n asciiSeparators &&= unit <= 127;\n addSeparator(unit);\n addSeparator(separators.codePointAt(index)!);\n if (++work.scanned >= 4096) {\n work.scanned = 0;\n await yieldTurn(this.signal);\n }\n }\n let boundary = false;\n for await (const piece of this.splitValue(value, points, asciiSeparators, io, scratch)) {\n const point = typeof piece === \"string\" ? piece.codePointAt(0) : undefined;\n if (typeof piece === \"string\" && point !== undefined && piece.length === (point > 0xffff ? 2 : 1) && points.has(point)) {\n if (!\" \\t\\n\".includes(piece)) {\n fields.at(-1)!.present = true;\n addField();\n } else if (fields.at(-1)!.present) boundary = true;\n } else {\n if (boundary) addField();\n boundary = false;\n append(piece, true, true);\n }\n }\n if (boundary) addField();\n } finally { separatorScope.close(); }\n };\n const parts = word.parts.map((part) => ({ part, splitText: false, io }));\n for (let index = 0; index < parts.length; index++) {\n const { part, splitText, io: partIO } = parts[index]!;\n const quotedPresence = part.quoted && !(arrayOwned && isQuoteMarker(part));\n if (part.kind === \"variable\" && [\"-\", \"+\", \":-\", \":+\"].includes(part.operator ?? \"\") && /^[a-zA-Z_][a-zA-Z_0-9]*$/u.test(part.name)) {\n const value = this.variable(state, part.name);\n const missing = value === undefined || (part.operator!.startsWith(\":\") && value === \"\");\n if (part.operator!.endsWith(\"+\") ? !missing : missing) {\n const operandIO = this.parameterOperandIO(part.alternate!, state, partIO);\n scratch?.reserve(part.alternate!.parts.length * 32, 0);\n const alternate = part.alternate!.parts.map((entry) => ({ part: copyArraySelector(entry, { ...entry, quoted: entry.quoted || part.quoted }), splitText: true, io: operandIO }));\n if (!alternate.length && part.quoted) append(\"\", false, true);\n parts.splice(index + 1, 0, ...alternate);\n continue;\n }\n }\n const selector = getArraySelector(part);\n if (part.kind === \"variable\" && selector?.kind === \"members\" && !part.length && split && (!part.quoted || selector.separator === \"@\")) {\n const members = await this.arrayMembers(part.name, state);\n for (let position = 0; position < members.length; position++) {\n if (position > 0) addField();\n const value = members[position]!;\n if (part.quoted || state.variables.IFS === \"\") append(value, !part.quoted, part.quoted || value.length > 0);\n else await appendSplit(value);\n }\n } else if (part.kind === \"text\" && !splitText) {\n let value: ShellValue = invokedValues.get(part) ?? part.byteValue ?? part.value;\n if (typeof value === \"string\" && index === 0 && !part.quoted && /^~(?:\\/|$)/u.test(value)) value = (state.variables.HOME ?? \"~\") + value.slice(1);\n append(value, !part.quoted, quotedPresence || shellValueByteLength(value) > 0);\n } else if (part.kind === \"variable\" && part.name === \"@\" && part.quoted && !part.operator && split) {\n for (let position = 0; position < state.positional.length; position++) {\n if (position > 0) addField();\n append(stateMonitor(state)?.positionals.get(String(position), state.positional[position]!) ?? state.positional[position]!, false, true);\n }\n if (state.positional.length === 0 && word.parts.every((entry) => (entry.kind === \"text\" && entry.value === \"\") || entry === part)) fields[0]!.present = false;\n } else {\n const value = part.kind === \"text\" ? part.byteValue ?? part.value : await this.valuePart(part, state, partIO, hereString);\n if (part.quoted || !split || state.variables.IFS === \"\") append(value, !part.quoted, quotedPresence || !split || shellValueByteLength(value) > 0);\n else await appendSplit(value);\n }\n if (fields.length > this.budget.limits.maxExpansionFields) this.budget.fail(\"maxExpansionFields\");\n if (owner) await owner.ledger.checkpoint(this.signal);\n }\n const result: ShellValue[] = [];\n let resultBytes = 0;\n for (const field of fields) {\n if (!field.present && split) continue;\n if (scratch && field.fragments.length > 1 && !field.bytes) scratch.reserve(field.fragments.reduce((bytes, value) => bytes + shellValueText(value).length * 2, 0), 0);\n const assembled = concatShellValues(field.fragments, io[valueScope]);\n const projection = shellValueText(assembled);\n if (field.bytes && field.fragments.length > 1 && !field.patterns) {\n scratch?.reserve(field.fragments.length * 32, 0);\n field.patterns = field.fragments.map(shellValueText);\n }\n if (scratch && field.patterns && field.patterns.length > 1) scratch.reserve(field.patterns.reduce((bytes, text) => bytes + text.length * 2, 0), 0);\n const fieldPattern = field.patterns ? field.patterns.join(\"\") : projection;\n const expanded = split ? await this.glob(projection, fieldPattern, state) : [pattern ? fieldPattern : projection];\n for (const text of expanded) {\n if (result.length >= this.budget.limits.maxExpansionFields) this.budget.fail(\"maxExpansionFields\");\n const value = !pattern && expanded.length === 1 && text === projection ? assembled : text;\n const size = shellValueByteLength(value);\n if (size > this.budget.limits.maxExpansionBytes - resultBytes) this.budget.fail(\"maxExpansionBytes\");\n resultBytes += size;\n scratch?.reserve(32, 0);\n owner?.reserve({ metadata: 32, allocatedSlots: 1, work: 3 });\n result.push(value);\n }\n if (result.length > this.budget.limits.maxExpansionFields) this.budget.fail(\"maxExpansionFields\");\n }\n return result;\n } finally { scratch?.close(); holding?.release(); }\n }\n\n private splitWork?: { scanned: number };\n\n private async *splitValue(value: ShellValue, separators: ReadonlySet<number>, asciiSeparators: boolean, io: IO, scratch?: ValueScope): AsyncGenerator<ShellValue> {\n this.budget.cpuCheckpoint();\n const work = this.splitWork ??= { scanned: 0 };\n if (typeof value === \"string\" || !asciiSeparators) {\n const text = shellValueText(value);\n const slice = (start: number, end: number): string => {\n if (start === 0 && end === text.length) return text;\n scratch?.reserve((end - start) * 2, 0);\n return text.slice(start, end);\n };\n let start = 0;\n for (let index = 0; index < text.length;) {\n const point = text.codePointAt(index)!;\n const character = String.fromCodePoint(point);\n const end = index + character.length;\n if (separators.has(point)) {\n if (start < index) yield slice(start, index);\n yield character;\n start = end;\n } else if (end - start >= 4096) {\n yield slice(start, end);\n start = end;\n }\n work.scanned += character.length;\n index = end;\n if (work.scanned >= 4096) {\n work.scanned = 0;\n await yieldTurn(this.signal);\n }\n }\n if (start < text.length) yield slice(start, text.length);\n return;\n }\n const bytes = shellValueBytes(value, io[valueScope]);\n let start = 0;\n for (let index = 0; index < bytes.length; index++) {\n if (++work.scanned >= 4096) {\n work.scanned = 0;\n await yieldTurn(this.signal);\n }\n const byte = bytes[index]!;\n if (byte > 127 || !separators.has(byte)) continue;\n if (start < index) yield shellValueFromBytes(bytes.subarray(start, index), io[valueScope]);\n yield String.fromCharCode(byte);\n start = index + 1;\n }\n if (start < bytes.length) yield start === 0 ? value : shellValueFromBytes(bytes.subarray(start), io[valueScope]);\n }\n\n private positionalValues(state: State): ShellValue[] {\n return state.positional.map((text, index) => stateMonitor(state)?.positionals.get(String(index), text) ?? text);\n }\n\n private replacePositionals(state: State, values: readonly ShellValue[], action?: () => void): void {\n const publish = action ?? (() => { state.positional = values.map(shellValueText); });\n const store = stateMonitor(state)?.positionals;\n if (store) store.replace(values.map((value, index) => [String(index), value] as const), publish);\n else publish();\n }\n\n private admitArguments(values: readonly ShellValue[], allocation: ValueScope): CommandArguments {\n if (!values.some(value => typeof value !== \"string\")) return createCommandArguments(values);\n if (values.length > this.budget.limits.maxExpansionFields) this.budget.fail(\"maxExpansionFields\");\n for (const value of values) if (typeof value !== \"string\") allocation.hold(value);\n return createCommandArguments(values, allocation);\n }\n\n async arrayMembers(name: string, state: State): Promise<string[]> {\n const store = requireArrays(state);\n const holding = store.owner.hold();\n try {\n const binding = store.get(name);\n store.owner.reserve({ metadata: 64, work: 3 });\n if (!binding) {\n const value = state.variables[name];\n if (value === undefined) return [];\n store.owner.reserve({ metadata: 32, allocatedSlots: 1, work: 3 });\n await textToken(store.owner, value, this.signal);\n return [value];\n }\n binding.retain();\n try {\n const indices = await binding.indices(store.owner, this.signal);\n const values: string[] = [];\n for (const index of indices) {\n store.owner.reserve({ metadata: 32, allocatedSlots: 1, work: 4 });\n const value = binding.get(index)!;\n await textToken(store.owner, value, this.signal);\n values.push(value);\n await store.owner.ledger.checkpoint(this.signal);\n }\n return values;\n } finally { await binding.release(); }\n } finally { holding.release(); }\n }\n\n async glob(value: string, pattern: string, state: State): Promise<string[]> {\n if (!/(?:^|[^\\\\])[*?[]/u.test(pattern)) return [value];\n const absolute = pattern.startsWith(\"/\");\n const work: StringWork = { remaining: Math.min(Number.MAX_SAFE_INTEGER, this.budget.limits.maxExpansionBytes * 4 + 1024), signal: this.signal, exhausted: (): never => this.budget.fail(\"maxExpansionBytes\") };\n let candidates = [absolute ? \"/\" : \"\"];\n for (const segment of pattern.split(\"/\").filter((segment) => segment.length > 0)) {\n const next: string[] = [];\n let candidateBytes = 0;\n const addCandidate = (candidate: string): void => {\n const size = Buffer.byteLength(candidate);\n if (size > this.budget.limits.maxExpansionBytes - candidateBytes) this.budget.fail(\"maxExpansionBytes\");\n candidateBytes += size;\n next.push(candidate);\n if (next.length > this.budget.limits.maxExpansionFields) this.budget.fail(\"maxExpansionFields\");\n };\n if (!/(?:^|[^\\\\])[*?[]/u.test(segment)) {\n const literal = segment.replace(/\\\\(.)/gu, \"$1\");\n for (const candidate of candidates) addCandidate(`${candidate}${candidate && candidate !== \"/\" ? \"/\" : \"\"}${literal}`);\n } else {\n const scratch = this.budget.values.scope();\n work.allocation = scratch;\n try {\n const matches = await compilePattern(segment, work);\n for (const candidate of candidates) {\n let entries;\n try {\n const pending = this.fs.readdir(resolvePath(state.cwd, candidate || \".\"), { signal: this.signal });\n entries = arrayStore(state) ? await interruptible(pending, this.signal) : await pending;\n }\n catch (error) { if ([\"ENOENT\", \"ENOTDIR\", \"EACCES\"].includes(errorCode(error) ?? \"\")) continue; throw error; }\n for (const entry of entries) {\n if (entry.name !== \".\" && entry.name !== \"..\" && (state.dotglob || !entry.name.startsWith(\".\") || segment.startsWith(\".\")) && await matches(entry.name)) {\n addCandidate(`${candidate}${candidate && candidate !== \"/\" ? \"/\" : \"\"}${entry.name}`);\n }\n }\n }\n } finally { scratch.close(); }\n }\n candidates = next;\n }\n const found: string[] = [];\n for (const candidate of candidates) {\n try {\n const pending = this.fs.stat(resolvePath(state.cwd, candidate), { signal: this.signal });\n const stat = arrayStore(state) ? await interruptible(pending, this.signal) : await pending;\n if (!value.endsWith(\"/\") || stat.type === \"directory\") found.push(candidate + (value.endsWith(\"/\") ? \"/\" : \"\"));\n } catch (error) { if (![\"ENOENT\", \"ENOTDIR\", \"EACCES\"].includes(errorCode(error) ?? \"\")) throw error; }\n }\n return found.length ? found.sort() : [value];\n }\n}\n", "import { shellValueRetainedBytes } from \"../contracts/value.js\";\nimport type { ShellValue, ValueAllocation, ValueReservation } from \"../contracts/value.js\";\nimport { ShellLimitError } from \"./types.js\";\n\ninterface AllocationRecord {\n bytes: number;\n readonly slots: number;\n references: number;\n object?: object;\n}\n\nexport interface HeldValue {\n readonly value: ShellValue;\n release(): void;\n}\n\nexport class ValueArena {\n readonly #objects = new WeakMap<object, AllocationRecord>();\n readonly #records = new Set<AllocationRecord>();\n #bytes = 0;\n #slots = 0;\n #closed = false;\n\n constructor(readonly maximumBytes: number, readonly maximumSlots: number, readonly checkpoint: () => void, readonly fail: (limit: \"maxExpansionBytes\" | \"maxExpansionFields\") => never = limit => { throw new ShellLimitError(limit); }) {}\n\n get usage(): { bytes: number; slots: number } { return { bytes: this.#bytes, slots: this.#slots }; }\n\n assertOpen(): void {\n this.checkpoint();\n this.assertRetained();\n }\n\n assertRetained(): void {\n if (this.#closed) throw new Error(\"Shell value arena is closed\");\n }\n\n scope(): ValueScope { this.assertOpen(); return new ValueScope(this); }\n\n allocate(bytes: number, slots: number): AllocationRecord {\n this.assertOpen();\n if (!Number.isSafeInteger(bytes) || bytes < 0 || !Number.isSafeInteger(slots) || slots < 0) throw new RangeError(\"Invalid shell value allocation\");\n if (bytes > this.maximumBytes - this.#bytes) this.fail(\"maxExpansionBytes\");\n if (slots > this.maximumSlots - this.#slots) this.fail(\"maxExpansionFields\");\n const record = { bytes, slots, references: 1 };\n this.#bytes += bytes;\n this.#slots += slots;\n this.#records.add(record);\n return record;\n }\n\n grow(record: AllocationRecord, bytes: number): void {\n this.assertOpen();\n if (!this.#records.has(record) || record.object) throw new Error(\"Shell value reservation cannot grow\");\n if (!Number.isSafeInteger(bytes) || bytes < 0) throw new RangeError(\"Invalid shell value allocation\");\n if (bytes > this.maximumBytes - this.#bytes) this.fail(\"maxExpansionBytes\");\n record.bytes += bytes;\n this.#bytes += bytes;\n }\n\n commit(record: AllocationRecord, object: object): void {\n this.assertOpen();\n if (!this.#records.has(record) || record.object || this.#objects.has(object)) throw new Error(\"Shell value reservation is not fresh\");\n record.object = object;\n this.#objects.set(object, record);\n }\n\n release(record: AllocationRecord): void {\n if (!this.#records.has(record)) return;\n if (--record.references) return;\n this.#records.delete(record);\n if (record.object) this.#objects.delete(record.object);\n this.#bytes -= record.bytes;\n this.#slots -= record.slots;\n }\n\n hold(value: ShellValue): HeldValue {\n this.assertOpen();\n if (typeof value === \"string\") {\n const payload = this.allocate(value.length * 2, 0);\n let released = false;\n return { value, release: () => {\n if (released) return;\n released = true;\n this.release(payload);\n } };\n }\n const reference = this.allocate(32, 1);\n let payload: AllocationRecord;\n try {\n const existing = this.#objects.get(value);\n if (existing) { payload = existing; payload.references++; }\n else {\n payload = this.allocate(shellValueRetainedBytes(value), 1);\n try { this.commit(payload, value); }\n catch (error) { this.release(payload); throw error; }\n }\n } catch (error) { this.release(reference); throw error; }\n let released = false;\n return { value, release: () => {\n if (released) return;\n released = true;\n this.release(reference);\n this.release(payload);\n } };\n }\n\n close(): void {\n this.#closed = true;\n for (const record of this.#records) if (record.object) this.#objects.delete(record.object);\n this.#records.clear();\n this.#bytes = 0;\n this.#slots = 0;\n }\n}\n\nexport class ValueScope implements ValueAllocation {\n readonly #releases = new Set<() => void>();\n readonly #holds = new Map<HeldValue, { scope: ValueScope }>();\n #closed = false;\n #enrollment: AllocationRecord | undefined;\n #bytesReservation: AllocationRecord | undefined;\n\n constructor(readonly arena: ValueArena) {}\n\n assertOpen(): void {\n this.arena.assertOpen();\n if (this.#closed) throw new Error(\"Shell value scope is closed\");\n }\n\n reserveBytes(bytes: number): void {\n this.assertOpen();\n this.#enrollment ??= this.arena.allocate(64, 1);\n if (this.#bytesReservation) this.arena.grow(this.#bytesReservation, bytes);\n else this.#bytesReservation = this.arena.allocate(bytes, 0);\n }\n\n reserve(bytes: number, slots: number): ValueReservation {\n this.assertOpen();\n this.#enrollment ??= this.arena.allocate(64, 1);\n const record = this.arena.allocate(bytes, slots);\n let released = false;\n const release = (): void => {\n if (released) return;\n released = true;\n this.#releases.delete(release);\n this.arena.release(record);\n };\n this.#releases.add(release);\n return { commit: value => { this.assertOpen(); if (released) throw new Error(\"Shell value reservation is released\"); this.arena.commit(record, value); }, release };\n }\n\n hold(value: ShellValue): HeldValue {\n this.assertOpen();\n if (typeof value !== \"string\") this.#enrollment ??= this.arena.allocate(64, 1);\n const held = this.arena.hold(value);\n const owner = { scope: this as ValueScope };\n const result = { value, release: (): void => {\n owner.scope.#holds.delete(result);\n owner.scope.#releases.delete(result.release);\n held.release();\n } };\n const release = result.release;\n this.#releases.add(release);\n this.#holds.set(result, owner);\n return result;\n }\n\n prepareTransfer(held: HeldValue, destination: ValueScope): () => void {\n const validate = (): { scope: ValueScope } => {\n this.arena.assertRetained();\n const owner = this.#holds.get(held);\n if (!owner || this.#closed || destination.#closed || this.arena !== destination.arena || typeof held.value !== \"string\" && !destination.#enrollment) throw new Error(\"Shell value restoration ownership is not prepared\");\n return owner;\n };\n validate();\n return () => {\n const owner = validate();\n this.#holds.delete(held);\n this.#releases.delete(held.release);\n owner.scope = destination;\n destination.#holds.set(held, owner);\n destination.#releases.add(held.release);\n };\n }\n\n close(): void {\n if (this.#closed) return;\n this.#closed = true;\n for (const release of this.#releases) release();\n if (this.#bytesReservation) this.arena.release(this.#bytesReservation);\n if (this.#enrollment) this.arena.release(this.#enrollment);\n }\n}\n\nexport class ValueStore {\n readonly #values = new Map<string, HeldValue>();\n readonly scope: ValueScope;\n\n constructor(readonly arena: ValueArena) { this.scope = arena.scope(); }\n\n get(name: string, text: string): ShellValue { return this.#values.get(name)?.value ?? text; }\n\n publish(name: string, value: ShellValue, action: () => boolean): boolean {\n const held = this.scope.hold(value);\n try {\n if (!action()) { held.release(); return false; }\n } catch (error) { held.release(); throw error; }\n this.invalidate(name);\n this.#values.set(name, held);\n return true;\n }\n\n invalidate(name?: string): void {\n if (name === undefined) {\n for (const value of this.#values.values()) value.release();\n this.#values.clear();\n } else {\n this.#values.get(name)?.release();\n this.#values.delete(name);\n }\n }\n\n clone(): ValueStore {\n const copy = new ValueStore(this.arena);\n try {\n for (const [name, held] of this.#values) copy.publish(name, held.value, () => true);\n return copy;\n } catch (error) { copy.close(); throw error; }\n }\n\n replace(entries: Iterable<readonly [string, ShellValue]>, action: () => void): void {\n const staged = new Map<string, HeldValue>();\n try {\n for (const [name, value] of entries) {\n const held = this.scope.hold(value);\n staged.get(name)?.release();\n staged.set(name, held);\n }\n action();\n } catch (error) { for (const held of staged.values()) held.release(); throw error; }\n this.invalidate();\n for (const [name, held] of staged) this.#values.set(name, held);\n }\n\n restore(source: ValueStore, action: () => void): void {\n if (source === this) throw new Error(\"Shell value restoration requires an independent snapshot\");\n const transfers = [...source.#values].map(([name, held]) => ({ name, held, transfer: source.scope.prepareTransfer(held, this.scope) }));\n action();\n this.invalidate();\n for (const { name, held, transfer } of transfers) {\n transfer();\n this.#values.set(name, held);\n source.#values.delete(name);\n }\n }\n\n restoreHeld(name: string, held: HeldValue, action: () => void): void {\n const transfer = this.scope.prepareTransfer(held, this.scope);\n action();\n this.invalidate(name);\n transfer();\n this.#values.set(name, held);\n }\n\n close(): void { this.invalidate(); this.scope.close(); }\n}\n", "import { shellValueByteLength } from \"../contracts/value.js\";\nimport type { ShellValue } from \"../contracts/value.js\";\nimport { yieldTurn } from \"../contracts/yield.js\";\nimport type { Word, WordPart } from \"./parser.js\";\nimport { expansionSpellings, parseBraceWord } from \"./parser.js\";\nimport { ShellSyntaxError } from \"./types.js\";\nimport type { Budget } from \"./runtime.js\";\n\ntype Node = { count: number; bytes: number } & (\n | { kind: \"part\"; part: WordPart }\n | { kind: \"product\"; children: Node[] }\n | { kind: \"choice\"; children: Node[] }\n | { kind: \"range\"; start: bigint; step: bigint; width: number; numeric: boolean }\n);\n\ninterface Frame {\n branches: Node[][];\n}\n\nexport class BraceExpansionFailure extends Error {}\n\nasync function integer(text: string, checkpoint: () => Promise<void>): Promise<bigint | undefined> {\n let offset = text.startsWith(\"-\") || text.startsWith(\"+\") ? 1 : 0;\n if (offset === text.length) return undefined;\n while (text[offset] === \"0\") { if (offset % 1024 === 0) await checkpoint(); offset++; }\n if (text.length - offset > 19) return undefined;\n for (let index = offset; index < text.length; index++) if (text[index]! < \"0\" || text[index]! > \"9\") return undefined;\n const value = BigInt(text.slice(offset) || \"0\") * (text.startsWith(\"-\") ? -1n : 1n);\n return value < -9223372036854775808n || value > 9223372036854775807n ? undefined : value;\n}\n\nexport async function* expandBraces(word: Word, budget: Budget, signal: AbortSignal): AsyncGenerator<Word> {\n const allocation = budget.values.scope();\n let work = 0;\n let changed = false;\n const checkpoint = async (): Promise<void> => {\n budget.cpuCheckpoint();\n signal.throwIfAborted();\n if (++work % 128 === 0) await yieldTurn(signal);\n };\n const admit = (bytes = 64): void => {\n budget.parsing.admit();\n allocation.reserveBytes(bytes);\n };\n const sum = (left: number, right: number, limit: \"maxExpansionFields\" | \"maxExpansionBytes\"): number => {\n if (right > budget.limits[limit] - left) budget.fail(limit);\n return left + right;\n };\n const multiply = (left: number, right: number, limit: \"maxExpansionFields\" | \"maxExpansionBytes\"): number => {\n if (left !== 0 && right > Math.floor(budget.limits[limit] / left)) budget.fail(limit);\n return left * right;\n };\n const partNode = (part: WordPart): Node => {\n admit();\n return { kind: \"part\", part, count: 1, bytes: part.kind === \"text\" ? shellValueByteLength(part.byteValue ?? part.value) : 0 };\n };\n const textNode = (value: string): Node => {\n admit(value.length * 2);\n return partNode({ kind: \"text\", value, quoted: false });\n };\n const product = async (children: Node[]): Promise<Node> => {\n admit();\n let count = 1;\n let bytes = 0;\n for (const child of children) {\n await checkpoint();\n bytes = sum(multiply(bytes, child.count, \"maxExpansionBytes\"), multiply(child.bytes, count, \"maxExpansionBytes\"), \"maxExpansionBytes\");\n count = multiply(count, child.count, \"maxExpansionFields\");\n }\n return { kind: \"product\", children, count, bytes };\n };\n const sequence = async (children: Node[]): Promise<Node | undefined> => {\n if (children.length !== 1 || children[0]!.kind !== \"part\") return undefined;\n const part = children[0]!.part;\n if (part.kind !== \"text\" || part.quoted || part.byteValue) return undefined;\n admit(32);\n const pieces: string[] = [];\n let startOffset = 0;\n for (let offset = 0; offset < part.value.length; offset++) {\n if (offset % 1024 === 0) await checkpoint();\n if (part.value[offset] !== \".\" || part.value[offset + 1] !== \".\") continue;\n if (pieces.length === 2) return undefined;\n admit(16 + (offset - startOffset) * 2);\n pieces.push(part.value.slice(startOffset, offset));\n startOffset = offset + 2;\n offset++;\n }\n if (!pieces.length) return undefined;\n admit(16 + (part.value.length - startOffset) * 2);\n pieces.push(part.value.slice(startOffset));\n const first = pieces[0]!;\n const last = pieces[1]!;\n admit(256);\n let start = await integer(first, checkpoint);\n let end = await integer(last, checkpoint);\n const numeric = start !== undefined && end !== undefined;\n if (!numeric) {\n const alphabetic = (value: string): boolean => value.length === 1 && (value >= \"a\" && value <= \"z\" || value >= \"A\" && value <= \"Z\");\n if (!alphabetic(first) || !alphabetic(last)) return undefined;\n start = BigInt(first.charCodeAt(0));\n end = BigInt(last.charCodeAt(0));\n }\n let step = pieces.length === 3 ? await integer(pieces[2]!, checkpoint) : 1n;\n if (step === undefined) return undefined;\n if (step < 0n) step = -step;\n if (step === 0n) step = 1n;\n const distance = end! - start!;\n const cardinality = (distance < 0n ? -distance : distance) / step + 1n;\n if (cardinality > BigInt(budget.limits.maxExpansionFields)) budget.fail(\"maxExpansionFields\");\n const padded = (value: string): boolean => value.length > 1 && value.startsWith(\"0\") || value.length > 2 && value.startsWith(\"-0\");\n const width = numeric && (padded(first) || padded(last)) ? Math.max(first.length, last.length) : 0;\n const count = Number(cardinality);\n const termBytes = numeric ? Math.max(width, start!.toString().length, end!.toString().length) : 1;\n const bytes = multiply(count, termBytes, \"maxExpansionBytes\");\n admit();\n return { kind: \"range\", start: start!, step: distance < 0n ? -step : step, width, numeric, count, bytes };\n };\n try {\n admit();\n const frames: Frame[] = [{ branches: [[]] }];\n const append = (node: Node): void => { frames.at(-1)!.branches.at(-1)!.push(node); };\n for (const part of word.parts) {\n await checkpoint();\n if (part.kind !== \"text\" || part.quoted || part.byteValue) { append(partNode(part)); continue; }\n let start = 0;\n for (let offset = 0; offset < part.value.length; offset++) {\n if (offset % 1024 === 0) { budget.parsing.admit(); await checkpoint(); }\n const character = part.value[offset]!;\n if (character !== \"{\" && character !== \"}\" && character !== \",\") continue;\n if (start < offset) {\n admit((offset - start) * 2);\n append(textNode(part.value.slice(start, offset)));\n }\n start = offset + 1;\n if (character === \"{\") { admit(); frames.push({ branches: [[]] }); }\n else if (character === \",\" && frames.length > 1) { admit(); frames.at(-1)!.branches.push([]); }\n else if (character === \"}\" && frames.length > 1) {\n const frame = frames.pop()!;\n if (frame.branches.length > 1) {\n admit(frame.branches.length * 8);\n const children: Node[] = [];\n for (const branch of frame.branches) children.push(await product(branch));\n let count = 0;\n let bytes = 0;\n for (const child of children) { await checkpoint(); count = sum(count, child.count, \"maxExpansionFields\"); bytes = sum(bytes, child.bytes, \"maxExpansionBytes\"); }\n append({ kind: \"choice\", children, count, bytes });\n changed = true;\n } else {\n const children = frame.branches[0]!;\n const range = await sequence(children);\n if (range) { append(range); changed = true; }\n else { append(textNode(\"{\")); append(await product(children)); append(textNode(\"}\")); }\n }\n } else append(textNode(character));\n }\n if (start < part.value.length) {\n if (start === 0) append(partNode(part));\n else { admit((part.value.length - start) * 2); append(textNode(part.value.slice(start))); }\n }\n }\n while (frames.length > 1) {\n await checkpoint();\n const frame = frames.pop()!;\n append(textNode(\"{\"));\n for (let index = 0; index < frame.branches.length; index++) {\n if (index) append(textNode(\",\"));\n append(await product(frame.branches[index]!));\n }\n }\n if (!changed) { yield word; return; }\n const root = await product(frames[0]!.branches[0]!);\n for (let rank = 0; rank < root.count; rank++) {\n await checkpoint();\n const materialized = budget.values.scope();\n try {\n materialized.reserveBytes(64);\n const parts: WordPart[] = [];\n const generatedSyntax = new WeakSet<WordPart>();\n const pending = [{ node: root, rank }];\n while (pending.length) {\n await checkpoint();\n const current = pending.pop()!;\n const node = current.node;\n if (node.kind === \"product\") {\n materialized.reserveBytes(node.children.length * 32);\n let divisor = 1;\n for (let index = node.children.length - 1; index >= 0; index--) {\n await checkpoint();\n const child = node.children[index]!;\n pending.push({ node: child, rank: Math.floor(current.rank / divisor) % child.count });\n divisor *= child.count;\n }\n } else if (node.kind === \"choice\") {\n let choice = current.rank;\n for (const child of node.children) {\n await checkpoint();\n if (choice < child.count) { materialized.reserveBytes(32); pending.push({ node: child, rank: choice }); break; }\n choice -= child.count;\n }\n } else {\n materialized.reserveBytes(64);\n let part: WordPart;\n if (node.kind === \"part\") part = node.part;\n else {\n const value = node.start + BigInt(current.rank) * node.step;\n materialized.reserveBytes(Math.max(node.width, 32) * 2);\n const digits = node.numeric ? (value < 0n ? -value : value).toString() : String.fromCharCode(Number(value));\n const text = node.numeric ? (value < 0n ? \"-\" : \"\") + digits.padStart(node.width - Number(value < 0n), \"0\") : digits;\n part = { kind: \"text\", value: text, quoted: false };\n if (!node.numeric && (text === \"\\\\\" || text === \"`\")) { materialized.reserveBytes(32); generatedSyntax.add(part); }\n }\n const previous = parts.at(-1);\n if (part.kind === \"text\" && !part.quoted && !part.byteValue && !generatedSyntax.has(part) && previous?.kind === \"text\" && !previous.quoted && !previous.byteValue && !generatedSyntax.has(previous)) {\n materialized.reserveBytes((previous.value.length + part.value.length) * 2);\n parts[parts.length - 1] = { kind: \"text\", value: previous.value + part.value, quoted: false };\n } else parts.push(part);\n }\n }\n for (let index = 0; index < parts.length; index++) {\n await checkpoint();\n const part = parts[index]!;\n if (!generatedSyntax.has(part) || part.kind !== \"text\") continue;\n materialized.reserveBytes(128);\n const fragments: string[] = [];\n const opaque = new Map<number, ShellValue>();\n let length = 0;\n for (let position = index; position < parts.length; position++) {\n await checkpoint();\n const current = parts[position]!;\n const spelling = expansionSpellings.get(current);\n materialized.reserveBytes(32);\n let fragment: string;\n if (current.kind === \"text\" && current.byteValue) {\n materialized.reserveBytes(64);\n opaque.set(length + 1, current.byteValue);\n fragment = \"'\\0'\";\n } else if (current.kind === \"text\" && spelling?.ansi) {\n materialized.reserveBytes(current.value.length * 8 + 4);\n fragment = \"'\" + current.value.replaceAll(\"'\", \"'\\\\''\") + \"'\";\n } else if (spelling && (current.kind !== \"text\" || current.quoted)) {\n materialized.reserveBytes((spelling.end - spelling.start) * 2);\n fragment = spelling.source.slice(spelling.start, spelling.end);\n } else if (current.kind === \"text\") fragment = current.value;\n else throw new BraceExpansionFailure(\"Missing lexical provenance in brace expansion\");\n length = sum(length, fragment.length, \"maxExpansionBytes\");\n fragments.push(fragment);\n }\n materialized.reserveBytes(length * 2);\n let replayed: Word;\n try { replayed = parseBraceWord(fragments.join(\"\"), opaque, budget.parsing); }\n catch (error) {\n if (!(error instanceof ShellSyntaxError)) throw error;\n throw new BraceExpansionFailure(error.reason);\n }\n materialized.reserveBytes(replayed.parts.length * 32);\n parts.length = index;\n for (const replayedPart of replayed.parts) parts.push(replayedPart);\n break;\n }\n yield { parts, offset: word.offset };\n } finally { materialized.close(); }\n }\n } finally { allocation.close(); }\n}\n", "import { prepareArithmetic } from \"./arithmetic.js\";\nimport type { ArithmeticProgram } from \"./arithmetic.js\";\nimport type { ParseBudget } from \"./parse-budget.js\";\nimport type { Admission, ArrayOwner } from \"./arrays/ledger.js\";\n\ninterface PositionalArithmeticOptions {\n readonly parseBudget?: ParseBudget;\n readonly positional: readonly string[];\n readonly arg0: string;\n readonly maximumBytes: number;\n readonly owner: ArrayOwner | undefined;\n readonly checkpoint: () => void;\n readonly requireParameter: (name: string, value: string | undefined) => void;\n readonly limit: () => never;\n}\n\nfunction digit(source: string, position: number): boolean {\n const code = source.charCodeAt(position);\n return code >= 48 && code <= 57;\n}\n\nfunction positionalTemplate(source: string, checkpoint: () => void): boolean {\n let found = false;\n let nextCheckpoint = 0;\n for (let position = 0; position < source.length;) {\n if (position >= nextCheckpoint) { checkpoint(); nextCheckpoint = position + 128; }\n const character = source[position];\n if (character === \"\\\\\" || character === \"'\" || character === '\"' || character === \"`\") return false;\n if (character !== \"$\") { position++; continue; }\n position++;\n if (digit(source, position)) { found = true; position++; continue; }\n if (source[position] !== \"{\") return false;\n const start = ++position;\n while (digit(source, position)) {\n if (position >= nextCheckpoint) { checkpoint(); nextCheckpoint = position + 128; }\n position++;\n }\n if (position === start || source[position] !== \"}\") return false;\n found = true;\n position++;\n }\n return found;\n}\n\nfunction positionalValue(name: string, options: PositionalArithmeticOptions): string | undefined {\n let index = 0;\n let outside = false;\n for (let position = 0; position < name.length; position++) {\n if (position % 128 === 0) options.checkpoint();\n const next = name.charCodeAt(position) - 48;\n if (index > Math.floor((options.positional.length - next) / 10)) outside = true;\n if (!outside) index = index * 10 + next;\n }\n return outside ? undefined : index === 0 ? options.arg0 : options.positional[index - 1];\n}\n\nexport function evaluatePositionalArithmetic(\n program: ArithmeticProgram,\n options: PositionalArithmeticOptions,\n evaluate: (prepared: ArithmeticProgram) => bigint,\n): bigint {\n const source = program.source;\n if (!source.includes(\"$\")) return evaluate(program);\n options.checkpoint();\n if (!positionalTemplate(source, options.checkpoint)) return evaluate(program);\n const header = options.owner?.reserve({ metadata: 128, allocatedSlots: 2, work: source.length * 2 + 8 });\n const admissions: Admission[] = [];\n const chunks: string[] = [];\n let bytes = 0;\n const reserve = (payload: number): void => {\n const admission = options.owner?.reserve({ payload, metadata: 64, allocatedSlots: 2, work: 4 });\n if (admission) admissions.push(admission);\n };\n const length = (text: string, start: number, end: number, maximum: number): number => {\n let size = 0;\n let nextCheckpoint = start;\n for (let position = start; position < end;) {\n if (position >= nextCheckpoint) { options.checkpoint(); nextCheckpoint = position + 128; }\n const code = text.charCodeAt(position++);\n if (code <= 0x7f) size++;\n else if (code <= 0x7ff) size += 2;\n else if (code >= 0xd800 && code <= 0xdbff && position < end && text.charCodeAt(position) >= 0xdc00 && text.charCodeAt(position) <= 0xdfff) { size += 4; position++; }\n else size += 3;\n if (size > maximum) options.limit();\n }\n options.owner?.reserve({ work: end - start }).release();\n return size;\n };\n const literal = (start: number, end: number): void => {\n if (start === end) return;\n const size = length(source, start, end, options.maximumBytes - bytes);\n reserve(size);\n chunks.push(source.slice(start, end));\n bytes += size;\n };\n try {\n let start = 0;\n let nextCheckpoint = 0;\n for (let position = 0; position < source.length;) {\n if (position >= nextCheckpoint) { options.checkpoint(); nextCheckpoint = position + 128; }\n if (source[position] !== \"$\") { position++; continue; }\n literal(start, position);\n const braced = source[position + 1] === \"{\";\n const nameStart = position + (braced ? 2 : 1);\n let nameEnd = nameStart + 1;\n if (braced) while (digit(source, nameEnd)) { if (nameEnd >= nextCheckpoint) { options.checkpoint(); nextCheckpoint = nameEnd + 128; } nameEnd++; }\n reserve(nameEnd - nameStart);\n const name = source.slice(nameStart, nameEnd);\n const value = positionalValue(name, options);\n options.requireParameter(name, value);\n const text = value ?? \"\";\n const size = length(text, 0, text.length, options.maximumBytes - bytes);\n reserve(size);\n chunks.push(text);\n bytes += size;\n position = nameEnd + (braced ? 1 : 0);\n start = position;\n }\n literal(start, source.length);\n options.checkpoint();\n reserve(bytes);\n const expanded = chunks.join(\"\");\n options.checkpoint();\n return evaluate(prepareArithmetic(expanded, options.parseBudget));\n } finally {\n for (let position = admissions.length - 1; position >= 0; position--) admissions[position]!.release();\n header?.release();\n }\n}\n", "export function byteLocale(variables: Readonly<Record<string, string>>): boolean {\n const locale = variables.LC_ALL || variables.LC_CTYPE || variables.LANG;\n return locale === \"C\" || locale === \"POSIX\";\n}\n", "import type { Command, Script, Word } from \"./parser.js\";\n\nconst spelling = (word: Word): string => word.spelling ?? word.plain ?? \"''\";\n\nfunction scriptText(script: Script, indent: string): string {\n return script.lists.map(list => list.pipelines.map((pipeline, index) =>\n `${index ? `${list.operators[index - 1]} ` : \"\"}${pipeline.negate ? \"! \" : \"\"}${pipeline.commands.map((command, commandIndex) => `${commandIndex ? pipeline.commands[commandIndex - 1]!.redirects.some(redirect => redirect.implicitPipeline) ? \" |& \" : \" | \" : \"\"}${commandText(command, indent)}`).join(\"\")}`,\n ).join(\" \")).join(`;\\n${indent}`);\n}\n\nfunction commandText(command: Command, indent: string): string {\n const nested = `${indent} `;\n let text: string;\n switch (command.kind) {\n case \"simple\": text = command.words.map(spelling).join(\" \"); break;\n case \"arithmetic\": text = `(( ${command.source} ))`; break;\n case \"conditional\": text = `[[${command.source}]]`; break;\n case \"group\": text = `{ \\n${nested}${scriptText(command.body, nested)}\\n${indent}}`; break;\n case \"subshell\": text = `( ${scriptText(command.body, indent)} )`; break;\n case \"function\": text = `${command.name} () \\n${indent}${commandText(command.body, indent)}`; break;\n case \"if\":\n text = command.branches.map((branch, index) => `${index ? \"elif\" : \"if\"} ${scriptText(branch.condition, indent)}; then\\n${nested}${scriptText(branch.body, nested)};`).join(`\\n${indent}`);\n if (command.otherwise) text += `\\n${indent}else\\n${nested}${scriptText(command.otherwise, nested)};`;\n text += `\\n${indent}fi`;\n break;\n case \"while\": case \"until\": text = `${command.kind} ${scriptText(command.condition, indent)}; do\\n${nested}${scriptText(command.body, nested)};\\n${indent}done`; break;\n case \"for\": text = `for ${command.name}${command.words ? ` in ${command.words.map(spelling).join(\" \")}` : \"\"};\\ndo\\n${nested}${scriptText(command.body, nested)};\\n${indent}done`; break;\n case \"case\": text = `case ${spelling(command.subject)} in\\n${command.clauses.map(clause => `${nested}${clause.patterns.map(spelling).join(\" | \")})\\n${nested} ${scriptText(clause.body, `${nested} `)}\\n${nested}${clause.terminator === \"esac\" ? \"\" : clause.terminator}`).join(\"\\n\")}\\n${indent}esac`; break;\n }\n for (const redirect of command.redirects) {\n if (redirect.implicitPipeline) continue;\n const defaultDescriptor = redirect.operator.startsWith(\"<\") ? 0 : 1;\n text += ` ${redirect.descriptor === defaultDescriptor ? \"\" : redirect.descriptor}${redirect.operator} ${spelling(redirect.target)}${redirect.move ? \"-\" : \"\"}`;\n if (redirect.document) text += `\\n${redirect.document.body}${redirect.document.delimiter}\\n`;\n }\n return text;\n}\n\nexport function functionDisplay(name: string, body: Command): string {\n return `${name} () \\n${commandText(body, \"\")}\\n`;\n}\n", "import type { InvocationCleanup } from \"../contracts/command.js\";\n\nexport const invocationScope = Symbol(\"invocation cleanup scope\");\n\nexport class InvocationScope {\n readonly #children = new Set<InvocationScope>();\n readonly #callbacks = new Map<symbol, InvocationCleanup>();\n readonly #finalizers: (() => void)[] = [];\n readonly #work = new Set<Promise<void>>();\n readonly #controller = new AbortController();\n #closed = false;\n #drain: Promise<void> | undefined;\n\n constructor(\n readonly callerSignal?: AbortSignal,\n readonly failures: unknown[] = [],\n readonly parent?: InvocationScope,\n ) {}\n\n get signal(): AbortSignal { return this.#controller.signal; }\n\n registerFinalizer(finalize: () => void): void {\n this.assertOpen();\n this.#finalizers.push(finalize);\n }\n\n assertOpen(): void {\n this.callerSignal?.throwIfAborted();\n if (this.#closed) throw this.signal.reason;\n this.parent?.assertOpen();\n }\n\n child(): InvocationScope {\n this.assertOpen();\n const child = new InvocationScope(this.callerSignal, this.failures, this);\n this.#children.add(child);\n return child;\n }\n\n register(cleanup: InvocationCleanup): () => void {\n this.assertOpen();\n if (typeof cleanup !== \"function\") throw new TypeError(\"Cleanup must be callable\");\n const registration = Symbol();\n this.#callbacks.set(registration, cleanup);\n return () => { this.#callbacks.delete(registration); };\n }\n\n run<Value>(operation: () => Promise<Value>): Promise<Value> {\n this.assertOpen();\n const pending = operation();\n const settled = pending.then(() => {}, () => {});\n this.#work.add(settled);\n void settled.then(() => { this.#work.delete(settled); });\n return pending;\n }\n\n async cleanup(action: InvocationCleanup): Promise<void> {\n try { await action(); }\n catch (error) { this.failures.push(error); }\n }\n\n async drainWork(): Promise<void> {\n await Promise.all([...this.#work, ...[...this.#children].map(child => child.drainWork())]);\n }\n\n #seal(): void {\n if (this.#closed) return;\n this.#closed = true;\n for (const child of this.#children) child.#seal();\n this.#controller.abort(new Error(\"Invocation is closed\"));\n }\n\n close(): Promise<void> {\n if (!this.#drain) {\n this.#drain = Promise.resolve().then(async () => {\n const callbacks = [...this.#callbacks.values()];\n this.#callbacks.clear();\n try {\n await Promise.all([\n ...callbacks.map((cleanup) => this.cleanup(cleanup)),\n ...[...this.#children].map((child) => child.close()),\n ...this.#work,\n ]);\n } finally {\n for (const finalize of this.#finalizers.splice(0)) {\n try { finalize(); }\n catch (error) { this.failures.push(error); }\n }\n if (this.parent) this.parent.#children.delete(this);\n }\n });\n this.#seal();\n }\n return this.#drain;\n }\n}\n\nexport function throwCleanupFailures(failures: readonly unknown[]): void {\n if (failures.length === 1) throw failures[0];\n if (failures.length) throw new AggregateError(failures, \"Invocation cleanup failed\");\n}\n", "import type { ValueAllocation } from \"../contracts/value.js\";\n\nexport interface GetoptsInput {\n readonly args: readonly string[];\n}\n\nconst ownedInputs = new WeakMap<GetoptsInput, { bytes?: number }>();\n\nexport function getoptsInputAllocationSize(argumentsCount: number): { bytes: number; slots: number } {\n return { bytes: 256 + argumentsCount * 8, slots: argumentsCount + 2 };\n}\n\nexport async function createGetoptsInput(args: readonly string[], allocation: ValueAllocation | undefined, controls: GetoptsWork): Promise<GetoptsInput> {\n const work = new ScanWork(controls);\n if (!Array.isArray(args)) throw new GetoptsError(\"INVALID_INPUT\", \"Getopts requires an argument array\");\n const length = args.length;\n if (length > work.maxArguments) throw new GetoptsError(\"ARGUMENT_LIMIT\", \"Getopts argument limit exceeded\");\n const size = getoptsInputAllocationSize(length);\n const reservation = allocation?.reserve(size.bytes, size.slots);\n try {\n const snapshot: string[] = [];\n for (let index = 0; index < length; index++) {\n const waiting = work.step();\n if (waiting) await waiting;\n snapshot.push(args[index]!);\n }\n await work.flush();\n if (args.length !== length) throw new GetoptsError(\"INVALID_INPUT\", \"Getopts argument extent changed during admission\");\n const input = Object.freeze({ args: Object.freeze(snapshot) });\n reservation?.commit(input);\n ownedInputs.set(input, {});\n return input;\n } catch (error) {\n try { reservation?.release(); }\n catch (cleanup) { throw new AggregateError([error, cleanup], \"Getopts input allocation and release failed\"); }\n throw error;\n }\n}\n\nexport interface GetoptsState {\n readonly index: number;\n readonly active?: { readonly argument: number; readonly offset: number };\n}\n\nexport interface GetoptsWork {\n readonly maxArguments: number;\n readonly maxBytes: number;\n readonly maxSteps: number;\n readonly yieldEvery: number;\n readonly signal?: AbortSignal;\n readonly checkpoint: (steps: number) => void | Promise<void>;\n}\n\nexport interface GetoptsScanOptions {\n readonly reportErrors: boolean;\n readonly work: GetoptsWork;\n}\n\nexport type GetoptsDiagnostic = {\n readonly kind: \"unknown-option\" | \"missing-argument\";\n readonly option: string;\n};\n\nexport interface GetoptsScanResult {\n readonly state: GetoptsState;\n readonly kind: \"option\" | \"unknown-option\" | \"missing-argument\" | \"end\";\n readonly status: 0 | 1;\n readonly option: string;\n readonly optind: number;\n readonly argument: { readonly kind: \"set\"; readonly value: string } | { readonly kind: \"unset\" };\n readonly diagnostic: GetoptsDiagnostic | null;\n}\n\nexport class GetoptsError extends Error {\n constructor(readonly code: \"INVALID_INPUT\" | \"NON_ASCII_OPTION\" | \"ARGUMENT_LIMIT\" | \"BYTE_LIMIT\" | \"STEP_LIMIT\", message: string) {\n super(message);\n this.name = \"GetoptsError\";\n }\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction integer(value: unknown, minimum: number, name: string): asserts value is number {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < minimum) {\n throw new GetoptsError(\"INVALID_INPUT\", `${name} must be a safe integer >= ${minimum}`);\n }\n}\n\nexport function createGetoptsState(): GetoptsState {\n return { index: 0 };\n}\n\nexport function cloneGetoptsState(state: GetoptsState): GetoptsState {\n if (!record(state)) throw new GetoptsError(\"INVALID_INPUT\", \"Invalid getopts state\");\n integer(state.index, 0, \"index\");\n if (state.active === undefined) return { index: state.index };\n if (!record(state.active)) throw new GetoptsError(\"INVALID_INPUT\", \"Invalid getopts active cursor\");\n integer(state.active.argument, 0, \"active.argument\");\n integer(state.active.offset, 1, \"active.offset\");\n return { index: state.index, active: { argument: state.active.argument, offset: state.active.offset } };\n}\n\nexport function withGetoptsIndex(state: GetoptsState, index: number): GetoptsState {\n const copy = cloneGetoptsState(state);\n integer(index, Number.MIN_SAFE_INTEGER, \"index\");\n return index <= 1 ? createGetoptsState() : { ...copy, index };\n}\n\nclass ScanWork {\n private steps = 0;\n private pending = 0;\n private bytes = 0;\n readonly maxArguments: number;\n private readonly maxBytes: number;\n private readonly maxSteps: number;\n private readonly yieldEvery: number;\n private readonly signal: AbortSignal | undefined;\n private readonly checkpoint: GetoptsWork[\"checkpoint\"];\n\n constructor(work: GetoptsWork) {\n if (!record(work)) throw new GetoptsError(\"INVALID_INPUT\", \"Explicit getopts work controls are required\");\n integer(work.maxArguments, 0, \"maxArguments\");\n integer(work.maxBytes, 0, \"maxBytes\");\n integer(work.maxSteps, 0, \"maxSteps\");\n integer(work.yieldEvery, 1, \"yieldEvery\");\n if (typeof work.checkpoint !== \"function\") throw new GetoptsError(\"INVALID_INPUT\", \"A getopts checkpoint is required\");\n if (work.signal !== undefined && (!record(work.signal) || typeof work.signal.throwIfAborted !== \"function\" || typeof work.signal.addEventListener !== \"function\" || typeof work.signal.removeEventListener !== \"function\")) {\n throw new GetoptsError(\"INVALID_INPUT\", \"Invalid getopts signal\");\n }\n this.maxArguments = work.maxArguments;\n this.maxBytes = work.maxBytes;\n this.maxSteps = work.maxSteps;\n this.yieldEvery = work.yieldEvery;\n this.signal = work.signal;\n this.checkpoint = work.checkpoint;\n this.check();\n }\n\n check(): void {\n this.signal?.throwIfAborted();\n }\n\n get inputBytes(): number { return this.bytes; }\n\n step(): Promise<void> | undefined {\n this.check();\n if (this.steps === this.maxSteps) throw new GetoptsError(\"STEP_LIMIT\", \"Getopts work step limit exceeded\");\n this.steps++;\n this.pending++;\n return this.pending === this.yieldEvery ? this.flush() : undefined;\n }\n\n addBytes(count: number): void {\n if (count > this.maxBytes - this.bytes) throw new GetoptsError(\"BYTE_LIMIT\", \"Getopts input byte limit exceeded\");\n this.bytes += count;\n }\n\n async flush(): Promise<void> {\n this.check();\n if (this.pending) {\n const steps = this.pending;\n this.pending = 0;\n const pending = Promise.resolve(this.checkpoint(steps));\n const signal = this.signal;\n if (!signal) await pending;\n else await new Promise<void>((resolve, reject) => {\n const abort = () => { signal.removeEventListener(\"abort\", abort); reject(signal.reason); };\n pending.then(\n () => { signal.removeEventListener(\"abort\", abort); resolve(); },\n error => { signal.removeEventListener(\"abort\", abort); reject(error); },\n );\n if (signal.aborted) abort();\n else signal.addEventListener(\"abort\", abort, { once: true });\n });\n }\n this.check();\n }\n}\n\nasync function validateString(value: unknown, work: ScanWork, optstring = false): Promise<void> {\n if (typeof value !== \"string\") throw new GetoptsError(\"INVALID_INPUT\", \"Getopts requires string inputs\");\n for (let position = 0; position < value.length; position++) {\n const waiting = work.step();\n if (waiting) await waiting;\n const code = value.charCodeAt(position);\n if (code === 0) throw new GetoptsError(\"INVALID_INPUT\", \"Getopts inputs must not contain NUL\");\n if (optstring && code > 127) throw new GetoptsError(\"NON_ASCII_OPTION\", \"Non-ASCII getopts option specifications are unsupported\");\n if (code < 128) work.addBytes(1);\n else if (code < 2048) work.addBytes(2);\n else if (code >= 0xd800 && code <= 0xdbff && value.charCodeAt(position + 1) >= 0xdc00 && value.charCodeAt(position + 1) <= 0xdfff) work.addBytes(4);\n else if (code >= 0xdc00 && code <= 0xdfff && value.charCodeAt(position - 1) >= 0xd800 && value.charCodeAt(position - 1) <= 0xdbff) work.addBytes(0);\n else work.addBytes(3);\n }\n}\n\nexport async function scanGetopts(state: GetoptsState, optstring: string, input: readonly string[] | GetoptsInput, options: GetoptsScanOptions): Promise<GetoptsScanResult> {\n if (!record(options) || typeof options.reportErrors !== \"boolean\") throw new GetoptsError(\"INVALID_INPUT\", \"Getopts requires explicit diagnostic policy and work controls\");\n const work = new ScanWork(options.work);\n const original = cloneGetoptsState(state);\n const owned = ownedInputs.get(input as GetoptsInput);\n const args: readonly string[] = owned ? (input as GetoptsInput).args : input as readonly string[];\n if (!Array.isArray(args)) throw new GetoptsError(\"INVALID_INPUT\", \"Getopts requires an argument array\");\n if (args.length > work.maxArguments) throw new GetoptsError(\"ARGUMENT_LIMIT\", \"Getopts argument limit exceeded\");\n const starting = work.step();\n if (starting) await starting;\n await validateString(optstring, work, true);\n const specificationBytes = work.inputBytes;\n if (owned?.bytes !== undefined) work.addBytes(owned.bytes);\n else {\n for (let argument = 0; argument < args.length; argument++) {\n const waiting = work.step();\n if (waiting) await waiting;\n await validateString(args[argument], work);\n }\n }\n const silent = optstring.startsWith(\":\");\n const specification = new Int8Array(128).fill(-1);\n for (let position = silent ? 1 : 0; position < optstring.length; position++) {\n const waiting = work.step();\n if (waiting) await waiting;\n const code = optstring.charCodeAt(position);\n if (code !== 58 && code !== 63 && specification[code] === -1) specification[code] = Number(optstring[position + 1] === \":\");\n }\n let index = original.index || 1;\n let active = original.index === 0 ? undefined : original.active;\n const finish = async (kind: GetoptsScanResult[\"kind\"], option: string, argument: GetoptsScanResult[\"argument\"], diagnostic: GetoptsDiagnostic | null): Promise<GetoptsScanResult> => {\n const waiting = work.step();\n if (waiting) await waiting;\n await work.flush();\n if (owned) owned.bytes = work.inputBytes - specificationBytes;\n return { state: active === undefined ? { index } : { index, active: { ...active } }, kind, status: kind === \"end\" ? 1 : 0, option, optind: index, argument, diagnostic };\n };\n const end = (): Promise<GetoptsScanResult> => {\n active = undefined;\n return finish(\"end\", \"?\", { kind: \"unset\" }, null);\n };\n if (index > args.length) {\n index = args.length + 1;\n return end();\n }\n if (active && (args[active.argument] === undefined || active.offset >= args[active.argument]!.length)) active = undefined;\n if (!active) {\n const token = args[index - 1]!;\n if (token.length < 2 || token[0] !== \"-\") return end();\n if (token === \"--\") {\n index++;\n return end();\n }\n active = { argument: index - 1, offset: 1 };\n }\n const token = args[active.argument]!;\n const option = token[active.offset]!;\n const code = option.charCodeAt(0);\n if (code > 127) throw new GetoptsError(\"NON_ASCII_OPTION\", \"Non-ASCII getopts option characters are unsupported\");\n const offset = active.offset + 1;\n const attached = offset < token.length;\n active = attached ? { argument: active.argument, offset } : undefined;\n if (!attached) index++;\n if (specification[code] === -1) {\n return finish(\"unknown-option\", \"?\", silent ? { kind: \"set\", value: option } : { kind: \"unset\" }, !silent && options.reportErrors ? { kind: \"unknown-option\", option } : null);\n }\n if (specification[code] === 1) {\n if (attached) {\n active = undefined;\n index++;\n return finish(\"option\", option, { kind: \"set\", value: token.slice(offset) }, null);\n }\n if (index <= args.length) {\n const value = args[index - 1]!;\n index++;\n return finish(\"option\", option, { kind: \"set\", value }, null);\n }\n return finish(\"missing-argument\", silent ? \":\" : \"?\", silent ? { kind: \"set\", value: option } : { kind: \"unset\" }, !silent && options.reportErrors ? { kind: \"missing-argument\", option } : null);\n }\n return finish(\"option\", option, { kind: \"unset\" }, null);\n}\n", "export type CancellationRole = \"root-caller\" | \"invoke-option\" | \"budget-control\" | \"pipeline-control\";\n\nexport interface CancellationAdmissionSnapshot {\n readonly depth: number;\n readonly maxDepth: number;\n readonly resourceLimit: number;\n}\n\nexport interface CancellationControlOriginInput {\n readonly role: \"budget-control\" | \"pipeline-control\";\n readonly signal: AbortSignal;\n}\n\nexport interface RootCancellationInput {\n readonly admission: CancellationAdmissionSnapshot;\n readonly callerSignal?: AbortSignal | undefined;\n readonly controls?: readonly CancellationControlOriginInput[] | undefined;\n}\n\nexport interface CancellationInvokeOptions {\n readonly signal?: AbortSignal | undefined;\n}\n\nexport interface CancellationOrigin {\n readonly role: CancellationRole;\n readonly signal: AbortSignal;\n readonly frame: CancellationBoundary;\n}\n\nexport interface CancellationCloseResult {\n readonly failures: readonly unknown[];\n}\n\nconst boundaryState = Symbol(\"private cancellation boundary state\");\nconst reportState = Symbol(\"private cancellation report state\");\nconst preparedState = Symbol(\"private prepared cancellation state\");\n\nexport interface CancellationBoundary {\n readonly owned: boolean;\n readonly deliverySignal: AbortSignal;\n close(): CancellationCloseResult;\n readonly [boundaryState]: BoundaryState;\n}\n\nexport interface CancellationReport {\n readonly origin: CancellationOrigin;\n readonly [reportState]: ReportState;\n}\n\nexport interface PreparedChildCancellation {\n readonly owned: boolean;\n readonly [preparedState]: PreparedState;\n}\n\nexport type CapturedCancellationOutcome<Value> =\n | { readonly kind: \"return\"; readonly value: Value }\n | { readonly kind: \"throw\"; readonly reason: unknown; readonly report?: CancellationReport | undefined };\n\nexport type SelectedCancellationOutcome<Value> =\n | { readonly kind: \"return\"; readonly value: Value }\n | { readonly kind: \"throw\"; readonly reason: unknown };\n\nexport interface CancellationSelection<Value> {\n readonly outcome: SelectedCancellationOutcome<Value>;\n readonly report?: CancellationReport | undefined;\n}\n\nexport class CancellationCapacityError extends Error {\n constructor() {\n super(\"Cancellation resource capacity exceeded\");\n this.name = \"CancellationCapacityError\";\n }\n}\n\ninterface Subscriber {\n active: boolean;\n readonly callback: (origin: CancellationOrigin) => void;\n}\n\ninterface SignalDetacher {\n active: boolean;\n readonly signal: AbortSignal;\n readonly listener: () => void;\n}\n\ninterface LinkState {\n readonly kind: \"link\";\n boundary: CancellationBoundary;\n readonly parent: LinkState | undefined;\n readonly depth: number;\n readonly maxDepth: number;\n readonly resourceLimit: number;\n resourcesUsed: number;\n readonly controller: AbortController;\n readonly closedReason: Error;\n readonly rootCaller: CancellationOrigin | undefined;\n readonly localInvoke: CancellationOrigin | undefined;\n readonly controls: readonly CancellationOrigin[];\n delivered: CancellationOrigin | undefined;\n selected: CancellationOrigin | undefined;\n readonly signalDetachers: SignalDetacher[];\n readonly subscribers: Set<Subscriber>;\n readonly failures: unknown[];\n parentDetach: (() => void) | undefined;\n closed: boolean;\n finalized: boolean;\n notifying: number;\n closeResult: CancellationCloseResult | undefined;\n}\n\ninterface BorrowState {\n readonly kind: \"borrow\";\n readonly lineage: LinkState;\n}\n\ntype BoundaryState = LinkState | BorrowState;\n\ninterface ReportState {\n readonly target: LinkState;\n readonly origin: CancellationOrigin;\n}\n\ninterface PreparedControl {\n readonly role: \"budget-control\" | \"pipeline-control\";\n readonly signal: AbortSignal;\n}\n\ninterface PreparedState {\n readonly parent: LinkState;\n readonly localSignal: AbortSignal | undefined;\n readonly controls: readonly PreparedControl[];\n readonly admission: CancellationAdmissionSnapshot | undefined;\n readonly owned: boolean;\n readonly replayError: Error;\n activated: boolean;\n}\n\nconst emptyCloseResult: CancellationCloseResult = Object.freeze({ failures: Object.freeze([]) });\nconst nativeAbortedGetter = Object.getOwnPropertyDescriptor(AbortSignal.prototype, \"aborted\")?.get;\n\nclass Boundary implements CancellationBoundary {\n readonly [boundaryState]: BoundaryState;\n\n constructor(state: BoundaryState) { this[boundaryState] = state; }\n\n get owned(): boolean { return this[boundaryState].kind === \"link\"; }\n\n get deliverySignal(): AbortSignal {\n const state = this[boundaryState];\n return (state.kind === \"link\" ? state : state.lineage).controller.signal;\n }\n\n close(): CancellationCloseResult {\n const state = this[boundaryState];\n if (state.kind === \"borrow\") return emptyCloseResult;\n return closeLink(state);\n }\n}\n\nclass Prepared implements PreparedChildCancellation {\n readonly [preparedState]: PreparedState;\n\n constructor(state: PreparedState) { this[preparedState] = state; }\n\n get owned(): boolean { return this[preparedState].owned; }\n}\n\nfunction nativeSignal(value: unknown): value is AbortSignal {\n if (!nativeAbortedGetter) return false;\n try {\n Reflect.apply(nativeAbortedGetter, value, []);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction signalAborted(signal: AbortSignal): boolean {\n return Boolean(Reflect.apply(nativeAbortedGetter!, signal, []));\n}\n\nfunction validateSnapshot(snapshot: CancellationAdmissionSnapshot | undefined): CancellationAdmissionSnapshot {\n if (!snapshot || typeof snapshot !== \"object\") throw new TypeError(\"Cancellation admission snapshot is required\");\n const { depth, maxDepth, resourceLimit } = snapshot;\n if (!Number.isSafeInteger(depth) || !Number.isSafeInteger(maxDepth) || !Number.isSafeInteger(resourceLimit)\n || depth < 0 || maxDepth < 0 || resourceLimit < 0 || depth > maxDepth) {\n throw new RangeError(\"Cancellation admission snapshot must contain bounded safe integers\");\n }\n return { depth, maxDepth, resourceLimit };\n}\n\nfunction requireLink(boundary: CancellationBoundary): LinkState {\n if (!boundary || typeof boundary !== \"object\" || !(boundaryState in boundary)) {\n throw new TypeError(\"Expected a private cancellation boundary\");\n }\n const state = boundary[boundaryState];\n return state.kind === \"link\" ? state : state.lineage;\n}\n\nfunction ensureCapacity(state: LinkState, count = 1): void {\n if (count > state.resourceLimit - state.resourcesUsed) throw new CancellationCapacityError();\n}\n\nfunction originRank(origin: CancellationOrigin): number {\n if (origin.role === \"root-caller\") return -1;\n if (origin.role === \"invoke-option\") return requireLink(origin.frame).depth;\n return Number.POSITIVE_INFINITY;\n}\n\nfunction betterOrigin(current: CancellationOrigin | undefined, candidate: CancellationOrigin): boolean {\n if (!current) return true;\n return originRank(candidate) < originRank(current);\n}\n\nfunction deactivateSubscriber(state: LinkState, subscriber: Subscriber, release: boolean): void {\n if (!subscriber.active) return;\n subscriber.active = false;\n state.subscribers.delete(subscriber);\n if (release) state.resourcesUsed--;\n}\n\nfunction notify(state: LinkState, origin: CancellationOrigin): void {\n state.notifying++;\n try {\n for (const subscriber of [...state.subscribers]) {\n if (state.closed) break;\n if (!subscriber.active) continue;\n try { subscriber.callback(origin); }\n catch (error) {\n state.failures.push(error);\n deactivateSubscriber(state, subscriber, false);\n }\n }\n } finally {\n state.notifying--;\n if (state.closed && state.notifying === 0) finalizeClose(state);\n }\n}\n\nfunction publish(state: LinkState, origin: CancellationOrigin): void {\n if (state.closed) return;\n let changed = false;\n if (!state.delivered) {\n state.delivered = origin;\n state.controller.abort(origin.signal.reason);\n changed = true;\n }\n if (betterOrigin(state.selected, origin)) {\n state.selected = origin;\n changed = true;\n }\n if (changed) notify(state, origin);\n}\n\nfunction addSubscriber(state: LinkState, callback: (origin: CancellationOrigin) => void): () => void {\n if (state.closed) throw state.closedReason;\n ensureCapacity(state);\n const subscriber: Subscriber = { active: true, callback };\n state.resourcesUsed++;\n state.subscribers.add(subscriber);\n let detached = false;\n return () => {\n if (detached) return;\n detached = true;\n deactivateSubscriber(state, subscriber, true);\n };\n}\n\nfunction removeSignalListener(detacher: SignalDetacher): unknown[] {\n if (!detacher.active) return [];\n detacher.active = false;\n try {\n detacher.signal.removeEventListener(\"abort\", detacher.listener);\n return [];\n } catch (error) {\n return [error];\n }\n}\n\nfunction attachOrigin(state: LinkState, origin: CancellationOrigin): void {\n if (signalAborted(origin.signal)) return;\n ensureCapacity(state);\n const listener = () => publish(state, origin);\n const detacher: SignalDetacher = { active: true, signal: origin.signal, listener };\n try {\n origin.signal.addEventListener(\"abort\", listener, { once: true });\n } catch (error) {\n const rollback = removeSignalListener(detacher);\n if (rollback.length) throw new AggregateError([error, ...rollback], \"Cancellation listener initialization failed\");\n throw error;\n }\n state.resourcesUsed++;\n state.signalDetachers.push(detacher);\n if (signalAborted(origin.signal)) publish(state, origin);\n}\n\nfunction visibleOrigins(state: LinkState): CancellationOrigin[] {\n if (state.closed) {\n const fixed = state.selected ?? state.delivered;\n return fixed ? [fixed] : [];\n }\n const lineage: LinkState[] = [];\n for (let current: LinkState | undefined = state; current; current = current.parent) lineage.push(current);\n lineage.reverse();\n const origins: CancellationOrigin[] = [];\n for (const frame of lineage) {\n if (frame.closed) {\n const fixed = frame.selected ?? frame.delivered;\n if (fixed) origins.push(fixed);\n continue;\n }\n if (frame.rootCaller && signalAborted(frame.rootCaller.signal)) origins.push(frame.rootCaller);\n if (frame.localInvoke && signalAborted(frame.localInvoke.signal)) origins.push(frame.localInvoke);\n for (const control of frame.controls) if (signalAborted(control.signal)) origins.push(control);\n if (frame.selected && !origins.includes(frame.selected)) origins.push(frame.selected);\n if (frame.delivered && !origins.includes(frame.delivered)) origins.push(frame.delivered);\n }\n return origins;\n}\n\nfunction admissionOrigins(state: LinkState): CancellationOrigin[] {\n const lineage: LinkState[] = [];\n for (let current: LinkState | undefined = state; current; current = current.parent) lineage.push(current);\n lineage.reverse();\n const origins: CancellationOrigin[] = [];\n for (const frame of lineage) {\n if (frame.rootCaller && signalAborted(frame.rootCaller.signal)) origins.push(frame.rootCaller);\n if (frame.localInvoke && signalAborted(frame.localInvoke.signal)) origins.push(frame.localInvoke);\n const deliveredControl = frame.delivered?.role === \"budget-control\" || frame.delivered?.role === \"pipeline-control\"\n ? frame.delivered\n : undefined;\n if (deliveredControl && signalAborted(deliveredControl.signal)) origins.push(deliveredControl);\n for (const control of frame.controls) {\n if (signalAborted(control.signal) && control !== deliveredControl) origins.push(control);\n }\n }\n return origins;\n}\n\nfunction bestVisibleOrigin(state: LinkState): CancellationOrigin | undefined {\n const origins = visibleOrigins(state);\n const root = origins.find(origin => origin.role === \"root-caller\");\n if (root) return root;\n const invokes = origins.filter(origin => origin.role === \"invoke-option\");\n invokes.sort((left, right) => originRank(left) - originRank(right));\n return invokes[0] ?? origins.find(origin => origin.role === \"budget-control\" || origin.role === \"pipeline-control\");\n}\n\nfunction admissionFailure(state: LinkState): { readonly failed: boolean; readonly reason: unknown } {\n const origins = admissionOrigins(state);\n const root = origins.find(origin => origin.role === \"root-caller\");\n const invokes = origins.filter(origin => origin.role === \"invoke-option\")\n .sort((left, right) => originRank(left) - originRank(right));\n const origin = root ?? invokes[0]\n ?? origins.find(candidate => candidate.role === \"budget-control\" || candidate.role === \"pipeline-control\");\n if (origin) return { failed: true, reason: origin.signal.reason };\n if (state.closed) return { failed: true, reason: state.closedReason };\n return { failed: false, reason: undefined };\n}\n\nfunction throwAdmissionFailure(state: LinkState): void {\n const failure = admissionFailure(state);\n if (failure.failed) throw failure.reason;\n}\n\nfunction initializeState(\n parent: LinkState | undefined,\n admission: CancellationAdmissionSnapshot,\n): LinkState {\n const controller = new AbortController();\n const state: LinkState = {\n kind: \"link\",\n boundary: undefined as unknown as CancellationBoundary,\n parent,\n depth: admission.depth,\n maxDepth: admission.maxDepth,\n resourceLimit: admission.resourceLimit,\n resourcesUsed: 1,\n controller,\n closedReason: new Error(\"Cancellation admission is closed\"),\n rootCaller: undefined,\n localInvoke: undefined,\n controls: [],\n delivered: undefined,\n selected: undefined,\n signalDetachers: [],\n subscribers: new Set(),\n failures: [],\n parentDetach: undefined,\n closed: false,\n finalized: false,\n notifying: 0,\n closeResult: undefined,\n };\n state.boundary = new Boundary(state);\n return state;\n}\n\nfunction finalizeClose(state: LinkState): void {\n if (state.finalized) return;\n state.finalized = true;\n for (const detacher of state.signalDetachers) state.failures.push(...removeSignalListener(detacher));\n state.signalDetachers.length = 0;\n state.parentDetach?.();\n state.parentDetach = undefined;\n for (const subscriber of [...state.subscribers]) deactivateSubscriber(state, subscriber, true);\n state.subscribers.clear();\n state.resourcesUsed = 0;\n Object.freeze(state.failures);\n Object.freeze(state.closeResult!);\n}\n\nfunction closeLink(state: LinkState): CancellationCloseResult {\n if (state.closeResult) return state.closeResult;\n state.closed = true;\n state.closeResult = { failures: state.failures };\n if (state.notifying === 0) finalizeClose(state);\n return state.closeResult;\n}\n\nfunction rollbackState(state: LinkState): unknown[] {\n state.closed = true;\n const failures: unknown[] = [];\n for (const detacher of state.signalDetachers) failures.push(...removeSignalListener(detacher));\n state.signalDetachers.length = 0;\n try { state.parentDetach?.(); } catch (error) { failures.push(error); }\n state.parentDetach = undefined;\n for (const subscriber of [...state.subscribers]) deactivateSubscriber(state, subscriber, true);\n state.subscribers.clear();\n state.resourcesUsed = 0;\n state.finalized = true;\n return failures;\n}\n\nfunction stagedFailure(state: LinkState, reason: unknown): never {\n throwAdmissionFailure(state);\n throw reason;\n}\n\nfunction prepareControls(\n parent: LinkState,\n controls: readonly CancellationControlOriginInput[] | undefined,\n): readonly PreparedControl[] {\n if (controls === undefined) return Object.freeze([]);\n if (!Array.isArray(controls)) return stagedFailure(parent, new TypeError(\"Cancellation controls must be an array\"));\n const prepared: PreparedControl[] = [];\n for (const input of controls) {\n let role: unknown;\n let signal: unknown;\n try {\n if (!input || typeof input !== \"object\") throw new TypeError(\"Invalid cancellation control origin\");\n role = input.role;\n signal = input.signal;\n } catch (error) {\n return stagedFailure(parent, error);\n }\n if (role !== \"budget-control\" && role !== \"pipeline-control\" || !nativeSignal(signal)) {\n return stagedFailure(parent, new TypeError(\"Invalid cancellation control origin\"));\n }\n prepared.push(Object.freeze({ role, signal }));\n }\n throwAdmissionFailure(parent);\n return Object.freeze(prepared);\n}\n\nfunction makePrepared(\n parent: LinkState,\n localSignal: AbortSignal | undefined,\n controls: readonly PreparedControl[],\n admission: CancellationAdmissionSnapshot | undefined,\n): PreparedChildCancellation {\n const state: PreparedState = {\n parent,\n localSignal,\n controls,\n admission,\n owned: localSignal !== undefined || controls.length > 0,\n replayError: new Error(\"Prepared cancellation admission was already activated\"),\n activated: false,\n };\n return new Prepared(state);\n}\n\nfunction localActivationFailure(state: PreparedState): { readonly failed: boolean; readonly reason: unknown } {\n const ancestor = admissionFailure(state.parent);\n if (ancestor.failed) return ancestor;\n if (state.localSignal && signalAborted(state.localSignal)) {\n return { failed: true, reason: state.localSignal.reason };\n }\n const control = state.controls.find(candidate => signalAborted(candidate.signal));\n if (control) return { failed: true, reason: control.signal.reason };\n return { failed: false, reason: undefined };\n}\n\nfunction throwLocalActivationFailure(state: PreparedState): void {\n const failure = localActivationFailure(state);\n if (failure.failed) throw failure.reason;\n}\n\nexport function prepareChildCancellation(\n parent: CancellationBoundary,\n options?: CancellationInvokeOptions,\n snapshot?: CancellationAdmissionSnapshot,\n controls?: readonly CancellationControlOriginInput[],\n): PreparedChildCancellation {\n const parentState = requireLink(parent);\n throwAdmissionFailure(parentState);\n\n let localSignal: AbortSignal | undefined;\n if (options !== undefined) {\n if (options === null || typeof options !== \"object\" && typeof options !== \"function\") {\n return stagedFailure(parentState, new TypeError(\"Cancellation options must be an object or function\"));\n }\n let candidate: unknown;\n try { candidate = options.signal; }\n catch (error) { return stagedFailure(parentState, error); }\n throwAdmissionFailure(parentState);\n if (candidate !== undefined && !nativeSignal(candidate)) {\n return stagedFailure(parentState, new TypeError(\"Cancellation signal must be an AbortSignal\"));\n }\n localSignal = candidate;\n throwAdmissionFailure(parentState);\n if (localSignal !== undefined && signalAborted(localSignal)) throw localSignal.reason;\n }\n\n const preparedControls = prepareControls(parentState, controls);\n if (localSignal === undefined && preparedControls.length === 0) {\n return makePrepared(parentState, undefined, preparedControls, undefined);\n }\n\n let admission: CancellationAdmissionSnapshot;\n try { admission = validateSnapshot(snapshot); }\n catch (error) { return stagedFailure(parentState, error); }\n throwAdmissionFailure(parentState);\n if (admission.depth <= parentState.depth || admission.maxDepth !== parentState.maxDepth) {\n throw new RangeError(\"Cancellation child depth must advance within its supplied maximum\");\n }\n const required = 1\n + Number(localSignal !== undefined)\n + preparedControls.filter(control => !signalAborted(control.signal)).length;\n if (admission.resourceLimit < required) throw new CancellationCapacityError();\n ensureCapacity(parentState);\n return makePrepared(parentState, localSignal, preparedControls, admission);\n}\n\nexport function activateChildCancellation(prepared: PreparedChildCancellation): CancellationBoundary {\n if (!prepared || typeof prepared !== \"object\" || !(preparedState in prepared)) {\n throw new TypeError(\"Expected a private prepared cancellation admission\");\n }\n const preparation = prepared[preparedState];\n if (preparation.activated) throw preparation.replayError;\n preparation.activated = true;\n\n throwLocalActivationFailure(preparation);\n if (!preparation.owned) return new Boundary({ kind: \"borrow\", lineage: preparation.parent });\n\n const admission = preparation.admission!;\n const required = 1\n + Number(preparation.localSignal !== undefined)\n + preparation.controls.filter(control => !signalAborted(control.signal)).length;\n if (admission.resourceLimit < required) throw new CancellationCapacityError();\n ensureCapacity(preparation.parent);\n throwLocalActivationFailure(preparation);\n\n const state = initializeState(preparation.parent, admission);\n if (preparation.localSignal) {\n (state as { localInvoke: CancellationOrigin | undefined }).localInvoke = Object.freeze({\n role: \"invoke-option\",\n signal: preparation.localSignal,\n frame: state.boundary,\n });\n }\n (state as { controls: readonly CancellationOrigin[] }).controls = Object.freeze(preparation.controls.map(control => Object.freeze({\n role: control.role,\n signal: control.signal,\n frame: state.boundary,\n })));\n\n try {\n state.parentDetach = addSubscriber(preparation.parent, inherited => publish(state, inherited));\n if (state.localInvoke) attachOrigin(state, state.localInvoke);\n for (const control of state.controls) attachOrigin(state, control);\n throwAdmissionFailure(preparation.parent);\n const inherited = preparation.parent.selected ?? preparation.parent.delivered;\n if (inherited) publish(state, inherited);\n const cancellation = admissionFailure(state);\n if (cancellation.failed) throw cancellation.reason;\n return state.boundary;\n } catch (error) {\n const cancellation = admissionFailure(state);\n const rollback = rollbackState(state);\n const ancestor = admissionFailure(preparation.parent);\n if (ancestor.failed) throw ancestor.reason;\n if (cancellation.failed) throw cancellation.reason;\n if (rollback.length) {\n throw new AggregateError([error, ...rollback], \"Cancellation child activation failed\");\n }\n throw error;\n }\n}\n\nexport function createRootCancellationLink(input: RootCancellationInput): CancellationBoundary {\n if (!input || typeof input !== \"object\") throw new TypeError(\"Root cancellation input is required\");\n const admission = validateSnapshot(input.admission);\n if (admission.depth !== 0) throw new RangeError(\"Root cancellation depth must be zero\");\n if (input.callerSignal !== undefined && !nativeSignal(input.callerSignal)) throw new TypeError(\"Root caller signal must be an AbortSignal\");\n const controls = input.controls ?? [];\n if (!Array.isArray(controls)) throw new TypeError(\"Cancellation controls must be an array\");\n for (const control of controls) {\n if (!control || typeof control !== \"object\"\n || control.role !== \"budget-control\" && control.role !== \"pipeline-control\"\n || !nativeSignal(control.signal)) throw new TypeError(\"Invalid cancellation control origin\");\n }\n const required = 1\n + Number(input.callerSignal !== undefined && !signalAborted(input.callerSignal))\n + controls.filter(control => !signalAborted(control.signal)).length;\n if (admission.resourceLimit < required) throw new CancellationCapacityError();\n const state = initializeState(undefined, admission);\n (state as { rootCaller: CancellationOrigin | undefined }).rootCaller = input.callerSignal === undefined\n ? undefined\n : Object.freeze({ role: \"root-caller\", signal: input.callerSignal, frame: state.boundary });\n (state as { controls: readonly CancellationOrigin[] }).controls = Object.freeze(controls.map(control => Object.freeze({\n role: control.role,\n signal: control.signal,\n frame: state.boundary,\n })));\n try {\n if (state.rootCaller) attachOrigin(state, state.rootCaller);\n for (const control of state.controls) attachOrigin(state, control);\n const preaborted = bestVisibleOrigin(state);\n if (preaborted) publish(state, preaborted);\n return state.boundary;\n } catch (error) {\n const rollback = rollbackState(state);\n if (rollback.length) throw new AggregateError([error, ...rollback], \"Cancellation root initialization failed\");\n throw error;\n }\n}\n\nexport function admitChildCancellation(\n parent: CancellationBoundary,\n options?: CancellationInvokeOptions,\n snapshot?: CancellationAdmissionSnapshot,\n): CancellationBoundary {\n const parentState = requireLink(parent);\n throwAdmissionFailure(parentState);\n if (options === undefined) return new Boundary({ kind: \"borrow\", lineage: parentState });\n if (options === null || typeof options !== \"object\" && typeof options !== \"function\") {\n return stagedFailure(parentState, new TypeError(\"Cancellation options must be an object or function\"));\n }\n let localSignal: unknown;\n try { localSignal = (options as CancellationInvokeOptions).signal; }\n catch (error) { return stagedFailure(parentState, error); }\n throwAdmissionFailure(parentState);\n if (localSignal === undefined) return new Boundary({ kind: \"borrow\", lineage: parentState });\n if (!nativeSignal(localSignal)) return stagedFailure(parentState, new TypeError(\"Cancellation signal must be an AbortSignal\"));\n throwAdmissionFailure(parentState);\n if (signalAborted(localSignal)) throw localSignal.reason;\n let admission: CancellationAdmissionSnapshot;\n try { admission = validateSnapshot(snapshot); }\n catch (error) { return stagedFailure(parentState, error); }\n throwAdmissionFailure(parentState);\n if (admission.depth <= parentState.depth || admission.maxDepth !== parentState.maxDepth) {\n throw new RangeError(\"Cancellation child depth must advance within its supplied maximum\");\n }\n if (admission.resourceLimit < 2) throw new RangeError(\"Owned cancellation admission requires two local resource slots\");\n ensureCapacity(parentState);\n const state = initializeState(parentState, admission);\n const origin: CancellationOrigin = Object.freeze({ role: \"invoke-option\", signal: localSignal, frame: state.boundary });\n (state as { localInvoke: CancellationOrigin | undefined }).localInvoke = origin;\n try {\n state.parentDetach = addSubscriber(parentState, inherited => publish(state, inherited));\n attachOrigin(state, origin);\n throwAdmissionFailure(parentState);\n if (signalAborted(localSignal)) throw localSignal.reason;\n const inherited = parentState.selected ?? parentState.delivered;\n if (inherited) publish(state, inherited);\n return state.boundary;\n } catch (error) {\n const rollback = rollbackState(state);\n const ancestor = admissionFailure(parentState);\n if (ancestor.failed) throw ancestor.reason;\n if (rollback.length) throw new AggregateError([error, ...rollback], \"Cancellation child initialization failed\");\n throw error;\n }\n}\n\nexport function subscribeCancellation(\n boundary: CancellationBoundary,\n callback: (origin: CancellationOrigin) => void,\n): () => void {\n if (typeof callback !== \"function\") throw new TypeError(\"Cancellation subscriber must be callable\");\n const state = boundary[boundaryState];\n if (state.kind === \"borrow\") throw new TypeError(\"Borrowed cancellation boundaries cannot own subscriptions\");\n return addSubscriber(state, callback);\n}\n\nfunction validReport(boundary: BoundaryState, captured: CapturedCancellationOutcome<unknown>): CancellationOrigin | undefined {\n if (captured.kind !== \"throw\" || !captured.report || !(reportState in captured.report)) return undefined;\n const report = captured.report[reportState];\n const target = boundary.kind === \"link\" ? boundary : boundary.lineage;\n if (report.target !== target || !Object.is(captured.reason, report.origin.signal.reason)) return undefined;\n return report.origin;\n}\n\nfunction matchingVisibleOrigin(state: LinkState, reason: unknown): CancellationOrigin | undefined {\n return visibleOrigins(state).find(origin => Object.is(reason, origin.signal.reason));\n}\n\nfunction selectionReport(boundary: BoundaryState, origin: CancellationOrigin): CancellationReport | undefined {\n const lineage = boundary.kind === \"link\" ? boundary : boundary.lineage;\n const target = boundary.kind === \"borrow\" ? lineage : lineage.parent;\n if (!target) return undefined;\n const state: ReportState = Object.freeze({ target, origin });\n return Object.freeze({ origin, [reportState]: state });\n}\n\nfunction throwingSelection<Value>(\n boundary: BoundaryState,\n reason: unknown,\n origin?: CancellationOrigin,\n): CancellationSelection<Value> {\n const outcome: SelectedCancellationOutcome<Value> = { kind: \"throw\", reason };\n const report = origin ? selectionReport(boundary, origin) : undefined;\n return report ? { outcome, report } : { outcome };\n}\n\nexport function selectCancellationOutcome<Value>(\n boundary: CancellationBoundary,\n captured: CapturedCancellationOutcome<Value>,\n): CancellationSelection<Value> {\n if (!captured || typeof captured !== \"object\" || captured.kind !== \"return\" && captured.kind !== \"throw\") {\n throw new TypeError(\"A captured return or throw outcome is required\");\n }\n const state = boundary[boundaryState];\n const lineage = state.kind === \"link\" ? state : state.lineage;\n const origins = visibleOrigins(lineage);\n const root = origins.find(origin => origin.role === \"root-caller\");\n if (root) return throwingSelection(state, root.signal.reason, root);\n\n const reported = validReport(state, captured as CapturedCancellationOutcome<unknown>);\n const matching = captured.kind === \"throw\" ? matchingVisibleOrigin(lineage, captured.reason) : undefined;\n const classified = reported ?? matching;\n const invokeMatch = classified?.role === \"invoke-option\";\n if (captured.kind === \"throw\" && !invokeMatch) {\n return throwingSelection(state, captured.reason, classified);\n }\n\n const invokes = origins.filter(origin => origin.role === \"invoke-option\");\n if (reported?.role === \"invoke-option\" && !invokes.includes(reported)) invokes.push(reported);\n invokes.sort((left, right) => originRank(left) - originRank(right));\n const selectedInvoke = invokes[0];\n if (selectedInvoke) return throwingSelection(state, selectedInvoke.signal.reason, selectedInvoke);\n if (captured.kind === \"throw\") return throwingSelection(state, captured.reason, classified);\n return { outcome: { kind: \"return\", value: captured.value } };\n}\n\nexport function selectRuntimeCancellationOutcome<Value>(\n boundary: CancellationBoundary,\n captured: CapturedCancellationOutcome<Value>,\n observedOrigin?: CancellationOrigin,\n): CancellationSelection<Value> {\n if (!captured || typeof captured !== \"object\" || captured.kind !== \"return\" && captured.kind !== \"throw\") {\n throw new TypeError(\"A captured return or throw outcome is required\");\n }\n if (!boundary || typeof boundary !== \"object\" || !(boundaryState in boundary)) {\n throw new TypeError(\"Expected a private cancellation boundary\");\n }\n const state = boundary[boundaryState];\n const lineage = state.kind === \"link\" ? state : state.lineage;\n const origins = visibleOrigins(lineage);\n const root = origins.find(origin => origin.role === \"root-caller\");\n if (root) return throwingSelection(state, root.signal.reason, root);\n\n const reported = validReport(state, captured as CapturedCancellationOutcome<unknown>);\n const observed = captured.kind === \"throw\"\n && observedOrigin !== undefined\n && origins.includes(observedOrigin)\n && Object.is(captured.reason, observedOrigin.signal.reason)\n ? observedOrigin\n : undefined;\n const classified = reported ?? observed;\n\n if (captured.kind === \"throw\" && classified?.role !== \"invoke-option\") {\n return throwingSelection(state, captured.reason, classified);\n }\n\n const invokes = origins.filter(origin => origin.role === \"invoke-option\");\n if (classified?.role === \"invoke-option\" && !invokes.includes(classified)) invokes.push(classified);\n invokes.sort((left, right) => originRank(left) - originRank(right));\n const selectedInvoke = invokes[0];\n if (captured.kind === \"return\") {\n return selectedInvoke\n ? throwingSelection(state, selectedInvoke.signal.reason, selectedInvoke)\n : { outcome: { kind: \"return\", value: captured.value } };\n }\n if (selectedInvoke) return throwingSelection(state, selectedInvoke.signal.reason, selectedInvoke);\n return throwingSelection(state, captured.reason, classified);\n}\n", "import { yieldTurn } from \"../../contracts/yield.js\";\nexport class ArrayFailure extends Error {\n constructor(detail: string) { super(`indexed array: ${detail}`); }\n}\n\nexport interface Charge {\n readonly wrappers?: number;\n readonly slots?: number;\n readonly payload?: number;\n readonly metadata?: number;\n readonly allocatedSlots?: number;\n readonly work?: number;\n readonly generation?: boolean | number;\n readonly version?: boolean | number;\n readonly epoch?: boolean | number;\n}\n\nexport interface Tickets {\n readonly generation: number;\n readonly version: number;\n readonly epoch: number;\n}\n\nconst labels = [\"wrapper\", \"Map slot\", \"payload\", \"metadata\", \"allocated byte\", \"allocated slot\", \"work\"] as const;\ntype Counters = [number, number, number, number, number, number, number];\n\nexport class Admission implements Tickets {\n previous: Admission | undefined;\n next: Admission | undefined;\n owner: ArrayOwner | undefined;\n released = false;\n cleanup: (() => void) | undefined;\n restorationReferences = 0;\n\n constructor(\n readonly ledger: ArrayLedger,\n readonly wrappers: number,\n readonly slots: number,\n readonly payload: number,\n readonly metadata: number,\n readonly generation: number,\n readonly version: number,\n readonly epoch: number,\n ) {}\n\n release(): void {\n if (this.released) return;\n this.released = true;\n this.cleanup?.();\n this.owner?.detach(this);\n this.ledger.release(this);\n }\n}\n\nexport class ArrayLedger {\n #caps: Counters | undefined;\n #used: Counters = [0, 0, 0, 0, 0, 0, 0];\n #sequence = { lastIssued: 0 };\n #checkpoint = 0;\n\n constructor(readonly bytes: number, readonly fields: number, initialTicket = 0) {\n if (!Number.isSafeInteger(initialTicket) || initialTicket < 0) throw new RangeError(\"Invalid private initial ticket\");\n this.#sequence.lastIssued = initialTicket;\n }\n\n internal(commandLimit: number): ArrayLedger {\n const requested = BigInt(commandLimit) + 1n;\n const maximum = BigInt(Number.MAX_SAFE_INTEGER) / 33024n;\n const units = requested < maximum ? requested : maximum;\n const ledger = new ArrayLedger(Number(32n * units), Number(64n * units));\n ledger.#sequence = this.#sequence;\n return ledger;\n }\n\n get active(): boolean { return this.#caps !== undefined; }\n\n snapshot(): { readonly caps: readonly number[] | undefined; readonly used: readonly number[]; readonly lastIssued: number } {\n return { caps: this.#caps?.slice(), used: this.#used.slice(), lastIssued: this.#sequence.lastIssued };\n }\n\n reserve(charge: Charge = {}): Admission {\n const caps = this.#caps ?? this.derive();\n let cursor = this.#sequence.lastIssued;\n const ticket = (requested: boolean | number | undefined, label: string): number => {\n if (!requested) return 0;\n const count = requested === true ? 1 : requested;\n if (!Number.isSafeInteger(count) || count < 0 || count > Number.MAX_SAFE_INTEGER - cursor) throw new ArrayFailure(`private ${label} capacity exhausted`);\n cursor += count;\n return cursor;\n };\n const generation = ticket(charge.generation, \"generation\");\n const version = ticket(charge.version, \"version\");\n const epoch = ticket(charge.epoch, \"epoch\");\n const wrappers = charge.wrappers ?? 0;\n const slots = charge.slots ?? 0;\n const payload = charge.payload ?? 0;\n const metadataRequest = BigInt(charge.metadata ?? 0) + 64n;\n const allocatedSlots = charge.allocatedSlots ?? slots;\n const work = BigInt(charge.work ?? 0) + 15n;\n const requested = [BigInt(wrappers), BigInt(slots), BigInt(payload), metadataRequest, BigInt(payload) + metadataRequest, BigInt(allocatedSlots), work];\n for (let index = 0; index < requested.length; index++) {\n const amount = requested[index]!;\n if (amount < 0n || amount > BigInt(caps[index]! - this.#used[index]!)) {\n throw new ArrayFailure(`private ${labels[index]} limit exceeded`);\n }\n }\n this.#caps = caps;\n this.#sequence.lastIssued = cursor;\n for (let index = 0; index < requested.length; index++) this.#used[index]! += Number(requested[index]!);\n return new Admission(this, wrappers, slots, payload, Number(metadataRequest), generation, version, epoch);\n }\n\n private derive(): Counters {\n const bytes = BigInt(this.bytes);\n const fields = BigInt(this.fields);\n const values = [fields, fields, bytes, 128n * fields, 8n * bytes + 512n * fields, 8n * fields, 32n * bytes + 256n * fields];\n const result: Counters = [0, 0, 0, 0, 0, 0, 0];\n for (let index = 0; index < values.length; index++) {\n const value = values[index]!;\n if (value < 0n || value > BigInt(Number.MAX_SAFE_INTEGER)) throw new ArrayFailure(`private ${labels[index]} capacity is not representable`);\n result[index] = Number(value);\n }\n return result;\n }\n\n release(admission: Admission): void {\n this.#used[0] -= admission.wrappers;\n this.#used[1] -= admission.slots;\n this.#used[2] -= admission.payload;\n this.#used[3] -= admission.metadata;\n }\n\n checkpoint(signal?: AbortSignal, units = 1): Promise<void> | undefined {\n signal?.throwIfAborted();\n this.#checkpoint += units;\n if (this.#checkpoint >= 128) {\n this.#checkpoint %= 128;\n return yieldTurn(signal);\n }\n }\n}\n\nexport function exactSum(left: number, right: number): number {\n if (!Number.isSafeInteger(left) || !Number.isSafeInteger(right) || left < 0 || right < 0 || left > Number.MAX_SAFE_INTEGER - right) {\n throw new ArrayFailure(\"private allocated byte capacity is not representable\");\n }\n return left + right;\n}\n\nexport class ArrayOwner {\n #head: Admission | undefined;\n #firstChild: ArrayOwner | undefined;\n #nextSibling: ArrayOwner | undefined;\n #previousSibling: ArrayOwner | undefined;\n #closed = false;\n #started = false;\n #resolve!: () => void;\n #reject!: (error: unknown) => void;\n #holds = 0;\n #resolveIdle!: () => void;\n readonly #idle: Promise<void>;\n #releasing = false;\n readonly completion: Promise<void>;\n\n private constructor(readonly ledger: ArrayLedger, readonly parent: ArrayOwner | undefined, readonly header: Admission) {\n this.completion = new Promise<void>((resolve, reject) => { this.#resolve = resolve; this.#reject = reject; });\n this.#idle = new Promise<void>(resolve => { this.#resolveIdle = resolve; });\n void this.completion.catch(() => undefined);\n }\n\n static create(ledger: ArrayLedger, parent?: ArrayOwner): ArrayOwner {\n parent?.assertOpen();\n const header = ledger.reserve({ metadata: 64, work: 9 });\n const owner = new ArrayOwner(ledger, parent, header);\n if (parent) {\n owner.#nextSibling = parent.#firstChild;\n if (parent.#firstChild) parent.#firstChild.#previousSibling = owner;\n parent.#firstChild = owner;\n }\n return owner;\n }\n\n assertOpen(): void {\n if (this.#closed) throw new ArrayFailure(\"ownership admission is closed\");\n this.parent?.assertOpen();\n }\n\n reserve(charge: Charge): Admission {\n this.assertOpen();\n return this.adopt(this.ledger.reserve(charge));\n }\n\n adopt(admission: Admission, prepaid = false): Admission {\n const root = this.root();\n if (!prepaid || !root.#holds || root.#releasing) this.assertOpen();\n if (admission.released || admission.ledger !== this.ledger) throw new Error(\"Invalid indexed-array ownership transfer\");\n admission.owner?.detach(admission);\n admission.owner = this;\n admission.previous = undefined;\n admission.next = this.#head;\n if (this.#head) this.#head.previous = admission;\n this.#head = admission;\n return admission;\n }\n\n private root(): ArrayOwner {\n let root: ArrayOwner = this;\n while (root.parent) root = root.parent;\n return root;\n }\n\n hold(): Admission {\n this.assertOpen();\n const root = this.root();\n if (root.#holds === Number.MAX_SAFE_INTEGER) throw new ArrayFailure(\"resource capacity exhausted\");\n const admission = this.reserve({ metadata: 64, work: 5 });\n root.#holds++;\n admission.cleanup = () => {\n root.#holds--;\n if (!root.#holds && root.#closed) root.#resolveIdle();\n };\n return admission;\n }\n\n detach(admission: Admission): void {\n if (admission.previous) admission.previous.next = admission.next;\n else this.#head = admission.next;\n if (admission.next) admission.next.previous = admission.previous;\n admission.owner = undefined;\n admission.previous = undefined;\n admission.next = undefined;\n }\n\n close(): Promise<void> {\n if (!this.#started) {\n this.#started = true;\n this.#closed = true;\n void this.drain().then(this.#resolve, this.#reject);\n }\n return this.completion;\n }\n\n private async drain(): Promise<void> {\n if (!this.parent) {\n if (this.#holds) await this.#idle;\n this.#releasing = true;\n }\n while (this.#firstChild) {\n await this.#firstChild.close();\n const checkpoint = this.ledger.checkpoint();\n if (checkpoint) await checkpoint;\n }\n while (this.#head) {\n this.#head.release();\n const checkpoint = this.ledger.checkpoint();\n if (checkpoint) await checkpoint;\n }\n if (this.parent) {\n if (this.#previousSibling) this.#previousSibling.#nextSibling = this.#nextSibling;\n else this.parent.#firstChild = this.#nextSibling;\n if (this.#nextSibling) this.#nextSibling.#previousSibling = this.#previousSibling;\n }\n this.header.release();\n }\n}\n", "import { Admission, ArrayFailure, ArrayOwner, exactSum } from \"./ledger.js\";\nimport type { Tickets } from \"./ledger.js\";\n\nexport const controlNames: ReadonlySet<string> = new Set([\n \"PATH\", \"PWD\", \"OLDPWD\", \"HOME\", \"CDPATH\", \"IFS\", \"OPTIND\", \"OPTERR\", \"OPTARG\", \"REPLY\", \"LANG\", \"LC_ALL\", \"LC_CTYPE\",\n]);\n\nexport class OwnedText {\n references = 1;\n\n constructor(readonly value: string, readonly bytes: number, readonly admission: Admission) {}\n\n retain(): this {\n if (this.references === Number.MAX_SAFE_INTEGER) throw new ArrayFailure(\"reference capacity is not representable\");\n this.references++;\n return this;\n }\n\n release(): void {\n if (--this.references === 0) this.admission.release();\n }\n}\n\nexport async function textToken(owner: ArrayOwner, value: string, signal: AbortSignal): Promise<OwnedText> {\n let bytes = 0;\n for (let offset = 0; offset < value.length;) {\n const end = Math.min(value.length, offset + 64);\n owner.reserve({ work: end - offset }).release();\n while (offset < end) {\n const code = value.codePointAt(offset)!;\n bytes = exactSum(bytes, code <= 0x7f ? 1 : code <= 0x7ff ? 2 : code <= 0xffff ? 3 : 4);\n offset += code > 0xffff ? 2 : 1;\n }\n await owner.ledger.checkpoint(signal, 64);\n }\n const admission = owner.reserve({ payload: bytes, metadata: 32, work: 4 });\n return new OwnedText(value, bytes, admission);\n}\n\nexport interface Element {\n readonly text: OwnedText;\n readonly slot: Admission;\n}\n\nexport class IndexedBinding {\n readonly values = new Map<number, Element>();\n maximum = -1;\n generation = 0;\n version = 0;\n references = 1;\n\n private constructor(readonly owner: ArrayOwner) {}\n\n static create(parent: ArrayOwner): IndexedBinding {\n const owner = ArrayOwner.create(parent.ledger, parent);\n try {\n owner.reserve({ wrappers: 1, metadata: 128, work: 7 });\n return new IndexedBinding(owner);\n } catch (error) {\n void owner.close();\n throw error;\n }\n }\n\n get(index: number): string | undefined { return this.values.get(index)?.text.value; }\n\n retain(): this {\n if (this.references === Number.MAX_SAFE_INTEGER) throw new ArrayFailure(\"reference capacity is not representable\");\n this.references++;\n return this;\n }\n\n release(): Promise<void> | undefined {\n if (--this.references === 0) return this.owner.close();\n return undefined;\n }\n\n insert(index: number, text: OwnedText): void {\n const slot = this.owner.reserve({ slots: 1, metadata: 32, work: 5 });\n const previous = this.values.get(index);\n const element = { text, slot };\n slot.cleanup = () => {\n if (this.values.get(index) === element) this.values.delete(index);\n text.release();\n };\n this.values.set(index, element);\n if (index > this.maximum) this.maximum = index;\n previous?.slot.release();\n }\n\n async copy(signal: AbortSignal): Promise<IndexedBinding> {\n const copy = IndexedBinding.create(this.owner.parent!);\n this.retain();\n try {\n for (const [index, element] of this.values) {\n copy.owner.reserve({ work: 2 }).release();\n const slot = copy.owner.reserve({ slots: 1, metadata: 32, work: 5 });\n const text = element.text.retain();\n const cloned = { text, slot };\n slot.cleanup = () => { if (copy.values.get(index) === cloned) copy.values.delete(index); text.release(); };\n copy.values.set(index, cloned);\n if (index > copy.maximum) copy.maximum = index;\n await copy.owner.ledger.checkpoint(signal, 2);\n }\n return copy;\n } catch (error) { await copy.release(); throw error; }\n finally { await this.release(); }\n }\n\n async indices(owner: ArrayOwner, signal: AbortSignal): Promise<number[]> {\n const size = this.values.size;\n owner.reserve({ metadata: exactSum(128, size * 64), allocatedSlots: size * 2, work: size * 4 + 6 });\n let indices: number[] = [];\n let scratch: number[] = [];\n for (const index of this.values.keys()) {\n indices.push(index);\n await owner.ledger.checkpoint(signal);\n }\n for (let width = 1; width < size; width *= 2) {\n for (let start = 0; start < size; start += width * 2) {\n let left = start;\n let right = Math.min(size, start + width);\n const leftEnd = right;\n const rightEnd = Math.min(size, start + width * 2);\n for (let destination = start; destination < rightEnd; destination++) {\n owner.reserve({ work: 2 }).release();\n scratch[destination] = left < leftEnd && (right >= rightEnd || indices[left]! <= indices[right]!) ? indices[left++]! : indices[right++]!;\n await owner.ledger.checkpoint(signal, 2);\n }\n }\n const temporary = indices;\n indices = scratch;\n scratch = temporary;\n }\n return indices;\n }\n}\n\ninterface Watch {\n generation: number;\n version: number;\n observers: number;\n typedVersion: number;\n readonly admission: Admission;\n readonly name: OwnedText;\n}\n\nexport class BindingWatch {\n #closed = false;\n readonly generation: number;\n readonly version: number;\n readonly typedVersion: number;\n\n constructor(readonly store: BindingStore, readonly name: string, readonly watch: Watch, readonly admission: Admission) {\n this.generation = watch.generation;\n this.version = watch.version;\n this.typedVersion = watch.typedVersion;\n }\n\n valid(): boolean { return this.watch.generation === this.generation && this.watch.version === this.version; }\n\n close(): void {\n if (this.#closed) return;\n this.#closed = true;\n this.store.retire(this.name, this.watch);\n this.admission.release();\n }\n}\n\ninterface NamedBinding {\n binding: IndexedBinding;\n readonly name: OwnedText;\n readonly admission: Admission;\n}\n\nexport class BindingStore {\n readonly bindings = new Map<string, NamedBinding>();\n readonly watches = new Map<string, Watch>();\n epoch = 0;\n\n private constructor(public owner: ArrayOwner) {}\n\n static create(parent: ArrayOwner): BindingStore {\n parent.reserve({ metadata: 192, work: 10 });\n return new BindingStore(parent);\n }\n\n get(name: string): IndexedBinding | undefined { return this.bindings.get(name)?.binding; }\n\n async watch(name: string, operation: ArrayOwner, signal: AbortSignal, owner = this.owner): Promise<BindingWatch> {\n let watch = this.watches.get(name);\n const observer = operation.reserve({ metadata: 64, work: 5 });\n if (!watch) {\n signal.throwIfAborted();\n owner.reserve({ work: name.length }).release();\n const bytes = Buffer.byteLength(name);\n const token = new OwnedText(name, bytes, owner.reserve({ metadata: 32, payload: bytes, work: 4 }));\n try {\n const admission = owner.reserve({ slots: 1, metadata: 96, generation: true, version: true, work: 9 });\n watch = { generation: admission.generation, version: admission.version, typedVersion: 0, observers: 0, admission, name: token };\n this.watches.set(name, watch);\n } catch (error) { token.release(); throw error; }\n }\n if (watch.observers === Number.MAX_SAFE_INTEGER) throw new ArrayFailure(\"observer capacity is not representable\");\n watch.observers++;\n const result = new BindingWatch(this, name, watch, observer);\n observer.cleanup = () => result.close();\n await operation.ledger.checkpoint(signal, name.length);\n return result;\n }\n\n retire(name: string, watch: Watch): void {\n if (--watch.observers !== 0) return;\n this.watches.delete(name);\n watch.admission.release();\n watch.name.release();\n }\n\n tickets(name?: string): Admission {\n const guarded = name !== undefined && (this.bindings.has(name) || this.watches.has(name));\n return this.owner.reserve({ generation: guarded, version: guarded, epoch: true, work: 5 });\n }\n\n changed(tickets: Tickets, name?: string): void {\n this.epoch = tickets.epoch;\n if (name !== undefined) {\n const watch = this.watches.get(name);\n if (watch) { watch.generation = tickets.generation; watch.version = tickets.version; }\n const binding = this.get(name);\n if (binding) { binding.generation = tickets.generation; binding.version = tickets.version; }\n }\n }\n\n async prepareName(name: string, operation: ArrayOwner, signal: AbortSignal): Promise<{ readonly name: OwnedText; readonly admission: Admission } | undefined> {\n if (this.bindings.has(name)) return undefined;\n const token = await textToken(operation, name, signal);\n try {\n const admission = operation.reserve({ slots: 1, metadata: 32, work: 5 });\n return { name: token, admission };\n } catch (error) { token.release(); throw error; }\n }\n\n publish(name: string, binding: IndexedBinding, tickets: Tickets, prepared?: { readonly name: OwnedText; readonly admission: Admission }, restoring = false, owner = this.owner): Promise<void> | undefined {\n const previous = this.bindings.get(name);\n const displaced = previous?.binding;\n if (previous) previous.binding = binding;\n else {\n if (!prepared) throw new Error(\"Missing indexed-array name admission\");\n owner.adopt(prepared.name.admission, restoring);\n owner.adopt(prepared.admission, restoring);\n const entry = { binding, name: prepared.name, admission: prepared.admission };\n prepared.admission.cleanup = () => {\n if (this.bindings.get(name) !== entry) return;\n this.bindings.delete(name);\n entry.name.release();\n void entry.binding.release();\n };\n this.bindings.set(name, entry);\n }\n this.changed(tickets, name);\n const watch = this.watches.get(name);\n if (watch) watch.typedVersion = tickets.version;\n return displaced?.release();\n }\n\n remove(name: string, tickets: Tickets): Promise<void> | undefined {\n const previous = this.bindings.get(name);\n this.bindings.delete(name);\n this.changed(tickets, name);\n if (!previous) return undefined;\n previous.admission.release();\n previous.name.release();\n return previous.binding.release();\n }\n}\n", "import type { State } from \"../runtime.js\";\nimport type { InvocationScope } from \"../cleanup.js\";\nimport { ArrayFailure, ArrayLedger, ArrayOwner } from \"./ledger.js\";\nimport type { Admission, Tickets } from \"./ledger.js\";\nimport { BindingStore, textToken } from \"./bindings.js\";\nimport { ValueArena, ValueStore, type ValueScope } from \"../value-state.js\";\nimport type { GetoptsInput } from \"../getopts.js\";\n\ninterface Session {\n readonly values: ValueArena;\n readonly ledger: ArrayLedger;\n readonly internal: ArrayLedger;\n readonly scope: InvocationScope;\n readonly monitors?: Set<StateMonitor>;\n owner: ArrayOwner | undefined;\n guestOwner: ArrayOwner | undefined;\n}\n\nconst sessions = new WeakMap<object, Session>();\nconst monitors = new WeakMap<State, StateMonitor>();\nconst overlayNext = Symbol(\"array overlay parent\");\ntype OverlayMap = Map<string, { superseded?: boolean }> & { [overlayNext]?: OverlayMap };\n\nexport function trackState(state: State, budget: { readonly values?: ValueArena; readonly limits: { readonly maxExpansionBytes: number; readonly maxExpansionFields: number; readonly maxCommands?: number } }, scope: InvocationScope): State {\n const existing = monitors.get(state);\n if (existing) return existing.proxy;\n let session = sessions.get(budget);\n if (!session) {\n while (scope.parent) scope = scope.parent;\n const ledger = new ArrayLedger(budget.limits.maxExpansionBytes, budget.limits.maxExpansionFields);\n const values = budget.values ?? new ValueArena(budget.limits.maxExpansionBytes, budget.limits.maxExpansionFields, () => scope.assertOpen());\n session = { values, ledger, internal: ledger.internal(budget.limits.maxCommands ?? 10_000), scope, owner: undefined, guestOwner: undefined };\n const registered = session;\n scope.register(async () => { await registered.scope.drainWork(); await registered.owner?.close(); });\n scope.register(async () => { await registered.scope.drainWork(); values.close(); });\n sessions.set(budget, session);\n }\n return new StateMonitor(state, session).proxy;\n}\n\nexport function stateMonitor(state: State): StateMonitor | undefined { return monitors.get(state); }\n\nexport function arrayStore(state: State): BindingStore | undefined { return monitors.get(state)?.store; }\n\nexport function guestArrays(state: State): BindingStore | undefined {\n const monitor = monitors.get(state), store = monitor?.store;\n return store?.owner.ledger === monitor?.session.ledger ? store : undefined;\n}\n\nexport function requireArrays(state: State): BindingStore {\n const monitor = monitors.get(state);\n if (!monitor) throw new Error(\"Indexed-array state was not enrolled\");\n return monitor.activate();\n}\n\nexport class StateMonitor {\n readonly proxy: State;\n readonly values: ValueStore;\n readonly positionals: ValueStore;\n store: BindingStore | undefined;\n epoch = 0;\n #publication = false;\n readonly #wrapped = new WeakMap<object, object>();\n #wrapperCount = 0;\n #enrollment: Admission | undefined;\n #internalEnrollment: Admission | undefined;\n #restorations: Restoration | undefined;\n #overlays: OverlayMap | undefined;\n #retireCleanup: (() => void) | undefined;\n #positionalRevision: object = {};\n #getoptsInput: { input: GetoptsInput; allocation: ValueScope } | undefined;\n\n constructor(readonly raw: State, readonly session: Session, source?: StateMonitor) {\n this.values = source ? source.values.clone() : new ValueStore(session.values);\n try { this.positionals = source ? source.positionals.clone() : new ValueStore(session.values); }\n catch (error) { this.values.close(); throw error; }\n this.proxy = this.wrap(raw, \"state\") as State;\n monitors.set(raw, this);\n monitors.set(this.proxy, this);\n if (session.monitors) session.monitors.add(this);\n else this.#retireCleanup = session.scope.register(async () => { await session.scope.drainWork(); this.closeValues(); });\n }\n\n closeValues(): void {\n this.values.close();\n this.positionals.close();\n this.invalidateGetoptsInput();\n this.#retireCleanup?.();\n this.#retireCleanup = undefined;\n }\n\n get positionalRevision(): object { return this.#positionalRevision; }\n get getoptsInput(): GetoptsInput | undefined { return this.#getoptsInput?.input; }\n\n retainGetoptsInput(revision: object, input: GetoptsInput, allocation: ValueScope): boolean {\n this.session.scope.assertOpen();\n if (revision !== this.#positionalRevision) return false;\n this.#getoptsInput?.allocation.close();\n this.#getoptsInput = { input, allocation };\n return true;\n }\n\n private invalidateGetoptsInput(): void {\n this.#getoptsInput?.allocation.close();\n this.#getoptsInput = undefined;\n this.#positionalRevision = {};\n }\n\n private changedValue(target: object, field: string, key: PropertyKey): void {\n if (field === \"state\") {\n if (key === \"variables\") this.values.invalidate();\n if (key === \"positional\") { this.positionals.invalidate(); this.invalidateGetoptsInput(); }\n } else if (field === \"variables\" && (this.raw.variables === target || this.raw.variables === this.#wrapped.get(target))) {\n this.values.invalidate(String(key));\n } else if (field === \"positional\" && (this.raw.positional === target || this.raw.positional === this.#wrapped.get(target))) {\n this.positionals.invalidate();\n this.invalidateGetoptsInput();\n }\n }\n\n internalOwner(): ArrayOwner {\n this.session.scope.assertOpen();\n return this.session.owner ??= ArrayOwner.create(this.session.internal);\n }\n\n activate(internal = false): BindingStore {\n if (this.store && (internal || this.#enrollment)) return this.store;\n const root = this.internalOwner();\n const owner = internal ? root : this.session.guestOwner ??= ArrayOwner.create(this.session.ledger, root);\n const enrollment = owner.reserve({ slots: this.#wrapperCount * 2 + 2, metadata: 128 + this.#wrapperCount * 128, work: this.#wrapperCount * 8 + 8 });\n if (internal) this.#internalEnrollment = enrollment;\n else this.#enrollment = enrollment;\n let pending = 0;\n for (let entry = this.#restorations; entry; entry = entry.next) if (!entry.epoch) pending++;\n if (pending) {\n const admission = owner.reserve({ epoch: pending, metadata: pending * 64, work: pending * 8 });\n admission.restorationReferences = pending;\n let ticket = admission.epoch - pending;\n for (let entry = this.#restorations; entry; entry = entry.next) if (!entry.epoch) { entry.epoch = ++ticket; entry.admission = admission; }\n }\n for (let entry = this.#restorations; entry; entry = entry.next) if (entry.resource && !entry.holding) entry.holding = owner.hold();\n if (this.store) this.store.owner = owner;\n else this.store = BindingStore.create(owner);\n this.store.epoch = this.epoch;\n return this.store;\n }\n\n restoration(resource = false): Restoration {\n const owner = this.store?.owner ?? this.session.guestOwner;\n const admission = owner?.reserve({ epoch: true, metadata: 64, work: 8 });\n if (admission) admission.restorationReferences = 1;\n const permit = new Restoration(this, admission, resource);\n try {\n if (resource && owner) permit.holding = owner.hold();\n } catch (error) { admission?.release(); throw error; }\n permit.next = this.#restorations;\n if (this.#restorations) this.#restorations.previous = permit;\n this.#restorations = permit;\n return permit;\n }\n\n openOverlay(frame: OverlayMap): void {\n if (this.#overlays) frame[overlayNext] = this.#overlays;\n this.#overlays = frame;\n }\n\n closeOverlay(frame: OverlayMap): void {\n if (this.#overlays !== frame) throw new Error(\"Indexed-array overlay dependency order violated\");\n this.#overlays = frame[overlayNext];\n delete frame[overlayNext];\n }\n\n *overlayFrames(): Iterable<OverlayMap> {\n for (let frame = this.#overlays; frame; frame = frame[overlayNext]) yield frame;\n }\n\n prepareCollection<Value extends object>(value: Value, field: string): Value {\n return this.wrap(value, field) as Value;\n }\n\n async prepareTypedPublication(name: string, owner: ArrayOwner, signal: AbortSignal): Promise<() => void> {\n owner.reserve({ metadata: 128, work: 7 });\n const saved: { superseded?: boolean }[] = [];\n for (let frame = this.#overlays; frame; frame = frame[overlayNext]) {\n owner.reserve({ work: 2 }).release();\n const entry = frame.get(name);\n if (entry) {\n owner.reserve({ metadata: 32, allocatedSlots: 1, work: 3 });\n saved.push(entry);\n }\n await owner.ledger.checkpoint(signal, 2);\n }\n return () => { for (const entry of saved) entry.superseded = true; };\n }\n\n retire(permit: Restoration): void {\n if (permit.previous) permit.previous.next = permit.next;\n else this.#restorations = permit.next;\n if (permit.next) permit.next.previous = permit.previous;\n }\n\n restore(permit: Restoration, action: () => void): void {\n this.#publication = true;\n try { action(); }\n finally { this.#publication = false; }\n if (permit.epoch) {\n this.epoch = permit.epoch;\n if (this.store) this.store.epoch = permit.epoch;\n }\n }\n\n mutation(name?: string): Admission | undefined {\n if (this.#publication) return undefined;\n return this.store ? this.store.tickets(name) : this.session.guestOwner?.reserve({ epoch: true, work: 5 });\n }\n\n finish(tickets: Admission | undefined, name?: string): void {\n if (!tickets) return;\n this.epoch = tickets.epoch;\n this.store?.changed(tickets, name);\n tickets.release();\n }\n\n publish(tickets: Tickets, name: string | undefined, action: () => void): void {\n if (this.#publication) throw new Error(\"Nested indexed-array publication\");\n this.#publication = true;\n try { action(); }\n finally { this.#publication = false; }\n this.epoch = tickets.epoch;\n this.store?.changed(tickets, name);\n }\n\n private wrap(value: object, field: string): object {\n const previous = this.#wrapped.get(value);\n if (previous) return previous;\n if (this.#enrollment || this.#internalEnrollment) {\n (this.#enrollment ? this.session.guestOwner! : this.session.owner!).reserve({ slots: 2, metadata: 128, work: 8 });\n }\n this.#wrapperCount++;\n const monitor = this;\n const named = field === \"variables\" || field === \"exported\" || field === \"readonlyVariables\";\n let proxy: object;\n if (value instanceof Map || value instanceof Set) {\n proxy = new Proxy(value, { get(target, key) {\n if (key === \"set\" && target instanceof Map) return (name: unknown, entry: unknown) => {\n const tickets = monitor.mutation(named ? String(name) : undefined);\n target.set(name, entry);\n monitor.finish(tickets, named ? String(name) : undefined);\n return proxy;\n };\n if (key === \"add\" && target instanceof Set) return (name: unknown) => {\n const tickets = monitor.mutation(named ? String(name) : undefined);\n target.add(name);\n monitor.finish(tickets, named ? String(name) : undefined);\n return proxy;\n };\n if (key === \"delete\") return (name: unknown) => {\n const tickets = monitor.mutation(named ? String(name) : undefined);\n const result = target.delete(name);\n monitor.finish(tickets, named ? String(name) : undefined);\n return result;\n };\n if (key === \"clear\") return () => {\n const tickets = monitor.mutation();\n target.clear();\n monitor.finish(tickets);\n };\n const entry: unknown = Reflect.get(target, key, target);\n return typeof entry === \"function\" ? entry.bind(target) : entry;\n } });\n } else {\n proxy = new Proxy(value, {\n get(target, key, receiver) {\n const entry: unknown = Reflect.get(target, key, receiver);\n if (entry && typeof entry === \"object\" && key !== \"redirectAssignments\") {\n if (field === \"state\" && key === \"functions\") return monitor.wrap(entry, \"functions\");\n if (field !== \"functions\") return monitor.wrap(entry, field === \"state\" ? String(key) : field);\n }\n return entry;\n },\n set(target, key, entry) {\n const name = named ? String(key) : undefined;\n const tickets = monitor.mutation(name);\n const result = Reflect.set(target, key, entry);\n if (result) monitor.changedValue(target, field, key);\n monitor.finish(tickets, name);\n return result;\n },\n deleteProperty(target, key) {\n const name = named ? String(key) : undefined;\n const tickets = monitor.mutation(name);\n const result = Reflect.deleteProperty(target, key);\n if (result) monitor.changedValue(target, field, key);\n monitor.finish(tickets, name);\n return result;\n },\n defineProperty(target, key, descriptor) {\n const name = named ? String(key) : undefined;\n const tickets = monitor.mutation(name);\n const result = Reflect.defineProperty(target, key, descriptor);\n if (result) monitor.changedValue(target, field, key);\n monitor.finish(tickets, name);\n return result;\n },\n });\n }\n this.#wrapped.set(value, proxy);\n this.#wrapped.set(proxy, proxy);\n return proxy;\n }\n}\n\nexport class Restoration {\n next: Restoration | undefined;\n previous: Restoration | undefined;\n epoch: number;\n #closed = false;\n holding: Admission | undefined;\n\n constructor(readonly monitor: StateMonitor, public admission: Admission | undefined, readonly resource: boolean) { this.epoch = admission?.epoch ?? 0; }\n\n apply(action: () => void, close = true): void {\n if (this.#closed) throw new Error(\"Indexed-array restoration already consumed\");\n try { this.monitor.restore(this, action); }\n finally { if (close) this.close(); }\n }\n\n close(): void {\n if (this.#closed) return;\n this.#closed = true;\n this.monitor.retire(this);\n if (this.admission && --this.admission.restorationReferences === 0) this.admission.release();\n this.holding?.release();\n }\n}\n\nexport async function snapshotState(state: State, clone: () => State, signal: AbortSignal, prepare?: (destination: State, owner: ArrayOwner) => Promise<void>, scope?: InvocationScope): Promise<State> {\n const monitor = stateMonitor(state);\n if (!monitor) return clone();\n const session: Session = scope ? { ...monitor.session, scope, owner: undefined, guestOwner: undefined, monitors: new Set() } : monitor.session;\n if (scope) scope.register(async () => {\n await scope.drainWork();\n for (const owned of session.monitors!) {\n owned.closeValues();\n if (owned.store) for (const [name] of owned.store.bindings) {\n await scope.cleanup(async () => { await owned.store!.remove(name, { generation: 0, version: 0, epoch: 0 }); });\n }\n }\n session.monitors!.clear();\n await session.owner?.close();\n });\n if (!monitor.store && !monitor.session.ledger.active) return new StateMonitor(clone(), session, monitor).proxy;\n const store = monitor.store ?? monitor.activate();\n const internal = store.owner.ledger === monitor.session.internal;\n const epoch = monitor.epoch;\n const parent = scope ? session.owner ??= ArrayOwner.create(session.internal) : store.owner;\n const owner = ArrayOwner.create(store.owner.ledger, parent);\n const holding = store.owner.hold();\n const check = () => {\n signal.throwIfAborted();\n if (monitor.epoch !== epoch) throw new ArrayFailure(\"stale state snapshot\");\n };\n let result: StateMonitor | undefined;\n try {\n owner.reserve({ metadata: 512, work: 32, epoch: true });\n if (!internal) {\n for (const key in state.variables) {\n if (!Object.hasOwn(state.variables, key)) continue;\n check();\n owner.reserve({ slots: 1, metadata: 32, work: 4 });\n await textToken(owner, key, signal);\n check();\n await textToken(owner, state.variables[key]!, signal);\n check();\n }\n for (const value of state.positional) { await textToken(owner, value, signal); check(); }\n for (const key of state.exported) { owner.reserve({ slots: 1, metadata: 32, work: 4 }); await textToken(owner, key, signal); check(); }\n for (const key of state.readonlyVariables ?? []) { owner.reserve({ slots: 1, metadata: 32, work: 4 }); await textToken(owner, key, signal); check(); }\n for (const key of state.functions.keys()) { owner.reserve({ slots: 1, metadata: 32, work: 4 }); await textToken(owner, key, signal); check(); }\n for (const value of state.directoryStack?.entries ?? []) { await textToken(owner, value, signal); check(); }\n for (const frame of state.locals) {\n owner.reserve({ metadata: 64, work: 4 });\n for (const [key, saved] of frame) {\n owner.reserve({ slots: 1, metadata: 64, work: 8 });\n await textToken(owner, key, signal); check();\n if (saved.value !== undefined) { await textToken(owner, saved.value, signal); check(); }\n }\n }\n }\n check();\n result = new StateMonitor(clone(), session, monitor);\n const destination = result.activate(internal);\n for (const [name, entry] of store.bindings) {\n check();\n const prepared = await destination.prepareName(name, owner, signal);\n check();\n const tickets = owner.reserve({ generation: true, version: true, epoch: true, work: 5 });\n entry.binding.retain();\n destination.publish(name, entry.binding, tickets, prepared);\n await owner.ledger.checkpoint(signal, 5);\n }\n check();\n if (prepare) { await prepare(result.proxy, owner); check(); }\n return result.proxy;\n } catch (error) {\n result?.closeValues();\n if (result?.store) for (const [name] of result.store.bindings) await result.store.remove(name, { generation: 0, version: 0, epoch: 0 });\n await owner.close();\n throw error;\n } finally { holding.release(); }\n}\n", "import type { State } from \"./runtime.js\";\nimport { throwCleanupFailures, type InvocationScope } from \"./cleanup.js\";\nimport { ArrayFailure, ArrayOwner } from \"./arrays/ledger.js\";\nimport { IndexedBinding, textToken } from \"./arrays/bindings.js\";\nimport { arrayStore, stateMonitor } from \"./arrays/state.js\";\n\nconst name = \"PIPESTATUS\";\n\nexport type PipelineStatusTarget = \"indexed\" | \"scalar\" | \"readonly-absent\" | \"local-tombstone\" | \"exported-absent\" | \"absent\";\n\nexport function pipelineStatusTarget(state: State): PipelineStatusTarget {\n if (arrayStore(state)?.get(name)) return \"indexed\";\n if (Object.hasOwn(state.variables, name)) return \"scalar\";\n if (state.readonlyVariables?.has(name)) return \"readonly-absent\";\n for (let index = state.locals.length - 1; index >= 0; index--) {\n if (state.locals[index]!.has(name)) return \"local-tombstone\";\n }\n if (state.exported.has(name)) return \"exported-absent\";\n return \"absent\";\n}\n\nexport async function publishPipelineStatus(\n state: State,\n statuses: readonly number[],\n signal: AbortSignal,\n scope: InvocationScope,\n): Promise<void> {\n signal.throwIfAborted();\n scope.assertOpen();\n const target = pipelineStatusTarget(state);\n if (target !== \"absent\" && target !== \"indexed\") return;\n const monitor = stateMonitor(state)!;\n const store = monitor.activate(true);\n const owner = monitor.internalOwner();\n const epoch = monitor.epoch;\n const operation = ArrayOwner.create(owner.ledger, owner);\n const holding = owner.hold();\n let staged: IndexedBinding | undefined;\n let primary = false;\n let failure: unknown;\n try {\n const watch = await store.watch(name, operation, signal, owner);\n const supersede = await stateMonitor(state)!.prepareTypedPublication(name, operation, signal);\n const tickets = operation.reserve({ generation: true, version: true, epoch: true, work: 8 });\n const prepared = await store.prepareName(name, operation, signal);\n staged = IndexedBinding.create(owner);\n for (let index = 0; index < statuses.length; index++) {\n operation.reserve({ work: 2 });\n const status = statuses[index]!;\n if (!Number.isSafeInteger(status) || status < 0 || status > 255) throw new TypeError(\"Invalid PIPESTATUS completion\");\n const token = await textToken(staged.owner, String(status), signal);\n try { staged.insert(index, token); } catch (error) { token.release(); throw error; }\n await operation.ledger.checkpoint(signal, 2);\n }\n signal.throwIfAborted();\n scope.assertOpen();\n if (pipelineStatusTarget(state) !== target || monitor.epoch !== epoch || !watch.valid()) throw new ArrayFailure(\"stale PIPESTATUS binding\");\n let released: Promise<void> | undefined;\n stateMonitor(state)!.publish(tickets, name, () => {\n supersede();\n released = store.publish(name, staged!, tickets, prepared, false, owner);\n });\n staged = undefined;\n watch.close();\n await released;\n } catch (error) {\n primary = true;\n failure = error;\n }\n await scope.cleanup(() => staged?.release());\n await scope.cleanup(() => operation.close());\n await scope.cleanup(() => holding.release());\n signal.throwIfAborted();\n if (primary) throw failure;\n throwCleanupFailures(scope.failures);\n}\n", "import type { EreResource } from \"./types.js\";\n\nexport class EreSyntaxError extends Error {\n readonly status = 2;\n constructor(message: string, readonly offset: number) {\n super(`invalid ERE at ${offset}: ${message}`);\n this.name = \"EreSyntaxError\";\n }\n}\n\nexport class EreUnsupportedError extends Error {\n readonly status = 2;\n constructor(message: string, readonly offset: number) {\n super(`unsupported ERE profile at ${offset}: ${message}`);\n this.name = \"EreUnsupportedError\";\n }\n}\n\nexport class EreProfileLimitError extends Error {\n readonly status = 3;\n constructor(readonly resource: EreResource, readonly limit: number) {\n super(`ERE profile limit exceeded: ${resource} (${limit})`);\n this.name = \"EreProfileLimitError\";\n }\n}\n\nexport class EreUsageUnknownError extends Error {\n readonly status = 3;\n constructor(reason: unknown) {\n super(\"ERE invocation usage is unknown; further work is refused\", { cause: reason });\n this.name = \"EreUsageUnknownError\";\n }\n}\n", "import { yieldTurn } from \"../../../contracts/yield.js\";\nimport { EreProfileLimitError, EreUsageUnknownError } from \"./errors.js\";\nimport type { EreExpansionBounds, EreLimits, EreResource, EreUsage } from \"./types.js\";\n\nconst resources: readonly EreResource[] = Object.freeze([\n \"patternBytes\", \"subjectBytes\", \"work\", \"states\", \"allocationUnits\", \"captureBytes\", \"captureSlots\",\n]);\n\nfunction integer(value: number): void {\n if (!Number.isSafeInteger(value) || value < 0) throw new TypeError(\"ERE bounds must be nonnegative safe integers\");\n}\n\nfunction multiply(value: number, factor: number, ceiling: number): number {\n return value > Math.floor(ceiling / factor) ? ceiling : value * factor;\n}\n\nexport function deriveEreLimits(bounds: EreExpansionBounds): EreLimits {\n integer(bounds.maxExpansionBytes);\n integer(bounds.maxExpansionFields);\n const bytes = bounds.maxExpansionBytes;\n const fields = bounds.maxExpansionFields;\n const byteUnits = multiply(bytes, 8, 4_000_000);\n const fieldUnits = multiply(fields, 128, 4_000_000);\n return Object.freeze({\n patternBytes: Math.min(bytes, 65_536),\n subjectBytes: Math.min(bytes, 1_048_576),\n work: multiply(bytes, 32, 50_000_000),\n states: multiply(fields, 8, 65_536),\n allocationUnits: byteUnits >= 4_000_000 - fieldUnits ? 4_000_000 : byteUnits + fieldUnits,\n captureBytes: bytes,\n captureSlots: fields,\n });\n}\n\nexport class EreLedger {\n readonly limits: EreLimits;\n #usage: Record<EreResource, number> = {\n patternBytes: 0, subjectBytes: 0, work: 0, states: 0, allocationUnits: 0, captureBytes: 0, captureSlots: 0,\n };\n #poison: EreUsageUnknownError | undefined;\n #lastYield = 0;\n\n constructor(bounds: EreExpansionBounds, lowering: Partial<EreLimits> = {}) {\n const limits = { ...deriveEreLimits(bounds) };\n for (const resource of Object.keys(lowering)) {\n if (!resources.includes(resource as EreResource)) throw new TypeError(\"unknown ERE limit\");\n const key = resource as EreResource;\n const value = lowering[key];\n if (value === undefined) throw new TypeError(\"undefined ERE limit\");\n integer(value);\n if (value > limits[key]) throw new RangeError(\"ERE limits may only be lowered\");\n limits[key] = value;\n }\n this.limits = Object.freeze(limits);\n }\n\n get usage(): EreUsage { return Object.freeze({ ...this.#usage }); }\n\n check(signal?: AbortSignal): void {\n if (signal?.aborted) throw signal.reason;\n if (this.#poison) throw this.#poison;\n }\n\n charge(resource: EreResource, amount: number, signal?: AbortSignal): void {\n this.check(signal);\n integer(amount);\n if (amount > this.limits[resource] - this.#usage[resource]) {\n throw new EreProfileLimitError(resource, this.limits[resource]);\n }\n this.#usage[resource] += amount;\n }\n\n admitInput(resource: \"patternBytes\" | \"subjectBytes\", length: number, signal?: AbortSignal): void {\n this.check(signal);\n integer(length);\n if (length > this.limits[resource]) throw new EreProfileLimitError(resource, this.limits[resource]);\n this.#usage[resource] = Math.max(this.#usage[resource], length);\n }\n\n async checkpoint(signal?: AbortSignal): Promise<void> {\n this.check(signal);\n if (this.#usage.work - this.#lastYield >= 256) {\n this.#lastYield = this.#usage.work;\n await yieldTurn(signal);\n this.check(signal);\n }\n }\n\n markUnknownUsage(reason: unknown): void {\n this.#poison ??= new EreUsageUnknownError(reason);\n }\n}\n", "import { EreSyntaxError, EreUnsupportedError } from \"./errors.js\";\nimport { EreLedger } from \"./limits.js\";\nimport type { EreFragment, EreNode, EreProgram } from \"./types.js\";\n\nconst programs = new WeakMap<EreProgram, { root: EreNode; ledger: EreLedger }>();\nconst special = \"\\\\.^$[]()|*+?{}\";\nconst classes = new Set([\"alnum\", \"alpha\", \"blank\", \"cntrl\", \"digit\", \"graph\", \"lower\", \"print\", \"punct\", \"space\", \"upper\", \"xdigit\"]);\n\nfunction classMember(name: string, code: number): boolean {\n const upper = code >= 65 && code <= 90;\n const lower = code >= 97 && code <= 122;\n const digit = code >= 48 && code <= 57;\n switch (name) {\n case \"alnum\": return upper || lower || digit;\n case \"alpha\": return upper || lower;\n case \"blank\": return code === 9 || code === 32;\n case \"cntrl\": return code < 32 || code === 127;\n case \"digit\": return digit;\n case \"graph\": return code >= 33 && code <= 126;\n case \"lower\": return lower;\n case \"print\": return code >= 32 && code <= 126;\n case \"punct\": return code >= 33 && code <= 126 && !upper && !lower && !digit;\n case \"space\": return code === 32 || code >= 9 && code <= 13;\n case \"upper\": return upper;\n case \"xdigit\": return digit || code >= 65 && code <= 70 || code >= 97 && code <= 102;\n default: return false;\n }\n}\n\nexport async function admitAscii(text: string, ledger: EreLedger, signal?: AbortSignal): Promise<void> {\n for (let offset = 0; offset < text.length; offset++) {\n ledger.charge(\"work\", 1, signal);\n const code = text.charCodeAt(offset);\n if (code === 0 || code > 127) throw new EreUnsupportedError(\"only non-NUL ASCII in the C/POSIX profile\", offset);\n await ledger.checkpoint(signal);\n }\n}\n\nasync function flatten(input: string | readonly EreFragment[], ledger: EreLedger, signal?: AbortSignal): Promise<{ pattern: string; quoted: readonly boolean[] | null }> {\n if (typeof input === \"string\") {\n ledger.admitInput(\"patternBytes\", input.length, signal);\n await admitAscii(input, ledger, signal);\n return { pattern: input, quoted: null };\n }\n let size = 0;\n for (const fragment of input) {\n if (typeof fragment.text !== \"string\" || typeof fragment.literal !== \"boolean\") throw new TypeError(\"invalid ERE fragment\");\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n ledger.admitInput(\"patternBytes\", fragment.text.length, signal);\n await admitAscii(fragment.text, ledger, signal);\n if (fragment.text.length > ledger.limits.patternBytes - size) ledger.admitInput(\"patternBytes\", ledger.limits.patternBytes + 1, signal);\n size += fragment.text.length;\n ledger.admitInput(\"patternBytes\", size, signal);\n }\n ledger.charge(\"allocationUnits\", size * 2 + input.length + 2, signal);\n const output: string[] = [];\n const quoted: boolean[] = [];\n for (const fragment of input) {\n for (let offset = 0; offset < fragment.text.length; offset++) {\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n quoted.push(fragment.literal);\n }\n output.push(fragment.text);\n await ledger.checkpoint(signal);\n }\n return { pattern: output.join(\"\"), quoted: Object.freeze(quoted) };\n}\n\nclass Parser {\n offset = 0;\n groups = 0;\n nodes = 0;\n constructor(readonly pattern: string, readonly quoted: readonly boolean[] | null, readonly ledger: EreLedger, readonly signal: AbortSignal | undefined) {}\n\n at(character: string, offset = this.offset): boolean { return !this.quoted?.[offset] && this.pattern[offset] === character; }\n\n node(create: () => EreNode): EreNode {\n if (this.nodes >= 4096) throw new EreUnsupportedError(\"4096-node grammar ceiling\", this.offset);\n this.ledger.charge(\"allocationUnits\", 8, this.signal);\n this.nodes++;\n return Object.freeze(create());\n }\n\n async expression(depth: number): Promise<EreNode> {\n if (depth > 64) throw new EreUnsupportedError(\"64-level grammar ceiling\", this.offset);\n this.ledger.charge(\"allocationUnits\", 1, this.signal);\n const alternatives: EreNode[] = [];\n while (true) {\n const child = await this.sequence(depth);\n this.ledger.charge(\"allocationUnits\", 1, this.signal);\n alternatives.push(child);\n if (!this.at(\"|\")) break;\n this.offset++;\n }\n if (alternatives.length === 1) return alternatives[0]!;\n this.ledger.charge(\"work\", alternatives.length * 2, this.signal);\n await this.ledger.checkpoint(this.signal);\n return this.node(() => ({ kind: \"alternative\", children: Object.freeze(alternatives), nullable: alternatives.some(value => value.nullable), captured: alternatives.some(value => value.captured) }));\n }\n\n async sequence(depth: number): Promise<EreNode> {\n this.ledger.charge(\"allocationUnits\", 1, this.signal);\n const children: EreNode[] = [];\n while (this.offset < this.pattern.length && !this.at(\"|\") && !this.at(\")\")) {\n this.ledger.charge(\"work\", 1, this.signal);\n await this.ledger.checkpoint(this.signal);\n let child = await this.atom(depth);\n const operator = this.quoted?.[this.offset] ? undefined : this.pattern[this.offset];\n if (operator === \"*\" || operator === \"+\" || operator === \"?\" || operator === \"{\") {\n const begin = this.offset++;\n let min = operator === \"+\" ? 1 : 0;\n let max = operator === \"?\" ? 1 : Infinity;\n if (operator === \"{\") {\n min = await this.count();\n max = min;\n if (this.at(\",\")) {\n this.offset++;\n max = this.at(\"}\") ? Infinity : await this.count();\n }\n if (!this.at(\"}\") || max < min) throw new EreSyntaxError(\"invalid interval\", begin);\n this.offset++;\n }\n if (child.kind === \"start\" || child.kind === \"end\") throw new EreUnsupportedError(\"repeated anchor\", begin);\n if (child.nullable && child.captured && max > 1) throw new EreUnsupportedError(\"nullable captured repetition\", begin);\n const repeated = child;\n child = this.node(() => ({ kind: \"repeat\", child: repeated, min, max, nullable: min === 0 || repeated.nullable, captured: repeated.captured }));\n const next = this.quoted?.[this.offset] ? undefined : this.pattern[this.offset];\n if (next === \"*\" || next === \"+\" || next === \"?\" || next === \"{\") throw new EreUnsupportedError(\"stacked repetition\", this.offset);\n }\n this.ledger.charge(\"allocationUnits\", 1, this.signal);\n children.push(child);\n }\n if (children.length === 0) return this.node(() => ({ kind: \"empty\", nullable: true, captured: false }));\n if (children.length === 1) return children[0]!;\n this.ledger.charge(\"work\", children.length * 2, this.signal);\n await this.ledger.checkpoint(this.signal);\n return this.node(() => ({ kind: \"sequence\", children: Object.freeze(children), nullable: children.every(value => value.nullable), captured: children.some(value => value.captured) }));\n }\n\n async count(): Promise<number> {\n const begin = this.offset;\n let value = 0;\n while (!this.quoted?.[this.offset] && this.pattern[this.offset] !== undefined && this.pattern[this.offset]! >= \"0\" && this.pattern[this.offset]! <= \"9\") {\n this.ledger.charge(\"work\", 1, this.signal);\n await this.ledger.checkpoint(this.signal);\n value = value * 10 + this.pattern.charCodeAt(this.offset++) - 48;\n if (value > 255) throw new EreUnsupportedError(\"interval counts exceed 255\", begin);\n }\n if (begin === this.offset) throw new EreSyntaxError(\"missing interval count\", begin);\n return value;\n }\n\n async atom(depth: number): Promise<EreNode> {\n const begin = this.offset;\n const character = this.pattern[this.offset++]!;\n if (this.quoted?.[begin]) return this.node(() => ({ kind: \"literal\", code: character.charCodeAt(0), nullable: false, captured: false }));\n if (character === \"(\") {\n if (this.at(\"?\")) throw new EreUnsupportedError(\"extended group syntax\", begin);\n if (this.groups >= 32) throw new EreUnsupportedError(\"32-group grammar ceiling\", begin);\n const index = ++this.groups;\n const child = await this.expression(depth + 1);\n if (!this.at(\")\")) throw new EreSyntaxError(\"unclosed group\", begin);\n this.offset++;\n return this.node(() => ({ kind: \"group\", index, child, nullable: child.nullable, captured: true }));\n }\n if (character === \"[\") return this.set(begin);\n if (character === \"\\\\\") {\n const escaped = this.pattern[this.offset++];\n if (escaped === undefined) throw new EreSyntaxError(\"trailing escape\", begin);\n if (!special.includes(escaped)) throw new EreUnsupportedError(\"backreference or escape extension\", begin);\n return this.node(() => ({ kind: \"literal\", code: escaped.charCodeAt(0), nullable: false, captured: false }));\n }\n if (character === \"*\" || character === \"+\" || character === \"?\" || character === \"{\") throw new EreSyntaxError(\"repetition without operand\", begin);\n if (character === \".\") return this.node(() => ({ kind: \"dot\", nullable: false, captured: false }));\n if (character === \"^\") return this.node(() => ({ kind: \"start\", nullable: true, captured: false }));\n if (character === \"$\") return this.node(() => ({ kind: \"end\", nullable: true, captured: false }));\n return this.node(() => ({ kind: \"literal\", code: character.charCodeAt(0), nullable: false, captured: false }));\n }\n\n async set(begin: number): Promise<EreNode> {\n this.ledger.charge(\"allocationUnits\", 128, this.signal);\n const members: boolean[] = new Array<boolean>(128).fill(false);\n const negate = this.at(\"^\");\n if (negate) this.offset++;\n let first = true;\n while (this.offset < this.pattern.length) {\n this.ledger.charge(\"work\", 1, this.signal);\n await this.ledger.checkpoint(this.signal);\n if (this.at(\"]\") && !first) {\n this.offset++;\n if (negate) for (let code = 1; code < 128; code++) {\n this.ledger.charge(\"work\", 1, this.signal);\n await this.ledger.checkpoint(this.signal);\n members[code] = !members[code];\n }\n return this.node(() => ({ kind: \"set\", members: Object.freeze(members), nullable: false, captured: false }));\n }\n first = false;\n if (this.at(\"[\") && (this.at(\".\", this.offset + 1) || this.at(\"=\", this.offset + 1))) {\n throw new EreUnsupportedError(\"collating or equivalence element\", this.offset);\n }\n if (this.at(\"[\") && this.at(\":\", this.offset + 1)) {\n const classBegin = this.offset;\n this.offset += 2;\n let name = \"\";\n while (this.offset < this.pattern.length && !this.at(\":\")) {\n this.ledger.charge(\"work\", 1, this.signal);\n await this.ledger.checkpoint(this.signal);\n if (name.length >= 6) throw new EreSyntaxError(\"unknown character class\", classBegin);\n name += this.pattern[this.offset++];\n }\n if (!this.at(\":\") || !this.at(\"]\", this.offset + 1) || !classes.has(name)) throw new EreSyntaxError(\"unknown character class\", classBegin);\n this.offset += 2;\n for (let code = 1; code < 128; code++) {\n this.ledger.charge(\"work\", 1, this.signal);\n await this.ledger.checkpoint(this.signal);\n if (classMember(name, code)) members[code] = true;\n }\n if (this.at(\"-\") && !this.at(\"]\", this.offset + 1)) throw new EreSyntaxError(\"class cannot be a range endpoint\", this.offset);\n } else {\n const lower = this.pattern.charCodeAt(this.offset++);\n if (this.at(\"-\") && !this.at(\"]\", this.offset + 1) && this.pattern[this.offset + 1] !== undefined) {\n this.offset++;\n if (this.at(\"[\")) throw new EreSyntaxError(\"nonliteral range endpoint\", this.offset);\n const upper = this.pattern.charCodeAt(this.offset++);\n if (lower > upper) throw new EreSyntaxError(\"descending range\", this.offset - 3);\n for (let code = lower; code <= upper; code++) {\n this.ledger.charge(\"work\", 1, this.signal);\n await this.ledger.checkpoint(this.signal);\n members[code] = true;\n }\n } else members[lower] = true;\n }\n }\n throw new EreSyntaxError(\"unclosed bracket expression\", begin);\n }\n}\n\nexport async function compileEre(input: string | readonly EreFragment[], ledger: EreLedger, signal?: AbortSignal): Promise<EreProgram> {\n ledger.check(signal);\n const { pattern, quoted } = await flatten(input, ledger, signal);\n const parser = new Parser(pattern, quoted, ledger, signal);\n const root = await parser.expression(0);\n if (parser.offset !== pattern.length) throw new EreSyntaxError(\"unmatched closing group\", parser.offset);\n ledger.charge(\"allocationUnits\", 3, signal);\n const program = Object.freeze({ pattern, groups: parser.groups });\n programs.set(program, { root, ledger });\n return program;\n}\n\nexport function resolveEreProgram(program: EreProgram, ledger: EreLedger): EreNode {\n const entry = programs.get(program);\n if (!entry || entry.ledger !== ledger) throw new TypeError(\"ERE program is not bound to this invocation ledger\");\n return entry.root;\n}\n", "import { EreLedger } from \"./limits.js\";\nimport { admitAscii, resolveEreProgram } from \"./syntax.js\";\nimport type { EreNode, EreProgram, EreResult, EreSpan } from \"./types.js\";\n\ninterface History {\n readonly span: EreSpan;\n readonly previous: History | null;\n readonly count: number;\n}\n\ntype Task =\n | { readonly kind: \"node\"; readonly node: EreNode; readonly next: Task | null }\n | { readonly kind: \"close\"; readonly group: number; readonly start: number; readonly next: Task | null }\n | { readonly kind: \"repeat\"; readonly node: Extract<EreNode, { kind: \"repeat\" }>; readonly count: number; readonly previous: number; readonly next: Task | null };\n\ninterface State {\n readonly position: number;\n readonly task: Task | null;\n readonly captures: readonly (EreSpan | null)[];\n readonly histories: readonly (History | null)[];\n}\n\nfunction spanOrder(left: EreSpan | null, right: EreSpan | null): number {\n if (left === null) return right === null ? 0 : -1;\n if (right === null) return 1;\n const length = left.end - left.start - (right.end - right.start);\n return length === 0 ? right.start - left.start : length;\n}\n\nasync function historySpans(history: History, ledger: EreLedger, signal?: AbortSignal): Promise<readonly EreSpan[]> {\n ledger.charge(\"work\", history.count, signal);\n ledger.charge(\"allocationUnits\", history.count + 1, signal);\n await ledger.checkpoint(signal);\n const spans = new Array<EreSpan>(history.count);\n for (let entry: History | null = history; entry !== null; entry = entry.previous) {\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n spans[entry.count - 1] = entry.span;\n }\n return spans;\n}\n\nasync function historyOrder(left: History | null, right: History | null, ledger: EreLedger, signal?: AbortSignal): Promise<number> {\n const leftCount = left?.count ?? 0;\n const rightCount = right?.count ?? 0;\n if (left === null || right === null) return leftCount - rightCount;\n const leftSpans = await historySpans(left, ledger, signal);\n const rightSpans = await historySpans(right, ledger, signal);\n for (let ordinal = 0; ordinal < Math.min(leftCount, rightCount); ordinal++) {\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n const compared = spanOrder(leftSpans[ordinal]!, rightSpans[ordinal]!);\n if (compared !== 0) return compared;\n }\n return leftCount - rightCount;\n}\n\nasync function preferred(candidate: State, incumbent: State, ledger: EreLedger, signal?: AbortSignal): Promise<boolean> {\n if (candidate.position !== incumbent.position) return candidate.position > incumbent.position;\n for (let group = 1; group < candidate.captures.length; group++) {\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n const compared = await historyOrder(candidate.histories[group]!, incumbent.histories[group]!, ledger, signal);\n if (compared !== 0) return compared > 0;\n }\n return false;\n}\n\nasync function resetDescendants(node: EreNode, previous: readonly (EreSpan | null)[], ledger: EreLedger, signal?: AbortSignal): Promise<readonly (EreSpan | null)[]> {\n ledger.charge(\"work\", previous.length, signal);\n ledger.charge(\"allocationUnits\", previous.length + 3, signal);\n await ledger.checkpoint(signal);\n const captures = previous.slice();\n const pending: EreNode[] = [node];\n while (pending.length > 0) {\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n const current = pending.pop()!;\n if (current.kind === \"group\") captures[current.index] = null;\n if (current.kind === \"group\" || current.kind === \"repeat\") {\n if (current.child.captured) {\n ledger.charge(\"allocationUnits\", 1, signal);\n pending.push(current.child);\n }\n } else if (current.kind === \"sequence\" || current.kind === \"alternative\") {\n for (const child of current.children) {\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n if (child.captured) {\n ledger.charge(\"allocationUnits\", 1, signal);\n pending.push(child);\n }\n }\n }\n }\n return captures;\n}\n\nexport async function matchEre(program: EreProgram, subject: string, ledger: EreLedger, signal?: AbortSignal): Promise<EreResult> {\n ledger.check(signal);\n const root = resolveEreProgram(program, ledger);\n ledger.admitInput(\"subjectBytes\", subject.length, signal);\n await admitAscii(subject, ledger, signal);\n const width = program.groups + 1;\n ledger.charge(\"work\", width * 2, signal);\n ledger.charge(\"allocationUnits\", width * 2 + 1, signal);\n await ledger.checkpoint(signal);\n const emptyCaptures: readonly (EreSpan | null)[] = Object.freeze(new Array<EreSpan | null>(width).fill(null));\n const emptyHistories: readonly (History | null)[] = Object.freeze(new Array<History | null>(width).fill(null));\n const pending: State[] = [];\n const task = (create: () => Task): Task => {\n ledger.charge(\"allocationUnits\", 5, signal);\n return create();\n };\n const push = (position: number, next: Task | null, captures: readonly (EreSpan | null)[], histories: readonly (History | null)[]): void => {\n ledger.charge(\"states\", 1, signal);\n ledger.charge(\"allocationUnits\", 5, signal);\n pending.push({ position, task: next, captures, histories });\n };\n for (let start = 0; start <= subject.length; start++) {\n push(start, task(() => ({ kind: \"node\", node: root, next: null })), emptyCaptures, emptyHistories);\n let best: State | undefined;\n while (pending.length > 0) {\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n const state = pending.pop()!;\n const current = state.task;\n if (current === null) {\n if (!best || await preferred(state, best, ledger, signal)) best = state;\n continue;\n }\n if (current.kind === \"close\") {\n ledger.charge(\"work\", width * 2, signal);\n ledger.charge(\"allocationUnits\", width * 2 + 6, signal);\n await ledger.checkpoint(signal);\n const span = Object.freeze({ start: current.start, end: state.position });\n const captures = state.captures.slice();\n captures[current.group] = span;\n const histories = state.histories.slice();\n const previous = histories[current.group]!;\n histories[current.group] = { span, previous, count: (previous?.count ?? 0) + 1 };\n push(state.position, current.next, captures, histories);\n continue;\n }\n if (current.kind === \"repeat\") {\n const { node, count } = current;\n if (count >= node.min) push(state.position, current.next, state.captures, state.histories);\n const noProgress = count > 0 && state.position === current.previous;\n if (count < node.max && (!noProgress || count < node.min)) {\n const repeat = task(() => ({ kind: \"repeat\", node, count: count + 1, previous: state.position, next: current.next }));\n push(state.position, task(() => ({ kind: \"node\", node: node.child, next: repeat })), state.captures, state.histories);\n }\n continue;\n }\n const node = current.node;\n switch (node.kind) {\n case \"empty\": push(state.position, current.next, state.captures, state.histories); break;\n case \"start\": if (state.position === 0) push(state.position, current.next, state.captures, state.histories); break;\n case \"end\": if (state.position === subject.length) push(state.position, current.next, state.captures, state.histories); break;\n case \"dot\":\n case \"literal\":\n case \"set\": {\n const code = subject.charCodeAt(state.position);\n if (state.position < subject.length && (node.kind === \"dot\" || node.kind === \"literal\" && node.code === code || node.kind === \"set\" && node.members[code])) {\n push(state.position + 1, current.next, state.captures, state.histories);\n }\n break;\n }\n case \"sequence\": {\n let next = current.next;\n for (let index = node.children.length - 1; index >= 0; index--) {\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n const following = next;\n next = task(() => ({ kind: \"node\", node: node.children[index]!, next: following }));\n }\n push(state.position, next, state.captures, state.histories);\n break;\n }\n case \"alternative\":\n for (let index = node.children.length - 1; index >= 0; index--) {\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n push(state.position, task(() => ({ kind: \"node\", node: node.children[index]!, next: current.next })), state.captures, state.histories);\n }\n break;\n case \"group\": {\n const captures = node.child.captured ? await resetDescendants(node.child, state.captures, ledger, signal) : state.captures;\n const close = task(() => ({ kind: \"close\", group: node.index, start: state.position, next: current.next }));\n push(state.position, task(() => ({ kind: \"node\", node: node.child, next: close })), captures, state.histories);\n break;\n }\n case \"repeat\":\n push(state.position, task(() => ({ kind: \"repeat\", node, count: 0, previous: -1, next: current.next })), state.captures, state.histories);\n break;\n }\n }\n if (best) {\n ledger.charge(\"captureSlots\", width, signal);\n let bytes = best.position - start;\n for (let group = 1; group < width; group++) {\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n const span = best.captures[group];\n if (span) bytes += span.end - span.start;\n }\n ledger.charge(\"captureBytes\", bytes, signal);\n ledger.charge(\"work\", width * 2 + bytes, signal);\n ledger.charge(\"allocationUnits\", width * 2 + bytes + 4, signal);\n await ledger.checkpoint(signal);\n const captures = best.captures.slice();\n captures[0] = Object.freeze({ start, end: best.position });\n const values = new Array<string>(width);\n for (let group = 0; group < width; group++) {\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n const span = captures[group]!;\n values[group] = span === null ? \"\" : subject.slice(span.start, span.end);\n }\n ledger.check(signal);\n return Object.freeze({ matched: true, captures: Object.freeze(captures), values: Object.freeze(values) });\n }\n }\n ledger.charge(\"allocationUnits\", 3, signal);\n ledger.check(signal);\n return Object.freeze({ matched: false, captures: Object.freeze([] as const), values: Object.freeze([] as const) });\n}\n", "import type { FileSystem } from \"../contracts/index.js\";\nimport type { InvocationScope } from \"./cleanup.js\";\nimport type { ShellLimits } from \"./types.js\";\n\nconst maxCacheEntries = 256;\nconst maxCacheBytes = 64 * 1024;\n\nexport class PathLookup {\n readonly #entries = new Map<string, { file: boolean; bytes: number }>();\n #bytes = 0;\n #pending = 0;\n #generation = 0;\n\n suspend(): () => void {\n this.#entries.clear();\n this.#bytes = 0;\n this.#generation++;\n this.#pending++;\n let closed = false;\n return () => {\n if (closed) return;\n closed = true;\n this.#pending--;\n this.#generation++;\n };\n }\n\n suspendUntilClosed(scope: InvocationScope): void {\n scope.assertOpen();\n const resume = this.suspend();\n scope.registerFinalizer(resume);\n }\n\n async isFile(fs: FileSystem, path: string, signal: AbortSignal): Promise<boolean> {\n signal.throwIfAborted();\n const cached = this.#entries.get(path);\n if (cached) return cached.file;\n const generation = this.#generation;\n let file: boolean;\n try {\n file = (await fs.stat(path, { signal })).type === \"file\";\n } catch (error) {\n signal.throwIfAborted();\n const code = typeof error === \"object\" && error !== null && \"code\" in error ? error.code : undefined;\n if (code !== \"ENOENT\" && code !== \"ENOTDIR\") throw error;\n file = false;\n }\n signal.throwIfAborted();\n const bytes = Buffer.byteLength(path) + 64;\n if (!this.#pending && generation === this.#generation && bytes <= maxCacheBytes && !this.#entries.has(path)) {\n while (this.#entries.size >= maxCacheEntries || this.#bytes + bytes > maxCacheBytes) {\n const oldest = this.#entries.entries().next().value!;\n this.#bytes -= oldest[1].bytes;\n this.#entries.delete(oldest[0]);\n }\n this.#entries.set(path, { file, bytes });\n this.#bytes += bytes;\n }\n return file;\n }\n}\n\nexport function* pathTargets(name: string, path: string | undefined, limits: Required<ShellLimits>, signal: AbortSignal, fail: (limit: keyof ShellLimits) => never): Generator<string> {\n signal.throwIfAborted();\n if (path !== undefined && Buffer.byteLength(path) > limits.maxExpansionBytes) fail(\"maxExpansionBytes\");\n if (name.includes(\"/\") || path === undefined) {\n if (limits.maxExpansionFields < 1) fail(\"maxExpansionFields\");\n yield name;\n return;\n }\n let fields = 1;\n for (let separator = path.indexOf(\":\"); separator >= 0; separator = path.indexOf(\":\", separator + 1)) {\n signal.throwIfAborted();\n if (++fields > limits.maxExpansionFields) fail(\"maxExpansionFields\");\n }\n if (fields > limits.maxExpansionFields) fail(\"maxExpansionFields\");\n let start = 0;\n let consulted = 0;\n while (start <= path.length) {\n signal.throwIfAborted();\n if (consulted >= limits.maxPathComponents) fail(\"maxPathComponents\");\n consulted++;\n const end = path.indexOf(\":\", start);\n const component = path.slice(start, end < 0 ? path.length : end);\n yield `${component || \".\"}${component.endsWith(\"/\") ? \"\" : \"/\"}${name}`;\n if (end < 0) return;\n start = end + 1;\n }\n}\n", "import type { ShellLimits } from \"./types.js\";\n\nexport const cloudflareWorkerLimits: Readonly<Required<ShellLimits>> = Object.freeze({\n maxParseUnits: 65_536,\n maxInputBytes: 4 * 1024 * 1024,\n maxOutputBytes: 4 * 1024 * 1024,\n maxCommands: 1_000,\n maxFileSystemOperations: 10_000,\n maxPathComponents: 64,\n maxRedirects: 64,\n maxPipelineStages: 64,\n maxLoopIterations: 1_000,\n maxSubstitutionDepth: 16,\n maxSourceBytes: 256 * 1024,\n maxExpansionFields: 1_000,\n maxExpansionBytes: 4 * 1024 * 1024,\n maxWallClockMs: 10_000,\n maxCpuMs: 10_000,\n pipeHighWaterMark: 16 * 1024,\n});\n", "export {\n createMemoryFileSystem, defaultMemoryFileSystemLimits, MemoryFileSystem,\n type MemoryFileSystemLimits, type MemoryFileSystemOptions,\n} from \"poe-code/safe-fs/core\";\n", "export { createReadOnlyFileSystem, ReadOnlyFileSystem } from \"poe-code/safe-fs/core\";\n", "export { createMountFileSystem, MountFileSystem } from \"poe-code/safe-fs/core\";\nexport type { MountFileSystemOptions } from \"poe-code/safe-fs/core\";\n", "export { createOverlayFileSystem, OverlayFileSystem } from \"poe-code/safe-fs/core\";\nexport type { OverlayFileSystemOptions } from \"poe-code/safe-fs/core\";\n", "import { type ByteSource } from \"../../contracts/index.js\";\nimport { CurlError, type HttpTransport } from \"./types.js\";\n\nexport interface FetchTransportOptions {\n readonly fetch?: typeof globalThis.fetch;\n}\n\nfunction requestBody(source: ByteSource | undefined, signal: AbortSignal): ReadableStream<Uint8Array> | undefined {\n if (!source) return undefined;\n const iterator = source[Symbol.asyncIterator]();\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n try {\n signal.throwIfAborted();\n const next = await iterator.next();\n if (next.done) controller.close();\n else controller.enqueue(next.value);\n } catch (error) { controller.error(error); }\n },\n async cancel(reason) { await iterator.return?.(reason); },\n });\n}\n\nexport function createFetchTransport(options: FetchTransportOptions = {}): HttpTransport {\n const fetchRequest = options.fetch ?? globalThis.fetch;\n if (typeof fetchRequest !== \"function\") throw new TypeError(\"Fetch is unavailable\");\n return async input => {\n input.signal.throwIfAborted();\n const url = new URL(input.url);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") throw new CurlError(1, \"Unsupported protocol\");\n if (input.denyPrivateNetworks === true) throw new CurlError(7, \"Fetch transport cannot enforce private-network denial\");\n const stopped = new AbortController();\n const signal = AbortSignal.any([input.signal, stopped.signal]);\n const body = requestBody(input.body, signal);\n const headers = new Headers();\n for (const [name, value] of input.headers) headers.append(name, value);\n const request = new Request(url, {\n method: input.method,\n headers,\n body,\n credentials: \"omit\",\n redirect: \"manual\",\n signal,\n ...(body ? { duplex: \"half\" } : {}),\n } as RequestInit & { duplex?: \"half\" });\n // Cleanup must be registered before the request settles, so assignment happens afterward.\n // eslint-disable-next-line prefer-const\n let response: Response | undefined;\n const dispose = async (): Promise<void> => {\n stopped.abort();\n if (response?.body) await response.body.cancel().catch(() => undefined);\n };\n input.registerCleanup?.(dispose);\n response = await fetchRequest(request);\n const reader = response.body?.getReader();\n const responseBody: ByteSource = reader ? (async function* () {\n try {\n while (true) {\n input.signal.throwIfAborted();\n const next = await reader.read();\n if (next.done) return;\n yield next.value;\n }\n } finally { reader.releaseLock(); }\n })() : (async function* () {})();\n return {\n status: response.status,\n statusText: response.statusText,\n headers: [...response.headers.entries()],\n body: responseBody,\n dispose,\n };\n };\n}\n", "import type { ByteSource, InvocationCleanup } from \"../../contracts/index.js\";\n\nexport type HttpHeaders = readonly (readonly [string, string])[];\n\nexport interface HttpRequest {\n readonly url: string;\n readonly method: string;\n readonly headers: HttpHeaders;\n readonly body?: ByteSource;\n readonly signal: AbortSignal;\n readonly registerCleanup?: (cleanup: InvocationCleanup) => void;\n readonly denyPrivateNetworks?: true;\n}\n\nexport interface HttpResponse {\n readonly status: number;\n readonly statusText: string;\n readonly headers: HttpHeaders;\n readonly httpVersion?: string;\n readonly body: ByteSource;\n dispose(): Promise<void>;\n}\n\nexport type HttpTransport = ((request: HttpRequest) => Promise<HttpResponse>) & {\n readonly supportsPrivateNetworkDeny?: true;\n};\n\nexport interface NetworkAuthorization {\n readonly url: string;\n readonly method: string;\n readonly redirectFrom?: string;\n readonly attempt: number;\n readonly signal: AbortSignal;\n readonly requirePrivateNetworkDeny?: () => void;\n}\n\nexport type NetworkAuthorizer = (request: NetworkAuthorization) => boolean | Promise<boolean>;\n\nexport interface NetworkLimits {\n readonly maxUploadBytes: number;\n readonly maxDownloadBytes: number;\n readonly maxBufferBytes: number;\n readonly maxHeaderBytes: number;\n readonly maxRedirects: number;\n readonly maxRetries: number;\n readonly maxUrls: number;\n readonly maxTimeMs: number;\n readonly maxTotalTimeMs: number;\n}\n\nexport interface NetworkCommandsOptions {\n readonly authorize: NetworkAuthorizer;\n readonly transport?: HttpTransport;\n readonly limits?: Partial<NetworkLimits>;\n readonly replace?: boolean;\n}\n\nexport const defaultNetworkLimits: Readonly<NetworkLimits> = Object.freeze({\n maxUploadBytes: 64 * 1024 * 1024,\n maxDownloadBytes: 64 * 1024 * 1024,\n maxBufferBytes: 8 * 1024 * 1024,\n maxHeaderBytes: 64 * 1024,\n maxRedirects: 10,\n maxRetries: 5,\n maxUrls: 32,\n maxTimeMs: 120_000,\n maxTotalTimeMs: 120_000,\n});\n\nexport const cloudflareWorkerNetworkLimits: Readonly<NetworkLimits> = Object.freeze({\n maxUploadBytes: 4 * 1024 * 1024,\n maxDownloadBytes: 4 * 1024 * 1024,\n maxBufferBytes: 1024 * 1024,\n maxHeaderBytes: 32 * 1024,\n maxRedirects: 2,\n maxRetries: 1,\n maxUrls: 8,\n maxTimeMs: 10_000,\n maxTotalTimeMs: 10_000,\n});\n\nexport class CurlError extends Error {\n constructor(readonly exitCode: number, message: string) {\n super(message);\n this.name = \"CurlError\";\n }\n}\n", "import type { NetworkAuthorizer } from \"./types.js\";\nimport { privateHostname } from \"./private-address.js\";\n\nexport type OriginAllowlist = \"*\" | readonly string[];\n\nexport interface OriginAuthorizerOptions {\n readonly denyPrivateNetworks?: boolean;\n}\n\nexport function createOriginAuthorizer(allowlist: OriginAllowlist = \"*\", options: OriginAuthorizerOptions = {}): NetworkAuthorizer {\n const denyPrivateNetworks = options.denyPrivateNetworks === true;\n const origins = new Set<string>();\n const hosts = new Set<string>();\n for (const entry of allowlist === \"*\" ? [] : allowlist) {\n const value = entry.trim();\n if (!value) throw new TypeError(\"Origin allowlist entries must not be empty\");\n if (value.includes(\"://\")) {\n const url = new URL(value);\n if (url.pathname !== \"/\" || url.search || url.hash || url.username || url.password) {\n throw new TypeError(`Origin allowlist entry must be an origin: ${entry}`);\n }\n origins.add(url.origin);\n } else {\n if (value.includes(\"/\") || value.includes(\"@\")) throw new TypeError(`Invalid hostname allowlist entry: ${entry}`);\n hosts.add(value.toLowerCase().replace(/\\.$/u, \"\"));\n }\n }\n return request => {\n const url = new URL(request.url);\n const hostname = url.hostname.toLowerCase().replace(/\\.$/u, \"\");\n if (denyPrivateNetworks) {\n request.requirePrivateNetworkDeny?.();\n if (privateHostname(hostname)) return false;\n }\n return allowlist === \"*\" || origins.has(url.origin) || hosts.has(hostname);\n };\n}\n", "function privateIPv4(first: number, second: number): boolean {\n return first === 10 || first === 127 || first === 0 ||\n first === 169 && second === 254 || first === 192 && second === 168 ||\n first === 172 && second >= 16 && second <= 31 ||\n first === 100 && second >= 64 && second <= 127 ||\n first === 198 && second >= 18 && second <= 19 || first >= 224;\n}\n\nexport function privateHostname(input: string): boolean {\n const hostname = input.toLowerCase().replace(/\\.$/u, \"\").replace(/^\\[|\\]$/gu, \"\");\n if (hostname === \"localhost\" || hostname.endsWith(\".localhost\") || hostname === \"::1\") return true;\n if (hostname.includes(\":\")) {\n const [prefix, suffix] = hostname.split(\"::\");\n const leading = prefix ? prefix.split(\":\") : [];\n const trailing = suffix ? suffix.split(\":\") : [];\n const hextets = new Array<number>(8).fill(0);\n for (let index = 0; index < leading.length; index++) hextets[index] = Number.parseInt(leading[index]!, 16);\n for (let index = 0; index < trailing.length; index++) hextets[8 - trailing.length + index] = Number.parseInt(trailing[index]!, 16);\n if (hextets.every(value => value === 0)) return true;\n const mappedIPv4 = hextets.slice(0, 5).every(value => value === 0) && hextets[5] === 0xffff;\n const translatedIPv4 = hextets.slice(0, 4).every(value => value === 0) && hextets[4] === 0xffff && hextets[5] === 0;\n const nat64IPv4 = hextets[0] === 0x64 && hextets[1] === 0xff9b && hextets.slice(2, 6).every(value => value === 0);\n const compatibleIPv4 = hextets.slice(0, 6).every(value => value === 0);\n if (mappedIPv4 || translatedIPv4 || nat64IPv4 || compatibleIPv4) {\n return privateIPv4(hextets[6]! >>> 8, hextets[6]! & 255);\n }\n if (hextets[0] === 0x2002) return privateIPv4(hextets[1]! >>> 8, hextets[1]! & 255);\n return (hextets[0]! & 0xfe00) === 0xfc00 || (hextets[0]! & 0xffc0) === 0xfe80 ||\n (hextets[0]! & 0xffc0) === 0xfec0 || (hextets[0]! & 0xff00) === 0xff00 ||\n hextets[0] === 0x64 && hextets[1] === 0xff9b && hextets[2] === 1;\n }\n const parts = hostname.split(\".\");\n if (parts.length !== 4 || parts.some(part => !part || Array.from(part).some(character => character < \"0\" || character > \"9\"))) return false;\n const octets = parts.map(Number);\n if (octets.some(value => value < 0 || value > 255)) return false;\n const [first, second] = octets as [number, number, number, number];\n return privateIPv4(first, second);\n}\n", "import type { VirtualShellPlugin } from \"../../contracts/index.js\";\nimport { RegexExecutor } from \"../regex-execution/portable.js\";\nimport type { BoundedRegexProvider } from \"../regex-execution/provider.js\";\nimport type { RegexExecutionOptions } from \"../regex-execution/protocol.js\";\nimport { sedCommand } from \"../text-programs/sed.js\";\nimport type { TextProgramOptions } from \"../text-programs/shared.js\";\nimport { createGrepCommands } from \"./grep.js\";\nimport { createRgCommand } from \"./rg-command.js\";\nimport type { SearchOptions } from \"./options.js\";\n\nexport interface PortableSearchOptions {\n readonly provider: BoundedRegexProvider;\n readonly replace?: boolean;\n readonly regex?: RegexExecutionOptions;\n readonly search?: Omit<SearchOptions, \"replace\" | \"regex\">;\n readonly sed?: Omit<TextProgramOptions, \"replace\">;\n}\n\nexport function portableSearchCommands(options: PortableSearchOptions): VirtualShellPlugin {\n const executor = new RegexExecutor(options.provider, options.regex);\n const commands = [...createGrepCommands(executor), createRgCommand(executor, options.search), sedCommand(options.sed)];\n return {\n name: \"portable-search-commands\",\n setup(host) {\n if (!options.replace) for (const command of commands) {\n if (host.commands.has(command.name)) throw new Error(`Command already registered: ${command.name}`);\n }\n for (const command of commands) host.commands.register(command, { replace: options.replace ?? false });\n },\n dispose: () => executor.dispose(),\n };\n}\n", "import type { BoundedRegexProvider, RegexWorker } from \"./provider.js\";\nimport type { CommandContext, CommandResult } from \"../../contracts/command.js\";\nimport type { ByteSource } from \"../../contracts/io.js\";\nimport { defaults, inputBytes, policy, RegexExecutionError, validateReply, validateExprInput, validateExprReply, type ExprMatchDescriptor, type ExprMatchResult, type Descriptor, type Match, type RegexExecutionOptions, type Row } from \"./protocol.js\";\n\nexport type { RegexExecutionOptions } from \"./protocol.js\";\nexport { RegexExecutionError } from \"./protocol.js\";\n\ninterface Pending {\n readonly descriptor: Descriptor | ExprMatchDescriptor;\n readonly rows: readonly Row[];\n readonly signal: AbortSignal;\n readonly bytes: number;\n readonly resolve: (matches: Match[][] | ExprMatchResult) => void;\n readonly reject: (error: unknown) => void;\n readonly abort: () => void;\n readonly retirements: Set<Promise<void>>;\n slot?: Slot;\n}\n\nasync function awaitRetirements(retirements: Iterable<Promise<void>>): Promise<void> {\n const results = await Promise.allSettled(retirements);\n const failures = results.filter(result => result.status === \"rejected\").map(result => result.reason as unknown);\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures, \"regex retirement failed\");\n}\n\nexport async function withRegexSession(\n context: CommandContext,\n executor: RegexExecutor,\n execute: (session: RegexSession) => CommandResult | Promise<CommandResult>,\n): Promise<CommandResult> {\n context.signal.throwIfAborted();\n let session: RegexSession | undefined;\n let closing: Promise<void> | undefined;\n const close = () => closing ??= (async () => { await session?.close(); })();\n try { context.registerCleanup?.(close); }\n catch (error) { context.signal.throwIfAborted(); throw error; }\n let outcome: { result: CommandResult } | { error: unknown };\n try {\n context.signal.throwIfAborted();\n if (closing) throw new RegexExecutionError(\"CLOSED\", \"invocation is closed\");\n session = executor.open(context.signal);\n outcome = { result: await execute(session) };\n } catch (error) {\n outcome = { error };\n }\n let cleanupFailure: { error: unknown } | undefined;\n try { await close(); }\n catch (error) { cleanupFailure = { error }; }\n context.signal.throwIfAborted();\n if (\"error\" in outcome) throw outcome.error;\n if (cleanupFailure) throw cleanupFailure.error;\n return outcome.result;\n}\n\nclass Slot {\n readonly worker: RegexWorker;\n busy = true;\n ready = false;\n retired: Promise<void> | undefined;\n idleTimer: ReturnType<typeof setTimeout> | undefined;\n private receiver: ((value: unknown) => void) | undefined;\n private failure: ((error: unknown) => void) | undefined;\n private terminal: unknown;\n private exited = false;\n private readonly message = (value: unknown) => {\n if (this.receiver) this.receiver(value);\n else this.fail(new RegexExecutionError(\"PROTOCOL\", \"unexpected idle message\"));\n };\n private readonly error = (error: Error) => this.fail(new RegexExecutionError(\"WORKER_ERROR\", \"internal error\", { cause: error }));\n private readonly messageerror = () => this.fail(new RegexExecutionError(\"PROTOCOL\", \"worker message could not be deserialized\"));\n private readonly exit = (code: number) => {\n this.exited = true;\n this.fail(new RegexExecutionError(\"WORKER_EXIT\", `worker exited (${code})`));\n };\n constructor(private readonly owner: RegexExecutor) {\n this.worker = owner.provider.createWorker(owner.options);\n this.worker.on(\"message\", this.message);\n this.worker.on(\"messageerror\", this.messageerror);\n this.worker.on(\"error\", this.error);\n this.worker.on(\"exit\", this.exit);\n }\n fail(error: unknown): void {\n this.terminal ??= error;\n if (this.failure) this.failure(error);\n else if (!this.busy) void this.retire();\n }\n exchange(timeout: number, startup: boolean, signal: AbortSignal, send?: () => void): Promise<unknown> {\n signal.throwIfAborted();\n if (this.terminal !== undefined) return Promise.reject(this.terminal);\n return new Promise((resolve, reject) => {\n const finish = (rejected: boolean, value: unknown) => {\n clearTimeout(timer);\n this.receiver = undefined;\n this.failure = undefined;\n if (rejected) reject(value); else resolve(value);\n };\n const timer = setTimeout(() => finish(true, new RegexExecutionError(startup ? \"STARTUP_TIMEOUT\" : \"REQUEST_TIMEOUT\", `${startup ? \"startup\" : \"active request\"} exceeded ${timeout}ms`)), timeout);\n this.receiver = value => finish(false, value);\n this.failure = error => finish(true, error);\n try { signal.throwIfAborted(); send?.(); } catch (error) { finish(true, error); }\n });\n }\n retire(): Promise<void> {\n if (this.retired) return this.retired;\n clearTimeout(this.idleTimer);\n this.worker.ref?.();\n this.retired = (async () => {\n if (!this.exited) await this.worker.terminate();\n })().finally(() => {\n this.worker.off(\"message\", this.message);\n this.worker.off(\"messageerror\", this.messageerror);\n this.worker.off(\"error\", this.error);\n this.worker.off(\"exit\", this.exit);\n this.receiver = undefined;\n this.failure = undefined;\n if (!this.busy) this.owner.retired(this);\n });\n void this.retired.catch(() => {});\n return this.retired;\n }\n}\n\nexport class RegexExecutor {\n readonly options: Required<RegexExecutionOptions>;\n private readonly slots = new Set<Slot>();\n private readonly queue: Pending[] = [];\n private queuedBytes = 0;\n private sessions = 0;\n private sequence = 0;\n private disposed = false;\n constructor(readonly provider: BoundedRegexProvider, options: RegexExecutionOptions = defaults) {\n if (!provider || typeof provider.createWorker !== \"function\") throw new TypeError(\"a bounded regex provider is required\");\n this.options = policy(options);\n }\n open(signal: AbortSignal): RegexSession {\n signal.throwIfAborted();\n if (this.disposed) throw new RegexExecutionError(\"CLOSED\", \"executor is disposed\");\n this.sessions++;\n return new RegexSession(this, signal);\n }\n async close(): Promise<void> {\n this.sessions--;\n if (this.sessions === 0) await awaitRetirements([...this.slots].filter(slot => !slot.busy || slot.retired).map(slot => slot.retire()));\n }\n async dispose(): Promise<void> {\n this.disposed = true;\n const error = new RegexExecutionError(\"CLOSED\", \"executor is disposed\");\n for (const pending of this.queue.splice(0)) {\n pending.signal.removeEventListener(\"abort\", pending.abort);\n pending.reject(error);\n }\n this.queuedBytes = 0;\n for (const slot of this.slots) slot.fail(error);\n await Promise.all([...this.slots].map(slot => slot.retire()));\n }\n retired(slot: Slot): void {\n this.slots.delete(slot);\n this.pump();\n }\n request(descriptor: Descriptor, rows: readonly Row[], signal: AbortSignal, retirements?: Set<Promise<void>>): Promise<Match[][]>;\n request(descriptor: ExprMatchDescriptor, rows: readonly Row[], signal: AbortSignal, retirements?: Set<Promise<void>>): Promise<ExprMatchResult>;\n request(descriptor: Descriptor | ExprMatchDescriptor, rows: readonly Row[], signal: AbortSignal, retirements = new Set<Promise<void>>()): Promise<Match[][] | ExprMatchResult> {\n signal.throwIfAborted();\n if (this.disposed) return Promise.reject(new RegexExecutionError(\"CLOSED\", \"executor is disposed\"));\n if (descriptor.kind === \"expr-match\") validateExprInput(descriptor, rows, signal);\n const bytes = descriptor.kind === \"expr-match\" ? 256 + descriptor.pattern.length + rows[0]!.bytes.length : inputBytes(descriptor, rows, signal);\n const available = this.queue.length === 0 && ([...this.slots].some(slot => !slot.busy && !slot.retired) || this.slots.size < this.options.maxWorkers);\n if (!available && (this.queue.length >= this.options.maxQueuedRequests || bytes > this.options.maxQueuedBytes - this.queuedBytes)) return Promise.reject(new RegexExecutionError(\"QUEUE_EXHAUSTED\", \"queued request count or input byte limit exceeded\"));\n const ownedDescriptor: Descriptor | ExprMatchDescriptor = descriptor.kind === \"expr-match\"\n ? { ...descriptor, pattern: Uint8Array.from(descriptor.pattern), limits: { ...descriptor.limits } }\n : { ...descriptor, patterns: descriptor.patterns.map(pattern => { signal.throwIfAborted(); return pattern; }) };\n if (ownedDescriptor.kind === \"glob\") {\n const globOptions = ownedDescriptor.globOptions.map(options => { signal.throwIfAborted(); return { ...options }; });\n Object.assign(ownedDescriptor, { globOptions });\n }\n const ownedRows = rows.map(row => { signal.throwIfAborted(); return { ...row, bytes: Uint8Array.from(row.bytes) }; });\n return new Promise((resolve, reject) => {\n const pending: Pending = {\n descriptor: ownedDescriptor, rows: ownedRows, signal, bytes, resolve, reject, retirements,\n abort: () => {\n if (pending.slot) pending.slot.fail(signal.reason);\n else {\n const index = this.queue.indexOf(pending);\n if (index >= 0) { this.queue.splice(index, 1); this.queuedBytes -= bytes; }\n signal.removeEventListener(\"abort\", pending.abort);\n reject(signal.reason);\n this.pump();\n }\n },\n };\n signal.addEventListener(\"abort\", pending.abort, { once: true });\n this.queue.push(pending);\n this.queuedBytes += bytes;\n this.pump();\n });\n }\n private pump(): void {\n if (this.disposed) return;\n while (this.queue.length) {\n let slot = [...this.slots].find(candidate => !candidate.busy && !candidate.retired);\n if (!slot && this.slots.size >= this.options.maxWorkers) return;\n const pending = this.queue.shift()!;\n this.queuedBytes -= pending.bytes;\n try {\n pending.signal.throwIfAborted();\n if (!slot) { slot = new Slot(this); this.slots.add(slot); }\n slot.busy = true;\n pending.slot = slot;\n clearTimeout(slot.idleTimer);\n slot.worker.ref?.();\n void this.run(slot, pending);\n } catch (error) {\n pending.signal.removeEventListener(\"abort\", pending.abort);\n pending.reject(error);\n }\n }\n }\n private async run(slot: Slot, pending: Pending): Promise<void> {\n let result: Match[][] | ExprMatchResult | undefined;\n let failure: unknown;\n let rejected = false;\n try {\n pending.signal.throwIfAborted();\n if (!slot.ready) {\n const ready = await slot.exchange(this.options.startupTimeoutMs, true, pending.signal);\n if (!ready || typeof ready !== \"object\" || !(\"ready\" in ready) || ready.ready !== true) throw new RegexExecutionError(\"PROTOCOL\", \"invalid startup reply\");\n slot.ready = true;\n }\n pending.signal.throwIfAborted();\n const id = ++this.sequence;\n const started = performance.now();\n const reply = await slot.exchange(this.options.requestTimeoutMs, false, pending.signal, () => slot.worker.postMessage({ id, descriptor: pending.descriptor, rows: pending.rows }));\n result = pending.descriptor.kind === \"expr-match\"\n ? validateExprReply(reply, id, pending.descriptor, pending.rows[0]!.bytes, pending.signal)\n : validateReply(reply, id, pending.rows, pending.signal);\n if (performance.now() - started > this.options.requestTimeoutMs) throw new RegexExecutionError(\"REQUEST_TIMEOUT\", `active request exceeded ${this.options.requestTimeoutMs}ms`);\n pending.signal.throwIfAborted();\n } catch (error) {\n rejected = true;\n failure = pending.signal.aborted ? pending.signal.reason : error;\n const retirement = slot.retire();\n pending.retirements.add(retirement);\n try { await retirement; } catch { }\n } finally {\n pending.signal.removeEventListener(\"abort\", pending.abort);\n slot.busy = false;\n if (slot.retired) this.retired(slot);\n else {\n slot.worker.unref?.();\n slot.idleTimer = setTimeout(() => { if (!slot.busy) void slot.retire(); }, this.options.idleTimeoutMs);\n slot.idleTimer.unref?.();\n }\n this.pump();\n }\n if (rejected) pending.reject(failure); else pending.resolve(result!);\n }\n}\n\nexport class RegexSession {\n private closed: Promise<void> | undefined;\n private readonly pending = new Set<Promise<Match[][] | ExprMatchResult>>();\n private readonly retirements = new Set<Promise<void>>();\n private readonly controller = new AbortController();\n private readonly requestSignal: AbortSignal;\n constructor(private readonly executor: RegexExecutor, private readonly signal: AbortSignal) {\n this.requestSignal = AbortSignal.any([signal, this.controller.signal]);\n }\n run(descriptor: Descriptor, rows: readonly Row[]): Promise<Match[][]> {\n this.signal.throwIfAborted();\n if (this.closed) throw new RegexExecutionError(\"CLOSED\", \"invocation is closed\");\n const result = this.executor.request(descriptor, rows, this.requestSignal, this.retirements);\n this.pending.add(result);\n void result.then(() => this.pending.delete(result), () => this.pending.delete(result));\n return result;\n }\n matchExpr(descriptor: ExprMatchDescriptor, subject: Uint8Array): Promise<ExprMatchResult> {\n this.signal.throwIfAborted();\n if (this.closed) throw new RegexExecutionError(\"CLOSED\", \"invocation is closed\");\n const result = this.executor.request(descriptor, [{ bytes: subject, all: false, terminated: false }], this.requestSignal, this.retirements);\n this.pending.add(result);\n void result.then(() => this.pending.delete(result), () => this.pending.delete(result));\n return result;\n }\n close(): Promise<void> {\n return this.closed ??= Promise.resolve().then(async () => {\n this.controller.abort(this.signal.aborted ? this.signal.reason : new RegexExecutionError(\"CLOSED\", \"invocation is closed\"));\n try { await Promise.allSettled([...this.pending]); }\n finally {\n await awaitRetirements([...this.retirements, this.executor.close()]);\n }\n });\n }\n}\n\nexport class AvailableRecords {\n private chunk = new Uint8Array(0);\n private offset = 0;\n constructor(private readonly delimiter: number, private readonly maxLineBytes: number, private readonly extraDelimiter = -1) {}\n async *source(source: ByteSource): ByteSource {\n for await (const chunk of source) {\n this.chunk = Uint8Array.from(chunk);\n this.offset = 0;\n yield this.chunk;\n }\n }\n private end(): number {\n for (let offset = this.offset; offset < this.chunk.length; offset++) {\n if (this.chunk[offset] === this.delimiter || this.chunk[offset] === this.extraDelimiter) return offset;\n }\n return -1;\n }\n async *batches<Line>(source: AsyncIterable<Line>, size: (line: Line) => number, maxRecords: () => number = () => 128): AsyncGenerator<Line[]> {\n let batch: Line[] = [];\n let bytes = 0;\n for await (const line of source) {\n const end = this.end();\n this.offset = end < 0 ? this.chunk.length : end + 1;\n batch.push(line);\n bytes += size(line);\n const next = this.end();\n if (batch.length >= maxRecords() || bytes >= 64 * 1024 || next < 0 || bytes + next - this.offset > 64 * 1024 || next - this.offset > this.maxLineBytes) {\n yield batch;\n batch = [];\n bytes = 0;\n }\n }\n if (batch.length) yield batch;\n }\n}\n", "import { PublicDiagnostic } from \"../../diagnostics.js\";\nexport interface RegexExecutionOptions {\n readonly requestTimeoutMs?: number;\n readonly startupTimeoutMs?: number;\n readonly maxWorkers?: number;\n readonly maxQueuedRequests?: number;\n readonly maxQueuedBytes?: number;\n readonly idleTimeoutMs?: number;\n readonly workerOldGenerationMb?: number;\n readonly workerStackMb?: number;\n}\n\nexport const defaults: Required<RegexExecutionOptions> = Object.freeze({\n requestTimeoutMs: 1000, startupTimeoutMs: 3000, maxWorkers: 2,\n maxQueuedRequests: 64, maxQueuedBytes: 128 * 1024 * 1024,\n idleTimeoutMs: 100, workerOldGenerationMb: 128, workerStackMb: 4,\n});\n\nexport type RegexErrorCode = \"QUEUE_EXHAUSTED\" | \"REQUEST_TIMEOUT\" | \"STARTUP_TIMEOUT\" | \"WORKER_EXIT\" | \"WORKER_ERROR\" | \"PROTOCOL\" | \"CLOSED\" | \"MATCH\";\n\nexport class RegexExecutionError extends PublicDiagnostic {\n constructor(readonly code: RegexErrorCode, message: string, options?: ErrorOptions) {\n super(code === \"MATCH\" ? message : `regex ${code}: ${message}`, options);\n this.name = \"RegexExecutionError\";\n }\n}\n\nexport interface GrepDescriptor {\n readonly kind: \"grep\";\n readonly patterns: readonly string[];\n readonly fixed: boolean;\n readonly extended: boolean;\n readonly insensitive: boolean;\n readonly whole: boolean;\n readonly word: boolean;\n}\n\nexport interface SearchDescriptor {\n readonly kind: \"rg\";\n readonly patterns: readonly string[];\n readonly fixed: boolean;\n readonly case: \"sensitive\" | \"insensitive\" | \"smart\";\n readonly whole: boolean;\n readonly word: boolean;\n readonly nullData: boolean;\n}\n\nexport interface GlobDescriptor {\n readonly kind: \"glob\";\n readonly patterns: readonly string[];\n readonly globOptions: readonly { readonly insensitive: boolean; readonly literalUnclosedClass: boolean }[];\n}\n\nexport type Descriptor = GrepDescriptor | SearchDescriptor | GlobDescriptor;\nexport interface Row { readonly bytes: Uint8Array; readonly all: boolean; readonly terminated: boolean; readonly directory?: boolean; readonly ancestors?: boolean }\nexport interface Match { readonly start: number; readonly end: number }\nexport const matchRangeLimits = Object.freeze({ perRow: 100_000, perReply: 100_000 });\nexport interface Request { readonly id: number; readonly descriptor: Descriptor; readonly rows: readonly Row[] }\nexport type Reply = { readonly id: number; readonly results: readonly Float64Array[] } | { readonly id: number; readonly error: string };\n\nexport interface ExprMatchLimits {\n readonly maxPatternBytes: number;\n readonly maxSubjectBytes: number;\n readonly maxNodes: number;\n readonly maxDepth: number;\n readonly maxSteps: number;\n readonly maxStates: number;\n readonly maxAllocatedUnits: number;\n}\nexport const exprMatchCeilings: ExprMatchLimits = Object.freeze({\n maxPatternBytes: 65_536, maxSubjectBytes: 1_048_576, maxNodes: 8192,\n maxDepth: 128, maxSteps: 50_000_000, maxStates: 65_536, maxAllocatedUnits: 4_000_000,\n});\nexport interface ExprMatchDescriptor {\n readonly kind: \"expr-match\";\n readonly pattern: Uint8Array;\n readonly profile: \"byte\" | \"utf8-scalar\";\n readonly limits: ExprMatchLimits;\n}\nexport interface ExprMatchResult {\n readonly offsetUnit: \"byte\";\n readonly matched: boolean;\n readonly hasCapture: boolean;\n readonly overall: Match | null;\n readonly capture: Match | null;\n readonly steps: number;\n}\nexport interface ExprMatchRequest { readonly id: number; readonly descriptor: ExprMatchDescriptor; readonly rows: readonly Row[] }\nexport type ExprMatchReply = { readonly id: number; readonly operation: \"expr-match\"; readonly result: ExprMatchResult }\n | { readonly id: number; readonly operation: \"expr-match\"; readonly error: string; readonly category: \"syntax\" | \"unsupported\" | \"limit\" };\n\nexport class ExprMatchError extends Error {\n constructor(readonly category: \"syntax\" | \"unsupported\" | \"limit\", message: string) { super(message); }\n}\n\nfunction exactObject(value: unknown, keys: readonly string[]): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n && Object.keys(value).length === keys.length && keys.every(key => Object.hasOwn(value, key));\n}\n\nexport function validateExprInput(descriptor: ExprMatchDescriptor, rows: readonly Row[], signal: AbortSignal): void {\n signal.throwIfAborted();\n const invalid = () => { throw new RegexExecutionError(\"PROTOCOL\", \"invalid expr request\"); };\n if (!exactObject(descriptor, [\"kind\", \"pattern\", \"profile\", \"limits\"]) || descriptor.kind !== \"expr-match\"\n || !(descriptor.pattern instanceof Uint8Array) || ![\"byte\", \"utf8-scalar\"].includes(descriptor.profile)) invalid();\n const keys = Object.keys(exprMatchCeilings) as (keyof ExprMatchLimits)[];\n if (!exactObject(descriptor.limits, keys)) invalid();\n for (const key of keys) {\n if (!Number.isSafeInteger(descriptor.limits[key]) || descriptor.limits[key] < 1 || descriptor.limits[key] > exprMatchCeilings[key]) invalid();\n }\n if (!Array.isArray(rows) || rows.length !== 1) invalid();\n const row = rows[0]!;\n if (!exactObject(row, [\"bytes\", \"all\", \"terminated\"]) || !(row.bytes instanceof Uint8Array) || row.all !== false || row.terminated !== false) invalid();\n if (descriptor.pattern.length > descriptor.limits.maxPatternBytes || row.bytes.length > descriptor.limits.maxSubjectBytes) {\n throw new ExprMatchError(\"limit\", \"regex input bytes limit exceeded\");\n }\n}\n\nexport function validateExprRequest(value: unknown): asserts value is ExprMatchRequest {\n if (!exactObject(value, [\"id\", \"descriptor\", \"rows\"]) || !Number.isSafeInteger(value.id) || (value.id as number) < 1) {\n throw new RegexExecutionError(\"PROTOCOL\", \"invalid expr request identity\");\n }\n validateExprInput(value.descriptor as ExprMatchDescriptor, value.rows as readonly Row[], new AbortController().signal);\n}\n\nexport function validateExprReply(value: unknown, id: number, descriptor: ExprMatchDescriptor, subject: Uint8Array, signal: AbortSignal): ExprMatchResult {\n signal.throwIfAborted();\n const invalid = (): never => { throw new RegexExecutionError(\"PROTOCOL\", \"invalid expr reply\"); };\n if (!value || typeof value !== \"object\") return invalid();\n const reply = value as Record<string, unknown>;\n if (reply.id !== id || reply.operation !== \"expr-match\") return invalid();\n if (\"error\" in reply) {\n if (!exactObject(reply, [\"id\", \"operation\", \"error\", \"category\"]) || typeof reply.error !== \"string\"\n || reply.error.length > 512 || ![\"syntax\", \"unsupported\", \"limit\"].includes(reply.category as string)) return invalid();\n throw new ExprMatchError(reply.category as \"syntax\" | \"unsupported\" | \"limit\", reply.error);\n }\n if (!exactObject(reply, [\"id\", \"operation\", \"result\"])) return invalid();\n const result = reply.result;\n if (!exactObject(result, [\"offsetUnit\", \"matched\", \"hasCapture\", \"overall\", \"capture\", \"steps\"])\n || result.offsetUnit !== \"byte\" || typeof result.matched !== \"boolean\" || typeof result.hasCapture !== \"boolean\"\n || !Number.isSafeInteger(result.steps) || (result.steps as number) < 1 || (result.steps as number) > descriptor.limits.maxSteps) return invalid();\n const span = (value: unknown): Match | null => {\n if (value === null) return null;\n if (!exactObject(value, [\"start\", \"end\"]) || !Number.isSafeInteger(value.start) || !Number.isSafeInteger(value.end)) return invalid();\n const start = value.start as number, end = value.end as number;\n if (start < 0 || end < start || end > subject.length) return invalid();\n if (descriptor.profile === \"utf8-scalar\") {\n for (const offset of [start, end]) if (offset < subject.length && subject[offset]! >= 0x80 && subject[offset]! <= 0xbf) return invalid();\n }\n return { start, end };\n };\n const overall = span(result.overall), capture = span(result.capture);\n if (result.matched !== (overall !== null) || overall && overall.start !== 0\n || capture && (!result.hasCapture || !overall || capture.start < overall.start || capture.end > overall.end)) return invalid();\n return { offsetUnit: \"byte\", matched: result.matched, hasCapture: result.hasCapture, overall, capture, steps: result.steps as number };\n}\n\nexport function policy(options: RegexExecutionOptions): Required<RegexExecutionOptions> {\n const result = { ...defaults, ...options };\n for (const key of Object.keys(defaults) as (keyof RegexExecutionOptions)[]) {\n const minimum = key === \"maxQueuedRequests\" || key === \"maxQueuedBytes\" ? 0 : 1;\n if (!Number.isSafeInteger(result[key]) || result[key] < minimum) throw new RangeError(`regex ${key} must be a safe integer >= ${minimum}`);\n }\n for (const key of [\"requestTimeoutMs\", \"startupTimeoutMs\", \"idleTimeoutMs\"] as const) {\n if (result[key] > 2147483647) throw new RangeError(`regex ${key} exceeds the Node timer range`);\n }\n return Object.freeze(result);\n}\n\nexport function inputBytes(descriptor: Descriptor, rows: readonly Row[], signal: AbortSignal): number {\n let total = 128 + (descriptor.kind === \"glob\" ? descriptor.globOptions.length * 32 : 0);\n for (const pattern of descriptor.patterns) {\n signal.throwIfAborted();\n total += 16 + pattern.length * 2;\n if (!Number.isSafeInteger(total)) throw new RegexExecutionError(\"QUEUE_EXHAUSTED\", \"input accounting overflow\");\n }\n for (const row of rows) {\n signal.throwIfAborted();\n total += 32 + row.bytes.byteLength;\n if (!Number.isSafeInteger(total)) throw new RegexExecutionError(\"QUEUE_EXHAUSTED\", \"input accounting overflow\");\n }\n return total;\n}\n\nexport function validateReply(value: unknown, id: number, rows: readonly Row[], signal: AbortSignal): Match[][] {\n signal.throwIfAborted();\n const reply = value as Partial<Reply> | undefined;\n if (!reply || typeof reply !== \"object\" || reply.id !== id) throw new RegexExecutionError(\"PROTOCOL\", \"invalid reply identity\");\n if (\"error\" in reply) {\n if (typeof reply.error !== \"string\") throw new RegexExecutionError(\"PROTOCOL\", \"invalid error reply\");\n throw new RegexExecutionError(\"MATCH\", reply.error);\n }\n if (!(\"results\" in reply) || !Array.isArray(reply.results) || reply.results.length !== rows.length) throw new RegexExecutionError(\"PROTOCOL\", \"invalid reply rows\");\n let total = 0;\n const lengths: number[] = [];\n for (let index = 0; index < reply.results.length; index++) {\n signal.throwIfAborted();\n const ranges: unknown = reply.results[index];\n const row = rows[index]!;\n if (!(ranges instanceof Float64Array)) throw new RegexExecutionError(\"PROTOCOL\", \"invalid match ranges\");\n const length = ranges.length;\n if (length % 2 || length > 2 * (row.bytes.length + 1)) throw new RegexExecutionError(\"PROTOCOL\", \"invalid match ranges\");\n if (!row.all && length > 2) throw new RegexExecutionError(\"PROTOCOL\", \"unexpected multiple matches\");\n const count = length / 2;\n if (count > matchRangeLimits.perRow || count > matchRangeLimits.perReply - total) throw new RegexExecutionError(\"PROTOCOL\", \"match range limit exceeded\");\n total += count;\n lengths.push(length);\n }\n const results = reply.results.map((ranges: Float64Array, index: number) => {\n signal.throwIfAborted();\n const length = lengths[index]!;\n if (ranges.length !== length) throw new RegexExecutionError(\"PROTOCOL\", \"match ranges changed after admission\");\n const result: Match[] = [];\n const row = rows[index]!;\n for (let offset = 0; offset < length; offset += 2) {\n signal.throwIfAborted();\n const start = ranges[offset]!;\n const end = ranges[offset + 1]!;\n if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start < 0 || end < start || end > row.bytes.length || start < (result.at(-1)?.start ?? 0)) throw new RegexExecutionError(\"PROTOCOL\", \"invalid match bounds\");\n result.push({ start, end });\n }\n return result;\n });\n for (let index = 0; index < reply.results.length; index++) {\n signal.throwIfAborted();\n if (reply.results[index]!.length !== lengths[index]) throw new RegexExecutionError(\"PROTOCOL\", \"match ranges changed after admission\");\n }\n return results;\n}\n", "import { FsError, writeBytes, type CommandContext, type CommandDefinition } from \"../../contracts/index.js\";\nimport { writeFileOutput } from \"../../contracts/filesystem-output.js\";\nimport { Pattern, substitute } from \"./regex.js\";\nimport { Budget, ProgramError, byteString, bytes, command, input, lineRecords, readProgram, virtualPath, write, type RecordLine, type TextProgramOptions } from \"./shared.js\";\nimport { assertPathRequirements, requiredFileInput, sedRequirements } from \"../search/requirements.js\";\n\ntype Address = { kind: \"number\"; number: number } | { kind: \"last\" } | { kind: \"regex\"; pattern: Pattern | undefined };\ninterface Instruction {\n kind: string;\n first?: Address;\n second?: Address;\n negate: boolean;\n jump?: number;\n text?: string;\n file?: string;\n pattern?: Pattern;\n replacement?: string;\n global?: boolean;\n occurrence?: number;\n print?: boolean;\n status?: number;\n translation?: Map<string, string>;\n}\n\ninterface OutputState {\n stdoutUnterminated: boolean;\n readonly unterminatedFiles: Set<string>;\n}\n\nfunction parse(source: string, extended: boolean, separator: string, maxProgramInstructions: number): Instruction[] {\n if (source.length > 1024 * 1024) throw new ProgramError(\"sed program exceeds 1 MiB\");\n const result: Instruction[] = [];\n const groups: number[] = [];\n const labels = new Map<string, number>();\n let offset = 0;\n const horizontal = () => { while (source[offset] === \" \" || source[offset] === \"\\t\" || source[offset] === \"\\r\") offset++; };\n const delimited = (delimiter: string): string => {\n let text = \"\";\n while (offset < source.length) {\n const character = source[offset++]!;\n if (character === delimiter) return text;\n if (character === \"\\\\\") {\n const next = source[offset++];\n if (next === undefined) break;\n text += next === \"\\n\" ? \"\\n\" : `\\\\${next}`;\n } else {\n if (character === \"\\n\") throw new ProgramError(\"unterminated delimited expression\");\n text += character;\n }\n }\n throw new ProgramError(\"unterminated delimited expression\");\n };\n const address = (): Address | undefined => {\n horizontal();\n const number = /^[0-9]+/u.exec(source.slice(offset));\n if (number) {\n offset += number[0].length;\n const value = Number(number[0]);\n if (!Number.isSafeInteger(value) || value < 1) throw new ProgramError(\"sed line addresses must be positive integers\");\n return { kind: \"number\", number: value };\n }\n if (source[offset] === \"$\") { offset++; return { kind: \"last\" }; }\n let delimiter: string | undefined;\n if (source[offset] === \"/\") delimiter = source[offset++];\n else if (source[offset] === \"\\\\\" && source[offset + 1] && source[offset + 1] !== \"\\n\") { offset++; delimiter = source[offset++]; }\n if (delimiter !== undefined) {\n const pattern = delimited(delimiter);\n const ignoreCase = source[offset] === \"I\";\n if (ignoreCase) offset++;\n if (!pattern && ignoreCase) throw new ProgramError(\"flags on an empty regex are not supported\");\n return { kind: \"regex\", pattern: pattern ? new Pattern(pattern, extended, ignoreCase) : undefined };\n }\n return undefined;\n };\n const label = (): string => {\n horizontal();\n const start = offset;\n while (offset < source.length && ![\";\", \"\\n\", \"}\"].includes(source[offset]!)) offset++;\n const text = source.slice(start, offset).trim();\n if (text && !/^[A-Za-z_][A-Za-z0-9_.-]*$/u.test(text)) throw new ProgramError(`invalid branch label '${text}'`);\n return text;\n };\n const textArgument = (terminator: string): string => {\n horizontal();\n if (source[offset] === \"\\\\\") {\n offset++;\n if (source[offset++] !== \"\\n\") throw new ProgramError(\"text backslash must be followed by newline\");\n }\n let text = \"\";\n while (offset < source.length && source[offset] !== \"\\n\") {\n const character = source[offset++]!;\n if (character === \"\\\\\" && offset < source.length) {\n const next = source[offset++]!;\n text += next === \"n\" ? \"\\n\" : next === \"t\" ? \"\\t\" : next;\n } else text += character;\n }\n return text + terminator;\n };\n const fileArgument = (): string => {\n horizontal();\n const start = offset;\n while (offset < source.length && source[offset] !== \"\\n\") offset++;\n const file = Buffer.from(source.slice(start, offset), \"latin1\").toString(\"utf8\");\n if (!file || file.includes(\"\\0\")) throw new ProgramError(\"file command requires a nonempty filename without NUL\");\n return file;\n };\n while (offset < source.length) {\n horizontal();\n if (source[offset] === \";\" || source[offset] === \"\\n\") { offset++; continue; }\n if (source[offset] === \"#\") { while (offset < source.length && source[offset] !== \"\\n\") offset++; continue; }\n if (offset === source.length) break;\n if (result.length >= maxProgramInstructions) throw new ProgramError(\"program instruction limit exceeded\");\n const first = address();\n horizontal();\n let second: Address | undefined;\n if (source[offset] === \",\") { offset++; second = address(); if (!first || !second) throw new ProgramError(\"invalid address range\"); }\n horizontal();\n const negate = source[offset] === \"!\";\n if (negate) { offset++; horizontal(); }\n const kind = source[offset++];\n if (kind === undefined) throw new ProgramError(\"missing sed command\");\n const instruction: Instruction = { kind, negate, ...(first ? { first } : {}), ...(second ? { second } : {}) };\n if (kind === \"{\") { groups.push(result.length); result.push(instruction); continue; }\n if (kind === \"}\") {\n if (first || negate) throw new ProgramError(\"closing group cannot have an address\");\n const start = groups.pop();\n if (start === undefined) throw new ProgramError(\"unmatched '}'\");\n result[start]!.jump = result.length + 1;\n } else if (kind === \"s\") {\n const delimiter = source[offset++];\n if (!delimiter || delimiter === \"\\\\\" || delimiter === \"\\n\") throw new ProgramError(\"invalid substitution delimiter\");\n const pattern = delimited(delimiter);\n instruction.replacement = delimited(delimiter);\n let ignoreCase = false;\n while (offset < source.length && ![\";\", \"\\n\", \"}\", \" \", \"\\t\"].includes(source[offset]!)) {\n const flag = source[offset++]!;\n if (flag === \"g\" && !instruction.global) instruction.global = true;\n else if (flag === \"p\" && !instruction.print) instruction.print = true;\n else if ((flag === \"i\" || flag === \"I\") && !ignoreCase) ignoreCase = true;\n else if (flag === \"w\" && instruction.file === undefined) { instruction.file = fileArgument(); break; }\n else if (/^[1-9]$/u.test(flag) && instruction.occurrence === undefined) {\n const rest = /^[0-9]*/u.exec(source.slice(offset))![0]; offset += rest.length;\n instruction.occurrence = Number(flag + rest);\n if (!Number.isSafeInteger(instruction.occurrence)) throw new ProgramError(\"invalid substitution occurrence\");\n } else throw new ProgramError(`unsupported substitution flag '${flag}'`);\n }\n if (!pattern && ignoreCase) throw new ProgramError(\"flags on an empty regex are not supported\");\n if (pattern) {\n instruction.pattern = new Pattern(pattern, extended, ignoreCase);\n for (const reference of instruction.replacement.matchAll(/\\\\([1-9])/gu)) {\n if (Number(reference[1]) > instruction.pattern.groupCount) throw new ProgramError(\"replacement references an undefined capture group\");\n }\n }\n } else if (kind === \"r\" || kind === \"w\") {\n if (kind === \"r\" && second) throw new ProgramError(\"read accepts at most one address\");\n instruction.file = fileArgument();\n } else if (kind === \"a\" || kind === \"i\" || kind === \"c\") instruction.text = textArgument(kind === \"a\" ? \"\\n\" : separator);\n else if (kind === \"b\" || kind === \"t\" || kind === \"T\" || kind === \":\") {\n instruction.text = label();\n if (first && kind === \":\") throw new ProgramError(\"labels cannot have addresses\");\n if (kind === \":\") {\n if (!instruction.text || labels.has(instruction.text)) throw new ProgramError(\"empty or duplicate branch label\");\n labels.set(instruction.text, result.length);\n }\n } else if (kind === \"q\") {\n if (second) throw new ProgramError(\"quit accepts at most one address\");\n horizontal();\n const status = /^[0-9]+/u.exec(source.slice(offset));\n if (status) { offset += status[0].length; instruction.status = Number(status[0]); if (instruction.status > 255) throw new ProgramError(\"quit status exceeds 255\"); }\n } else if (kind === \"y\") {\n const delimiter = source[offset++];\n if (!delimiter || delimiter === \"\\\\\" || delimiter === \"\\n\") throw new ProgramError(\"invalid translation delimiter\");\n const decode = (text: string) => text.replace(/\\\\(.)/gsu, (_whole, escaped: string) => escaped === \"n\" ? \"\\n\" : escaped === \"t\" ? \"\\t\" : escaped);\n const from = decode(delimited(delimiter));\n const to = decode(delimited(delimiter));\n if (from.length !== to.length) throw new ProgramError(\"translation sets have different lengths\");\n instruction.translation = new Map([...from].map((character, index) => [character, to[index]!]));\n } else if (!\"pdDPhHgGxnN=l\".includes(kind)) throw new ProgramError(`unsupported sed command '${kind}'`);\n result.push(instruction);\n horizontal();\n if (offset < source.length && ![\";\", \"\\n\", \"}\"].includes(source[offset]!)) throw new ProgramError(`unexpected text after '${kind}' command`);\n }\n if (groups.length) throw new ProgramError(\"unclosed sed group\");\n for (const instruction of result) if ([\"b\", \"t\", \"T\"].includes(instruction.kind)) {\n const target = instruction.text ? labels.get(instruction.text) : result.length;\n if (target === undefined) throw new ProgramError(`undefined branch label '${instruction.text}'`);\n instruction.jump = target;\n }\n return result;\n}\n\nasync function* nullRecords(context: CommandContext, files: readonly string[], budget: Budget): AsyncGenerator<RecordLine> {\n const names = files.length ? files : [\"-\"];\n for (let fileIndex = 0; fileIndex < names.length; fileIndex++) {\n const file = names[fileIndex]!;\n let pending = \"\";\n for await (const chunk of input(context, file)) {\n budget.step();\n let start = 0;\n while (start < chunk.byteLength) {\n const end = chunk.indexOf(0, start);\n const stop = end < 0 ? chunk.byteLength : end;\n if (pending.length + stop - start > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n pending += Buffer.from(chunk.subarray(start, stop)).toString(\"latin1\");\n if (end < 0) break;\n yield { text: pending, terminated: true, file, fileIndex };\n pending = \"\";\n start = end + 1;\n }\n }\n if (pending) yield { text: pending, terminated: false, file, fileIndex };\n }\n}\n\nasync function execute(program: readonly Instruction[], context: CommandContext, files: readonly string[], quiet: boolean, budget: Budget, separator: string, outputState: OutputState): Promise<{ status: number; quit: boolean }> {\n const source = separator === \"\\0\" ? nullRecords(context, files, budget) : lineRecords(context, files, budget);\n let current = await source.next();\n let following: IteratorResult<RecordLine, void> | undefined;\n const peekNext = async (): Promise<IteratorResult<RecordLine, void>> => following ??= await source.next();\n const readNext = async (): Promise<IteratorResult<RecordLine, void>> => {\n const next = await peekNext();\n following = undefined;\n return next;\n };\n const prepareRecord = async (record: RecordLine): Promise<RecordLine> => {\n if (record.terminated || files.length < 2) return record;\n const next = await peekNext();\n return !next.done && next.value.fileIndex !== record.fileIndex ? { ...record, terminated: true } : record;\n };\n let number = 0;\n let hold = \"\";\n let holdTerminated = true;\n const joinSpace = (left: string, right: string): string => {\n if (left.length + separator.length + right.length > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n return left + separator + right;\n };\n const emit = async (text: string, terminated = true): Promise<void> => {\n await write(context, (outputState.stdoutUnterminated ? separator : \"\") + text);\n outputState.stdoutUnterminated = separator === \"\\0\" && !terminated;\n };\n let lastPattern: Pattern | undefined;\n const active = new Set<number>();\n const getPattern = (pattern: Pattern | undefined) => {\n if (pattern) lastPattern = pattern;\n if (!lastPattern) throw new ProgramError(\"no previous regular expression\");\n return lastPattern;\n };\n try {\n while (!current.done) {\n budget.step(); number++;\n let record = await prepareRecord(current.value);\n let pattern = record.text;\n const appended: { text?: string; file?: string }[] = [];\n let appendedSize = 0;\n const append = (item: { text?: string; file?: string }): void => {\n appendedSize += (item.text ?? item.file ?? \"\").length + 32;\n if (appendedSize > budget.maxBufferBytes) throw new ProgramError(\"append queue buffer limit exceeded\");\n appended.push(item);\n };\n let substituted = false;\n let deleted = false;\n let quit = false;\n let status = 0;\n const print = () => emit(pattern + (record.terminated ? separator : \"\"), record.terminated);\n const flush = async (printPattern = true) => {\n await assertPathRequirements(context, sedRequirements, [\"script-read\"], appended.flatMap(item => item.file === undefined ? [] : [item.file]));\n if (printPattern && !quiet && !deleted) await print();\n if (outputState.stdoutUnterminated && (appended.length || quit)) {\n await write(context, separator);\n outputState.stdoutUnterminated = false;\n }\n for (const item of appended) {\n if (item.text !== undefined) { await write(context, item.text); continue; }\n const path = virtualPath(context, item.file!);\n try {\n for await (const chunk of requiredFileInput(context, sedRequirements, \"script-read\", path, budget.maxBufferBytes)) {\n budget.step(); await budget.checkpoint();\n if (chunk.byteLength > budget.maxBufferBytes) throw new ProgramError(\"read buffer limit exceeded\");\n await writeBytes(context.stdout, chunk, context.signal);\n }\n } catch (error) {\n context.signal.throwIfAborted();\n if (!(error instanceof FsError) || ![\"ENOENT\", \"EACCES\", \"EPERM\", \"EISDIR\", \"ENOTDIR\"].includes(error.code)) throw error;\n }\n }\n appended.length = 0; appendedSize = 0;\n };\n const writeFile = async (file: string): Promise<void> => {\n const path = virtualPath(context, file);\n const terminated = record.terminated || separator === \"\\n\";\n const text = (outputState.unterminatedFiles.has(path) ? separator : \"\") + pattern + (terminated ? separator : \"\");\n await writeFileOutput(context, bytes(text), chunk => context.fs.appendFile(path, chunk, { signal: context.signal }));\n if (terminated) outputState.unterminatedFiles.delete(path);\n else outputState.unterminatedFiles.add(path);\n };\n const matches = async (address: Address): Promise<boolean> => address.kind === \"number\" ? number === address.number : address.kind === \"last\" ? (await peekNext()).done === true : (await getPattern(address.pattern).find(pattern, budget)) !== undefined;\n for (let pc = 0; pc < program.length;) {\n budget.step(); await budget.checkpoint();\n const instruction = program[pc]!;\n let selected = true;\n let ending = false;\n if (instruction.first) {\n if (instruction.second) {\n if (active.has(pc)) {\n if (instruction.second.kind === \"number\" && number > instruction.second.number) selected = false;\n ending = instruction.second.kind === \"number\" ? number >= instruction.second.number : await matches(instruction.second);\n if (ending) active.delete(pc);\n } else {\n selected = await matches(instruction.first);\n if (selected) {\n ending = instruction.second.kind === \"number\" && number >= instruction.second.number || instruction.second.kind === \"last\" && (await peekNext()).done === true;\n if (!ending) active.add(pc);\n }\n }\n } else selected = await matches(instruction.first);\n }\n if (instruction.negate) selected = !selected;\n if (!selected) { pc = instruction.kind === \"{\" ? instruction.jump! : pc + 1; continue; }\n switch (instruction.kind) {\n case \"p\": await print(); break;\n case \"P\": {\n const end = pattern.indexOf(separator);\n await emit(end < 0 ? pattern + (record.terminated ? separator : \"\") : pattern.slice(0, end + 1), end >= 0 || record.terminated); break;\n }\n case \"=\": await emit(`${number}${separator}`); break;\n case \"l\": {\n const escapes: Record<string, string> = { \"\\x07\": \"\\\\a\", \"\\b\": \"\\\\b\", \"\\f\": \"\\\\f\", \"\\n\": \"\\\\n\", \"\\r\": \"\\\\r\", \"\\t\": \"\\\\t\", \"\\v\": \"\\\\v\", \"\\\\\": \"\\\\\\\\\" };\n let line = \"\";\n for (let offset = 0; offset <= pattern.length; offset++) {\n budget.step(); await budget.checkpoint();\n const character = pattern[offset];\n const lineEnd = character === \"\\n\" && separator === \"\\n\";\n const token = character === undefined || lineEnd ? \"$\" : escapes[character] ?? (character.charCodeAt(0) < 32 || character.charCodeAt(0) >= 127 ? `\\\\${character.charCodeAt(0).toString(8).padStart(3, \"0\")}` : character);\n if (line.length + token.length >= 60) { await emit(line + \"\\\\\" + separator); line = \"\"; }\n line = budget.check(line + token);\n if (lineEnd) { await emit(line + separator); line = \"\"; }\n }\n await emit(line + separator);\n break;\n }\n case \"d\": deleted = true; pc = program.length; continue;\n case \"D\": {\n const end = pattern.indexOf(separator);\n if (end < 0) { deleted = true; pc = program.length; }\n else { pattern = pattern.slice(end + 1); pc = 0; }\n continue;\n }\n case \"q\": quit = true; status = instruction.status ?? 0; pc = program.length; continue;\n case \"a\": append({ text: instruction.text! }); break;\n case \"r\": append({ file: instruction.file! }); break;\n case \"w\": await writeFile(instruction.file!); break;\n case \"i\": await emit(instruction.text!); break;\n case \"c\":\n if (!instruction.second || ending || instruction.negate || (await peekNext()).done) await emit(instruction.text!);\n deleted = true; pc = program.length; continue;\n case \"h\": hold = pattern; holdTerminated = record.terminated; break;\n case \"H\": hold = joinSpace(hold, pattern); holdTerminated = record.terminated; break;\n case \"g\":\n pattern = hold;\n if (separator === \"\\0\") record = { ...record, terminated: holdTerminated };\n break;\n case \"G\":\n pattern = joinSpace(pattern, hold);\n if (separator === \"\\0\") record = { ...record, terminated: holdTerminated };\n break;\n case \"x\":\n [pattern, hold] = [hold, pattern];\n if (separator === \"\\0\") {\n const terminated = record.terminated;\n record = { ...record, terminated: holdTerminated };\n holdTerminated = terminated;\n }\n break;\n case \"s\": {\n const changed = await substitute(pattern, getPattern(instruction.pattern), instruction.replacement!, budget, instruction.global ?? false, instruction.occurrence ?? 1);\n pattern = changed.text;\n if (changed.count) { substituted = true; if (instruction.print) await print(); if (instruction.file) await writeFile(instruction.file); }\n break;\n }\n case \"y\": {\n // Interpreter strings contain one Latin-1 code unit per input byte.\n budget.step(pattern.length);\n const translated = Buffer.allocUnsafe(pattern.length);\n for (let index = 0; index < pattern.length; index++) {\n if (index % 256 === 0) await budget.checkpoint();\n translated[index] = (instruction.translation!.get(pattern[index]!) ?? pattern[index]!).charCodeAt(0);\n }\n pattern = translated.toString(\"latin1\");\n break;\n }\n case \"b\": pc = instruction.jump!; continue;\n case \"t\": case \"T\": {\n const branch = instruction.kind === \"t\" ? substituted : !substituted;\n substituted = false;\n if (branch) { pc = instruction.jump!; continue; }\n break;\n }\n case \"n\": case \"N\": {\n if (instruction.kind === \"n\") await flush();\n else if (separator === \"\\0\" && !(await peekNext()).done) await flush(false);\n const next = await readNext();\n if (next.done) { if (instruction.kind === \"N\") await flush(); return { status: 0, quit: false }; }\n record = await prepareRecord(next.value); number++;\n pattern = instruction.kind === \"N\" ? joinSpace(pattern, record.text) : record.text;\n substituted = false;\n break;\n }\n }\n pc++;\n }\n await flush();\n if (quit) return { status, quit: true };\n current = await readNext();\n }\n return { status: 0, quit: false };\n } finally { await source.return(undefined); }\n}\n\nexport function sedCommand(options: TextProgramOptions = {}): CommandDefinition {\n const definition = command(\"sed\", async context => {\n const maxProgramInstructions = options.maxProgramInstructions === undefined ? 1024 : options.maxProgramInstructions;\n if (!Number.isSafeInteger(maxProgramInstructions) || maxProgramInstructions < 1) throw new ProgramError(\"maxProgramInstructions must be a positive safe integer\");\n const budget = new Budget(context, options);\n const sources: string[] = [];\n const files: string[] = [];\n let quiet = false;\n let extended = false;\n let separate = false;\n let separator = \"\\n\";\n let inPlace: string | undefined;\n let ended = false;\n for (let index = 0; index < context.args.length; index++) {\n const argument = context.args[index]!;\n if (ended || argument === \"-\" || !argument.startsWith(\"-\")) { files.push(argument); continue; }\n if (argument === \"--\") { ended = true; continue; }\n if (argument === \"--null-data\") { separator = \"\\0\"; continue; }\n if (argument.startsWith(\"--\")) throw new ProgramError(`unsupported option '${argument}'`);\n for (let position = 1; position < argument.length; position++) {\n const flag = argument[position]!;\n if (flag === \"n\") quiet = true;\n else if (flag === \"z\") separator = \"\\0\";\n else if (flag === \"E\" || flag === \"r\") extended = true;\n else if (flag === \"s\") separate = true;\n else if (flag === \"i\") {\n inPlace = argument.slice(position + 1);\n if (!inPlace && context.args[index + 1] === \"\") index++;\n position = argument.length;\n } else if (flag === \"e\" || flag === \"f\") {\n const source = argument.slice(position + 1) || context.args[++index];\n if (source === undefined) throw new ProgramError(`-${flag} requires an argument`);\n if (flag === \"f\") await assertPathRequirements(context, sedRequirements, [\"script-file\"], [source]);\n sources.push(flag === \"f\" ? await readProgram(context, source) : byteString(source));\n position = argument.length;\n } else throw new ProgramError(`unsupported option '-${flag}'`);\n }\n }\n if (!sources.length) {\n if (!files.length) throw new ProgramError(\"missing program\");\n sources.push(byteString(files.shift()!));\n }\n if (sources[0]?.startsWith(\"#n\")) quiet = true;\n const program = parse(sources.join(\"\\n\"), extended, separator, maxProgramInstructions);\n const outputFiles = program.flatMap(instruction => instruction.kind !== \"r\" && instruction.file !== undefined ? [instruction.file] : []);\n await assertPathRequirements(context, sedRequirements, [\"script-output\"], outputFiles);\n if (inPlace !== undefined || outputFiles.length) {\n await assertPathRequirements(context, sedRequirements, [\"file\"], files.filter(file => file !== \"-\"));\n await assertPathRequirements(context, sedRequirements, [\"script-read\"],\n program.flatMap(instruction => instruction.kind === \"r\" && instruction.file !== undefined ? [instruction.file] : []));\n }\n const prepareOutputs = async (): Promise<void> => {\n const paths = new Set(outputFiles.map(file => virtualPath(context, file)));\n for (const path of paths) await writeFileOutput(context, new Uint8Array(), chunk => context.fs.writeFile(path, chunk, { signal: context.signal }));\n };\n const outputState: OutputState = { stdoutUnterminated: false, unterminatedFiles: new Set() };\n if (inPlace !== undefined) {\n if (!files.length || files.includes(\"-\")) throw new ProgramError(\"in-place editing requires named files\");\n if (inPlace.includes(\"/\") || inPlace.includes(\"\\0\")) throw new ProgramError(\"backup suffix cannot contain '/' or NUL\");\n await assertPathRequirements(context, sedRequirements, [\"in-place\"], files);\n if (inPlace) await assertPathRequirements(context, sedRequirements, [\"backup\"], files.flatMap(file => [file, file + inPlace]));\n for (const file of files) {\n const path = virtualPath(context, file);\n if ((await context.fs.lstat(path, { signal: context.signal })).type !== \"file\") throw new FsError(\"ENOTSUP\", { path, message: \"in-place editing requires regular files, not links or directories\" });\n }\n await prepareOutputs();\n for (const file of files) {\n let rewritten = \"\";\n const child = { ...context, stdout: { async write(chunk: Uint8Array) { rewritten = budget.check(rewritten + Buffer.from(chunk).toString(\"latin1\")); } } };\n outputState.stdoutUnterminated = false;\n const result = await execute(program, child, [file], quiet, budget, separator, outputState);\n const path = virtualPath(context, file);\n if (inPlace) await context.fs.copyFile(path, path + inPlace, { signal: context.signal });\n await writeFileOutput(context, bytes(rewritten), chunk => context.fs.writeFile(path, chunk, { signal: context.signal }));\n if (result.quit || result.status) return result.status;\n }\n return 0;\n }\n await prepareOutputs();\n if (separate) {\n for (const file of files.length ? files : [\"-\"]) { const result = await execute(program, context, [file], quiet, budget, separator, outputState); if (result.quit || result.status) return result.status; }\n return 0;\n }\n return (await execute(program, context, files, quiet, budget, separator, outputState)).status;\n });\n return { ...definition, filesystemRequirements: sedRequirements };\n}\n", "import { Budget, ProgramError } from \"./shared.js\";\nimport { ReplacementBuffer } from \"./replacement-buffer.js\";\n\ntype Node = { type: \"empty\" | \"begin\" | \"end\" }\n | { type: \"backreference\"; index: number }\n | { type: \"character\"; accepts: (character: string) => boolean }\n | { type: \"sequence\" | \"alternate\"; nodes: Node[] }\n | { type: \"repeat\"; node: Node; minimum: number; maximum: number }\n | { type: \"group\"; node: Node; index: number };\n\ntype Instruction = { kind: \"character\"; accepts: (character: string) => boolean }\n | { kind: \"backreference\"; index: number; ignoreCase: boolean }\n | { kind: \"begin\" | \"end\" | \"match\" }\n | { kind: \"save\"; slot: number }\n | { kind: \"jump\"; target: number }\n | { kind: \"split\"; first: number; second: number };\n\nconst classes: Record<string, (character: string) => boolean> = {\n alpha: character => /^[A-Za-z]$/u.test(character),\n alnum: character => /^[A-Za-z0-9]$/u.test(character),\n digit: character => /^[0-9]$/u.test(character),\n lower: character => /^[a-z]$/u.test(character),\n upper: character => /^[A-Z]$/u.test(character),\n xdigit: character => /^[A-Fa-f0-9]$/u.test(character),\n space: character => /^[ \\t\\n\\r\\v\\f]$/u.test(character),\n blank: character => character === \" \" || character === \"\\t\",\n cntrl: character => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127,\n graph: character => character.charCodeAt(0) >= 33 && character.charCodeAt(0) <= 126,\n print: character => character.charCodeAt(0) >= 32 && character.charCodeAt(0) <= 126,\n punct: character => /^[!-/:-@[-`{-~]$/u.test(character),\n};\n\nfunction extendedSource(source: string): string {\n let result = \"\";\n let bracket = false;\n for (let offset = 0; offset < source.length; offset++) {\n const character = source[offset]!;\n if (character === \"\\\\\" && offset + 1 < source.length) {\n const next = source[++offset]!;\n result += !bracket && \"()|+?{}\".includes(next) ? next : `\\\\${next}`;\n } else {\n if (character === \"[\") bracket = true;\n if (character === \"]\") bracket = false;\n result += !bracket && \"()|+?{}\".includes(character) ? `\\\\${character}` : character;\n }\n }\n return result;\n}\n\nexport interface Match { readonly start: number; readonly end: number; readonly groups: readonly (string | undefined)[] }\n\nclass NfaStorage {\n private used = 0;\n constructor(private readonly budget: Budget) {}\n reserve(bytes: number): void {\n this.budget.step(0);\n if (!Number.isSafeInteger(bytes) || bytes < 0 || bytes > this.budget.maxBufferBytes - this.used) {\n throw new ProgramError(\"regular expression state buffer limit exceeded\");\n }\n this.used += bytes;\n }\n release(bytes: number): void {\n if (!Number.isSafeInteger(bytes) || bytes < 0 || bytes > this.used) throw new ProgramError(\"invalid regular expression state accounting\");\n this.used -= bytes;\n }\n clear(): void { this.used = 0; }\n}\n\nexport class Pattern {\n readonly groupCount: number;\n private readonly code: Instruction[] = [];\n private readonly anchored: boolean;\n private readonly linear: boolean;\n\n constructor(source: string, extended = true, ignoreCase = false) {\n if (source.length > 8192) throw new ProgramError(\"regular expression exceeds 8192 bytes\");\n if (!extended) source = extendedSource(source);\n let offset = 0;\n let groups = 0;\n const closedGroups = new Set<number>();\n let depth = 0;\n const characterNode = (character: string): Node => ({ type: \"character\", accepts: candidate => ignoreCase ? candidate.toLowerCase() === character.toLowerCase() : candidate === character });\n const escaped = (): string => {\n const character = source[offset++];\n if (character === undefined) throw new ProgramError(\"trailing backslash in regular expression\");\n if (/^[1-9]$/u.test(character)) throw new ProgramError(\"pattern backreferences are not supported\");\n const control: Record<string, string> = { n: \"\\n\", t: \"\\t\", r: \"\\r\", f: \"\\f\", v: \"\\v\", a: \"\\x07\" };\n return control[character] ?? character;\n };\n const bracket = (): Node => {\n const negate = source[offset] === \"^\";\n if (negate) offset++;\n const tests: ((character: string) => boolean)[] = [];\n let first = true;\n while (offset < source.length && (source[offset] !== \"]\" || first)) {\n first = false;\n if (source.startsWith(\"[:\", offset)) {\n const end = source.indexOf(\":]\", offset + 2);\n const name = end < 0 ? \"\" : source.slice(offset + 2, end);\n if (!classes[name]) throw new ProgramError(`unsupported character class '${name}'`);\n tests.push(classes[name]!); offset = end + 2; continue;\n }\n if (source.startsWith(\"[.\", offset) || source.startsWith(\"[=\", offset)) throw new ProgramError(\"collating and equivalence classes are not supported\");\n const start = source[offset++] === \"\\\\\" ? escaped() : source[offset - 1]!;\n if (source[offset] === \"-\" && source[offset + 1] !== \"]\" && source[offset + 1] !== undefined) {\n offset++;\n const end = source[offset++] === \"\\\\\" ? escaped() : source[offset - 1]!;\n if (start > end) throw new ProgramError(\"reversed character range\");\n tests.push(character => character >= start && character <= end);\n } else tests.push(character => character === start);\n }\n if (source[offset++] !== \"]\") throw new ProgramError(\"unterminated bracket expression\");\n return { type: \"character\", accepts: character => {\n const accepted = tests.some(test => test(character) || ignoreCase && (test(character.toLowerCase()) || test(character.toUpperCase())));\n return negate ? !accepted : accepted;\n } };\n };\n const atom = (): Node => {\n const token = source[offset++];\n if (token === \"(\") {\n if (++depth > 64) throw new ProgramError(\"regular expression nesting limit exceeded\");\n const index = ++groups;\n const node = alternate();\n if (source[offset++] !== \")\") throw new ProgramError(\"unmatched '(' in regular expression\");\n closedGroups.add(index);\n depth--;\n return { type: \"group\", index, node };\n }\n if (token === \"[\") return bracket();\n if (token === \"\\\\\") {\n const reference = source[offset];\n if (reference !== undefined && /^[1-9]$/u.test(reference)) {\n const index = Number(reference);\n if (!closedGroups.has(index)) throw new ProgramError(\"pattern references an undefined or open capture group\");\n offset++;\n return { type: \"backreference\", index };\n }\n return characterNode(escaped());\n }\n if (token === \".\") return { type: \"character\", accepts: () => true };\n if (token === \"^\") return { type: \"begin\" };\n if (token === \"$\") return { type: \"end\" };\n if (token === undefined || \"*+?{}\".includes(token)) throw new ProgramError(\"quantifier without an expression\");\n return characterNode(token);\n };\n const repeated = (): Node => {\n let node = atom();\n const quantifier = source[offset];\n if (quantifier === \"*\" || quantifier === \"+\" || quantifier === \"?\") {\n offset++;\n node = { type: \"repeat\", node, minimum: quantifier === \"+\" ? 1 : 0, maximum: quantifier === \"?\" ? 1 : Infinity };\n } else if (quantifier === \"{\") {\n const match = /^\\{([0-9]+)(?:,([0-9]*))?\\}/u.exec(source.slice(offset));\n if (!match) throw new ProgramError(\"invalid repetition interval\");\n const minimum = Number(match[1]);\n const maximum = match[2] === undefined ? minimum : match[2] === \"\" ? Infinity : Number(match[2]);\n if (minimum > 1000 || maximum !== Infinity && maximum > 1000 || maximum < minimum) throw new ProgramError(\"invalid or excessive repetition interval\");\n offset += match[0].length;\n node = { type: \"repeat\", node, minimum, maximum };\n }\n if (source[offset] !== undefined && \"*+?{\".includes(source[offset]!)) throw new ProgramError(\"nested quantifier is not supported\");\n return node;\n };\n const sequence = (): Node => {\n const nodes: Node[] = [];\n while (offset < source.length && source[offset] !== \")\" && source[offset] !== \"|\") nodes.push(repeated());\n return nodes.length ? { type: \"sequence\", nodes } : { type: \"empty\" };\n };\n const alternate = (): Node => {\n const nodes = [sequence()];\n while (source[offset] === \"|\") { offset++; nodes.push(sequence()); }\n return nodes.length === 1 ? nodes[0]! : { type: \"alternate\", nodes };\n };\n const root = alternate();\n if (offset !== source.length) throw new ProgramError(\"unmatched ')' in regular expression\");\n this.groupCount = groups;\n this.anchored = root.type === \"sequence\" && root.nodes[0]?.type === \"begin\";\n const emit = (instruction: Instruction): number => {\n if (this.code.length >= 16384) throw new ProgramError(\"compiled regular expression is too large\");\n return this.code.push(instruction) - 1;\n };\n const compile = (node: Node): void => {\n if (node.type === \"empty\") return;\n if (node.type === \"character\") { emit({ kind: \"character\", accepts: node.accepts }); return; }\n if (node.type === \"backreference\") { emit({ kind: \"backreference\", index: node.index, ignoreCase }); return; }\n if (node.type === \"begin\" || node.type === \"end\") { emit({ kind: node.type }); return; }\n if (node.type === \"sequence\") { for (const child of node.nodes) compile(child); return; }\n if (node.type === \"group\") { emit({ kind: \"save\", slot: node.index * 2 }); compile(node.node); emit({ kind: \"save\", slot: node.index * 2 + 1 }); return; }\n if (node.type === \"alternate\") {\n const jumps: number[] = [];\n for (let index = 0; index < node.nodes.length; index++) {\n if (index === node.nodes.length - 1) { compile(node.nodes[index]!); break; }\n const split = emit({ kind: \"split\", first: this.code.length + 1, second: 0 });\n compile(node.nodes[index]!);\n jumps.push(emit({ kind: \"jump\", target: 0 }));\n (this.code[split] as Extract<Instruction, { kind: \"split\" }>).second = this.code.length;\n }\n for (const jump of jumps) (this.code[jump] as Extract<Instruction, { kind: \"jump\" }>).target = this.code.length;\n return;\n }\n if (node.type !== \"repeat\") throw new ProgramError(\"invalid internal regular expression node\");\n for (let count = 0; count < node.minimum; count++) compile(node.node);\n if (node.maximum === Infinity) {\n const split = emit({ kind: \"split\", first: this.code.length + 1, second: 0 });\n compile(node.node); emit({ kind: \"jump\", target: split });\n (this.code[split] as Extract<Instruction, { kind: \"split\" }>).second = this.code.length;\n } else for (let count = node.minimum; count < node.maximum; count++) {\n const split = emit({ kind: \"split\", first: this.code.length + 1, second: 0 });\n compile(node.node);\n (this.code[split] as Extract<Instruction, { kind: \"split\" }>).second = this.code.length;\n }\n };\n compile(root); emit({ kind: \"match\" });\n this.linear = this.code.every(instruction => instruction.kind === \"character\" || instruction.kind === \"begin\" || instruction.kind === \"end\" || instruction.kind === \"match\");\n }\n\n async find(text: string, budget: Budget, from = 0): Promise<Match | undefined> {\n await budget.checkpoint();\n let units = 0;\n const work = (count = 1): Promise<void> | undefined => {\n budget.step(count);\n units += count;\n if (units < 64) return undefined;\n units %= 64;\n return budget.checkpoint();\n };\n if (this.linear) {\n for (let start = from; start <= text.length && (!this.anchored || start === 0); start++) {\n let position = start;\n for (const instruction of this.code) {\n const paused = work(2);\n if (paused) await paused;\n if (instruction.kind === \"character\") {\n if (position >= text.length || !instruction.accepts(text[position]!)) break;\n position++;\n } else if (instruction.kind === \"begin\" && position !== 0 || instruction.kind === \"end\" && position !== text.length) break;\n else if (instruction.kind === \"match\") {\n if (position - start > budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const copied = work(position - start);\n if (copied) await copied;\n const match = { start, end: position, groups: [text.slice(start, position)] };\n await budget.checkpoint();\n return match;\n }\n }\n }\n return undefined;\n }\n interface Thread { pc: number; captures: number[]; bytes: number }\n const storage = new NfaStorage(budget);\n const positionDigits = String(text.length).length;\n const instructionDigits = String(this.code.length).length;\n try {\n for (let start = from; start <= text.length && (!this.anchored || start === 0); start++) {\n storage.reserve(256);\n const positions = new Map<number, Thread[]>([[start, [{ pc: 0, captures: [], bytes: 64 }]]]);\n let bestEnd: number | undefined;\n let bestCaptures: number[] = [];\n let bestBytes = 0;\n try {\n for (let position = start; positions.size && position <= text.length; position++) {\n const advanced = work();\n if (advanced) await advanced;\n const pending = positions.get(position);\n if (!pending) continue;\n const reversed = work(pending.length);\n if (reversed) await reversed;\n pending.reverse();\n positions.delete(position);\n const visited = new Set<string | number>();\n let stateBytes = 0;\n const enqueue = (destination: number, pc: number, captures: number[], saveSlot?: number): void => {\n const length = saveSlot === undefined ? captures.length : Math.max(captures.length, saveSlot + 1);\n const bytes = 64 + length * 8;\n const waiting = destination === position ? pending : positions.get(destination);\n storage.reserve(bytes + (waiting ? 0 : 64));\n const saved = saveSlot === undefined ? captures : [...captures];\n if (saveSlot !== undefined) saved[saveSlot] = position;\n const thread = { pc, captures: saved, bytes };\n if (waiting) waiting.push(thread);\n else positions.set(destination, [thread]);\n };\n while (pending.length) {\n const paused = work();\n if (paused) await paused;\n const thread = pending.pop()!;\n try {\n let state: string | number = thread.pc;\n let bytes = 32;\n if (this.groupCount) {\n const joinedLength = Math.max(0, thread.captures.length - 1) + thread.captures.length * positionDigits;\n const stateLength = instructionDigits + 1 + joinedLength;\n const serialized = work(stateLength);\n if (serialized) await serialized;\n const reserved = 32 + joinedLength * 2 + 64 + stateLength * 2;\n storage.reserve(reserved);\n state = `${thread.pc}:${thread.captures.join(\",\")}`;\n bytes = 64 + state.length * 2;\n storage.release(reserved - bytes);\n } else storage.reserve(bytes);\n if (visited.has(state)) { storage.release(bytes); continue; }\n visited.add(state);\n stateBytes += bytes;\n const instruction = this.code[thread.pc]!;\n if (instruction.kind === \"character\") {\n if (position < text.length && instruction.accepts(text[position]!)) enqueue(position + 1, thread.pc + 1, thread.captures);\n } else if (instruction.kind === \"backreference\") {\n const begin = thread.captures[instruction.index * 2];\n const end = thread.captures[instruction.index * 2 + 1];\n if (begin === undefined || end === undefined || position + end - begin > text.length) continue;\n let matches = true;\n for (let offset = 0; offset < end - begin; offset++) {\n const compared = work();\n if (compared) await compared;\n const expected = text[begin + offset]!;\n const actual = text[position + offset]!;\n if (instruction.ignoreCase ? expected.toLowerCase() !== actual.toLowerCase() : expected !== actual) { matches = false; break; }\n }\n if (matches) enqueue(position + end - begin, thread.pc + 1, thread.captures);\n } else if (instruction.kind === \"match\") {\n let preferred = bestEnd === undefined || position > bestEnd;\n if (position === bestEnd) for (let index = 1; index <= this.groupCount; index++) {\n const compared = work();\n if (compared) await compared;\n const begin = thread.captures[index * 2];\n const end = thread.captures[index * 2 + 1];\n const priorBegin = bestCaptures[index * 2];\n const priorEnd = bestCaptures[index * 2 + 1];\n const length = begin === undefined || end === undefined ? -1 : end - begin;\n const priorLength = priorBegin === undefined || priorEnd === undefined ? -1 : priorEnd - priorBegin;\n if (length !== priorLength) { preferred = length > priorLength; break; }\n }\n if (preferred) {\n const retained = 32 + thread.captures.length * 8;\n storage.reserve(retained);\n bestEnd = position;\n bestCaptures = thread.captures;\n storage.release(bestBytes);\n bestBytes = retained;\n }\n } else if (instruction.kind === \"split\") {\n enqueue(position, instruction.second, thread.captures);\n enqueue(position, instruction.first, thread.captures);\n } else if (instruction.kind === \"jump\") enqueue(position, instruction.target, thread.captures);\n else if (instruction.kind === \"save\") {\n const copied = work(Math.max(thread.captures.length, instruction.slot + 1));\n if (copied) await copied;\n enqueue(position, thread.pc + 1, thread.captures, instruction.slot);\n } else if (instruction.kind === \"begin\" ? position === 0 : position === text.length) enqueue(position, thread.pc + 1, thread.captures);\n } finally { storage.release(thread.bytes); }\n }\n visited.clear();\n storage.release(stateBytes + 64);\n }\n if (bestEnd !== undefined) {\n let characters = bestEnd - start;\n for (let index = 1; index <= this.groupCount; index++) {\n const counted = work();\n if (counted) await counted;\n const begin = bestCaptures[index * 2];\n const end = bestCaptures[index * 2 + 1];\n if (begin !== undefined && end !== undefined) characters += end - begin;\n }\n const copied = work(characters);\n if (copied) await copied;\n storage.reserve(64 + (this.groupCount + 1) * 40 + characters * 2);\n const groups: (string | undefined)[] = [text.slice(start, bestEnd)];\n for (let index = 1; index <= this.groupCount; index++) {\n const materialized = work();\n if (materialized) await materialized;\n const begin = bestCaptures[index * 2];\n const end = bestCaptures[index * 2 + 1];\n groups.push(begin === undefined || end === undefined ? undefined : text.slice(begin, end));\n }\n await budget.checkpoint();\n return { start, end: bestEnd, groups };\n }\n } finally { positions.clear(); storage.clear(); }\n }\n return undefined;\n } finally { storage.clear(); }\n }\n}\n\nasync function replacementLength(replacement: string, match: Match, budget: Budget, available: number): Promise<number> {\n let length = 0;\n let tokens = 0;\n for (let index = 0; index < replacement.length; index++) {\n if (tokens++ % 256 === 0) await budget.checkpoint();\n budget.step();\n const character = replacement[index]!;\n let size = 1;\n if (character === \"&\") {\n budget.step();\n size = match.groups[0]?.length ?? 0;\n } else if (character === \"\\\\\" && index + 1 < replacement.length) {\n budget.step();\n const next = replacement[++index]!;\n if (next >= \"1\" && next <= \"9\") {\n budget.step();\n size = match.groups[Number(next)]?.length ?? 0;\n }\n }\n if (size > available - length) throw new ProgramError(\"text buffer limit exceeded\");\n length += size;\n }\n return length;\n}\n\nasync function replacementText(replacement: string, match: Match, buffer: ReplacementBuffer, budget: Budget): Promise<void> {\n let literal = 0;\n let tokens = 0;\n for (let index = 0; index < replacement.length; index++) {\n if (tokens++ % 256 === 0) await budget.checkpoint();\n budget.step();\n const character = replacement[index]!;\n if (character !== \"&\" && (character !== \"\\\\\" || index + 1 === replacement.length)) continue;\n await buffer.append(replacement, literal, index);\n if (character === \"&\") {\n budget.step();\n await buffer.append(match.groups[0] ?? \"\");\n } else {\n budget.step();\n const next = replacement[++index]!;\n if (next >= \"1\" && next <= \"9\") {\n budget.step();\n await buffer.append(match.groups[Number(next)] ?? \"\");\n } else await buffer.append(next === \"n\" ? \"\\n\" : next === \"t\" ? \"\\t\" : next);\n }\n literal = index + 1;\n }\n await buffer.append(replacement, literal);\n}\n\nexport async function substitute(text: string, pattern: Pattern, replacement: string, budget: Budget, global: boolean, occurrence = 1): Promise<{ text: string; count: number }> {\n let search = 0;\n let consumed = 0;\n let previousEnd = -1;\n let encountered = 0;\n let count = 0;\n const result = new ReplacementBuffer(budget);\n try {\n while (search <= text.length) {\n await budget.checkpoint();\n budget.step();\n const match = await pattern.find(text, budget, search);\n if (!match) break;\n if (match.start === match.end && match.start === previousEnd) { search = match.end + 1; continue; }\n encountered++;\n if (encountered >= occurrence) {\n const prefix = match.start - consumed;\n result.admit(prefix);\n const length = await replacementLength(replacement, match, budget, result.remaining - prefix);\n result.admit(prefix + length);\n await result.append(text, consumed, match.start);\n await replacementText(replacement, match, result, budget);\n consumed = match.end; count++;\n if (!global) break;\n }\n previousEnd = match.end > match.start ? match.end : -1;\n search = match.end > match.start ? match.end : match.end + 1;\n }\n budget.step(0);\n if (!count) return { text: budget.check(text), count };\n await result.append(text, consumed);\n return { text: await result.finish(), count };\n } finally { result.clear(); }\n}\n", "import { PublicDiagnostic, publicDiagnosticMessage } from \"../../diagnostics.js\";\nimport { writeDiagnostic } from \"../../escaping.js\";\nimport { monotonicNow, yieldTurn } from \"../../contracts/yield.js\";\nimport { FsError, readBytes, writeBytes, type ByteSource, type CommandContext, type CommandDefinition } from \"../../contracts/index.js\";\nimport { inputRequirements } from \"../portable-requirements.js\";\nimport { requiredFileInput } from \"../search/requirements.js\";\n\nexport interface TextProgramOptions {\n readonly replace?: boolean;\n readonly maxProgramInstructions?: number;\n readonly maxSteps?: number;\n readonly maxBufferBytes?: number;\n}\n\nexport class ProgramError extends PublicDiagnostic {}\n\nexport class Budget {\n readonly maxBufferBytes: number;\n private remaining: number;\n private checkpoints = 0;\n private lastYield = monotonicNow();\n constructor(readonly context: CommandContext, options: TextProgramOptions) {\n this.remaining = options.maxSteps ?? 5_000_000;\n this.maxBufferBytes = options.maxBufferBytes ?? 32 * 1024 * 1024;\n for (const value of [this.remaining, this.maxBufferBytes]) {\n if (!Number.isSafeInteger(value) || value < 1) throw new ProgramError(\"limits must be positive safe integers\");\n }\n }\n step(count = 1): void {\n this.context.signal.throwIfAborted();\n this.remaining -= count;\n if (this.remaining < 0) throw new ProgramError(\"execution step limit exceeded\");\n }\n check(text: string): string {\n if (text.length > this.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n return text;\n }\n async checkpoint(): Promise<void> {\n this.context.signal.throwIfAborted();\n if (++this.checkpoints % 256 === 0 || monotonicNow() - this.lastYield >= 25) {\n await yieldTurn(this.context.signal);\n this.lastYield = monotonicNow();\n }\n this.context.signal.throwIfAborted();\n }\n}\n\nexport function byteString(text: string): string { return Buffer.from(text, \"utf8\").toString(\"latin1\"); }\nexport function bytes(text: string): Uint8Array { return Buffer.from(text, \"latin1\"); }\n\nexport function virtualPath(context: CommandContext, path: string): string {\n if (!path) throw new FsError(\"ENOENT\", { path });\n if (path.includes(\"\\0\")) throw new FsError(\"EINVAL\", { path });\n return path.startsWith(\"/\") ? path : `${context.cwd.replace(/\\/$/u, \"\")}/${path}`;\n}\n\nexport async function write(context: CommandContext, text: string): Promise<void> {\n context.signal.throwIfAborted();\n await writeBytes(context.stdout, bytes(text), context.signal);\n}\n\nexport async function* input(context: CommandContext, file = \"-\"): ByteSource {\n context.signal.throwIfAborted();\n if (file === \"-\") yield* readBytes(context.stdin, context.signal);\n else {\n yield* requiredFileInput(context, inputRequirements, \"file\", file, 32 * 1024 * 1024);\n }\n}\n\nexport async function readProgram(context: CommandContext, file: string): Promise<string> {\n const contents = await context.fs.readFile(virtualPath(context, file), { signal: context.signal, maxBytes: 1024 * 1024 });\n return Buffer.from(contents).toString(\"latin1\");\n}\n\nexport interface RecordLine { readonly text: string; readonly terminated: boolean; readonly file: string; readonly fileIndex: number }\n\nexport async function* lineRecords(context: CommandContext, files: readonly string[], budget: Budget): AsyncGenerator<RecordLine> {\n const names = files.length ? files : [\"-\"];\n for (let fileIndex = 0; fileIndex < names.length; fileIndex++) {\n const file = names[fileIndex]!;\n let pending = \"\";\n for await (const chunk of input(context, file)) {\n budget.step();\n const text = Buffer.from(chunk).toString(\"latin1\");\n let start = 0;\n let end: number;\n while ((end = text.indexOf(\"\\n\", start)) >= 0) {\n yield { text: budget.check(pending + text.slice(start, end)), terminated: true, file, fileIndex };\n pending = \"\"; start = end + 1;\n }\n pending = budget.check(pending + text.slice(start));\n }\n if (pending) yield { text: pending, terminated: false, file, fileIndex };\n }\n}\n\nexport function command(name: string, run: (context: CommandContext) => Promise<number>): CommandDefinition {\n return {\n name,\n async execute(context) {\n context.signal.throwIfAborted();\n try { return { exitCode: await run(context) }; }\n catch (error) {\n context.signal.throwIfAborted();\n await writeDiagnostic(context.stderr, `${name}: ${publicDiagnosticMessage(error, context.onInternalError)}\\n`, context.signal);\n return { exitCode: error instanceof ProgramError ? 2 : 1 };\n }\n },\n };\n}\n", "import type { CommandContext } from \"../../contracts/command.js\";\nimport { FsError } from \"../../contracts/errors.js\";\nimport { readBytes, type ByteSource } from \"../../contracts/io.js\";\nimport { assertCommandRequirements, type CommandFileSystemRequirement } from \"../../contracts/command-requirements.js\";\nimport { pathOf } from \"../internal.js\";\nimport { inputRequirements } from \"../portable-requirements.js\";\n\nexport const grepRequirements: readonly CommandFileSystemRequirement[] = [\n ...inputRequirements,\n { id: \"pattern-file\", description: \"Read grep pattern files (-f)\", capabilities: [], anyOf: [[\"streamingRead\"], [\"read\"]] },\n];\n\nexport const searchRequirements: readonly CommandFileSystemRequirement[] = [\n ...inputRequirements,\n { id: \"metadata\", description: \"Inspect named search operands\", capabilities: [\"stat\"] },\n { id: \"pattern-file\", description: \"Read rg pattern files (-f)\", capabilities: [\"read\"] },\n { id: \"directory\", description: \"Walk directories, including --files\", capabilities: [\"stat\", \"readdir\", \"realpath\"] },\n { id: \"canonical\", description: \"Resolve followed directory links for loop detection\", capabilities: [\"realpath\"] },\n { id: \"ignore-file\", description: \"Read directory ignore files unless disabled\", capabilities: [\"read\"] },\n];\n\nexport const sedRequirements: readonly CommandFileSystemRequirement[] = [\n ...inputRequirements,\n { id: \"script-file\", description: \"Read sed program files (-f)\", capabilities: [\"read\"] },\n { id: \"script-read\", description: \"Read files referenced by sed r instructions\", capabilities: [], anyOf: [[\"streamingRead\"], [\"read\"]] },\n { id: \"script-output\", description: \"Truncate and append files referenced by sed w instructions\", capabilities: [\"write\", \"append\"], mutates: true },\n { id: \"in-place\", description: \"Inspect and rewrite named files (-i)\", capabilities: [\"stat\", \"write\"], mutates: true },\n { id: \"backup\", description: \"Copy original files to backup destinations (-iSUFFIX)\", capabilities: [\"copy\"], mutates: true },\n];\n\nexport async function assertPathRequirements(\n context: CommandContext, requirements: readonly CommandFileSystemRequirement[], modes: readonly string[], paths: readonly string[],\n): Promise<void> {\n if (!paths.length) return;\n assertCommandRequirements(context, requirements, modes);\n if (!context.fs.capabilitiesFor) return;\n for (const path of new Set(paths)) {\n try {\n const capabilities = await context.fs.capabilitiesFor(pathOf(context, path), { signal: context.signal });\n assertCommandRequirements(context, requirements, modes, capabilities);\n } catch (error) {\n context.signal.throwIfAborted();\n if (![\"ENOENT\", \"ENOTDIR\"].includes((error as { code?: string }).code ?? \"\")) throw error;\n }\n }\n}\n\nexport async function* requiredFileInput(\n context: CommandContext, requirements: readonly CommandFileSystemRequirement[], mode: string, file: string, maxBytes: number,\n): ByteSource {\n assertCommandRequirements(context, requirements, [mode]);\n const path = pathOf(context, file);\n const capabilities = await context.fs.capabilitiesFor?.(path, { signal: context.signal }) ?? context.fs.capabilities;\n assertCommandRequirements(context, requirements, [mode], capabilities);\n if (context.fs.readStream && capabilities.streamingRead !== false && context.fs.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 || context.fs.capabilities.read === false) throw new FsError(\"ENOTSUP\", { syscall: \"readFile\", path });\n yield await context.fs.readFile(path, { signal: context.signal, maxBytes });\n}\n", "import { Budget, ProgramError } from \"./shared.js\";\n\nexport class ReplacementBuffer {\n #segments: Buffer[] = [];\n #size = 0;\n #allocated = 0;\n #tailUsed = 0;\n\n constructor(readonly budget: Budget) {}\n\n get remaining(): number { return this.budget.maxBufferBytes - this.#size; }\n\n admit(length: number): void {\n this.budget.step(0);\n if (!Number.isSafeInteger(length) || length < 0 || length > this.remaining) throw new ProgramError(\"text buffer limit exceeded\");\n }\n\n async append(source: string, start = 0, end = source.length): Promise<void> {\n this.admit(end - start);\n let offset = start;\n while (offset < end) {\n await this.budget.checkpoint();\n let tail = this.#segments.at(-1);\n const available = tail ? tail.length - this.#tailUsed : 0;\n const capacity = Math.min(1024, this.budget.maxBufferBytes - this.#allocated);\n const length = Math.min(end - offset, available || capacity);\n this.budget.step(length);\n if (!available) {\n this.budget.step();\n tail = Buffer.allocUnsafeSlow(capacity);\n this.#segments.push(tail);\n this.#allocated += capacity;\n this.#tailUsed = 0;\n }\n for (let index = 0; index < length; index++) tail![this.#tailUsed + index] = source.charCodeAt(offset + index);\n this.#tailUsed += length;\n this.#size += length;\n offset += length;\n }\n }\n\n async finish(): Promise<string> {\n this.budget.step(0);\n if (!this.#size) return \"\";\n this.budget.step(this.#size);\n await this.budget.checkpoint();\n this.budget.step(0);\n if (this.#segments.length === 1) {\n const text = this.#segments[0]!.toString(\"latin1\", 0, this.#size);\n this.clear();\n return text;\n }\n this.budget.step(this.#size);\n if (this.#allocated > this.budget.maxBufferBytes || this.#size > this.budget.maxBufferBytes) throw new ProgramError(\"text buffer limit exceeded\");\n const result = Buffer.allocUnsafeSlow(this.#size);\n let offset = 0;\n for (const segment of this.#segments) {\n await this.budget.checkpoint();\n this.budget.step(0);\n const length = Math.min(segment.length, this.#size - offset);\n result.set(segment.subarray(0, length), offset);\n offset += length;\n }\n this.clear();\n await this.budget.checkpoint();\n this.budget.step(0);\n return result.toString(\"latin1\");\n }\n\n clear(): void {\n this.#segments = [];\n this.#size = 0;\n this.#allocated = 0;\n this.#tailUsed = 0;\n }\n}\n", "import { toByteSource, type ByteSource, type CommandDefinition } from \"../../contracts/index.js\";\nimport { bufferLimit, diagnostic, input, integer, lines, options as parseOptions, output, UsageError, value } from \"../internal.js\";\nimport { AvailableRecords, RegexExecutor, RegexExecutionError, withRegexSession } from \"../regex-execution/portable.js\";\nimport type { GrepDescriptor } from \"../regex-execution/protocol.js\";\nimport { grepRequirements, requiredFileInput } from \"./requirements.js\";\n\nconst maxPatternCount = 1024;\n\nexport function createGrepCommands(executor: RegexExecutor): CommandDefinition[] {\n return [{ name: \"grep\", filesystemRequirements: grepRequirements, execute: context => withRegexSession(context, executor, async session => {\n try {\n const parsed = parseOptions(context.args, \"EFivnclLqhHowxae:f:m:sz\", { \"extended-regexp\": \"E\", \"fixed-strings\": \"F\", \"ignore-case\": \"i\", \"invert-match\": \"v\", \"line-number\": \"n\", count: \"c\", \"files-with-matches\": \"l\", \"files-without-match\": \"L\", quiet: \"q\", silent: \"q\", \"no-filename\": \"h\", \"with-filename\": \"H\", \"only-matching\": \"o\", \"word-regexp\": \"w\", \"line-regexp\": \"x\", regexp: \"e\", file: \"f\", \"max-count\": \"m\", \"no-messages\": \"s\", text: \"a\", \"null-data\": \"z\" });\n let positionalPattern: string | undefined;\n if (!parsed.flags.has(\"e\") && !parsed.flags.has(\"f\")) {\n if (!parsed.operands.length) throw new UsageError(\"missing pattern\");\n positionalPattern = parsed.operands.shift()!;\n }\n const names = parsed.operands.length ? parsed.operands : [\"-\"];\n const patternFiles = parsed.values.get(\"f\") ?? [];\n const patterns: string[] = [];\n let patternCount = 0;\n let patternBytes = 0;\n const admit = (chunk: string | Uint8Array, atStart: boolean): boolean => {\n context.signal.throwIfAborted();\n const size = typeof chunk === \"string\" ? Buffer.byteLength(chunk) : chunk.length;\n if (size > bufferLimit - patternBytes) throw new UsageError(`pattern byte limit exceeded (${bufferLimit} bytes)`);\n patternBytes += size;\n for (let offset = 0; offset < chunk.length;) {\n if (atStart && ++patternCount > maxPatternCount) throw new UsageError(`pattern count limit exceeded (${maxPatternCount})`);\n const newline = typeof chunk === \"string\" ? chunk.indexOf(\"\\n\", offset) : chunk.indexOf(10, offset);\n if (newline < 0) return false;\n offset = newline + 1;\n atStart = true;\n }\n return atStart;\n };\n const addArgument = async (pattern: string) => {\n admit(pattern, true);\n if (pattern === \"\") {\n if (++patternCount > maxPatternCount) throw new UsageError(`pattern count limit exceeded (${maxPatternCount})`);\n patterns.push(\"\");\n } else {\n for await (const line of lines(toByteSource(pattern))) patterns.push(Buffer.from(line.bytes).toString(\"latin1\"));\n }\n };\n async function* admitted(source: ByteSource): ByteSource {\n let atStart = true;\n for await (const chunk of source) {\n atStart = admit(chunk, atStart);\n yield chunk;\n }\n }\n for (const pattern of parsed.values.get(\"e\") ?? []) await addArgument(pattern);\n for (const name of patternFiles) {\n const source = name === \"-\" ? input(context) : requiredFileInput(context, grepRequirements, \"pattern-file\", name, bufferLimit - patternBytes);\n for await (const line of lines(admitted(source))) patterns.push(Buffer.from(line.bytes).toString(\"latin1\"));\n }\n if (positionalPattern !== undefined) await addArgument(positionalPattern);\n if (parsed.flags.has(\"E\") && parsed.flags.has(\"F\")) throw new UsageError(\"conflicting matchers specified\");\n const descriptor: GrepDescriptor = {\n kind: \"grep\", patterns, fixed: parsed.flags.has(\"F\"), extended: parsed.flags.has(\"E\"),\n insensitive: parsed.flags.has(\"i\"), whole: parsed.flags.has(\"x\"), word: parsed.flags.has(\"w\"),\n };\n await session.run(descriptor, []);\n const maxCount = value(parsed, \"m\") === undefined ? Infinity : integer(value(parsed, \"m\")!);\n const batchSize = Number.isFinite(maxCount) || parsed.flags.has(\"q\") || parsed.flags.has(\"l\") || parsed.flags.has(\"L\") ? 1 : 128;\n const delimiter = parsed.flags.has(\"z\") ? \"\\0\" : \"\\n\";\n let anySelected = false;\n let failed = false;\n for (const name of names) {\n let count = 0;\n let number = 0;\n const named = name === \"-\" ? \"(standard input)\" : name;\n const prefix = (lineNumber = false) => `${!parsed.flags.has(\"h\") && (parsed.flags.has(\"H\") || names.length > 1) ? `${named}:` : \"\"}${lineNumber && parsed.flags.has(\"n\") ? `${number}:` : \"\"}`;\n try {\n const available = new AvailableRecords(parsed.flags.has(\"z\") ? 0 : 10, bufferLimit);\n const source = name === \"-\" ? input(context) : requiredFileInput(context, grepRequirements, \"file\", name, bufferLimit);\n records: if (maxCount > 0) for await (const batch of available.batches(lines(available.source(source), parsed.flags.has(\"z\") ? 0 : 10), line => line.bytes.length, () => batchSize)) {\n const results = await session.run(descriptor, batch.map(line => ({ bytes: line.bytes, all: parsed.flags.has(\"o\"), terminated: line.terminated })));\n for (let index = 0; index < batch.length; index++) {\n const line = batch[index]!;\n context.signal.throwIfAborted();\n number++;\n const found = results[index]!;\n if ((found.length > 0) === parsed.flags.has(\"v\")) continue;\n count++;\n if (!parsed.flags.has(\"L\")) anySelected = true;\n if (parsed.flags.has(\"q\")) return { exitCode: 0 };\n if (parsed.flags.has(\"l\") || parsed.flags.has(\"L\")) break records;\n if (!parsed.flags.has(\"c\")) {\n if (parsed.flags.has(\"o\")) {\n if (!parsed.flags.has(\"v\")) {\n let end = -1;\n for (const match of found) {\n if (match.start === match.end || match.start < end) continue;\n await output(context, prefix(true));\n await output(context, line.bytes.subarray(match.start, match.end));\n await output(context, delimiter);\n end = match.end;\n }\n }\n } else {\n await output(context, prefix(true)); await output(context, line.bytes); await output(context, delimiter);\n }\n }\n if (count >= maxCount) break records;\n }\n }\n if (parsed.flags.has(\"l\") && count > 0 || parsed.flags.has(\"L\") && count === 0) {\n await output(context, named + delimiter); anySelected = true;\n } else if (parsed.flags.has(\"c\") && !parsed.flags.has(\"l\") && !parsed.flags.has(\"L\")) await output(context, prefix() + count + delimiter);\n } catch (error) {\n context.signal.throwIfAborted();\n if (error instanceof RegexExecutionError) throw error;\n failed = true;\n if (!parsed.flags.has(\"s\")) await diagnostic(context, error);\n }\n }\n return { exitCode: failed ? 2 : anySelected ? 0 : 1 };\n } catch (error) {\n context.signal.throwIfAborted();\n await diagnostic(context, error);\n return { exitCode: 2 };\n }\n }) }];\n}\n", "import { collectBytes, readBytes, type ByteSource, type CommandContext, type CommandDefinition } from \"../../contracts/index.js\";\nimport { Matcher, type Match } from \"./matcher.js\";\nimport { parse, SearchError, type Arguments, type SearchOptions } from \"./options.js\";\nimport { data, elapsed, Printer, stats, type Stats } from \"./output.js\";\nimport { diagnostic, Limits, lines, OutputClosed, pathFor, type Line, type ReadState } from \"./shared.js\";\nimport { Walker, type FileTarget } from \"./walk.js\";\nimport { AvailableRecords, RegexExecutor, RegexExecutionError, withRegexSession } from \"../regex-execution/portable.js\";\nimport { assertPathRequirements, requiredFileInput, searchRequirements } from \"./requirements.js\";\n\ninterface InputSelection { readonly paths: readonly string[]; readonly implicit: boolean }\n\nfunction selectInput(context: CommandContext, args: Arguments, options: SearchOptions): InputSelection {\n if (args.paths.length) return { paths: args.paths, implicit: false };\n if (args.mode === \"files\" || options.defaultInput === \"cwd\" || args.patternFiles.includes(\"-\")) return { paths: [\".\"], implicit: true };\n const stdin = options.defaultInput === \"stdin\" || context.stdinIsDefault === false;\n return { paths: stdin ? [\"-\"] : [\".\"], implicit: !stdin };\n}\n\nasync function patterns(context: CommandContext, args: Arguments): Promise<string[]> {\n const patterns = [...args.patterns];\n for (const file of args.patternFiles) {\n if (file !== \"-\") await assertPathRequirements(context, searchRequirements, [\"pattern-file\"], [file]);\n const bytes = file === \"-\" ? await collectBytes(context.stdin, { maxBytes: 1024 * 1024, signal: context.signal })\n : await context.fs.readFile(pathFor(context, file), { signal: context.signal, maxBytes: 1024 * 1024 });\n let text: string;\n try { text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes); }\n catch { throw new SearchError(`pattern file '${file}' is not UTF-8`); }\n const lines = text.split(\"\\n\");\n if (lines.at(-1) === \"\") lines.pop();\n patterns.push(...lines.map(line => line.endsWith(\"\\r\") ? line.slice(0, -1) : line));\n }\n return patterns;\n}\n\nasync function searchFile(context: CommandContext, args: Arguments, limits: Limits, matcher: Matcher, printer: Printer, target: FileTarget, stdin: ByteSource, filename: boolean): Promise<{ found: boolean; stats: Stats }> {\n const totals = stats(); totals.searches = 1;\n if (args.maxCount === 0) return { found: false, stats: totals };\n const state: ReadState = { bytesRead: 0, bytesSearched: 0, binaryOffset: null, skipped: false };\n const binary = args.binary === \"text\" ? \"text\" : args.binary === \"binary\" || target.explicit ? \"binary\" : \"skip\";\n const source = target.path === \"-\" ? readBytes(stdin, limits.signal)\n : readBytes(requiredFileInput(context, searchRequirements, \"file\", target.path, limits.maxFileBytes), limits.signal);\n const before: { line: Line; matches: Match[] }[] = [];\n let beforeBytes = 0;\n let lastPrinted = 0;\n let after = 0;\n let begun = false;\n let binaryPrinted = false;\n let lastSelectedEnd = 0;\n let fileOutputStart = limits.outputBytes;\n const begin = async () => {\n if (begun) return;\n begun = true; fileOutputStart = limits.outputBytes;\n if (args.mode === \"json\") await printer.event(\"begin\", { path: data(Buffer.from(target.label)) });\n };\n const selectedOutput = !args.quiet && (args.mode === \"lines\" || args.mode === \"json\");\n const binaryOutput = selectedOutput && args.mode === \"lines\" && binary === \"binary\";\n const available = new AvailableRecords(args.nullData ? 0 : 10, limits.maxLineBytes, binary === \"binary\" ? 0 : -1);\n const batchSize = () => Number.isFinite(args.maxCount) || args.quiet && args.mode !== \"json\" || args.mode === \"with\" || args.mode === \"without\" || binaryOutput && state.binaryOffset !== null ? 1 : 128;\n records: for await (const batch of available.batches(lines(available.source(source), limits, state, binary, args.nullData), line => line.content.length, batchSize)) {\n const rows = batch.map(line => ({ bytes: args.crlf && line.content.at(-1) === 13 ? line.content.subarray(0, -1) : line.content, all: args.onlyMatching || args.mode === \"json\" || args.mode === \"matches\", terminated: line.bytes.length !== line.content.length }));\n const results = await matcher.batch(rows);\n for (let index = 0; index < batch.length; index++) {\n const line = batch[index]!;\n state.bytesSearched = line.offset + line.bytes.length;\n await limits.tick();\n if (binaryOutput && state.binaryOffset !== null && totals.matched_lines > 0) {\n await printer.binary(target.label, state.binaryOffset, filename); binaryPrinted = true; break records;\n }\n const matches = results[index]!;\n const limitedInvertedTail = args.invert && totals.matched_lines >= args.maxCount && after > 0 && line.bytes.length === line.content.length;\n const selected = (matches.length > 0) !== args.invert || limitedInvertedTail;\n if (selected) lastSelectedEnd = line.offset + line.bytes.length;\n if (selected && totals.matched_lines < args.maxCount) {\n totals.matched_lines++; totals.matches += args.invert ? 0 : matches.length;\n if (args.quiet && args.mode !== \"json\" || args.mode === \"with\" || args.mode === \"without\") break records;\n if (selectedOutput) {\n await begin();\n if (state.binaryOffset !== null && args.mode !== \"json\") {\n if (!binaryPrinted) { await printer.binary(target.label, state.binaryOffset, filename); binaryPrinted = true; }\n break records;\n }\n for (const previous of before) if (previous.line.number > lastPrinted) {\n await printer.record(target.label, previous.line, previous.matches, false, filename); lastPrinted = previous.line.number;\n }\n await printer.record(target.label, line, args.invert ? [] : matches, true, filename); lastPrinted = line.number;\n after = args.after;\n }\n } else if (after && selectedOutput) {\n if (selected) { totals.matched_lines++; totals.matches += args.invert && !limitedInvertedTail ? 0 : matches.length; }\n await printer.record(target.label, line, matches, selected, filename); lastPrinted = line.number; after--;\n }\n if (binaryOutput && args.before > 0 && state.binaryOffset !== null) break records;\n if (totals.matched_lines >= args.maxCount && (!selectedOutput || after === 0)) {\n state.bytesSearched = Math.max(lastSelectedEnd, args.invert || line.bytes.length === line.content.length ? line.offset : 0);\n break records;\n }\n before.push({ line, matches }); beforeBytes += line.bytes.length;\n while (before.length > args.before) beforeBytes -= before.shift()!.line.bytes.length;\n if (beforeBytes > limits.maxFileBytes) throw new SearchError(\"context buffer byte limit exceeded\");\n }\n }\n if (binaryOutput && state.binaryOffset !== null && totals.matched_lines > 0 && !binaryPrinted) {\n await printer.binary(target.label, state.binaryOffset, filename);\n }\n const matched = totals.matched_lines > 0;\n const found = args.mode === \"without\" ? !matched && !state.skipped : matched;\n totals.searches_with_match = matched ? 1 : 0;\n totals.bytes_searched = state.bytesSearched;\n if (!args.quiet) {\n if ((args.mode === \"with\" || args.mode === \"without\") && found) await printer.filename(target.label);\n if ((args.mode === \"count\" || args.mode === \"matches\") && (matched || args.includeZero) && !state.skipped) {\n const amount = !args.invert && (args.mode === \"matches\" || args.onlyMatching) ? totals.matches : totals.matched_lines;\n await printer.count(target.label, amount, filename);\n }\n if (begun && args.mode === \"json\") {\n totals.bytes_printed = limits.outputBytes - fileOutputStart;\n await printer.event(\"end\", { path: data(Buffer.from(target.label)), binary_offset: state.binaryOffset, stats: totals });\n }\n }\n return { found, stats: totals };\n}\n\nexport function createRgCommand(executor: RegexExecutor, options: SearchOptions = {}): CommandDefinition {\n return {\n name: \"rg\",\n filesystemRequirements: searchRequirements,\n description: \"Search virtual files or stdin with recursive filtering and structured results\",\n async execute(context) {\n return withRegexSession(context, executor, async session => {\n let args: Arguments | undefined;\n let failed = false;\n let found = false;\n try {\n const limits = new Limits(context, options);\n args = parse(context.args);\n if (args.mode !== \"files\" && args.patternFiles.includes(\"-\") && args.paths.includes(\"-\")) {\n throw new SearchError(\"cannot search stdin while also reading patterns from stdin\");\n }\n const selection = selectInput(context, args, options);\n const report = async (error: unknown) => {\n context.signal.throwIfAborted(); failed = true;\n if (args!.messages) await diagnostic(context, error);\n };\n const walker = new Walker(context, args, limits, report, session);\n await walker.validate();\n const matcher = new Matcher(args.mode === \"files\" ? [] : await patterns(context, args), args, session);\n if (args.mode !== \"files\") await matcher.batch([]);\n if (args.mode !== \"files\" && args.maxCount === 0) return { exitCode: 1 };\n const printer = new Printer(args, limits);\n const totals = stats();\n const targets = async function* () {\n for (const path of selection.paths) {\n if (path !== \"-\") await assertPathRequirements(context, searchRequirements, [\"metadata\"], [path]);\n yield* walker.targets([path], selection.implicit);\n }\n };\n for await (const target of targets()) {\n if (args.mode === \"files\") { found = true; if (!args.quiet) await printer.filename(target.label); else break; continue; }\n try {\n const result = await searchFile(context, args, limits, matcher, printer, target, context.stdin, args.filename ?? (target.recursive || selection.paths.length > 1));\n found ||= result.found;\n for (const field of [\"searches\", \"searches_with_match\", \"bytes_searched\", \"bytes_printed\", \"matched_lines\", \"matches\"] as const) totals[field] += result.stats[field];\n if (args.quiet && found && args.mode !== \"json\") break;\n } catch (error) { if (error instanceof SearchError || error instanceof RegexExecutionError) throw error; await report(error); }\n }\n if (args.mode === \"json\") await printer.event(\"summary\", { elapsed_total: elapsed, stats: totals });\n return { exitCode: args.quiet && found ? 0 : failed ? 2 : found ? 0 : 1 };\n } catch (error) {\n context.signal.throwIfAborted();\n if (error instanceof OutputClosed) return { exitCode: 0 };\n if (args?.messages !== false) await diagnostic(context, error);\n return { exitCode: 2 };\n }\n });\n },\n };\n}\n", "import { RegexExecutionError, type RegexSession } from \"../regex-execution/portable.js\";\nimport type { Match, Row, SearchDescriptor } from \"../regex-execution/protocol.js\";\nimport { SearchError, type Arguments } from \"./options.js\";\n\nexport type { Match } from \"../regex-execution/protocol.js\";\n\nexport class Matcher {\n private readonly descriptor: SearchDescriptor;\n constructor(patterns: readonly string[], args: Arguments, private readonly session: RegexSession) {\n this.descriptor = { kind: \"rg\", patterns: [...patterns], fixed: args.fixed, case: args.case, whole: args.whole, word: args.word, nullData: args.nullData };\n }\n async batch(rows: readonly Row[]): Promise<Match[][]> {\n try { return await this.session.run(this.descriptor, rows); }\n catch (error) {\n if (error instanceof RegexExecutionError && error.code === \"MATCH\") throw new SearchError(error.message);\n throw error;\n }\n }\n async matches(bytes: Uint8Array, all = true, terminated = true): Promise<Match[]> {\n return (await this.batch([{ bytes, all, terminated }]))[0]!;\n }\n}\n", "import { PublicDiagnostic } from \"../../diagnostics.js\";\nimport type { RegexExecutionOptions } from \"../regex-execution/protocol.js\";\nimport { defaultFileTypes } from \"./file-types.js\";\n\nexport interface SearchOptions {\n readonly replace?: boolean;\n readonly defaultInput?: \"auto\" | \"stdin\" | \"cwd\";\n readonly maxOutputBytes?: number;\n readonly maxLineBytes?: number;\n readonly maxFileBytes?: number;\n readonly maxFiles?: number;\n readonly regex?: RegexExecutionOptions;\n}\n\nexport class SearchError extends PublicDiagnostic {}\n\nexport interface Arguments {\n patterns: string[];\n patternFiles: string[];\n paths: string[];\n explicitPatterns: boolean;\n mode: \"lines\" | \"files\" | \"with\" | \"without\" | \"count\" | \"matches\" | \"json\";\n case: \"sensitive\" | \"insensitive\" | \"smart\";\n fixed: boolean;\n invert: boolean;\n word: boolean;\n whole: boolean;\n lineNumber: boolean;\n column: boolean;\n byteOffset: boolean;\n filename?: boolean;\n onlyMatching: boolean;\n quiet: boolean;\n hidden: boolean;\n follow: boolean;\n ignore: boolean;\n ignoreVcs: boolean;\n ignoreDot: boolean;\n ignoreParent: boolean;\n requireGit: boolean;\n binary: \"auto\" | \"binary\" | \"text\";\n nullPath: boolean;\n nullData: boolean;\n crlf: boolean;\n includeZero: boolean;\n messages: boolean;\n heading: boolean;\n before: number;\n after: number;\n separator: string | undefined;\n maxCount: number;\n maxDepth: number;\n globs: { source: string; insensitive: boolean }[];\n types: { name: string; include: boolean }[];\n}\n\nexport function count(value: string, flag: string): number {\n if (!/^[0-9]+$/u.test(value) || !Number.isSafeInteger(Number(value))) throw new SearchError(`${flag} requires a nonnegative integer`);\n return Number(value);\n}\n\nexport function parse(args: readonly string[]): Arguments {\n const result: Arguments = {\n patterns: [], patternFiles: [], paths: [], explicitPatterns: false, mode: \"lines\", case: \"sensitive\",\n fixed: false, invert: false, word: false, whole: false, lineNumber: false, column: false, byteOffset: false,\n onlyMatching: false, quiet: false, hidden: false, follow: false, ignore: true, ignoreVcs: true,\n ignoreDot: true, ignoreParent: true, requireGit: true, binary: \"auto\", nullPath: false, nullData: false,\n crlf: false, includeZero: false, messages: true, heading: false, before: 0, after: 0, separator: \"--\",\n maxCount: Infinity, maxDepth: 128, globs: [], types: [],\n };\n const operands: string[] = [];\n let unrestricted = 0;\n let explicitLineNumber = false;\n let ended = false;\n for (let index = 0; index < args.length; index++) {\n const argument = args[index]!;\n if (ended || argument === \"-\" || !argument.startsWith(\"-\")) { operands.push(argument); continue; }\n if (argument === \"--\") { ended = true; continue; }\n const long = argument.startsWith(\"--\");\n const equals = argument.indexOf(\"=\");\n const flags = long ? [equals < 0 ? argument.slice(2) : argument.slice(2, equals)] : [...argument.slice(1)];\n let inline = long && equals >= 0 ? argument.slice(equals + 1) : undefined;\n for (let position = 0; position < flags.length; position++) {\n const flag = flags[position]!;\n let tookValue = false;\n const value = () => {\n tookValue = true;\n if (inline !== undefined) { const output = inline; inline = undefined; return output; }\n if (!long && position + 1 < flags.length) { const output = flags.slice(position + 1).join(\"\"); position = flags.length; return output; }\n const output = args[++index];\n if (output === undefined) throw new SearchError(`${long ? \"--\" : \"-\"}${flag} requires a value`);\n return output;\n };\n switch (flag) {\n case \"e\": case \"regexp\": result.explicitPatterns = true; result.patterns.push(value()); break;\n case \"f\": case \"file\": result.explicitPatterns = true; result.patternFiles.push(value()); break;\n case \"g\": case \"glob\": result.globs.push({ source: value(), insensitive: false }); break;\n case \"iglob\": result.globs.push({ source: value(), insensitive: true }); break;\n case \"t\": case \"type\": case \"T\": case \"type-not\": {\n const name = value();\n if (result.types.length >= 1024) throw new SearchError(\"file type selection limit exceeded\");\n if (name !== \"all\" && !Object.hasOwn(defaultFileTypes, name)) throw new SearchError(`unrecognized file type: ${name}`);\n result.types.push({ name, include: flag === \"t\" || flag === \"type\" });\n break;\n }\n case \"n\": case \"line-number\": result.lineNumber = true; explicitLineNumber = true; break;\n case \"N\": case \"no-line-number\": result.lineNumber = false; explicitLineNumber = true; break;\n case \"H\": case \"with-filename\": result.filename = true; break;\n case \"I\": case \"no-filename\": result.filename = false; break;\n case \"i\": case \"ignore-case\": result.case = \"insensitive\"; break;\n case \"s\": case \"case-sensitive\": result.case = \"sensitive\"; break;\n case \"S\": case \"smart-case\": result.case = \"smart\"; break;\n case \"F\": case \"fixed-strings\": result.fixed = true; break;\n case \"no-fixed-strings\": result.fixed = false; break;\n case \"v\": case \"invert-match\": result.invert = true; break;\n case \"no-invert-match\": result.invert = false; break;\n case \"w\": case \"word-regexp\": result.word = true; result.whole = false; break;\n case \"x\": case \"line-regexp\": result.whole = true; result.word = false; break;\n case \"l\": case \"files-with-matches\": result.mode = \"with\"; break;\n case \"files-without-match\": result.mode = \"without\"; break;\n case \"files\": result.mode = \"files\"; break;\n case \"c\": case \"count\": result.mode = \"count\"; break;\n case \"count-matches\": result.mode = \"matches\"; break;\n case \"json\": result.mode = \"json\"; break;\n case \"o\": case \"only-matching\": result.onlyMatching = true; break;\n case \"no-only-matching\": result.onlyMatching = false; break;\n case \"q\": case \"quiet\": result.quiet = true; break;\n case \"L\": case \"follow\": result.follow = true; break;\n case \"no-follow\": result.follow = false; break;\n case \".\": case \"hidden\": result.hidden = true; break;\n case \"no-hidden\": result.hidden = false; break;\n case \"no-ignore\": result.ignore = false; break;\n case \"ignore\": result.ignore = true; break;\n case \"no-ignore-vcs\": result.ignoreVcs = false; break;\n case \"no-ignore-dot\": result.ignoreDot = false; break;\n case \"no-ignore-parent\": result.ignoreParent = false; break;\n case \"no-require-git\": result.requireGit = false; break;\n case \"no-ignore-global\": case \"no-config\": break;\n case \"a\": case \"text\": result.binary = \"text\"; break;\n case \"binary\": result.binary = \"binary\"; break;\n case \"no-binary\": case \"no-text\": result.binary = \"auto\"; break;\n case \"u\": case \"unrestricted\":\n unrestricted++; result.ignore = false;\n if (unrestricted >= 2) result.hidden = true;\n if (unrestricted >= 3) result.binary = \"binary\";\n break;\n case \"0\": case \"null\": result.nullPath = true; break;\n case \"no-null\": result.nullPath = false; break;\n case \"null-data\": result.nullData = true; break;\n case \"crlf\": result.crlf = true; break;\n case \"include-zero\": result.includeZero = true; break;\n case \"no-include-zero\": result.includeZero = false; break;\n case \"no-messages\": result.messages = false; break;\n case \"messages\": result.messages = true; break;\n case \"heading\": result.heading = true; break;\n case \"no-heading\": result.heading = false; break;\n case \"column\": result.column = true; break;\n case \"no-column\": result.column = false; break;\n case \"b\": case \"byte-offset\": result.byteOffset = true; break;\n case \"A\": case \"after-context\": result.after = count(value(), flag); break;\n case \"B\": case \"before-context\": result.before = count(value(), flag); break;\n case \"C\": case \"context\": result.before = result.after = count(value(), flag); break;\n case \"context-separator\": result.separator = value(); break;\n case \"no-context-separator\": result.separator = undefined; break;\n case \"m\": case \"max-count\": result.maxCount = count(value(), flag); break;\n case \"max-depth\": result.maxDepth = count(value(), flag); if (result.maxDepth > 128) throw new SearchError(\"maximum supported directory depth is 128\"); break;\n case \"sort\": if (value() !== \"path\") throw new SearchError(\"only --sort=path is supported\"); break;\n case \"color\": if (value() !== \"never\") throw new SearchError(\"only --color=never is supported\"); break;\n default: throw new SearchError(`unsupported option '${long ? \"--\" : \"-\"}${flag}'`);\n }\n if (long && equals >= 0 && !tookValue) throw new SearchError(`--${flag} does not take a value`);\n }\n }\n if (result.before > 100000 || result.after > 100000) throw new SearchError(\"context limit exceeded\");\n if (result.mode !== \"files\" && !result.explicitPatterns) {\n const pattern = operands.shift();\n if (pattern === undefined) throw new SearchError(\"a search pattern is required\");\n result.patterns.push(pattern);\n }\n if (!explicitLineNumber) result.lineNumber = result.column;\n result.paths = operands;\n return result;\n}\n", "export const defaultFileTypes: Readonly<Record<string, readonly string[]>> = Object.freeze({\n \"ada\": [\"*.adb\",\"*.ads\"],\n \"agda\": [\"*.agda\",\"*.lagda\"],\n \"aidl\": [\"*.aidl\"],\n \"alire\": [\"alire.toml\"],\n \"amake\": [\"*.bp\",\"*.mk\"],\n \"asciidoc\": [\"*.adoc\",\"*.asc\",\"*.asciidoc\"],\n \"asm\": [\"*.S\",\"*.asm\",\"*.s\"],\n \"asp\": [\"*.ascx\",\"*.ascx.cs\",\"*.ascx.vb\",\"*.asp\",\"*.aspx\",\"*.aspx.cs\",\"*.aspx.vb\"],\n \"ats\": [\"*.ats\",\"*.dats\",\"*.hats\",\"*.sats\"],\n \"avro\": [\"*.avdl\",\"*.avpr\",\"*.avsc\"],\n \"awk\": [\"*.awk\"],\n \"bat\": [\"*.bat\"],\n \"batch\": [\"*.bat\"],\n \"bazel\": [\"*.BUILD\",\"*.bazel\",\"*.bazelrc\",\"*.bzl\",\"BUILD\",\"MODULE.bazel\",\"WORKSPACE\",\"WORKSPACE.bazel\",\"WORKSPACE.bzlmod\"],\n \"bitbake\": [\"*.bb\",\"*.bbappend\",\"*.bbclass\",\"*.conf\",\"*.inc\"],\n \"boxlang\": [\"*.bx\",\"*.bxm\",\"*.bxs\"],\n \"brotli\": [\"*.br\"],\n \"buildstream\": [\"*.bst\"],\n \"bzip2\": [\"*.bz2\",\"*.tbz2\"],\n \"c\": [\"*.[chH]\",\"*.[chH].in\",\"*.cats\"],\n \"cabal\": [\"*.cabal\"],\n \"candid\": [\"*.did\"],\n \"carp\": [\"*.carp\"],\n \"cbor\": [\"*.cbor\"],\n \"ceylon\": [\"*.ceylon\"],\n \"cfml\": [\"*.cfc\",\"*.cfm\"],\n \"clojure\": [\"*.clj\",\"*.cljc\",\"*.cljs\",\"*.cljx\"],\n \"cmake\": [\"*.cmake\",\"CMakeLists.txt\"],\n \"cmd\": [\"*.bat\",\"*.cmd\"],\n \"cml\": [\"*.cml\"],\n \"coffeescript\": [\"*.coffee\"],\n \"config\": [\"*.cfg\",\"*.conf\",\"*.config\",\"*.ini\"],\n \"container\": [\"*Containerfile*\",\"*Dockerfile*\"],\n \"coq\": [\"*.v\"],\n \"cpp\": [\"*.[ChH]\",\"*.[ChH].in\",\"*.[ch]pp\",\"*.[ch]pp.in\",\"*.[ch]xx\",\"*.[ch]xx.in\",\"*.cc\",\"*.cc.in\",\"*.hh\",\"*.hh.in\",\"*.inl\"],\n \"creole\": [\"*.creole\"],\n \"crystal\": [\"*.cr\",\"*.ecr\",\"Projectfile\",\"shard.yml\"],\n \"cs\": [\"*.cs\"],\n \"csharp\": [\"*.cs\"],\n \"cshtml\": [\"*.cshtml\"],\n \"csproj\": [\"*.csproj\"],\n \"css\": [\"*.css\",\"*.scss\"],\n \"csv\": [\"*.csv\"],\n \"cuda\": [\"*.cu\",\"*.cuh\"],\n \"cython\": [\"*.pxd\",\"*.pxi\",\"*.pyx\"],\n \"d\": [\"*.d\"],\n \"dart\": [\"*.dart\"],\n \"devicetree\": [\"*.dts\",\"*.dtsi\",\"*.dtso\"],\n \"dhall\": [\"*.dhall\"],\n \"diff\": [\"*.diff\",\"*.patch\"],\n \"dita\": [\"*.dita\",\"*.ditamap\",\"*.ditaval\"],\n \"docker\": [\"*Dockerfile*\"],\n \"dockercompose\": [\"docker-compose.*.yml\",\"docker-compose.yml\"],\n \"dts\": [\"*.dts\",\"*.dtsi\"],\n \"dvc\": [\"*.dvc\",\"Dvcfile\"],\n \"ebuild\": [\"*.ebuild\",\"*.eclass\"],\n \"edn\": [\"*.edn\"],\n \"elisp\": [\"*.el\"],\n \"elixir\": [\"*.eex\",\"*.ex\",\"*.exs\",\"*.heex\",\"*.leex\",\"*.livemd\"],\n \"elm\": [\"*.elm\"],\n \"erb\": [\"*.erb\"],\n \"erlang\": [\"*.erl\",\"*.hrl\"],\n \"fennel\": [\"*.fnl\"],\n \"fidl\": [\"*.fidl\"],\n \"fish\": [\"*.fish\"],\n \"flatbuffers\": [\"*.fbs\"],\n \"fortran\": [\"*.F\",\"*.F77\",\"*.F90\",\"*.F95\",\"*.f\",\"*.f77\",\"*.f90\",\"*.f95\",\"*.pfo\"],\n \"fsharp\": [\"*.fs\",\"*.fsi\",\"*.fsx\"],\n \"fut\": [\"*.fut\"],\n \"gap\": [\"*.g\",\"*.gap\",\"*.gd\",\"*.gi\",\"*.tst\"],\n \"gdscript\": [\"*.gd\"],\n \"gleam\": [\"*.gleam\"],\n \"gn\": [\"*.gn\",\"*.gni\"],\n \"go\": [\"*.go\"],\n \"gprbuild\": [\"*.gpr\"],\n \"gradle\": [\"*.gradle\",\"*.gradle.kts\",\"gradle-wrapper.*\",\"gradle.properties\",\"gradlew\",\"gradlew.bat\"],\n \"graphql\": [\"*.graphql\",\"*.graphqls\"],\n \"groovy\": [\"*.gradle\",\"*.groovy\"],\n \"gzip\": [\"*.gz\",\"*.tgz\"],\n \"h\": [\"*.h\",\"*.hh\",\"*.hpp\"],\n \"haml\": [\"*.haml\"],\n \"hare\": [\"*.ha\"],\n \"haskell\": [\"*.c2hs\",\"*.cpphs\",\"*.hs\",\"*.hsc\",\"*.lhs\"],\n \"hbs\": [\"*.hbs\"],\n \"hs\": [\"*.hs\",\"*.lhs\"],\n \"html\": [\"*.ejs\",\"*.htm\",\"*.html\"],\n \"hurl\": [\"*.hurl\"],\n \"hy\": [\"*.hy\"],\n \"idris\": [\"*.idr\",\"*.lidr\"],\n \"janet\": [\"*.janet\"],\n \"java\": [\"*.java\",\"*.jsp\",\"*.jspx\",\"*.properties\"],\n \"jinja\": [\"*.j2\",\"*.jinja\",\"*.jinja2\"],\n \"jl\": [\"*.jl\"],\n \"js\": [\"*.cjs\",\"*.js\",\"*.jsx\",\"*.mjs\",\"*.vue\"],\n \"json\": [\"*.json\",\"*.sarif\",\"composer.lock\"],\n \"jsonl\": [\"*.jsonl\"],\n \"julia\": [\"*.jl\"],\n \"jupyter\": [\"*.ipynb\",\"*.jpynb\"],\n \"k\": [\"*.k\"],\n \"kconfig\": [\"Kconfig\",\"Kconfig.*\"],\n \"kotlin\": [\"*.kt\",\"*.kts\"],\n \"lean\": [\"*.lean\"],\n \"less\": [\"*.less\"],\n \"license\": [\"*[.-]LICEN[CS]E*\",\"AGPL-*[0-9]*\",\"APACHE-*[0-9]*\",\"BSD-*[0-9]*\",\"CC-BY-*\",\"COPYING\",\"COPYING[.-]*\",\"COPYRIGHT\",\"COPYRIGHT[.-]*\",\"EULA\",\"EULA[.-]*\",\"GFDL-*[0-9]*\",\"GNU-*[0-9]*\",\"GPL-*[0-9]*\",\"LGPL-*[0-9]*\",\"LICEN[CS]E\",\"LICEN[CS]E[.-]*\",\"MIT-*[0-9]*\",\"MPL-*[0-9]*\",\"NOTICE\",\"NOTICE[.-]*\",\"OFL-*[0-9]*\",\"PATENTS\",\"PATENTS[.-]*\",\"UNLICEN[CS]E\",\"UNLICEN[CS]E[.-]*\",\"agpl[.-]*\",\"gpl[.-]*\",\"lgpl[.-]*\",\"licen[cs]e\",\"licen[cs]e.*\"],\n \"lilypond\": [\"*.ily\",\"*.ly\"],\n \"lisp\": [\"*.el\",\"*.jl\",\"*.lisp\",\"*.lsp\",\"*.sc\",\"*.scm\"],\n \"llvm\": [\"*.ll\"],\n \"lock\": [\"*.lock\",\"package-lock.json\"],\n \"log\": [\"*.log\"],\n \"lua\": [\"*.lua\"],\n \"lz4\": [\"*.lz4\"],\n \"lzma\": [\"*.lzma\"],\n \"m4\": [\"*.ac\",\"*.m4\"],\n \"make\": [\"*.mak\",\"*.mk\",\"Makefile.*\",\"[Gg][Nn][Uu]makefile\",\"[Gg][Nn][Uu]makefile.am\",\"[Gg][Nn][Uu]makefile.in\",\"[Mm]akefile\",\"[Mm]akefile.am\",\"[Mm]akefile.in\"],\n \"mako\": [\"*.mako\",\"*.mao\"],\n \"man\": [\"*.[0-9][cEFMmpSx]\",\"*.[0-9lnpx]\"],\n \"markdown\": [\"*.markdown\",\"*.md\",\"*.mdown\",\"*.mdwn\",\"*.mdx\",\"*.mkd\",\"*.mkdn\"],\n \"matlab\": [\"*.m\"],\n \"md\": [\"*.markdown\",\"*.md\",\"*.mdown\",\"*.mdwn\",\"*.mdx\",\"*.mkd\",\"*.mkdn\"],\n \"meson\": [\"meson.build\",\"meson.options\",\"meson_options.txt\"],\n \"minified\": [\"*.min.css\",\"*.min.html\",\"*.min.js\"],\n \"mint\": [\"*.mint\"],\n \"mk\": [\"mkfile\"],\n \"ml\": [\"*.ml\"],\n \"mojo\": [\"*.mojo\"],\n \"motoko\": [\"*.mo\"],\n \"msbuild\": [\"*.csproj\",\"*.fsproj\",\"*.proj\",\"*.props\",\"*.sln\",\"*.slnf\",\"*.targets\",\"*.vcxproj\"],\n \"nim\": [\"*.nim\",\"*.nimble\",\"*.nimf\",\"*.nims\"],\n \"nix\": [\"*.nix\"],\n \"objc\": [\"*.h\",\"*.m\"],\n \"objcpp\": [\"*.h\",\"*.mm\"],\n \"ocaml\": [\"*.ml\",\"*.mli\",\"*.mll\",\"*.mly\"],\n \"org\": [\"*.org\",\"*.org_archive\"],\n \"pants\": [\"BUILD\"],\n \"pascal\": [\"*.dpr\",\"*.inc\",\"*.lpr\",\"*.pas\",\"*.pp\"],\n \"pdf\": [\"*.pdf\"],\n \"perl\": [\"*.PL\",\"*.perl\",\"*.pl\",\"*.plh\",\"*.plx\",\"*.pm\",\"*.t\"],\n \"php\": [\"*.php\",\"*.php3\",\"*.php4\",\"*.php5\",\"*.php7\",\"*.php8\",\"*.pht\",\"*.phtml\"],\n \"pkgbuild\": [\"PKGBUILD\"],\n \"po\": [\"*.po\"],\n \"pod\": [\"*.pod\"],\n \"postscript\": [\"*.eps\",\"*.ps\"],\n \"prolog\": [\"*.P\",\"*.pl\",\"*.pro\",\"*.prolog\"],\n \"proto\": [\"*.proto\"],\n \"protobuf\": [\"*.proto\"],\n \"ps\": [\"*.cdxml\",\"*.ps1\",\"*.ps1xml\",\"*.psd1\",\"*.psm1\"],\n \"puppet\": [\"*.epp\",\"*.erb\",\"*.pp\",\"*.rb\"],\n \"purs\": [\"*.purs\"],\n \"py\": [\"*.py\",\"*.pyi\"],\n \"python\": [\"*.py\",\"*.pyi\"],\n \"qmake\": [\"*.prf\",\"*.pri\",\"*.pro\"],\n \"qml\": [\"*.qml\"],\n \"qrc\": [\"*.qrc\"],\n \"qui\": [\"*.ui\"],\n \"r\": [\"*.R\",\"*.Rmd\",\"*.Rnw\",\"*.r\",\"*.rmd\",\"*.rnw\"],\n \"racket\": [\"*.rkt\"],\n \"raku\": [\"*.p6\",\"*.pl6\",\"*.pm6\",\"*.raku\",\"*.rakudoc\",\"*.rakumod\",\"*.rakutest\"],\n \"rdoc\": [\"*.rdoc\"],\n \"readme\": [\"*README\",\"README*\"],\n \"reasonml\": [\"*.re\",\"*.rei\"],\n \"red\": [\"*.r\",\"*.red\",\"*.reds\"],\n \"rescript\": [\"*.res\",\"*.resi\"],\n \"robot\": [\"*.robot\"],\n \"rocq\": [\"*.v\"],\n \"rst\": [\"*.rst\"],\n \"ruby\": [\"*.gemspec\",\"*.rake\",\"*.rb\",\"*.rbw\",\".irbrc\",\"Gemfile\",\"Rakefile\",\"config.ru\"],\n \"rust\": [\"*.rs\"],\n \"sass\": [\"*.sass\",\"*.scss\"],\n \"scala\": [\"*.sbt\",\"*.scala\"],\n \"scdoc\": [\"*.scd\",\"*.scdoc\"],\n \"seed7\": [\"*.s7i\",\"*.sd7\"],\n \"sh\": [\"*.bash\",\"*.bashrc\",\"*.csh\",\"*.cshrc\",\"*.env\",\"*.ksh\",\"*.kshrc\",\"*.sh\",\"*.tcsh\",\"*.zsh\",\".bash_login\",\".bash_logout\",\".bash_profile\",\".bashrc\",\".cshrc\",\".env\",\".kshrc\",\".login\",\".logout\",\".profile\",\".tcshrc\",\".zlogin\",\".zlogout\",\".zprofile\",\".zshenv\",\".zshrc\",\"bash_login\",\"bash_logout\",\"bash_profile\",\"bashrc\",\"profile\",\"zlogin\",\"zlogout\",\"zprofile\",\"zshenv\",\"zshrc\"],\n \"slim\": [\"*.skim\",\"*.slim\",\"*.slime\"],\n \"smarty\": [\"*.tpl\"],\n \"sml\": [\"*.sig\",\"*.sml\"],\n \"solidity\": [\"*.sol\"],\n \"soy\": [\"*.soy\"],\n \"spark\": [\"*.spark\"],\n \"spec\": [\"*.spec\"],\n \"sql\": [\"*.psql\",\"*.sql\"],\n \"ssa\": [\"*.ssa\"],\n \"stylus\": [\"*.styl\"],\n \"sv\": [\"*.h\",\"*.sv\",\"*.svh\",\"*.v\",\"*.vg\"],\n \"svelte\": [\"*.svelte\",\"*.svelte.ts\"],\n \"svg\": [\"*.svg\"],\n \"swift\": [\"*.swift\"],\n \"swig\": [\"*.def\",\"*.i\"],\n \"systemd\": [\"*.automount\",\"*.conf\",\"*.device\",\"*.link\",\"*.mount\",\"*.path\",\"*.scope\",\"*.service\",\"*.slice\",\"*.socket\",\"*.swap\",\"*.target\",\"*.timer\"],\n \"taskpaper\": [\"*.taskpaper\"],\n \"tcl\": [\"*.tcl\"],\n \"tex\": [\"*.bib\",\"*.cls\",\"*.dtx\",\"*.ins\",\"*.ltx\",\"*.sty\",\"*.tex\"],\n \"texinfo\": [\"*.texi\"],\n \"textile\": [\"*.textile\"],\n \"tf\": [\"*.terraform.lock.hcl\",\"*.terraformrc\",\"*.tf\",\"*.tf.json\",\"*.tfrc\",\"*.tfvars\",\"*.tfvars.json\",\"terraform.rc\"],\n \"thrift\": [\"*.thrift\"],\n \"toml\": [\"*.toml\",\"Cargo.lock\"],\n \"ts\": [\"*.cts\",\"*.mts\",\"*.ts\",\"*.tsx\"],\n \"twig\": [\"*.twig\"],\n \"txt\": [\"*.txt\"],\n \"typescript\": [\"*.cts\",\"*.mts\",\"*.ts\",\"*.tsx\"],\n \"typoscript\": [\"*.ts\",\"*.typoscript\"],\n \"typst\": [\"*.typ\"],\n \"usd\": [\"*.usd\",\"*.usda\",\"*.usdc\"],\n \"v\": [\"*.v\",\"*.vsh\"],\n \"vala\": [\"*.vala\"],\n \"vb\": [\"*.vb\"],\n \"vcl\": [\"*.vcl\"],\n \"verilog\": [\"*.sv\",\"*.svh\",\"*.v\",\"*.vh\"],\n \"vhdl\": [\"*.vhd\",\"*.vhdl\"],\n \"vim\": [\"*.vim\",\".gvimrc\",\".vimrc\",\"_gvimrc\",\"_vimrc\",\"gvimrc\",\"vimrc\"],\n \"vimscript\": [\"*.vim\",\".gvimrc\",\".vimrc\",\"_gvimrc\",\"_vimrc\",\"gvimrc\",\"vimrc\"],\n \"vue\": [\"*.vue\"],\n \"webidl\": [\"*.idl\",\"*.webidl\",\"*.widl\"],\n \"wgsl\": [\"*.wgsl\"],\n \"wiki\": [\"*.mediawiki\",\"*.wiki\"],\n \"xml\": [\"*.dtd\",\"*.rng\",\"*.sch\",\"*.xhtml\",\"*.xjb\",\"*.xml\",\"*.xml.dist\",\"*.xsd\",\"*.xsl\",\"*.xslt\"],\n \"xz\": [\"*.txz\",\"*.xz\"],\n \"yacc\": [\"*.y\"],\n \"yaml\": [\"*.yaml\",\"*.yml\"],\n \"yang\": [\"*.yang\"],\n \"z\": [\"*.Z\"],\n \"zig\": [\"*.zig\"],\n \"zsh\": [\"*.zsh\",\".zlogin\",\".zlogout\",\".zprofile\",\".zshenv\",\".zshrc\",\"zlogin\",\"zlogout\",\"zprofile\",\"zshenv\",\"zshrc\"],\n \"zstd\": [\"*.zst\",\"*.zstd\"],\n});\n\nfor (const patterns of Object.values(defaultFileTypes)) Object.freeze(patterns);\n\n", "import type { Match } from \"./matcher.js\";\nimport type { Arguments } from \"./options.js\";\nimport { Limits, type Line } from \"./shared.js\";\n\nexport const elapsed = Object.freeze({ secs: 0, nanos: 0, human: \"0.000000s\" });\nexport interface Stats { elapsed: typeof elapsed; searches: number; searches_with_match: number; bytes_searched: number; bytes_printed: number; matched_lines: number; matches: number }\nexport const stats = (): Stats => ({ elapsed, searches: 0, searches_with_match: 0, bytes_searched: 0, bytes_printed: 0, matched_lines: 0, matches: 0 });\nexport function data(bytes: Uint8Array): { text: string } | { bytes: string } {\n try { return { text: new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(bytes) }; }\n catch { return { bytes: Buffer.from(bytes).toString(\"base64\") }; }\n}\n\nexport class Printer {\n private lastFile: string | undefined;\n private lastLine = 0;\n private headings = new Set<string>();\n constructor(readonly args: Arguments, readonly limits: Limits) {}\n async event(type: string, value: unknown): Promise<void> {\n const ordered = (input: unknown): unknown => input && typeof input === \"object\" && !Array.isArray(input)\n ? Object.fromEntries(Object.entries(input).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([key, item]) => [key, ordered(item)])) : input;\n await this.limits.output(`${JSON.stringify(type === \"summary\" ? ordered({ type, data: value }) : { type, data: value })}\\n`);\n }\n async filename(label: string): Promise<void> { await this.limits.output(label + (this.args.nullPath ? \"\\0\" : \"\\n\")); }\n async count(label: string, amount: number, filename: boolean): Promise<void> {\n await this.limits.output(`${filename ? label + (this.args.nullPath ? \"\\0\" : \":\") : \"\"}${amount}\\n`);\n }\n async binary(label: string, offset: number, filename: boolean): Promise<void> {\n await this.limits.output(`${filename ? label + \": \" : \"\"}binary file matches (found \"\\\\0\" byte around offset ${offset})\\n`);\n }\n async record(label: string, line: Line, matches: readonly Match[], selected: boolean, filename: boolean): Promise<void> {\n if (this.args.mode === \"json\") {\n await this.event(selected ? \"match\" : \"context\", {\n path: data(Buffer.from(label)), lines: data(line.bytes), line_number: line.number, absolute_offset: line.offset,\n submatches: matches.map(match => ({ match: data(line.content.subarray(match.start, match.end)), start: match.start, end: match.end })),\n });\n return;\n }\n if (this.args.heading && filename && !this.headings.has(label)) {\n if (this.headings.size) await this.limits.output(\"\\n\");\n await this.limits.output(label + (this.args.nullPath ? \"\\0\" : \"\\n\"));\n this.headings.add(label);\n } else if ((this.args.before || this.args.after) && this.lastFile !== undefined && (this.lastFile !== label || line.number > this.lastLine + 1) && this.args.separator !== undefined) {\n await this.limits.output(this.args.separator + \"\\n\");\n }\n const pieces = this.args.onlyMatching && selected && !this.args.invert ? matches : [undefined];\n for (const match of pieces) {\n const separator = selected ? \":\" : \"-\";\n let prefix = filename && !this.args.heading ? label + (this.args.nullPath ? \"\\0\" : separator) : \"\";\n if (this.args.lineNumber) prefix += line.number + separator;\n if (this.args.column && matches.length) prefix += (match ?? matches[0])!.start + 1 + separator;\n if (this.args.byteOffset) prefix += (line.offset + (match?.start ?? 0)) + separator;\n const content = match ? line.content.subarray(match.start, match.end) : line.content;\n const terminator = this.args.nullData ? \"\\0\" : match && this.args.crlf ? \"\\r\\n\" : \"\\n\";\n await this.limits.output(Buffer.concat([Buffer.from(prefix), content, Buffer.from(terminator)]));\n }\n this.lastFile = label; this.lastLine = line.number;\n }\n}\n", "import { publicDiagnosticMessage } from \"../../diagnostics.js\";\nimport { writeDiagnostic } from \"../../escaping.js\";\nimport { yieldTurn } from \"../../contracts/yield.js\";\nimport { readBytes, writeBytes, type ByteSource, type CommandContext } from \"../../contracts/index.js\";\nimport { SearchError, type SearchOptions } from \"./options.js\";\nimport { assertPathRequirements, searchRequirements } from \"./requirements.js\";\n\nexport function pathFor(context: CommandContext, path: string): string {\n if (!path || path.includes(\"\\0\")) throw new SearchError(\"invalid empty or NUL-containing path\");\n return path.startsWith(\"/\") ? path : `${context.cwd.replace(/\\/$/u, \"\")}/${path}`;\n}\n\nexport class OutputClosed extends SearchError {}\n\nexport class Limits {\n readonly maxOutputBytes: number;\n readonly maxLineBytes: number;\n readonly maxFileBytes: number;\n readonly maxFiles: number;\n outputBytes = 0;\n files = 0;\n private ticks = 0;\n private readonly stopped = new AbortController();\n readonly signal: AbortSignal;\n constructor(readonly context: CommandContext, options: SearchOptions) {\n this.signal = AbortSignal.any([context.signal, this.stopped.signal]);\n this.maxOutputBytes = options.maxOutputBytes ?? 16 * 1024 * 1024;\n this.maxLineBytes = options.maxLineBytes ?? 1024 * 1024;\n this.maxFileBytes = options.maxFileBytes ?? 64 * 1024 * 1024;\n this.maxFiles = options.maxFiles ?? 100000;\n for (const limit of [this.maxOutputBytes, this.maxLineBytes, this.maxFileBytes, this.maxFiles]) {\n if (!Number.isSafeInteger(limit) || limit < 1) throw new SearchError(\"search limits must be positive safe integers\");\n }\n }\n async tick(): Promise<void> {\n this.context.signal.throwIfAborted();\n if (++this.ticks % 128 === 0) await yieldTurn(this.context.signal);\n }\n private async write(chunk: Uint8Array): Promise<void> {\n try { await writeBytes(this.context.stdout, chunk, this.signal); }\n catch (error) {\n this.context.signal.throwIfAborted();\n if ((error as { code?: string }).code === \"EPIPE\") {\n const closed = new OutputClosed(\"stdout closed\"); this.stopped.abort(closed); throw closed;\n }\n throw error;\n }\n }\n async output(value: string | Uint8Array): Promise<void> {\n const chunk = typeof value === \"string\" ? Buffer.from(value) : value;\n if (this.outputBytes + chunk.byteLength > this.maxOutputBytes) throw new SearchError(\"output byte limit exceeded\");\n await this.write(chunk);\n this.outputBytes += chunk.byteLength;\n }\n}\n\nexport async function* fileInput(context: CommandContext, path: string, limits: Limits): ByteSource {\n await assertPathRequirements(context, searchRequirements, [\"file\"], [path]);\n if (context.fs.readStream) yield* readBytes(context.fs.readStream(path, { signal: context.signal }), limits.signal);\n else yield await context.fs.readFile(path, { signal: context.signal, maxBytes: limits.maxFileBytes });\n}\n\nexport async function diagnostic(context: CommandContext, error: unknown): Promise<void> {\n await writeDiagnostic(context.stderr, `rg: ${publicDiagnosticMessage(error, context.onInternalError)}\\n`, context.signal);\n}\n\nexport interface Line { readonly bytes: Buffer; readonly content: Buffer; readonly number: number; readonly offset: number }\nexport interface ReadState { bytesRead: number; bytesSearched: number; binaryOffset: number | null; skipped: boolean }\n\nexport async function* lines(source: ByteSource, limits: Limits, state: ReadState, binary: \"skip\" | \"binary\" | \"text\", nullData: boolean): AsyncGenerator<Line> {\n let pending = Buffer.alloc(0);\n let offset = 0;\n let number = 0;\n const delimiter = nullData ? 0 : 10;\n for await (const data of readBytes(source, limits.signal)) {\n await limits.tick();\n const chunk = Buffer.from(data);\n if (state.bytesRead + chunk.length > limits.maxFileBytes) throw new SearchError(\"input file byte limit exceeded\");\n const nul = nullData || binary === \"text\" ? -1 : chunk.indexOf(0);\n if (nul >= 0 && state.binaryOffset === null) state.binaryOffset = state.bytesRead + nul;\n state.bytesRead += chunk.length;\n if (nul >= 0 && binary === \"skip\") { state.skipped = true; return; }\n let start = 0;\n for (let end = 0; end < chunk.length; end++) {\n if (chunk[end] !== delimiter && !(binary === \"binary\" && chunk[end] === 0)) continue;\n if (pending.length + end - start > limits.maxLineBytes) throw new SearchError(\"line byte limit exceeded\");\n const content = Buffer.concat([pending, chunk.subarray(start, end)]);\n const bytes = Buffer.concat([content, Buffer.from([delimiter])]);\n state.bytesSearched = offset + bytes.length;\n yield { content, bytes, number: ++number, offset };\n offset += bytes.length; pending = Buffer.alloc(0); start = end + 1;\n }\n if (pending.length + chunk.length - start > limits.maxLineBytes) throw new SearchError(\"line byte limit exceeded\");\n pending = Buffer.concat([pending, chunk.subarray(start)]);\n }\n if (pending.length) { state.bytesSearched = offset + pending.length; yield { bytes: pending, content: pending, number: ++number, offset }; }\n}\n", "import { dirname, isPathWithin, relativePath, resolvePath, type CommandContext, type FileStat } from \"../../contracts/index.js\";\nimport { RegexExecutionError, type RegexSession } from \"../regex-execution/portable.js\";\nimport { Glob, ignoreRules, matchGlobs, type IgnoreRule } from \"./glob.js\";\nimport { SearchError, type Arguments } from \"./options.js\";\nimport { Limits, pathFor } from \"./shared.js\";\nimport { assertPathRequirements, searchRequirements } from \"./requirements.js\";\nimport { defaultFileTypes } from \"./file-types.js\";\n\nexport interface FileTarget { readonly path: string; readonly label: string; readonly explicit: boolean; readonly recursive: boolean }\n\nexport class Walker {\n private readonly globs: { glob: Glob; include: boolean }[];\n private readonly hasPositive: boolean;\n private readonly typeGlobs: { glob: Glob; include: boolean }[] = [];\n private readonly hasPositiveType: boolean;\n private readonly cache = new Map<string, { rules: IgnoreRule[]; repository: boolean; root: boolean }>();\n constructor(private readonly context: CommandContext, private readonly args: Arguments, private readonly limits: Limits, private readonly report: (error: unknown) => Promise<void>, private readonly session: RegexSession) {\n if (args.globs.length > 1024) throw new SearchError(\"glob count limit exceeded\");\n this.globs = args.globs.map(({ source, insensitive }) => ({ glob: new Glob(source.startsWith(\"!\") ? source.slice(1) : source, insensitive), include: !source.startsWith(\"!\") }));\n this.hasPositive = this.globs.some(rule => rule.include);\n this.hasPositiveType = args.types.some(rule => rule.include);\n }\n async validate(): Promise<void> {\n await matchGlobs(this.globs.map(rule => rule.glob), [], this.session);\n const selected = new Map<string, boolean>();\n for (const selection of this.args.types) {\n const names = selection.name === \"all\" ? Object.keys(defaultFileTypes) : [selection.name];\n for (const name of names) {\n await this.limits.tick();\n for (const pattern of defaultFileTypes[name]!) {\n await this.limits.tick();\n selected.delete(pattern);\n selected.set(pattern, selection.include);\n }\n }\n }\n for (const [source, include] of selected) this.typeGlobs.push({ glob: new Glob(source), include });\n await matchGlobs(this.typeGlobs.map(rule => rule.glob), [], this.session);\n }\n private async exists(path: string): Promise<boolean> {\n try {\n await assertPathRequirements(this.context, searchRequirements, [\"metadata\"], [path]);\n await this.context.fs.lstat(path, { signal: this.context.signal }); return true;\n }\n catch (error) { this.context.signal.throwIfAborted(); if ((error as { code?: string }).code === \"ENOENT\") return false; throw error; }\n }\n private async load(directory: string, inherited: readonly IgnoreRule[], repository: boolean): Promise<{ rules: IgnoreRule[]; repository: boolean }> {\n const base = resolvePath(\"/\", directory);\n const key = `${base}:${repository}`;\n const cached = this.cache.get(key);\n if (cached) return { repository: cached.repository, rules: [...(cached.root ? inherited.filter(rule => rule.priority !== 1) : inherited), ...cached.rules] };\n const root = await this.exists(`${directory}/.git`);\n repository ||= root;\n if (root) inherited = inherited.filter(rule => rule.priority !== 1);\n const local: IgnoreRule[] = [];\n if (this.args.ignore) {\n const names: [string, number][] = [];\n if (this.args.ignoreVcs && (repository || !this.args.requireGit)) names.push([\".gitignore\", 1]);\n if (this.args.ignoreDot) names.push([\".ignore\", 2], [\".rgignore\", 3]);\n for (const [name, priority] of names) {\n await assertPathRequirements(this.context, searchRequirements, [\"ignore-file\"], [`${directory}/${name}`]);\n try {\n const data = await this.context.fs.readFile(`${directory}/${name}`, { signal: this.context.signal, maxBytes: 1024 * 1024 });\n local.push(...await ignoreRules(Buffer.from(data).toString(\"utf8\"), base, priority, this.session));\n } catch (error) {\n this.context.signal.throwIfAborted();\n if (error instanceof RegexExecutionError) throw error;\n if ((error as { code?: string }).code !== \"ENOENT\") await this.report(error);\n }\n }\n }\n this.cache.set(key, { repository, rules: local, root });\n if (inherited.length + local.length > 10000) throw new SearchError(\"ignore rule count limit exceeded\");\n return { repository, rules: [...inherited, ...local] };\n }\n private async accepted(path: string, name: string, directory: boolean, rules: readonly IgnoreRule[]): Promise<boolean> {\n let override: boolean | undefined;\n const relative = relativePath(this.context.cwd, path);\n const overrides = await matchGlobs(this.globs.map(rule => rule.glob), this.globs.map(() => ({ path: relative, directory, ancestors: false })), this.session);\n for (let index = 0; index < overrides.length; index++) if (overrides[index]) override = this.globs[index]!.include;\n if (override !== undefined) return override;\n if (this.hasPositive && !directory) return false;\n let include: boolean | undefined;\n let priority = -1;\n for (let offset = 0; offset < rules.length;) {\n const group: IgnoreRule[] = [];\n const groupPriority = rules[offset]!.priority;\n while (offset < rules.length && rules[offset]!.priority === groupPriority) {\n const rule = rules[offset++]!;\n if (rule.priority >= priority && isPathWithin(rule.base, path)) group.push(rule);\n }\n const matches = await matchGlobs(group.map(rule => rule.glob), group.map(rule => ({ path: relativePath(rule.base, path), directory, ancestors: false })), this.session);\n for (let index = 0; index < matches.length; index++) if (matches[index]) {\n priority = groupPriority; include = group[index]!.include;\n }\n }\n if (include === false) return false;\n if (!directory && this.typeGlobs.length) {\n const matches = await matchGlobs(this.typeGlobs.map(rule => rule.glob), this.typeGlobs.map(() => ({ path: name, directory: false, ancestors: false })), this.session);\n let selected: boolean | undefined;\n for (let index = 0; index < matches.length; index++) if (matches[index]) selected = this.typeGlobs[index]!.include;\n if (selected !== undefined) return selected;\n if (this.hasPositiveType) return false;\n }\n if (include !== undefined) return include;\n return this.args.hidden || !name.startsWith(\".\");\n }\n private async* directory(path: string, label: string, depth: number, ancestors: ReadonlyMap<string, string>, rules: readonly IgnoreRule[], repository: boolean): AsyncGenerator<FileTarget> {\n if (depth >= this.args.maxDepth) return;\n await assertPathRequirements(this.context, searchRequirements, [\"directory\"], [path]);\n const canonical = await this.context.fs.realpath(path, { signal: this.context.signal });\n if (ancestors.has(canonical)) { await this.report(new SearchError(`File system loop found: ${label} points to an ancestor ${ancestors.get(canonical)}`)); return; }\n const parents = new Map(ancestors); parents.set(canonical, label || \".\");\n const local = await this.load(path, rules, repository);\n const entries = (await this.context.fs.readdir(path, { signal: this.context.signal })).sort((left, right) => Buffer.compare(Buffer.from(left.name), Buffer.from(right.name)));\n for (const entry of entries) {\n await this.limits.tick();\n if (++this.limits.files > this.limits.maxFiles) throw new SearchError(\"filesystem entry limit exceeded\");\n const child = `${path.replace(/\\/$/u, \"\")}/${entry.name}`;\n const display = label ? `${label.replace(/\\/$/u, \"\")}/${entry.name}` : entry.name;\n try {\n if (entry.type === \"symlink\" && !this.args.follow) continue;\n if (entry.type === \"symlink\") await assertPathRequirements(this.context, searchRequirements, [\"metadata\"], [child]);\n const type = entry.type === \"symlink\" ? (await this.context.fs.stat(child, { signal: this.context.signal })).type : entry.type;\n if (entry.type === \"symlink\" && type === \"directory\") {\n await assertPathRequirements(this.context, searchRequirements, [\"canonical\"], [child]);\n const destination = await this.context.fs.realpath(child, { signal: this.context.signal });\n if (parents.has(destination)) {\n await this.report(new SearchError(`File system loop found: ${display} points to an ancestor ${parents.get(destination)}`));\n continue;\n }\n }\n if (!await this.accepted(child, entry.name, type === \"directory\", local.rules)) continue;\n if (type === \"directory\") yield* this.directory(child, display, depth + 1, parents, local.rules, local.repository);\n else if (type === \"file\") yield { path: child, label: display, explicit: false, recursive: true };\n } catch (error) { this.context.signal.throwIfAborted(); if (error instanceof SearchError || error instanceof RegexExecutionError) throw error; await this.report(error); }\n }\n }\n async* targets(paths: readonly string[], implicit = false): AsyncGenerator<FileTarget> {\n for (const operand of paths) {\n await this.limits.tick();\n if (++this.limits.files > this.limits.maxFiles) throw new SearchError(\"filesystem entry limit exceeded\");\n if (operand === \"-\") { yield { path: \"-\", label: \"<stdin>\", explicit: true, recursive: false }; continue; }\n const path = pathFor(this.context, operand);\n try {\n const stat: FileStat = await this.context.fs.stat(path, { signal: this.context.signal });\n if (stat.type !== \"directory\") { yield { path, label: operand, explicit: true, recursive: false }; continue; }\n let inherited: { rules: IgnoreRule[]; repository: boolean } = { rules: [], repository: false };\n const parents: string[] = [];\n let parent = dirname(resolvePath(\"/\", path));\n if (this.args.ignoreParent) {\n while (true) { parents.unshift(parent); if (parent === \"/\") break; parent = dirname(parent); }\n for (const directory of parents) inherited = await this.load(directory, inherited.rules, inherited.repository);\n } else {\n while (true) {\n inherited.repository ||= await this.exists(`${parent}/.git`);\n if (parent === \"/\") break;\n parent = dirname(parent);\n }\n }\n yield* this.directory(path, implicit ? \"\" : operand, 0, new Map(), inherited.rules, inherited.repository);\n } catch (error) { this.context.signal.throwIfAborted(); if (error instanceof SearchError || error instanceof RegexExecutionError) throw error; await this.report(error); }\n }\n }\n}\n", "import { RegexExecutionError, type RegexSession } from \"../regex-execution/portable.js\";\nimport type { GlobDescriptor, Row } from \"../regex-execution/protocol.js\";\nimport { SearchError } from \"./options.js\";\n\nexport class Glob {\n constructor(readonly source: string, readonly insensitive = false, readonly literalUnclosedClass = false) {}\n async matches(path: string, directory: boolean, session: RegexSession, ancestors = true): Promise<boolean> {\n return (await matchGlobs([this], [{ path, directory, ancestors }], session))[0]!;\n }\n}\n\nexport async function matchGlobs(globs: readonly Glob[], candidates: readonly { readonly path: string; readonly directory: boolean; readonly ancestors?: boolean }[], session: RegexSession): Promise<boolean[]> {\n if (candidates.length && candidates.length !== globs.length) throw new SearchError(\"invalid glob candidate count\");\n const results: boolean[] = [];\n for (let offset = 0; offset < globs.length;) {\n const batch: Glob[] = [];\n const rows: Row[] = [];\n let bytes = 128;\n while (offset < globs.length && batch.length < 128) {\n const glob = globs[offset]!;\n const candidate = candidates[offset];\n const size = 48 + glob.source.length * 2 + (candidate ? 32 + candidate.path.length * 2 : 0);\n if (batch.length && bytes + size > 64 * 1024) break;\n batch.push(glob);\n if (candidate) rows.push({ bytes: Buffer.from(candidate.path, \"utf16le\"), all: false, terminated: true, directory: candidate.directory, ancestors: candidate.ancestors ?? true });\n bytes += size;\n offset++;\n }\n const descriptor: GlobDescriptor = {\n kind: \"glob\", patterns: batch.map(glob => glob.source),\n globOptions: batch.map(glob => ({ insensitive: glob.insensitive, literalUnclosedClass: glob.literalUnclosedClass })),\n };\n try { results.push(...(await session.run(descriptor, rows)).map(result => result.length > 0)); }\n catch (error) {\n if (error instanceof RegexExecutionError && error.code === \"MATCH\") throw new SearchError(error.message);\n throw error;\n }\n }\n return results;\n}\n\nexport interface IgnoreRule { readonly base: string; readonly priority: number; readonly include: boolean; readonly glob: Glob }\n\nexport async function ignoreRules(contents: string, base: string, priority: number, session: RegexSession): Promise<IgnoreRule[]> {\n const rules: IgnoreRule[] = [];\n for (let source of contents.split(/\\r?\\n/u)) {\n if (!source || source.startsWith(\"#\")) continue;\n while (source.endsWith(\" \")) {\n let backslashes = 0;\n for (let offset = source.length - 2; offset >= 0 && source[offset] === \"\\\\\"; offset--) backslashes++;\n if (backslashes % 2) break;\n source = source.slice(0, -1);\n }\n if (!source) continue;\n const include = source.startsWith(\"!\");\n if (include) source = source.slice(1);\n if (source) rules.push({ base, priority, include, glob: new Glob(source, false, true) });\n if (rules.length > 10000) break;\n }\n await matchGlobs(rules.map(rule => rule.glob), [], session);\n if (rules.length > 10000) throw new SearchError(\"ignore rule count limit exceeded\");\n return rules;\n}\n", "export type { BoundedRegexProvider, RegexWorker, RegexWorkerRequest } from \"./provider.js\";\nexport { createBoundedRegexProvider, type BoundedRegexProviderOptions } from \"./bounded-provider.js\";\nexport { RegexExecutionError } from \"./protocol.js\";\nexport type {\n RegexExecutionOptions, Descriptor as RegexDescriptor, Request as RegexRequest,\n Reply as RegexReply, Row as RegexRow, Match as RegexMatch,\n GrepDescriptor, SearchDescriptor, GlobDescriptor,\n} from \"./protocol.js\";\nexport { EreLedger } from \"./ere/limits.js\";\nexport { compileEre } from \"./ere/syntax.js\";\nexport { matchEre } from \"./ere/matcher.js\";\nexport { EreSyntaxError, EreUnsupportedError, EreProfileLimitError, EreUsageUnknownError } from \"./ere/errors.js\";\nexport type { EreLimits, EreUsage, EreResource, EreExpansionBounds, EreFragment, EreSpan, EreProgram, EreResult } from \"./ere/types.js\";\n", "import { PublicDiagnostic } from \"../../diagnostics.js\";\nimport { yieldTurn } from \"../../contracts/yield.js\";\nimport { matchExprSteps } from \"../expr/bre-engine.js\";\nimport { EreSyntaxError, EreUnsupportedError, EreProfileLimitError, EreUsageUnknownError } from \"./ere/errors.js\";\nimport { EreLedger } from \"./ere/limits.js\";\nimport { compileEre } from \"./ere/syntax.js\";\nimport { matchEre } from \"./ere/matcher.js\";\nimport type { EreProgram } from \"./ere/types.js\";\nimport type { BoundedRegexProvider, RegexWorker, RegexWorkerRequest } from \"./provider.js\";\nimport { ExprMatchError, exprMatchCeilings, type ExprMatchDescriptor, type ExprMatchLimits, type ExprMatchReply, type GrepDescriptor, type Reply, type Row, type SearchDescriptor } from \"./protocol.js\";\n\nexport interface BoundedRegexProviderOptions {\n readonly maxWorkers?: number;\n readonly maxPatterns?: number;\n readonly maxPatternBytes?: number;\n readonly maxRows?: number;\n readonly maxInputBytes?: number;\n readonly maxResultBytes?: number;\n readonly maxWork?: number;\n readonly maxAllocationUnits?: number;\n readonly maxStates?: number;\n}\n\nconst defaults: Required<BoundedRegexProviderOptions> = Object.freeze({\n maxWorkers: 2, maxPatterns: 32, maxPatternBytes: 8192, maxRows: 128,\n maxInputBytes: 65_536, maxResultBytes: 2048, maxWork: 2_000_000,\n maxAllocationUnits: 1_000_000, maxStates: 65_536,\n});\nconst ceilings: Required<BoundedRegexProviderOptions> = Object.freeze({\n maxWorkers: 32, maxPatterns: 128, maxPatternBytes: 65_532, maxRows: 4096,\n maxInputBytes: 1_048_576, maxResultBytes: 65_536, maxWork: 33_554_432,\n maxAllocationUnits: 4_000_000, maxStates: 65_536,\n});\n\ntype SelectionDescriptor = GrepDescriptor | SearchDescriptor;\ninterface OwnedRequest {\n readonly id: number;\n readonly descriptor: SelectionDescriptor;\n readonly rows: readonly Row[];\n readonly ledger: EreLedger;\n}\ninterface OwnedExprRequest {\n readonly id: number;\n readonly descriptor: ExprMatchDescriptor;\n readonly subject: Uint8Array;\n readonly ownedUnits: number;\n}\ntype WorkerEvent = \"message\" | \"error\" | \"messageerror\" | \"exit\";\ntype Listener = ((value: unknown) => void) | ((error: Error) => void) | (() => void) | ((code: number) => void);\nconst typedArrayPrototype = Object.getPrototypeOf(Uint8Array.prototype) as object;\nconst byteLength = Object.getOwnPropertyDescriptor(typedArrayPrototype, \"byteLength\")!.get!;\nconst byteOffset = Object.getOwnPropertyDescriptor(typedArrayPrototype, \"byteOffset\")!.get!;\nconst byteBuffer = Object.getOwnPropertyDescriptor(typedArrayPrototype, \"buffer\")!.get!;\n\nfunction fail(kind: \"protocol\" | \"unsupported\" | \"limit\", message: string): never {\n throw new PublicDiagnostic(`bounded regex ${kind}: ${message}`);\n}\n\nfunction record(value: unknown, keys: readonly string[], optional: readonly string[] = []): asserts value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) fail(\"protocol\", \"expected a data record\");\n const ownKeys = Reflect.ownKeys(value);\n if (ownKeys.length < keys.length || ownKeys.length > keys.length + optional.length\n || ownKeys.some(key => typeof key !== \"string\" || !keys.includes(key) && !optional.includes(key))) fail(\"protocol\", \"unexpected data-record fields\");\n for (const key of [...keys, ...optional]) {\n const property = Object.getOwnPropertyDescriptor(value, key);\n if (property === undefined ? keys.includes(key) : !(\"value\" in property)) fail(\"protocol\", \"missing field or accessor\");\n }\n}\n\nfunction array(value: unknown, limit: number, label: string): asserts value is unknown[] {\n if (!Array.isArray(value)) fail(\"protocol\", `${label} must be an array`);\n if (value.length > limit) fail(\"limit\", `${label} count limit exceeded`);\n // The length bound precedes enumeration, including sparse-array admission.\n const keys = Reflect.ownKeys(value);\n if (keys.length !== value.length + 1) fail(\"protocol\", `${label} must be a dense data array`);\n for (let index = 0; index < value.length; index++) {\n const property = Object.getOwnPropertyDescriptor(value, index);\n if (!property || !(\"value\" in property)) fail(\"protocol\", `${label} must be a dense data array`);\n }\n}\n\nfunction options(input: BoundedRegexProviderOptions): Required<BoundedRegexProviderOptions> {\n const keys = Object.keys(defaults) as (keyof BoundedRegexProviderOptions)[];\n try { record(input, [], keys); }\n catch { throw new TypeError(\"bounded regex options require supported own data fields\"); }\n const result = { ...defaults };\n for (const key of keys) {\n if (!Object.hasOwn(input, key)) continue;\n const value = input[key];\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 1 || value > ceilings[key]) throw new RangeError(`bounded regex option ${key} is outside its limit`);\n result[key] = value;\n }\n return Object.freeze(result);\n}\n\nfunction descriptor(value: unknown, limits: Required<BoundedRegexProviderOptions>): SelectionDescriptor {\n if (value === null || typeof value !== \"object\") fail(\"protocol\", \"invalid descriptor\");\n const kind = Object.getOwnPropertyDescriptor(value, \"kind\");\n if (!kind || !(\"value\" in kind)) fail(\"protocol\", \"invalid descriptor kind\");\n if (kind.value !== \"grep\" && kind.value !== \"rg\") fail(\"unsupported\", \"only grep and fixed rg selection descriptors are supported\");\n const flags = kind.value === \"grep\" ? [\"fixed\", \"extended\", \"insensitive\", \"whole\", \"word\"] : [\"fixed\", \"whole\", \"word\", \"nullData\"];\n record(value, [\"kind\", \"patterns\", ...flags, ...(kind.value === \"rg\" ? [\"case\"] : [])]);\n for (const flag of flags) if (typeof value[flag] !== \"boolean\") fail(\"protocol\", `invalid ${flag} flag`);\n if (kind.value === \"rg\" && ![\"sensitive\", \"insensitive\", \"smart\"].includes(value.case as string)) fail(\"protocol\", \"invalid case flag\");\n if (value.word || kind.value === \"grep\" && value.insensitive || kind.value === \"rg\" && value.case !== \"sensitive\") fail(\"unsupported\", \"only case-sensitive, non-word selection is supported\");\n if (kind.value === \"rg\" && !value.fixed) fail(\"unsupported\", \"rg regex modes are unsupported; use fixed UTF-8 patterns\");\n array(value.patterns, limits.maxPatterns, \"pattern\");\n let bytes = 0;\n for (let index = 0; index < value.patterns.length; index++) {\n const pattern = value.patterns[index];\n if (typeof pattern !== \"string\") fail(\"protocol\", \"patterns must be strings\");\n if (pattern.length > limits.maxPatternBytes - bytes) fail(\"limit\", \"aggregate pattern byte limit exceeded\");\n bytes += pattern.length;\n }\n return value as unknown as SelectionDescriptor;\n}\n\nfunction admit(input: RegexWorkerRequest, limits: Required<BoundedRegexProviderOptions>, signal: AbortSignal): OwnedRequest {\n record(input, [\"id\", \"descriptor\", \"rows\"]);\n const selected = descriptor(input.descriptor, limits);\n array(input.rows, limits.maxRows, \"row\");\n if (input.rows.length > Math.floor(limits.maxResultBytes / 16)) fail(\"limit\", \"result byte limit exceeded\");\n let bytes = 0;\n for (let index = 0; index < input.rows.length; index++) {\n const row = input.rows[index]!;\n record(row, [\"bytes\", \"all\", \"terminated\"], [\"directory\", \"ancestors\"]);\n if (!(row.bytes instanceof Uint8Array) || typeof row.all !== \"boolean\" || typeof row.terminated !== \"boolean\"\n || Object.hasOwn(row, \"directory\") && typeof row.directory !== \"boolean\"\n || Object.hasOwn(row, \"ancestors\") && typeof row.ancestors !== \"boolean\") fail(\"protocol\", \"invalid row\");\n if (Object.hasOwn(row, \"directory\") || Object.hasOwn(row, \"ancestors\")) fail(\"unsupported\", \"glob row flags are unsupported\");\n if (row.all) fail(\"unsupported\", \"all-match enumeration is unsupported\");\n const length = byteLength.call(row.bytes) as number;\n if (length > limits.maxInputBytes - bytes) fail(\"limit\", \"aggregate input byte limit exceeded\");\n bytes += length;\n }\n const ledger = new EreLedger({ maxExpansionBytes: 1_048_576, maxExpansionFields: 8192 }, {\n patternBytes: limits.maxPatternBytes + (selected.fixed ? 0 : 4), subjectBytes: limits.maxInputBytes,\n work: limits.maxWork, allocationUnits: limits.maxAllocationUnits, states: limits.maxStates,\n });\n // Include snapshots, row/result metadata and worst-case match storage before copying.\n ledger.charge(\"allocationUnits\", bytes + input.rows.length * 12 + selected.patterns.length * 2 + 16, signal);\n const patterns: string[] = [];\n for (let index = 0; index < selected.patterns.length; index++) patterns.push(selected.patterns[index]!);\n const ownedDescriptor: SelectionDescriptor = selected.kind === \"grep\"\n ? { kind: \"grep\", patterns, fixed: selected.fixed, extended: selected.extended, insensitive: selected.insensitive, whole: selected.whole, word: selected.word }\n : { kind: \"rg\", patterns, fixed: selected.fixed, case: selected.case, whole: selected.whole, word: selected.word, nullData: selected.nullData };\n const rows: Row[] = [];\n for (let index = 0; index < input.rows.length; index++) {\n const row = input.rows[index]!;\n const source = new Uint8Array(byteBuffer.call(row.bytes) as ArrayBuffer, byteOffset.call(row.bytes) as number, byteLength.call(row.bytes) as number);\n const copy = new Uint8Array(source.length);\n copy.set(source);\n rows.push({ bytes: copy, all: false, terminated: row.terminated });\n }\n return { id: input.id, descriptor: ownedDescriptor, rows, ledger };\n}\n\nfunction admitExpr(input: RegexWorkerRequest, limits: Required<BoundedRegexProviderOptions>, signal: AbortSignal): OwnedExprRequest {\n signal.throwIfAborted();\n record(input, [\"id\", \"descriptor\", \"rows\"]);\n const selected: unknown = input.descriptor;\n record(selected, [\"kind\", \"pattern\", \"profile\", \"limits\"]);\n if (selected.kind !== \"expr-match\" || selected.profile !== \"byte\" && selected.profile !== \"utf8-scalar\") fail(\"protocol\", \"invalid expr descriptor\");\n const keys = Object.keys(exprMatchCeilings) as (keyof ExprMatchLimits)[];\n record(selected.limits, keys);\n for (const key of keys) {\n const value = selected.limits[key];\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 1 || value > exprMatchCeilings[key]) fail(\"protocol\", \"invalid expr limits\");\n }\n array(input.rows, 1, \"expr row\");\n if (input.rows.length !== 1) fail(\"protocol\", \"expr requires exactly one subject\");\n const row: unknown = input.rows[0];\n record(row, [\"bytes\", \"all\", \"terminated\"]);\n if (!(selected.pattern instanceof Uint8Array) || !(row.bytes instanceof Uint8Array) || row.all !== false || row.terminated !== false) fail(\"protocol\", \"invalid expr pattern or subject\");\n const requested = selected.limits as unknown as ExprMatchLimits;\n const allowance: ExprMatchLimits = {\n ...requested,\n maxPatternBytes: Math.min(requested.maxPatternBytes, limits.maxPatternBytes),\n maxSubjectBytes: Math.min(requested.maxSubjectBytes, limits.maxInputBytes),\n maxSteps: Math.min(requested.maxSteps, limits.maxWork),\n maxStates: Math.min(requested.maxStates, limits.maxStates),\n maxAllocatedUnits: Math.min(requested.maxAllocatedUnits, limits.maxAllocationUnits),\n };\n const patternLength = byteLength.call(selected.pattern) as number;\n const subjectLength = byteLength.call(row.bytes) as number;\n if (patternLength > allowance.maxPatternBytes) throw new ExprMatchError(\"limit\", \"bounded regex pattern byte limit exceeded\");\n if (subjectLength > allowance.maxSubjectBytes) throw new ExprMatchError(\"limit\", \"bounded regex input byte limit exceeded\");\n if (limits.maxResultBytes < 32) throw new ExprMatchError(\"limit\", \"bounded regex result byte limit exceeded\");\n const ownedUnits = patternLength + subjectLength + 64;\n if (ownedUnits > allowance.maxSteps) throw new ExprMatchError(\"limit\", \"bounded regex work limit exceeded\");\n if (ownedUnits > allowance.maxAllocatedUnits) throw new ExprMatchError(\"limit\", \"bounded regex allocation limit exceeded\");\n const copy = (bytes: Uint8Array): Uint8Array => {\n const source = new Uint8Array(byteBuffer.call(bytes) as ArrayBuffer, byteOffset.call(bytes) as number, byteLength.call(bytes) as number);\n const owned = new Uint8Array(source.length);\n owned.set(source);\n return owned;\n };\n return {\n id: input.id,\n descriptor: { kind: \"expr-match\", pattern: copy(selected.pattern), profile: selected.profile, limits: allowance },\n subject: copy(row.bytes), ownedUnits,\n };\n}\n\nasync function executeExpr(input: OwnedExprRequest, signal: AbortSignal): Promise<ExprMatchReply> {\n const execution = matchExprSteps(input.descriptor, input.subject, { asciiOnly: true, ownedUnits: input.ownedUnits });\n while (true) {\n signal.throwIfAborted();\n const step = execution.next();\n if (step.done) return { id: input.id, operation: \"expr-match\", result: step.value };\n await yieldTurn(signal);\n }\n}\n\nasync function admitBre(pattern: string, ledger: EreLedger, signal: AbortSignal): Promise<void> {\n let bracket = -1;\n let member = false;\n let namedClass = false;\n for (let index = 0; index < pattern.length; index++) {\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n const character = pattern[index]!;\n if (\"\\\\()+?{}|\".includes(character)) fail(\"unsupported\", \"BRE escapes, groups and interval/operator extensions are unsupported; use grep -E\");\n if (bracket >= 0) {\n if (index === bracket + 1 && character === \"^\") continue;\n if (namedClass) {\n if (character === \"]\" && pattern[index - 1] === \":\") namedClass = false;\n } else if (character === \"]\" && member) bracket = -1;\n else if (character === \"[\" && pattern[index + 1] === \":\") namedClass = true;\n member = true;\n } else if (character === \"[\") { bracket = index; member = false; }\n else if (character === \"^\" && index !== 0 || character === \"$\" && index !== pattern.length - 1) {\n fail(\"unsupported\", \"BRE anchors are supported only at record boundaries\");\n } else if (character === \"*\" && (index === 0 || index === 1 && pattern[0] === \"^\")) {\n fail(\"unsupported\", \"BRE leading literal star is unsupported; use fixed matching\");\n }\n }\n}\n\nasync function validateUtf8(input: Uint8Array | string, ledger: EreLedger, signal: AbortSignal): Promise<void> {\n for (let index = 0; index < input.length;) {\n const first = typeof input === \"string\" ? input.charCodeAt(index) : input[index]!;\n const width = first < 0x80 ? 1 : first >= 0xc2 && first <= 0xdf ? 2\n : first >= 0xe0 && first <= 0xef ? 3 : first >= 0xf0 && first <= 0xf4 ? 4 : 0;\n ledger.charge(\"work\", Math.max(width, 1), signal);\n if (first === 0 || width === 0 || width > input.length - index) fail(\"unsupported\", \"literal patterns and subjects require valid non-NUL UTF-8 bytes\");\n for (let continuation = 1; continuation < width; continuation++) {\n const byte = typeof input === \"string\" ? input.charCodeAt(index + continuation) : input[index + continuation]!;\n if (byte < 0x80 || byte > 0xbf || continuation === 1 && (\n first === 0xe0 && byte < 0xa0 || first === 0xed && byte > 0x9f\n || first === 0xf0 && byte < 0x90 || first === 0xf4 && byte > 0x8f\n )) fail(\"unsupported\", \"literal patterns and subjects require valid non-NUL UTF-8 bytes\");\n }\n index += width;\n await ledger.checkpoint(signal);\n }\n}\n\nasync function literalBytes(pattern: string, selected: SelectionDescriptor, ledger: EreLedger, signal: AbortSignal): Promise<Uint8Array> {\n const { kind } = selected;\n let length = 0;\n if (kind === \"grep\") {\n // grep transports raw pattern bytes in Latin-1 code units, not Unicode text.\n await validateUtf8(pattern, ledger, signal);\n length = pattern.length;\n } else {\n for (let index = 0; index < pattern.length;) {\n const scalar = pattern.codePointAt(index)!;\n const units = scalar > 0xffff ? 2 : 1;\n ledger.charge(\"work\", units, signal);\n if (scalar === 0 || scalar >= 0xd800 && scalar <= 0xdfff) fail(\"unsupported\", \"rg literal patterns require non-NUL Unicode scalars for UTF-8\");\n if (scalar === 10 && selected.kind === \"rg\" && !selected.nullData) fail(\"unsupported\", \"rg multiline matching is unsupported\");\n length += scalar < 0x80 ? 1 : scalar < 0x800 ? 2 : scalar < 0x10000 ? 3 : 4;\n index += units;\n await ledger.checkpoint(signal);\n }\n }\n ledger.charge(\"patternBytes\", length, signal);\n ledger.charge(\"allocationUnits\", length + 1, signal);\n const bytes = new Uint8Array(length);\n let offset = 0;\n for (let index = 0; index < pattern.length;) {\n const scalar = kind === \"grep\" ? pattern.charCodeAt(index) : pattern.codePointAt(index)!;\n const width = kind === \"grep\" || scalar < 0x80 ? 1 : scalar < 0x800 ? 2 : scalar < 0x10000 ? 3 : 4;\n ledger.charge(\"work\", width, signal);\n if (width === 1) bytes[offset++] = scalar;\n else {\n bytes[offset++] = width === 2 ? 0xc0 | scalar >> 6 : width === 3 ? 0xe0 | scalar >> 12 : 0xf0 | scalar >> 18;\n if (width === 4) bytes[offset++] = 0x80 | scalar >> 12 & 0x3f;\n if (width >= 3) bytes[offset++] = 0x80 | scalar >> 6 & 0x3f;\n bytes[offset++] = 0x80 | scalar & 0x3f;\n }\n index += kind === \"rg\" && scalar > 0xffff ? 2 : 1;\n await ledger.checkpoint(signal);\n }\n return bytes;\n}\n\ninterface LiteralProgram { readonly bytes: Uint8Array; readonly fallback: Uint32Array }\n\nasync function compileLiteral(bytes: Uint8Array, ledger: EreLedger, signal: AbortSignal): Promise<LiteralProgram> {\n ledger.charge(\"states\", bytes.length, signal);\n ledger.charge(\"allocationUnits\", bytes.length * 4 + 3, signal);\n const fallback = new Uint32Array(bytes.length);\n // KMP failure links bound prefix-heavy matching to linear work per pattern/row.\n for (let index = 1, prefix = 0; index < bytes.length;) {\n ledger.charge(\"work\", 1, signal);\n if (bytes[index] === bytes[prefix]) fallback[index++] = ++prefix;\n else if (prefix > 0) prefix = fallback[prefix - 1]!;\n else index++;\n await ledger.checkpoint(signal);\n }\n return { bytes, fallback };\n}\n\nasync function literalStart(program: LiteralProgram, subject: Uint8Array, whole: boolean, ledger: EreLedger, signal: AbortSignal): Promise<number> {\n const { bytes, fallback } = program;\n ledger.charge(\"work\", 1, signal);\n await ledger.checkpoint(signal);\n if (whole && bytes.length !== subject.length || bytes.length > subject.length) return -1;\n if (bytes.length === 0) return 0;\n for (let index = 0, prefix = 0; index < subject.length;) {\n ledger.charge(\"work\", 1, signal);\n if (subject[index] === bytes[prefix]) {\n index++;\n if (++prefix === bytes.length) return index - prefix;\n } else if (prefix > 0) prefix = fallback[prefix - 1]!;\n else index++;\n await ledger.checkpoint(signal);\n }\n return -1;\n}\n\nasync function executeLiteral(input: OwnedRequest, signal: AbortSignal): Promise<Reply> {\n const { descriptor: selected, rows, ledger } = input;\n const programs: LiteralProgram[] = [];\n for (const pattern of selected.patterns) {\n programs.push(await compileLiteral(await literalBytes(pattern, selected, ledger, signal), ledger, signal));\n }\n const results: Float64Array[] = [];\n for (const row of rows) {\n await validateUtf8(row.bytes, ledger, signal);\n let start = -1;\n let end = -1;\n for (const program of programs) {\n const candidate = await literalStart(program, row.bytes, selected.whole, ledger, signal);\n if (candidate < 0) continue;\n if (start < 0 || candidate < start) { start = candidate; end = start + program.bytes.length; }\n if (selected.kind === \"grep\") break;\n }\n signal.throwIfAborted();\n results.push(start < 0 ? new Float64Array() : new Float64Array([start, end]));\n }\n return { id: input.id, results };\n}\n\nasync function execute(input: OwnedRequest, signal: AbortSignal): Promise<Reply> {\n const { descriptor: selected, rows, ledger } = input;\n if (selected.fixed) return executeLiteral(input, signal);\n const programs: EreProgram[] = [];\n for (const pattern of selected.patterns) {\n if (selected.kind === \"grep\" && !selected.fixed && !selected.extended) await admitBre(pattern, ledger, signal);\n if (selected.kind === \"rg\" && !selected.nullData && pattern.includes(\"\\n\")) fail(\"unsupported\", \"rg multiline matching is unsupported\");\n ledger.charge(\"allocationUnits\", (selected.whole ? 3 : 1) * 3 + 2, signal);\n const fragments = selected.whole\n ? [{ text: \"^(\", literal: false }, { text: pattern, literal: selected.fixed }, { text: \")$\", literal: false }]\n : [{ text: pattern, literal: selected.fixed }];\n programs.push(await compileEre(fragments, ledger, signal));\n }\n const results: Float64Array[] = [];\n for (const row of rows) {\n // The admitted ASCII profile makes every character offset the original byte offset.\n ledger.charge(\"allocationUnits\", row.bytes.length * 2 + 2, signal);\n const characters: string[] = [];\n for (const byte of row.bytes) {\n ledger.charge(\"work\", 1, signal);\n if (byte === 0 || byte > 127) fail(\"unsupported\", \"subjects require non-NUL ASCII; Unicode and invalid UTF-8 are unsupported\");\n characters.push(String.fromCharCode(byte));\n await ledger.checkpoint(signal);\n }\n const subject = characters.join(\"\");\n let span: { readonly start: number; readonly end: number } | undefined;\n for (const program of programs) {\n const match = await matchEre(program, subject, ledger, signal);\n if (!match.matched) continue;\n const candidate = match.captures[0]!;\n if (selected.kind === \"grep\") { span = candidate; break; }\n // Fixed rg patterns select the first occurrence, breaking ties by pattern order.\n if (!span || candidate.start < span.start) span = candidate;\n }\n signal.throwIfAborted();\n results.push(span ? new Float64Array([span.start, span.end]) : new Float64Array());\n }\n return { id: input.id, results };\n}\n\nclass CooperativeWorker implements RegexWorker {\n readonly #controller = new AbortController();\n readonly #listeners = new Map<WorkerEvent, Set<Listener>>();\n readonly #tasks = new Set<Promise<void>>();\n #busy = false;\n #closing: Promise<void> | undefined;\n\n constructor(private readonly limits: Required<BoundedRegexProviderOptions>, private readonly release: () => void) {\n queueMicrotask(() => { if (!this.#closing) this.emit({ ready: true }); });\n }\n\n on(event: WorkerEvent, listener: Listener): void {\n if (this.#closing) return;\n let listeners = this.#listeners.get(event);\n if (!listeners) { listeners = new Set(); this.#listeners.set(event, listeners); }\n listeners.add(listener);\n }\n\n off(event: WorkerEvent, listener: Listener): void { this.#listeners.get(event)?.delete(listener); }\n\n private emit(value: unknown): void {\n for (const listener of this.#listeners.get(\"message\") ?? []) (listener as (message: unknown) => void)(value);\n }\n\n postMessage(input: RegexWorkerRequest): void {\n if (this.#closing) throw new Error(\"bounded regex worker is closed\");\n if (this.#busy) throw new Error(\"bounded regex worker is busy\");\n const identity = input !== null && typeof input === \"object\" ? Object.getOwnPropertyDescriptor(input, \"id\") : undefined;\n if (!identity || !(\"value\" in identity) || !Number.isSafeInteger(identity.value) || identity.value < 1) fail(\"protocol\", \"invalid request identity\");\n const id = identity.value as number;\n const submitted = Object.getOwnPropertyDescriptor(input, \"descriptor\")?.value as unknown;\n const expression = submitted !== null && typeof submitted === \"object\" && Object.getOwnPropertyDescriptor(submitted, \"kind\")?.value === \"expr-match\";\n let owned: OwnedRequest | OwnedExprRequest | undefined;\n let failure: string | undefined;\n let category: ExprMatchError[\"category\"] = \"unsupported\";\n try { owned = expression ? admitExpr(input, this.limits, this.#controller.signal) : admit(input, this.limits, this.#controller.signal); }\n catch (error) {\n if (!(error instanceof ExprMatchError || error instanceof PublicDiagnostic || error instanceof EreSyntaxError || error instanceof EreUnsupportedError || error instanceof EreProfileLimitError || error instanceof EreUsageUnknownError)) throw error;\n if (error instanceof ExprMatchError) category = error.category;\n failure = error.message.slice(0, 512);\n }\n this.#busy = true;\n const task = Promise.resolve().then(async () => {\n let reply: Reply | ExprMatchReply;\n try {\n this.#controller.signal.throwIfAborted();\n reply = owned ? \"subject\" in owned ? await executeExpr(owned, this.#controller.signal) : await execute(owned, this.#controller.signal) : { id, error: failure! };\n } catch (error) {\n if (!(error instanceof ExprMatchError || error instanceof PublicDiagnostic || error instanceof EreSyntaxError || error instanceof EreUnsupportedError || error instanceof EreProfileLimitError || error instanceof EreUsageUnknownError)) {\n owned = undefined;\n this.#busy = false;\n for (const listener of this.#listeners.get(\"error\") ?? []) (listener as (reason: unknown) => void)(error);\n return;\n }\n if (error instanceof ExprMatchError) category = error.category;\n reply = { id, error: error.message.slice(0, 512) };\n }\n if (expression && \"error\" in reply) reply = { id, operation: \"expr-match\", category, error: reply.error };\n // Clear request-owned payloads before notifying the consumer or allowing reuse.\n owned = undefined;\n this.#busy = false;\n if (!this.#closing) this.emit(reply);\n });\n this.#tasks.add(task);\n void task.then(() => this.#tasks.delete(task), () => this.#tasks.delete(task));\n }\n\n terminate(): Promise<void> {\n if (!this.#closing) {\n this.#closing = Promise.allSettled([...this.#tasks]).then(() => {\n this.#listeners.clear();\n this.#tasks.clear();\n this.release();\n });\n this.#controller.abort(new Error(\"bounded regex worker terminated\"));\n }\n return this.#closing;\n }\n}\n\n/** Cooperative ASCII grep/expr regex and non-NUL UTF-8 literals; not a native-worker/RSS sandbox. */\nexport function createBoundedRegexProvider(input: BoundedRegexProviderOptions = {}): BoundedRegexProvider {\n const limits = options(input);\n let active = 0;\n return Object.freeze({\n createWorker(): RegexWorker {\n if (active >= limits.maxWorkers) fail(\"limit\", \"worker count limit exceeded\");\n active++;\n return new CooperativeWorker(limits, () => { active--; });\n },\n });\n}\n", "import { ExprMatchError, type ExprMatchDescriptor, type ExprMatchLimits, type ExprMatchResult } from \"../regex-execution/protocol.js\";\n\ntype CharacterSet = { negate: boolean; ranges: [number, number][]; classes: string[] };\ntype Atom = { kind: \"literal\"; value: number } | { kind: \"dot\" } | { kind: \"set\"; set: CharacterSet }\n | { kind: \"start\" | \"end\" } | { kind: \"backref\"; group: number };\ntype Tree = Atom | { kind: \"sequence\"; children: Tree[] } | { kind: \"alternative\"; children: Tree[] }\n | { kind: \"group\"; group: number; child: Tree }\n | { kind: \"repeat\"; child: Tree; minimum: number; maximum: number };\ntype Instruction = Atom | { kind: \"split\"; first: number; second: number }\n | { kind: \"jump\"; target: number } | { kind: \"save\"; slot: number } | { kind: \"accept\" };\n\nclass Work {\n steps = 0;\n private nodes = 0;\n private allocated = 0;\n private states = 0;\n private checkpointSteps = 0;\n constructor(readonly limits: ExprMatchLimits) {}\n charge(amount = 1): void {\n if (amount > this.limits.maxSteps - this.steps) throw new ExprMatchError(\"limit\", \"regex work limit exceeded\");\n this.steps += amount;\n }\n allocate(amount: number): void {\n this.charge(amount);\n if (amount > this.limits.maxAllocatedUnits - this.allocated) throw new ExprMatchError(\"limit\", \"regex allocation limit exceeded\");\n this.allocated += amount;\n }\n node(): void {\n this.allocate(8);\n if (++this.nodes > this.limits.maxNodes) throw new ExprMatchError(\"limit\", \"regex nodes limit exceeded\");\n }\n state(): void {\n this.charge();\n if (++this.states > this.limits.maxStates) throw new ExprMatchError(\"limit\", \"regex states limit exceeded\");\n }\n checkpoint(): boolean {\n if (this.steps - this.checkpointSteps >= 256) {\n this.checkpointSteps = this.steps;\n return true;\n }\n return false;\n }\n}\n\nfunction syntax(message: string): never { throw new ExprMatchError(\"syntax\", message); }\nfunction unsupported(message: string): never { throw new ExprMatchError(\"unsupported\", `unsupported BRE: ${message}`); }\nconst classes = [\"alnum\", \"alpha\", \"blank\", \"cntrl\", \"digit\", \"graph\", \"lower\", \"print\", \"punct\", \"space\", \"upper\", \"xdigit\"];\n\nclass Parser {\n private position = 0;\n groups = 0;\n private readonly closed = new Set<number>();\n constructor(private readonly tokens: readonly string[], private readonly work: Work) {}\n private at(value: string): boolean { return this.tokens[this.position] === value; }\n private escaped(value: string): boolean { return this.at(\"\\\\\") && this.tokens[this.position + 1] === value; }\n private tree<TreeNode extends Tree>(node: TreeNode): TreeNode { this.work.node(); return node; }\n *parse(depth = 0): Generator<void, Tree> {\n if (depth > this.work.limits.maxDepth) throw new ExprMatchError(\"limit\", \"regex depth limit exceeded\");\n const branches: Tree[] = [];\n do {\n if (branches.length) this.position += 2;\n const children: Tree[] = [];\n while (this.position < this.tokens.length && !this.escaped(\"|\") && !this.escaped(\")\")) {\n this.work.charge();\n if (this.work.checkpoint()) yield;\n let child = yield* this.atom(depth, children.length === 0);\n if (this.at(\"*\") || this.escaped(\"+\") || this.escaped(\"?\") || this.escaped(\"{\")) {\n const repetition = this.repetition();\n if (child.kind === \"start\" || child.kind === \"end\") unsupported(\"repeated anchor\");\n child = this.tree({ kind: \"repeat\", child, ...repetition });\n if (this.at(\"*\") || this.escaped(\"+\") || this.escaped(\"?\") || this.escaped(\"{\")) unsupported(\"stacked repetition operators\");\n }\n children.push(child);\n }\n branches.push(this.tree({ kind: \"sequence\", children }));\n } while (this.escaped(\"|\"));\n if (depth === 0 && this.position !== this.tokens.length) syntax(\"Unmatched ) or \\\\)\");\n return branches.length === 1 ? branches[0]! : this.tree({ kind: \"alternative\", children: branches });\n }\n private *atom(depth: number, initial: boolean): Generator<void, Tree> {\n const token = this.tokens[this.position++]!;\n if (token === \"[\") return this.tree({ kind: \"set\", set: yield* this.bracket() });\n if (token === \".\") return this.tree({ kind: \"dot\" });\n if (token === \"^\" && initial) return this.tree({ kind: \"start\" });\n if (token === \"$\" && (this.position === this.tokens.length || this.escaped(\"|\") || this.escaped(\")\"))) return this.tree({ kind: \"end\" });\n if (token !== \"\\\\\") return this.tree({ kind: \"literal\", value: token.codePointAt(0)! });\n const escaped = this.tokens[this.position++];\n if (escaped === undefined) syntax(\"Trailing backslash\");\n if (escaped === \"(\") {\n const group = ++this.groups;\n if (group > 32) throw new ExprMatchError(\"limit\", \"regex capture groups limit exceeded\");\n const child = yield* this.parse(depth + 1);\n if (!this.escaped(\")\")) syntax(\"Unmatched ( or \\\\(\");\n this.position += 2;\n this.closed.add(group);\n return this.tree({ kind: \"group\", group, child });\n }\n if (escaped >= \"1\" && escaped <= \"9\") {\n const group = Number(escaped);\n if (!this.closed.has(group)) syntax(\"Invalid back reference\");\n return this.tree({ kind: \"backref\", group });\n }\n if (escaped === \"{\" || escaped === \"+\" || escaped === \"?\") unsupported(\"leading escaped repetition operator\");\n if (escaped === \"`\" || escaped === \"'\" || escaped === \"<\" || escaped === \">\"\n || escaped >= \"a\" && escaped <= \"z\" || escaped >= \"A\" && escaped <= \"Z\" || escaped === \"0\") unsupported(\"alphabetic, word or buffer escape\");\n return this.tree({ kind: \"literal\", value: escaped.codePointAt(0)! });\n }\n private repetition(): { minimum: number; maximum: number } {\n if (this.at(\"*\")) { this.position++; return { minimum: 0, maximum: Infinity }; }\n if (this.escaped(\"+\")) { this.position += 2; return { minimum: 1, maximum: Infinity }; }\n if (this.escaped(\"?\")) { this.position += 2; return { minimum: 0, maximum: 1 }; }\n this.position += 2;\n const number = (): number | undefined => {\n let value = 0, count = 0;\n while (this.tokens[this.position]! >= \"0\" && this.tokens[this.position]! <= \"9\") {\n this.work.charge();\n value = value * 10 + Number(this.tokens[this.position++]);\n if (++count > 5 || value > 32767) syntax(\"Regular expression too big\");\n }\n return count ? value : undefined;\n };\n const minimum = number();\n if (minimum === undefined) syntax(\"Invalid content of \\\\{\\\\}\");\n let maximum: number = minimum;\n if (this.at(\",\")) { this.position++; maximum = number() ?? Infinity; }\n if (!this.escaped(\"}\")) syntax(\"Unmatched \\\\{\");\n this.position += 2;\n if (maximum < minimum) syntax(\"Invalid content of \\\\{\\\\}\");\n return { minimum, maximum };\n }\n private *bracket(): Generator<void, CharacterSet> {\n if (this.position === this.tokens.length) syntax(\"Invalid regular expression\");\n const set: CharacterSet = { negate: this.at(\"^\"), ranges: [], classes: [] };\n if (set.negate) this.position++;\n let first = true;\n while (this.position < this.tokens.length) {\n this.work.allocate(4);\n if (this.work.checkpoint()) yield;\n if (this.at(\"]\") && !first) { this.position++; return set; }\n first = false;\n if (this.at(\"[\") && [\":\", \".\", \"=\"].includes(this.tokens[this.position + 1]!)) {\n const marker = this.tokens[this.position + 1]!;\n if (marker !== \":\") unsupported(\"collating symbols and equivalence classes\");\n this.position += 2;\n let name = \"\";\n while (this.position < this.tokens.length && !this.at(\":\")) {\n this.work.charge();\n if (name.length >= 16) syntax(\"Invalid character class name\");\n name += this.tokens[this.position++];\n }\n if (!this.at(\":\") || this.tokens[this.position + 1] !== \"]\" || !classes.includes(name)) syntax(\"Invalid character class name\");\n this.position += 2;\n set.classes.push(name);\n if (this.at(\"-\") && this.tokens[this.position + 1] !== \"]\") unsupported(\"character class range endpoint\");\n continue;\n }\n const start = this.tokens[this.position++]!.codePointAt(0)!;\n if (this.at(\"-\") && this.tokens[this.position + 1] !== \"]\" && this.position + 1 < this.tokens.length) {\n this.position++;\n if (this.at(\"[\") && [\":\", \".\", \"=\"].includes(this.tokens[this.position + 1]!)) unsupported(\"character class range endpoint\");\n const end = this.tokens[this.position++]!.codePointAt(0)!;\n if (start > 127 || end > 127) unsupported(\"non-ASCII range endpoints\");\n set.ranges.push([start, end]);\n } else set.ranges.push([start, start]);\n }\n syntax(\"Unmatched [, [^, [:, [., or [=\");\n }\n}\n\nfunction* validateCaptureRepetition(tree: Tree, work: Work): Generator<void> {\n const references = new Set<number>(), ambiguous = new Set<number>();\n const cached = new Map<Tree, boolean>();\n function* nullable(node: Tree): Generator<void, boolean> {\n work.charge();\n if (work.checkpoint()) yield;\n const prior = cached.get(node);\n if (prior !== undefined) return prior;\n let result = node.kind === \"start\" || node.kind === \"end\" || node.kind === \"backref\";\n if (node.kind === \"group\") result = yield* nullable(node.child);\n else if (node.kind === \"repeat\") result = node.minimum === 0 || (yield* nullable(node.child));\n else if (node.kind === \"sequence\" || node.kind === \"alternative\") {\n result = node.kind === \"sequence\";\n for (const child of node.children) {\n const childNullable = yield* nullable(child);\n if (childNullable !== result) { result = childNullable; break; }\n }\n }\n work.allocate(2); cached.set(node, result);\n return result;\n }\n function* visit(node: Tree, repeatedNullable: boolean): Generator<void> {\n work.charge();\n if (work.checkpoint()) yield;\n if (node.kind === \"backref\") { work.allocate(1); references.add(node.group); }\n else if (node.kind === \"group\") {\n if (repeatedNullable) { work.allocate(1); ambiguous.add(node.group); }\n yield* visit(node.child, repeatedNullable);\n } else if (node.kind === \"repeat\") yield* visit(node.child, repeatedNullable || node.maximum > 1 && (yield* nullable(node.child)));\n else if (node.kind === \"sequence\" || node.kind === \"alternative\") for (const child of node.children) yield* visit(child, repeatedNullable);\n }\n yield* visit(tree, false);\n for (const group of references) if (ambiguous.has(group)) unsupported(\"backreference to a capture in nullable repetition\");\n}\n\nfunction* compile(tree: Tree, work: Work): Generator<void, Instruction[]> {\n yield* validateCaptureRepetition(tree, work);\n const instructions: Instruction[] = [];\n const emit = (instruction: Instruction): number => { work.node(); instructions.push(instruction); return instructions.length - 1; };\n function* build(node: Tree): Generator<void> {\n work.charge();\n if (work.checkpoint()) yield;\n if (node.kind === \"sequence\") { for (const child of node.children) yield* build(child); }\n else if (node.kind === \"alternative\") {\n const ends: { kind: \"jump\"; target: number }[] = [];\n for (let index = 0; index < node.children.length - 1; index++) {\n const branch: Instruction & { kind: \"split\" } = { kind: \"split\", first: instructions.length + 1, second: 0 };\n emit(branch);\n yield* build(node.children[index]!);\n const end: Instruction & { kind: \"jump\" } = { kind: \"jump\", target: 0 };\n emit(end); ends.push(end);\n branch.second = instructions.length;\n }\n yield* build(node.children.at(-1)!);\n for (const end of ends) end.target = instructions.length;\n } else if (node.kind === \"group\") {\n emit({ kind: \"save\", slot: (node.group - 1) * 2 });\n yield* build(node.child);\n emit({ kind: \"save\", slot: (node.group - 1) * 2 + 1 });\n } else if (node.kind === \"repeat\") {\n for (let count = 0; count < node.minimum; count++) yield* build(node.child);\n if (node.maximum === Infinity) {\n const start = instructions.length;\n const branch: Instruction & { kind: \"split\" } = { kind: \"split\", first: start + 1, second: 0 };\n emit(branch); yield* build(node.child); emit({ kind: \"jump\", target: start });\n branch.second = instructions.length;\n } else {\n for (let count = node.minimum; count < node.maximum; count++) {\n const branch: Instruction & { kind: \"split\" } = { kind: \"split\", first: instructions.length + 1, second: 0 };\n emit(branch); yield* build(node.child); branch.second = instructions.length;\n }\n }\n } else emit(node);\n }\n yield* build(tree); emit({ kind: \"accept\" });\n return instructions;\n}\n\nfunction member(value: number, name: string): boolean {\n const lower = value >= 97 && value <= 122, upper = value >= 65 && value <= 90;\n const digit = value >= 48 && value <= 57, alpha = lower || upper;\n const graph = value >= 33 && value <= 126;\n switch (name) {\n case \"alnum\": return alpha || digit;\n case \"alpha\": return alpha;\n case \"blank\": return value === 32 || value === 9;\n case \"cntrl\": return value < 32 || value === 127;\n case \"digit\": return digit;\n case \"graph\": return graph;\n case \"lower\": return lower;\n case \"print\": return value >= 32 && value <= 126;\n case \"punct\": return graph && !alpha && !digit;\n case \"space\": return value === 32 || value >= 9 && value <= 13;\n case \"upper\": return upper;\n case \"xdigit\": return digit || value >= 65 && value <= 70 || value >= 97 && value <= 102;\n default: return false;\n }\n}\n\nfunction* symbols(bytes: Uint8Array, unicode: boolean, work: Work, asciiOnly: boolean): Generator<void, { values: number[]; boundaries: number[] }> {\n work.allocate(bytes.length * 3 + 1);\n if (work.checkpoint()) yield;\n const values: number[] = [], boundaries: number[] = [0];\n if (!unicode || asciiOnly) {\n for (let offset = 0; offset < bytes.length; offset++) {\n const value = bytes[offset]!;\n if (asciiOnly && (value === 0 || value > 127)) unsupported(\"portable expr requires non-NUL ASCII patterns and subjects\");\n values.push(value); boundaries.push(offset + 1);\n if ((offset + 1) % 256 === 0) yield;\n }\n } else {\n let text: string;\n try { text = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(bytes); }\n catch { unsupported(\"invalid UTF-8 in scalar profile\"); }\n let offset = 0;\n for (const character of text) {\n const value = character.codePointAt(0)!;\n values.push(value);\n offset += value < 0x80 ? 1 : value < 0x800 ? 2 : value < 0x10000 ? 3 : 4;\n boundaries.push(offset);\n if (values.length % 256 === 0) yield;\n }\n }\n return { values, boundaries };\n}\n\nexport function* matchExprSteps(descriptor: ExprMatchDescriptor, subject: Uint8Array, options: { readonly asciiOnly?: boolean; readonly ownedUnits?: number } = {}): Generator<void, ExprMatchResult> {\n const work = new Work(descriptor.limits);\n if (options.ownedUnits) work.allocate(options.ownedUnits);\n const pattern = yield* symbols(descriptor.pattern, descriptor.profile === \"utf8-scalar\", work, options.asciiOnly ?? false);\n work.allocate(pattern.values.length * 2);\n if (work.checkpoint()) yield;\n const tokens: string[] = [];\n for (let index = 0; index < pattern.values.length; index++) {\n tokens.push(String.fromCodePoint(pattern.values[index]!));\n if ((index + 1) % 256 === 0) yield;\n }\n const parser = new Parser(tokens, work);\n const instructions = yield* compile(yield* parser.parse(), work);\n const input = yield* symbols(subject, descriptor.profile === \"utf8-scalar\", work, options.asciiOnly ?? false);\n if (!options.asciiOnly && descriptor.profile === \"utf8-scalar\" && input.values.some(value => value > 127)\n && instructions.some(instruction => instruction.kind === \"set\" && instruction.set.classes.length)) unsupported(\"non-ASCII subject with locale character classes\");\n interface State { program: number; position: number; captures: number[]; visited: number[] }\n work.allocate(parser.groups * 2 + 4);\n const stack: State[] = [{ program: 0, position: 0, captures: new Array<number>(parser.groups * 2).fill(-1), visited: [] }];\n work.state();\n let best: State | undefined;\n while (stack.length) {\n const state = stack.pop()!;\n while (true) {\n work.charge(state.visited.length + 1);\n if (work.checkpoint()) yield;\n if (state.visited.includes(state.program)) break;\n work.allocate(1); state.visited.push(state.program);\n const instruction = instructions[state.program]!;\n state.program++;\n if (instruction.kind === \"accept\") {\n if (!best || state.position > best.position) best = state;\n break;\n }\n if (instruction.kind === \"split\") {\n work.state(); work.allocate(state.captures.length + state.visited.length + 4);\n stack.push({ program: instruction.second, position: state.position, captures: [...state.captures], visited: [...state.visited] });\n state.program = instruction.first;\n } else if (instruction.kind === \"jump\") state.program = instruction.target;\n else if (instruction.kind === \"save\") state.captures[instruction.slot] = state.position;\n else if (instruction.kind === \"start\") { if (state.position !== 0) break; }\n else if (instruction.kind === \"end\") { if (state.position !== input.values.length) break; }\n else if (instruction.kind === \"backref\") {\n const start = state.captures[(instruction.group - 1) * 2]!, end = state.captures[(instruction.group - 1) * 2 + 1]!;\n if (start < 0 || end < start || end - start > input.values.length - state.position) break;\n work.charge(end - start);\n if (work.checkpoint()) yield;\n let equal = true;\n for (let offset = 0; offset < end - start; offset++) {\n if (input.values[start + offset] !== input.values[state.position + offset]) { equal = false; break; }\n if ((offset + 1) % 256 === 0) yield;\n }\n if (!equal) break;\n state.position += end - start;\n if (end > start) { work.allocate(1); state.visited = []; }\n } else {\n const value = input.values[state.position];\n if (value === undefined) break;\n if (instruction.kind === \"literal\" && value !== instruction.value) break;\n if (instruction.kind === \"set\") {\n work.charge(instruction.set.ranges.length + instruction.set.classes.length);\n if (work.checkpoint()) yield;\n let included = false;\n for (let index = 0; index < instruction.set.ranges.length; index++) {\n const [start, end] = instruction.set.ranges[index]!;\n if (value >= start && value <= end) { included = true; break; }\n if ((index + 1) % 256 === 0) yield;\n }\n if (!included) for (let index = 0; index < instruction.set.classes.length; index++) {\n if (member(value, instruction.set.classes[index]!)) { included = true; break; }\n if ((index + 1) % 256 === 0) yield;\n }\n if (included === instruction.set.negate) break;\n }\n work.allocate(1); state.position++; state.visited = [];\n }\n }\n }\n const captureStart = best?.captures[0] ?? -1, captureEnd = best?.captures[1] ?? -1;\n return {\n offsetUnit: \"byte\", matched: best !== undefined, hasCapture: parser.groups > 0,\n overall: best ? { start: 0, end: input.boundaries[best.position]! } : null,\n capture: captureStart < 0 || captureEnd < captureStart ? null : { start: input.boundaries[captureStart]!, end: input.boundaries[captureEnd]! },\n steps: work.steps,\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["byteLength", "len", "i", "output", "parts", "len2", "value", "Buffer", "value", "byteLength", "array", "copy", "byteOffset", "i", "write", "bytes", "name", "input", "value", "bytes", "count", "output", "write", "bytes", "value", "count", "transaction", "parts", "command", "options", "name", "execute", "name", "command", "collectBytes", "readBytes", "options", "write", "value", "destination", "encoder", "value", "bytes", "bytes", "admit", "encoder", "decoder", "name", "value", "readBytes", "bytes", "admit", "encoder", "control", "bytes", "value", "digit", "suffix", "command", "decoder", "bytes", "prefix", "options", "command", "canonical", "suffix", "entries", "bytes", "name", "command", "name", "unary", "inner", "command", "bytes", "write", "digit", "value", "name", "message", "name", "count", "bytes", "classes", "tokens", "encoder", "command", "byteLength", "bytes", "digit", "bytes", "encoder", "record", "suffix", "start", "admit", "charge", "name", "complete", "count", "mode", "decoder", "checkpoint", "command", "parts", "controls", "name", "bytes", "decoder", "encoder", "parse", "readBytes", "execute", "name", "bytes", "command", "encoder", "input", "notify", "fail", "message", "integer", "value", "digit", "tokens", "copy", "parts", "name", "value", "value", "count", "bytes", "pending", "member", "name", "value", "suffix", "integer", "value", "digit", "metadata", "diagnostic", "command", "byteLocale", "message", "parts", "value", "spelling", "opaque", "bytes", "encoder", "name", "admit", "expression", "patterns", "redirect", "descriptor", "options", "fail", "bytes", "record", "value", "payload", "released", "name", "copy", "integer", "value", "admit", "bytes", "multiply", "count", "parts", "spelling", "name", "options", "bytes", "value", "command", "name", "controls", "input", "message", "record", "value", "integer", "name", "copy", "count", "options", "code", "option", "diagnostic", "token", "value", "count", "origin", "controls", "input", "options", "inherited", "metadata", "bytes", "charge", "requested", "count", "value", "value", "bytes", "copy", "name", "input", "value", "name", "entry", "descriptor", "message", "integer", "value", "bytes", "name", "digit", "input", "output", "Parser", "value", "node", "count", "bytes", "bytes", "name", "fail", "name", "value", "count", "bytes", "output", "descriptor", "input", "diagnostic", "message", "write", "scope", "destination", "digit", "options", "record", "execute", "controls", "command", "status", "patterns", "copy", "target", "assignments", "special", "context", "previous", "prefix", "lines", "state", "path", "unsupported", "admit", "publish", "decoder", "ends", "pending", "parts", "start", "segment", "bytes", "value", "options", "decoder", "offset", "execute", "value", "options", "admit", "middleware", "command", "name", "message", "options", "input", "name", "value", "input", "prefix", "suffix", "value", "parts", "options", "value", "message", "options", "value", "descriptor", "value", "descriptor", "options", "count", "execute", "value", "options", "descriptor", "bytes", "readBytes", "Budget", "options", "value", "count", "input", "readBytes", "name", "classes", "bytes", "name", "compile", "count", "preferred", "tokens", "prefix", "labels", "value", "input", "record", "options", "Budget", "patterns", "admit", "name", "descriptor", "count", "prefix", "patterns", "value", "parse", "output", "name", "patterns", "bytes", "options", "value", "diagnostic", "lines", "data", "readBytes", "bytes", "bytes", "value", "input", "prefix", "bytes", "descriptor", "name", "data", "options", "patterns", "bytes", "collectBytes", "lines", "readBytes", "parse", "diagnostic", "options", "command", "message", "unsupported", "classes", "Parser", "tokens", "value", "count", "name", "digit", "bytes", "descriptor", "options", "input", "defaults", "typedArrayPrototype", "message", "record", "value", "options", "input", "bytes", "patterns", "copy", "member", "prefix", "programs", "execute", "options", "command"]
|
|
7
|
+
}
|