jseption 0.0.5 → 0.0.6
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 +25 -4
- package/dist/atoms.d.ts +1 -0
- package/dist/atoms.js +2 -1
- package/dist/atoms.js.map +1 -1
- package/dist/builtins/base64.d.ts +14 -0
- package/dist/builtins/base64.js +219 -0
- package/dist/builtins/base64.js.map +1 -0
- package/dist/builtins/bigint.js +3 -3
- package/dist/builtins/bigint.js.map +1 -1
- package/dist/builtins/date.d.ts +1 -0
- package/dist/builtins/date.js +26 -12
- package/dist/builtins/date.js.map +1 -1
- package/dist/builtins/error.js +9 -0
- package/dist/builtins/error.js.map +1 -1
- package/dist/builtins/float16.d.ts +3 -0
- package/dist/builtins/float16.js +69 -0
- package/dist/builtins/float16.js.map +1 -0
- package/dist/builtins/function.js +2 -2
- package/dist/builtins/index.js +9 -6
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/iterator.d.ts +2 -0
- package/dist/builtins/iterator.js +624 -0
- package/dist/builtins/iterator.js.map +1 -0
- package/dist/builtins/json.d.ts +13 -1
- package/dist/builtins/json.js +283 -211
- package/dist/builtins/json.js.map +1 -1
- package/dist/builtins/mapset.js +365 -6
- package/dist/builtins/mapset.js.map +1 -1
- package/dist/builtins/math.js +203 -3
- package/dist/builtins/math.js.map +1 -1
- package/dist/builtins/native.js +6 -6
- package/dist/builtins/object.js +9 -2
- package/dist/builtins/object.js.map +1 -1
- package/dist/builtins/promise.js +31 -11
- package/dist/builtins/promise.js.map +1 -1
- package/dist/builtins/proxy.js +2 -2
- package/dist/builtins/reflect.js +6 -2
- package/dist/builtins/reflect.js.map +1 -1
- package/dist/builtins/regexp.js +74 -3
- package/dist/builtins/regexp.js.map +1 -1
- package/dist/builtins/string.js +1 -1
- package/dist/builtins/symbol.js +1 -1
- package/dist/builtins/symbol.js.map +1 -1
- package/dist/builtins/typedarray.d.ts +1 -0
- package/dist/builtins/typedarray.js +302 -32
- package/dist/builtins/typedarray.js.map +1 -1
- package/dist/builtins/weakref.js +7 -7
- package/dist/embed.js +3 -3
- package/dist/interpreter.js +15 -14
- package/dist/interpreter.js.map +1 -1
- package/dist/jit.d.ts +1 -0
- package/dist/jit.js +51 -13
- package/dist/jit.js.map +1 -1
- package/dist/jit_hook.d.ts +1 -0
- package/dist/jit_hook.js.map +1 -1
- package/dist/jit_runtime.d.ts +1 -1
- package/dist/jit_runtime.js +6 -6
- package/dist/jit_runtime.js.map +1 -1
- package/dist/jit_stack.d.ts +1 -0
- package/dist/jit_stack.js +2 -1
- package/dist/jit_stack.js.map +1 -1
- package/dist/jseption.d.ts +2 -0
- package/dist/jseption.js +1 -0
- package/dist/jseption.js.map +1 -1
- package/dist/membrane.js +1 -1
- package/dist/module.js +5 -3
- package/dist/module.js.map +1 -1
- package/dist/parser.js +26 -9
- package/dist/parser.js.map +1 -1
- package/dist/print.d.ts +12 -0
- package/dist/print.js +494 -0
- package/dist/print.js.map +1 -0
- package/dist/qjs.js +13 -10
- package/dist/qjs.js.map +1 -1
- package/dist/quickjs.d.ts +8 -0
- package/dist/quickjs.js +132 -53
- package/dist/quickjs.js.map +1 -1
- package/dist/std.d.ts +4 -2
- package/dist/std.js +42 -8
- package/dist/std.js.map +1 -1
- package/dist/values.d.ts +31 -27
- package/dist/values.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
package/dist/print.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { JSContext, JSValue } from './quickjs.ts';
|
|
2
|
+
export interface JSPrintValueOptions {
|
|
3
|
+
show_hidden: boolean;
|
|
4
|
+
raw_dump: boolean;
|
|
5
|
+
max_depth: number;
|
|
6
|
+
max_string_length: number;
|
|
7
|
+
max_item_count: number;
|
|
8
|
+
}
|
|
9
|
+
export type JSPrintValueWrite = (opaque: any, buf: string) => void;
|
|
10
|
+
export declare function JS_PrintValueSetDefaultOptions(options: JSPrintValueOptions): void;
|
|
11
|
+
export declare function JS_PrintValue(ctx: JSContext, write_func: JSPrintValueWrite, write_opaque: any, val: JSValue, options: Partial<JSPrintValueOptions> | null): void;
|
|
12
|
+
export declare function JS_PrintValueToString(ctx: JSContext, val: JSValue, options?: Partial<JSPrintValueOptions> | null): string;
|
package/dist/print.js
ADDED
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Debug value output: port of JS_PrintValue (quickjs.c, QuickJS 2025-09-13
|
|
3
|
+
* and later), used by print() and console.log() of the command line
|
|
4
|
+
* interpreter.
|
|
5
|
+
*
|
|
6
|
+
* The output has no side effect: no getter, toString or Proxy trap runs.
|
|
7
|
+
* Guest objects are host objects here, so the properties are those of the
|
|
8
|
+
* host object, in host order (integer keys first) rather than in QuickJS
|
|
9
|
+
* shape order; an array is printed as a QuickJS fast array when its index
|
|
10
|
+
* properties are the data properties 0 .. n-1.
|
|
11
|
+
*/
|
|
12
|
+
import { JS_IsObject, JS_GetClassID, JS_GetClassName, JS_IsException, JS_GetException } from "./quickjs.js";
|
|
13
|
+
import { get_date_string } from "./builtins/date.js";
|
|
14
|
+
const JS_PRINT_MAX_DEPTH = 8;
|
|
15
|
+
export function JS_PrintValueSetDefaultOptions(options) {
|
|
16
|
+
options.show_hidden = false;
|
|
17
|
+
options.raw_dump = false;
|
|
18
|
+
options.max_depth = 2;
|
|
19
|
+
options.max_string_length = 1000;
|
|
20
|
+
options.max_item_count = 100;
|
|
21
|
+
}
|
|
22
|
+
const gopd = Object.getOwnPropertyDescriptor;
|
|
23
|
+
const host_getter = (proto, name) => gopd(proto, name).get;
|
|
24
|
+
const TA_LENGTH = host_getter(Object.getPrototypeOf(Uint8Array.prototype), 'length');
|
|
25
|
+
const MAP_SIZE = host_getter(Map.prototype, 'size');
|
|
26
|
+
const SET_SIZE = host_getter(Set.prototype, 'size');
|
|
27
|
+
const MAP_FOREACH = Map.prototype.forEach;
|
|
28
|
+
const SET_FOREACH = Set.prototype.forEach;
|
|
29
|
+
const RE_SOURCE = host_getter(RegExp.prototype, 'source');
|
|
30
|
+
const RE_FLAGS = [['g', 'global'], ['i', 'ignoreCase'], ['m', 'multiline'], ['s', 'dotAll'],
|
|
31
|
+
['u', 'unicode'], ['y', 'sticky'], ['d', 'hasIndices'], ['v', 'unicodeSets']]
|
|
32
|
+
.map(([c, name]) => [c, gopd(RegExp.prototype, name)?.get ?? null]);
|
|
33
|
+
function puts(s, str) {
|
|
34
|
+
s.write_func(s.write_opaque, str);
|
|
35
|
+
}
|
|
36
|
+
/* js_dtoa(JS_DTOA_FORMAT_FREE | JS_DTOA_MINUS_ZERO) */
|
|
37
|
+
function print_float64(s, d) {
|
|
38
|
+
puts(s, Object.is(d, -0) ? '-0' : String(d));
|
|
39
|
+
}
|
|
40
|
+
/* pretty print the first 'len' characters of 'str' */
|
|
41
|
+
function print_string1(s, str, len, sep) {
|
|
42
|
+
let out = '';
|
|
43
|
+
for (let i = 0; i < len; i++) {
|
|
44
|
+
let c = str.charCodeAt(i);
|
|
45
|
+
let q = -1;
|
|
46
|
+
switch (c) {
|
|
47
|
+
case 9:
|
|
48
|
+
q = 116;
|
|
49
|
+
break; /* \t */
|
|
50
|
+
case 13:
|
|
51
|
+
q = 114;
|
|
52
|
+
break; /* \r */
|
|
53
|
+
case 10:
|
|
54
|
+
q = 110;
|
|
55
|
+
break; /* \n */
|
|
56
|
+
case 8:
|
|
57
|
+
q = 98;
|
|
58
|
+
break; /* \b */
|
|
59
|
+
case 12:
|
|
60
|
+
q = 102;
|
|
61
|
+
break; /* \f */
|
|
62
|
+
case 92:
|
|
63
|
+
q = 92;
|
|
64
|
+
break; /* \\ */
|
|
65
|
+
default:
|
|
66
|
+
if (c === sep)
|
|
67
|
+
q = c;
|
|
68
|
+
}
|
|
69
|
+
if (q >= 0) {
|
|
70
|
+
out += '\\' + String.fromCharCode(q);
|
|
71
|
+
}
|
|
72
|
+
else if (c >= 32 && c <= 126) {
|
|
73
|
+
out += String.fromCharCode(c);
|
|
74
|
+
}
|
|
75
|
+
else if (c < 32 || (c >= 0x7f && c <= 0x9f)) {
|
|
76
|
+
out += '\\u' + c.toString(16).padStart(4, '0');
|
|
77
|
+
}
|
|
78
|
+
else if (c >= 0xd800 && c <= 0xdbff) {
|
|
79
|
+
const c1 = i + 1 < len ? str.charCodeAt(i + 1) : 0;
|
|
80
|
+
if (c1 >= 0xdc00 && c1 <= 0xdfff) {
|
|
81
|
+
out += str[i] + str[i + 1];
|
|
82
|
+
i++;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
out += '\\u' + c.toString(16).padStart(4, '0');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else if (c >= 0xdc00 && c <= 0xdfff) {
|
|
89
|
+
out += '\\u' + c.toString(16).padStart(4, '0');
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
out += String.fromCharCode(c);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
puts(s, out);
|
|
96
|
+
}
|
|
97
|
+
function print_string(s, val) {
|
|
98
|
+
const max = s.options.max_string_length;
|
|
99
|
+
puts(s, '"');
|
|
100
|
+
print_string1(s, val, Math.min(val.length, max), 34);
|
|
101
|
+
puts(s, '"');
|
|
102
|
+
if (val.length > max) {
|
|
103
|
+
const n = val.length - max;
|
|
104
|
+
puts(s, `... ${n} more character${n > 1 ? 's' : ''}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function is_ascii_ident(str) {
|
|
108
|
+
if (str.length === 0)
|
|
109
|
+
return false;
|
|
110
|
+
for (let i = 0; i < str.length; i++) {
|
|
111
|
+
const c = str.charCodeAt(i);
|
|
112
|
+
if (!((c >= 97 && c <= 122) || (c >= 65 && c <= 90) || c === 95 || c === 36 || (c >= 48 && c <= 57 && i > 0)))
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
/* a property key or a symbol description, printed as js_print_atom() */
|
|
118
|
+
function print_atom(s, key) {
|
|
119
|
+
if (typeof key === 'symbol')
|
|
120
|
+
key = key.description ?? '';
|
|
121
|
+
if (key === undefined) {
|
|
122
|
+
puts(s, '<null>');
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
/* the integer atoms (0 .. 2^31-1) are printed as numbers */
|
|
126
|
+
const n = Number(key);
|
|
127
|
+
if (String(n >>> 0) === key && n <= 0x7fffffff) {
|
|
128
|
+
puts(s, key);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (is_ascii_ident(key)) {
|
|
132
|
+
puts(s, key);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
puts(s, '"');
|
|
136
|
+
print_string1(s, key, key.length, 34);
|
|
137
|
+
puts(s, '"');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function print_comma(s, cs) {
|
|
141
|
+
switch (cs.v) {
|
|
142
|
+
case 1:
|
|
143
|
+
puts(s, ', ');
|
|
144
|
+
break;
|
|
145
|
+
case 2:
|
|
146
|
+
puts(s, ' { ');
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
cs.v = 1;
|
|
150
|
+
}
|
|
151
|
+
function print_more_items(s, cs, n) {
|
|
152
|
+
print_comma(s, cs);
|
|
153
|
+
puts(s, `... ${n} more item${n > 1 ? 's' : ''}`);
|
|
154
|
+
}
|
|
155
|
+
function is_proxy_class(cl) {
|
|
156
|
+
return cl === 45 /* JSClassID.PROXY */ || cl === 11 /* JSClassID.MODULE_NS */;
|
|
157
|
+
}
|
|
158
|
+
/* own data property (or one level in the prototype, for the 'name' of the
|
|
159
|
+
Error objects) holding a string, without side effect: get_prop_string() */
|
|
160
|
+
function get_prop_string(p, prop) {
|
|
161
|
+
let d = gopd(p, prop);
|
|
162
|
+
if (!d) {
|
|
163
|
+
const proto = Object.getPrototypeOf(p);
|
|
164
|
+
if (proto === null || is_proxy_class(JS_GetClassID(proto)))
|
|
165
|
+
return null;
|
|
166
|
+
d = gopd(proto, prop);
|
|
167
|
+
if (!d)
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
return typeof d.value === 'string' ? d.value : null;
|
|
171
|
+
}
|
|
172
|
+
function print_regexp(s, re) {
|
|
173
|
+
let src;
|
|
174
|
+
try {
|
|
175
|
+
src = RE_SOURCE.call(re);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
puts(s, '[uninitialized_regexp]');
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
puts(s, '/' + src + '/');
|
|
182
|
+
for (const [c, get] of RE_FLAGS) {
|
|
183
|
+
if (get && get.call(re))
|
|
184
|
+
puts(s, c);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function print_error(s, p) {
|
|
188
|
+
puts(s, get_prop_string(p, 'name') ?? 'Error');
|
|
189
|
+
const msg = get_prop_string(p, 'message');
|
|
190
|
+
if (msg)
|
|
191
|
+
puts(s, ': ' + msg);
|
|
192
|
+
let stack = get_prop_string(p, 'stack');
|
|
193
|
+
if (stack !== null) {
|
|
194
|
+
if (stack.endsWith('\n'))
|
|
195
|
+
stack = stack.slice(0, -1);
|
|
196
|
+
puts(s, '\n' + stack);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/* the number of elements if 'a' is like a QuickJS fast array, or -1 */
|
|
200
|
+
function fast_array_count(a) {
|
|
201
|
+
const len = a.length;
|
|
202
|
+
let count = 0;
|
|
203
|
+
while (count < len) {
|
|
204
|
+
const d = gopd(a, count);
|
|
205
|
+
if (!d || !('value' in d))
|
|
206
|
+
break;
|
|
207
|
+
count++;
|
|
208
|
+
}
|
|
209
|
+
if (count < len) {
|
|
210
|
+
/* an index property after the first missing one: not a fast array */
|
|
211
|
+
for (const k of Object.keys(a)) {
|
|
212
|
+
const n = Number(k);
|
|
213
|
+
if (String(n >>> 0) === k && n >= count)
|
|
214
|
+
return -1;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return count;
|
|
218
|
+
}
|
|
219
|
+
function print_object(s, p) {
|
|
220
|
+
const ctx = s.ctx;
|
|
221
|
+
const opts = s.options;
|
|
222
|
+
const cl = JS_GetClassID(p);
|
|
223
|
+
const cs = { v: 0 };
|
|
224
|
+
let is_array = false;
|
|
225
|
+
let skip_index = false; /* index properties already printed (or exotic) */
|
|
226
|
+
let skip_props = false;
|
|
227
|
+
if (cl === 2 /* JSClassID.ARRAY */ && Array.isArray(p)) {
|
|
228
|
+
is_array = true;
|
|
229
|
+
puts(s, '[ ');
|
|
230
|
+
const a = p;
|
|
231
|
+
const count = fast_array_count(a);
|
|
232
|
+
if (count >= 0) {
|
|
233
|
+
skip_index = true;
|
|
234
|
+
const len1 = Math.min(count, opts.max_item_count);
|
|
235
|
+
for (let i = 0; i < len1; i++) {
|
|
236
|
+
print_comma(s, cs);
|
|
237
|
+
print_value(s, a[i]);
|
|
238
|
+
}
|
|
239
|
+
if (len1 < count)
|
|
240
|
+
print_more_items(s, cs, count - len1);
|
|
241
|
+
if (count < a.length) {
|
|
242
|
+
const n = a.length - count;
|
|
243
|
+
print_comma(s, cs);
|
|
244
|
+
puts(s, `<${n} empty item${n > 1 ? 's' : ''}>`);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else if (cl >= 21 /* JSClassID.UINT8C_ARRAY */ && cl <= 32 /* JSClassID.FLOAT64_ARRAY */ && ArrayBuffer.isView(p)) {
|
|
249
|
+
let count = 0;
|
|
250
|
+
try {
|
|
251
|
+
count = TA_LENGTH.call(p);
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
count = 0;
|
|
255
|
+
}
|
|
256
|
+
const ta = p;
|
|
257
|
+
print_atom(s, JS_GetClassName(ctx, cl));
|
|
258
|
+
puts(s, `(${count}) [ `);
|
|
259
|
+
is_array = true;
|
|
260
|
+
skip_index = true;
|
|
261
|
+
const len1 = Math.min(count, opts.max_item_count);
|
|
262
|
+
const is_float = cl === 31 /* JSClassID.FLOAT32_ARRAY */ || cl === 32 /* JSClassID.FLOAT64_ARRAY */;
|
|
263
|
+
for (let i = 0; i < len1; i++) {
|
|
264
|
+
print_comma(s, cs);
|
|
265
|
+
const v = ta[i];
|
|
266
|
+
if (is_float)
|
|
267
|
+
print_float64(s, v);
|
|
268
|
+
else
|
|
269
|
+
puts(s, String(v));
|
|
270
|
+
}
|
|
271
|
+
if (len1 < count)
|
|
272
|
+
print_more_items(s, cs, count - len1);
|
|
273
|
+
}
|
|
274
|
+
else if (typeof p === 'function' && !is_proxy_class(cl)) {
|
|
275
|
+
puts(s, '[Function ');
|
|
276
|
+
const name = get_prop_string(p, 'name');
|
|
277
|
+
puts(s, name ? name : '(anonymous)');
|
|
278
|
+
puts(s, ']');
|
|
279
|
+
cs.v = 2;
|
|
280
|
+
}
|
|
281
|
+
else if ((cl === 35 /* JSClassID.MAP */ || cl === 36 /* JSClassID.SET */) && is_host_collection(p, cl)) {
|
|
282
|
+
const is_map = cl === 35 /* JSClassID.MAP */;
|
|
283
|
+
const size = (is_map ? MAP_SIZE : SET_SIZE).call(p);
|
|
284
|
+
print_atom(s, JS_GetClassName(ctx, cl));
|
|
285
|
+
puts(s, `(${size}) { `);
|
|
286
|
+
let i = 0;
|
|
287
|
+
const entries = [];
|
|
288
|
+
(is_map ? MAP_FOREACH : SET_FOREACH).call(p, (v, k) => {
|
|
289
|
+
if (entries.length < opts.max_item_count)
|
|
290
|
+
entries.push([k, v]);
|
|
291
|
+
});
|
|
292
|
+
for (const [k, v] of entries) {
|
|
293
|
+
print_comma(s, cs);
|
|
294
|
+
print_value(s, k);
|
|
295
|
+
if (is_map) {
|
|
296
|
+
puts(s, ' => ');
|
|
297
|
+
print_value(s, v);
|
|
298
|
+
}
|
|
299
|
+
i++;
|
|
300
|
+
}
|
|
301
|
+
if (i < size)
|
|
302
|
+
print_more_items(s, cs, size - i);
|
|
303
|
+
}
|
|
304
|
+
else if (cl === 18 /* JSClassID.REGEXP */ && is_host_regexp(p)) {
|
|
305
|
+
print_regexp(s, p);
|
|
306
|
+
cs.v = 2;
|
|
307
|
+
}
|
|
308
|
+
else if (cl === 10 /* JSClassID.DATE */ && print_date(s, p)) {
|
|
309
|
+
cs.v = 2;
|
|
310
|
+
}
|
|
311
|
+
else if (cl === 3 /* JSClassID.ERROR */) {
|
|
312
|
+
print_error(s, p);
|
|
313
|
+
cs.v = 2;
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
if (cl !== 1 /* JSClassID.OBJECT */) {
|
|
317
|
+
print_atom(s, JS_GetClassName(ctx, cl));
|
|
318
|
+
puts(s, ' ');
|
|
319
|
+
}
|
|
320
|
+
puts(s, '{ ');
|
|
321
|
+
/* a Proxy has no own properties (its traps are not called); String
|
|
322
|
+
objects have exotic index properties */
|
|
323
|
+
if (cl === 45 /* JSClassID.PROXY */)
|
|
324
|
+
skip_props = true;
|
|
325
|
+
if (cl === 5 /* JSClassID.STRING */)
|
|
326
|
+
skip_index = true;
|
|
327
|
+
}
|
|
328
|
+
if (!skip_props) {
|
|
329
|
+
let keys;
|
|
330
|
+
try {
|
|
331
|
+
keys = Reflect.ownKeys(p);
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
keys = [];
|
|
335
|
+
}
|
|
336
|
+
let j = 0;
|
|
337
|
+
for (const key of keys) {
|
|
338
|
+
if (skip_index && typeof key === 'string') {
|
|
339
|
+
const n = Number(key);
|
|
340
|
+
if (String(n >>> 0) === key && n < 0xffffffff)
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
let d;
|
|
344
|
+
try {
|
|
345
|
+
d = gopd(p, key);
|
|
346
|
+
}
|
|
347
|
+
catch {
|
|
348
|
+
/* an uninitialized binding of a module namespace */
|
|
349
|
+
d = { value: UNINITIALIZED, enumerable: true };
|
|
350
|
+
}
|
|
351
|
+
if (!d)
|
|
352
|
+
continue;
|
|
353
|
+
if (!d.enumerable && !opts.show_hidden)
|
|
354
|
+
continue;
|
|
355
|
+
if (j < opts.max_item_count) {
|
|
356
|
+
print_comma(s, cs);
|
|
357
|
+
print_atom(s, key);
|
|
358
|
+
puts(s, ': ');
|
|
359
|
+
if (d.get || d.set) {
|
|
360
|
+
puts(s, d.get && d.set ? '[Getter/Setter]' : d.set ? '[Setter]' : '[Getter]');
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
print_value(s, d.value);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
j++;
|
|
367
|
+
}
|
|
368
|
+
if (j > opts.max_item_count)
|
|
369
|
+
print_more_items(s, cs, j - opts.max_item_count);
|
|
370
|
+
}
|
|
371
|
+
if (!is_array) {
|
|
372
|
+
if (cs.v !== 2)
|
|
373
|
+
puts(s, ' }');
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
puts(s, ' ]');
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
const UNINITIALIZED = Symbol("uninitialized");
|
|
380
|
+
function is_host_regexp(p) {
|
|
381
|
+
try {
|
|
382
|
+
RE_SOURCE.call(p);
|
|
383
|
+
return true;
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
function is_host_collection(p, cl) {
|
|
390
|
+
try {
|
|
391
|
+
(cl === 35 /* JSClassID.MAP */ ? MAP_SIZE : SET_SIZE).call(p);
|
|
392
|
+
return true;
|
|
393
|
+
}
|
|
394
|
+
catch {
|
|
395
|
+
return false;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
/* toISOString() (get_date_string has no side effect); false for an invalid date */
|
|
399
|
+
function print_date(s, p) {
|
|
400
|
+
const str = get_date_string(s.ctx, p, [], 0x23);
|
|
401
|
+
if (JS_IsException(str)) {
|
|
402
|
+
JS_GetException(s.ctx);
|
|
403
|
+
return false;
|
|
404
|
+
}
|
|
405
|
+
puts(s, str);
|
|
406
|
+
return true;
|
|
407
|
+
}
|
|
408
|
+
function print_value(s, val) {
|
|
409
|
+
switch (typeof val) {
|
|
410
|
+
case 'number':
|
|
411
|
+
print_float64(s, val);
|
|
412
|
+
break;
|
|
413
|
+
case 'boolean':
|
|
414
|
+
puts(s, val ? 'true' : 'false');
|
|
415
|
+
break;
|
|
416
|
+
case 'undefined':
|
|
417
|
+
puts(s, 'undefined');
|
|
418
|
+
break;
|
|
419
|
+
case 'bigint':
|
|
420
|
+
puts(s, val.toString() + 'n');
|
|
421
|
+
break;
|
|
422
|
+
case 'string':
|
|
423
|
+
print_string(s, val);
|
|
424
|
+
break;
|
|
425
|
+
case 'symbol':
|
|
426
|
+
if (val === UNINITIALIZED) {
|
|
427
|
+
puts(s, 'uninitialized');
|
|
428
|
+
break;
|
|
429
|
+
}
|
|
430
|
+
puts(s, 'Symbol(');
|
|
431
|
+
if (val.description !== undefined)
|
|
432
|
+
print_atom(s, val.description);
|
|
433
|
+
puts(s, ')');
|
|
434
|
+
break;
|
|
435
|
+
default:
|
|
436
|
+
if (val === null) {
|
|
437
|
+
puts(s, 'null');
|
|
438
|
+
}
|
|
439
|
+
else if (JS_IsObject(val)) {
|
|
440
|
+
const p = val;
|
|
441
|
+
const idx = s.print_stack.indexOf(p);
|
|
442
|
+
if (idx >= 0) {
|
|
443
|
+
puts(s, `[circular ${idx}]`);
|
|
444
|
+
}
|
|
445
|
+
else if (s.print_stack.length < s.options.max_depth) {
|
|
446
|
+
s.print_stack.push(p);
|
|
447
|
+
print_object(s, p);
|
|
448
|
+
s.print_stack.pop();
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
puts(s, '[');
|
|
452
|
+
print_atom(s, JS_GetClassName(s.ctx, JS_GetClassID(p)));
|
|
453
|
+
puts(s, ']');
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
else if (JS_IsException(val)) {
|
|
457
|
+
puts(s, 'exception');
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
puts(s, '[unknown tag]');
|
|
461
|
+
}
|
|
462
|
+
break;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
/* write the debug representation of 'val' with 'write_func' (options: the
|
|
466
|
+
defaults of JS_PrintValueSetDefaultOptions when null) */
|
|
467
|
+
export function JS_PrintValue(ctx, write_func, write_opaque, val, options) {
|
|
468
|
+
const opts = {};
|
|
469
|
+
JS_PrintValueSetDefaultOptions(opts);
|
|
470
|
+
if (options) {
|
|
471
|
+
opts.show_hidden = options.show_hidden ?? false;
|
|
472
|
+
opts.raw_dump = options.raw_dump ?? false;
|
|
473
|
+
opts.max_depth = options.max_depth ?? 0;
|
|
474
|
+
opts.max_string_length = options.max_string_length ?? 0;
|
|
475
|
+
opts.max_item_count = options.max_item_count ?? 0;
|
|
476
|
+
}
|
|
477
|
+
if (opts.max_depth <= 0)
|
|
478
|
+
opts.max_depth = JS_PRINT_MAX_DEPTH;
|
|
479
|
+
else
|
|
480
|
+
opts.max_depth = Math.min(opts.max_depth, JS_PRINT_MAX_DEPTH);
|
|
481
|
+
if (opts.max_string_length === 0)
|
|
482
|
+
opts.max_string_length = 0xffffffff;
|
|
483
|
+
if (opts.max_item_count === 0)
|
|
484
|
+
opts.max_item_count = 0xffffffff;
|
|
485
|
+
const s = { ctx, options: opts, write_func, write_opaque, print_stack: [] };
|
|
486
|
+
print_value(s, val);
|
|
487
|
+
}
|
|
488
|
+
/* convenience: the debug representation as a string */
|
|
489
|
+
export function JS_PrintValueToString(ctx, val, options = null) {
|
|
490
|
+
let out = '';
|
|
491
|
+
JS_PrintValue(ctx, (_o, buf) => { out += buf; }, null, val, options);
|
|
492
|
+
return out;
|
|
493
|
+
}
|
|
494
|
+
//# sourceMappingURL=print.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"print.js","sourceRoot":"","sources":["../src/print.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAiC,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3I,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAYrD,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,UAAU,8BAA8B,CAAC,OAA4B;IACzE,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;IAC5B,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;IACzB,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IACjC,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC;AAC/B,CAAC;AAUD,MAAM,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC7C,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,IAAY,EAAY,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAE,CAAC,GAAI,CAAC;AACvF,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;AACrF,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACpD,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;AAC1C,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC;AAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1D,MAAM,QAAQ,GAAiC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvH,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,CAAW;KACtF,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;AAEtE,SAAS,IAAI,CAAC,CAAoB,EAAE,GAAW;IAC7C,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,uDAAuD;AACvD,SAAS,aAAa,CAAC,CAAoB,EAAE,CAAS;IACpD,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,sDAAsD;AACtD,SAAS,aAAa,CAAC,CAAoB,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW;IAChF,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACX,QAAQ,CAAC,EAAE,CAAC;YACV,KAAK,CAAC;gBAAE,CAAC,GAAG,GAAG,CAAC;gBAAC,MAAM,CAAC,QAAQ;YAChC,KAAK,EAAE;gBAAE,CAAC,GAAG,GAAG,CAAC;gBAAC,MAAM,CAAC,QAAQ;YACjC,KAAK,EAAE;gBAAE,CAAC,GAAG,GAAG,CAAC;gBAAC,MAAM,CAAC,QAAQ;YACjC,KAAK,CAAC;gBAAE,CAAC,GAAG,EAAE,CAAC;gBAAC,MAAM,CAAC,QAAQ;YAC/B,KAAK,EAAE;gBAAE,CAAC,GAAG,GAAG,CAAC;gBAAC,MAAM,CAAC,QAAQ;YACjC,KAAK,EAAE;gBAAE,CAAC,GAAG,EAAE,CAAC;gBAAC,MAAM,CAAC,QAAQ;YAChC;gBACE,IAAI,CAAC,KAAK,GAAG;oBAAE,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACX,GAAG,IAAI,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YAC/B,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;YAC9C,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;gBACjC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3B,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YACtC,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,CAAoB,EAAE,GAAW;IACrD,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;IACxC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACb,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACb,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;QAC3B,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAC9H,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,wEAAwE;AACxE,SAAS,UAAU,CAAC,CAAoB,EAAE,GAAgC;IACxE,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,GAAG,GAAG,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IACzD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACrD,4DAA4D;IAC5D,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;QAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACzE,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACf,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACb,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,CAAoB,EAAE,EAAiB;IAC1D,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC;QACb,KAAK,CAAC;YAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM;QAC7B,KAAK,CAAC;YAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAAC,MAAM;IAChC,CAAC;IACD,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACX,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAoB,EAAE,EAAiB,EAAE,CAAS;IAC1E,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnB,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,cAAc,CAAC,EAAa;IACnC,OAAO,EAAE,6BAAoB,IAAI,EAAE,iCAAwB,CAAC;AAC9D,CAAC;AAED;6EAC6E;AAC7E,SAAS,eAAe,CAAC,CAAS,EAAE,IAAY;IAC9C,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACtB,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,IAAI,IAAI,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACxE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACtB,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACtD,CAAC;AAED,SAAS,YAAY,CAAC,CAAoB,EAAE,EAAU;IACpD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QAAC,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,IAAI,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACtF,IAAI,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IACzB,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,CAAoB,EAAE,CAAS;IAClD,IAAI,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAI,GAAG;QAAE,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,GAAG,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,SAAS,gBAAgB,CAAC,CAAY;IACpC,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IACrB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,GAAG,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;YAAE,MAAM;QACjC,KAAK,EAAE,CAAC;IACV,CAAC;IACD,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAChB,qEAAqE;QACrE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK;gBAAE,OAAO,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,CAAoB,EAAE,CAAS;IACnD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;IAClB,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC;IACvB,MAAM,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,UAAU,GAAG,KAAK,CAAC,CAAC,kDAAkD;IAC1E,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,EAAE,4BAAoB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,QAAQ,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACd,MAAM,CAAC,GAAG,CAAc,CAAC;QACzB,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnB,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,IAAI,GAAG,KAAK;gBAAE,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;YACxD,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;gBAC3B,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnB,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,EAAE,mCAA0B,IAAI,EAAE,oCAA2B,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAClG,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC;YAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,KAAK,GAAG,CAAC,CAAC;QAAC,CAAC;QACvD,MAAM,EAAE,GAAG,CAA0C,CAAC;QACtD,UAAU,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC;QACzB,QAAQ,GAAG,IAAI,CAAC;QAChB,UAAU,GAAG,IAAI,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,EAAE,qCAA4B,IAAI,EAAE,qCAA4B,CAAC;QAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,QAAQ;gBAAE,aAAa,CAAC,CAAC,EAAE,CAAW,CAAC,CAAC;;gBACvC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,GAAG,KAAK;YAAE,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IAC1D,CAAC;SAAM,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACrC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACb,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,CAAC;SAAM,IAAI,CAAC,EAAE,2BAAkB,IAAI,EAAE,2BAAkB,CAAC,IAAI,kBAAkB,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACvF,MAAM,MAAM,GAAG,EAAE,2BAAkB,CAAC;QACpC,MAAM,IAAI,GAAW,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5D,UAAU,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,OAAO,GAAyB,EAAE,CAAC;QACzC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE;YACtE,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;YAC7B,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnB,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAChB,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;QACD,IAAI,CAAC,GAAG,IAAI;YAAE,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;SAAM,IAAI,EAAE,8BAAqB,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,CAAC;SAAM,IAAI,EAAE,4BAAmB,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACrD,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,CAAC;SAAM,IAAI,EAAE,4BAAoB,EAAE,CAAC;QAClC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,CAAC;SAAM,CAAC;QACN,IAAI,EAAE,6BAAqB,EAAE,CAAC;YAC5B,UAAU,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACf,CAAC;QACD,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACd;kDAC0C;QAC1C,IAAI,EAAE,6BAAoB;YAAE,UAAU,GAAG,IAAI,CAAC;QAC9C,IAAI,EAAE,6BAAqB;YAAE,UAAU,GAAG,IAAI,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,IAAyB,CAAC;QAC9B,IAAI,CAAC;YAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,IAAI,GAAG,EAAE,CAAC;QAAC,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,UAAU,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,UAAU;oBAAE,SAAS;YAC1D,CAAC;YACD,IAAI,CAAiC,CAAC;YACtC,IAAI,CAAC;gBAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAC/B,oDAAoD;gBACpD,CAAC,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACjD,CAAC;YACD,IAAI,CAAC,CAAC;gBAAE,SAAS;YACjB,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,SAAS;YACjD,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC5B,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnB,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACd,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;oBACnB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAChF,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc;YAAE,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAE9C,SAAS,cAAc,CAAC,CAAS;IAC/B,IAAI,CAAC;QAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACjE,CAAC;AAED,SAAS,kBAAkB,CAAC,CAAS,EAAE,EAAa;IAClD,IAAI,CAAC;QAAC,CAAC,EAAE,2BAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACpG,CAAC;AAED,mFAAmF;AACnF,SAAS,UAAU,CAAC,CAAoB,EAAE,CAAS;IACjD,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,CAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3D,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,CAAC,EAAE,GAAa,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,CAAoB,EAAE,GAAY;IACrD,QAAQ,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACtB,MAAM;QACR,KAAK,SAAS;YACZ,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM;QACR,KAAK,WAAW;YACd,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YACrB,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,CAAC;YAC9B,MAAM;QACR,KAAK,QAAQ;YACX,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACrB,MAAM;QACR,KAAK,QAAQ;YACX,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;gBAAC,IAAI,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;gBAAC,MAAM;YAAC,CAAC;YAC/D,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACnB,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;gBAAE,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;YAClE,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACb,MAAM;QACR;YACE,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAClB,CAAC;iBAAM,IAAI,WAAW,CAAC,GAAc,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,GAAG,GAAa,CAAC;gBACxB,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;oBACb,IAAI,CAAC,CAAC,EAAE,aAAa,GAAG,GAAG,CAAC,CAAC;gBAC/B,CAAC;qBAAM,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;oBACtD,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACtB,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACnB,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACb,UAAU,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxD,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;iBAAM,IAAI,cAAc,CAAC,GAAc,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;YAC3B,CAAC;YACD,MAAM;IACV,CAAC;AACH,CAAC;AAED;2DAC2D;AAC3D,MAAM,UAAU,aAAa,CAAC,GAAc,EAAE,UAA6B,EAAE,YAAiB,EAChE,GAAY,EAAE,OAA4C;IACtF,MAAM,IAAI,GAAG,EAAyB,CAAC;IACvC,8BAA8B,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC;QAAE,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC;;QACxD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IACnE,IAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC;QAAE,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC;IACtE,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC;QAAE,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC;IAChE,MAAM,CAAC,GAAsB,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC/F,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACtB,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,qBAAqB,CAAC,GAAc,EAAE,GAAY,EAAE,UAA+C,IAAI;IACrH,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACrE,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["/*\n * Debug value output: port of JS_PrintValue (quickjs.c, QuickJS 2025-09-13\n * and later), used by print() and console.log() of the command line\n * interpreter.\n *\n * The output has no side effect: no getter, toString or Proxy trap runs.\n * Guest objects are host objects here, so the properties are those of the\n * host object, in host order (integer keys first) rather than in QuickJS\n * shape order; an array is printed as a QuickJS fast array when its index\n * properties are the data properties 0 .. n-1.\n */\nimport { JSContext, JSValue, JSClassID, JS_IsObject, JS_GetClassID, JS_GetClassName, JS_IsException, JS_GetException } from './quickjs.ts';\nimport { get_date_string } from './builtins/date.ts';\n\nexport interface JSPrintValueOptions {\n show_hidden: boolean; /* also show the non enumerable properties */\n raw_dump: boolean; /* (internal use in QuickJS: accepted and ignored) */\n max_depth: number; /* recurse up to this depth, 0 = no limit */\n max_string_length: number; /* print no more than this length for strings, 0 = no limit */\n max_item_count: number; /* print no more than this count for arrays or objects, 0 = no limit */\n}\n\nexport type JSPrintValueWrite = (opaque: any, buf: string) => void;\n\nconst JS_PRINT_MAX_DEPTH = 8;\n\nexport function JS_PrintValueSetDefaultOptions(options: JSPrintValueOptions): void {\n options.show_hidden = false;\n options.raw_dump = false;\n options.max_depth = 2;\n options.max_string_length = 1000;\n options.max_item_count = 100;\n}\n\ninterface JSPrintValueState {\n ctx: JSContext;\n options: JSPrintValueOptions;\n write_func: JSPrintValueWrite;\n write_opaque: any;\n print_stack: object[];\n}\n\nconst gopd = Object.getOwnPropertyDescriptor;\nconst host_getter = (proto: object, name: string): Function => gopd(proto, name)!.get!;\nconst TA_LENGTH = host_getter(Object.getPrototypeOf(Uint8Array.prototype), 'length');\nconst MAP_SIZE = host_getter(Map.prototype, 'size');\nconst SET_SIZE = host_getter(Set.prototype, 'size');\nconst MAP_FOREACH = Map.prototype.forEach;\nconst SET_FOREACH = Set.prototype.forEach;\nconst RE_SOURCE = host_getter(RegExp.prototype, 'source');\nconst RE_FLAGS: [string, Function | null][] = ([['g', 'global'], ['i', 'ignoreCase'], ['m', 'multiline'], ['s', 'dotAll'],\n ['u', 'unicode'], ['y', 'sticky'], ['d', 'hasIndices'], ['v', 'unicodeSets']] as const)\n .map(([c, name]) => [c, gopd(RegExp.prototype, name)?.get ?? null]);\n\nfunction puts(s: JSPrintValueState, str: string): void {\n s.write_func(s.write_opaque, str);\n}\n\n/* js_dtoa(JS_DTOA_FORMAT_FREE | JS_DTOA_MINUS_ZERO) */\nfunction print_float64(s: JSPrintValueState, d: number): void {\n puts(s, Object.is(d, -0) ? '-0' : String(d));\n}\n\n/* pretty print the first 'len' characters of 'str' */\nfunction print_string1(s: JSPrintValueState, str: string, len: number, sep: number): void {\n let out = '';\n for (let i = 0; i < len; i++) {\n let c = str.charCodeAt(i);\n let q = -1;\n switch (c) {\n case 9: q = 116; break; /* \\t */\n case 13: q = 114; break; /* \\r */\n case 10: q = 110; break; /* \\n */\n case 8: q = 98; break; /* \\b */\n case 12: q = 102; break; /* \\f */\n case 92: q = 92; break; /* \\\\ */\n default:\n if (c === sep) q = c;\n }\n if (q >= 0) {\n out += '\\\\' + String.fromCharCode(q);\n } else if (c >= 32 && c <= 126) {\n out += String.fromCharCode(c);\n } else if (c < 32 || (c >= 0x7f && c <= 0x9f)) {\n out += '\\\\u' + c.toString(16).padStart(4, '0');\n } else if (c >= 0xd800 && c <= 0xdbff) {\n const c1 = i + 1 < len ? str.charCodeAt(i + 1) : 0;\n if (c1 >= 0xdc00 && c1 <= 0xdfff) {\n out += str[i] + str[i + 1];\n i++;\n } else {\n out += '\\\\u' + c.toString(16).padStart(4, '0');\n }\n } else if (c >= 0xdc00 && c <= 0xdfff) {\n out += '\\\\u' + c.toString(16).padStart(4, '0');\n } else {\n out += String.fromCharCode(c);\n }\n }\n puts(s, out);\n}\n\nfunction print_string(s: JSPrintValueState, val: string): void {\n const max = s.options.max_string_length;\n puts(s, '\"');\n print_string1(s, val, Math.min(val.length, max), 34);\n puts(s, '\"');\n if (val.length > max) {\n const n = val.length - max;\n puts(s, `... ${n} more character${n > 1 ? 's' : ''}`);\n }\n}\n\nfunction is_ascii_ident(str: string): boolean {\n if (str.length === 0) return false;\n for (let i = 0; i < str.length; i++) {\n const c = str.charCodeAt(i);\n if (!((c >= 97 && c <= 122) || (c >= 65 && c <= 90) || c === 95 || c === 36 || (c >= 48 && c <= 57 && i > 0))) return false;\n }\n return true;\n}\n\n/* a property key or a symbol description, printed as js_print_atom() */\nfunction print_atom(s: JSPrintValueState, key: string | symbol | undefined): void {\n if (typeof key === 'symbol') key = key.description ?? '';\n if (key === undefined) { puts(s, '<null>'); return; }\n /* the integer atoms (0 .. 2^31-1) are printed as numbers */\n const n = Number(key);\n if (String(n >>> 0) === key && n <= 0x7fffffff) { puts(s, key); return; }\n if (is_ascii_ident(key)) {\n puts(s, key);\n } else {\n puts(s, '\"');\n print_string1(s, key, key.length, 34);\n puts(s, '\"');\n }\n}\n\nfunction print_comma(s: JSPrintValueState, cs: { v: number }): void {\n switch (cs.v) {\n case 1: puts(s, ', '); break;\n case 2: puts(s, ' { '); break;\n }\n cs.v = 1;\n}\n\nfunction print_more_items(s: JSPrintValueState, cs: { v: number }, n: number): void {\n print_comma(s, cs);\n puts(s, `... ${n} more item${n > 1 ? 's' : ''}`);\n}\n\nfunction is_proxy_class(cl: JSClassID): boolean {\n return cl === JSClassID.PROXY || cl === JSClassID.MODULE_NS;\n}\n\n/* own data property (or one level in the prototype, for the 'name' of the\n Error objects) holding a string, without side effect: get_prop_string() */\nfunction get_prop_string(p: object, prop: string): string | null {\n let d = gopd(p, prop);\n if (!d) {\n const proto = Object.getPrototypeOf(p);\n if (proto === null || is_proxy_class(JS_GetClassID(proto))) return null;\n d = gopd(proto, prop);\n if (!d) return null;\n }\n return typeof d.value === 'string' ? d.value : null;\n}\n\nfunction print_regexp(s: JSPrintValueState, re: RegExp): void {\n let src: string;\n try { src = RE_SOURCE.call(re); } catch { puts(s, '[uninitialized_regexp]'); return; }\n puts(s, '/' + src + '/');\n for (const [c, get] of RE_FLAGS) {\n if (get && get.call(re)) puts(s, c);\n }\n}\n\nfunction print_error(s: JSPrintValueState, p: object): void {\n puts(s, get_prop_string(p, 'name') ?? 'Error');\n const msg = get_prop_string(p, 'message');\n if (msg) puts(s, ': ' + msg);\n let stack = get_prop_string(p, 'stack');\n if (stack !== null) {\n if (stack.endsWith('\\n')) stack = stack.slice(0, -1);\n puts(s, '\\n' + stack);\n }\n}\n\n/* the number of elements if 'a' is like a QuickJS fast array, or -1 */\nfunction fast_array_count(a: unknown[]): number {\n const len = a.length;\n let count = 0;\n while (count < len) {\n const d = gopd(a, count);\n if (!d || !('value' in d)) break;\n count++;\n }\n if (count < len) {\n /* an index property after the first missing one: not a fast array */\n for (const k of Object.keys(a)) {\n const n = Number(k);\n if (String(n >>> 0) === k && n >= count) return -1;\n }\n }\n return count;\n}\n\nfunction print_object(s: JSPrintValueState, p: object): void {\n const ctx = s.ctx;\n const opts = s.options;\n const cl = JS_GetClassID(p);\n const cs = { v: 0 };\n let is_array = false;\n let skip_index = false; /* index properties already printed (or exotic) */\n let skip_props = false;\n if (cl === JSClassID.ARRAY && Array.isArray(p)) {\n is_array = true;\n puts(s, '[ ');\n const a = p as unknown[];\n const count = fast_array_count(a);\n if (count >= 0) {\n skip_index = true;\n const len1 = Math.min(count, opts.max_item_count);\n for (let i = 0; i < len1; i++) {\n print_comma(s, cs);\n print_value(s, a[i]);\n }\n if (len1 < count) print_more_items(s, cs, count - len1);\n if (count < a.length) {\n const n = a.length - count;\n print_comma(s, cs);\n puts(s, `<${n} empty item${n > 1 ? 's' : ''}>`);\n }\n }\n } else if (cl >= JSClassID.UINT8C_ARRAY && cl <= JSClassID.FLOAT64_ARRAY && ArrayBuffer.isView(p)) {\n let count = 0;\n try { count = TA_LENGTH.call(p); } catch { count = 0; }\n const ta = p as unknown as ArrayLike<number | bigint>;\n print_atom(s, JS_GetClassName(ctx, cl));\n puts(s, `(${count}) [ `);\n is_array = true;\n skip_index = true;\n const len1 = Math.min(count, opts.max_item_count);\n const is_float = cl === JSClassID.FLOAT32_ARRAY || cl === JSClassID.FLOAT64_ARRAY;\n for (let i = 0; i < len1; i++) {\n print_comma(s, cs);\n const v = ta[i];\n if (is_float) print_float64(s, v as number);\n else puts(s, String(v));\n }\n if (len1 < count) print_more_items(s, cs, count - len1);\n } else if (typeof p === 'function' && !is_proxy_class(cl)) {\n puts(s, '[Function ');\n const name = get_prop_string(p, 'name');\n puts(s, name ? name : '(anonymous)');\n puts(s, ']');\n cs.v = 2;\n } else if ((cl === JSClassID.MAP || cl === JSClassID.SET) && is_host_collection(p, cl)) {\n const is_map = cl === JSClassID.MAP;\n const size: number = (is_map ? MAP_SIZE : SET_SIZE).call(p);\n print_atom(s, JS_GetClassName(ctx, cl));\n puts(s, `(${size}) { `);\n let i = 0;\n const entries: [unknown, unknown][] = [];\n (is_map ? MAP_FOREACH : SET_FOREACH).call(p, (v: unknown, k: unknown) => {\n if (entries.length < opts.max_item_count) entries.push([k, v]);\n });\n for (const [k, v] of entries) {\n print_comma(s, cs);\n print_value(s, k);\n if (is_map) {\n puts(s, ' => ');\n print_value(s, v);\n }\n i++;\n }\n if (i < size) print_more_items(s, cs, size - i);\n } else if (cl === JSClassID.REGEXP && is_host_regexp(p)) {\n print_regexp(s, p);\n cs.v = 2;\n } else if (cl === JSClassID.DATE && print_date(s, p)) {\n cs.v = 2;\n } else if (cl === JSClassID.ERROR) {\n print_error(s, p);\n cs.v = 2;\n } else {\n if (cl !== JSClassID.OBJECT) {\n print_atom(s, JS_GetClassName(ctx, cl));\n puts(s, ' ');\n }\n puts(s, '{ ');\n /* a Proxy has no own properties (its traps are not called); String\n objects have exotic index properties */\n if (cl === JSClassID.PROXY) skip_props = true;\n if (cl === JSClassID.STRING) skip_index = true;\n }\n\n if (!skip_props) {\n let keys: (string | symbol)[];\n try { keys = Reflect.ownKeys(p); } catch { keys = []; }\n let j = 0;\n for (const key of keys) {\n if (skip_index && typeof key === 'string') {\n const n = Number(key);\n if (String(n >>> 0) === key && n < 0xffffffff) continue;\n }\n let d: PropertyDescriptor | undefined;\n try { d = gopd(p, key); } catch {\n /* an uninitialized binding of a module namespace */\n d = { value: UNINITIALIZED, enumerable: true };\n }\n if (!d) continue;\n if (!d.enumerable && !opts.show_hidden) continue;\n if (j < opts.max_item_count) {\n print_comma(s, cs);\n print_atom(s, key);\n puts(s, ': ');\n if (d.get || d.set) {\n puts(s, d.get && d.set ? '[Getter/Setter]' : d.set ? '[Setter]' : '[Getter]');\n } else {\n print_value(s, d.value);\n }\n }\n j++;\n }\n if (j > opts.max_item_count) print_more_items(s, cs, j - opts.max_item_count);\n }\n\n if (!is_array) {\n if (cs.v !== 2) puts(s, ' }');\n } else {\n puts(s, ' ]');\n }\n}\n\nconst UNINITIALIZED = Symbol(\"uninitialized\");\n\nfunction is_host_regexp(p: object): p is RegExp {\n try { RE_SOURCE.call(p); return true; } catch { return false; }\n}\n\nfunction is_host_collection(p: object, cl: JSClassID): boolean {\n try { (cl === JSClassID.MAP ? MAP_SIZE : SET_SIZE).call(p); return true; } catch { return false; }\n}\n\n/* toISOString() (get_date_string has no side effect); false for an invalid date */\nfunction print_date(s: JSPrintValueState, p: object): boolean {\n const str = get_date_string(s.ctx, p as JSValue, [], 0x23);\n if (JS_IsException(str)) {\n JS_GetException(s.ctx);\n return false;\n }\n puts(s, str as string);\n return true;\n}\n\nfunction print_value(s: JSPrintValueState, val: unknown): void {\n switch (typeof val) {\n case 'number':\n print_float64(s, val);\n break;\n case 'boolean':\n puts(s, val ? 'true' : 'false');\n break;\n case 'undefined':\n puts(s, 'undefined');\n break;\n case 'bigint':\n puts(s, val.toString() + 'n');\n break;\n case 'string':\n print_string(s, val);\n break;\n case 'symbol':\n if (val === UNINITIALIZED) { puts(s, 'uninitialized'); break; }\n puts(s, 'Symbol(');\n if (val.description !== undefined) print_atom(s, val.description);\n puts(s, ')');\n break;\n default:\n if (val === null) {\n puts(s, 'null');\n } else if (JS_IsObject(val as JSValue)) {\n const p = val as object;\n const idx = s.print_stack.indexOf(p);\n if (idx >= 0) {\n puts(s, `[circular ${idx}]`);\n } else if (s.print_stack.length < s.options.max_depth) {\n s.print_stack.push(p);\n print_object(s, p);\n s.print_stack.pop();\n } else {\n puts(s, '[');\n print_atom(s, JS_GetClassName(s.ctx, JS_GetClassID(p)));\n puts(s, ']');\n }\n } else if (JS_IsException(val as JSValue)) {\n puts(s, 'exception');\n } else {\n puts(s, '[unknown tag]');\n }\n break;\n }\n}\n\n/* write the debug representation of 'val' with 'write_func' (options: the\n defaults of JS_PrintValueSetDefaultOptions when null) */\nexport function JS_PrintValue(ctx: JSContext, write_func: JSPrintValueWrite, write_opaque: any,\n val: JSValue, options: Partial<JSPrintValueOptions> | null): void {\n const opts = {} as JSPrintValueOptions;\n JS_PrintValueSetDefaultOptions(opts);\n if (options) {\n opts.show_hidden = options.show_hidden ?? false;\n opts.raw_dump = options.raw_dump ?? false;\n opts.max_depth = options.max_depth ?? 0;\n opts.max_string_length = options.max_string_length ?? 0;\n opts.max_item_count = options.max_item_count ?? 0;\n }\n if (opts.max_depth <= 0) opts.max_depth = JS_PRINT_MAX_DEPTH;\n else opts.max_depth = Math.min(opts.max_depth, JS_PRINT_MAX_DEPTH);\n if (opts.max_string_length === 0) opts.max_string_length = 0xffffffff;\n if (opts.max_item_count === 0) opts.max_item_count = 0xffffffff;\n const s: JSPrintValueState = { ctx, options: opts, write_func, write_opaque, print_stack: [] };\n print_value(s, val);\n}\n\n/* convenience: the debug representation as a string */\nexport function JS_PrintValueToString(ctx: JSContext, val: JSValue, options: Partial<JSPrintValueOptions> | null = null): string {\n let out = '';\n JS_PrintValue(ctx, (_o, buf) => { out += buf; }, null, val, options);\n return out;\n}\n"]}
|
package/dist/qjs.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
/*
|
|
3
3
|
* qjs: command line interpreter (port of qjs.c)
|
|
4
4
|
*/
|
|
5
|
-
import { JS_NewRuntime, JS_NewContext, JS_Eval, JS_IsException, JS_EVAL_TYPE_GLOBAL, JS_EVAL_TYPE_MODULE, JS_EVAL_FLAG_STRICT, JS_EVAL_FLAG_COMPILE_ONLY, JS_EVAL_FLAG_STRIP_TYPES, JS_EVAL_FLAG_JSX, JS_IsUndefined,
|
|
6
|
-
import { js_std_add_helpers, js_std_loop, js_std_dump_error, js_std_module_loader } from "./std.js";
|
|
5
|
+
import { JS_NewRuntime, JS_NewContext, JS_Eval, JS_IsException, JS_EVAL_TYPE_GLOBAL, JS_EVAL_TYPE_MODULE, JS_EVAL_FLAG_STRICT, JS_EVAL_FLAG_COMPILE_ONLY, JS_EVAL_FLAG_STRIP_TYPES, JS_EVAL_FLAG_JSX, JS_IsUndefined, JS_GetFunctionData, JS_SetMaxStackSize, JSModuleDef, JS_SetModuleLoader, JS_ImportModule, JS_EvalModule, JS_DetectModule, JS_PromiseState, JS_PromiseResult, JS_SetHostPromiseRejectionTracker } from "./jseption.js";
|
|
6
|
+
import { js_std_add_helpers, js_std_loop, js_std_dump_error, js_std_dump_error1, js_std_module_loader, js_std_promise_rejection_tracker } from "./std.js";
|
|
7
|
+
import { JS_PrintValueToString } from "./print.js";
|
|
7
8
|
import { dump_byte_code } from "./dump.js";
|
|
8
9
|
import { js_module_type_of, js_module_type_flags } from "./module.js";
|
|
9
10
|
import { readFileSync } from 'node:fs';
|
|
@@ -23,7 +24,8 @@ function help() {
|
|
|
23
24
|
.ts, .mts, .cts and .tsx files always are)
|
|
24
25
|
--jsx compile JSX in -e and the REPL (.jsx and .tsx files always
|
|
25
26
|
are)
|
|
26
|
-
-q --quit just instantiate the interpreter and quit
|
|
27
|
+
-q --quit just instantiate the interpreter and quit
|
|
28
|
+
--no-unhandled-rejection ignore unhandled promise rejections`);
|
|
27
29
|
process.exit(1);
|
|
28
30
|
}
|
|
29
31
|
function dump_buf(ctx, buf, filename, eval_flags) {
|
|
@@ -52,7 +54,7 @@ const module_promises = [];
|
|
|
52
54
|
function check_module(ctx, p) {
|
|
53
55
|
if (JS_PromiseState(ctx, p) !== 2 /* JSPromiseState.REJECTED */)
|
|
54
56
|
return 0;
|
|
55
|
-
|
|
57
|
+
js_std_dump_error1(ctx, JS_PromiseResult(ctx, p));
|
|
56
58
|
return -1;
|
|
57
59
|
}
|
|
58
60
|
/* is `filename` (with source `buf`) a module? */
|
|
@@ -79,11 +81,7 @@ async function repl(ctx, eval_flags) {
|
|
|
79
81
|
js_std_dump_error(ctx);
|
|
80
82
|
}
|
|
81
83
|
else if (!JS_IsUndefined(val)) {
|
|
82
|
-
|
|
83
|
-
if (JS_IsException(s))
|
|
84
|
-
js_std_dump_error(ctx);
|
|
85
|
-
else
|
|
86
|
-
console.log(s);
|
|
84
|
+
console.log(JS_PrintValueToString(ctx, val));
|
|
87
85
|
}
|
|
88
86
|
await js_std_loop(ctx);
|
|
89
87
|
rl.prompt();
|
|
@@ -94,6 +92,7 @@ async function main() {
|
|
|
94
92
|
let optind = 0;
|
|
95
93
|
const expr = [];
|
|
96
94
|
let interactive = false, dump = false, strict = false, quit = false, strip_types = false, jsx = false;
|
|
95
|
+
let dump_unhandled_promise_rejection = true;
|
|
97
96
|
let force = null;
|
|
98
97
|
while (optind < argv.length && argv[optind].startsWith('-')) {
|
|
99
98
|
const arg = argv[optind++];
|
|
@@ -120,6 +119,8 @@ async function main() {
|
|
|
120
119
|
jsx = true;
|
|
121
120
|
else if (arg === '-q' || arg === '--quit')
|
|
122
121
|
quit = true;
|
|
122
|
+
else if (arg === '--no-unhandled-rejection')
|
|
123
|
+
dump_unhandled_promise_rejection = false;
|
|
123
124
|
else if (arg === '--')
|
|
124
125
|
break;
|
|
125
126
|
else {
|
|
@@ -131,6 +132,8 @@ async function main() {
|
|
|
131
132
|
JS_SetMaxStackSize(rt, 1000);
|
|
132
133
|
const ctx = JS_NewContext(rt);
|
|
133
134
|
js_std_add_helpers(ctx, argv.slice(optind));
|
|
135
|
+
if (dump_unhandled_promise_rejection)
|
|
136
|
+
JS_SetHostPromiseRejectionTracker(rt, js_std_promise_rejection_tracker, null);
|
|
134
137
|
JS_SetModuleLoader(rt, js_std_module_loader());
|
|
135
138
|
if (quit)
|
|
136
139
|
return 0;
|
|
@@ -179,7 +182,7 @@ async function main() {
|
|
|
179
182
|
else if (expr.length === 0) {
|
|
180
183
|
interactive = true;
|
|
181
184
|
}
|
|
182
|
-
await js_std_loop(ctx);
|
|
185
|
+
await js_std_loop(ctx, module_promises);
|
|
183
186
|
for (const p of module_promises)
|
|
184
187
|
if (check_module(ctx, p))
|
|
185
188
|
status = 1;
|