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.
Files changed (86) hide show
  1. package/README.md +25 -4
  2. package/dist/atoms.d.ts +1 -0
  3. package/dist/atoms.js +2 -1
  4. package/dist/atoms.js.map +1 -1
  5. package/dist/builtins/base64.d.ts +14 -0
  6. package/dist/builtins/base64.js +219 -0
  7. package/dist/builtins/base64.js.map +1 -0
  8. package/dist/builtins/bigint.js +3 -3
  9. package/dist/builtins/bigint.js.map +1 -1
  10. package/dist/builtins/date.d.ts +1 -0
  11. package/dist/builtins/date.js +26 -12
  12. package/dist/builtins/date.js.map +1 -1
  13. package/dist/builtins/error.js +9 -0
  14. package/dist/builtins/error.js.map +1 -1
  15. package/dist/builtins/float16.d.ts +3 -0
  16. package/dist/builtins/float16.js +69 -0
  17. package/dist/builtins/float16.js.map +1 -0
  18. package/dist/builtins/function.js +2 -2
  19. package/dist/builtins/index.js +9 -6
  20. package/dist/builtins/index.js.map +1 -1
  21. package/dist/builtins/iterator.d.ts +2 -0
  22. package/dist/builtins/iterator.js +624 -0
  23. package/dist/builtins/iterator.js.map +1 -0
  24. package/dist/builtins/json.d.ts +13 -1
  25. package/dist/builtins/json.js +283 -211
  26. package/dist/builtins/json.js.map +1 -1
  27. package/dist/builtins/mapset.js +365 -6
  28. package/dist/builtins/mapset.js.map +1 -1
  29. package/dist/builtins/math.js +203 -3
  30. package/dist/builtins/math.js.map +1 -1
  31. package/dist/builtins/native.js +6 -6
  32. package/dist/builtins/object.js +9 -2
  33. package/dist/builtins/object.js.map +1 -1
  34. package/dist/builtins/promise.js +31 -11
  35. package/dist/builtins/promise.js.map +1 -1
  36. package/dist/builtins/proxy.js +2 -2
  37. package/dist/builtins/reflect.js +6 -2
  38. package/dist/builtins/reflect.js.map +1 -1
  39. package/dist/builtins/regexp.js +74 -3
  40. package/dist/builtins/regexp.js.map +1 -1
  41. package/dist/builtins/string.js +1 -1
  42. package/dist/builtins/symbol.js +1 -1
  43. package/dist/builtins/symbol.js.map +1 -1
  44. package/dist/builtins/typedarray.d.ts +1 -0
  45. package/dist/builtins/typedarray.js +302 -32
  46. package/dist/builtins/typedarray.js.map +1 -1
  47. package/dist/builtins/weakref.js +7 -7
  48. package/dist/embed.js +3 -3
  49. package/dist/interpreter.js +15 -14
  50. package/dist/interpreter.js.map +1 -1
  51. package/dist/jit.d.ts +1 -0
  52. package/dist/jit.js +51 -13
  53. package/dist/jit.js.map +1 -1
  54. package/dist/jit_hook.d.ts +1 -0
  55. package/dist/jit_hook.js.map +1 -1
  56. package/dist/jit_runtime.d.ts +1 -1
  57. package/dist/jit_runtime.js +6 -6
  58. package/dist/jit_runtime.js.map +1 -1
  59. package/dist/jit_stack.d.ts +1 -0
  60. package/dist/jit_stack.js +2 -1
  61. package/dist/jit_stack.js.map +1 -1
  62. package/dist/jseption.d.ts +2 -0
  63. package/dist/jseption.js +1 -0
  64. package/dist/jseption.js.map +1 -1
  65. package/dist/membrane.js +1 -1
  66. package/dist/module.js +5 -3
  67. package/dist/module.js.map +1 -1
  68. package/dist/parser.js +26 -9
  69. package/dist/parser.js.map +1 -1
  70. package/dist/print.d.ts +12 -0
  71. package/dist/print.js +494 -0
  72. package/dist/print.js.map +1 -0
  73. package/dist/qjs.js +13 -10
  74. package/dist/qjs.js.map +1 -1
  75. package/dist/quickjs.d.ts +8 -0
  76. package/dist/quickjs.js +132 -53
  77. package/dist/quickjs.js.map +1 -1
  78. package/dist/std.d.ts +4 -2
  79. package/dist/std.js +42 -8
  80. package/dist/std.js.map +1 -1
  81. package/dist/values.d.ts +31 -27
  82. package/dist/values.js.map +1 -1
  83. package/dist/version.d.ts +1 -1
  84. package/dist/version.js +1 -1
  85. package/dist/version.js.map +1 -1
  86. package/package.json +1 -1
@@ -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":"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","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, JS_ToString, JS_GetFunctionData, JS_SetMaxStackSize, formatException, JSModuleDef, JS_SetModuleLoader, JS_ImportModule, JS_EvalModule, JS_DetectModule, JS_PromiseState, JS_PromiseResult } from "./jseption.js";
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
- process.stderr.write(formatException(ctx, JS_PromiseResult(ctx, p)) + '\n');
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
- const s = JS_ToString(ctx, val);
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;