@poe-platform/safe-bash 0.1.541 → 0.1.542

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/safe-bash/chunks/chunk-A4UXQKWZ.js +2609 -0
  2. package/dist/safe-bash/chunks/chunk-A4UXQKWZ.js.map +7 -0
  3. package/dist/safe-bash/commands/iconv/codec.d.ts +10 -0
  4. package/dist/safe-bash/commands/iconv/codec.d.ts.map +1 -0
  5. package/dist/safe-bash/commands/iconv/codec.js +200 -0
  6. package/dist/safe-bash/commands/iconv/codec.js.map +1 -0
  7. package/dist/safe-bash/commands/iconv/command.d.ts +4 -0
  8. package/dist/safe-bash/commands/iconv/command.d.ts.map +1 -0
  9. package/dist/safe-bash/commands/iconv/command.js +116 -0
  10. package/dist/safe-bash/commands/iconv/command.js.map +1 -0
  11. package/dist/safe-bash/commands/iconv/index.browser.js +15 -0
  12. package/dist/safe-bash/commands/iconv/index.browser.js.map +7 -0
  13. package/dist/safe-bash/commands/iconv/index.d.ts +7 -0
  14. package/dist/safe-bash/commands/iconv/index.d.ts.map +1 -0
  15. package/dist/safe-bash/commands/iconv/index.js +11 -0
  16. package/dist/safe-bash/commands/iconv/index.js.map +1 -0
  17. package/dist/safe-bash/commands/iconv/internal.d.ts +54 -0
  18. package/dist/safe-bash/commands/iconv/internal.d.ts.map +1 -0
  19. package/dist/safe-bash/commands/iconv/internal.js +154 -0
  20. package/dist/safe-bash/commands/iconv/internal.js.map +1 -0
  21. package/dist/safe-bash/commands/iconv/lifecycle.d.ts +24 -0
  22. package/dist/safe-bash/commands/iconv/lifecycle.d.ts.map +1 -0
  23. package/dist/safe-bash/commands/iconv/lifecycle.js +111 -0
  24. package/dist/safe-bash/commands/iconv/lifecycle.js.map +1 -0
  25. package/dist/safe-bash/commands/iconv/options.d.ts +11 -0
  26. package/dist/safe-bash/commands/iconv/options.d.ts.map +1 -0
  27. package/dist/safe-bash/commands/iconv/options.js +82 -0
  28. package/dist/safe-bash/commands/iconv/options.js.map +1 -0
  29. package/dist/safe-bash/commands/iconv/reader.d.ts +21 -0
  30. package/dist/safe-bash/commands/iconv/reader.d.ts.map +1 -0
  31. package/dist/safe-bash/commands/iconv/reader.js +192 -0
  32. package/dist/safe-bash/commands/iconv/reader.js.map +1 -0
  33. package/dist/safe-bash/commands/iconv/transliterations.d.ts +2 -0
  34. package/dist/safe-bash/commands/iconv/transliterations.d.ts.map +1 -0
  35. package/dist/safe-bash/commands/iconv/transliterations.js +1785 -0
  36. package/dist/safe-bash/commands/iconv/transliterations.js.map +1 -0
  37. package/dist/safe-bash/core.browser.js +11 -1
  38. package/dist/safe-bash/core.browser.js.map +2 -2
  39. package/dist/safe-bash/core.d.ts +1 -0
  40. package/dist/safe-bash/core.d.ts.map +1 -1
  41. package/dist/safe-bash/core.js +1 -0
  42. package/dist/safe-bash/core.js.map +1 -1
  43. package/dist/safe-bash/plugins/composition.d.ts +2 -0
  44. package/dist/safe-bash/plugins/composition.d.ts.map +1 -1
  45. package/dist/safe-bash/plugins/composition.js +3 -1
  46. package/dist/safe-bash/plugins/composition.js.map +1 -1
  47. package/package.json +8 -2
