@poe-platform/safe-bash 0.1.787 → 0.1.789
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/README.md +1 -1
- package/dist/safe-bash/chunks/{chunk-WHURJBET.js → chunk-2MUJ7RLZ.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-PYTLIUST.js → chunk-CTUHLNJM.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-Z3HX3ZBA.js → chunk-D4PHJK4T.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-O6356Z27.js → chunk-H7MMJS26.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-Q3E6C3DX.js → chunk-KHJGUF2W.js} +14 -0
- package/dist/safe-bash/chunks/{chunk-FJZNUUOQ.js → chunk-VUVKC6HV.js} +1 -1
- package/dist/safe-bash/chunks/{chunk-ZMYVCRAF.js → chunk-X5ZCECM6.js} +2 -2
- package/dist/safe-bash/chunks/{git-UFNPAOYZ.js → git-HO7WDPHZ.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-PFBJR2PY.js → chunk-2KRKKW5S.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-4DSJDVBM.js → chunk-32F3RBUW.js} +10 -749
- package/dist/safe-bash/command-chunks/{chunk-WVWWRMFD.js → chunk-3KROFHBT.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-L3MLMXL4.js → chunk-3ZK5F23O.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-4QX6XCDD.js → chunk-4RNIZ3RT.js} +79 -0
- package/dist/safe-bash/command-chunks/{chunk-IFUNAM4D.js → chunk-5L62A5RO.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-D7TADAYG.js → chunk-64LG3EVJ.js} +17 -0
- package/dist/safe-bash/command-chunks/{chunk-JUDOV5MJ.js → chunk-6F7QJMJ3.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-IJ3FXP4Q.js → chunk-A3ZX6SCY.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-DREUDEQG.js → chunk-AT6ZSOE6.js} +3 -3
- package/dist/safe-bash/command-chunks/{chunk-BUKYQBXO.js → chunk-BJ6DGYJA.js} +12 -12
- package/dist/safe-bash/command-chunks/{chunk-KSIGF4AG.js → chunk-BK4CMEE6.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-NSEUBSOD.js → chunk-CXMOCPPH.js} +2 -2
- package/dist/safe-bash/command-chunks/{chunk-XGMWWUHV.js → chunk-CZ5DAK4K.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-Z57TV6TC.js → chunk-EZ2DTOLI.js} +4 -2
- package/dist/safe-bash/command-chunks/{chunk-ADCGH6A7.js → chunk-FH3D75FC.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-WYJTWJZ5.js → chunk-G3G6W5ZE.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-3HDIDEUJ.js → chunk-GF54KE2M.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-3JS4FOLB.js → chunk-HETU7MYN.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-Z7TYZG3A.js → chunk-IHHTTQX6.js} +5 -3
- package/dist/safe-bash/command-chunks/{chunk-INDIFLBW.js → chunk-JTAGNROA.js} +4 -0
- package/dist/safe-bash/command-chunks/{chunk-Z47EO74H.js → chunk-MYKK3Q5G.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-GZOUGVVV.js → chunk-OYZ534IK.js} +1 -1
- package/dist/safe-bash/command-chunks/chunk-PGEYORBZ.js +25 -0
- package/dist/safe-bash/command-chunks/chunk-QM4UZF3C.js +753 -0
- package/dist/safe-bash/command-chunks/{chunk-TOSM3T3A.js → chunk-UJOO6DKY.js} +20 -9
- package/dist/safe-bash/command-chunks/{chunk-TFZEYNMX.js → chunk-VQLFJCG7.js} +1 -1
- package/dist/safe-bash/command-chunks/{chunk-BIXN77VL.js → chunk-VUG324ER.js} +10 -0
- package/dist/safe-bash/command-chunks/{chunk-2LP3VMPA.js → chunk-WFDW4XXD.js} +1 -17
- package/dist/safe-bash/command-chunks/chunk-WR37IS4O.js +318 -0
- package/dist/safe-bash/command-chunks/{chunk-Y5IHIAY3.js → chunk-XNHSCU6I.js} +7 -3
- package/dist/safe-bash/commands/basic.js +148 -48
- package/dist/safe-bash/commands/bytes/compression/index.js +5 -6
- package/dist/safe-bash/commands/cmp.d.ts +2 -3
- package/dist/safe-bash/commands/cmp.js +2 -689
- package/dist/safe-bash/commands/docx/index.browser.js +3 -46
- package/dist/safe-bash/commands/docx/index.d.ts +2 -24
- package/dist/safe-bash/commands/docx/index.js +2 -41
- package/dist/safe-bash/commands/docx/io.d.ts +1 -14
- package/dist/safe-bash/commands/docx/io.js +1 -15
- package/dist/safe-bash/commands/llm/index.browser.js +3 -3
- package/dist/safe-bash/commands/network/index.browser.js +3 -3
- package/dist/safe-bash/commands/node/index.browser.js +3 -3
- package/dist/safe-bash/commands/pptx/index.d.ts +2 -28
- package/dist/safe-bash/commands/pptx/index.js +2 -152
- package/dist/safe-bash/commands/printf-float.d.ts +1 -0
- package/dist/safe-bash/commands/printf-float.js +48 -38
- package/dist/safe-bash/commands/printf-format.js +9 -6
- package/dist/safe-bash/commands/printf-quote.d.ts +3 -0
- package/dist/safe-bash/commands/printf-quote.js +62 -0
- package/dist/safe-bash/commands/printf-wide.d.ts +5 -0
- package/dist/safe-bash/commands/printf-wide.js +41 -0
- package/dist/safe-bash/commands/python/index.browser.js +2 -2
- package/dist/safe-bash/commands/truncate.d.ts +2 -3
- package/dist/safe-bash/commands/truncate.js +2 -686
- package/dist/safe-bash/contracts/diagnostics.d.ts +2 -0
- package/dist/safe-bash/contracts/diagnostics.js +2 -0
- package/dist/safe-bash/contracts/runtime-control.d.ts +2 -0
- package/dist/safe-bash/contracts/runtime-control.js +2 -0
- package/dist/safe-bash/core.browser.d.ts +1 -1
- package/dist/safe-bash/core.browser.js +2651 -4871
- package/dist/safe-bash/core.d.ts +10 -0
- package/dist/safe-bash/opt-in/commands/cmp/index.d.ts +6 -2
- package/dist/safe-bash/opt-in/commands/cmp/index.js +776 -79
- package/dist/safe-bash/opt-in/commands/cmp/options.d.ts +0 -12
- package/dist/safe-bash/opt-in/commands/cmp/options.js +0 -153
- package/dist/safe-bash/opt-in/commands/truncate/index.d.ts +8 -3
- package/dist/safe-bash/opt-in/commands/truncate/index.js +790 -272
- package/dist/safe-bash/opt-in/commands/truncate/sync.d.ts +1 -0
- package/dist/safe-bash/opt-in/commands/truncate/sync.js +60 -0
- package/dist/safe-bash/optional-host.browser.js +9 -1
- package/dist/safe-bash/optional-host.d.ts +3 -1
- package/dist/safe-bash/optional-host.js +3 -1
- package/dist/safe-bash/shell/runtime.js +10 -6
- package/dist/safe-bash-checksum-engine/index.d.ts +1 -1
- package/dist/safe-bash-checksum-engine/index.js +14 -2
- package/dist/safe-bash-command-bzip2/index.js +2 -1
- package/dist/safe-bash-command-cmp/index.d.ts +10 -0
- package/dist/safe-bash-command-cmp/index.js +796 -0
- package/dist/safe-bash-command-cmp/options.d.ts +12 -0
- package/dist/safe-bash-command-cmp/options.js +42 -0
- package/dist/safe-bash-command-csvcut/index.js +11 -8
- package/dist/safe-bash-command-csvgrep/index.js +35 -7
- package/dist/safe-bash-command-csvkit/codecs/python.js +4 -3
- package/dist/safe-bash-command-csvkit/codecs/utf8.js +3 -2
- package/dist/safe-bash-command-csvkit/index.js +80 -324
- package/dist/safe-bash-command-csvkit/python-regex.d.ts +5 -0
- package/dist/safe-bash-command-csvkit/python-regex.js +14 -0
- package/dist/safe-bash-command-csvkit/runtime.d.ts +1 -0
- package/dist/safe-bash-command-csvkit/sync-support.js +4 -2
- package/dist/safe-bash-command-diff3/index.js +3 -0
- package/dist/safe-bash-command-docx/LICENSE +21 -0
- package/dist/safe-bash-command-docx/index.d.ts +30 -0
- package/dist/safe-bash-command-docx/index.js +67 -0
- package/dist/safe-bash-command-docx/io.d.ts +14 -0
- package/dist/safe-bash-command-docx/io.js +26 -0
- package/dist/safe-bash-command-envsubst/index.js +34 -3
- package/dist/safe-bash-command-exiftool/index.js +3 -0
- package/dist/safe-bash-command-ffmpeg/index.js +1102 -1088
- package/dist/safe-bash-command-fold/family.js +1 -1
- package/dist/safe-bash-command-fold/index.js +1 -1
- package/dist/safe-bash-command-htmlq/index.js +5 -0
- package/dist/safe-bash-command-imagemagick/index.d.ts +25 -21
- package/dist/safe-bash-command-imagemagick/index.js +669 -271
- package/dist/safe-bash-command-mmdc/index.js +48 -10
- package/dist/safe-bash-command-mmdc/svg.d.ts +1 -0
- package/dist/safe-bash-command-op/index.js +19 -14
- package/dist/safe-bash-command-pandoc/command.js +1 -1
- package/dist/safe-bash-command-pandoc/index.js +1 -1
- package/dist/safe-bash-command-pdfimages/index.d.ts +7 -1
- package/dist/safe-bash-command-pdfimages/index.js +63 -33
- package/dist/safe-bash-command-pdfinfo/index.d.ts +24 -20
- package/dist/safe-bash-command-pdfinfo/index.js +370 -161
- package/dist/safe-bash-command-pdftk/index.d.ts +7 -3
- package/dist/safe-bash-command-pdftk/index.js +114 -45
- package/dist/safe-bash-command-pdftoppm/index.d.ts +15 -7
- package/dist/safe-bash-command-pdftoppm/index.js +179 -109
- package/dist/safe-bash-command-pdftotext/index.d.ts +9 -5
- package/dist/safe-bash-command-pdftotext/index.js +90 -27
- package/dist/safe-bash-command-pptx/LICENSE +21 -0
- package/dist/safe-bash-command-pptx/index.d.ts +33 -0
- package/dist/safe-bash-command-pptx/index.js +168 -0
- package/dist/safe-bash-command-qpdf/index.d.ts +9 -3
- package/dist/safe-bash-command-qpdf/index.js +80 -29
- package/dist/safe-bash-command-sha512sum/index.js +12 -475
- package/dist/safe-bash-command-sips/index.d.ts +9 -5
- package/dist/safe-bash-command-sips/index.js +63 -44
- package/dist/safe-bash-command-soffice/index.d.ts +9 -3
- package/dist/safe-bash-command-soffice/index.js +65 -24
- package/dist/safe-bash-command-sqlite3/engine.d.ts +9 -0
- package/dist/safe-bash-command-sqlite3/index.d.ts +1 -0
- package/dist/safe-bash-command-sqlite3/index.js +851 -352
- package/dist/safe-bash-command-ssconvert/formats/xls.js +3 -3
- package/dist/safe-bash-command-timeout/index.js +3 -3
- package/dist/safe-bash-command-truncate/index.d.ts +8 -3
- package/dist/safe-bash-command-truncate/index.js +790 -272
- package/dist/safe-bash-command-truncate/sync.d.ts +1 -0
- package/dist/safe-bash-command-truncate/sync.js +60 -0
- package/dist/safe-bash-command-wkhtmltopdf/index.js +92 -38
- package/dist/safe-bash-command-wkhtmltopdf/pdf-renderer.d.ts +1 -1
- package/dist/safe-bash-command-xxd/index.js +78 -20
- package/dist/safe-bash-command-xz/command.d.ts +4 -0
- package/dist/safe-bash-command-xz/index.d.ts +1 -1
- package/dist/safe-bash-command-xz/index.js +1 -1
- package/dist/safe-bash-compression-engine/bounded-codec.js +3 -3
- package/dist/safe-bash-compression-engine/codec-loader.js +2 -2
- package/dist/safe-bash-compression-engine/files.js +6 -6
- package/dist/safe-bash-compression-engine/index.js +5 -5
- package/dist/safe-bash-compression-engine/operand.js +6 -6
- package/dist/safe-bash-compression-engine/stream.js +5 -5
- package/dist/safe-bash-compression-engine/zstd-decode.js +4 -4
- package/dist/safe-bash-contracts/command.js +3 -3
- package/dist/safe-bash-contracts/diagnostics.js +3 -3
- package/dist/safe-bash-contracts/escaping.js +9 -9
- package/dist/safe-bash-contracts/filesystem-descriptor.js +3 -3
- package/dist/safe-bash-contracts/filesystem-output.js +8 -8
- package/dist/safe-bash-contracts/index.js +21 -19
- package/dist/safe-bash-contracts/io.d.ts +12 -0
- package/dist/safe-bash-contracts/io.js +4 -1
- package/dist/safe-bash-contracts/output.js +3 -2
- package/dist/safe-bash-contracts/runtime-control.js +2 -2
- package/dist/safe-bash-contracts/signals.js +1 -1
- package/dist/safe-bash-contracts/yield.d.ts +1 -0
- package/dist/safe-bash-contracts/yield.js +3 -1
- package/dist/safe-bash-csv-engine/index.d.ts +10 -1
- package/dist/safe-bash-csv-engine/index.js +78 -6
- package/dist/safe-bash-io-engine/commands/search/requirements.js +3 -3
- package/dist/safe-bash-io-engine/commands/text-programs/shared.js +3 -3
- package/dist/safe-bash-io-engine/gnu-information.js +1 -1
- package/dist/safe-bash-io-engine/internal.d.ts +1 -1
- package/dist/safe-bash-io-engine/internal.js +2 -2
- package/dist/safe-bash-mcp/index.browser.d.ts +875 -0
- package/dist/safe-bash-mcp/index.browser.js +8740 -0
- package/dist/safe-bash-mcp/index.js +32 -31
- package/dist/safe-bash-query-engine/capture.js +3 -3
- package/dist/safe-bash-query-engine/delpaths.js +3 -3
- package/dist/safe-bash-query-engine/formats.js +2 -2
- package/dist/safe-bash-query-engine/index.js +12 -12
- package/dist/safe-bash-query-engine/indices.js +3 -3
- package/dist/safe-bash-query-engine/input.js +1 -1
- package/dist/safe-bash-query-engine/interpreter.js +10 -10
- package/dist/safe-bash-query-engine/query-core.js +12 -12
- package/dist/safe-bash-query-engine/regex.js +3 -3
- package/dist/safe-bash-query-engine/splits.js +4 -4
- package/dist/safe-bash-query-engine/values.js +2 -2
- package/package.json +9 -3
- package/dist/safe-bash/opt-in/commands/cmp/compare.js +0 -95
- package/dist/safe-bash/opt-in/commands/cmp/io.js +0 -218
- package/dist/safe-bash/command-chunks/{chunk-FXYWQ6S4.js → chunk-2VTMZTV3.js} +0 -0
- package/dist/safe-bash/command-chunks/{chunk-DEH3CMGL.js → chunk-QJ3ONEBI.js} +3 -3
|
@@ -1,56 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
contracts_exports
|
|
3
|
-
} from "../../chunks/chunk-FJZNUUOQ.js";
|
|
4
|
-
import "../../chunks/chunk-O6356Z27.js";
|
|
5
|
-
import {
|
|
6
|
-
command_exports
|
|
7
|
-
} from "../../chunks/chunk-T3VDYWKZ.js";
|
|
8
1
|
import {
|
|
9
2
|
init_platform
|
|
10
3
|
} from "../../chunks/chunk-Q45QCA4J.js";
|
|
11
4
|
|
|
12
5
|
// packages/safe-bash/src/commands/docx/index.ts
|
|
13
6
|
init_platform();
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
throw new TypeError("An explicit docx command engine is required.");
|
|
17
|
-
if (options.replace !== void 0 && typeof options.replace !== "boolean")
|
|
18
|
-
throw new TypeError("docx replace must be boolean.");
|
|
19
|
-
const engine = options.engine;
|
|
20
|
-
return {
|
|
21
|
-
name: "docx",
|
|
22
|
-
async execute(context) {
|
|
23
|
-
context.signal.throwIfAborted();
|
|
24
|
-
const arguments_ = (0, contracts_exports.getCommandArguments)(context);
|
|
25
|
-
const result = await engine.execute({
|
|
26
|
-
args: Object.freeze(arguments_.args.map((_, index) => arguments_.bytes(index))),
|
|
27
|
-
cwd: context.cwd,
|
|
28
|
-
filesystem: context.fs,
|
|
29
|
-
stdin: context.stdin,
|
|
30
|
-
...context.stdinIsDefault === void 0 ? {} : { stdinIsDefault: context.stdinIsDefault },
|
|
31
|
-
stdout: context.stdout,
|
|
32
|
-
stderr: context.stderr,
|
|
33
|
-
signal: context.signal,
|
|
34
|
-
...context.registerCleanup === void 0 ? {} : { registerCleanup: context.registerCleanup }
|
|
35
|
-
});
|
|
36
|
-
context.signal.throwIfAborted();
|
|
37
|
-
return { exitCode: (0, command_exports.validateExitCode)(result.exitCode) };
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
function docxCommands(options) {
|
|
42
|
-
const command = createDocxCommand(options);
|
|
43
|
-
const replace = options.replace ?? false;
|
|
44
|
-
return {
|
|
45
|
-
name: "docx-commands",
|
|
46
|
-
setup(host) {
|
|
47
|
-
if (!replace && host.commands.has(command.name))
|
|
48
|
-
throw new Error("Command already registered: docx");
|
|
49
|
-
host.commands.register(command, { replace });
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
}
|
|
7
|
+
export * from "../../../safe-bash-command-docx/index.js";
|
|
8
|
+
import { createDocxCommand, createDocxCommands, docxCommands } from "../../../safe-bash-command-docx/index.js";
|
|
53
9
|
export {
|
|
54
10
|
createDocxCommand,
|
|
11
|
+
createDocxCommands,
|
|
55
12
|
docxCommands
|
|
56
13
|
};
|
|
@@ -1,25 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export interface DocxCommandRequest {
|
|
4
|
-
readonly args: readonly Uint8Array[];
|
|
5
|
-
readonly cwd: string;
|
|
6
|
-
readonly filesystem: FileSystem;
|
|
7
|
-
readonly stdin: ByteSource;
|
|
8
|
-
readonly stdinIsDefault?: boolean;
|
|
9
|
-
readonly stdout: ByteSink;
|
|
10
|
-
readonly stderr: ByteSink;
|
|
11
|
-
readonly signal: AbortSignal;
|
|
12
|
-
readonly registerCleanup?: CommandContext["registerCleanup"];
|
|
13
|
-
}
|
|
14
|
-
export interface DocxCommandEngine {
|
|
15
|
-
execute(request: DocxCommandRequest): Promise<{
|
|
16
|
-
readonly exitCode: number;
|
|
17
|
-
}>;
|
|
18
|
-
}
|
|
19
|
-
export interface DocxCommandOptions {
|
|
20
|
-
readonly engine: DocxCommandEngine;
|
|
21
|
-
readonly replace?: boolean;
|
|
22
|
-
}
|
|
23
|
-
export declare function createDocxCommand(options: DocxCommandOptions): CommandDefinition;
|
|
24
|
-
export declare function docxCommands(options: DocxCommandOptions): VirtualShellPlugin;
|
|
1
|
+
export * from "../../../safe-bash-command-docx/index.js";
|
|
2
|
+
export { createDocxCommand, createDocxCommands, docxCommands } from "../../../safe-bash-command-docx/index.js";
|
|
25
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,42 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export function createDocxCommand(options) {
|
|
4
|
-
if (!options?.engine || typeof options.engine.execute !== "function")
|
|
5
|
-
throw new TypeError("An explicit docx command engine is required.");
|
|
6
|
-
if (options.replace !== undefined && typeof options.replace !== "boolean")
|
|
7
|
-
throw new TypeError("docx replace must be boolean.");
|
|
8
|
-
const engine = options.engine;
|
|
9
|
-
return {
|
|
10
|
-
name: "docx",
|
|
11
|
-
async execute(context) {
|
|
12
|
-
context.signal.throwIfAborted();
|
|
13
|
-
const arguments_ = getCommandArguments(context);
|
|
14
|
-
const result = await engine.execute({
|
|
15
|
-
args: Object.freeze(arguments_.args.map((_, index) => arguments_.bytes(index))),
|
|
16
|
-
cwd: context.cwd,
|
|
17
|
-
filesystem: context.fs,
|
|
18
|
-
stdin: context.stdin,
|
|
19
|
-
...(context.stdinIsDefault === undefined ? {} : { stdinIsDefault: context.stdinIsDefault }),
|
|
20
|
-
stdout: context.stdout,
|
|
21
|
-
stderr: context.stderr,
|
|
22
|
-
signal: context.signal,
|
|
23
|
-
...(context.registerCleanup === undefined ? {} : { registerCleanup: context.registerCleanup })
|
|
24
|
-
});
|
|
25
|
-
context.signal.throwIfAborted();
|
|
26
|
-
return { exitCode: validateExitCode(result.exitCode) };
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
export function docxCommands(options) {
|
|
31
|
-
const command = createDocxCommand(options);
|
|
32
|
-
const replace = options.replace ?? false;
|
|
33
|
-
return {
|
|
34
|
-
name: "docx-commands",
|
|
35
|
-
setup(host) {
|
|
36
|
-
if (!replace && host.commands.has(command.name))
|
|
37
|
-
throw new Error("Command already registered: docx");
|
|
38
|
-
host.commands.register(command, { replace });
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
}
|
|
1
|
+
export * from "../../../safe-bash-command-docx/index.js";
|
|
2
|
+
export { createDocxCommand, createDocxCommands, docxCommands } from "../../../safe-bash-command-docx/index.js";
|
|
42
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,15 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import type { CommandContext } from "../../contracts/command.js";
|
|
3
|
-
export declare function documentByteSource(source: ByteSource): {
|
|
4
|
-
open(signal: AbortSignal): AsyncIterable<Uint8Array>;
|
|
5
|
-
};
|
|
6
|
-
export declare function documentByteSink(sink: ByteSink): {
|
|
7
|
-
write(bytes: Uint8Array, signal: AbortSignal): Promise<void>;
|
|
8
|
-
};
|
|
9
|
-
export declare function createDocumentOutput(context: Pick<CommandContext, "signal" | "registerCleanup">, destination: ByteSink): {
|
|
10
|
-
readonly sink: {
|
|
11
|
-
write(bytes: Uint8Array, signal: AbortSignal): Promise<void>;
|
|
12
|
-
};
|
|
13
|
-
readonly cleanup: () => Promise<void>;
|
|
14
|
-
};
|
|
1
|
+
export * from "../../../safe-bash-command-docx/io.js";
|
|
15
2
|
//# sourceMappingURL=io.d.ts.map
|
|
@@ -1,16 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { createOutputOperation } from "../../contracts/output.js";
|
|
3
|
-
export function documentByteSource(source) {
|
|
4
|
-
return { open: signal => readBytes(source, signal) };
|
|
5
|
-
}
|
|
6
|
-
export function documentByteSink(sink) {
|
|
7
|
-
return { write: (bytes, signal) => writeBytes(sink, bytes, signal) };
|
|
8
|
-
}
|
|
9
|
-
export function createDocumentOutput(context, destination) {
|
|
10
|
-
const operation = createOutputOperation(context, destination);
|
|
11
|
-
return {
|
|
12
|
-
sink: documentByteSink(operation.output),
|
|
13
|
-
cleanup: operation.close,
|
|
14
|
-
};
|
|
15
|
-
}
|
|
1
|
+
export * from "../../../safe-bash-command-docx/io.js";
|
|
16
2
|
//# sourceMappingURL=io.js.map
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
createLlmCommands,
|
|
3
3
|
createLlmService,
|
|
4
4
|
llmCommands
|
|
5
|
-
} from "../../chunks/chunk-
|
|
5
|
+
} from "../../chunks/chunk-2MUJ7RLZ.js";
|
|
6
6
|
import "../../chunks/chunk-2G2T5MEM.js";
|
|
7
|
-
import "../../chunks/chunk-
|
|
7
|
+
import "../../chunks/chunk-VUVKC6HV.js";
|
|
8
8
|
import "../../chunks/chunk-LAPF2XE6.js";
|
|
9
|
-
import "../../chunks/chunk-
|
|
9
|
+
import "../../chunks/chunk-H7MMJS26.js";
|
|
10
10
|
import "../../chunks/chunk-T3VDYWKZ.js";
|
|
11
11
|
import "../../chunks/chunk-GJWUEOT6.js";
|
|
12
12
|
import {
|
|
@@ -12,12 +12,12 @@ import {
|
|
|
12
12
|
evalSyncCurl,
|
|
13
13
|
evalSyncWget,
|
|
14
14
|
networkCommands
|
|
15
|
-
} from "../../chunks/chunk-
|
|
15
|
+
} from "../../chunks/chunk-X5ZCECM6.js";
|
|
16
16
|
import "../../chunks/chunk-BI6JV62X.js";
|
|
17
17
|
import "../../chunks/chunk-2G2T5MEM.js";
|
|
18
|
-
import "../../chunks/chunk-
|
|
18
|
+
import "../../chunks/chunk-VUVKC6HV.js";
|
|
19
19
|
import "../../chunks/chunk-LAPF2XE6.js";
|
|
20
|
-
import "../../chunks/chunk-
|
|
20
|
+
import "../../chunks/chunk-H7MMJS26.js";
|
|
21
21
|
import "../../chunks/chunk-T3VDYWKZ.js";
|
|
22
22
|
import "../../chunks/chunk-GJWUEOT6.js";
|
|
23
23
|
import "../../chunks/chunk-Q45QCA4J.js";
|
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
createSafeJsNodeCommand,
|
|
3
3
|
createSafeJsNodeCommands,
|
|
4
4
|
safeJsNodeCommands
|
|
5
|
-
} from "../../chunks/chunk-
|
|
5
|
+
} from "../../chunks/chunk-CTUHLNJM.js";
|
|
6
6
|
import "../../chunks/chunk-2G2T5MEM.js";
|
|
7
|
-
import "../../chunks/chunk-
|
|
7
|
+
import "../../chunks/chunk-VUVKC6HV.js";
|
|
8
8
|
import "../../chunks/chunk-LAPF2XE6.js";
|
|
9
|
-
import "../../chunks/chunk-
|
|
9
|
+
import "../../chunks/chunk-H7MMJS26.js";
|
|
10
10
|
import "../../chunks/chunk-T3VDYWKZ.js";
|
|
11
11
|
import "../../chunks/chunk-GJWUEOT6.js";
|
|
12
12
|
import "../../chunks/chunk-Q45QCA4J.js";
|
|
@@ -1,29 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
execute(request: {
|
|
4
|
-
readonly args: readonly Uint8Array[];
|
|
5
|
-
readonly signal: AbortSignal;
|
|
6
|
-
readonly readInput: (path: string, maxBytes: number) => Promise<Uint8Array>;
|
|
7
|
-
readonly publishOutput?: (publication: {
|
|
8
|
-
readonly inputPath?: string;
|
|
9
|
-
readonly protectedInputPaths?: readonly string[];
|
|
10
|
-
readonly outputPath: string;
|
|
11
|
-
readonly bytes: Uint8Array;
|
|
12
|
-
readonly originalBytes: Uint8Array;
|
|
13
|
-
readonly inPlace: boolean;
|
|
14
|
-
readonly force: boolean;
|
|
15
|
-
readonly dryRun: boolean;
|
|
16
|
-
}) => Promise<void>;
|
|
17
|
-
}): Promise<{
|
|
18
|
-
readonly exitCode: number;
|
|
19
|
-
readonly stdout: Uint8Array;
|
|
20
|
-
readonly stderr: Uint8Array;
|
|
21
|
-
}>;
|
|
22
|
-
}
|
|
23
|
-
export interface PptxCommandsOptions {
|
|
24
|
-
readonly engine: PptxCommandEngine;
|
|
25
|
-
readonly replace?: boolean;
|
|
26
|
-
}
|
|
27
|
-
export declare function createPptxCommands(options: PptxCommandsOptions): readonly CommandDefinition[];
|
|
28
|
-
export declare function pptxCommands(options: PptxCommandsOptions): VirtualShellPlugin;
|
|
1
|
+
export * from "../../../safe-bash-command-pptx/index.js";
|
|
2
|
+
export { createPptxCommand, createPptxCommands, pptxCommands } from "../../../safe-bash-command-pptx/index.js";
|
|
29
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,153 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { compareObservedEntries } from "../copy-identity.js";
|
|
4
|
-
import { pathOf } from "../internal.js";
|
|
5
|
-
import { inputRequirements } from "../portable-requirements.js";
|
|
6
|
-
export function createPptxCommands(options) {
|
|
7
|
-
if (!options?.engine || typeof options.engine.execute !== "function")
|
|
8
|
-
throw new TypeError("An explicit pptx command engine is required.");
|
|
9
|
-
if (options.replace !== undefined && typeof options.replace !== "boolean")
|
|
10
|
-
throw new TypeError("pptx replace must be boolean");
|
|
11
|
-
const engine = options.engine;
|
|
12
|
-
return [{ name: "pptx", filesystemRequirements: inputRequirements, async execute(context) {
|
|
13
|
-
const arguments_ = getCommandArguments(context);
|
|
14
|
-
const snapshots = new Map();
|
|
15
|
-
const result = await engine.execute({
|
|
16
|
-
args: arguments_.args.map((_, index) => arguments_.bytes(index)),
|
|
17
|
-
signal: context.signal,
|
|
18
|
-
async readInput(path, maxBytes) {
|
|
19
|
-
try {
|
|
20
|
-
context.signal.throwIfAborted();
|
|
21
|
-
if (path === "-")
|
|
22
|
-
return await collectBytes(context.stdin, { maxBytes, signal: context.signal });
|
|
23
|
-
const resolved = pathOf(context, path);
|
|
24
|
-
if (!snapshots.has(resolved)) {
|
|
25
|
-
try {
|
|
26
|
-
snapshots.set(resolved, await context.fs.lstat(resolved, { signal: context.signal }));
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
context.signal.throwIfAborted();
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
const capabilities = await context.fs.capabilitiesFor?.(resolved, { signal: context.signal }) ?? context.fs.capabilities;
|
|
33
|
-
context.signal.throwIfAborted();
|
|
34
|
-
if (context.fs.readStream && capabilities.streamingRead !== false) {
|
|
35
|
-
let emitted = false;
|
|
36
|
-
try {
|
|
37
|
-
const stream = context.fs.readStream(resolved, { signal: context.signal });
|
|
38
|
-
return await collectBytes((async function* () {
|
|
39
|
-
for await (const chunk of stream) {
|
|
40
|
-
if (chunk.byteLength)
|
|
41
|
-
emitted = true;
|
|
42
|
-
yield chunk;
|
|
43
|
-
}
|
|
44
|
-
})(), { maxBytes, signal: context.signal });
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
context.signal.throwIfAborted();
|
|
48
|
-
if (emitted || !(error instanceof FsError) || error.code !== "ENOTSUP")
|
|
49
|
-
throw error;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
if (capabilities.read === false)
|
|
53
|
-
throw new FsError("ENOTSUP");
|
|
54
|
-
const bytes = await context.fs.readFile(resolved, { maxBytes, signal: context.signal });
|
|
55
|
-
context.signal.throwIfAborted();
|
|
56
|
-
if (bytes.byteLength > maxBytes)
|
|
57
|
-
throw new FsError("EFBIG");
|
|
58
|
-
return bytes;
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
context.signal.throwIfAborted();
|
|
62
|
-
throw Object.assign(new Error("Input could not be read."), { code: error instanceof FsError && error.code === "EFBIG" ? "resource-limit" : "io-failure" });
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
async publishOutput(publication) {
|
|
66
|
-
try {
|
|
67
|
-
const { fs, signal } = context;
|
|
68
|
-
signal.throwIfAborted();
|
|
69
|
-
const input = publication.inputPath === undefined || publication.inputPath === "-" ? undefined : pathOf(context, publication.inputPath);
|
|
70
|
-
const output = pathOf(context, publication.outputPath);
|
|
71
|
-
if (publication.inPlace ? !input || input !== output : input === output)
|
|
72
|
-
throw new FsError("EINVAL");
|
|
73
|
-
const capabilities = await fs.capabilitiesFor?.(output, { signal }) ?? fs.capabilities;
|
|
74
|
-
signal.throwIfAborted();
|
|
75
|
-
if (capabilities.readOnly === true || capabilities.write === false || !capabilities.atomicFileMutation || !fs.writeFileConditional)
|
|
76
|
-
throw new FsError("ENOTSUP");
|
|
77
|
-
let destination;
|
|
78
|
-
try {
|
|
79
|
-
destination = await fs.lstat(output, { signal });
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
signal.throwIfAborted();
|
|
83
|
-
if (!(error instanceof FsError) || error.code !== "ENOENT")
|
|
84
|
-
throw error;
|
|
85
|
-
destination = null;
|
|
86
|
-
}
|
|
87
|
-
if (destination && destination.type !== "file")
|
|
88
|
-
throw new FsError("EINVAL");
|
|
89
|
-
if (destination) {
|
|
90
|
-
const protectedInputs = new Set((publication.protectedInputPaths ?? []).filter(path => path !== "-").map(path => pathOf(context, path)));
|
|
91
|
-
for (const [source, observed] of snapshots) {
|
|
92
|
-
if (source === input && !protectedInputs.has(source))
|
|
93
|
-
continue;
|
|
94
|
-
const identity = observed.type === "symlink" ? await fs.stat(source, { signal }) : observed;
|
|
95
|
-
if (source === output || await compareObservedEntries(fs, source, identity, fs, output, destination, { signal }) !== "distinct")
|
|
96
|
-
throw new FsError("EINVAL");
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
if (destination && !publication.inPlace) {
|
|
100
|
-
if (!publication.force)
|
|
101
|
-
throw new FsError("EEXIST");
|
|
102
|
-
if (input && await compareObservedEntries(fs, input, await fs.stat(input, { signal }), fs, output, destination, { signal }) !== "distinct")
|
|
103
|
-
throw new FsError("EINVAL");
|
|
104
|
-
}
|
|
105
|
-
const parentPath = output.slice(0, output.lastIndexOf("/")) || "/";
|
|
106
|
-
const parent = await fs.stat(parentPath, { signal });
|
|
107
|
-
if (parent.type !== "directory")
|
|
108
|
-
throw new FsError("ENOTDIR");
|
|
109
|
-
if (publication.inPlace) {
|
|
110
|
-
const original = snapshots.get(input);
|
|
111
|
-
if (!original || original.type !== "file" || !destination || original.revision === undefined
|
|
112
|
-
|| original.revision !== destination.revision || original.size !== destination.size
|
|
113
|
-
|| original.mode !== destination.mode || original.nlink !== destination.nlink
|
|
114
|
-
|| original.mtimeMs !== destination.mtimeMs || original.ctimeMs !== destination.ctimeMs
|
|
115
|
-
|| await compareObservedEntries(fs, input, original, fs, output, destination, { signal }) !== "same")
|
|
116
|
-
throw new FsError("EAGAIN");
|
|
117
|
-
const current = await fs.readFile(input, { maxBytes: publication.originalBytes.length, signal });
|
|
118
|
-
if (current.length !== publication.originalBytes.length || current.some((byte, index) => byte !== publication.originalBytes[index]))
|
|
119
|
-
throw new FsError("EAGAIN");
|
|
120
|
-
destination = original;
|
|
121
|
-
}
|
|
122
|
-
signal.throwIfAborted();
|
|
123
|
-
if (!publication.dryRun)
|
|
124
|
-
await writeFileOutput(context, publication.bytes, async (bytes) => {
|
|
125
|
-
await fs.writeFileConditional(output, bytes, { parent, expected: destination, signal });
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
catch (error) {
|
|
129
|
-
context.signal.throwIfAborted();
|
|
130
|
-
const code = error instanceof FsError && error.code === "EAGAIN" ? "stale-input"
|
|
131
|
-
: error instanceof FsError && error.code === "ENOTSUP" ? "publication-unsupported" : "io-failure";
|
|
132
|
-
throw Object.assign(new Error("Output could not be published."), { code });
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
if (result.stdout.length)
|
|
137
|
-
await writeBytes(context.stdout, result.stdout, context.signal);
|
|
138
|
-
if (result.stderr.length)
|
|
139
|
-
await writeBytes(context.stderr, result.stderr, context.signal);
|
|
140
|
-
return { exitCode: result.exitCode };
|
|
141
|
-
} }];
|
|
142
|
-
}
|
|
143
|
-
export function pptxCommands(options) {
|
|
144
|
-
const commands = createPptxCommands(options);
|
|
145
|
-
const replace = options.replace ?? false;
|
|
146
|
-
return { name: "pptx-commands", setup(host) {
|
|
147
|
-
if (!replace && host.commands.has("pptx"))
|
|
148
|
-
throw new Error("Command already registered: pptx");
|
|
149
|
-
for (const command of commands)
|
|
150
|
-
host.commands.register(command, { replace });
|
|
151
|
-
} };
|
|
152
|
-
}
|
|
1
|
+
export * from "../../../safe-bash-command-pptx/index.js";
|
|
2
|
+
export { createPptxCommand, createPptxCommands, pptxCommands } from "../../../safe-bash-command-pptx/index.js";
|
|
153
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,18 +1,36 @@
|
|
|
1
|
-
// Parse C
|
|
1
|
+
// Parse the C numeric prefix while retaining trailing-input diagnostics.
|
|
2
2
|
export function parsePrintfFloat(operand) {
|
|
3
|
-
|
|
3
|
+
let start = 0;
|
|
4
|
+
while (start < operand.length && " \t\n\r\v\f".includes(operand[start]))
|
|
5
|
+
start++;
|
|
6
|
+
let end = operand.length;
|
|
7
|
+
while (end > start && " \t\n\r\v\f".includes(operand[end - 1]))
|
|
8
|
+
end--;
|
|
9
|
+
const token = operand.slice(start, end).toLowerCase();
|
|
4
10
|
if (token.length > 4096)
|
|
5
11
|
return undefined;
|
|
6
12
|
const negative = token.startsWith("-");
|
|
7
13
|
const magnitude = token.startsWith("+") || negative ? token.slice(1) : token;
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
const converted = (value, end, special) => ({
|
|
15
|
+
value, ...(special === undefined ? {} : { special }), ...(end < magnitude.length || operand.length > start + token.length ? { error: "invalid number" } : {}),
|
|
16
|
+
});
|
|
17
|
+
if (magnitude.startsWith("inf")) {
|
|
18
|
+
return converted(negative ? -Infinity : Infinity, magnitude.startsWith("infinity") ? 8 : 3, (negative ? "-" : "") + "inf");
|
|
12
19
|
}
|
|
13
|
-
if (
|
|
14
|
-
let
|
|
15
|
-
|
|
20
|
+
if (magnitude.startsWith("nan")) {
|
|
21
|
+
let end = 3;
|
|
22
|
+
if (magnitude[end] === "(") {
|
|
23
|
+
let offset = end + 1;
|
|
24
|
+
while (offset < magnitude.length && "abcdefghijklmnopqrstuvwxyz0123456789_".includes(magnitude[offset]))
|
|
25
|
+
offset++;
|
|
26
|
+
if (magnitude[offset] === ")")
|
|
27
|
+
end = offset + 1;
|
|
28
|
+
}
|
|
29
|
+
return converted(NaN, end, (negative ? "-" : "") + "nan");
|
|
30
|
+
}
|
|
31
|
+
const hexadecimal = magnitude.startsWith("0x") && ("0123456789abcdef".includes(magnitude[2] ?? "!") || magnitude[2] === "." && "0123456789abcdef".includes(magnitude[3] ?? "!"));
|
|
32
|
+
if (!hexadecimal) {
|
|
33
|
+
let offset = 0, digits = 0;
|
|
16
34
|
while (offset < magnitude.length && "0123456789".includes(magnitude[offset])) {
|
|
17
35
|
offset++;
|
|
18
36
|
digits++;
|
|
@@ -27,64 +45,56 @@ export function parsePrintfFloat(operand) {
|
|
|
27
45
|
if (!digits)
|
|
28
46
|
return undefined;
|
|
29
47
|
if (magnitude[offset] === "e") {
|
|
30
|
-
offset++;
|
|
48
|
+
const exponentStart = offset++;
|
|
31
49
|
if (magnitude[offset] === "+" || magnitude[offset] === "-")
|
|
32
50
|
offset++;
|
|
33
|
-
const
|
|
51
|
+
const firstDigit = offset;
|
|
34
52
|
while (offset < magnitude.length && "0123456789".includes(magnitude[offset]))
|
|
35
53
|
offset++;
|
|
36
|
-
if (offset ===
|
|
37
|
-
|
|
54
|
+
if (offset === firstDigit)
|
|
55
|
+
offset = exponentStart;
|
|
38
56
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const value = Number(operand);
|
|
42
|
-
return Number.isFinite(value) ? { value } : undefined;
|
|
57
|
+
const value = Number((negative ? "-" : "") + magnitude.slice(0, offset));
|
|
58
|
+
return Number.isFinite(value) ? converted(value, offset) : undefined;
|
|
43
59
|
}
|
|
44
|
-
let offset = 2;
|
|
45
|
-
let digits = "";
|
|
46
|
-
let fractionDigits = 0;
|
|
47
|
-
let point = false;
|
|
60
|
+
let offset = 2, digits = "", fractionDigits = 0, point = false;
|
|
48
61
|
while (offset < magnitude.length) {
|
|
49
|
-
const
|
|
50
|
-
if ("0123456789abcdef".includes(
|
|
51
|
-
digits +=
|
|
62
|
+
const character = magnitude[offset];
|
|
63
|
+
if ("0123456789abcdef".includes(character)) {
|
|
64
|
+
digits += character;
|
|
52
65
|
if (point)
|
|
53
66
|
fractionDigits++;
|
|
54
67
|
}
|
|
55
|
-
else if (
|
|
68
|
+
else if (character === "." && !point)
|
|
56
69
|
point = true;
|
|
57
70
|
else
|
|
58
71
|
break;
|
|
59
72
|
offset++;
|
|
60
73
|
}
|
|
61
|
-
if (!digits)
|
|
62
|
-
return undefined;
|
|
63
74
|
let exponent = 0;
|
|
64
|
-
if (offset
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const start = offset;
|
|
75
|
+
if (magnitude[offset] === "p") {
|
|
76
|
+
const exponentStart = offset++;
|
|
77
|
+
const numberStart = offset;
|
|
68
78
|
if (magnitude[offset] === "+" || magnitude[offset] === "-")
|
|
69
79
|
offset++;
|
|
70
80
|
const firstDigit = offset;
|
|
71
81
|
while (offset < magnitude.length && "0123456789".includes(magnitude[offset]))
|
|
72
82
|
offset++;
|
|
73
|
-
if (offset === firstDigit
|
|
74
|
-
|
|
75
|
-
|
|
83
|
+
if (offset === firstDigit)
|
|
84
|
+
offset = exponentStart;
|
|
85
|
+
else
|
|
86
|
+
exponent = Number(magnitude.slice(numberStart, offset));
|
|
76
87
|
}
|
|
77
88
|
const significand = BigInt("0x" + digits);
|
|
78
89
|
if (significand === 0n)
|
|
79
|
-
return
|
|
90
|
+
return converted(negative ? -0 : 0, offset);
|
|
80
91
|
const bits = significand.toString(2).length;
|
|
81
92
|
const scale = exponent - fractionDigits * 4;
|
|
82
93
|
const top = bits - 1 + scale;
|
|
83
94
|
if (top > 1023)
|
|
84
95
|
return undefined;
|
|
85
96
|
if (top < -1075)
|
|
86
|
-
return
|
|
87
|
-
// Round once to binary64, including the fixed subnormal quantum.
|
|
97
|
+
return converted(negative ? -0 : 0, offset);
|
|
88
98
|
const shift = Math.max(bits - 53, -1074 - scale);
|
|
89
99
|
let rounded = significand;
|
|
90
100
|
if (shift > 0) {
|
|
@@ -95,6 +105,6 @@ export function parsePrintfFloat(operand) {
|
|
|
95
105
|
rounded++;
|
|
96
106
|
}
|
|
97
107
|
const value = Number(rounded) * 2 ** (scale + Math.max(0, shift)) * (negative ? -1 : 1);
|
|
98
|
-
return Number.isFinite(value) ?
|
|
108
|
+
return Number.isFinite(value) ? converted(value, offset) : undefined;
|
|
99
109
|
}
|
|
100
110
|
//# sourceMappingURL=printf-float.js.map
|
|
@@ -37,14 +37,17 @@ export async function parsePrintfDirective(format, start, signal) {
|
|
|
37
37
|
offset++;
|
|
38
38
|
precision = await field();
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
let wide = false;
|
|
41
|
+
for (let modifier = character(); modifier && "hlLjzt".includes(modifier); modifier = character()) {
|
|
42
|
+
wide ||= modifier === "l";
|
|
42
43
|
offset++;
|
|
43
|
-
if ((
|
|
44
|
-
|
|
44
|
+
if ((offset - start) % 1024 === 0)
|
|
45
|
+
await yieldTurn(signal);
|
|
45
46
|
}
|
|
46
|
-
|
|
47
|
-
if (
|
|
47
|
+
let specifier = character();
|
|
48
|
+
if (wide && (specifier === "s" || specifier === "c"))
|
|
49
|
+
specifier = specifier.toUpperCase();
|
|
50
|
+
if (!specifier || !"sbqQcCSdiouxXfFeEgGaA".includes(specifier)) {
|
|
48
51
|
const end = start + 64;
|
|
49
52
|
const preview = typeof format === "string" ? format.slice(start, end) : decoder.decode(format.subarray(start, end));
|
|
50
53
|
throw new UsageError(`invalid format near '${preview}${format.length > end ? "..." : ""}'`);
|