jseption 0.0.4 → 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 +56 -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.d.ts +5 -0
- package/dist/embed.js +47 -15
- package/dist/embed.js.map +1 -1
- 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 +4 -0
- package/dist/jseption.js +2 -0
- package/dist/jseption.js.map +1 -1
- package/dist/membrane.d.ts +16 -0
- package/dist/membrane.js +576 -0
- package/dist/membrane.js.map +1 -0
- 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/builtins/weakref.js
CHANGED
|
@@ -11,14 +11,14 @@ function js_weakref_constructor(ctx, new_target, argv) {
|
|
|
11
11
|
const arg = argv[0];
|
|
12
12
|
if (!js_weakref_is_target(arg))
|
|
13
13
|
return JS_ThrowTypeError(ctx, 'invalid target');
|
|
14
|
-
const obj = js_create_from_ctor(ctx, new_target,
|
|
14
|
+
const obj = js_create_from_ctor(ctx, new_target, 55 /* JSClassID.WEAK_REF */);
|
|
15
15
|
if (JS_IsException(obj))
|
|
16
16
|
return JS_EXCEPTION;
|
|
17
17
|
JS_SetOpaque(obj, new JSWeakRefData(arg));
|
|
18
18
|
return obj;
|
|
19
19
|
}
|
|
20
20
|
function js_weakref_deref(ctx, this_val, argv) {
|
|
21
|
-
const wrd = JS_GetOpaque2(ctx, this_val,
|
|
21
|
+
const wrd = JS_GetOpaque2(ctx, this_val, 55 /* JSClassID.WEAK_REF */);
|
|
22
22
|
if (!wrd)
|
|
23
23
|
return JS_EXCEPTION;
|
|
24
24
|
const target = wrd.target.deref();
|
|
@@ -67,14 +67,14 @@ function js_finrec_constructor(ctx, new_target, argv) {
|
|
|
67
67
|
const cb = argv[0];
|
|
68
68
|
if (!JS_IsFunction(ctx, cb))
|
|
69
69
|
return JS_ThrowTypeError(ctx, 'argument must be a function');
|
|
70
|
-
const obj = js_create_from_ctor(ctx, new_target,
|
|
70
|
+
const obj = js_create_from_ctor(ctx, new_target, 56 /* JSClassID.FINALIZATION_REGISTRY */);
|
|
71
71
|
if (JS_IsException(obj))
|
|
72
72
|
return JS_EXCEPTION;
|
|
73
73
|
JS_SetOpaque(obj, new JSFinalizationRegistryData(ctx, cb));
|
|
74
74
|
return obj;
|
|
75
75
|
}
|
|
76
76
|
function js_finrec_register(ctx, this_val, argv) {
|
|
77
|
-
const frd = JS_GetOpaque2(ctx, this_val,
|
|
77
|
+
const frd = JS_GetOpaque2(ctx, this_val, 56 /* JSClassID.FINALIZATION_REGISTRY */);
|
|
78
78
|
if (!frd)
|
|
79
79
|
return JS_EXCEPTION;
|
|
80
80
|
const target = argv[0];
|
|
@@ -92,7 +92,7 @@ function js_finrec_register(ctx, this_val, argv) {
|
|
|
92
92
|
return undefined;
|
|
93
93
|
}
|
|
94
94
|
function js_finrec_unregister(ctx, this_val, argv) {
|
|
95
|
-
const frd = JS_GetOpaque2(ctx, this_val,
|
|
95
|
+
const frd = JS_GetOpaque2(ctx, this_val, 56 /* JSClassID.FINALIZATION_REGISTRY */);
|
|
96
96
|
if (!frd)
|
|
97
97
|
return JS_EXCEPTION;
|
|
98
98
|
const token = argv[0];
|
|
@@ -118,12 +118,12 @@ const js_finrec_proto_funcs = [
|
|
|
118
118
|
export function JS_AddIntrinsicWeakRef(ctx) {
|
|
119
119
|
/* WeakRef */
|
|
120
120
|
const weakref_proto = JS_NewObject(ctx);
|
|
121
|
-
ctx.class_proto[
|
|
121
|
+
ctx.class_proto[55 /* JSClassID.WEAK_REF */] = weakref_proto;
|
|
122
122
|
JS_SetPropertyFunctionList(ctx, weakref_proto, js_weakref_proto_funcs);
|
|
123
123
|
JS_NewGlobalCConstructor(ctx, 'WeakRef', js_weakref_constructor, 1, weakref_proto);
|
|
124
124
|
/* FinalizationRegistry */
|
|
125
125
|
const finrec_proto = JS_NewObject(ctx);
|
|
126
|
-
ctx.class_proto[
|
|
126
|
+
ctx.class_proto[56 /* JSClassID.FINALIZATION_REGISTRY */] = finrec_proto;
|
|
127
127
|
JS_SetPropertyFunctionList(ctx, finrec_proto, js_finrec_proto_funcs);
|
|
128
128
|
JS_NewGlobalCConstructor(ctx, 'FinalizationRegistry', js_finrec_constructor, 1, finrec_proto);
|
|
129
129
|
}
|
package/dist/embed.d.ts
CHANGED
|
@@ -13,6 +13,11 @@ export declare function guestErrorToHost(ctx: JSContext, exc: JSValue): Error;
|
|
|
13
13
|
export declare function toGuest(ctx: JSContext, value: unknown, opts?: ToGuestOptions): JSValue;
|
|
14
14
|
export declare function hostFunction(ctx: JSContext, fn: (...args: any[]) => unknown, name?: string, length?: number, opts?: ToGuestOptions): JSValue;
|
|
15
15
|
export declare function hostPromise(ctx: JSContext, p: PromiseLike<unknown>, opts?: ToGuestOptions): JSValue;
|
|
16
|
+
export declare function hostPromiseWith(ctx: JSContext, p: PromiseLike<unknown>, resolve: (v: unknown) => JSValue, reject: (e: unknown) => JSValue): JSValue;
|
|
16
17
|
export declare function expose(ctx: JSContext, name: string, value: unknown, opts?: ToGuestOptions): void;
|
|
17
18
|
export declare function fromGuest(ctx: JSContext, value: JSValue): unknown;
|
|
19
|
+
export declare const FROM_GUEST_DEFAULT: unique symbol;
|
|
20
|
+
export type FromGuestHook = (v: JSValue) => unknown;
|
|
21
|
+
export declare function fromGuestWith(ctx: JSContext, value: JSValue, hook: FromGuestHook): unknown;
|
|
18
22
|
export declare function guestPromiseToHost(ctx: JSContext, promise: JSValue): Promise<unknown>;
|
|
23
|
+
export declare function guestPromiseToHostWith(ctx: JSContext, promise: JSValue, convert: (v: JSValue) => unknown, convertRejection: (e: JSValue) => unknown): Promise<unknown>;
|
package/dist/embed.js
CHANGED
|
@@ -172,23 +172,30 @@ export function hostFunction(ctx, fn, name = fn.name || 'hostFunction', length =
|
|
|
172
172
|
/* a guest promise that settles when the host promise does; guest jobs are
|
|
173
173
|
run after the settlement so `await` continuations execute promptly */
|
|
174
174
|
export function hostPromise(ctx, p, opts = {}) {
|
|
175
|
+
return hostPromiseWith(ctx, p, v => toGuest(ctx, v, opts), e => toGuest(ctx, e, opts));
|
|
176
|
+
}
|
|
177
|
+
/* hostPromise with the conversions supplied by the caller (the membrane
|
|
178
|
+
converts results live); `reject` converts a rejection reason or an
|
|
179
|
+
exception thrown by `resolve` */
|
|
180
|
+
export function hostPromiseWith(ctx, p, resolve, reject) {
|
|
175
181
|
const funcs = [undefined, undefined];
|
|
176
182
|
const promise = JS_NewPromiseCapability(ctx, funcs);
|
|
177
183
|
if (JS_IsException(promise))
|
|
178
184
|
throwGuestException(ctx);
|
|
179
|
-
const settle = (
|
|
185
|
+
const settle = (ok, v) => {
|
|
186
|
+
let fn = ok ? funcs[0] : funcs[1];
|
|
180
187
|
let g;
|
|
181
188
|
try {
|
|
182
|
-
g =
|
|
189
|
+
g = ok ? resolve(v) : reject(v);
|
|
183
190
|
}
|
|
184
191
|
catch (e) {
|
|
185
192
|
fn = funcs[1];
|
|
186
|
-
g =
|
|
193
|
+
g = reject(e);
|
|
187
194
|
}
|
|
188
195
|
JS_Call(ctx, fn, undefined, [g]);
|
|
189
196
|
drainJobs(ctx);
|
|
190
197
|
};
|
|
191
|
-
p.then(v => settle(
|
|
198
|
+
p.then(v => settle(true, v), e => settle(false, e));
|
|
192
199
|
return promise;
|
|
193
200
|
}
|
|
194
201
|
/* define a global variable in the guest */
|
|
@@ -200,9 +207,21 @@ export function expose(ctx, name, value, opts = {}) {
|
|
|
200
207
|
functions become host functions (that call into the guest), guest
|
|
201
208
|
promises become host promises, errors become host Errors */
|
|
202
209
|
export function fromGuest(ctx, value) {
|
|
203
|
-
return fromGuestRec(ctx, value, new Map());
|
|
210
|
+
return fromGuestRec(ctx, value, new Map(), undefined);
|
|
211
|
+
}
|
|
212
|
+
/* returned by a fromGuestWith hook to let the default conversion handle a value */
|
|
213
|
+
export const FROM_GUEST_DEFAULT = Symbol('fromGuest default');
|
|
214
|
+
/* fromGuest with a hook that is offered every value first, at every depth
|
|
215
|
+
(the membrane unwraps its proxies and wraps guest functions this way) */
|
|
216
|
+
export function fromGuestWith(ctx, value, hook) {
|
|
217
|
+
return fromGuestRec(ctx, value, new Map(), hook);
|
|
204
218
|
}
|
|
205
|
-
function fromGuestRec(ctx, v, seen) {
|
|
219
|
+
function fromGuestRec(ctx, v, seen, hook) {
|
|
220
|
+
if (hook !== undefined) {
|
|
221
|
+
const r = hook(v);
|
|
222
|
+
if (r !== FROM_GUEST_DEFAULT)
|
|
223
|
+
return r;
|
|
224
|
+
}
|
|
206
225
|
if (typeof v === 'function') {
|
|
207
226
|
return (...args) => {
|
|
208
227
|
const r = JS_Call(ctx, v, undefined, args.map(a => toGuest(ctx, a)));
|
|
@@ -218,7 +237,7 @@ function fromGuestRec(ctx, v, seen) {
|
|
|
218
237
|
return cached;
|
|
219
238
|
const o = v;
|
|
220
239
|
switch (JS_GetClassID(v)) {
|
|
221
|
-
case
|
|
240
|
+
case 46 /* JSClassID.PROMISE */:
|
|
222
241
|
return guestPromiseToHost(ctx, v);
|
|
223
242
|
case 10 /* JSClassID.DATE */:
|
|
224
243
|
return new Date(JS_GetAnyOpaque(v));
|
|
@@ -226,18 +245,18 @@ function fromGuestRec(ctx, v, seen) {
|
|
|
226
245
|
return guestErrorToHost(ctx, v);
|
|
227
246
|
case 18 /* JSClassID.REGEXP */:
|
|
228
247
|
return new RegExp(o.source, o.flags);
|
|
229
|
-
case
|
|
248
|
+
case 35 /* JSClassID.MAP */: {
|
|
230
249
|
const m = new Map();
|
|
231
250
|
seen.set(v, m);
|
|
232
251
|
for (const [k, val] of Map.prototype.entries.call(o))
|
|
233
|
-
m.set(fromGuestRec(ctx, k, seen), fromGuestRec(ctx, val, seen));
|
|
252
|
+
m.set(fromGuestRec(ctx, k, seen, hook), fromGuestRec(ctx, val, seen, hook));
|
|
234
253
|
return m;
|
|
235
254
|
}
|
|
236
|
-
case
|
|
255
|
+
case 36 /* JSClassID.SET */: {
|
|
237
256
|
const s = new Set();
|
|
238
257
|
seen.set(v, s);
|
|
239
258
|
for (const val of Set.prototype.values.call(o))
|
|
240
|
-
s.add(fromGuestRec(ctx, val, seen));
|
|
259
|
+
s.add(fromGuestRec(ctx, val, seen, hook));
|
|
241
260
|
return s;
|
|
242
261
|
}
|
|
243
262
|
case 19 /* JSClassID.ARRAY_BUFFER */:
|
|
@@ -253,7 +272,7 @@ function fromGuestRec(ctx, v, seen) {
|
|
|
253
272
|
const a = [];
|
|
254
273
|
seen.set(v, a);
|
|
255
274
|
for (let i = 0; i < o.length; i++)
|
|
256
|
-
a[i] = fromGuestRec(ctx, o[i], seen);
|
|
275
|
+
a[i] = fromGuestRec(ctx, o[i], seen, hook);
|
|
257
276
|
return a;
|
|
258
277
|
}
|
|
259
278
|
const r = {};
|
|
@@ -262,16 +281,29 @@ function fromGuestRec(ctx, v, seen) {
|
|
|
262
281
|
const d = Reflect.getOwnPropertyDescriptor(o, k);
|
|
263
282
|
if (!d.enumerable)
|
|
264
283
|
continue;
|
|
265
|
-
r[k] = fromGuestRec(ctx, o[k], seen);
|
|
284
|
+
r[k] = fromGuestRec(ctx, o[k], seen, hook);
|
|
266
285
|
}
|
|
267
286
|
return r;
|
|
268
287
|
}
|
|
269
288
|
/* a host promise that settles when the guest promise does */
|
|
270
289
|
export function guestPromiseToHost(ctx, promise) {
|
|
290
|
+
return guestPromiseToHostWith(ctx, promise, v => fromGuest(ctx, v), e => fromGuestRejection(ctx, e));
|
|
291
|
+
}
|
|
292
|
+
/* guestPromiseToHost with the conversions supplied by the caller */
|
|
293
|
+
export function guestPromiseToHostWith(ctx, promise, convert, convertRejection) {
|
|
271
294
|
return new Promise((resolve, reject) => {
|
|
272
295
|
const then = JS_GetPropertyStr(ctx, promise, 'then');
|
|
273
|
-
const
|
|
274
|
-
|
|
296
|
+
const settle = (fn, conv, v) => {
|
|
297
|
+
try {
|
|
298
|
+
fn(conv(v));
|
|
299
|
+
}
|
|
300
|
+
catch (e) {
|
|
301
|
+
reject(e);
|
|
302
|
+
}
|
|
303
|
+
return undefined;
|
|
304
|
+
};
|
|
305
|
+
const onFul = JS_NewCFunction(ctx, (_c, _t, argv) => settle(resolve, convert, argv[0]), 'resolve', 1);
|
|
306
|
+
const onRej = JS_NewCFunction(ctx, (_c, _t, argv) => settle(reject, convertRejection, argv[0]), 'reject', 1);
|
|
275
307
|
const r = JS_Call(ctx, then, promise, [onFul, onRej]);
|
|
276
308
|
if (JS_IsException(r))
|
|
277
309
|
reject(guestErrorToHost(ctx, JS_GetException(ctx)));
|
package/dist/embed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed.js","sourceRoot":"","sources":["../src/embed.ts"],"names":[],"mappings":"AAAA;;;;;;;;oEAQoE;AAEpE,OAAO,EAC0B,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAC1F,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EACrF,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EACrF,oBAAoB,EAAE,eAAe,EAAE,OAAO,GAC/C,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAWjE,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAS;IAC5C,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS;IACxG,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS;IACtE,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC;CAC5C,CAAC,CAAC;AAEH;2DAC2D;AAC3D,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACrE,IAAI,OAAO,CAAC,GAAG,CAAC,CAAW,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,IAAI,CAAC,GAAkB,CAAW,CAAC;QACnC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,UAAU;gBAAE,OAAO,KAAK,CAAC;YACnE,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,SAAS,CAAC,GAAc;IACtC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;IAClB,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,IAAwB,EAAE,CAAC;IAC/C,OAAO,eAAe,CAAC,EAAE,CAAC;QAAE,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,SAAS,CAAC,GAAc,EAAE,IAAY;IAC7C,OAAO,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAc;IACzC,MAAM,gBAAgB,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,GAAc,EAAE,GAAY;IAC3D,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,4BAAoB,EAAE,CAAC;QAC/D,MAAM,CAAC,GAAG,GAAU,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/C,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ;YAAG,GAAW,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC;QACnE,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACpF,GAAW,CAAC,UAAU,GAAG,GAAG,CAAC;IAC9B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,WAAW,GAAgC;IAC/C,SAAS,gCAAwB,EAAE,UAAU,iCAAyB,EAAE,cAAc,qCAA6B;IACnH,WAAW,kCAA0B,EAAE,SAAS,gCAAwB,EAAE,QAAQ,+BAAuB;CAC1G,CAAC;AAEF,+BAA+B;AAC/B,MAAM,UAAU,OAAO,CAAC,GAAc,EAAE,KAAc,EAAE,OAAuB,EAAE;IAC/E,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,UAAU,CAAC,GAAc,EAAE,CAAU,EAAE,IAAoB,EAAE,IAA0B;IAC9F,QAAQ,OAAO,CAAC,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC;QAAC,KAAK,SAAS,CAAC;QAAC,KAAK,QAAQ,CAAC;QAAC,KAAK,QAAQ,CAAC;QAAC,KAAK,QAAQ,CAAC;QAAC,KAAK,QAAQ;YAC1F,OAAO,CAAY,CAAC;QACtB,KAAK,UAAU;YACb,IAAI,YAAY,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAY,CAAC;YACzC,OAAO,YAAY,CAAC,GAAG,EAAE,CAAgC,EAAG,CAAc,CAAC,IAAI,EAAG,CAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACnH,CAAC;IACD,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,CAAC,GAAG,CAAQ,CAAC;IACnB,IAAI,YAAY,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAW,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,QAAQ,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,EAAE,EAAE,CAAQ,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9E,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,CAAC,YAAY,IAAI;QAAE,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACrE,IAAI,CAAC,YAAY,MAAM;QAAE,OAAO,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxF,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,mCAA2B,CAAC;QAC5D,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAQ,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC;YAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAClG,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAQ,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACf,KAAK,MAAM,GAAG,IAAI,CAAC;YAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,YAAY,WAAW;QAAE,OAAO,QAAQ,CAAC,qBAAqB,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,qBAAqB,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAC7F,MAAM,IAAI,GAAI,CAAS,CAAC,MAAM,CAAC,WAAW,CAAW,CAAC,CAAC,mCAAmC;QAC1F,OAAO,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAQ,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAE,CAAC;YAClD,IAAI,CAAC,CAAC,CAAC,UAAU;gBAAE,SAAS;YAC5B,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,IAAI,SAAS,CAAC,+BAA+B,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,QAAQ,iBAAiB;QACtG,qEAAqE,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,SAAS,CAAC,GAAc,EAAE,QAAgB,EAAE,IAAe;IAClE,MAAM,CAAC,GAAG,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,IAAiB,CAAC,CAAC;IAC/E,IAAI,cAAc,CAAC,CAAC,CAAC;QAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;0EAC0E;AAC1E,MAAM,UAAU,YAAY,CAAC,GAAc,EAAE,EAA+B,EAAE,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,cAAc,EACjF,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,OAAuB,EAAE;IACxE,OAAO,eAAe,CAAC,GAAG,EAAE,CAAC,IAAe,EAAE,QAAiB,EAAE,IAAe,EAAE,EAAE;QAClF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACzE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACrE,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AACnB,CAAC;AAED;wEACwE;AACxE,MAAM,UAAU,WAAW,CAAC,GAAc,EAAE,CAAuB,EAAE,OAAuB,EAAE;IAC5F,MAAM,KAAK,GAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpD,IAAI,cAAc,CAAC,OAAO,CAAC;QAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,CAAC,EAAW,EAAE,CAAU,EAAE,EAAE;QACzC,IAAI,CAAU,CAAC;QACf,IAAI,CAAC;YAAC,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,MAAM,CAAC,GAAc,EAAE,IAAY,EAAE,KAAc,EAAE,OAAuB,EAAE;IAC5F,IAAI,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAC5G,CAAC;AAED;;8DAE8D;AAC9D,MAAM,UAAU,SAAS,CAAC,GAAc,EAAE,KAAc;IACtD,OAAO,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,YAAY,CAAC,GAAc,EAAE,CAAU,EAAE,IAA0B;IAC1E,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;YAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,IAAI,cAAc,CAAC,CAAC,CAAC;gBAAE,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAChD,OAAO,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,CAAC,GAAG,CAAQ,CAAC;IACnB,QAAQ,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB;YACE,OAAO,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACpC;YACE,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAW,CAAC,CAAC;QAChD;YACE,OAAO,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAClC;YACE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACvC,2BAAkB,CAAC,CAAC,CAAC;YACnB,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YACtH,OAAO,CAAC,CAAC;QACX,CAAC;QACD,2BAAkB,CAAC,CAAC,CAAC;YACnB,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YACpF,OAAO,CAAC,CAAC;QACX,CAAC;QACD;YACE,qEAAqE;YACrE,OAAO,IAAI,UAAU,CAAC,CAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;IAC3D,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,qFAAqF;QACrF,MAAM,IAAI,GAAI,UAAkB,CAAE,CAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAQ,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAc,EAAE,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACxE,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,CAAC,GAAiC,EAAE,CAAC;IAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAE,CAAC;QAClD,IAAI,CAAC,CAAC,CAAC,UAAU;YAAE,SAAS;QAC5B,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,kBAAkB,CAAC,GAAc,EAAE,OAAgB;IACjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC5H,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACnI,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACtD,IAAI,cAAc,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3E,SAAS,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAc,EAAE,MAAe;IACzD,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,4BAAoB;QAAE,OAAO,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3G,OAAO,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAChC,CAAC","sourcesContent":["/* Embedding helpers: moving values between the host and the guest.\n *\n * Guest values are host values, but the sandbox requires that nothing the\n * guest can reach has a host intrinsic in its prototype chain. A host\n * object therefore cannot be handed to the guest as is: `toGuest` copies\n * plain data into guest objects, wraps host functions in guest functions,\n * and bridges host promises to guest promises. `fromGuest` does the\n * reverse so the host gets ordinary host objects (and can call guest\n * functions / await guest promises). Primitives cross unchanged. */\n\nimport {\n JSContext, JSValue, JSClassID, JS_IsException, JS_IsObject, JS_GetClassID, JS_GetAnyOpaque,\n JS_NewObject, JS_NewArrayFrom, JS_NewCFunction, JS_Call, JS_CallConstructor, JS_Throw,\n JS_GetException, JS_GetPropertyStr, JS_SetPropertyStr, JS_ToString, JS_NewErrorNative,\n JS_ExecutePendingJob, JS_IsJobPending, js_meta,\n} from './quickjs.ts';\nimport { JSErrorEnum } from './values.ts';\nimport { JS_NewPromiseCapability } from './builtins/promise.ts';\nimport { JS_NewDate } from './builtins/date.ts';\nimport { JS_NewArrayBufferCopy } from './builtins/typedarray.ts';\n\nexport interface ToGuestOptions {\n /** convert a host value the default rules reject (class instances); return\n * undefined to fall through to the TypeError */\n custom?: (ctx: JSContext, value: object) => JSValue | undefined;\n /** deep-convert the arguments guest code passes to a wrapped host function\n * into plain host values (default: pass the guest values through) */\n convertArgs?: boolean;\n}\n\nconst HOST_INTRINSIC_PROTOS = new Set<object>([\n Object.prototype, Array.prototype, Function.prototype, Error.prototype, Date.prototype, RegExp.prototype,\n Map.prototype, Set.prototype, Promise.prototype, ArrayBuffer.prototype,\n Object.getPrototypeOf(Uint8Array.prototype),\n]);\n\n/* true if the value is already safe to hand to the guest: engine metadata or\n a prototype chain that never reaches a host intrinsic */\nexport function isGuestValue(v: unknown): boolean {\n if (typeof v === 'function' || (typeof v === 'object' && v !== null)) {\n if (js_meta.has(v as object)) return true;\n let p: object | null = v as object;\n while (p !== null) {\n if (HOST_INTRINSIC_PROTOS.has(p) || p === globalThis) return false;\n p = Object.getPrototypeOf(p);\n }\n return true;\n }\n return true;\n}\n\n/* run the guest job queue (promise reactions) until it is empty */\nexport function drainJobs(ctx: JSContext): void {\n const rt = ctx.rt;\n const pctx = { ctx: null as JSContext | null };\n while (JS_IsJobPending(rt)) JS_ExecutePendingJob(rt, pctx);\n}\n\nfunction guestCtor(ctx: JSContext, name: string): JSValue {\n return JS_GetPropertyStr(ctx, ctx.global_obj, name);\n}\n\nfunction throwGuestException(ctx: JSContext): never {\n throw guestErrorToHost(ctx, JS_GetException(ctx));\n}\n\n/* convert a guest exception value into a host Error for host callers */\nexport function guestErrorToHost(ctx: JSContext, exc: JSValue): Error {\n if (JS_IsObject(exc) && JS_GetClassID(exc) === JSClassID.ERROR) {\n const o = exc as any;\n const err = new Error(String(o.message ?? ''));\n err.name = String(o.name ?? 'Error');\n if (typeof o.stack === 'string') (err as any).guestStack = o.stack;\n return err;\n }\n const err = new Error(typeof exc === 'string' ? exc : String(JS_ToString(ctx, exc)));\n (err as any).guestValue = exc;\n return err;\n}\n\nconst ERROR_KINDS: Record<string, JSErrorEnum> = {\n EvalError: JSErrorEnum.EVAL_ERROR, RangeError: JSErrorEnum.RANGE_ERROR, ReferenceError: JSErrorEnum.REFERENCE_ERROR,\n SyntaxError: JSErrorEnum.SYNTAX_ERROR, TypeError: JSErrorEnum.TYPE_ERROR, URIError: JSErrorEnum.URI_ERROR,\n};\n\n/* host value -> guest value */\nexport function toGuest(ctx: JSContext, value: unknown, opts: ToGuestOptions = {}): JSValue {\n return toGuestRec(ctx, value, opts, new Map());\n}\n\nfunction toGuestRec(ctx: JSContext, v: unknown, opts: ToGuestOptions, seen: Map<object, JSValue>): JSValue {\n switch (typeof v) {\n case 'undefined': case 'boolean': case 'number': case 'string': case 'bigint': case 'symbol':\n return v as JSValue;\n case 'function':\n if (isGuestValue(v)) return v as JSValue;\n return hostFunction(ctx, v as (...args: any[]) => unknown, (v as Function).name, (v as Function).length, opts);\n }\n if (v === null) return null;\n const o = v as any;\n if (isGuestValue(o)) return o;\n const cached = seen.get(o);\n if (cached !== undefined) return cached;\n const remember = (g: JSValue): JSValue => { seen.set(o, g); return g; };\n\n if (typeof o.then === 'function') return remember(hostPromise(ctx, o, opts));\n if (Array.isArray(o)) {\n const arr = JS_NewArrayFrom(ctx, []) as any;\n seen.set(o, arr);\n for (let i = 0; i < o.length; i++) arr[i] = toGuestRec(ctx, o[i], opts, seen);\n return arr;\n }\n if (o instanceof Date) return remember(JS_NewDate(ctx, o.getTime()));\n if (o instanceof RegExp) return remember(construct(ctx, 'RegExp', [o.source, o.flags]));\n if (o instanceof Error) {\n const kind = ERROR_KINDS[o.name] ?? JSErrorEnum.PLAIN_ERROR;\n const err = JS_NewErrorNative(ctx, kind, String(o.message));\n return remember(err);\n }\n if (o instanceof Map) {\n const m = construct(ctx, 'Map', []) as any;\n seen.set(o, m);\n for (const [k, val] of o) m.set(toGuestRec(ctx, k, opts, seen), toGuestRec(ctx, val, opts, seen));\n return m;\n }\n if (o instanceof Set) {\n const s = construct(ctx, 'Set', []) as any;\n seen.set(o, s);\n for (const val of o) s.add(toGuestRec(ctx, val, opts, seen));\n return s;\n }\n if (o instanceof ArrayBuffer) return remember(JS_NewArrayBufferCopy(ctx, new Uint8Array(o)));\n if (ArrayBuffer.isView(o)) {\n const buf = JS_NewArrayBufferCopy(ctx, new Uint8Array(o.buffer, o.byteOffset, o.byteLength));\n const name = (o as any)[Symbol.toStringTag] as string; /* \"Uint8Array\", \"DataView\", ... */\n return remember(construct(ctx, name, [buf]));\n }\n const proto = Object.getPrototypeOf(o);\n if (proto === Object.prototype || proto === null) {\n const g = JS_NewObject(ctx) as any;\n seen.set(o, g);\n for (const k of Reflect.ownKeys(o)) {\n const d = Reflect.getOwnPropertyDescriptor(o, k)!;\n if (!d.enumerable) continue;\n g[k] = toGuestRec(ctx, o[k], opts, seen);\n }\n return g;\n }\n if (opts.custom) {\n const r = opts.custom(ctx, o);\n if (r !== undefined) return remember(r);\n }\n throw new TypeError(`toGuest: cannot pass a host ${proto?.constructor?.name ?? 'object'} to the guest; ` +\n 'pass plain data, functions, promises, or provide a custom converter');\n}\n\nfunction construct(ctx: JSContext, ctorName: string, args: unknown[]): JSValue {\n const r = JS_CallConstructor(ctx, guestCtor(ctx, ctorName), args as JSValue[]);\n if (JS_IsException(r)) throwGuestException(ctx);\n return r;\n}\n\n/* a guest function that calls the host function. Host exceptions become\n guest errors; host return values (including promises) are converted. */\nexport function hostFunction(ctx: JSContext, fn: (...args: any[]) => unknown, name = fn.name || 'hostFunction',\n length = fn.length, opts: ToGuestOptions = {}): JSValue {\n return JS_NewCFunction(ctx, (ctx2: JSContext, this_val: JSValue, argv: JSValue[]) => {\n try {\n const args = opts.convertArgs ? argv.map(a => fromGuest(ctx2, a)) : argv;\n const self = opts.convertArgs ? fromGuest(ctx2, this_val) : this_val;\n return toGuest(ctx2, fn.apply(self, args), opts);\n } catch (e) {\n return JS_Throw(ctx2, toGuest(ctx2, e, opts));\n }\n }, name, length);\n}\n\n/* a guest promise that settles when the host promise does; guest jobs are\n run after the settlement so `await` continuations execute promptly */\nexport function hostPromise(ctx: JSContext, p: PromiseLike<unknown>, opts: ToGuestOptions = {}): JSValue {\n const funcs: [JSValue, JSValue] = [undefined, undefined];\n const promise = JS_NewPromiseCapability(ctx, funcs);\n if (JS_IsException(promise)) throwGuestException(ctx);\n const settle = (fn: JSValue, v: unknown) => {\n let g: JSValue;\n try { g = toGuest(ctx, v, opts); } catch (e) { fn = funcs[1]; g = toGuest(ctx, e, opts); }\n JS_Call(ctx, fn, undefined, [g]);\n drainJobs(ctx);\n };\n p.then(v => settle(funcs[0], v), e => settle(funcs[1], e));\n return promise;\n}\n\n/* define a global variable in the guest */\nexport function expose(ctx: JSContext, name: string, value: unknown, opts: ToGuestOptions = {}): void {\n if (JS_SetPropertyStr(ctx, ctx.global_obj, name, toGuest(ctx, value, opts)) < 0) throwGuestException(ctx);\n}\n\n/* guest value -> plain host value: objects and arrays are copied, guest\n functions become host functions (that call into the guest), guest\n promises become host promises, errors become host Errors */\nexport function fromGuest(ctx: JSContext, value: JSValue): unknown {\n return fromGuestRec(ctx, value, new Map());\n}\n\nfunction fromGuestRec(ctx: JSContext, v: JSValue, seen: Map<object, unknown>): unknown {\n if (typeof v === 'function') {\n return (...args: unknown[]) => {\n const r = JS_Call(ctx, v, undefined, args.map(a => toGuest(ctx, a)));\n if (JS_IsException(r)) throwGuestException(ctx);\n return fromGuest(ctx, r);\n };\n }\n if (typeof v !== 'object' || v === null) return v;\n const cached = seen.get(v);\n if (cached !== undefined) return cached;\n const o = v as any;\n switch (JS_GetClassID(v)) {\n case JSClassID.PROMISE:\n return guestPromiseToHost(ctx, v);\n case JSClassID.DATE:\n return new Date(JS_GetAnyOpaque(v) as number);\n case JSClassID.ERROR:\n return guestErrorToHost(ctx, v);\n case JSClassID.REGEXP:\n return new RegExp(o.source, o.flags);\n case JSClassID.MAP: {\n const m = new Map(); seen.set(v, m);\n for (const [k, val] of Map.prototype.entries.call(o)) m.set(fromGuestRec(ctx, k, seen), fromGuestRec(ctx, val, seen));\n return m;\n }\n case JSClassID.SET: {\n const s = new Set(); seen.set(v, s);\n for (const val of Set.prototype.values.call(o)) s.add(fromGuestRec(ctx, val, seen));\n return s;\n }\n case JSClassID.ARRAY_BUFFER:\n /* the guest object is the host ArrayBuffer re-prototyped: copy it */\n return new Uint8Array(o as ArrayBuffer).slice().buffer;\n }\n if (ArrayBuffer.isView(o)) {\n /* guest typed arrays are host views re-prototyped: copy with the host constructor */\n const Ctor = (globalThis as any)[(o as any)[Symbol.toStringTag]];\n return Ctor ? new Ctor(o as any) : new Uint8Array(o as any);\n }\n if (Array.isArray(o)) {\n const a: unknown[] = []; seen.set(v, a);\n for (let i = 0; i < o.length; i++) a[i] = fromGuestRec(ctx, o[i], seen);\n return a;\n }\n const r: Record<PropertyKey, unknown> = {}; seen.set(v, r);\n for (const k of Reflect.ownKeys(o)) {\n const d = Reflect.getOwnPropertyDescriptor(o, k)!;\n if (!d.enumerable) continue;\n r[k] = fromGuestRec(ctx, o[k], seen);\n }\n return r;\n}\n\n/* a host promise that settles when the guest promise does */\nexport function guestPromiseToHost(ctx: JSContext, promise: JSValue): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const then = JS_GetPropertyStr(ctx, promise, 'then');\n const onFul = JS_NewCFunction(ctx, (_c, _t, argv) => { resolve(fromGuest(ctx, argv[0])); return undefined; }, 'resolve', 1);\n const onRej = JS_NewCFunction(ctx, (_c, _t, argv) => { reject(fromGuestRejection(ctx, argv[0])); return undefined; }, 'reject', 1);\n const r = JS_Call(ctx, then, promise, [onFul, onRej]);\n if (JS_IsException(r)) reject(guestErrorToHost(ctx, JS_GetException(ctx)));\n drainJobs(ctx);\n });\n}\n\nfunction fromGuestRejection(ctx: JSContext, reason: JSValue): unknown {\n if (JS_IsObject(reason) && JS_GetClassID(reason) === JSClassID.ERROR) return guestErrorToHost(ctx, reason);\n return fromGuest(ctx, reason);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"embed.js","sourceRoot":"","sources":["../src/embed.ts"],"names":[],"mappings":"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","sourcesContent":["/* Embedding helpers: moving values between the host and the guest.\n *\n * Guest values are host values, but the sandbox requires that nothing the\n * guest can reach has a host intrinsic in its prototype chain. A host\n * object therefore cannot be handed to the guest as is: `toGuest` copies\n * plain data into guest objects, wraps host functions in guest functions,\n * and bridges host promises to guest promises. `fromGuest` does the\n * reverse so the host gets ordinary host objects (and can call guest\n * functions / await guest promises). Primitives cross unchanged. */\n\nimport {\n JSContext, JSValue, JSClassID, JS_IsException, JS_IsObject, JS_GetClassID, JS_GetAnyOpaque,\n JS_NewObject, JS_NewArrayFrom, JS_NewCFunction, JS_Call, JS_CallConstructor, JS_Throw,\n JS_GetException, JS_GetPropertyStr, JS_SetPropertyStr, JS_ToString, JS_NewErrorNative,\n JS_ExecutePendingJob, JS_IsJobPending, js_meta,\n} from './quickjs.ts';\nimport { JSErrorEnum } from './values.ts';\nimport { JS_NewPromiseCapability } from './builtins/promise.ts';\nimport { JS_NewDate } from './builtins/date.ts';\nimport { JS_NewArrayBufferCopy } from './builtins/typedarray.ts';\n\nexport interface ToGuestOptions {\n /** convert a host value the default rules reject (class instances); return\n * undefined to fall through to the TypeError */\n custom?: (ctx: JSContext, value: object) => JSValue | undefined;\n /** deep-convert the arguments guest code passes to a wrapped host function\n * into plain host values (default: pass the guest values through) */\n convertArgs?: boolean;\n}\n\nconst HOST_INTRINSIC_PROTOS = new Set<object>([\n Object.prototype, Array.prototype, Function.prototype, Error.prototype, Date.prototype, RegExp.prototype,\n Map.prototype, Set.prototype, Promise.prototype, ArrayBuffer.prototype,\n Object.getPrototypeOf(Uint8Array.prototype),\n]);\n\n/* true if the value is already safe to hand to the guest: engine metadata or\n a prototype chain that never reaches a host intrinsic */\nexport function isGuestValue(v: unknown): boolean {\n if (typeof v === 'function' || (typeof v === 'object' && v !== null)) {\n if (js_meta.has(v as object)) return true;\n let p: object | null = v as object;\n while (p !== null) {\n if (HOST_INTRINSIC_PROTOS.has(p) || p === globalThis) return false;\n p = Object.getPrototypeOf(p);\n }\n return true;\n }\n return true;\n}\n\n/* run the guest job queue (promise reactions) until it is empty */\nexport function drainJobs(ctx: JSContext): void {\n const rt = ctx.rt;\n const pctx = { ctx: null as JSContext | null };\n while (JS_IsJobPending(rt)) JS_ExecutePendingJob(rt, pctx);\n}\n\nfunction guestCtor(ctx: JSContext, name: string): JSValue {\n return JS_GetPropertyStr(ctx, ctx.global_obj, name);\n}\n\nfunction throwGuestException(ctx: JSContext): never {\n throw guestErrorToHost(ctx, JS_GetException(ctx));\n}\n\n/* convert a guest exception value into a host Error for host callers */\nexport function guestErrorToHost(ctx: JSContext, exc: JSValue): Error {\n if (JS_IsObject(exc) && JS_GetClassID(exc) === JSClassID.ERROR) {\n const o = exc as any;\n const err = new Error(String(o.message ?? ''));\n err.name = String(o.name ?? 'Error');\n if (typeof o.stack === 'string') (err as any).guestStack = o.stack;\n return err;\n }\n const err = new Error(typeof exc === 'string' ? exc : String(JS_ToString(ctx, exc)));\n (err as any).guestValue = exc;\n return err;\n}\n\nconst ERROR_KINDS: Record<string, JSErrorEnum> = {\n EvalError: JSErrorEnum.EVAL_ERROR, RangeError: JSErrorEnum.RANGE_ERROR, ReferenceError: JSErrorEnum.REFERENCE_ERROR,\n SyntaxError: JSErrorEnum.SYNTAX_ERROR, TypeError: JSErrorEnum.TYPE_ERROR, URIError: JSErrorEnum.URI_ERROR,\n};\n\n/* host value -> guest value */\nexport function toGuest(ctx: JSContext, value: unknown, opts: ToGuestOptions = {}): JSValue {\n return toGuestRec(ctx, value, opts, new Map());\n}\n\nfunction toGuestRec(ctx: JSContext, v: unknown, opts: ToGuestOptions, seen: Map<object, JSValue>): JSValue {\n switch (typeof v) {\n case 'undefined': case 'boolean': case 'number': case 'string': case 'bigint': case 'symbol':\n return v as JSValue;\n case 'function':\n if (isGuestValue(v)) return v as JSValue;\n return hostFunction(ctx, v as (...args: any[]) => unknown, (v as Function).name, (v as Function).length, opts);\n }\n if (v === null) return null;\n const o = v as any;\n if (isGuestValue(o)) return o;\n const cached = seen.get(o);\n if (cached !== undefined) return cached;\n const remember = (g: JSValue): JSValue => { seen.set(o, g); return g; };\n\n if (typeof o.then === 'function') return remember(hostPromise(ctx, o, opts));\n if (Array.isArray(o)) {\n const arr = JS_NewArrayFrom(ctx, []) as any;\n seen.set(o, arr);\n for (let i = 0; i < o.length; i++) arr[i] = toGuestRec(ctx, o[i], opts, seen);\n return arr;\n }\n if (o instanceof Date) return remember(JS_NewDate(ctx, o.getTime()));\n if (o instanceof RegExp) return remember(construct(ctx, 'RegExp', [o.source, o.flags]));\n if (o instanceof Error) {\n const kind = ERROR_KINDS[o.name] ?? JSErrorEnum.PLAIN_ERROR;\n const err = JS_NewErrorNative(ctx, kind, String(o.message));\n return remember(err);\n }\n if (o instanceof Map) {\n const m = construct(ctx, 'Map', []) as any;\n seen.set(o, m);\n for (const [k, val] of o) m.set(toGuestRec(ctx, k, opts, seen), toGuestRec(ctx, val, opts, seen));\n return m;\n }\n if (o instanceof Set) {\n const s = construct(ctx, 'Set', []) as any;\n seen.set(o, s);\n for (const val of o) s.add(toGuestRec(ctx, val, opts, seen));\n return s;\n }\n if (o instanceof ArrayBuffer) return remember(JS_NewArrayBufferCopy(ctx, new Uint8Array(o)));\n if (ArrayBuffer.isView(o)) {\n const buf = JS_NewArrayBufferCopy(ctx, new Uint8Array(o.buffer, o.byteOffset, o.byteLength));\n const name = (o as any)[Symbol.toStringTag] as string; /* \"Uint8Array\", \"DataView\", ... */\n return remember(construct(ctx, name, [buf]));\n }\n const proto = Object.getPrototypeOf(o);\n if (proto === Object.prototype || proto === null) {\n const g = JS_NewObject(ctx) as any;\n seen.set(o, g);\n for (const k of Reflect.ownKeys(o)) {\n const d = Reflect.getOwnPropertyDescriptor(o, k)!;\n if (!d.enumerable) continue;\n g[k] = toGuestRec(ctx, o[k], opts, seen);\n }\n return g;\n }\n if (opts.custom) {\n const r = opts.custom(ctx, o);\n if (r !== undefined) return remember(r);\n }\n throw new TypeError(`toGuest: cannot pass a host ${proto?.constructor?.name ?? 'object'} to the guest; ` +\n 'pass plain data, functions, promises, or provide a custom converter');\n}\n\nfunction construct(ctx: JSContext, ctorName: string, args: unknown[]): JSValue {\n const r = JS_CallConstructor(ctx, guestCtor(ctx, ctorName), args as JSValue[]);\n if (JS_IsException(r)) throwGuestException(ctx);\n return r;\n}\n\n/* a guest function that calls the host function. Host exceptions become\n guest errors; host return values (including promises) are converted. */\nexport function hostFunction(ctx: JSContext, fn: (...args: any[]) => unknown, name = fn.name || 'hostFunction',\n length = fn.length, opts: ToGuestOptions = {}): JSValue {\n return JS_NewCFunction(ctx, (ctx2: JSContext, this_val: JSValue, argv: JSValue[]) => {\n try {\n const args = opts.convertArgs ? argv.map(a => fromGuest(ctx2, a)) : argv;\n const self = opts.convertArgs ? fromGuest(ctx2, this_val) : this_val;\n return toGuest(ctx2, fn.apply(self, args), opts);\n } catch (e) {\n return JS_Throw(ctx2, toGuest(ctx2, e, opts));\n }\n }, name, length);\n}\n\n/* a guest promise that settles when the host promise does; guest jobs are\n run after the settlement so `await` continuations execute promptly */\nexport function hostPromise(ctx: JSContext, p: PromiseLike<unknown>, opts: ToGuestOptions = {}): JSValue {\n return hostPromiseWith(ctx, p, v => toGuest(ctx, v, opts), e => toGuest(ctx, e, opts));\n}\n\n/* hostPromise with the conversions supplied by the caller (the membrane\n converts results live); `reject` converts a rejection reason or an\n exception thrown by `resolve` */\nexport function hostPromiseWith(ctx: JSContext, p: PromiseLike<unknown>, resolve: (v: unknown) => JSValue,\n reject: (e: unknown) => JSValue): JSValue {\n const funcs: [JSValue, JSValue] = [undefined, undefined];\n const promise = JS_NewPromiseCapability(ctx, funcs);\n if (JS_IsException(promise)) throwGuestException(ctx);\n const settle = (ok: boolean, v: unknown) => {\n let fn = ok ? funcs[0] : funcs[1];\n let g: JSValue;\n try { g = ok ? resolve(v) : reject(v); } catch (e) { fn = funcs[1]; g = reject(e); }\n JS_Call(ctx, fn, undefined, [g]);\n drainJobs(ctx);\n };\n p.then(v => settle(true, v), e => settle(false, e));\n return promise;\n}\n\n/* define a global variable in the guest */\nexport function expose(ctx: JSContext, name: string, value: unknown, opts: ToGuestOptions = {}): void {\n if (JS_SetPropertyStr(ctx, ctx.global_obj, name, toGuest(ctx, value, opts)) < 0) throwGuestException(ctx);\n}\n\n/* guest value -> plain host value: objects and arrays are copied, guest\n functions become host functions (that call into the guest), guest\n promises become host promises, errors become host Errors */\nexport function fromGuest(ctx: JSContext, value: JSValue): unknown {\n return fromGuestRec(ctx, value, new Map(), undefined);\n}\n\n/* returned by a fromGuestWith hook to let the default conversion handle a value */\nexport const FROM_GUEST_DEFAULT: unique symbol = Symbol('fromGuest default');\nexport type FromGuestHook = (v: JSValue) => unknown;\n\n/* fromGuest with a hook that is offered every value first, at every depth\n (the membrane unwraps its proxies and wraps guest functions this way) */\nexport function fromGuestWith(ctx: JSContext, value: JSValue, hook: FromGuestHook): unknown {\n return fromGuestRec(ctx, value, new Map(), hook);\n}\n\nfunction fromGuestRec(ctx: JSContext, v: JSValue, seen: Map<object, unknown>, hook: FromGuestHook | undefined): unknown {\n if (hook !== undefined) {\n const r = hook(v);\n if (r !== FROM_GUEST_DEFAULT) return r;\n }\n if (typeof v === 'function') {\n return (...args: unknown[]) => {\n const r = JS_Call(ctx, v, undefined, args.map(a => toGuest(ctx, a)));\n if (JS_IsException(r)) throwGuestException(ctx);\n return fromGuest(ctx, r);\n };\n }\n if (typeof v !== 'object' || v === null) return v;\n const cached = seen.get(v);\n if (cached !== undefined) return cached;\n const o = v as any;\n switch (JS_GetClassID(v)) {\n case JSClassID.PROMISE:\n return guestPromiseToHost(ctx, v);\n case JSClassID.DATE:\n return new Date(JS_GetAnyOpaque(v) as number);\n case JSClassID.ERROR:\n return guestErrorToHost(ctx, v);\n case JSClassID.REGEXP:\n return new RegExp(o.source, o.flags);\n case JSClassID.MAP: {\n const m = new Map(); seen.set(v, m);\n for (const [k, val] of Map.prototype.entries.call(o)) m.set(fromGuestRec(ctx, k, seen, hook), fromGuestRec(ctx, val, seen, hook));\n return m;\n }\n case JSClassID.SET: {\n const s = new Set(); seen.set(v, s);\n for (const val of Set.prototype.values.call(o)) s.add(fromGuestRec(ctx, val, seen, hook));\n return s;\n }\n case JSClassID.ARRAY_BUFFER:\n /* the guest object is the host ArrayBuffer re-prototyped: copy it */\n return new Uint8Array(o as ArrayBuffer).slice().buffer;\n }\n if (ArrayBuffer.isView(o)) {\n /* guest typed arrays are host views re-prototyped: copy with the host constructor */\n const Ctor = (globalThis as any)[(o as any)[Symbol.toStringTag]];\n return Ctor ? new Ctor(o as any) : new Uint8Array(o as any);\n }\n if (Array.isArray(o)) {\n const a: unknown[] = []; seen.set(v, a);\n for (let i = 0; i < o.length; i++) a[i] = fromGuestRec(ctx, o[i], seen, hook);\n return a;\n }\n const r: Record<PropertyKey, unknown> = {}; seen.set(v, r);\n for (const k of Reflect.ownKeys(o)) {\n const d = Reflect.getOwnPropertyDescriptor(o, k)!;\n if (!d.enumerable) continue;\n r[k] = fromGuestRec(ctx, o[k], seen, hook);\n }\n return r;\n}\n\n/* a host promise that settles when the guest promise does */\nexport function guestPromiseToHost(ctx: JSContext, promise: JSValue): Promise<unknown> {\n return guestPromiseToHostWith(ctx, promise, v => fromGuest(ctx, v), e => fromGuestRejection(ctx, e));\n}\n\n/* guestPromiseToHost with the conversions supplied by the caller */\nexport function guestPromiseToHostWith(ctx: JSContext, promise: JSValue, convert: (v: JSValue) => unknown,\n convertRejection: (e: JSValue) => unknown): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const then = JS_GetPropertyStr(ctx, promise, 'then');\n const settle = (fn: (x: unknown) => void, conv: (v: JSValue) => unknown, v: JSValue): JSValue => {\n try { fn(conv(v)); } catch (e) { reject(e); }\n return undefined;\n };\n const onFul = JS_NewCFunction(ctx, (_c, _t, argv) => settle(resolve, convert, argv[0]), 'resolve', 1);\n const onRej = JS_NewCFunction(ctx, (_c, _t, argv) => settle(reject, convertRejection, argv[0]), 'reject', 1);\n const r = JS_Call(ctx, then, promise, [onFul, onRej]);\n if (JS_IsException(r)) reject(guestErrorToHost(ctx, JS_GetException(ctx)));\n drainJobs(ctx);\n });\n}\n\nfunction fromGuestRejection(ctx: JSContext, reason: JSValue): unknown {\n if (JS_IsObject(reason) && JS_GetClassID(reason) === JSClassID.ERROR) return guestErrorToHost(ctx, reason);\n return fromGuest(ctx, reason);\n}\n"]}
|
package/dist/interpreter.js
CHANGED
|
@@ -18,7 +18,7 @@ export const GEN_MAGIC_THROW = 2;
|
|
|
18
18
|
--------------------------------------------------------------------- */
|
|
19
19
|
export function js_class_has_bytecode(class_id) {
|
|
20
20
|
return class_id === 13 /* JSClassID.BYTECODE_FUNCTION */ || class_id === 16 /* JSClassID.GENERATOR_FUNCTION */ ||
|
|
21
|
-
class_id ===
|
|
21
|
+
class_id === 49 /* JSClassID.ASYNC_FUNCTION */ || class_id === 53 /* JSClassID.ASYNC_GENERATOR_FUNCTION */;
|
|
22
22
|
}
|
|
23
23
|
export function get_var_ref(ctx, sf, var_idx, is_arg) {
|
|
24
24
|
for (const vr of sf.var_refs) {
|
|
@@ -54,8 +54,8 @@ export function close_lexical_var(ctx, sf, var_idx) {
|
|
|
54
54
|
function func_kind_to_class_id(kind) {
|
|
55
55
|
switch (kind) {
|
|
56
56
|
case 1 /* JSFunctionKind.GENERATOR */: return 16 /* JSClassID.GENERATOR_FUNCTION */;
|
|
57
|
-
case 2 /* JSFunctionKind.ASYNC */: return
|
|
58
|
-
case 3 /* JSFunctionKind.ASYNC_GENERATOR */: return
|
|
57
|
+
case 2 /* JSFunctionKind.ASYNC */: return 49 /* JSClassID.ASYNC_FUNCTION */;
|
|
58
|
+
case 3 /* JSFunctionKind.ASYNC_GENERATOR */: return 53 /* JSClassID.ASYNC_GENERATOR_FUNCTION */;
|
|
59
59
|
default: return 13 /* JSClassID.BYTECODE_FUNCTION */;
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -139,7 +139,7 @@ export function js_closure(ctx, b, cur_var_refs, sf) {
|
|
|
139
139
|
js_function_set_properties(ctx, func_obj, name_atom, b.defined_arg_count);
|
|
140
140
|
if (b.func_kind & 1 /* JSFunctionKind.GENERATOR */) {
|
|
141
141
|
/* generators have a prototype field which is used as prototype for the generator object */
|
|
142
|
-
const proto_class_id = (b.func_kind === 3 /* JSFunctionKind.ASYNC_GENERATOR */) ?
|
|
142
|
+
const proto_class_id = (b.func_kind === 3 /* JSFunctionKind.ASYNC_GENERATOR */) ? 54 /* JSClassID.ASYNC_GENERATOR */ : 44 /* JSClassID.GENERATOR */;
|
|
143
143
|
const gproto = JS_NewObjectProto(ctx, ctx.class_proto[proto_class_id]);
|
|
144
144
|
if (JS_IsException(gproto))
|
|
145
145
|
return JS_EXCEPTION;
|
|
@@ -3207,7 +3207,7 @@ function free_generator_stack(ctx, s) {
|
|
|
3207
3207
|
s.state = 4 /* JSGeneratorState.COMPLETED */;
|
|
3208
3208
|
}
|
|
3209
3209
|
export function js_generator_next(ctx, this_val, argv, pdone, magic) {
|
|
3210
|
-
const s = JS_GetOpaque(this_val,
|
|
3210
|
+
const s = JS_GetOpaque(this_val, 44 /* JSClassID.GENERATOR */);
|
|
3211
3211
|
pdone.done = 1;
|
|
3212
3212
|
if (!s)
|
|
3213
3213
|
return JS_ThrowTypeError(ctx, 'not a generator');
|
|
@@ -3287,7 +3287,7 @@ export function js_generator_function_call(ctx, func_obj, this_obj, argv, flags)
|
|
|
3287
3287
|
free_generator_stack(ctx, s);
|
|
3288
3288
|
return JS_EXCEPTION;
|
|
3289
3289
|
}
|
|
3290
|
-
const obj = js_create_from_ctor(ctx, func_obj,
|
|
3290
|
+
const obj = js_create_from_ctor(ctx, func_obj, 44 /* JSClassID.GENERATOR */);
|
|
3291
3291
|
if (JS_IsException(obj)) {
|
|
3292
3292
|
free_generator_stack(ctx, s);
|
|
3293
3293
|
return JS_EXCEPTION;
|
|
@@ -3315,7 +3315,7 @@ function js_async_function_resolve_create(ctx, s) {
|
|
|
3315
3315
|
js_async_function_resolve_call(ctx, s, is_reject, args.length > 0 ? args[0] : undefined);
|
|
3316
3316
|
return undefined;
|
|
3317
3317
|
};
|
|
3318
|
-
const f = js_new_host_function(ctx, impl, false, '', 1, ctx.function_proto, (
|
|
3318
|
+
const f = js_new_host_function(ctx, impl, false, '', 1, ctx.function_proto, (50 /* JSClassID.ASYNC_FUNCTION_RESOLVE */ + i));
|
|
3319
3319
|
js_meta.get(f).u = s;
|
|
3320
3320
|
funcs[i] = f;
|
|
3321
3321
|
}
|
|
@@ -3558,7 +3558,7 @@ function js_async_generator_resume_next(ctx, s) {
|
|
|
3558
3558
|
}
|
|
3559
3559
|
function js_async_generator_resolve_function(ctx, this_obj, argv, magic, func_data) {
|
|
3560
3560
|
const is_reject = (magic & 1) !== 0;
|
|
3561
|
-
const s = JS_GetOpaque(func_data[0],
|
|
3561
|
+
const s = JS_GetOpaque(func_data[0], 54 /* JSClassID.ASYNC_GENERATOR */);
|
|
3562
3562
|
const arg = argv[0];
|
|
3563
3563
|
if (!s)
|
|
3564
3564
|
return undefined;
|
|
@@ -3570,8 +3570,9 @@ function js_async_generator_resolve_function(ctx, this_obj, argv, magic, func_da
|
|
|
3570
3570
|
else
|
|
3571
3571
|
js_async_generator_resolve(ctx, s, arg, true);
|
|
3572
3572
|
}
|
|
3573
|
-
else {
|
|
3574
|
-
/* restart function execution after await()
|
|
3573
|
+
else if (s.state === 3 /* JSAsyncGeneratorState.EXECUTING */) {
|
|
3574
|
+
/* restart function execution after await() (only while it is executing:
|
|
3575
|
+
QuickJS e7b9f21) */
|
|
3575
3576
|
const fs = s.func_state;
|
|
3576
3577
|
fs.throw_flag = is_reject;
|
|
3577
3578
|
if (is_reject) {
|
|
@@ -3587,7 +3588,7 @@ function js_async_generator_resolve_function(ctx, this_obj, argv, magic, func_da
|
|
|
3587
3588
|
}
|
|
3588
3589
|
/* magic = GEN_MAGIC_x */
|
|
3589
3590
|
export function js_async_generator_next(ctx, this_val, argv, magic) {
|
|
3590
|
-
const s = JS_GetOpaque(this_val,
|
|
3591
|
+
const s = JS_GetOpaque(this_val, 54 /* JSClassID.ASYNC_GENERATOR */);
|
|
3591
3592
|
const resolving_funcs = [undefined, undefined];
|
|
3592
3593
|
const promise = JS_NewPromiseCapability(ctx, resolving_funcs);
|
|
3593
3594
|
if (JS_IsException(promise))
|
|
@@ -3612,7 +3613,7 @@ export function js_async_generator_function_call(ctx, func_obj, this_obj, argv,
|
|
|
3612
3613
|
const func_ret = async_func_resume(ctx, s.func_state);
|
|
3613
3614
|
if (JS_IsException(func_ret))
|
|
3614
3615
|
return JS_EXCEPTION;
|
|
3615
|
-
const obj = js_create_from_ctor(ctx, func_obj,
|
|
3616
|
+
const obj = js_create_from_ctor(ctx, func_obj, 54 /* JSClassID.ASYNC_GENERATOR */);
|
|
3616
3617
|
if (JS_IsException(obj))
|
|
3617
3618
|
return JS_EXCEPTION;
|
|
3618
3619
|
s.generator = obj;
|
|
@@ -3640,7 +3641,7 @@ export function JS_CreateAsyncFromSyncIterator(ctx, sync_iter) {
|
|
|
3640
3641
|
const next_method = JS_GetProperty(ctx, sync_iter, JS_ATOM_next);
|
|
3641
3642
|
if (JS_IsException(next_method))
|
|
3642
3643
|
return JS_EXCEPTION;
|
|
3643
|
-
const async_iter = JS_NewObjectClass(ctx,
|
|
3644
|
+
const async_iter = JS_NewObjectClass(ctx, 52 /* JSClassID.ASYNC_FROM_SYNC_ITERATOR */);
|
|
3644
3645
|
if (JS_IsException(async_iter))
|
|
3645
3646
|
return async_iter;
|
|
3646
3647
|
JS_SetOpaque(async_iter, new JSAsyncFromSyncIteratorData(sync_iter, next_method));
|
|
@@ -3671,7 +3672,7 @@ function js_async_from_sync_iterator_next(ctx, this_val, argv, magic) {
|
|
|
3671
3672
|
JS_Call(ctx, resolving_funcs[1], undefined, [err]);
|
|
3672
3673
|
return promise;
|
|
3673
3674
|
};
|
|
3674
|
-
const s = JS_GetOpaque(this_val,
|
|
3675
|
+
const s = JS_GetOpaque(this_val, 52 /* JSClassID.ASYNC_FROM_SYNC_ITERATOR */);
|
|
3675
3676
|
if (!s) {
|
|
3676
3677
|
JS_ThrowTypeError(ctx, 'not an Async-from-Sync Iterator');
|
|
3677
3678
|
return reject();
|