@@ -0,0 +1,116 @@
1
+ import { FsError } from "../../contracts/index.js";
2
+ import { createOutputOperation } from "../../contracts/output.js";
3
+ import { outputFailure } from "../../contracts/io.js";
4
+ import { Budget, IconvError, settings } from "./internal.js";
5
+ import { Lifecycle } from "./lifecycle.js";
6
+ import { Reader, fsDetail } from "./reader.js";
7
+ import { parse } from "./options.js";
8
+ import { convert } from "./codec.js";
9
+ async function transcode(options, lifecycle) {
10
+ const state = { swap: false };
11
+ let exitCode = 0, stdinUsed = false;
12
+ for (const file of options.files) {
13
+ if (file === "-" && stdinUsed) {
14
+ await lifecycle.diagnostic("error while reading the input: Bad file descriptor");
15
+ return 1;
16
+ }
17
+ if (file === "-")
18
+ stdinUsed = true;
19
+ const reader = new Reader(file, lifecycle);
20
+ let fatal = false;
21
+ try {
22
+ await reader.open();
23
+ const input = await reader.all();
24
+ const result = await convert(input, options, state, lifecycle);
25
+ exitCode ||= result.status;
26
+ fatal = result.fatal;
27
+ }
28
+ catch (error) {
29
+ lifecycle.budget.signal.throwIfAborted();
30
+ if (!(error instanceof FsError))
31
+ throw error;
32
+ exitCode = 1;
33
+ fatal = reader.stage === "read";
34
+ await lifecycle.diagnostic(fatal ? `error while reading the input: ${fsDetail(error)}` : `cannot open input file \`${file}': ${fsDetail(error)}`);
35
+ }
36
+ await lifecycle.operation(() => reader.close());
37
+ if (fatal)
38
+ break;
39
+ }
40
+ return exitCode;
41
+ }
42
+ async function execute(context, limits) {
43
+ let lifecycle;
44
+ const caller = context.signal;
45
+ caller.throwIfAborted();
46
+ const stdout = context.stdout;
47
+ caller.throwIfAborted();
48
+ const capability = stdout.ownedOutput;
49
+ caller.throwIfAborted();
50
+ const consumer = capability?.consumerClosed;
51
+ caller.throwIfAborted();
52
+ consumer?.throwIfAborted();
53
+ const failureHandler = stdout[outputFailure];
54
+ caller.throwIfAborted();
55
+ consumer?.throwIfAborted();
56
+ const registerCleanup = context.registerCleanup;
57
+ caller.throwIfAborted();
58
+ consumer?.throwIfAborted();
59
+ const destination = capability ?? stdout;
60
+ const write = async (value) => {
61
+ lifecycle.assertOpen();
62
+ const method = destination.write;
63
+ lifecycle.assertOpen();
64
+ await Reflect.apply(method, destination, [value]);
65
+ };
66
+ const captured = {
67
+ write,
68
+ ...(capability ? { ownedOutput: { consumerClosed: consumer, write } } : {}),
69
+ ...(failureHandler ? { [outputFailure]: failureHandler } : {}),
70
+ };
71
+ const admission = { closed: false };
72
+ const output = createOutputOperation({ signal: caller, ...(registerCleanup ? { registerCleanup(cleanup) {
73
+ caller.throwIfAborted();
74
+ Reflect.apply(registerCleanup, context, [() => { admission.closed = true; return cleanup(); }]);
75
+ } } : {}) }, captured);
76
+ const budget = new Budget(context, limits, output.signal, caller, admission);
77
+ let failure, primary;
78
+ let exitCode = 0;
79
+ try {
80
+ lifecycle = new Lifecycle(budget, output, captured);
81
+ exitCode = await transcode(parse(budget), lifecycle);
82
+ }
83
+ catch (error) {
84
+ primary = { reason: error };
85
+ if (error instanceof IconvError && !output.signal.aborted && lifecycle) {
86
+ exitCode = error.status;
87
+ try {
88
+ await lifecycle.diagnostic(error.message);
89
+ }
90
+ catch (reporting) {
91
+ failure = { reason: new AggregateError([error, reporting], "iconv failure reporting failed") };
92
+ }
93
+ }
94
+ else
95
+ failure = { reason: error };
96
+ }
97
+ try {
98
+ await output.close();
99
+ }
100
+ catch (cleanup) {
101
+ const previous = failure ?? primary;
102
+ failure = { reason: previous ? new AggregateError([previous.reason, cleanup], "iconv execution and cleanup failed") : cleanup };
103
+ }
104
+ caller.throwIfAborted();
105
+ output.signal.throwIfAborted();
106
+ if (lifecycle?.diagnosticCancellation)
107
+ throw lifecycle.diagnosticCancellation.reason;
108
+ if (failure)
109
+ throw failure.reason;
110
+ return { exitCode };
111
+ }
112
+ export function createIconvCommand(options = {}) {
113
+ const limits = settings(options);
114
+ return { name: "iconv", description: "Convert bytes between bounded ASCII, Latin-1, UTF-8 and UTF-16 encodings", execute: context => execute(context, limits) };
115
+ }
116
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/iconv/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import {
2
+ createIconvCommand,
3
+ createIconvCommands,
4
+ iconvCommands
5
+ } from "../../chunks/chunk-A4UXQKWZ.js";
6
+ import "../../chunks/chunk-DPJWEGIX.js";
7
+ import "../../chunks/chunk-PZMJ4EC3.js";
8
+ import "../../chunks/chunk-5VBLSPNM.js";
9
+ import "../../chunks/chunk-2KL6W6NB.js";
10
+ export {
11
+ createIconvCommand,
12
+ createIconvCommands,
13
+ iconvCommands
14
+ };
15
+ //# sourceMappingURL=index.browser.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ import type { CommandDefinition, VirtualShellPlugin } from "../../contracts/index.js";
2
+ import type { IconvCommandsOptions } from "./internal.js";
3
+ export { createIconvCommand } from "./command.js";
4
+ export type { IconvCommandsOptions, IconvLimits } from "./internal.js";
5
+ export declare function createIconvCommands(options?: IconvCommandsOptions): readonly CommandDefinition[];
6
+ export declare function iconvCommands(options?: IconvCommandsOptions): VirtualShellPlugin;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/iconv/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEtF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEvE,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,SAAS,iBAAiB,EAAE,CAA0C;AAE/I,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,kBAAkB,CAKpF"}
@@ -0,0 +1,11 @@
1
+ import { createIconvCommand } from "./command.js";
2
+ export { createIconvCommand } from "./command.js";
3
+ export function createIconvCommands(options = {}) { return [createIconvCommand(options)]; }
4
+ export function iconvCommands(options = {}) {
5
+ const commands = createIconvCommands(options);
6
+ return { name: "iconv-commands", setup(host) {
7
+ for (const command of commands)
8
+ host.commands.register(command, { replace: options.replace ?? false });
9
+ } };
10
+ }
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/iconv/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,MAAM,UAAU,mBAAmB,CAAC,UAAgC,EAAE,IAAkC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/I,MAAM,UAAU,aAAa,CAAC,UAAgC,EAAE;IAC9D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,IAAI;YACzC,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;QACzG,CAAC,EAAE,CAAC;AACN,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { type CommandContext } from "../../contracts/index.js";
2
+ import { PublicDiagnostic } from "../../diagnostics.js";
3
+ export interface IconvLimits {
4
+ readonly maxArguments: number;
5
+ readonly maxArgumentBytes: number;
6
+ readonly maxInputBytes: number;
7
+ readonly maxBufferedBytes: number;
8
+ readonly maxOutputBytes: number;
9
+ readonly maxDiagnosticBytes: number;
10
+ readonly maxWork: number;
11
+ readonly maxChunks: number;
12
+ readonly maxEmptyChunks: number;
13
+ }
14
+ export interface IconvCommandsOptions {
15
+ readonly replace?: boolean;
16
+ readonly limits?: Partial<IconvLimits>;
17
+ }
18
+ export declare function settings(options: IconvCommandsOptions): IconvLimits;
19
+ export declare class IconvError extends PublicDiagnostic {
20
+ readonly status: number;
21
+ constructor(message: string, status?: number);
22
+ }
23
+ export declare function raw(value: Uint8Array): string;
24
+ export declare function pathText(value: string): string;
25
+ export declare class Budget {
26
+ readonly context: CommandContext;
27
+ readonly limits: IconvLimits;
28
+ readonly signal: AbortSignal;
29
+ readonly callerSignal: AbortSignal;
30
+ readonly admission: {
31
+ readonly closed: boolean;
32
+ };
33
+ private work;
34
+ private checkpoint;
35
+ private retained;
36
+ private input;
37
+ private output;
38
+ private diagnostics;
39
+ private chunks;
40
+ private empties;
41
+ constructor(context: CommandContext, limits: IconvLimits, signal: AbortSignal, callerSignal: AbortSignal, admission: {
42
+ readonly closed: boolean;
43
+ });
44
+ assertOpen(): void;
45
+ check(value: number, maximum: number, label: string): void;
46
+ charge(amount?: number): void;
47
+ checkpointWork(): Promise<void>;
48
+ retain(amount: number): void;
49
+ snapshotMaximum(): number;
50
+ inputBytes(amount: number): void;
51
+ emitted(amount: number, diagnostic: boolean): void;
52
+ arguments(): string[];
53
+ }
54
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/commands/iconv/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CACxC;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,WAAW,CAWnE;AAED,qBAAa,UAAW,SAAQ,gBAAgB;IACjB,QAAQ,CAAC,MAAM;gBAAhC,OAAO,EAAE,MAAM,EAAW,MAAM,SAAI;CACjD;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAI7C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,qBAAa,MAAM;IASL,QAAQ,CAAC,OAAO,EAAE,cAAc;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW;IAAE,QAAQ,CAAC,YAAY,EAAE,WAAW;IAAE,QAAQ,CAAC,SAAS,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE;IAR9L,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAK;gBACC,OAAO,EAAE,cAAc,EAAW,MAAM,EAAE,WAAW,EAAW,MAAM,EAAE,WAAW,EAAW,YAAY,EAAE,WAAW,EAAW,SAAS,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE;IAC9L,UAAU,IAAI,IAAI;IAIlB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAG1D,MAAM,CAAC,MAAM,SAAI,GAAG,IAAI;IAIlB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAG5B,eAAe,IAAI,MAAM;IACzB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMhC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IAIlD,SAAS,IAAI,MAAM,EAAE;CAyCtB"}
@@ -0,0 +1,154 @@
1
+ import { getCommandArguments } from "../../contracts/index.js";
2
+ import { shellValueByteLength, shellValueBytes } from "../../contracts/value.js";
3
+ import { yieldTurn } from "../../contracts/yield.js";
4
+ import { PublicDiagnostic } from "../../diagnostics.js";
5
+ export function settings(options) {
6
+ const limits = {
7
+ maxArguments: 4096, maxArgumentBytes: 65_536, maxInputBytes: 8_388_608,
8
+ maxBufferedBytes: 33_554_432, maxOutputBytes: 67_108_864,
9
+ maxDiagnosticBytes: 65_536, maxWork: 134_217_728, maxChunks: 65_536,
10
+ maxEmptyChunks: 4096, ...options.limits,
11
+ };
12
+ for (const [name, value] of Object.entries(limits)) {
13
+ if (!Number.isSafeInteger(value) || value < 1)
14
+ throw new RangeError(`Invalid iconv limit: ${name}`);
15
+ }
16
+ return Object.freeze(limits);
17
+ }
18
+ export class IconvError extends PublicDiagnostic {
19
+ status;
20
+ constructor(message, status = 1) {
21
+ super(message);
22
+ this.status = status;
23
+ }
24
+ }
25
+ export function raw(value) {
26
+ let result = "";
27
+ for (let offset = 0; offset < value.length; offset += 4096)
28
+ result += String.fromCharCode(...value.subarray(offset, offset + 4096));
29
+ return result;
30
+ }
31
+ export function pathText(value) {
32
+ try {
33
+ return new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(Uint8Array.from(value, character => character.charCodeAt(0)));
34
+ }
35
+ catch {
36
+ throw new IconvError("filesystem paths must be valid UTF-8");
37
+ }
38
+ }
39
+ export class Budget {
40
+ context;
41
+ limits;
42
+ signal;
43
+ callerSignal;
44
+ admission;
45
+ work = 0;
46
+ checkpoint = 0;
47
+ retained = 0;
48
+ input = 0;
49
+ output = 0;
50
+ diagnostics = 0;
51
+ chunks = 0;
52
+ empties = 0;
53
+ constructor(context, limits, signal, callerSignal, admission) {
54
+ this.context = context;
55
+ this.limits = limits;
56
+ this.signal = signal;
57
+ this.callerSignal = callerSignal;
58
+ this.admission = admission;
59
+ }
60
+ assertOpen() {
61
+ this.signal.throwIfAborted();
62
+ if (this.admission.closed)
63
+ throw new IconvError("command is closed");
64
+ }
65
+ check(value, maximum, label) {
66
+ if (!Number.isSafeInteger(value) || value < 0 || value > maximum)
67
+ throw new IconvError(`${label} limit exceeded`);
68
+ }
69
+ charge(amount = 1) {
70
+ this.assertOpen();
71
+ this.check(this.work + amount, this.limits.maxWork, "work");
72
+ this.work += amount;
73
+ }
74
+ async checkpointWork() {
75
+ this.assertOpen();
76
+ if (this.work - this.checkpoint >= 4096) {
77
+ this.checkpoint = this.work;
78
+ await yieldTurn(this.callerSignal);
79
+ this.assertOpen();
80
+ }
81
+ }
82
+ retain(amount) {
83
+ this.check(this.retained + amount, this.limits.maxBufferedBytes, "buffered bytes");
84
+ this.retained += amount;
85
+ }
86
+ snapshotMaximum() { return Math.min(this.limits.maxInputBytes - this.input, Math.floor((this.limits.maxBufferedBytes - this.retained) / 2)); }
87
+ inputBytes(amount) {
88
+ this.check(this.input + amount, this.limits.maxInputBytes, "input bytes");
89
+ this.input += amount;
90
+ this.check(++this.chunks, this.limits.maxChunks, "input chunks");
91
+ if (!amount)
92
+ this.check(++this.empties, this.limits.maxEmptyChunks, "empty input chunks");
93
+ this.charge(amount + 1);
94
+ }
95
+ emitted(amount, diagnostic) {
96
+ if (diagnostic) {
97
+ this.check(this.diagnostics + amount, this.limits.maxDiagnosticBytes, "diagnostic bytes");
98
+ this.diagnostics += amount;
99
+ }
100
+ else {
101
+ this.check(this.output + amount, this.limits.maxOutputBytes, "output bytes");
102
+ this.charge(amount);
103
+ this.output += amount;
104
+ }
105
+ }
106
+ arguments() {
107
+ this.assertOpen();
108
+ const args = this.context.args;
109
+ this.assertOpen();
110
+ const count = args.length;
111
+ this.assertOpen();
112
+ this.check(count, this.limits.maxArguments, "argument count");
113
+ const argumentValues = this.context.argumentValues;
114
+ this.assertOpen();
115
+ const carrier = argumentValues === undefined ? undefined : getCommandArguments({ args, argumentValues });
116
+ this.assertOpen();
117
+ this.retain(count * 64 + 128);
118
+ const snapshot = [];
119
+ let units = 0, total = 0;
120
+ for (let index = 0; index < count; index++) {
121
+ const argument = args[index];
122
+ this.assertOpen();
123
+ if (typeof argument !== "string")
124
+ throw new IconvError("arguments must be strings");
125
+ units += argument.length;
126
+ this.check(units, this.limits.maxArgumentBytes, "argument bytes");
127
+ this.charge(argument.length + 1);
128
+ for (let offset = 0; offset < argument.length; offset++) {
129
+ const unit = argument.charCodeAt(offset);
130
+ if (unit >= 0xd800 && unit <= 0xdbff) {
131
+ const next = argument.charCodeAt(++offset);
132
+ if (!(next >= 0xdc00 && next <= 0xdfff))
133
+ throw new IconvError("arguments must contain well-formed Unicode");
134
+ }
135
+ else if (unit >= 0xdc00 && unit <= 0xdfff)
136
+ throw new IconvError("arguments must contain well-formed Unicode");
137
+ }
138
+ const size = shellValueByteLength(carrier ? carrier.values[index] : argument);
139
+ total += size;
140
+ this.check(total, this.limits.maxArgumentBytes, "argument bytes");
141
+ this.charge(size);
142
+ this.retain(size * 8);
143
+ snapshot.push(argument);
144
+ }
145
+ return (carrier ?? getCommandArguments({ args: snapshot })).values.map(argument => {
146
+ this.charge(shellValueByteLength(argument));
147
+ const value = shellValueBytes(argument);
148
+ if (value.includes(0))
149
+ throw new IconvError("NUL is not supported in arguments");
150
+ return raw(value);
151
+ });
152
+ }
153
+ }
154
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/commands/iconv/internal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { OutputOperation } from "../../contracts/output.js";
2
+ import type { ByteSink } from "../../contracts/io.js";
3
+ import { Budget } from "./internal.js";
4
+ export declare class Lifecycle {
5
+ readonly budget: Budget;
6
+ private readonly stdout;
7
+ private readonly pending;
8
+ private readonly cleanups;
9
+ private closing;
10
+ private diagnosticDestination;
11
+ diagnosticCancellation: {
12
+ reason: unknown;
13
+ } | undefined;
14
+ constructor(budget: Budget, output: OutputOperation, stdout: ByteSink);
15
+ cleanup(action: () => Promise<void>): void;
16
+ forget(action: () => Promise<void>): void;
17
+ assertOpen(): void;
18
+ private assertDiagnosticOpen;
19
+ operation<Value>(action: () => Value | Promise<Value>, diagnostic?: boolean): Promise<Value>;
20
+ close(): Promise<void>;
21
+ write(value: Uint8Array, diagnostic?: boolean): Promise<void>;
22
+ diagnostic(message: string): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/commands/iconv/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAc,MAAM,eAAe,CAAC;AAEnD,qBAAa,SAAS;IAMR,QAAQ,CAAC,MAAM,EAAE,MAAM;IAA2B,OAAO,CAAC,QAAQ,CAAC,MAAM;IALrF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAC3D,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,qBAAqB,CAA2E;IACxG,sBAAsB,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;gBACnC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAmB,MAAM,EAAE,QAAQ;IAC/F,OAAO,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IACzC,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,oBAAoB;IAQtB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,UAAU,UAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IAmBhG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAShB,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB3D,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIjD"}
@@ -0,0 +1,111 @@
1
+ import { Budget, IconvError } from "./internal.js";
2
+ export class Lifecycle {
3
+ budget;
4
+ stdout;
5
+ pending = new Set();
6
+ cleanups = new Set();
7
+ closing;
8
+ diagnosticDestination;
9
+ diagnosticCancellation;
10
+ constructor(budget, output, stdout) {
11
+ this.budget = budget;
12
+ this.stdout = stdout;
13
+ output.registerCleanup(() => this.close());
14
+ }
15
+ cleanup(action) { this.assertOpen(); this.cleanups.add(action); }
16
+ forget(action) { this.cleanups.delete(action); }
17
+ assertOpen() {
18
+ this.budget.assertOpen();
19
+ if (this.closing)
20
+ throw new IconvError("command is closed");
21
+ }
22
+ assertDiagnosticOpen() {
23
+ this.budget.callerSignal.throwIfAborted();
24
+ const consumer = this.diagnosticDestination?.consumer;
25
+ if (consumer?.aborted) {
26
+ this.diagnosticCancellation = { reason: consumer.reason };
27
+ consumer.throwIfAborted();
28
+ }
29
+ }
30
+ async operation(action, diagnostic = false) {
31
+ if (diagnostic)
32
+ this.assertDiagnosticOpen();
33
+ else
34
+ this.assertOpen();
35
+ if (this.closing || this.budget.admission.closed)
36
+ throw new IconvError("command is closed");
37
+ if (!diagnostic)
38
+ this.budget.charge();
39
+ const pending = Promise.resolve().then(() => {
40
+ if (diagnostic)
41
+ this.assertDiagnosticOpen();
42
+ else
43
+ this.assertOpen();
44
+ return action();
45
+ });
46
+ this.pending.add(pending);
47
+ try {
48
+ const value = await pending;
49
+ if (diagnostic)
50
+ this.assertDiagnosticOpen();
51
+ else
52
+ this.assertOpen();
53
+ return value;
54
+ }
55
+ finally {
56
+ this.pending.delete(pending);
57
+ }
58
+ }
59
+ close() {
60
+ return this.closing ??= Promise.resolve().then(async () => {
61
+ while (this.pending.size)
62
+ await Promise.allSettled([...this.pending]);
63
+ const failures = [];
64
+ for (const cleanup of this.cleanups) {
65
+ try {
66
+ await cleanup();
67
+ }
68
+ catch (error) {
69
+ failures.push(error);
70
+ }
71
+ }
72
+ if (failures.length === 1)
73
+ throw failures[0];
74
+ if (failures.length > 1)
75
+ throw new AggregateError(failures, "iconv cleanup failed");
76
+ });
77
+ }
78
+ async write(value, diagnostic = false) {
79
+ this.budget.emitted(value.length, diagnostic);
80
+ await this.operation(async () => {
81
+ let destination;
82
+ if (diagnostic) {
83
+ if (!this.diagnosticDestination) {
84
+ const sink = this.budget.context.stderr;
85
+ this.assertDiagnosticOpen();
86
+ const capability = sink.ownedOutput;
87
+ this.assertDiagnosticOpen();
88
+ const consumer = capability?.consumerClosed;
89
+ this.diagnosticDestination = { destination: capability ?? sink, consumer };
90
+ }
91
+ this.assertDiagnosticOpen();
92
+ destination = this.diagnosticDestination.destination;
93
+ }
94
+ else {
95
+ destination = this.stdout;
96
+ this.assertOpen();
97
+ }
98
+ const write = destination.write;
99
+ if (diagnostic)
100
+ this.assertDiagnosticOpen();
101
+ else
102
+ this.assertOpen();
103
+ await Reflect.apply(write, destination, [value]);
104
+ }, diagnostic);
105
+ }
106
+ async diagnostic(message) {
107
+ this.budget.check(message.length * 3 + 8, this.budget.limits.maxDiagnosticBytes, "diagnostic bytes");
108
+ await this.write(new TextEncoder().encode(`iconv: ${message}\n`), true);
109
+ }
110
+ }
111
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/commands/iconv/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Budget } from "./internal.js";
2
+ export type Encoding = "ascii" | "latin1" | "utf8" | "utf16" | "utf16le" | "utf16be";
3
+ export interface Parsed {
4
+ readonly from: Encoding;
5
+ readonly to: Encoding;
6
+ readonly discard: boolean;
7
+ readonly transliterate: boolean;
8
+ readonly files: readonly string[];
9
+ }
10
+ export declare function parse(budget: Budget): Parsed;
11
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/commands/iconv/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,eAAe,CAAC;AAEnD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AACrF,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAgBD,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA0C5C"}