@poe-platform/safe-bash 0.1.536 → 0.1.538
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/chunks/{chunk-L2GZSOSJ.js → chunk-4NMFAR4Z.js} +2 -16
- package/dist/safe-bash/chunks/{chunk-L2GZSOSJ.js.map → chunk-4NMFAR4Z.js.map} +4 -4
- package/dist/safe-bash/chunks/{chunk-UZELUFGF.js → chunk-54EWSIBL.js} +5 -5
- package/dist/safe-bash/chunks/{chunk-NVUC5B2R.js → chunk-5FNFA5ZV.js} +9 -7
- package/dist/safe-bash/chunks/{chunk-NVUC5B2R.js.map → chunk-5FNFA5ZV.js.map} +1 -1
- package/dist/safe-bash/chunks/{chunk-M7KZ7V4P.js → chunk-5X2TAR25.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-XROAIPKA.js → chunk-67TENRTW.js} +7 -5
- package/dist/safe-bash/chunks/{chunk-XROAIPKA.js.map → chunk-67TENRTW.js.map} +1 -1
- package/dist/safe-bash/chunks/{chunk-5Y4AEZB2.js → chunk-7XJVLU37.js} +6 -4
- package/dist/safe-bash/chunks/{chunk-5Y4AEZB2.js.map → chunk-7XJVLU37.js.map} +1 -1
- package/dist/safe-bash/chunks/chunk-CI42NIWL.js +21 -0
- package/dist/safe-bash/chunks/chunk-CI42NIWL.js.map +7 -0
- package/dist/safe-bash/chunks/chunk-ELK3CQTQ.js +648 -0
- package/dist/safe-bash/chunks/chunk-ELK3CQTQ.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-FRSZDCZA.js → chunk-GZH6ILJC.js} +51 -16
- package/dist/safe-bash/chunks/chunk-GZH6ILJC.js.map +7 -0
- package/dist/safe-bash/chunks/chunk-LUIEXTN5.js +527 -0
- package/dist/safe-bash/chunks/chunk-LUIEXTN5.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-AVXYPKV7.js → chunk-QQHMFJHF.js} +4 -4
- package/dist/safe-bash/chunks/{chunk-QY2XHZTE.js → chunk-RDIJ6M2D.js} +3 -3
- package/dist/safe-bash/chunks/{chunk-PPVCI2F2.js → chunk-UL4TNDNV.js} +2 -2
- package/dist/safe-bash/commands/csplit/index.browser.js +5 -4
- package/dist/safe-bash/commands/factor/command.d.ts +4 -0
- package/dist/safe-bash/commands/factor/command.d.ts.map +1 -0
- package/dist/safe-bash/commands/factor/command.js +121 -0
- package/dist/safe-bash/commands/factor/command.js.map +1 -0
- package/dist/safe-bash/commands/factor/factor.d.ts +4 -0
- package/dist/safe-bash/commands/factor/factor.d.ts.map +1 -0
- package/dist/safe-bash/commands/factor/factor.js +54 -0
- package/dist/safe-bash/commands/factor/factor.js.map +1 -0
- package/dist/safe-bash/commands/factor/index.browser.js +13 -0
- package/dist/safe-bash/commands/factor/index.browser.js.map +7 -0
- package/dist/safe-bash/commands/factor/index.d.ts +7 -0
- package/dist/safe-bash/commands/factor/index.d.ts.map +1 -0
- package/dist/safe-bash/commands/factor/index.js +13 -0
- package/dist/safe-bash/commands/factor/index.js.map +1 -0
- package/dist/safe-bash/commands/factor/internal.d.ts +51 -0
- package/dist/safe-bash/commands/factor/internal.d.ts.map +1 -0
- package/dist/safe-bash/commands/factor/internal.js +138 -0
- package/dist/safe-bash/commands/factor/internal.js.map +1 -0
- package/dist/safe-bash/commands/factor/io.d.ts +36 -0
- package/dist/safe-bash/commands/factor/io.d.ts.map +1 -0
- package/dist/safe-bash/commands/factor/io.js +207 -0
- package/dist/safe-bash/commands/factor/io.js.map +1 -0
- package/dist/safe-bash/commands/network/index.browser.js +6 -5
- package/dist/safe-bash/commands/pr/index.browser.js +4 -3
- package/dist/safe-bash/commands/pr/io.d.ts.map +1 -1
- package/dist/safe-bash/commands/pr/io.js +47 -12
- package/dist/safe-bash/commands/pr/io.js.map +1 -1
- package/dist/safe-bash/commands/tsort/command.d.ts +4 -0
- package/dist/safe-bash/commands/tsort/command.d.ts.map +1 -0
- package/dist/safe-bash/commands/tsort/command.js +72 -0
- package/dist/safe-bash/commands/tsort/command.js.map +1 -0
- package/dist/safe-bash/commands/tsort/graph.d.ts +3 -0
- package/dist/safe-bash/commands/tsort/graph.d.ts.map +1 -0
- package/dist/safe-bash/commands/tsort/graph.js +183 -0
- package/dist/safe-bash/commands/tsort/graph.js.map +1 -0
- package/dist/safe-bash/commands/tsort/index.browser.js +14 -0
- package/dist/safe-bash/commands/tsort/index.browser.js.map +7 -0
- package/dist/safe-bash/commands/tsort/index.d.ts +7 -0
- package/dist/safe-bash/commands/tsort/index.d.ts.map +1 -0
- package/dist/safe-bash/commands/tsort/index.js +13 -0
- package/dist/safe-bash/commands/tsort/index.js.map +1 -0
- package/dist/safe-bash/commands/tsort/internal.d.ts +50 -0
- package/dist/safe-bash/commands/tsort/internal.d.ts.map +1 -0
- package/dist/safe-bash/commands/tsort/internal.js +176 -0
- package/dist/safe-bash/commands/tsort/internal.js.map +1 -0
- package/dist/safe-bash/commands/tsort/io.d.ts +29 -0
- package/dist/safe-bash/commands/tsort/io.d.ts.map +1 -0
- package/dist/safe-bash/commands/tsort/io.js +223 -0
- package/dist/safe-bash/commands/tsort/io.js.map +1 -0
- package/dist/safe-bash/commands/xml/index.browser.js +5 -4
- package/dist/safe-bash/commands/yq/index.browser.js +6 -5
- package/dist/safe-bash/core.browser.js +41 -19
- package/dist/safe-bash/core.browser.js.map +2 -2
- package/dist/safe-bash/core.d.ts +2 -0
- package/dist/safe-bash/core.d.ts.map +1 -1
- package/dist/safe-bash/core.js +2 -0
- package/dist/safe-bash/core.js.map +1 -1
- package/dist/safe-bash/plugins/composition.d.ts +4 -0
- package/dist/safe-bash/plugins/composition.d.ts.map +1 -1
- package/dist/safe-bash/plugins/composition.js +5 -1
- package/dist/safe-bash/plugins/composition.js.map +1 -1
- package/package.json +14 -2
- package/dist/safe-bash/chunks/chunk-FRSZDCZA.js.map +0 -7
- /package/dist/safe-bash/chunks/{chunk-UZELUFGF.js.map → chunk-54EWSIBL.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-M7KZ7V4P.js.map → chunk-5X2TAR25.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-AVXYPKV7.js.map → chunk-QQHMFJHF.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-QY2XHZTE.js.map → chunk-RDIJ6M2D.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-PPVCI2F2.js.map → chunk-UL4TNDNV.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/tsort/index.ts", "../../src/commands/tsort/command.ts", "../../src/commands/tsort/internal.ts", "../../src/commands/tsort/io.ts", "../../src/commands/tsort/graph.ts"],
|
|
4
|
+
"sourcesContent": ["import type { CommandDefinition, VirtualShellPlugin } from \"../../contracts/index.js\";\nimport { createTsortCommand } from \"./command.js\";\nimport type { TsortCommandsOptions } from \"./internal.js\";\n\nexport { createTsortCommand } from \"./command.js\";\nexport type { TsortCommandsOptions, TsortLimits } from \"./internal.js\";\n\nexport function createTsortCommands(options: TsortCommandsOptions = {}): readonly CommandDefinition[] {\n return [createTsortCommand(options)];\n}\n\nexport function tsortCommands(options: TsortCommandsOptions = {}): VirtualShellPlugin {\n const commands = createTsortCommands(options);\n return { name: \"tsort-commands\", setup(host) {\n for (const command of commands) host.commands.register(command, { replace: options.replace ?? false });\n } };\n}\n", "import type { CommandDefinition } from \"../../contracts/index.js\";\nimport { createOutputOperation } from \"../../contracts/output.js\";\nimport { Budget, TsortError, quote, settings, type TsortCommandsOptions } from \"./internal.js\";\nimport { Lifecycle, Reader } from \"./io.js\";\nimport { sort } from \"./graph.js\";\n\nexport function createTsortCommand(options: TsortCommandsOptions = {}): CommandDefinition {\n const limits = settings(options);\n return { name: \"tsort\", description: \"Topologically sort pairs of byte-valued node names\", async execute(context) {\n const output = createOutputOperation(context, context.stdout);\n const budget = new Budget(context, limits, output.signal);\n let lifecycle: Lifecycle | undefined;\n let failure: { reason: unknown } | undefined;\n let primary: { reason: unknown } | undefined;\n let exitCode = 0;\n try {\n lifecycle = new Lifecycle(budget, output);\n const args = budget.arguments();\n const lone = args.length === 1 ? args[0]! : \"\";\n if (lone.length > 2 && (\"--help\".startsWith(lone) || \"--version\".startsWith(lone))) {\n await lifecycle.write(\"--help\".startsWith(lone) ? \"Usage: tsort [OPTION] [FILE]\\nWrite a topological ordering of whitespace-separated node pairs.\\nWith no FILE, or FILE -, read standard input.\\nOptions: --help --version\\n\" : \"tsort (virtual-bash)\\n\");\n } else {\n let optionsEnded = false;\n const files: string[] = [];\n for (const argument of args) {\n if (!optionsEnded && argument === \"--\") { optionsEnded = true; continue; }\n if (!optionsEnded && argument.startsWith(\"--\")) throw new TsortError(`unrecognized option '${argument}'`, true);\n if (!optionsEnded && argument.length > 1 && argument.startsWith(\"-\")) throw new TsortError(`invalid option -- '${argument[1]}'`, true);\n files.push(argument);\n if (context.env.POSIXLY_CORRECT !== undefined) optionsEnded = true;\n }\n if (files.length > 1) throw new TsortError(`extra operand ${quote(files[1]!)}`, true);\n const reader = new Reader(files[0] ?? \"-\", lifecycle);\n await reader.open();\n exitCode = await sort(reader, lifecycle);\n }\n } catch (error) {\n primary = { reason: error };\n if (error instanceof TsortError && !output.signal.aborted && lifecycle) {\n exitCode = 1;\n try { await lifecycle.write(`tsort: ${error.message}\\n${error.usage ? \"Try 'tsort --help' for more information.\\n\" : \"\"}`, true); }\n catch (reporting) { failure = { reason: new AggregateError([error, reporting], \"tsort failure reporting failed\") }; }\n } else failure = { reason: error };\n }\n try { await output.close(); }\n catch (cleanup) {\n const previous = failure ?? primary;\n failure = { reason: previous ? new AggregateError([previous.reason, cleanup], \"tsort execution and cleanup failed\") : cleanup };\n }\n context.signal.throwIfAborted();\n output.signal.throwIfAborted();\n if (failure) throw failure.reason;\n return { exitCode };\n } };\n}\n", "import { getCommandArguments, type CommandContext } from \"../../contracts/index.js\";\nimport { shellValueByteLength, shellValueBytes } from \"../../contracts/value.js\";\nimport { yieldTurn } from \"../../contracts/yield.js\";\nimport { PublicDiagnostic } from \"../../diagnostics.js\";\n\nexport interface TsortLimits {\n readonly maxArguments: number;\n readonly maxArgumentBytes: number;\n readonly maxInputBytes: number;\n readonly maxTokenBytes: number;\n readonly maxTokens: number;\n readonly maxNodes: number;\n readonly maxEdges: number;\n readonly maxBufferedBytes: number;\n readonly maxOutputBytes: number;\n readonly maxDiagnosticBytes: number;\n readonly maxWork: number;\n readonly maxEmptyChunks: number;\n}\n\nexport interface TsortCommandsOptions {\n readonly replace?: boolean;\n readonly limits?: Partial<TsortLimits>;\n}\n\nexport function settings(options: TsortCommandsOptions): TsortLimits {\n const limits: TsortLimits = {\n maxArguments: 4096, maxArgumentBytes: 65_536, maxInputBytes: 33_554_432,\n maxTokenBytes: 1_048_576, maxTokens: 2_097_152, maxNodes: 131_072,\n maxEdges: 1_048_576, maxBufferedBytes: 33_554_432, maxOutputBytes: 67_108_864,\n maxDiagnosticBytes: 65_536, maxWork: 134_217_728, maxEmptyChunks: 4096, ...options.limits,\n };\n for (const [name, value] of Object.entries(limits)) {\n if (!Number.isSafeInteger(value) || value < 1) throw new RangeError(`Invalid tsort limit: ${name}`);\n }\n return Object.freeze(limits);\n}\n\nexport class TsortError extends PublicDiagnostic {\n constructor(message: string, readonly usage = false) { super(message); }\n}\n\nexport function raw(value: Uint8Array): string {\n let result = \"\";\n for (let offset = 0; offset < value.length; offset += 4096) result += String.fromCharCode(...value.subarray(offset, offset + 4096));\n return result;\n}\n\nexport function bytes(value: string): Uint8Array {\n return Uint8Array.from(value, character => character.charCodeAt(0));\n}\n\nexport function pathText(value: string): string {\n try { return new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(bytes(value)); }\n catch { throw new TsortError(\"filesystem paths must be valid UTF-8\"); }\n}\n\nexport function quote(value: string): string {\n const escapes: Readonly<Record<string, string>> = { \"\\x07\": \"\\\\a\", \"\\b\": \"\\\\b\", \"\\f\": \"\\\\f\", \"\\n\": \"\\\\n\", \"\\r\": \"\\\\r\", \"\\t\": \"\\\\t\", \"\\v\": \"\\\\v\", \"\\\\\": \"\\\\\\\\\", \"'\": \"\\\\'\" };\n let result = \"'\";\n for (const character of value) {\n const code = character.charCodeAt(0);\n result += escapes[character] ?? (code >= 32 && code < 127 ? character : `\\\\${code.toString(8).padStart(3, \"0\")}`);\n }\n return `${result}'`;\n}\n\nexport function fileQuote(value: string): string {\n let safe = value.length > 0;\n let escaped = false;\n for (const character of value) {\n const code = character.charCodeAt(0);\n if (!(character >= \"a\" && character <= \"z\" || character >= \"A\" && character <= \"Z\" || character >= \"0\" && character <= \"9\" || \"_./-\".includes(character))) safe = false;\n if (code < 32 || code >= 127) escaped = true;\n }\n if (safe) return value;\n if (!escaped) {\n if (value.includes(\"'\") && ![\"$\", \"`\", \"\\\\\", '\"'].some(character => value.includes(character))) return `\"${value}\"`;\n return `'${value.split(\"'\").join(\"'\\\\''\")}'`;\n }\n const escapes: Readonly<Record<string, string>> = { \"\\x07\": \"\\\\a\", \"\\b\": \"\\\\b\", \"\\f\": \"\\\\f\", \"\\n\": \"\\\\n\", \"\\r\": \"\\\\r\", \"\\t\": \"\\\\t\", \"\\v\": \"\\\\v\" };\n let result = \"'\", inEscape = false;\n for (const character of value) {\n const code = character.charCodeAt(0);\n if (code < 32 || code >= 127) {\n if (!inEscape) { result += \"'$'\"; inEscape = true; }\n result += escapes[character] ?? `\\\\${code.toString(8).padStart(3, \"0\")}`;\n } else {\n if (inEscape) { result += \"''\"; inEscape = false; }\n result += character === \"'\" ? \"'\\\\''\" : character;\n }\n }\n return `${result}'`;\n}\n\nexport class Budget {\n private work = 0;\n private checkpoint = 0;\n private retained = 0;\n private input = 0;\n private output = 0;\n private diagnostics = 0;\n constructor(readonly context: CommandContext, readonly limits: TsortLimits, readonly signal: AbortSignal) {}\n check(value: number, maximum: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0 || value > maximum) throw new TsortError(`${label} limit exceeded`);\n }\n charge(amount = 1): void {\n this.signal.throwIfAborted();\n this.check(this.work + amount, this.limits.maxWork, \"work\");\n this.work += amount;\n }\n async checkpointWork(): Promise<void> {\n this.signal.throwIfAborted();\n if (this.work - this.checkpoint >= 4096) { this.checkpoint = this.work; await yieldTurn(this.signal); }\n }\n retain(amount: number): void {\n this.check(this.retained + amount, this.limits.maxBufferedBytes, \"buffered bytes\");\n this.retained += amount;\n }\n inputBytes(amount: number): void {\n this.check(this.input + amount, this.limits.maxInputBytes, \"input bytes\");\n this.input += amount;\n }\n emitted(amount: number, diagnostic: boolean): void {\n if (diagnostic) {\n this.check(this.diagnostics + amount, this.limits.maxDiagnosticBytes, \"diagnostic bytes\");\n this.diagnostics += amount;\n } else {\n this.check(this.output + amount, this.limits.maxOutputBytes, \"output bytes\");\n this.output += amount;\n this.charge(amount);\n }\n }\n arguments(): string[] {\n this.check(this.context.args.length, this.limits.maxArguments, \"argument count\");\n let total = 0;\n for (const argument of this.context.args) {\n total += argument.length;\n this.check(total, this.limits.maxArgumentBytes, \"argument bytes\");\n for (let offset = 0; offset < argument.length; offset++) {\n const unit = argument.charCodeAt(offset);\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const next = argument.charCodeAt(++offset);\n if (!(next >= 0xdc00 && next <= 0xdfff)) throw new TsortError(\"arguments must contain well-formed Unicode\");\n } else if (unit >= 0xdc00 && unit <= 0xdfff) throw new TsortError(\"arguments must contain well-formed Unicode\");\n }\n }\n total = 0;\n const values = this.context.argumentValues === undefined ? this.context.args : getCommandArguments(this.context).values;\n for (const argument of values) {\n total += shellValueByteLength(argument);\n this.check(total, this.limits.maxArgumentBytes, \"argument bytes\");\n }\n this.charge(total);\n this.retain(total * 8 + this.context.args.length * 64 + 128);\n total = 0;\n return getCommandArguments(this.context).values.map(argument => {\n total += shellValueByteLength(argument);\n this.check(total, this.limits.maxArgumentBytes, \"argument bytes\");\n this.charge(shellValueByteLength(argument));\n const value = shellValueBytes(argument);\n if (value.includes(0)) throw new TsortError(\"NUL is not supported in arguments\");\n return raw(value);\n });\n }\n}\n", "import { FsError, resolvePath, type ByteSource } from \"../../contracts/index.js\";\nimport type { OutputOperation } from \"../../contracts/output.js\";\nimport { Budget, TsortError, bytes, fileQuote, pathText } from \"./internal.js\";\n\nexport class Lifecycle {\n private readonly pending = new Set<Promise<unknown>>();\n private readonly cleanups: (() => Promise<void>)[] = [];\n private closing: Promise<void> | undefined;\n constructor(readonly budget: Budget, output: OutputOperation) { output.registerCleanup(() => this.close()); }\n cleanup(action: () => Promise<void>): void { this.assertOpen(); this.cleanups.push(action); }\n assertOpen(): void {\n this.budget.signal.throwIfAborted();\n if (this.closing) throw new TsortError(\"command is closed\");\n }\n async operation<Value>(action: () => Value | Promise<Value>, diagnostic = false): Promise<Value> {\n this.assertOpen();\n if (!diagnostic) this.budget.charge();\n const pending = Promise.resolve().then(() => { this.assertOpen(); return action(); });\n this.pending.add(pending);\n try { const value = await pending; this.assertOpen(); return value; }\n finally { this.pending.delete(pending); }\n }\n close(): Promise<void> {\n return this.closing ??= Promise.resolve().then(async () => {\n while (this.pending.size) await Promise.allSettled([...this.pending]);\n const failures: unknown[] = [];\n for (const cleanup of this.cleanups) {\n try { await cleanup(); } catch (error) { failures.push(error); }\n }\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures, \"tsort cleanup failed\");\n });\n }\n async write(value: string, diagnostic = false): Promise<void> {\n this.budget.emitted(value.length, diagnostic);\n await this.operation(async () => {\n if (!diagnostic) this.budget.retain(value.length * 3);\n try {\n const sink = diagnostic ? this.budget.context.stderr : this.budget.context.stdout;\n this.assertOpen();\n const destination = sink.ownedOutput ?? sink;\n this.assertOpen();\n const write = destination.write;\n this.assertOpen();\n await Reflect.apply(write, destination, [bytes(value)]);\n } finally { if (!diagnostic) this.budget.retain(-value.length * 3); }\n }, diagnostic);\n }\n}\n\nexport class Reader {\n private iterator: AsyncIterator<Uint8Array> | undefined;\n private chunk: Uint8Array = new Uint8Array();\n private offset = 0;\n private ended = false;\n private empties = 0;\n private snapshotBytes = 0;\n constructor(readonly name: string, readonly lifecycle: Lifecycle) {\n lifecycle.cleanup(async () => {\n try { if (!this.ended) await this.iterator?.return?.(); }\n finally {\n this.iterator = undefined;\n this.releaseSnapshot();\n lifecycle.budget.retain(-this.chunk.length);\n this.chunk = new Uint8Array();\n }\n });\n }\n private readonly releaseSnapshot = (): void => {\n this.lifecycle.budget.retain(-this.snapshotBytes);\n this.snapshotBytes = 0;\n };\n async open(): Promise<void> {\n const { budget } = this.lifecycle;\n try {\n await this.lifecycle.operation(async () => {\n let source: ByteSource;\n let needsAcquisitionCleanup = false;\n if (this.name === \"-\") source = budget.context.stdin;\n else {\n const path = resolvePath(budget.context.cwd, pathText(this.name));\n const fs = budget.context.fs;\n this.lifecycle.assertOpen();\n const statMethod = fs.stat;\n this.lifecycle.assertOpen();\n const stat = await Reflect.apply(statMethod, fs, [path, { signal: budget.signal }]);\n this.lifecycle.assertOpen();\n if (stat.type === \"directory\") { this.ended = true; return; }\n if (stat.type !== \"file\" && stat.type !== \"character\") throw new FsError(\"ENOTSUP\", { path });\n const capabilitiesFor = fs.capabilitiesFor;\n this.lifecycle.assertOpen();\n const selected = capabilitiesFor ? await Reflect.apply(capabilitiesFor, fs, [path, { signal: budget.signal }]) : undefined;\n this.lifecycle.assertOpen();\n const capabilities = selected ?? fs.capabilities;\n this.lifecycle.assertOpen();\n const readStream = fs.readStream;\n this.lifecycle.assertOpen();\n const streamingRead = readStream && capabilities.streamingRead !== false;\n this.lifecycle.assertOpen();\n if (readStream && streamingRead) {\n source = Reflect.apply(readStream, fs, [path, { signal: budget.signal, chunkSize: 16_384 }]);\n needsAcquisitionCleanup = budget.signal.aborted;\n }\n else {\n const maximum = Math.min(budget.limits.maxInputBytes, Math.floor(budget.limits.maxBufferedBytes / 2));\n budget.check(stat.size, maximum, \"buffered input bytes\");\n budget.retain(maximum);\n this.snapshotBytes = maximum;\n const readFile = fs.readFile;\n this.lifecycle.assertOpen();\n const content = await Reflect.apply(readFile, fs, [path, { signal: budget.signal, maxBytes: maximum }]);\n if (!(content instanceof Uint8Array)) throw new TypeError(\"tsort input requires bytes\");\n budget.check(content.length, maximum, \"buffered input bytes\");\n budget.retain(content.length - maximum);\n this.snapshotBytes = content.length;\n const { releaseSnapshot } = this;\n source = { async *[Symbol.asyncIterator]() { try { yield content; } finally { releaseSnapshot(); } } };\n }\n }\n if (!needsAcquisitionCleanup) this.lifecycle.assertOpen();\n const factory = source[Symbol.asyncIterator];\n if (!needsAcquisitionCleanup) this.lifecycle.assertOpen();\n this.iterator = Reflect.apply(factory, source, []);\n });\n } catch (error) {\n if (error instanceof FsError) throw new TsortError(`${fileQuote(this.name)}: ${fsDetail(error)}`);\n throw error;\n }\n }\n async get(): Promise<number> {\n const { budget } = this.lifecycle;\n budget.charge();\n await budget.checkpointWork();\n while (this.offset === this.chunk.length) {\n if (this.ended) return -1;\n let next: IteratorResult<Uint8Array>;\n try {\n next = await this.lifecycle.operation(() => {\n const iterator = this.iterator!;\n const advance = iterator.next;\n this.lifecycle.assertOpen();\n return Reflect.apply(advance, iterator, []);\n });\n }\n catch (error) {\n if (error instanceof FsError) throw new TsortError(`${fileQuote(this.name)}: ${fsDetail(error)}`);\n throw error;\n }\n budget.retain(-this.chunk.length);\n this.chunk = new Uint8Array();\n this.offset = 0;\n if (next.done) { this.ended = true; this.iterator = undefined; return -1; }\n if (!(next.value instanceof Uint8Array)) throw new TypeError(\"tsort input requires bytes\");\n budget.inputBytes(next.value.length);\n budget.charge(next.value.length);\n budget.retain(next.value.length);\n this.chunk = Uint8Array.from(next.value);\n if (!this.chunk.length) budget.check(++this.empties, budget.limits.maxEmptyChunks, \"empty input chunks\");\n }\n return this.chunk[this.offset++]!;\n }\n}\n\nfunction fsDetail(error: FsError): string {\n const details: Partial<Record<FsError[\"code\"], string>> = {\n EACCES: \"Permission denied\", EPERM: \"Operation not permitted\", ENOENT: \"No such file or directory\",\n EISDIR: \"Is a directory\", ENOTDIR: \"Not a directory\", EIO: \"Input/output error\", ELOOP: \"Too many levels of symbolic links\",\n ENAMETOOLONG: \"File name too long\", ENOTSUP: \"Operation not supported\",\n };\n return details[error.code] ?? error.message;\n}\n", "import { TsortError, fileQuote, raw } from \"./internal.js\";\nimport { Lifecycle, Reader } from \"./io.js\";\n\ninterface Edge { target: Node; next: Edge | undefined }\ninterface Node { name: string; count: number; printed: boolean; top: Edge | undefined; link: Node | undefined }\n\nexport async function sort(reader: Reader, lifecycle: Lifecycle): Promise<number> {\n const { budget } = lifecycle;\n const nodes = new Map<string, Node>();\n let tokens = 0, edges = 0, length = 0, nameLength = 0;\n let nul = false;\n let token: Uint8Array = new Uint8Array();\n let predecessor: Node | undefined;\n const admitToken = (): void => {\n budget.check(++tokens, budget.limits.maxTokens, \"tokens\");\n budget.charge(nameLength + 1);\n budget.retain(nameLength * 4);\n const name = raw(token.subarray(0, nameLength));\n let node = nodes.get(name);\n if (!node) {\n budget.check(nodes.size + 1, budget.limits.maxNodes, \"nodes\");\n budget.retain(160);\n node = { name, count: 0, printed: false, top: undefined, link: undefined };\n nodes.set(name, node);\n } else budget.retain(-nameLength * 4);\n if (!predecessor) predecessor = node;\n else {\n if (predecessor !== node) {\n budget.check(++edges, budget.limits.maxEdges, \"edges\");\n budget.retain(48);\n predecessor.top = { target: node, next: predecessor.top };\n node.count++;\n }\n predecessor = undefined;\n }\n length = 0;\n nameLength = 0;\n nul = false;\n };\n for (;;) {\n const value = await reader.get();\n if (value < 0 || value === 32 || value === 9 || value === 10) {\n if (length) admitToken();\n if (value < 0) break;\n } else {\n budget.check(++length, budget.limits.maxTokenBytes, \"token bytes\");\n if (value === 0) nul = true;\n if (!nul) {\n if (nameLength === token.length) {\n const capacity = Math.min(budget.limits.maxTokenBytes, Math.max(64, token.length * 2));\n budget.retain(capacity);\n budget.charge(token.length);\n const grown = new Uint8Array(capacity);\n grown.set(token);\n budget.retain(-token.length);\n token = grown;\n }\n token[nameLength++] = value;\n }\n }\n }\n budget.retain(-token.length);\n token = new Uint8Array();\n if (predecessor) throw new TsortError(`${fileQuote(reader.name)}: input contains an odd number of tokens`);\n budget.retain(nodes.size * 16);\n let ordered = [...nodes.values()];\n let scratch = new Array<Node>(ordered.length);\n for (let width = 1; width < ordered.length; width *= 2) {\n for (let start = 0; start < ordered.length; start += width * 2) {\n const middle = Math.min(start + width, ordered.length), end = Math.min(start + width * 2, ordered.length);\n let left = start, right = middle;\n for (let offset = start; offset < end; offset++) {\n budget.charge();\n let useLeft = right === end;\n if (left < middle && right < end) {\n budget.charge(Math.min(ordered[left]!.name.length, ordered[right]!.name.length) + 1);\n useLeft = ordered[left]!.name < ordered[right]!.name;\n }\n scratch[offset] = left < middle && useLeft ? ordered[left++]! : ordered[right++]!;\n await budget.checkpointWork();\n }\n }\n [ordered, scratch] = [scratch, ordered];\n }\n let remaining = ordered.length, status = 0;\n while (remaining) {\n let head: Node | undefined, tail: Node | undefined;\n for (const node of ordered) {\n budget.charge();\n if (!node.printed && !node.count) {\n if (tail) tail.link = node; else head = node;\n tail = node;\n node.link = undefined;\n }\n await budget.checkpointWork();\n }\n while (head) {\n const node: Node = head;\n budget.check(node.name.length + 1, budget.limits.maxOutputBytes, \"output bytes\");\n await lifecycle.write(`${node.name}\\n`);\n node.printed = true;\n remaining--;\n for (let edge = node.top; edge; edge = edge.next) {\n budget.charge();\n if (!--edge.target.count) {\n tail!.link = edge.target;\n tail = edge.target;\n tail.link = undefined;\n }\n await budget.checkpointWork();\n }\n head = node.link;\n node.link = undefined;\n }\n if (!remaining) break;\n status = 1;\n await lifecycle.write(`tsort: ${fileQuote(reader.name)}: input contains a loop:\\n`, true);\n let loop: Node | undefined;\n do {\n let found = false;\n for (const node of ordered) {\n budget.charge();\n await budget.checkpointWork();\n if (!node.count) continue;\n if (!loop) { loop = node; continue; }\n let previous: Edge | undefined;\n for (let edge = node.top; edge; edge = edge.next) {\n budget.charge();\n await budget.checkpointWork();\n if (edge.target === loop) {\n if (node.link) {\n while (loop) {\n budget.charge();\n const next: Node | undefined = loop.link;\n await lifecycle.write(`tsort: ${loop.name}\\n`, true);\n if (loop === node) {\n edge.target.count--;\n if (previous) previous.next = edge.next; else node.top = edge.next;\n break;\n }\n loop.link = undefined;\n loop = next;\n }\n while (loop) {\n budget.charge();\n const next: Node | undefined = loop.link;\n loop.link = undefined;\n loop = next;\n await budget.checkpointWork();\n }\n found = true;\n } else { node.link = loop; loop = node; }\n break;\n }\n previous = edge;\n }\n if (found) break;\n }\n } while (loop);\n }\n return status;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
+
import {
|
|
2
|
+
resolvePath
|
|
3
|
+
} from "./chunk-CI42NIWL.js";
|
|
1
4
|
import {
|
|
2
5
|
createOutputOperation
|
|
3
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-UL4TNDNV.js";
|
|
4
7
|
import {
|
|
5
8
|
FsError,
|
|
6
9
|
PublicDiagnostic,
|
|
7
10
|
getCommandArguments,
|
|
8
11
|
init_platform,
|
|
9
12
|
publicDiagnosticMessage,
|
|
10
|
-
resolvePath,
|
|
11
13
|
shellValueByteLength,
|
|
12
14
|
shellValueBytes,
|
|
13
15
|
yieldTurn
|
|
14
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-4NMFAR4Z.js";
|
|
15
17
|
|
|
16
18
|
// packages/safe-bash/src/commands/pr/index.ts
|
|
17
19
|
init_platform();
|
|
@@ -255,7 +257,12 @@ var Lifecycle = class {
|
|
|
255
257
|
if (!diagnostic) budget.retain(value.length * 3);
|
|
256
258
|
try {
|
|
257
259
|
const sink = diagnostic ? budget.context.stderr : budget.context.stdout;
|
|
258
|
-
|
|
260
|
+
this.assertOpen();
|
|
261
|
+
const destination = sink.ownedOutput ?? sink;
|
|
262
|
+
this.assertOpen();
|
|
263
|
+
const write = destination.write;
|
|
264
|
+
this.assertOpen();
|
|
265
|
+
await Reflect.apply(write, destination, [bytes(value)]);
|
|
259
266
|
} finally {
|
|
260
267
|
if (!diagnostic) budget.retain(-value.length * 3);
|
|
261
268
|
}
|
|
@@ -297,25 +304,45 @@ var Reader = class {
|
|
|
297
304
|
if (this.name === "-") return;
|
|
298
305
|
const { budget } = this.lifecycle;
|
|
299
306
|
this.path = resolvePath(budget.context.cwd, pathText(this.name));
|
|
300
|
-
this.stat = await this.lifecycle.operation(() =>
|
|
301
|
-
|
|
307
|
+
this.stat = await this.lifecycle.operation(() => {
|
|
308
|
+
const fs = budget.context.fs;
|
|
309
|
+
this.lifecycle.assertOpen();
|
|
310
|
+
const stat = fs.stat;
|
|
311
|
+
this.lifecycle.assertOpen();
|
|
312
|
+
return Reflect.apply(stat, fs, [this.path, { signal: budget.signal }]);
|
|
313
|
+
});
|
|
314
|
+
if (this.stat.type !== "file" && this.stat.type !== "directory" && this.stat.type !== "character") throw new FsError("ENOTSUP", { path: this.path });
|
|
302
315
|
}
|
|
303
316
|
async acquire() {
|
|
304
317
|
const { budget } = this.lifecycle;
|
|
305
|
-
const { fs, stdin } = budget.context;
|
|
306
318
|
await this.lifecycle.operation(async () => {
|
|
307
319
|
let source;
|
|
308
|
-
|
|
320
|
+
let needsAcquisitionCleanup = false;
|
|
321
|
+
if (this.path === void 0) source = budget.context.stdin;
|
|
309
322
|
else {
|
|
310
|
-
const
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
323
|
+
const fs = budget.context.fs;
|
|
324
|
+
this.lifecycle.assertOpen();
|
|
325
|
+
const capabilitiesFor = fs.capabilitiesFor;
|
|
326
|
+
this.lifecycle.assertOpen();
|
|
327
|
+
const selected = capabilitiesFor ? await Reflect.apply(capabilitiesFor, fs, [this.path, { signal: budget.signal }]) : void 0;
|
|
328
|
+
this.lifecycle.assertOpen();
|
|
329
|
+
const capabilities = selected ?? fs.capabilities;
|
|
330
|
+
this.lifecycle.assertOpen();
|
|
331
|
+
const readStream = fs.readStream;
|
|
332
|
+
this.lifecycle.assertOpen();
|
|
333
|
+
const streamingRead = readStream && capabilities.streamingRead !== false;
|
|
334
|
+
this.lifecycle.assertOpen();
|
|
335
|
+
if (readStream && streamingRead) {
|
|
336
|
+
source = Reflect.apply(readStream, fs, [this.path, { signal: budget.signal, chunkSize: 16384 }]);
|
|
337
|
+
needsAcquisitionCleanup = budget.signal.aborted;
|
|
338
|
+
} else {
|
|
314
339
|
const maximum = Math.min(budget.limits.maxInputBytes, Math.floor(budget.limits.maxBufferedBytes / 2));
|
|
315
340
|
budget.check(this.stat.size, maximum, "buffered input bytes");
|
|
316
341
|
budget.retain(maximum);
|
|
317
342
|
this.snapshotBytes = maximum;
|
|
318
|
-
const
|
|
343
|
+
const readFile = fs.readFile;
|
|
344
|
+
this.lifecycle.assertOpen();
|
|
345
|
+
const content = await Reflect.apply(readFile, fs, [this.path, { signal: budget.signal, maxBytes: maximum }]);
|
|
319
346
|
if (!(content instanceof Uint8Array)) throw new TypeError("pr input requires bytes");
|
|
320
347
|
budget.check(content.length, maximum, "buffered input bytes");
|
|
321
348
|
budget.retain(content.length - maximum);
|
|
@@ -330,7 +357,10 @@ var Reader = class {
|
|
|
330
357
|
} };
|
|
331
358
|
}
|
|
332
359
|
}
|
|
333
|
-
|
|
360
|
+
if (!needsAcquisitionCleanup) this.lifecycle.assertOpen();
|
|
361
|
+
const factory = source[Symbol.asyncIterator];
|
|
362
|
+
if (!needsAcquisitionCleanup) this.lifecycle.assertOpen();
|
|
363
|
+
this.iterator = Reflect.apply(factory, source, []);
|
|
334
364
|
});
|
|
335
365
|
}
|
|
336
366
|
unget(value) {
|
|
@@ -351,7 +381,12 @@ var Reader = class {
|
|
|
351
381
|
let next;
|
|
352
382
|
try {
|
|
353
383
|
if (!this.iterator) await this.acquire();
|
|
354
|
-
next = await this.lifecycle.operation(() =>
|
|
384
|
+
next = await this.lifecycle.operation(() => {
|
|
385
|
+
const iterator = this.iterator;
|
|
386
|
+
const advance = iterator.next;
|
|
387
|
+
this.lifecycle.assertOpen();
|
|
388
|
+
return Reflect.apply(advance, iterator, []);
|
|
389
|
+
});
|
|
355
390
|
} catch (error) {
|
|
356
391
|
if (error instanceof FsError) throw new PrReadError(`${fileQuote(this.name === "-" ? "standard input" : this.name)}: ${fsDetail(error)}`);
|
|
357
392
|
throw error;
|
|
@@ -1233,4 +1268,4 @@ export {
|
|
|
1233
1268
|
createPrCommands,
|
|
1234
1269
|
prCommands
|
|
1235
1270
|
};
|
|
1236
|
-
//# sourceMappingURL=chunk-
|
|
1271
|
+
//# sourceMappingURL=chunk-GZH6ILJC.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/pr/index.ts", "../../src/commands/pr/command.ts", "../../src/commands/pr/internal.ts", "../../src/commands/pr/io.ts", "../../src/commands/pr/options.ts", "../../src/commands/pr/format.ts"],
|
|
4
|
+
"sourcesContent": ["import type { CommandDefinition, VirtualShellPlugin } from \"../../contracts/index.js\";\nimport { createPrCommand } from \"./command.js\";\nimport type { PrCommandsOptions } from \"./internal.js\";\n\nexport { createPrCommand } from \"./command.js\";\nexport type { PrCommandsOptions, PrLimits } from \"./internal.js\";\n\nexport function createPrCommands(options: PrCommandsOptions = {}): readonly CommandDefinition[] {\n return [createPrCommand(options)];\n}\n\nexport function prCommands(options: PrCommandsOptions = {}): VirtualShellPlugin {\n const commands = createPrCommands(options);\n return { name: \"pr-commands\", setup(host) {\n for (const command of commands) host.commands.register(command, { replace: options.replace ?? false });\n } };\n}\n", "import { FsError, type CommandDefinition } from \"../../contracts/index.js\";\nimport { createOutputOperation } from \"../../contracts/output.js\";\nimport { publicDiagnosticMessage } from \"../../diagnostics.js\";\nimport { Budget, PrError, fileQuote, quote, settings, type PrCommandsOptions } from \"./internal.js\";\nimport { Lifecycle, Reader, fsDetail } from \"./io.js\";\nimport { parseOptions } from \"./options.js\";\nimport { Formatter } from \"./format.js\";\n\nexport function createPrCommand(options: PrCommandsOptions = {}): CommandDefinition {\n const limits = settings(options);\n return { name: \"pr\", description: \"Paginate files and print balanced or merged columns\", async execute(context) {\n const output = createOutputOperation(context, context.stdout);\n const budget = new Budget(context, limits, output.signal);\n let lifecycle: Lifecycle | undefined;\n let failure: { reason: unknown } | undefined;\n let primary: { reason: unknown } | undefined;\n let exitCode = 0;\n try {\n lifecycle = new Lifecycle(budget, output);\n const parsed = parseOptions(budget.arguments(), budget);\n if (parsed.information) {\n await lifecycle.write(parsed.information === \"version\" ? \"pr (virtual-bash)\\n\" : \"Usage: pr [OPTION]... [FILE]...\\nPaginate or columnate files for printing.\\nOptions: -COLUMNS -h HEADER -l LENGTH -w WIDTH -t -n[SEP[DIGITS]] -m -s[SEP]\\n\");\n } else {\n const ctype = context.env.LC_ALL || context.env.LC_CTYPE || context.env.LANG || \"C\";\n const timeLocale = context.env.LC_ALL || context.env.LC_TIME || context.env.LANG || \"C\";\n for (const locale of [ctype, timeLocale]) if (![\"C\", \"POSIX\", \"C.UTF-8\", \"C.utf8\"].includes(locale)) throw new PrError(`unsupported locale ${quote(locale)}`);\n let sampled: number | undefined;\n const date = (reader: Reader | undefined): string => {\n let milliseconds: number;\n if (reader?.stat) milliseconds = reader.stat.mtimeMs;\n else milliseconds = sampled ??= (options.clock ?? Date.now)();\n const value = new Date(milliseconds);\n if (!Number.isFinite(milliseconds) || Number.isNaN(value.getTime())) throw new PrError(\"invalid header timestamp\");\n const year = String(value.getUTCFullYear()).padStart(4, \"0\");\n const month = String(value.getUTCMonth() + 1).padStart(2, \"0\");\n const day = String(value.getUTCDate()).padStart(2, \"0\");\n const time = `${String(value.getUTCHours()).padStart(2, \"0\")}:${String(value.getUTCMinutes()).padStart(2, \"0\")}`;\n if (context.env.POSIXLY_CORRECT !== undefined && (timeLocale === \"C\" || timeLocale === \"POSIX\")) return `${[\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"][value.getUTCMonth()]} ${String(value.getUTCDate()).padStart(2, \" \")} ${time} ${year}`;\n return `${year}-${month}-${day} ${time}`;\n };\n let stdin: Reader | undefined;\n const open = async (name: string): Promise<Reader | undefined> => {\n if (name === \"-\" && stdin) return stdin;\n const reader = new Reader(name, lifecycle!);\n try { await reader.open(); }\n catch (error) {\n if (!(error instanceof FsError)) throw error;\n exitCode = 1;\n if (!parsed.quiet) {\n await lifecycle!.write(`pr: ${fileQuote(name)}: ${fsDetail(error)}\\n`, true);\n }\n return undefined;\n }\n if (name === \"-\") stdin = reader;\n return reader;\n };\n const names = parsed.files.length ? parsed.files : [\"-\"];\n if (!parsed.files.length) parsed.merge = false;\n const groups = parsed.merge ? [names] : names.map(name => [name]);\n for (const group of groups) {\n const formatter = new Formatter({ ...parsed }, lifecycle, group.length);\n const readers: Reader[] = [];\n for (const name of group) { const reader = await open(name); if (reader) readers.push(reader); }\n if (!readers.length) continue;\n const title = parsed.header ?? (parsed.merge || readers[0]!.name === \"-\" ? \"\" : readers[0]!.name);\n await formatter.run(readers, date(parsed.merge ? undefined : readers[0]), title);\n }\n }\n } catch (error) {\n primary = { reason: error };\n failure = { reason: error };\n if (!output.signal.aborted && lifecycle && error instanceof PrError) {\n exitCode = 1;\n try {\n await lifecycle.write(`pr: ${publicDiagnosticMessage(error, context.onInternalError)}\\n`, true);\n if (error.usage) await lifecycle.write(\"Try 'pr --help' for more information.\\n\", true);\n failure = undefined;\n } catch (reporting) { failure = { reason: new AggregateError([error, reporting], \"pr failure reporting failed\") }; }\n }\n }\n try { await output.close(); }\n catch (cleanup) {\n const previous = failure ?? primary;\n failure = { reason: previous ? new AggregateError([previous.reason, cleanup], \"pr execution and cleanup failed\") : cleanup };\n }\n context.signal.throwIfAborted();\n output.signal.throwIfAborted();\n if (failure) throw failure.reason;\n return { exitCode };\n } };\n}\n", "import { getCommandArguments, type CommandContext } from \"../../contracts/index.js\";\nimport { shellValueByteLength, shellValueBytes } from \"../../contracts/value.js\";\nimport { yieldTurn } from \"../../contracts/yield.js\";\nimport { PublicDiagnostic } from \"../../diagnostics.js\";\n\nexport interface PrLimits {\n readonly maxArguments: number;\n readonly maxArgumentBytes: number;\n readonly maxFiles: number;\n readonly maxColumns: number;\n readonly maxPageLines: number;\n readonly maxPageWidth: number;\n readonly maxPages: number;\n readonly maxInputBytes: number;\n readonly maxBufferedBytes: number;\n readonly maxLineBytes: number;\n readonly maxLines: number;\n readonly maxOutputBytes: number;\n readonly maxDiagnosticBytes: number;\n readonly maxWork: number;\n readonly maxEmptyChunks: number;\n}\n\nexport interface PrCommandsOptions {\n readonly replace?: boolean;\n readonly clock?: () => number;\n readonly limits?: Partial<PrLimits>;\n}\n\nexport function settings(options: PrCommandsOptions): PrLimits {\n const limits: PrLimits = {\n maxArguments: 4096, maxArgumentBytes: 65_536, maxFiles: 128, maxColumns: 128,\n maxPageLines: 65_536, maxPageWidth: 65_536, maxPages: 65_536,\n maxInputBytes: 33_554_432, maxBufferedBytes: 16_777_216,\n maxLineBytes: 1_048_576, maxLines: 1_048_576, maxOutputBytes: 67_108_864,\n maxDiagnosticBytes: 65_536, maxWork: 134_217_728, maxEmptyChunks: 4096, ...options.limits,\n };\n for (const [name, value] of Object.entries(limits)) {\n if (!Number.isSafeInteger(value) || value < 1) throw new RangeError(`Invalid pr limit: ${name}`);\n }\n if (options.clock !== undefined && typeof options.clock !== \"function\") throw new TypeError(\"pr clock must be a function\");\n return Object.freeze(limits);\n}\n\nexport class PrError extends PublicDiagnostic {\n constructor(message: string, readonly usage = false) { super(message); }\n}\n\nexport class PrReadError extends PrError {}\n\nexport function raw(value: Uint8Array): string {\n let text = \"\";\n for (const byte of value) text += String.fromCharCode(byte);\n return text;\n}\n\nexport function bytes(value: string): Uint8Array {\n return Uint8Array.from(value, character => character.charCodeAt(0));\n}\n\nexport function pathText(value: string): string {\n try { return new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true }).decode(bytes(value)); }\n catch { throw new PrError(\"filesystem paths must be valid UTF-8\"); }\n}\n\nexport function quote(value: string): string {\n const escapes: Readonly<Record<string, string>> = { \"\\x07\": \"\\\\a\", \"\\b\": \"\\\\b\", \"\\f\": \"\\\\f\", \"\\n\": \"\\\\n\", \"\\r\": \"\\\\r\", \"\\t\": \"\\\\t\", \"\\v\": \"\\\\v\", \"\\\\\": \"\\\\\\\\\", \"'\": \"\\\\'\" };\n let result = \"'\";\n for (const character of value) {\n const code = character.charCodeAt(0);\n result += escapes[character] ?? (code >= 32 && code < 127 ? character : `\\\\${code.toString(8).padStart(3, \"0\")}`);\n }\n return `${result}'`;\n}\n\nexport function fileQuote(value: string): string {\n let safe = value.length > 0, escaped = false;\n for (const character of value) {\n const code = character.charCodeAt(0);\n if (!(character >= \"a\" && character <= \"z\" || character >= \"A\" && character <= \"Z\" || character >= \"0\" && character <= \"9\" || \"_./-\".includes(character))) safe = false;\n if (code < 32 || code >= 127) escaped = true;\n }\n if (safe) return value;\n if (!escaped) {\n if (value.includes(\"'\") && ![\"$\", \"`\", \"\\\\\", '\"'].some(character => value.includes(character))) return `\"${value}\"`;\n return `'${value.split(\"'\").join(\"'\\\\''\")}'`;\n }\n let result = \"'\", inEscape = false;\n for (const character of value) {\n const code = character.charCodeAt(0);\n if (code < 32 || code >= 127) {\n if (!inEscape) { result += \"'$'\"; inEscape = true; }\n result += quote(character).slice(1, -1);\n } else {\n if (inEscape) { result += \"''\"; inEscape = false; }\n result += character === \"'\" ? \"'\\\\''\" : character;\n }\n }\n return `${result}'`;\n}\n\nexport class Budget {\n private work = 0;\n private checkpoint = 0;\n private retained = 0;\n private input = 0;\n private lines = 0;\n private pages = 0;\n private output = 0;\n private diagnostics = 0;\n constructor(readonly context: CommandContext, readonly limits: PrLimits, readonly signal: AbortSignal) {}\n check(value: number, maximum: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0 || value > maximum) throw new PrError(`${label} limit exceeded`);\n }\n charge(amount = 1): void {\n this.signal.throwIfAborted();\n this.work += amount;\n this.check(this.work, this.limits.maxWork, \"work\");\n }\n async checkpointWork(): Promise<void> {\n this.signal.throwIfAborted();\n if (this.work - this.checkpoint >= 4096) {\n this.checkpoint = this.work;\n await yieldTurn(this.signal);\n }\n }\n retain(amount: number): void {\n this.check(this.retained + amount, this.limits.maxBufferedBytes, \"buffered bytes\");\n this.retained += amount;\n }\n admitString(length: number): void {\n this.signal.throwIfAborted();\n this.check(length, this.limits.maxWork - this.work, \"work\");\n this.check(this.retained + length * 2, this.limits.maxBufferedBytes, \"buffered bytes\");\n }\n inputBytes(amount: number): void {\n this.input += amount;\n this.check(this.input, this.limits.maxInputBytes, \"input bytes\");\n }\n line(): void { this.check(++this.lines, this.limits.maxLines, \"input lines\"); }\n page(): void { this.check(++this.pages, this.limits.maxPages, \"pages\"); this.charge(); }\n emitted(amount: number, diagnostic: boolean): void {\n if (diagnostic) {\n this.diagnostics += amount;\n this.check(this.diagnostics, this.limits.maxDiagnosticBytes, \"diagnostic bytes\");\n } else {\n this.output += amount;\n this.check(this.output, this.limits.maxOutputBytes, \"output bytes\");\n }\n if (!diagnostic) this.charge(amount);\n }\n arguments(): string[] {\n this.check(this.context.args.length, this.limits.maxArguments, \"argument count\");\n let total = 0;\n for (const argument of this.context.args) {\n total += argument.length;\n this.check(total, this.limits.maxArgumentBytes, \"argument bytes\");\n for (let offset = 0; offset < argument.length; offset++) {\n const unit = argument.charCodeAt(offset);\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const next = argument.charCodeAt(++offset);\n if (!(next >= 0xdc00 && next <= 0xdfff)) throw new PrError(\"arguments must contain well-formed Unicode\");\n } else if (unit >= 0xdc00 && unit <= 0xdfff) throw new PrError(\"arguments must contain well-formed Unicode\");\n }\n }\n total = 0;\n return getCommandArguments(this.context).values.map(argument => {\n total += shellValueByteLength(argument);\n this.check(total, this.limits.maxArgumentBytes, \"argument bytes\");\n const value = shellValueBytes(argument);\n this.charge(value.length);\n if (value.includes(0)) throw new PrError(\"NUL is not supported in arguments\");\n return raw(value);\n });\n }\n}\n", "import { FsError, resolvePath, type ByteSource, type FileStat } from \"../../contracts/index.js\";\nimport type { OutputOperation } from \"../../contracts/output.js\";\nimport { Budget, PrError, PrReadError, bytes, fileQuote, pathText } from \"./internal.js\";\n\nexport class Lifecycle {\n private readonly pending = new Set<Promise<unknown>>();\n private readonly cleanups: (() => Promise<void>)[] = [];\n private closing: Promise<void> | undefined;\n constructor(readonly budget: Budget, output: OutputOperation) { output.registerCleanup(() => this.close()); }\n cleanup(action: () => Promise<void>): void { this.assertOpen(); this.cleanups.push(action); }\n assertOpen(): void {\n this.budget.signal.throwIfAborted();\n if (this.closing) throw new PrError(\"command is closed\");\n }\n async operation<Value>(action: () => Value | Promise<Value>, diagnostic = false): Promise<Value> {\n this.assertOpen();\n if (!diagnostic) this.budget.charge();\n const pending = Promise.resolve().then(() => { this.assertOpen(); return action(); });\n this.pending.add(pending);\n try { const value = await pending; this.assertOpen(); return value; }\n finally { this.pending.delete(pending); }\n }\n close(): Promise<void> {\n return this.closing ??= Promise.resolve().then(async () => {\n while (this.pending.size) await Promise.allSettled([...this.pending]);\n const failures: unknown[] = [];\n for (const cleanup of this.cleanups) {\n try { await cleanup(); } catch (error) { failures.push(error); }\n }\n if (failures.length === 1) throw failures[0];\n if (failures.length > 1) throw new AggregateError(failures, \"pr cleanup failed\");\n });\n }\n async write(value: string, diagnostic = false): Promise<void> {\n const { budget } = this;\n budget.emitted(value.length, diagnostic);\n await this.operation(async () => {\n if (!diagnostic) budget.retain(value.length * 3);\n try {\n const sink = diagnostic ? budget.context.stderr : budget.context.stdout;\n this.assertOpen();\n const destination = sink.ownedOutput ?? sink;\n this.assertOpen();\n const write = destination.write;\n this.assertOpen();\n await Reflect.apply(write, destination, [bytes(value)]);\n } finally { if (!diagnostic) budget.retain(-value.length * 3); }\n }, diagnostic);\n }\n}\n\nexport class Reader {\n private iterator: AsyncIterator<Uint8Array> | undefined;\n private chunk: Uint8Array = new Uint8Array();\n private offset = 0;\n private pushed = -1;\n private ended = false;\n private empties = 0;\n private length = 0;\n private snapshotBytes = 0;\n private path: string | undefined;\n stat: FileStat | undefined;\n constructor(readonly name: string, readonly lifecycle: Lifecycle) {\n lifecycle.cleanup(async () => {\n try { if (!this.ended) await this.iterator?.return?.(); }\n finally {\n this.iterator = undefined;\n this.releaseSnapshot();\n lifecycle.budget.retain(-this.chunk.length);\n this.chunk = new Uint8Array();\n }\n });\n }\n private readonly releaseSnapshot = (): void => {\n this.lifecycle.budget.retain(-this.snapshotBytes);\n this.snapshotBytes = 0;\n };\n async open(): Promise<void> {\n if (this.name === \"-\") return;\n const { budget } = this.lifecycle;\n this.path = resolvePath(budget.context.cwd, pathText(this.name));\n this.stat = await this.lifecycle.operation(() => {\n const fs = budget.context.fs;\n this.lifecycle.assertOpen();\n const stat = fs.stat;\n this.lifecycle.assertOpen();\n return Reflect.apply(stat, fs, [this.path!, { signal: budget.signal }]);\n });\n if (this.stat.type !== \"file\" && this.stat.type !== \"directory\" && this.stat.type !== \"character\") throw new FsError(\"ENOTSUP\", { path: this.path });\n }\n private async acquire(): Promise<void> {\n const { budget } = this.lifecycle;\n await this.lifecycle.operation(async () => {\n let source: ByteSource;\n let needsAcquisitionCleanup = false;\n if (this.path === undefined) source = budget.context.stdin;\n else {\n const fs = budget.context.fs;\n this.lifecycle.assertOpen();\n const capabilitiesFor = fs.capabilitiesFor;\n this.lifecycle.assertOpen();\n const selected = capabilitiesFor ? await Reflect.apply(capabilitiesFor, fs, [this.path, { signal: budget.signal }]) : undefined;\n this.lifecycle.assertOpen();\n const capabilities = selected ?? fs.capabilities;\n this.lifecycle.assertOpen();\n const readStream = fs.readStream;\n this.lifecycle.assertOpen();\n const streamingRead = readStream && capabilities.streamingRead !== false;\n this.lifecycle.assertOpen();\n if (readStream && streamingRead) {\n source = Reflect.apply(readStream, fs, [this.path, { signal: budget.signal, chunkSize: 16_384 }]);\n needsAcquisitionCleanup = budget.signal.aborted;\n }\n else {\n const maximum = Math.min(budget.limits.maxInputBytes, Math.floor(budget.limits.maxBufferedBytes / 2));\n budget.check(this.stat!.size, maximum, \"buffered input bytes\");\n budget.retain(maximum);\n this.snapshotBytes = maximum;\n const readFile = fs.readFile;\n this.lifecycle.assertOpen();\n const content = await Reflect.apply(readFile, fs, [this.path, { signal: budget.signal, maxBytes: maximum }]);\n if (!(content instanceof Uint8Array)) throw new TypeError(\"pr input requires bytes\");\n budget.check(content.length, maximum, \"buffered input bytes\");\n budget.retain(content.length - maximum);\n this.snapshotBytes = content.length;\n const { releaseSnapshot } = this;\n source = { async *[Symbol.asyncIterator]() { try { yield content; } finally { releaseSnapshot(); } } };\n }\n }\n if (!needsAcquisitionCleanup) this.lifecycle.assertOpen();\n const factory = source[Symbol.asyncIterator];\n if (!needsAcquisitionCleanup) this.lifecycle.assertOpen();\n this.iterator = Reflect.apply(factory, source, []);\n });\n }\n unget(value: number): void { this.pushed = value; }\n async get(): Promise<number> {\n const { budget } = this.lifecycle;\n budget.charge();\n await budget.checkpointWork();\n if (this.stat?.type === \"directory\") throw new PrReadError(`${fileQuote(this.name)}: Is a directory`);\n if (this.pushed >= 0) { const value = this.pushed; this.pushed = -1; return value; }\n while (this.offset === this.chunk.length) {\n if (this.ended) return -1;\n let next: IteratorResult<Uint8Array>;\n try {\n if (!this.iterator) await this.acquire();\n next = await this.lifecycle.operation(() => {\n const iterator = this.iterator!;\n const advance = iterator.next;\n this.lifecycle.assertOpen();\n return Reflect.apply(advance, iterator, []);\n });\n } catch (error) {\n if (error instanceof FsError) throw new PrReadError(`${fileQuote(this.name === \"-\" ? \"standard input\" : this.name)}: ${fsDetail(error)}`);\n throw error;\n }\n budget.retain(-this.chunk.length);\n this.chunk = new Uint8Array();\n this.offset = 0;\n if (next.done) {\n this.ended = true;\n this.iterator = undefined;\n if (this.length > 0) { this.length = 0; budget.line(); }\n return -1;\n }\n if (!(next.value instanceof Uint8Array)) throw new TypeError(\"pr input requires bytes\");\n budget.inputBytes(next.value.length);\n budget.retain(next.value.length);\n this.chunk = Uint8Array.from(next.value);\n if (!this.chunk.length) budget.check(++this.empties, budget.limits.maxEmptyChunks, \"empty input chunks\");\n }\n const value = this.chunk[this.offset++]!;\n if (value === 10 || value === 12) { this.length = 0; budget.line(); }\n else budget.check(++this.length, budget.limits.maxLineBytes, \"input line bytes\");\n return value;\n }\n}\n\nexport function fsDetail(error: FsError): string {\n const details: Partial<Record<FsError[\"code\"], string>> = {\n EACCES: \"Permission denied\", EPERM: \"Operation not permitted\", ENOENT: \"No such file or directory\",\n EISDIR: \"Is a directory\", ENOTDIR: \"Not a directory\", EIO: \"Input/output error\", ELOOP: \"Too many levels of symbolic links\",\n ENAMETOOLONG: \"File name too long\", ENOTSUP: \"Operation not supported\",\n };\n return details[error.code] ?? error.message;\n}\n", "import { Budget, PrError, quote } from \"./internal.js\";\n\nexport interface Options {\n files: string[];\n columns: number;\n explicitColumns: boolean;\n merge: boolean;\n across: boolean;\n length: number;\n width: number;\n header: string | undefined;\n extremities: boolean;\n keepFF: boolean;\n formFeed: boolean;\n numbered: boolean;\n digits: number;\n numberSeparator: string;\n startNumber: number;\n separator: string;\n useSeparator: boolean;\n truncate: boolean;\n join: boolean;\n doubleSpace: boolean;\n margin: number;\n expand: boolean;\n tabify: boolean;\n inputTab: string;\n inputTabWidth: number;\n outputTab: string;\n outputTabWidth: number;\n control: boolean;\n octal: boolean;\n quiet: boolean;\n information: \"help\" | \"version\" | undefined;\n}\n\nfunction digit(value: string): boolean { return value >= \"0\" && value <= \"9\"; }\n\nfunction integer(value: string, minimum: number, label: string): number {\n let offset = 0;\n while (\" \\t\\r\\n\\v\\f\".includes(value[offset] ?? \"!\") && offset < value.length) offset++;\n if (value[offset] === \"+\" || value[offset] === \"-\") offset++;\n const start = offset;\n while (offset < value.length && digit(value[offset]!)) offset++;\n if (offset !== value.length || offset === start) throw new PrError(`${label}: ${quote(value)}`);\n const result = Number(value);\n if (result < minimum || result > 2147483647 || !Number.isSafeInteger(result)) throw new PrError(`${label}: ${quote(value)}: Numerical result out of range`);\n return result;\n}\n\nexport function parseOptions(args: string[], budget: Budget): Options {\n const options: Options = {\n files: [], columns: 1, explicitColumns: false, merge: false, across: false,\n length: 66, width: 72, header: undefined, extremities: true, keepFF: false,\n formFeed: false, numbered: false, digits: 5, numberSeparator: \"\\t\", startNumber: 1,\n separator: \"\", useSeparator: false, truncate: false, join: false, doubleSpace: false,\n margin: 0, expand: false, tabify: false, inputTab: \"\\t\", inputTabWidth: 8,\n outputTab: \"\\t\", outputTabWidth: 8, control: false, octal: false, quiet: false, information: undefined,\n };\n const long: Record<string, string> = {\n columns: \"#\", across: \"a\", \"show-control-chars\": \"c\", \"double-space\": \"d\", \"expand-tabs\": \"e\",\n \"form-feed\": \"f\", header: \"h\", \"output-tabs\": \"i\", \"join-lines\": \"J\", length: \"l\", merge: \"m\",\n \"number-lines\": \"n\", \"first-line-number\": \"N\", indent: \"o\", \"no-file-warnings\": \"r\", separator: \"s\",\n \"sep-string\": \"S\", \"omit-header\": \"t\", \"omit-pagination\": \"T\", \"show-nonprinting\": \"v\", width: \"w\", \"page-width\": \"W\",\n };\n let oldWidth = false, oldSeparator = false, oldOptions = false, stop = false;\n let columnDigits: string | undefined;\n let accumulating = false;\n for (let index = 0; index < args.length; index++) {\n const argument = args[index]!;\n budget.charge(argument.length);\n if (stop) { options.files.push(argument); continue; }\n if (argument === \"--\") { stop = true; continue; }\n if (argument === \"--help\" || argument === \"--version\") {\n options.information = argument === \"--help\" ? \"help\" : \"version\";\n return options;\n }\n if (!argument.startsWith(\"-\") || argument === \"-\") { accumulating = false; options.files.push(argument); continue; }\n const isLong = argument.startsWith(\"--\");\n let switches = argument.slice(1), attached: string | undefined;\n if (isLong) {\n const equal = argument.indexOf(\"=\");\n const name = argument.slice(2, equal < 0 ? undefined : equal);\n const candidates = Object.keys(long).filter(candidate => candidate.startsWith(name));\n if (!Object.hasOwn(long, name) && candidates.length > 1) throw new PrError(`option ${quote(argument)} is ambiguous; possibilities:${candidates.map(candidate => ` '--${candidate}'`).join(\"\")}`, true);\n switches = long[name] ?? (candidates.length === 1 ? long[candidates[0]!] : undefined) ?? \"\";\n if (!switches) throw new PrError(`unrecognized option ${quote(argument)}`, true);\n if (equal >= 0) attached = argument.slice(equal + 1);\n }\n for (let offset = 0; offset < switches.length; offset++) {\n const option = switches[offset]!;\n if (digit(option)) {\n columnDigits = (accumulating ? columnDigits ?? \"\" : \"\") + option;\n accumulating = true;\n continue;\n }\n accumulating = false;\n const required = \"#hlwWNo\".includes(option);\n const optional = \"nseiS\".includes(option);\n let value = attached;\n if (required || optional) {\n if (!isLong && offset + 1 < switches.length) value = switches.slice(offset + 1);\n if (required && value === undefined) {\n value = args[++index];\n if (value === undefined) throw new PrError(isLong ? `option ${quote(argument)} requires an argument` : `option requires an argument -- '${option}'`, true);\n }\n offset = switches.length;\n } else if (attached !== undefined) throw new PrError(`option ${quote(argument.slice(0, argument.indexOf(\"=\")))} doesn't allow an argument`, true);\n switch (option) {\n case \"#\": options.columns = integer(value!, 1, \"invalid number of columns\"); options.explicitColumns = true; columnDigits = undefined; break;\n case \"h\": options.header = value; break;\n case \"l\": options.length = integer(value!, 1, \"'-l PAGE_LENGTH' invalid number of lines\"); break;\n case \"w\": oldWidth = true; oldOptions = true; {\n const width = integer(value!, 1, \"'-w PAGE_WIDTH' invalid number of characters\");\n if (!options.truncate) options.width = width;\n } break;\n case \"W\": oldWidth = false; options.truncate = true; options.width = integer(value!, 1, \"'-W PAGE_WIDTH' invalid number of characters\"); break;\n case \"m\": options.merge = true; break;\n case \"a\": options.across = true; break;\n case \"b\": break;\n case \"d\": options.doubleSpace = true; break;\n case \"f\": case \"F\": options.formFeed = true; break;\n case \"J\": options.join = true; break;\n case \"N\": options.startNumber = integer(value!, -2147483648, \"'-N NUMBER' invalid starting line number\"); break;\n case \"o\": options.margin = integer(value!, 0, \"'-o MARGIN' invalid line offset\"); break;\n case \"r\": options.quiet = true; break;\n case \"s\": oldOptions = true; oldSeparator = true; if (!options.useSeparator && value !== undefined) options.separator = value; break;\n case \"S\": oldSeparator = false; options.useSeparator = true; options.separator = value ?? \"\"; break;\n case \"t\": options.extremities = false; options.keepFF = true; break;\n case \"T\": options.extremities = false; options.keepFF = false; break;\n case \"c\": options.control = true; break;\n case \"v\": options.octal = true; break;\n case \"n\": case \"e\": case \"i\": {\n if (option === \"n\") options.numbered = true;\n if (option === \"e\") options.expand = true;\n if (option === \"i\") options.tabify = true;\n if (value === undefined || !value.length) break;\n let character: string | undefined;\n if (!digit(value[0]!)) { character = value[0]; value = value.slice(1); }\n let count: number | undefined;\n if (value.length) {\n try { count = integer(value, 1, \"invalid number\"); }\n catch { throw new PrError(`'-${option}' extra characters or invalid number in the argument: ${quote(value)}${Number(value) > 2147483647 ? \": Value too large for defined data type\" : \"\"}`, true); }\n }\n if (option === \"n\") { options.numberSeparator = character ?? options.numberSeparator; options.digits = count ?? options.digits; }\n if (option === \"e\") { options.inputTab = character ?? options.inputTab; options.inputTabWidth = count ?? options.inputTabWidth; }\n if (option === \"i\") { options.outputTab = character ?? options.outputTab; options.outputTabWidth = count ?? options.outputTabWidth; }\n break;\n }\n default: throw new PrError(`invalid option -- '${option}'`, true);\n }\n }\n }\n if (columnDigits !== undefined) { options.columns = integer(columnDigits, 1, \"invalid number of columns\"); options.explicitColumns = true; }\n if (options.merge && options.explicitColumns) throw new PrError(\"cannot specify number of columns when printing in parallel\");\n if (options.merge && options.across) throw new PrError(\"cannot specify both printing across and printing in parallel\");\n if (oldOptions) {\n if (oldWidth) {\n if (options.merge || options.explicitColumns) { options.truncate = true; if (oldSeparator) options.useSeparator = true; }\n else options.join = true;\n } else if (!options.useSeparator && oldSeparator && (options.merge || options.explicitColumns)) {\n if (!options.truncate) { options.join = true; if (options.separator.length) options.useSeparator = true; }\n else options.useSeparator = true;\n }\n }\n const { limits } = budget;\n budget.check(options.files.length, limits.maxFiles, \"input files\");\n budget.check(options.merge ? Math.max(1, options.files.length) : options.columns, limits.maxColumns, \"columns\");\n budget.check(options.length, limits.maxPageLines, \"page lines\");\n for (const width of [options.width, options.margin, options.digits, options.inputTabWidth, options.outputTabWidth]) budget.check(width, limits.maxPageWidth, \"page width\");\n return options;\n}\n", "import { Budget, PrError, PrReadError } from \"./internal.js\";\nimport { Lifecycle, Reader } from \"./io.js\";\nimport type { Options } from \"./options.js\";\n\ninterface StoredLine { text: string; end: number }\ninterface Column {\n reader: Reader;\n status: \"open\" | \"held\" | \"feed\" | \"closed\";\n full: boolean;\n numbered: boolean;\n start: number;\n lines: StoredLine[];\n current: number;\n remaining: number;\n}\n\nexport class Formatter {\n private readonly budget: Budget;\n private readonly body: number;\n private readonly columnWidth: number;\n private readonly numberWidth: number;\n private readonly store: boolean;\n private columns: Column[] = [];\n private lineNumber: number;\n private pageNumber = 1;\n private inputPosition = 0;\n private outputPosition = 0;\n private spaces = 0;\n private separators = 0;\n private padding = 0;\n private vertical = false;\n private empty = true;\n private alignEmpty = false;\n private feedOnly = false;\n private printFeed = false;\n private needHeader = false;\n private storing = false;\n private stored = \"\";\n private rendered = \"\";\n private pageRetained = 0;\n\n constructor(private readonly options: Options, private readonly lifecycle: Lifecycle, count: number) {\n this.budget = lifecycle.budget;\n if (options.length <= 10) { options.extremities = false; options.keepFF = true; }\n this.body = Math.floor((options.extremities ? options.length - 10 : options.length) / (options.doubleSpace ? 2 : 1));\n if (this.body < 1) throw new PrError(\"page has no text lines\");\n options.columns = options.merge ? count : options.columns;\n if (options.columns > 1) {\n if (!options.useSeparator) { options.useSeparator = true; options.separator = options.join ? \"\\t\" : \" \"; }\n else if (!options.join && options.separator === \"\\t\") options.separator = \" \";\n options.truncate = true;\n options.tabify = true;\n }\n if (options.join) options.truncate = false;\n this.numberWidth = options.numberSeparator === \"\\t\" ? options.digits + 8 - options.digits % 8 : options.digits + 1;\n this.columnWidth = Math.trunc((options.width - (options.merge && options.numbered ? this.numberWidth : 0) - (options.columns - 1) * options.separator.length) / options.columns);\n if (this.columnWidth < 1) throw new PrError(\"page width too narrow\");\n this.store = options.columns > 1 && !options.merge && !options.across;\n this.lineNumber = options.startNumber;\n lifecycle.cleanup(async () => {\n this.budget.retain(-this.pageRetained - this.rendered.length * 2);\n this.pageRetained = 0;\n this.rendered = \"\";\n this.columns = [];\n });\n }\n\n private append(value: string): void {\n this.budget.charge(value.length);\n this.budget.retain(value.length * 2);\n this.rendered += value;\n }\n private repeat(value: string, count: number, construction = false): string {\n this.budget.admitString(value.length * count);\n if (construction) this.budget.charge(value.length * count);\n return value.repeat(count);\n }\n private async flush(): Promise<void> {\n const text = this.rendered;\n this.rendered = \"\";\n this.budget.retain(-text.length * 2);\n if (text) await this.lifecycle.write(text);\n }\n private white(): void {\n let position = this.outputPosition;\n const goal = position + this.spaces;\n this.budget.check(Math.max(0, this.spaces), this.budget.limits.maxBufferedBytes, \"horizontal padding\");\n while (goal - position > 1) {\n const next = position + this.options.outputTabWidth - position % this.options.outputTabWidth;\n if (next > goal) break;\n this.append(this.options.outputTab);\n position = next;\n }\n if (goal > position) this.append(this.repeat(\" \", goal - position));\n this.outputPosition = goal;\n this.spaces = 0;\n }\n private pad(position: number): void {\n if (this.options.tabify) this.spaces = position - this.outputPosition;\n else {\n if (position > this.outputPosition) this.append(this.repeat(\" \", position - this.outputPosition));\n this.outputPosition = position;\n }\n }\n private separator(): void {\n if (this.separators <= 0) { if (this.spaces > 0) this.white(); return; }\n let offset = 0;\n for (; this.separators > 0; this.separators--) {\n while (offset < this.options.separator.length) {\n const character = this.options.separator[offset++]!;\n if (character === \" \") this.spaces++;\n else { if (this.spaces > 0) this.white(); this.append(character); this.outputPosition++; }\n }\n if (this.spaces > 0) this.white();\n }\n }\n private character(character: string): void {\n if (this.storing) {\n this.budget.charge(character.length);\n this.budget.retain(character.length * 2);\n this.pageRetained += character.length * 2;\n this.stored += character;\n return;\n }\n if (this.options.tabify) {\n if (character === \" \") { this.spaces++; return; }\n if (this.spaces > 0) this.white();\n if (character >= \" \" && character <= \"~\") this.outputPosition++;\n else if (character === \"\\b\") this.outputPosition--;\n }\n this.append(character);\n }\n private number(column: Column): void {\n this.budget.admitString(this.options.digits);\n const text = String(this.lineNumber++).padStart(this.options.digits, \" \").slice(-this.options.digits);\n for (const character of text) this.character(character);\n if (this.columns.length > 1 && this.options.numberSeparator === \"\\t\") {\n for (let count = this.numberWidth - this.options.digits; count > 0; count--) this.character(\" \");\n } else {\n this.character(this.options.numberSeparator);\n if (this.columns.length === 1 && this.options.numberSeparator === \"\\t\") this.outputPosition += this.options.outputTabWidth - this.outputPosition % this.options.outputTabWidth;\n }\n if (this.options.truncate && !this.options.merge) this.inputPosition += this.numberWidth;\n this.budget.charge(column.numbered ? 1 : 0);\n }\n private align(column: Column): void {\n this.padding = column.start;\n if (this.options.separator.length < this.padding) { this.pad(this.padding - this.options.separator.length); this.padding = 0; }\n if (this.options.useSeparator) this.separator();\n if (column.numbered) this.number(column);\n }\n private clump(byte: number): string {\n const character = String.fromCharCode(byte);\n let width: number;\n let text = character;\n if (character === this.options.inputTab || byte === 9) {\n const tab = character === this.options.inputTab ? this.options.inputTabWidth : 8;\n width = tab - this.inputPosition % tab;\n if (this.options.expand) text = this.repeat(\" \", width, true);\n } else if (byte < 32 || byte > 126) {\n if (this.options.octal || this.options.control && byte >= 128) { text = `\\\\${byte.toString(8).padStart(3, \"0\")}`; width = 4; }\n else if (this.options.control) { text = `^${String.fromCharCode(byte ^ 64)}`; width = 2; }\n else width = byte === 8 ? -1 : 0;\n } else width = 1;\n if (width < 0 && this.inputPosition === 0) return \"\";\n this.inputPosition = Math.max(0, this.inputPosition + width);\n return text;\n }\n private close(column: Column): void {\n for (const current of this.options.merge ? [column] : this.columns) {\n current.status = \"closed\";\n if (!current.lines.length) current.remaining = 0;\n }\n }\n private hold(column: Column): void {\n for (const current of this.options.merge ? [column] : this.columns) current.status = this.store ? \"feed\" : \"held\";\n column.remaining = 0;\n }\n private async feed(column: Column): Promise<void> {\n const next = await column.reader.get();\n if (next !== 10) column.reader.unget(next);\n this.hold(column);\n }\n private async rest(column: Column): Promise<void> {\n for (;;) {\n const byte = await column.reader.get();\n if (byte === 10) return;\n if (byte === 12) { await this.feed(column); if (this.options.keepFF) this.printFeed = true; return; }\n if (byte < 0) { this.close(column); return; }\n }\n }\n private header(date: string, name: string): void {\n const { env } = this.budget.context;\n if (![undefined, \"\", \"UTC\", \"UTC0\", \":UTC\", \"GMT\", \"GMT0\"].includes(env.TZ)) throw new PrError(\"only UTC timezones are supported for headers\");\n const ctype = env.LC_ALL || env.LC_CTYPE || env.LANG || \"C\";\n if (ctype === \"C.UTF-8\" || ctype === \"C.utf8\") {\n for (const character of name) if (character.charCodeAt(0) >= 128) throw new PrError(\"non-ASCII headers require the C locale\");\n }\n this.outputPosition = 0;\n this.pad(this.options.margin);\n this.white();\n const width = (text: string): number => {\n this.budget.charge(text.length);\n let result = 0;\n for (const character of text) if (character >= \" \" && character !== \"\\x7f\") result++;\n return result;\n };\n const page = `Page ${this.pageNumber}`;\n const available = Math.max(0, this.options.width - width(date) - width(name) - width(page));\n const left = Math.floor(available / 2);\n this.budget.admitString(5 + this.options.margin + date.length + name.length + page.length + Math.max(1, left) + Math.max(1, available - left));\n this.append(`\\n\\n${this.repeat(\" \", this.options.margin)}${date}${this.repeat(\" \", Math.max(1, left))}${name}${this.repeat(\" \", Math.max(1, available - left))}${page}\\n\\n\\n`);\n this.needHeader = false;\n this.outputPosition = 0;\n }\n private async read(column: Column, date: string, name: string): Promise<void> {\n let byte = await column.reader.get();\n if (byte === 12 && column.full) { byte = await column.reader.get(); if (byte === 10) byte = await column.reader.get(); }\n column.full = false;\n if (byte === 12) {\n await this.feed(column);\n this.feedOnly = true;\n if (this.needHeader && !this.store) { this.vertical = true; this.header(date, name); }\n else if (this.options.keepFF) this.printFeed = true;\n return;\n }\n if (byte < 0) { this.close(column); return; }\n let clump = byte === 10 ? \"\" : this.clump(byte);\n if (this.options.truncate && this.inputPosition > this.columnWidth) { this.inputPosition = 0; await this.rest(column); return; }\n if (!this.storing) {\n this.vertical = true;\n if (this.needHeader && !this.store) this.header(date, name);\n if (this.options.merge && this.alignEmpty) {\n const pending = this.separators;\n this.separators = 0;\n for (let index = 0; index < pending; index++) { this.align(this.columns[index]!); this.separators++; }\n this.padding = column.start;\n this.spaces = this.options.truncate ? this.columnWidth : 0;\n this.alignEmpty = false;\n }\n if (this.options.separator.length < this.padding) { this.pad(this.padding - this.options.separator.length); this.padding = 0; }\n if (this.options.useSeparator) this.separator();\n }\n if (column.numbered) this.number(column);\n this.empty = false;\n if (byte === 10) return;\n for (const character of clump) this.character(character);\n for (;;) {\n byte = await column.reader.get();\n if (byte === 10) return;\n if (byte === 12) { await this.feed(column); if (this.options.keepFF) this.printFeed = true; return; }\n if (byte < 0) { this.close(column); return; }\n const previous = this.inputPosition;\n clump = this.clump(byte);\n if (this.options.truncate && this.inputPosition > this.columnWidth) { this.inputPosition = previous; await this.rest(column); return; }\n for (const character of clump) this.character(character);\n }\n }\n private ready(): boolean {\n return this.columns.some(column => column.status === \"open\" || column.status === \"feed\" || this.store && column.remaining > 0 && column.lines.length > 0);\n }\n private async storePage(date: string, name: string): Promise<void> {\n this.budget.retain(-this.pageRetained);\n this.pageRetained = 0;\n const lines: StoredLine[] = [];\n this.storing = true;\n for (const column of this.columns) { column.lines = []; column.current = 0; }\n try {\n for (const column of this.columns) {\n for (let count = 0; count < this.body && column.status === \"open\"; count++) {\n this.stored = \"\";\n this.inputPosition = 0;\n await this.read(column, date, name);\n if (column.status === \"open\" || this.stored.length) {\n this.budget.retain(32);\n this.pageRetained += 32;\n lines.push({ text: this.stored, end: this.inputPosition });\n }\n }\n }\n } finally { this.storing = false; }\n let start = 0;\n for (let index = 0; index < this.columns.length; index++) {\n const column = this.columns[index]!;\n const count = Math.floor(lines.length / this.columns.length) + (index < lines.length % this.columns.length ? 1 : 0);\n column.lines = lines.slice(start, start + count);\n column.remaining = count;\n start += count;\n }\n }\n private storedLine(column: Column, date: string, name: string): void {\n this.vertical = true;\n if (this.needHeader) this.header(date, name);\n if (column.status === \"feed\") {\n for (const current of this.columns) current.status = \"held\";\n if (this.columns[0]!.remaining <= 0) { if (!this.options.extremities) this.vertical = false; return; }\n }\n const line = column.lines[column.current++];\n if (!line) return;\n if (this.options.separator.length < this.padding) { this.pad(this.padding - this.options.separator.length); this.padding = 0; }\n if (this.options.useSeparator) this.separator();\n for (const character of line.text) this.character(character);\n if (this.spaces === 0) {\n this.outputPosition = column.start + line.end;\n if (column.start - this.options.separator.length === this.options.margin) this.outputPosition -= this.options.separator.length;\n }\n }\n async run(readers: Reader[], date: string, name: string): Promise<void> {\n const count = this.options.merge ? readers.length : this.options.columns;\n for (let index = 0; index < count; index++) {\n const start = index === 0 ? this.options.margin + this.options.separator.length : this.options.truncate\n ? this.options.margin + index * (this.columnWidth + this.options.separator.length) + (this.options.merge && this.options.numbered ? this.numberWidth : 0) : 0;\n this.columns.push({ reader: readers[this.options.merge ? index : 0]!, status: \"open\", full: false,\n numbered: this.options.numbered && (!this.options.merge || index === 0), start,\n lines: [], current: 0, remaining: 0 });\n }\n try { await this.pages(date, name); }\n catch (error) { if (error instanceof PrReadError) await this.flush(); throw error; }\n }\n private async pages(date: string, name: string): Promise<void> {\n for (;;) {\n if (this.store) await this.storePage(date, name);\n else for (const column of this.columns) column.remaining = column.status === \"open\" ? this.body : 0;\n if (!this.ready()) return;\n this.budget.page();\n this.needHeader = this.options.extremities;\n let printed = false;\n let left = this.body * (this.options.doubleSpace ? 2 : 1);\n while (left > 0 && this.ready()) {\n this.outputPosition = 0; this.spaces = 0; this.separators = 0; this.vertical = false; this.alignEmpty = false; this.empty = true;\n for (const column of this.columns) {\n this.budget.charge();\n this.inputPosition = 0;\n if (column.remaining > 0 || column.status === \"feed\") {\n this.feedOnly = false;\n this.padding = column.start;\n if (this.store) this.storedLine(column, date, name);\n else await this.read(column, date, name);\n printed ||= this.vertical;\n column.remaining--;\n if (column.remaining <= 0 && !this.ready()) break;\n if (this.options.merge && column.status !== \"open\") {\n if (this.empty) this.alignEmpty = true;\n else if (column.status === \"closed\" || this.feedOnly) this.align(column);\n }\n } else if (this.options.merge) { if (this.empty) this.alignEmpty = true; else this.align(column); }\n if (this.options.useSeparator) this.separators++;\n }\n if (this.vertical) { this.append(\"\\n\"); left--; }\n if (!this.ready() && !this.options.extremities) { await this.flush(); break; }\n if (this.options.doubleSpace && printed) { this.append(\"\\n\"); left--; }\n await this.flush();\n }\n if (left === 0) for (const column of this.columns) if (column.status === \"open\") column.full = true;\n if (printed && this.options.extremities) this.append(this.options.formFeed ? \"\\f\" : this.repeat(\"\\n\", left + 5));\n else if (this.options.keepFF && this.printFeed) { this.append(\"\\f\"); this.printFeed = false; }\n await this.flush();\n this.pageNumber++;\n for (const column of this.columns) if (column.status === \"held\") column.status = \"open\";\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["value"]
|
|
7
|
+
}
|