@poe-platform/safe-bash 0.1.530 → 0.1.531
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-2GV4WO7O.js +136 -0
- package/dist/safe-bash/chunks/chunk-2GV4WO7O.js.map +7 -0
- package/dist/safe-bash/chunks/chunk-54Z5EUCW.js +340 -0
- package/dist/safe-bash/chunks/chunk-54Z5EUCW.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-NYHAKXQ7.js → chunk-6MHYEBAJ.js} +16 -140
- package/dist/safe-bash/chunks/chunk-6MHYEBAJ.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-5MSOBYRG.js → chunk-IKATLB4I.js} +5 -3
- package/dist/safe-bash/chunks/{chunk-5MSOBYRG.js.map → chunk-IKATLB4I.js.map} +1 -1
- package/dist/safe-bash/chunks/{chunk-5OCQTFXT.js → chunk-LUJYX5H5.js} +6 -332
- package/dist/safe-bash/chunks/{chunk-5OCQTFXT.js.map → chunk-LUJYX5H5.js.map} +4 -4
- package/dist/safe-bash/chunks/chunk-UGMUVHIY.js +1603 -0
- package/dist/safe-bash/chunks/chunk-UGMUVHIY.js.map +7 -0
- package/dist/safe-bash/commands/network/args.d.ts +3 -0
- package/dist/safe-bash/commands/network/args.d.ts.map +1 -1
- package/dist/safe-bash/commands/network/args.js +1 -1
- package/dist/safe-bash/commands/network/args.js.map +1 -1
- package/dist/safe-bash/commands/network/body.js +2 -2
- package/dist/safe-bash/commands/network/body.js.map +1 -1
- package/dist/safe-bash/commands/network/curl.d.ts +12 -2
- package/dist/safe-bash/commands/network/curl.d.ts.map +1 -1
- package/dist/safe-bash/commands/network/curl.js +46 -27
- package/dist/safe-bash/commands/network/curl.js.map +1 -1
- package/dist/safe-bash/commands/network/index.browser.js +29 -0
- package/dist/safe-bash/commands/network/index.browser.js.map +7 -0
- package/dist/safe-bash/commands/network/index.d.ts +1 -10
- package/dist/safe-bash/commands/network/index.d.ts.map +1 -1
- package/dist/safe-bash/commands/network/index.js +1 -22
- package/dist/safe-bash/commands/network/index.js.map +1 -1
- package/dist/safe-bash/commands/network/platform.d.ts +4 -0
- package/dist/safe-bash/commands/network/platform.d.ts.map +1 -0
- package/dist/safe-bash/commands/network/platform.js +4 -0
- package/dist/safe-bash/commands/network/platform.js.map +1 -0
- package/dist/safe-bash/commands/network/public.d.ts +12 -0
- package/dist/safe-bash/commands/network/public.d.ts.map +1 -0
- package/dist/safe-bash/commands/network/public.js +27 -0
- package/dist/safe-bash/commands/network/public.js.map +1 -0
- package/dist/safe-bash/commands/network/shared.js +1 -1
- package/dist/safe-bash/commands/network/shared.js.map +1 -1
- package/dist/safe-bash/commands/network/wget.d.ts +4 -0
- package/dist/safe-bash/commands/network/wget.d.ts.map +1 -0
- package/dist/safe-bash/commands/network/wget.js +155 -0
- package/dist/safe-bash/commands/network/wget.js.map +1 -0
- package/dist/safe-bash/commands/xml/index.browser.js +3 -2
- package/dist/safe-bash/commands/yq/index.browser.js +4 -2
- package/dist/safe-bash/core.browser.js +42 -366
- package/dist/safe-bash/core.browser.js.map +4 -4
- package/dist/safe-bash/core.d.ts +1 -5
- package/dist/safe-bash/core.d.ts.map +1 -1
- package/dist/safe-bash/core.js +1 -3
- package/dist/safe-bash/core.js.map +1 -1
- package/package.json +9 -3
- package/dist/safe-bash/chunks/chunk-NYHAKXQ7.js.map +0 -7
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import {
|
|
2
|
+
init_platform,
|
|
3
|
+
outputFailure,
|
|
4
|
+
writeBytes
|
|
5
|
+
} from "./chunk-LUJYX5H5.js";
|
|
6
|
+
|
|
7
|
+
// packages/safe-bash/src/contracts/output.ts
|
|
8
|
+
init_platform();
|
|
9
|
+
function createOutputOperation(context, destination) {
|
|
10
|
+
const controller = new AbortController();
|
|
11
|
+
const signal = controller.signal;
|
|
12
|
+
const capability = destination.ownedOutput;
|
|
13
|
+
const callbacks = [];
|
|
14
|
+
const children = [];
|
|
15
|
+
const closedReason = new Error("Output operation is closed");
|
|
16
|
+
let accepting = true;
|
|
17
|
+
let drain;
|
|
18
|
+
const assertOpen = () => {
|
|
19
|
+
context.signal.throwIfAborted();
|
|
20
|
+
signal.throwIfAborted();
|
|
21
|
+
if (!accepting) throw closedReason;
|
|
22
|
+
};
|
|
23
|
+
const close = () => {
|
|
24
|
+
if (drain) return drain;
|
|
25
|
+
accepting = false;
|
|
26
|
+
drain = Promise.resolve().then(async () => {
|
|
27
|
+
try {
|
|
28
|
+
const results = await Promise.allSettled(callbacks.map(async (cleanup) => cleanup()));
|
|
29
|
+
const failures = results.filter((result) => result.status === "rejected").map((result) => result.reason);
|
|
30
|
+
if (failures.length === 1) throw failures[0];
|
|
31
|
+
if (failures.length) throw new AggregateError(failures, "Output operation cleanup failed");
|
|
32
|
+
} finally {
|
|
33
|
+
context.signal.removeEventListener("abort", callerAbort);
|
|
34
|
+
capability?.consumerClosed.removeEventListener("abort", outputAbort);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
void drain.catch(() => {
|
|
38
|
+
});
|
|
39
|
+
for (const child of children) void child.close().catch(() => {
|
|
40
|
+
});
|
|
41
|
+
return drain;
|
|
42
|
+
};
|
|
43
|
+
const abort = (reason) => {
|
|
44
|
+
controller.abort(reason);
|
|
45
|
+
void close().catch(() => {
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
const callerAbort = () => abort(context.signal.reason);
|
|
49
|
+
const outputAbort = () => abort(capability?.consumerClosed.reason);
|
|
50
|
+
const registerCleanup = (cleanup) => {
|
|
51
|
+
assertOpen();
|
|
52
|
+
if (typeof cleanup !== "function") throw new TypeError("Cleanup must be callable");
|
|
53
|
+
callbacks.push(cleanup);
|
|
54
|
+
};
|
|
55
|
+
const wait = (pending) => new Promise((resolve, reject) => {
|
|
56
|
+
const aborted = () => reject(signal.reason);
|
|
57
|
+
if (signal.aborted) aborted();
|
|
58
|
+
else signal.addEventListener("abort", aborted, { once: true });
|
|
59
|
+
pending.then((value) => {
|
|
60
|
+
signal.removeEventListener("abort", aborted);
|
|
61
|
+
resolve(value);
|
|
62
|
+
}, (error) => {
|
|
63
|
+
signal.removeEventListener("abort", aborted);
|
|
64
|
+
reject(error);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
context.registerCleanup?.(close);
|
|
68
|
+
if (context.signal.aborted) callerAbort();
|
|
69
|
+
else if (capability?.consumerClosed.aborted) outputAbort();
|
|
70
|
+
else {
|
|
71
|
+
context.signal.addEventListener("abort", callerAbort, { once: true });
|
|
72
|
+
capability?.consumerClosed.addEventListener("abort", outputAbort, { once: true });
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
signal,
|
|
76
|
+
output: {
|
|
77
|
+
...destination[outputFailure] ? { [outputFailure]: destination[outputFailure] } : {},
|
|
78
|
+
async write(chunk) {
|
|
79
|
+
assertOpen();
|
|
80
|
+
await writeBytes(capability ?? destination, chunk, signal);
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
registerCleanup,
|
|
84
|
+
child(destination2) {
|
|
85
|
+
assertOpen();
|
|
86
|
+
const child = createOutputOperation({ signal, registerCleanup }, destination2);
|
|
87
|
+
children.push(child);
|
|
88
|
+
return child;
|
|
89
|
+
},
|
|
90
|
+
async acquire(start, release) {
|
|
91
|
+
assertOpen();
|
|
92
|
+
let resource;
|
|
93
|
+
let settled;
|
|
94
|
+
const admitted = new Promise((resolve) => {
|
|
95
|
+
settled = resolve;
|
|
96
|
+
});
|
|
97
|
+
let released;
|
|
98
|
+
const dispose = () => {
|
|
99
|
+
released ??= admitted.then(async () => {
|
|
100
|
+
if (resource) await release(resource.value);
|
|
101
|
+
});
|
|
102
|
+
return released;
|
|
103
|
+
};
|
|
104
|
+
registerCleanup(dispose);
|
|
105
|
+
let acquisition;
|
|
106
|
+
try {
|
|
107
|
+
acquisition = Promise.resolve(start(signal));
|
|
108
|
+
} catch (error) {
|
|
109
|
+
acquisition = Promise.reject(error);
|
|
110
|
+
}
|
|
111
|
+
const pending = acquisition.then(async (value) => {
|
|
112
|
+
resource = { value };
|
|
113
|
+
settled();
|
|
114
|
+
if (!accepting) {
|
|
115
|
+
await dispose();
|
|
116
|
+
throw signal.aborted ? signal.reason : closedReason;
|
|
117
|
+
}
|
|
118
|
+
return value;
|
|
119
|
+
}, (error) => {
|
|
120
|
+
settled();
|
|
121
|
+
throw error;
|
|
122
|
+
});
|
|
123
|
+
return wait(pending);
|
|
124
|
+
},
|
|
125
|
+
close,
|
|
126
|
+
abort(reason) {
|
|
127
|
+
abort(reason);
|
|
128
|
+
return close();
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export {
|
|
134
|
+
createOutputOperation
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=chunk-2GV4WO7O.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/contracts/output.ts"],
|
|
4
|
+
"sourcesContent": ["import type { CommandContext, InvocationCleanup } from \"./command.js\";\nimport { outputFailure, writeBytes, type ByteSink } from \"./io.js\";\n\nexport interface OutputOperation {\n readonly signal: AbortSignal;\n readonly output: ByteSink;\n child(destination: ByteSink): OutputOperation;\n registerCleanup(cleanup: InvocationCleanup): void;\n acquire<Value>(start: (signal: AbortSignal) => Value | Promise<Value>, release: (resource: Value) => void | Promise<void>): Promise<Value>;\n close(): Promise<void>;\n abort(reason: unknown): Promise<void>;\n}\n\nexport function createOutputOperation(context: Pick<CommandContext, \"signal\" | \"registerCleanup\">, destination: ByteSink): OutputOperation {\n const controller = new AbortController();\n const signal = controller.signal;\n const capability = destination.ownedOutput;\n const callbacks: InvocationCleanup[] = [];\n const children: OutputOperation[] = [];\n const closedReason = new Error(\"Output operation is closed\");\n let accepting = true;\n let drain: Promise<void> | undefined;\n const assertOpen = (): void => {\n context.signal.throwIfAborted();\n signal.throwIfAborted();\n if (!accepting) throw closedReason;\n };\n const close = (): Promise<void> => {\n if (drain) return drain;\n accepting = false;\n drain = Promise.resolve().then(async () => {\n try {\n const results = await Promise.allSettled(callbacks.map(async cleanup => cleanup()));\n const failures = results.filter(result => result.status === \"rejected\").map(result => result.reason);\n if (failures.length === 1) throw failures[0];\n if (failures.length) throw new AggregateError(failures, \"Output operation cleanup failed\");\n } finally {\n context.signal.removeEventListener(\"abort\", callerAbort);\n capability?.consumerClosed.removeEventListener(\"abort\", outputAbort);\n }\n });\n void drain.catch(() => {});\n for (const child of children) void child.close().catch(() => {});\n return drain;\n };\n const abort = (reason: unknown): void => {\n controller.abort(reason);\n void close().catch(() => {});\n };\n const callerAbort = (): void => abort(context.signal.reason);\n const outputAbort = (): void => abort(capability?.consumerClosed.reason);\n const registerCleanup = (cleanup: InvocationCleanup): void => {\n assertOpen();\n if (typeof cleanup !== \"function\") throw new TypeError(\"Cleanup must be callable\");\n callbacks.push(cleanup);\n };\n const wait = <Value>(pending: Promise<Value>): Promise<Value> => new Promise((resolve, reject) => {\n const aborted = (): void => reject(signal.reason);\n if (signal.aborted) aborted();\n else signal.addEventListener(\"abort\", aborted, { once: true });\n pending.then(value => {\n signal.removeEventListener(\"abort\", aborted);\n resolve(value);\n }, error => {\n signal.removeEventListener(\"abort\", aborted);\n reject(error);\n });\n });\n context.registerCleanup?.(close);\n if (context.signal.aborted) callerAbort();\n else if (capability?.consumerClosed.aborted) outputAbort();\n else {\n context.signal.addEventListener(\"abort\", callerAbort, { once: true });\n capability?.consumerClosed.addEventListener(\"abort\", outputAbort, { once: true });\n }\n return {\n signal,\n output: {\n ...(destination[outputFailure] ? { [outputFailure]: destination[outputFailure] } : {}),\n async write(chunk) {\n assertOpen();\n await writeBytes(capability ?? destination, chunk, signal);\n },\n },\n registerCleanup,\n child(destination) {\n assertOpen();\n const child = createOutputOperation({ signal, registerCleanup }, destination);\n children.push(child);\n return child;\n },\n async acquire<Value>(start: (signal: AbortSignal) => Value | Promise<Value>, release: (resource: Value) => void | Promise<void>) {\n assertOpen();\n let resource: { value: Value } | undefined;\n let settled!: () => void;\n const admitted = new Promise<void>(resolve => { settled = resolve; });\n let released: Promise<void> | undefined;\n const dispose = (): Promise<void> => {\n released ??= admitted.then(async () => { if (resource) await release(resource.value); });\n return released;\n };\n registerCleanup(dispose);\n let acquisition: Promise<Value>;\n try { acquisition = Promise.resolve(start(signal)); }\n catch (error) { acquisition = Promise.reject(error); }\n const pending = acquisition.then(async value => {\n resource = { value };\n settled();\n if (!accepting) {\n await dispose();\n throw signal.aborted ? signal.reason : closedReason;\n }\n return value;\n }, error => {\n settled();\n throw error;\n });\n return wait(pending);\n },\n close,\n abort(reason) {\n abort(reason);\n return close();\n },\n };\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;AAAA;AAaO,SAAS,sBAAsB,SAA6D,aAAwC;AACzI,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,SAAS,WAAW;AAC1B,QAAM,aAAa,YAAY;AAC/B,QAAM,YAAiC,CAAC;AACxC,QAAM,WAA8B,CAAC;AACrC,QAAM,eAAe,IAAI,MAAM,4BAA4B;AAC3D,MAAI,YAAY;AAChB,MAAI;AACJ,QAAM,aAAa,MAAY;AAC7B,YAAQ,OAAO,eAAe;AAC9B,WAAO,eAAe;AACtB,QAAI,CAAC,UAAW,OAAM;AAAA,EACxB;AACA,QAAM,QAAQ,MAAqB;AACjC,QAAI,MAAO,QAAO;AAClB,gBAAY;AACZ,YAAQ,QAAQ,QAAQ,EAAE,KAAK,YAAY;AACzC,UAAI;AACF,cAAM,UAAU,MAAM,QAAQ,WAAW,UAAU,IAAI,OAAM,YAAW,QAAQ,CAAC,CAAC;AAClF,cAAM,WAAW,QAAQ,OAAO,YAAU,OAAO,WAAW,UAAU,EAAE,IAAI,YAAU,OAAO,MAAM;AACnG,YAAI,SAAS,WAAW,EAAG,OAAM,SAAS,CAAC;AAC3C,YAAI,SAAS,OAAQ,OAAM,IAAI,eAAe,UAAU,iCAAiC;AAAA,MAC3F,UAAE;AACA,gBAAQ,OAAO,oBAAoB,SAAS,WAAW;AACvD,oBAAY,eAAe,oBAAoB,SAAS,WAAW;AAAA,MACrE;AAAA,IACF,CAAC;AACD,SAAK,MAAM,MAAM,MAAM;AAAA,IAAC,CAAC;AACzB,eAAW,SAAS,SAAU,MAAK,MAAM,MAAM,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAC/D,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,CAAC,WAA0B;AACvC,eAAW,MAAM,MAAM;AACvB,SAAK,MAAM,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EAC7B;AACA,QAAM,cAAc,MAAY,MAAM,QAAQ,OAAO,MAAM;AAC3D,QAAM,cAAc,MAAY,MAAM,YAAY,eAAe,MAAM;AACvE,QAAM,kBAAkB,CAAC,YAAqC;AAC5D,eAAW;AACX,QAAI,OAAO,YAAY,WAAY,OAAM,IAAI,UAAU,0BAA0B;AACjF,cAAU,KAAK,OAAO;AAAA,EACxB;AACA,QAAM,OAAO,CAAQ,YAA4C,IAAI,QAAQ,CAAC,SAAS,WAAW;AAChG,UAAM,UAAU,MAAY,OAAO,OAAO,MAAM;AAChD,QAAI,OAAO,QAAS,SAAQ;AAAA,QACvB,QAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAC7D,YAAQ,KAAK,WAAS;AACpB,aAAO,oBAAoB,SAAS,OAAO;AAC3C,cAAQ,KAAK;AAAA,IACf,GAAG,WAAS;AACV,aAAO,oBAAoB,SAAS,OAAO;AAC3C,aAAO,KAAK;AAAA,IACd,CAAC;AAAA,EACH,CAAC;AACD,UAAQ,kBAAkB,KAAK;AAC/B,MAAI,QAAQ,OAAO,QAAS,aAAY;AAAA,WAC/B,YAAY,eAAe,QAAS,aAAY;AAAA,OACpD;AACH,YAAQ,OAAO,iBAAiB,SAAS,aAAa,EAAE,MAAM,KAAK,CAAC;AACpE,gBAAY,eAAe,iBAAiB,SAAS,aAAa,EAAE,MAAM,KAAK,CAAC;AAAA,EAClF;AACA,SAAO;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,MACN,GAAI,YAAY,aAAa,IAAI,EAAE,CAAC,aAAa,GAAG,YAAY,aAAa,EAAE,IAAI,CAAC;AAAA,MACpF,MAAM,MAAM,OAAO;AACjB,mBAAW;AACX,cAAM,WAAW,cAAc,aAAa,OAAO,MAAM;AAAA,MAC3D;AAAA,IACF;AAAA,IACA;AAAA,IACA,MAAMA,cAAa;AACjB,iBAAW;AACX,YAAM,QAAQ,sBAAsB,EAAE,QAAQ,gBAAgB,GAAGA,YAAW;AAC5E,eAAS,KAAK,KAAK;AACnB,aAAO;AAAA,IACT;AAAA,IACA,MAAM,QAAe,OAAwD,SAAoD;AAC/H,iBAAW;AACX,UAAI;AACJ,UAAI;AACJ,YAAM,WAAW,IAAI,QAAc,aAAW;AAAE,kBAAU;AAAA,MAAS,CAAC;AACpE,UAAI;AACJ,YAAM,UAAU,MAAqB;AACnC,qBAAa,SAAS,KAAK,YAAY;AAAE,cAAI,SAAU,OAAM,QAAQ,SAAS,KAAK;AAAA,QAAG,CAAC;AACvF,eAAO;AAAA,MACT;AACA,sBAAgB,OAAO;AACvB,UAAI;AACJ,UAAI;AAAE,sBAAc,QAAQ,QAAQ,MAAM,MAAM,CAAC;AAAA,MAAG,SAC7C,OAAO;AAAE,sBAAc,QAAQ,OAAO,KAAK;AAAA,MAAG;AACrD,YAAM,UAAU,YAAY,KAAK,OAAM,UAAS;AAC9C,mBAAW,EAAE,MAAM;AACnB,gBAAQ;AACR,YAAI,CAAC,WAAW;AACd,gBAAM,QAAQ;AACd,gBAAM,OAAO,UAAU,OAAO,SAAS;AAAA,QACzC;AACA,eAAO;AAAA,MACT,GAAG,WAAS;AACV,gBAAQ;AACR,cAAM;AAAA,MACR,CAAC;AACD,aAAO,KAAK,OAAO;AAAA,IACrB;AAAA,IACA;AAAA,IACA,MAAM,QAAQ;AACZ,YAAM,MAAM;AACZ,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AACF;",
|
|
6
|
+
"names": ["destination"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import {
|
|
2
|
+
import_buffer,
|
|
3
|
+
init_platform,
|
|
4
|
+
monotonicNow,
|
|
5
|
+
yieldTurn
|
|
6
|
+
} from "./chunk-LUJYX5H5.js";
|
|
7
|
+
|
|
8
|
+
// packages/safe-bash/src/commands/structured/limits.ts
|
|
9
|
+
init_platform();
|
|
10
|
+
|
|
11
|
+
// packages/safe-bash/src/commands/structured/numbers.ts
|
|
12
|
+
init_platform();
|
|
13
|
+
var Decimal = class {
|
|
14
|
+
constructor(digits, exponent, negative, text, double) {
|
|
15
|
+
this.digits = digits;
|
|
16
|
+
this.exponent = exponent;
|
|
17
|
+
this.negative = negative;
|
|
18
|
+
this.text = text;
|
|
19
|
+
this.double = double;
|
|
20
|
+
Object.freeze(this);
|
|
21
|
+
}
|
|
22
|
+
digits;
|
|
23
|
+
exponent;
|
|
24
|
+
negative;
|
|
25
|
+
text;
|
|
26
|
+
double;
|
|
27
|
+
};
|
|
28
|
+
function isNumber(value) {
|
|
29
|
+
return typeof value === "number" || value instanceof Decimal;
|
|
30
|
+
}
|
|
31
|
+
function numberValue(value) {
|
|
32
|
+
return typeof value === "number" ? value : value.double;
|
|
33
|
+
}
|
|
34
|
+
function numericToken(token, budget) {
|
|
35
|
+
budget.step(Math.ceil(token.length / 32));
|
|
36
|
+
const end = token.indexOf("\0");
|
|
37
|
+
const text = end < 0 ? token : token.slice(0, end);
|
|
38
|
+
if (/^[+-]?s?nan[0-9]*$/iu.test(text)) return new Decimal("0", NaN, false, "null", NaN);
|
|
39
|
+
if (/^[+-]?inf(?:inity)?$/iu.test(text)) {
|
|
40
|
+
const negative = text[0] === "-";
|
|
41
|
+
const value = negative ? -Infinity : Infinity;
|
|
42
|
+
return new Decimal("1", Infinity, negative, numberText(value), value);
|
|
43
|
+
}
|
|
44
|
+
if (!/^[+-]?(?:[0-9]+(?:\.[0-9]*)?|\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/u.test(text)) return void 0;
|
|
45
|
+
return decimalNumber(text[0] === "+" ? text.slice(1) : text, budget);
|
|
46
|
+
}
|
|
47
|
+
function increment(digits) {
|
|
48
|
+
let position = digits.length - 1;
|
|
49
|
+
while (position >= 0 && digits[position] === "9") position--;
|
|
50
|
+
return position < 0 ? `1${"0".repeat(digits.length)}` : `${digits.slice(0, position)}${Number(digits[position]) + 1}${"0".repeat(digits.length - position - 1)}`;
|
|
51
|
+
}
|
|
52
|
+
function decimalDouble(digits, exponent, negative) {
|
|
53
|
+
let rounded = digits;
|
|
54
|
+
if (digits.length > 17) {
|
|
55
|
+
rounded = digits.slice(0, 17);
|
|
56
|
+
const next = digits[17];
|
|
57
|
+
if (next > "5" || next === "5" && (/[1-9]/u.test(digits.slice(18)) || Number(rounded[16]) % 2 !== 0)) rounded = increment(rounded);
|
|
58
|
+
exponent += digits.length - 17;
|
|
59
|
+
}
|
|
60
|
+
return Number(`${negative ? "-" : ""}${rounded}e${exponent}`);
|
|
61
|
+
}
|
|
62
|
+
function decimalText(digits, exponent, negative) {
|
|
63
|
+
const sign = negative ? "-" : "";
|
|
64
|
+
const adjusted = exponent + digits.length - 1;
|
|
65
|
+
if (exponent > 0 || adjusted < -6) return `${sign}${digits[0]}${digits.length > 1 ? `.${digits.slice(1)}` : ""}E${adjusted >= 0 ? "+" : ""}${adjusted}`;
|
|
66
|
+
const point = digits.length + exponent;
|
|
67
|
+
if (point <= 0) return `${sign}0.${"0".repeat(-point)}${digits}`;
|
|
68
|
+
return `${sign}${digits.slice(0, point)}${point < digits.length ? `.${digits.slice(point)}` : ""}`;
|
|
69
|
+
}
|
|
70
|
+
function decimalNumber(token, budget) {
|
|
71
|
+
budget.text(token);
|
|
72
|
+
budget.step(Math.ceil(token.length / 32));
|
|
73
|
+
const negative = token[0] === "-";
|
|
74
|
+
const unsigned = negative ? token.slice(1) : token;
|
|
75
|
+
const marker = unsigned.search(/[eE]/u);
|
|
76
|
+
const coefficient = marker < 0 ? unsigned : unsigned.slice(0, marker);
|
|
77
|
+
const point = coefficient.indexOf(".");
|
|
78
|
+
let exponent = (marker < 0 ? 0 : Number(unsigned.slice(marker + 1))) - (point < 0 ? 0 : coefficient.length - point - 1);
|
|
79
|
+
let digits = coefficient.replace(".", "").replace(/^0+/u, "") || "0";
|
|
80
|
+
const minimumExponent = -1147483646;
|
|
81
|
+
const maximumExponent = 999999999;
|
|
82
|
+
if (digits === "0") exponent = Math.max(minimumExponent, Math.min(maximumExponent, exponent));
|
|
83
|
+
else if (exponent + digits.length - 1 > maximumExponent) {
|
|
84
|
+
const infinity = negative ? -Infinity : Infinity;
|
|
85
|
+
return new Decimal("1", Infinity, negative, numberText(infinity), infinity);
|
|
86
|
+
} else if (exponent < minimumExponent) {
|
|
87
|
+
const retained = digits.length - (minimumExponent - exponent);
|
|
88
|
+
const roundUp = retained >= 0 && digits[retained] >= "5";
|
|
89
|
+
digits = retained > 0 ? digits.slice(0, retained) : "0";
|
|
90
|
+
if (roundUp) digits = increment(digits);
|
|
91
|
+
exponent = minimumExponent;
|
|
92
|
+
}
|
|
93
|
+
const text = decimalText(digits, exponent, negative);
|
|
94
|
+
budget.text(text);
|
|
95
|
+
return new Decimal(digits, exponent, negative, text, decimalDouble(digits, exponent, negative));
|
|
96
|
+
}
|
|
97
|
+
function compareNumbers(left, right, budget) {
|
|
98
|
+
if (Number.isNaN(numberValue(left))) return -1;
|
|
99
|
+
if (Number.isNaN(numberValue(right))) return 1;
|
|
100
|
+
if (!(left instanceof Decimal) || !(right instanceof Decimal)) {
|
|
101
|
+
const first = numberValue(left);
|
|
102
|
+
const second = numberValue(right);
|
|
103
|
+
return first < second ? -1 : first === second ? 0 : 1;
|
|
104
|
+
}
|
|
105
|
+
if (left.digits === "0" && right.digits === "0") return 0;
|
|
106
|
+
const sign = left.negative ? -1 : 1;
|
|
107
|
+
if (left.negative !== right.negative) return sign;
|
|
108
|
+
if (left.digits === "0") return -sign;
|
|
109
|
+
if (right.digits === "0") return sign;
|
|
110
|
+
if (left.exponent === Infinity || right.exponent === Infinity) return left.exponent === right.exponent ? 0 : left.exponent === Infinity ? sign : -sign;
|
|
111
|
+
const magnitude = left.exponent + left.digits.length - right.exponent - right.digits.length;
|
|
112
|
+
if (magnitude) return Math.sign(magnitude) * sign;
|
|
113
|
+
const length = Math.max(left.digits.length, right.digits.length);
|
|
114
|
+
budget.step(Math.ceil(length / 32));
|
|
115
|
+
for (let index = 0; index < length; index++) {
|
|
116
|
+
if (index % 1024 === 0) budget.step();
|
|
117
|
+
const first = left.digits[index] ?? "0";
|
|
118
|
+
const second = right.digits[index] ?? "0";
|
|
119
|
+
if (first !== second) return (first < second ? -1 : 1) * sign;
|
|
120
|
+
}
|
|
121
|
+
return 0;
|
|
122
|
+
}
|
|
123
|
+
function numberText(value) {
|
|
124
|
+
if (value instanceof Decimal) return value.text;
|
|
125
|
+
if (Number.isNaN(value)) return "null";
|
|
126
|
+
const bounded = Math.max(-Number.MAX_VALUE, Math.min(Number.MAX_VALUE, value));
|
|
127
|
+
const sign = bounded < 0 || Object.is(bounded, -0) ? "-" : "";
|
|
128
|
+
const [mantissa, power] = Math.abs(bounded).toExponential().split("e");
|
|
129
|
+
const digits = mantissa.replace(".", "");
|
|
130
|
+
const exponent = Number(power);
|
|
131
|
+
const point = exponent + 1;
|
|
132
|
+
if (point <= -4 || point > digits.length + 15) return `${sign}${mantissa}e${exponent < 0 ? "-" : "+"}${String(Math.abs(exponent)).padStart(2, "0")}`;
|
|
133
|
+
if (point <= 0) return `${sign}0.${"0".repeat(-point)}${digits}`;
|
|
134
|
+
return `${sign}${point >= digits.length ? digits.padEnd(point, "0") : `${digits.slice(0, point)}.${digits.slice(point)}`}`;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// packages/safe-bash/src/commands/structured/limits.ts
|
|
138
|
+
var defaultJqLimits = Object.freeze({
|
|
139
|
+
maxInputBytes: 64 * 1024 * 1024,
|
|
140
|
+
maxValueBytes: 8 * 1024 * 1024,
|
|
141
|
+
maxOutputBytes: 16 * 1024 * 1024,
|
|
142
|
+
maxSourceBytes: 64 * 1024,
|
|
143
|
+
maxDepth: 128,
|
|
144
|
+
maxAstDepth: 64,
|
|
145
|
+
maxSteps: 1e6,
|
|
146
|
+
maxResults: 1e5,
|
|
147
|
+
maxCollectionSize: 1e5
|
|
148
|
+
});
|
|
149
|
+
var JqError = class extends Error {
|
|
150
|
+
constructor(message, exitCode = 5) {
|
|
151
|
+
super(message);
|
|
152
|
+
this.exitCode = exitCode;
|
|
153
|
+
}
|
|
154
|
+
exitCode;
|
|
155
|
+
};
|
|
156
|
+
var JqLimitError = class extends JqError {
|
|
157
|
+
constructor(name) {
|
|
158
|
+
super(`${name} limit exceeded`);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
function resolveJqLimits(options = {}) {
|
|
162
|
+
const limits = { ...defaultJqLimits, ...options };
|
|
163
|
+
for (const [name, value] of Object.entries(limits)) {
|
|
164
|
+
if (!Number.isSafeInteger(value) || value < 1) throw new RangeError(`${name} must be a positive safe integer`);
|
|
165
|
+
}
|
|
166
|
+
if (limits.maxDepth > 256 || limits.maxAstDepth > 128) throw new RangeError("maxDepth must be <=256 and maxAstDepth <=128");
|
|
167
|
+
return Object.freeze(limits);
|
|
168
|
+
}
|
|
169
|
+
var Budget = class {
|
|
170
|
+
constructor(limits, signal) {
|
|
171
|
+
this.limits = limits;
|
|
172
|
+
this.signal = signal;
|
|
173
|
+
}
|
|
174
|
+
limits;
|
|
175
|
+
signal;
|
|
176
|
+
steps = 0;
|
|
177
|
+
nextYield = 1024;
|
|
178
|
+
lastYield = monotonicNow();
|
|
179
|
+
inputBytes = 0;
|
|
180
|
+
outputBytes = 0;
|
|
181
|
+
results = 0;
|
|
182
|
+
inputLocation = { name: "<unknown>", line: 0, complete: true };
|
|
183
|
+
step(count = 1) {
|
|
184
|
+
this.signal.throwIfAborted();
|
|
185
|
+
this.steps += count;
|
|
186
|
+
if (this.steps > this.limits.maxSteps) throw new JqLimitError("maxSteps");
|
|
187
|
+
}
|
|
188
|
+
async tick(count = 1) {
|
|
189
|
+
this.step(count);
|
|
190
|
+
if (this.steps >= this.nextYield || monotonicNow() - this.lastYield >= 25) {
|
|
191
|
+
await yieldTurn(this.signal);
|
|
192
|
+
this.signal.throwIfAborted();
|
|
193
|
+
this.nextYield = this.steps + 1024;
|
|
194
|
+
this.lastYield = monotonicNow();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
collection(size) {
|
|
198
|
+
if (size > this.limits.maxCollectionSize) throw new JqLimitError("maxCollectionSize");
|
|
199
|
+
}
|
|
200
|
+
text(text) {
|
|
201
|
+
if (text.length > this.limits.maxValueBytes || import_buffer.Buffer.byteLength(text) > this.limits.maxValueBytes) throw new JqLimitError("maxValueBytes");
|
|
202
|
+
}
|
|
203
|
+
value(value) {
|
|
204
|
+
let bytes = 0;
|
|
205
|
+
const visit = (current, depth) => {
|
|
206
|
+
this.step();
|
|
207
|
+
if (depth > this.limits.maxDepth) throw new JqLimitError("maxDepth");
|
|
208
|
+
if (current !== null && typeof current === "object" && !(current instanceof Decimal)) {
|
|
209
|
+
if (depth + 1 > this.limits.maxDepth) throw new JqLimitError("maxDepth");
|
|
210
|
+
const keys = Array.isArray(current) ? Object.keys(current) : objectKeys(current);
|
|
211
|
+
this.collection(keys.length);
|
|
212
|
+
bytes += 2 + Math.max(0, keys.length - 1);
|
|
213
|
+
for (const key of keys) {
|
|
214
|
+
if (!Array.isArray(current)) {
|
|
215
|
+
this.text(key);
|
|
216
|
+
bytes += import_buffer.Buffer.byteLength(JSON.stringify(key)) + 1;
|
|
217
|
+
}
|
|
218
|
+
if (bytes > this.limits.maxValueBytes) throw new JqLimitError("maxValueBytes");
|
|
219
|
+
visit(current[key], depth + 1);
|
|
220
|
+
}
|
|
221
|
+
} else {
|
|
222
|
+
if (typeof current === "string") {
|
|
223
|
+
this.step(current.length);
|
|
224
|
+
this.text(current);
|
|
225
|
+
}
|
|
226
|
+
bytes += import_buffer.Buffer.byteLength(scalarJson(current, this));
|
|
227
|
+
}
|
|
228
|
+
if (bytes > this.limits.maxValueBytes) throw new JqLimitError("maxValueBytes");
|
|
229
|
+
};
|
|
230
|
+
visit(value, 0);
|
|
231
|
+
return bytes;
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
var keyOrders = /* @__PURE__ */ new WeakMap();
|
|
235
|
+
function object() {
|
|
236
|
+
const result = /* @__PURE__ */ Object.create(null);
|
|
237
|
+
keyOrders.set(result, []);
|
|
238
|
+
return result;
|
|
239
|
+
}
|
|
240
|
+
function objectKeys(value) {
|
|
241
|
+
return keyOrders.get(value)?.slice() ?? Object.keys(value);
|
|
242
|
+
}
|
|
243
|
+
function* objectKeyIterator(value) {
|
|
244
|
+
const keys = keyOrders.get(value);
|
|
245
|
+
if (keys) yield* keys;
|
|
246
|
+
else for (const key in value) if (Object.hasOwn(value, key)) yield key;
|
|
247
|
+
}
|
|
248
|
+
function objectSize(value) {
|
|
249
|
+
return keyOrders.get(value)?.length ?? Object.keys(value).length;
|
|
250
|
+
}
|
|
251
|
+
function put(value, key, item) {
|
|
252
|
+
if (!Object.hasOwn(value, key)) keyOrders.get(value)?.push(key);
|
|
253
|
+
value[key] = item;
|
|
254
|
+
}
|
|
255
|
+
function remove(value, key) {
|
|
256
|
+
delete value[key];
|
|
257
|
+
const keys = keyOrders.get(value);
|
|
258
|
+
if (keys) {
|
|
259
|
+
const index = keys.indexOf(key);
|
|
260
|
+
if (index >= 0) keys.splice(index, 1);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
function copyObject(...sources) {
|
|
264
|
+
const result = object();
|
|
265
|
+
for (const source of sources) if (source) for (const key of objectKeys(source)) put(result, key, source[key]);
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
268
|
+
function wellFormed(text) {
|
|
269
|
+
for (let index = 0; index < text.length; index++) {
|
|
270
|
+
const code = text.charCodeAt(index);
|
|
271
|
+
if (code >= 55296 && code <= 56319) {
|
|
272
|
+
const next = text.charCodeAt(++index);
|
|
273
|
+
if (!(next >= 56320 && next <= 57343)) return false;
|
|
274
|
+
} else if (code >= 56320 && code <= 57343) return false;
|
|
275
|
+
}
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
function isObject(value) {
|
|
279
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) && !(value instanceof Decimal);
|
|
280
|
+
}
|
|
281
|
+
function truth(value) {
|
|
282
|
+
return value !== null && value !== false;
|
|
283
|
+
}
|
|
284
|
+
function scalarJson(value, budget) {
|
|
285
|
+
if (value instanceof Decimal) budget.step(Math.ceil(value.text.length / 32));
|
|
286
|
+
return isNumber(value) ? numberText(value) : JSON.stringify(value);
|
|
287
|
+
}
|
|
288
|
+
async function interruptible(operation, signal) {
|
|
289
|
+
signal.throwIfAborted();
|
|
290
|
+
return new Promise((resolve, reject) => {
|
|
291
|
+
const aborted = () => {
|
|
292
|
+
signal.removeEventListener("abort", aborted);
|
|
293
|
+
reject(signal.reason);
|
|
294
|
+
};
|
|
295
|
+
signal.addEventListener("abort", aborted, { once: true });
|
|
296
|
+
try {
|
|
297
|
+
Promise.resolve(operation()).then(
|
|
298
|
+
(result) => {
|
|
299
|
+
signal.removeEventListener("abort", aborted);
|
|
300
|
+
resolve(result);
|
|
301
|
+
},
|
|
302
|
+
(error) => {
|
|
303
|
+
signal.removeEventListener("abort", aborted);
|
|
304
|
+
reject(error);
|
|
305
|
+
}
|
|
306
|
+
);
|
|
307
|
+
} catch (error) {
|
|
308
|
+
signal.removeEventListener("abort", aborted);
|
|
309
|
+
reject(error);
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
export {
|
|
315
|
+
Decimal,
|
|
316
|
+
isNumber,
|
|
317
|
+
numberValue,
|
|
318
|
+
numericToken,
|
|
319
|
+
decimalNumber,
|
|
320
|
+
compareNumbers,
|
|
321
|
+
numberText,
|
|
322
|
+
defaultJqLimits,
|
|
323
|
+
JqError,
|
|
324
|
+
JqLimitError,
|
|
325
|
+
resolveJqLimits,
|
|
326
|
+
Budget,
|
|
327
|
+
object,
|
|
328
|
+
objectKeys,
|
|
329
|
+
objectKeyIterator,
|
|
330
|
+
objectSize,
|
|
331
|
+
put,
|
|
332
|
+
remove,
|
|
333
|
+
copyObject,
|
|
334
|
+
wellFormed,
|
|
335
|
+
isObject,
|
|
336
|
+
truth,
|
|
337
|
+
scalarJson,
|
|
338
|
+
interruptible
|
|
339
|
+
};
|
|
340
|
+
//# sourceMappingURL=chunk-54Z5EUCW.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/structured/limits.ts", "../../src/commands/structured/numbers.ts"],
|
|
4
|
+
"sourcesContent": ["import { monotonicNow, yieldTurn } from \"../../contracts/yield.js\";\nimport { Decimal, isNumber, numberText } from \"./numbers.js\";\n\nexport type Json = null | boolean | number | Decimal | string | Json[] | { [key: string]: Json };\nexport interface JqLimits {\n readonly maxInputBytes: number;\n readonly maxValueBytes: number;\n readonly maxOutputBytes: number;\n readonly maxSourceBytes: number;\n readonly maxDepth: number;\n readonly maxAstDepth: number;\n readonly maxSteps: number;\n readonly maxResults: number;\n readonly maxCollectionSize: number;\n}\nexport interface StructuredCommandsOptions {\n readonly replace?: boolean;\n readonly limits?: Partial<JqLimits>;\n}\nexport const defaultJqLimits: Readonly<JqLimits> = Object.freeze({\n maxInputBytes: 64 * 1024 * 1024, maxValueBytes: 8 * 1024 * 1024,\n maxOutputBytes: 16 * 1024 * 1024, maxSourceBytes: 64 * 1024,\n maxDepth: 128, maxAstDepth: 64, maxSteps: 1_000_000,\n maxResults: 100_000, maxCollectionSize: 100_000,\n});\nexport class JqError extends Error {\n constructor(message: string, readonly exitCode = 5) { super(message); }\n}\nexport class JqLimitError extends JqError {\n constructor(name: keyof JqLimits) { super(`${name} limit exceeded`); }\n}\nexport interface InputLocation {\n name: string;\n line: number;\n complete: boolean;\n}\nexport function resolveJqLimits(options: Partial<JqLimits> = {}): JqLimits {\n const limits = { ...defaultJqLimits, ...options };\n for (const [name, value] of Object.entries(limits)) {\n if (!Number.isSafeInteger(value) || value < 1) throw new RangeError(`${name} must be a positive safe integer`);\n }\n if (limits.maxDepth > 256 || limits.maxAstDepth > 128) throw new RangeError(\"maxDepth must be <=256 and maxAstDepth <=128\");\n return Object.freeze(limits);\n}\nexport class Budget {\n private steps = 0;\n private nextYield = 1024;\n private lastYield = monotonicNow();\n inputBytes = 0;\n outputBytes = 0;\n results = 0;\n inputLocation: InputLocation = { name: \"<unknown>\", line: 0, complete: true };\n constructor(readonly limits: JqLimits, readonly signal: AbortSignal) {}\n step(count = 1): void {\n this.signal.throwIfAborted();\n this.steps += count;\n if (this.steps > this.limits.maxSteps) throw new JqLimitError(\"maxSteps\");\n }\n async tick(count = 1): Promise<void> {\n this.step(count);\n if (this.steps >= this.nextYield || monotonicNow() - this.lastYield >= 25) {\n await yieldTurn(this.signal);\n this.signal.throwIfAborted();\n this.nextYield = this.steps + 1024;\n this.lastYield = monotonicNow();\n }\n }\n collection(size: number): void {\n if (size > this.limits.maxCollectionSize) throw new JqLimitError(\"maxCollectionSize\");\n }\n text(text: string): void {\n if (text.length > this.limits.maxValueBytes || Buffer.byteLength(text) > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n }\n value(value: Json): number {\n let bytes = 0;\n const visit = (current: Json, depth: number): void => {\n this.step();\n if (depth > this.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n if (current !== null && typeof current === \"object\" && !(current instanceof Decimal)) {\n if (depth + 1 > this.limits.maxDepth) throw new JqLimitError(\"maxDepth\");\n const keys = Array.isArray(current) ? Object.keys(current) : objectKeys(current);\n this.collection(keys.length);\n bytes += 2 + Math.max(0, keys.length - 1);\n for (const key of keys) {\n if (!Array.isArray(current)) {\n this.text(key);\n bytes += Buffer.byteLength(JSON.stringify(key)) + 1;\n }\n if (bytes > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n visit((current as Record<string, Json>)[key]!, depth + 1);\n }\n } else {\n if (typeof current === \"string\") { this.step(current.length); this.text(current); }\n bytes += Buffer.byteLength(scalarJson(current, this));\n }\n if (bytes > this.limits.maxValueBytes) throw new JqLimitError(\"maxValueBytes\");\n };\n visit(value, 0);\n return bytes;\n }\n}\nconst keyOrders = new WeakMap<Record<string, Json>, string[]>();\nexport function object(): Record<string, Json> {\n const result = Object.create(null) as Record<string, Json>;\n keyOrders.set(result, []);\n return result;\n}\nexport function objectKeys(value: Record<string, Json>): string[] { return keyOrders.get(value)?.slice() ?? Object.keys(value); }\nexport function* objectKeyIterator(value: Record<string, Json>): IterableIterator<string> {\n const keys = keyOrders.get(value);\n if (keys) yield* keys;\n else for (const key in value) if (Object.hasOwn(value, key)) yield key;\n}\nexport function objectSize(value: Record<string, Json>): number { return keyOrders.get(value)?.length ?? Object.keys(value).length; }\nexport function put(value: Record<string, Json>, key: string, item: Json): void {\n if (!Object.hasOwn(value, key)) keyOrders.get(value)?.push(key);\n value[key] = item;\n}\nexport function remove(value: Record<string, Json>, key: string): void {\n delete value[key];\n const keys = keyOrders.get(value);\n if (keys) { const index = keys.indexOf(key); if (index >= 0) keys.splice(index, 1); }\n}\nexport function copyObject(...sources: (Record<string, Json> | null)[]): Record<string, Json> {\n const result = object();\n for (const source of sources) if (source) for (const key of objectKeys(source)) put(result, key, source[key]!);\n return result;\n}\nexport function wellFormed(text: string): boolean {\n for (let index = 0; index < text.length; index++) {\n const code = text.charCodeAt(index);\n if (code >= 0xd800 && code <= 0xdbff) {\n const next = text.charCodeAt(++index);\n if (!(next >= 0xdc00 && next <= 0xdfff)) return false;\n } else if (code >= 0xdc00 && code <= 0xdfff) return false;\n }\n return true;\n}\nexport function isObject(value: Json): value is Record<string, Json> { return value !== null && typeof value === \"object\" && !Array.isArray(value) && !(value instanceof Decimal); }\nexport function truth(value: Json): boolean { return value !== null && value !== false; }\nexport function scalarJson(value: null | boolean | number | Decimal | string, budget: Budget): string {\n if (value instanceof Decimal) budget.step(Math.ceil(value.text.length / 32));\n return isNumber(value) ? numberText(value) : JSON.stringify(value);\n}\nexport async function interruptible<Result>(operation: () => PromiseLike<Result>, signal: AbortSignal): Promise<Result> {\n signal.throwIfAborted();\n return new Promise<Result>((resolve, reject) => {\n const aborted = (): void => { signal.removeEventListener(\"abort\", aborted); reject(signal.reason); };\n signal.addEventListener(\"abort\", aborted, { once: true });\n try {\n Promise.resolve(operation()).then(\n result => { signal.removeEventListener(\"abort\", aborted); resolve(result); },\n error => { signal.removeEventListener(\"abort\", aborted); reject(error); },\n );\n } catch (error) { signal.removeEventListener(\"abort\", aborted); reject(error); }\n });\n}\n", "import type { Budget } from \"./limits.js\";\n\nexport class Decimal {\n constructor(readonly digits: string, readonly exponent: number, readonly negative: boolean, readonly text: string, readonly double: number) {\n Object.freeze(this);\n }\n}\nexport type Numeric = number | Decimal;\nexport function isNumber(value: unknown): value is Numeric { return typeof value === \"number\" || value instanceof Decimal; }\nexport function numberValue(value: Numeric): number { return typeof value === \"number\" ? value : value.double; }\nexport function numericToken(token: string, budget: Budget): Numeric | undefined {\n budget.step(Math.ceil(token.length / 32));\n const end = token.indexOf(\"\\0\");\n const text = end < 0 ? token : token.slice(0, end);\n if (/^[+-]?s?nan[0-9]*$/iu.test(text)) return new Decimal(\"0\", NaN, false, \"null\", NaN);\n if (/^[+-]?inf(?:inity)?$/iu.test(text)) {\n const negative = text[0] === \"-\";\n const value = negative ? -Infinity : Infinity;\n return new Decimal(\"1\", Infinity, negative, numberText(value), value);\n }\n if (!/^[+-]?(?:[0-9]+(?:\\.[0-9]*)?|\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/u.test(text)) return undefined;\n return decimalNumber(text[0] === \"+\" ? text.slice(1) : text, budget);\n}\n\nfunction increment(digits: string): string {\n let position = digits.length - 1;\n while (position >= 0 && digits[position] === \"9\") position--;\n return position < 0 ? `1${\"0\".repeat(digits.length)}` : `${digits.slice(0, position)}${Number(digits[position]) + 1}${\"0\".repeat(digits.length - position - 1)}`;\n}\nfunction decimalDouble(digits: string, exponent: number, negative: boolean): number {\n let rounded = digits;\n if (digits.length > 17) {\n rounded = digits.slice(0, 17);\n const next = digits[17]!;\n if (next > \"5\" || (next === \"5\" && (/[1-9]/u.test(digits.slice(18)) || Number(rounded[16]) % 2 !== 0))) rounded = increment(rounded);\n exponent += digits.length - 17;\n }\n return Number(`${negative ? \"-\" : \"\"}${rounded}e${exponent}`);\n}\nfunction decimalText(digits: string, exponent: number, negative: boolean): string {\n const sign = negative ? \"-\" : \"\";\n const adjusted = exponent + digits.length - 1;\n if (exponent > 0 || adjusted < -6) return `${sign}${digits[0]}${digits.length > 1 ? `.${digits.slice(1)}` : \"\"}E${adjusted >= 0 ? \"+\" : \"\"}${adjusted}`;\n const point = digits.length + exponent;\n if (point <= 0) return `${sign}0.${\"0\".repeat(-point)}${digits}`;\n return `${sign}${digits.slice(0, point)}${point < digits.length ? `.${digits.slice(point)}` : \"\"}`;\n}\nexport function decimalNumber(token: string, budget: Budget): Numeric {\n budget.text(token);\n budget.step(Math.ceil(token.length / 32));\n const negative = token[0] === \"-\";\n const unsigned = negative ? token.slice(1) : token;\n const marker = unsigned.search(/[eE]/u);\n const coefficient = marker < 0 ? unsigned : unsigned.slice(0, marker);\n const point = coefficient.indexOf(\".\");\n let exponent = (marker < 0 ? 0 : Number(unsigned.slice(marker + 1))) - (point < 0 ? 0 : coefficient.length - point - 1);\n let digits = coefficient.replace(\".\", \"\").replace(/^0+/u, \"\") || \"0\";\n const minimumExponent = -1147483646;\n const maximumExponent = 999999999;\n if (digits === \"0\") exponent = Math.max(minimumExponent, Math.min(maximumExponent, exponent));\n else if (exponent + digits.length - 1 > maximumExponent) {\n const infinity = negative ? -Infinity : Infinity;\n return new Decimal(\"1\", Infinity, negative, numberText(infinity), infinity);\n }\n else if (exponent < minimumExponent) {\n const retained = digits.length - (minimumExponent - exponent);\n const roundUp = retained >= 0 && digits[retained]! >= \"5\";\n digits = retained > 0 ? digits.slice(0, retained) : \"0\";\n if (roundUp) digits = increment(digits);\n exponent = minimumExponent;\n }\n const text = decimalText(digits, exponent, negative);\n budget.text(text);\n return new Decimal(digits, exponent, negative, text, decimalDouble(digits, exponent, negative));\n}\nexport function compareNumbers(left: Numeric, right: Numeric, budget: Budget): number {\n if (Number.isNaN(numberValue(left))) return -1;\n if (Number.isNaN(numberValue(right))) return 1;\n if (!(left instanceof Decimal) || !(right instanceof Decimal)) {\n const first = numberValue(left);\n const second = numberValue(right);\n return first < second ? -1 : first === second ? 0 : 1;\n }\n if (left.digits === \"0\" && right.digits === \"0\") return 0;\n const sign = left.negative ? -1 : 1;\n if (left.negative !== right.negative) return sign;\n if (left.digits === \"0\") return -sign;\n if (right.digits === \"0\") return sign;\n if (left.exponent === Infinity || right.exponent === Infinity) return left.exponent === right.exponent ? 0 : left.exponent === Infinity ? sign : -sign;\n const magnitude = left.exponent + left.digits.length - right.exponent - right.digits.length;\n if (magnitude) return Math.sign(magnitude) * sign;\n const length = Math.max(left.digits.length, right.digits.length);\n budget.step(Math.ceil(length / 32));\n for (let index = 0; index < length; index++) {\n if (index % 1024 === 0) budget.step();\n const first = left.digits[index] ?? \"0\";\n const second = right.digits[index] ?? \"0\";\n if (first !== second) return (first < second ? -1 : 1) * sign;\n }\n return 0;\n}\nexport function numberText(value: Numeric): string {\n if (value instanceof Decimal) return value.text;\n if (Number.isNaN(value)) return \"null\";\n const bounded = Math.max(-Number.MAX_VALUE, Math.min(Number.MAX_VALUE, value));\n const sign = bounded < 0 || Object.is(bounded, -0) ? \"-\" : \"\";\n const [mantissa, power] = Math.abs(bounded).toExponential().split(\"e\");\n const digits = mantissa!.replace(\".\", \"\");\n const exponent = Number(power);\n const point = exponent + 1;\n if (point <= -4 || point > digits.length + 15) return `${sign}${mantissa}e${exponent < 0 ? \"-\" : \"+\"}${String(Math.abs(exponent)).padStart(2, \"0\")}`;\n if (point <= 0) return `${sign}0.${\"0\".repeat(-point)}${digits}`;\n return `${sign}${point >= digits.length ? digits.padEnd(point, \"0\") : `${digits.slice(0, point)}.${digits.slice(point)}`}`;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|