vercel 31.0.4 → 31.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +44799 -51753
- package/package.json +6 -6
- package/dist/bridge.js +0 -1010
- package/dist/events.js +0 -977
- package/dist/setup-node-sandbox.js +0 -469
- package/dist/setup-sandbox.js +0 -487
package/dist/bridge.js
DELETED
@@ -1,1010 +0,0 @@
|
|
1
|
-
'use strict';
|
2
|
-
|
3
|
-
/**
|
4
|
-
* __ ___ ____ _ _ ___ _ _ ____
|
5
|
-
* \ \ / / \ | _ \| \ | |_ _| \ | |/ ___|
|
6
|
-
* \ \ /\ / / _ \ | |_) | \| || || \| | | _
|
7
|
-
* \ V V / ___ \| _ <| |\ || || |\ | |_| |
|
8
|
-
* \_/\_/_/ \_\_| \_\_| \_|___|_| \_|\____|
|
9
|
-
*
|
10
|
-
* This file is critical for vm2. It implements the bridge between the host and the sandbox.
|
11
|
-
* If you do not know exactly what you are doing, you should NOT edit this file.
|
12
|
-
*
|
13
|
-
* The file is loaded in the host and sandbox to handle objects in both directions.
|
14
|
-
* This is done to ensure that RangeErrors are from the correct context.
|
15
|
-
* The boundary between the sandbox and host might throw RangeErrors from both contexts.
|
16
|
-
* Therefore, thisFromOther and friends can handle objects from both domains.
|
17
|
-
*
|
18
|
-
* Method parameters have comments to tell from which context they came.
|
19
|
-
*
|
20
|
-
*/
|
21
|
-
|
22
|
-
const globalsList = [
|
23
|
-
'Number',
|
24
|
-
'String',
|
25
|
-
'Boolean',
|
26
|
-
'Date',
|
27
|
-
'RegExp',
|
28
|
-
'Map',
|
29
|
-
'WeakMap',
|
30
|
-
'Set',
|
31
|
-
'WeakSet',
|
32
|
-
'Promise',
|
33
|
-
'Function'
|
34
|
-
];
|
35
|
-
|
36
|
-
const errorsList = [
|
37
|
-
'RangeError',
|
38
|
-
'ReferenceError',
|
39
|
-
'SyntaxError',
|
40
|
-
'TypeError',
|
41
|
-
'EvalError',
|
42
|
-
'URIError',
|
43
|
-
'Error'
|
44
|
-
];
|
45
|
-
|
46
|
-
const OPNA = 'Operation not allowed on contextified object.';
|
47
|
-
|
48
|
-
const thisGlobalPrototypes = {
|
49
|
-
__proto__: null,
|
50
|
-
Object: Object.prototype,
|
51
|
-
Array: Array.prototype
|
52
|
-
};
|
53
|
-
|
54
|
-
for (let i = 0; i < globalsList.length; i++) {
|
55
|
-
const key = globalsList[i];
|
56
|
-
const g = global[key];
|
57
|
-
if (g) thisGlobalPrototypes[key] = g.prototype;
|
58
|
-
}
|
59
|
-
|
60
|
-
for (let i = 0; i < errorsList.length; i++) {
|
61
|
-
const key = errorsList[i];
|
62
|
-
const g = global[key];
|
63
|
-
if (g) thisGlobalPrototypes[key] = g.prototype;
|
64
|
-
}
|
65
|
-
|
66
|
-
const {
|
67
|
-
getPrototypeOf: thisReflectGetPrototypeOf,
|
68
|
-
setPrototypeOf: thisReflectSetPrototypeOf,
|
69
|
-
defineProperty: thisReflectDefineProperty,
|
70
|
-
deleteProperty: thisReflectDeleteProperty,
|
71
|
-
getOwnPropertyDescriptor: thisReflectGetOwnPropertyDescriptor,
|
72
|
-
isExtensible: thisReflectIsExtensible,
|
73
|
-
preventExtensions: thisReflectPreventExtensions,
|
74
|
-
apply: thisReflectApply,
|
75
|
-
construct: thisReflectConstruct,
|
76
|
-
set: thisReflectSet,
|
77
|
-
get: thisReflectGet,
|
78
|
-
has: thisReflectHas,
|
79
|
-
ownKeys: thisReflectOwnKeys,
|
80
|
-
enumerate: thisReflectEnumerate,
|
81
|
-
} = Reflect;
|
82
|
-
|
83
|
-
const thisObject = Object;
|
84
|
-
const {
|
85
|
-
freeze: thisObjectFreeze,
|
86
|
-
prototype: thisObjectPrototype
|
87
|
-
} = thisObject;
|
88
|
-
const thisObjectHasOwnProperty = thisObjectPrototype.hasOwnProperty;
|
89
|
-
const ThisProxy = Proxy;
|
90
|
-
const ThisWeakMap = WeakMap;
|
91
|
-
const {
|
92
|
-
get: thisWeakMapGet,
|
93
|
-
set: thisWeakMapSet
|
94
|
-
} = ThisWeakMap.prototype;
|
95
|
-
const ThisMap = Map;
|
96
|
-
const thisMapGet = ThisMap.prototype.get;
|
97
|
-
const thisMapSet = ThisMap.prototype.set;
|
98
|
-
const thisFunction = Function;
|
99
|
-
const thisFunctionBind = thisFunction.prototype.bind;
|
100
|
-
const thisArrayIsArray = Array.isArray;
|
101
|
-
const thisErrorCaptureStackTrace = Error.captureStackTrace;
|
102
|
-
|
103
|
-
const thisSymbolToString = Symbol.prototype.toString;
|
104
|
-
const thisSymbolToStringTag = Symbol.toStringTag;
|
105
|
-
const thisSymbolIterator = Symbol.iterator;
|
106
|
-
const thisSymbolNodeJSUtilInspectCustom = Symbol.for('nodejs.util.inspect.custom');
|
107
|
-
|
108
|
-
/**
|
109
|
-
* VMError.
|
110
|
-
*
|
111
|
-
* @public
|
112
|
-
* @extends {Error}
|
113
|
-
*/
|
114
|
-
class VMError extends Error {
|
115
|
-
|
116
|
-
/**
|
117
|
-
* Create VMError instance.
|
118
|
-
*
|
119
|
-
* @public
|
120
|
-
* @param {string} message - Error message.
|
121
|
-
* @param {string} code - Error code.
|
122
|
-
*/
|
123
|
-
constructor(message, code) {
|
124
|
-
super(message);
|
125
|
-
|
126
|
-
this.name = 'VMError';
|
127
|
-
this.code = code;
|
128
|
-
|
129
|
-
thisErrorCaptureStackTrace(this, this.constructor);
|
130
|
-
}
|
131
|
-
}
|
132
|
-
|
133
|
-
thisGlobalPrototypes['VMError'] = VMError.prototype;
|
134
|
-
|
135
|
-
function thisUnexpected() {
|
136
|
-
return new VMError('Unexpected');
|
137
|
-
}
|
138
|
-
|
139
|
-
if (!thisReflectSetPrototypeOf(exports, null)) throw thisUnexpected();
|
140
|
-
|
141
|
-
function thisSafeGetOwnPropertyDescriptor(obj, key) {
|
142
|
-
const desc = thisReflectGetOwnPropertyDescriptor(obj, key);
|
143
|
-
if (!desc) return desc;
|
144
|
-
if (!thisReflectSetPrototypeOf(desc, null)) throw thisUnexpected();
|
145
|
-
return desc;
|
146
|
-
}
|
147
|
-
|
148
|
-
function thisThrowCallerCalleeArgumentsAccess(key) {
|
149
|
-
'use strict';
|
150
|
-
thisThrowCallerCalleeArgumentsAccess[key];
|
151
|
-
return thisUnexpected();
|
152
|
-
}
|
153
|
-
|
154
|
-
function thisIdMapping(factory, other) {
|
155
|
-
return other;
|
156
|
-
}
|
157
|
-
|
158
|
-
const thisThrowOnKeyAccessHandler = thisObjectFreeze({
|
159
|
-
__proto__: null,
|
160
|
-
get(target, key, receiver) {
|
161
|
-
if (typeof key === 'symbol') {
|
162
|
-
key = thisReflectApply(thisSymbolToString, key, []);
|
163
|
-
}
|
164
|
-
throw new VMError(`Unexpected access to key '${key}'`);
|
165
|
-
}
|
166
|
-
});
|
167
|
-
|
168
|
-
const emptyForzenObject = thisObjectFreeze({
|
169
|
-
__proto__: null
|
170
|
-
});
|
171
|
-
|
172
|
-
const thisThrowOnKeyAccess = new ThisProxy(emptyForzenObject, thisThrowOnKeyAccessHandler);
|
173
|
-
|
174
|
-
function SafeBase() {}
|
175
|
-
|
176
|
-
if (!thisReflectDefineProperty(SafeBase, 'prototype', {
|
177
|
-
__proto__: null,
|
178
|
-
value: thisThrowOnKeyAccess
|
179
|
-
})) throw thisUnexpected();
|
180
|
-
|
181
|
-
function SHARED_FUNCTION() {}
|
182
|
-
|
183
|
-
const TEST_PROXY_HANDLER = thisObjectFreeze({
|
184
|
-
__proto__: thisThrowOnKeyAccess,
|
185
|
-
construct() {
|
186
|
-
return this;
|
187
|
-
}
|
188
|
-
});
|
189
|
-
|
190
|
-
function thisIsConstructor(obj) {
|
191
|
-
// Note: obj@any(unsafe)
|
192
|
-
const Func = new ThisProxy(obj, TEST_PROXY_HANDLER);
|
193
|
-
try {
|
194
|
-
// eslint-disable-next-line no-new
|
195
|
-
new Func();
|
196
|
-
return true;
|
197
|
-
} catch (e) {
|
198
|
-
return false;
|
199
|
-
}
|
200
|
-
}
|
201
|
-
|
202
|
-
function thisCreateTargetObject(obj, proto) {
|
203
|
-
// Note: obj@any(unsafe) proto@any(unsafe) returns@this(unsafe) throws@this(unsafe)
|
204
|
-
let base;
|
205
|
-
if (typeof obj === 'function') {
|
206
|
-
if (thisIsConstructor(obj)) {
|
207
|
-
// Bind the function since bound functions do not have a prototype property.
|
208
|
-
base = thisReflectApply(thisFunctionBind, SHARED_FUNCTION, [null]);
|
209
|
-
} else {
|
210
|
-
base = () => {};
|
211
|
-
}
|
212
|
-
} else if (thisArrayIsArray(obj)) {
|
213
|
-
base = [];
|
214
|
-
} else {
|
215
|
-
return {__proto__: proto};
|
216
|
-
}
|
217
|
-
if (!thisReflectSetPrototypeOf(base, proto)) throw thisUnexpected();
|
218
|
-
return base;
|
219
|
-
}
|
220
|
-
|
221
|
-
function createBridge(otherInit, registerProxy) {
|
222
|
-
|
223
|
-
const mappingOtherToThis = new ThisWeakMap();
|
224
|
-
const protoMappings = new ThisMap();
|
225
|
-
const protoName = new ThisMap();
|
226
|
-
|
227
|
-
function thisAddProtoMapping(proto, other, name) {
|
228
|
-
// Note: proto@this(unsafe) other@other(unsafe) name@this(unsafe) throws@this(unsafe)
|
229
|
-
thisReflectApply(thisMapSet, protoMappings, [proto, thisIdMapping]);
|
230
|
-
thisReflectApply(thisMapSet, protoMappings, [other,
|
231
|
-
(factory, object) => thisProxyOther(factory, object, proto)]);
|
232
|
-
if (name) thisReflectApply(thisMapSet, protoName, [proto, name]);
|
233
|
-
}
|
234
|
-
|
235
|
-
function thisAddProtoMappingFactory(protoFactory, other, name) {
|
236
|
-
// Note: protoFactory@this(unsafe) other@other(unsafe) name@this(unsafe) throws@this(unsafe)
|
237
|
-
let proto;
|
238
|
-
thisReflectApply(thisMapSet, protoMappings, [other,
|
239
|
-
(factory, object) => {
|
240
|
-
if (!proto) {
|
241
|
-
proto = protoFactory();
|
242
|
-
thisReflectApply(thisMapSet, protoMappings, [proto, thisIdMapping]);
|
243
|
-
if (name) thisReflectApply(thisMapSet, protoName, [proto, name]);
|
244
|
-
}
|
245
|
-
return thisProxyOther(factory, object, proto);
|
246
|
-
}]);
|
247
|
-
}
|
248
|
-
|
249
|
-
const result = {
|
250
|
-
__proto__: null,
|
251
|
-
globalPrototypes: thisGlobalPrototypes,
|
252
|
-
safeGetOwnPropertyDescriptor: thisSafeGetOwnPropertyDescriptor,
|
253
|
-
fromArguments: thisFromOtherArguments,
|
254
|
-
from: thisFromOther,
|
255
|
-
fromWithFactory: thisFromOtherWithFactory,
|
256
|
-
ensureThis: thisEnsureThis,
|
257
|
-
mapping: mappingOtherToThis,
|
258
|
-
connect: thisConnect,
|
259
|
-
reflectSet: thisReflectSet,
|
260
|
-
reflectGet: thisReflectGet,
|
261
|
-
reflectDefineProperty: thisReflectDefineProperty,
|
262
|
-
reflectDeleteProperty: thisReflectDeleteProperty,
|
263
|
-
reflectApply: thisReflectApply,
|
264
|
-
reflectConstruct: thisReflectConstruct,
|
265
|
-
reflectHas: thisReflectHas,
|
266
|
-
reflectOwnKeys: thisReflectOwnKeys,
|
267
|
-
reflectEnumerate: thisReflectEnumerate,
|
268
|
-
reflectGetPrototypeOf: thisReflectGetPrototypeOf,
|
269
|
-
reflectIsExtensible: thisReflectIsExtensible,
|
270
|
-
reflectPreventExtensions: thisReflectPreventExtensions,
|
271
|
-
objectHasOwnProperty: thisObjectHasOwnProperty,
|
272
|
-
weakMapSet: thisWeakMapSet,
|
273
|
-
addProtoMapping: thisAddProtoMapping,
|
274
|
-
addProtoMappingFactory: thisAddProtoMappingFactory,
|
275
|
-
defaultFactory,
|
276
|
-
protectedFactory,
|
277
|
-
readonlyFactory,
|
278
|
-
VMError
|
279
|
-
};
|
280
|
-
|
281
|
-
const isHost = typeof otherInit !== 'object';
|
282
|
-
|
283
|
-
if (isHost) {
|
284
|
-
otherInit = otherInit(result, registerProxy);
|
285
|
-
}
|
286
|
-
|
287
|
-
result.other = otherInit;
|
288
|
-
|
289
|
-
const {
|
290
|
-
globalPrototypes: otherGlobalPrototypes,
|
291
|
-
safeGetOwnPropertyDescriptor: otherSafeGetOwnPropertyDescriptor,
|
292
|
-
fromArguments: otherFromThisArguments,
|
293
|
-
from: otherFromThis,
|
294
|
-
mapping: mappingThisToOther,
|
295
|
-
reflectSet: otherReflectSet,
|
296
|
-
reflectGet: otherReflectGet,
|
297
|
-
reflectDefineProperty: otherReflectDefineProperty,
|
298
|
-
reflectDeleteProperty: otherReflectDeleteProperty,
|
299
|
-
reflectApply: otherReflectApply,
|
300
|
-
reflectConstruct: otherReflectConstruct,
|
301
|
-
reflectHas: otherReflectHas,
|
302
|
-
reflectOwnKeys: otherReflectOwnKeys,
|
303
|
-
reflectEnumerate: otherReflectEnumerate,
|
304
|
-
reflectGetPrototypeOf: otherReflectGetPrototypeOf,
|
305
|
-
reflectIsExtensible: otherReflectIsExtensible,
|
306
|
-
reflectPreventExtensions: otherReflectPreventExtensions,
|
307
|
-
objectHasOwnProperty: otherObjectHasOwnProperty,
|
308
|
-
weakMapSet: otherWeakMapSet
|
309
|
-
} = otherInit;
|
310
|
-
|
311
|
-
function thisOtherHasOwnProperty(object, key) {
|
312
|
-
// Note: object@other(safe) key@prim throws@this(unsafe)
|
313
|
-
try {
|
314
|
-
return otherReflectApply(otherObjectHasOwnProperty, object, [key]) === true;
|
315
|
-
} catch (e) { // @other(unsafe)
|
316
|
-
throw thisFromOtherForThrow(e);
|
317
|
-
}
|
318
|
-
}
|
319
|
-
|
320
|
-
function thisDefaultGet(handler, object, key, desc) {
|
321
|
-
// Note: object@other(unsafe) key@prim desc@other(safe)
|
322
|
-
let ret; // @other(unsafe)
|
323
|
-
if (desc.get || desc.set) {
|
324
|
-
const getter = desc.get;
|
325
|
-
if (!getter) return undefined;
|
326
|
-
try {
|
327
|
-
ret = otherReflectApply(getter, object, [key]);
|
328
|
-
} catch (e) {
|
329
|
-
throw thisFromOtherForThrow(e);
|
330
|
-
}
|
331
|
-
} else {
|
332
|
-
ret = desc.value;
|
333
|
-
}
|
334
|
-
return handler.fromOtherWithContext(ret);
|
335
|
-
}
|
336
|
-
|
337
|
-
function otherFromThisIfAvailable(to, from, key) {
|
338
|
-
// Note: to@other(safe) from@this(safe) key@prim throws@this(unsafe)
|
339
|
-
if (!thisReflectApply(thisObjectHasOwnProperty, from, [key])) return false;
|
340
|
-
try {
|
341
|
-
to[key] = otherFromThis(from[key]);
|
342
|
-
} catch (e) { // @other(unsafe)
|
343
|
-
throw thisFromOtherForThrow(e);
|
344
|
-
}
|
345
|
-
return true;
|
346
|
-
}
|
347
|
-
|
348
|
-
class BaseHandler extends SafeBase {
|
349
|
-
|
350
|
-
constructor(object) {
|
351
|
-
// Note: object@other(unsafe) throws@this(unsafe)
|
352
|
-
super();
|
353
|
-
this.objectWrapper = () => object;
|
354
|
-
}
|
355
|
-
|
356
|
-
getObject() {
|
357
|
-
return this.objectWrapper();
|
358
|
-
}
|
359
|
-
|
360
|
-
getFactory() {
|
361
|
-
return defaultFactory;
|
362
|
-
}
|
363
|
-
|
364
|
-
fromOtherWithContext(other) {
|
365
|
-
// Note: other@other(unsafe) throws@this(unsafe)
|
366
|
-
return thisFromOtherWithFactory(this.getFactory(), other);
|
367
|
-
}
|
368
|
-
|
369
|
-
doPreventExtensions(target, object, factory) {
|
370
|
-
// Note: target@this(unsafe) object@other(unsafe) throws@this(unsafe)
|
371
|
-
let keys; // @other(safe-array-of-prim)
|
372
|
-
try {
|
373
|
-
keys = otherReflectOwnKeys(object);
|
374
|
-
} catch (e) { // @other(unsafe)
|
375
|
-
throw thisFromOtherForThrow(e);
|
376
|
-
}
|
377
|
-
for (let i = 0; i < keys.length; i++) {
|
378
|
-
const key = keys[i]; // @prim
|
379
|
-
let desc;
|
380
|
-
try {
|
381
|
-
desc = otherSafeGetOwnPropertyDescriptor(object, key);
|
382
|
-
} catch (e) { // @other(unsafe)
|
383
|
-
throw thisFromOtherForThrow(e);
|
384
|
-
}
|
385
|
-
if (!desc) continue;
|
386
|
-
if (!desc.configurable) {
|
387
|
-
const current = thisSafeGetOwnPropertyDescriptor(target, key);
|
388
|
-
if (current && !current.configurable) continue;
|
389
|
-
if (desc.get || desc.set) {
|
390
|
-
desc.get = this.fromOtherWithContext(desc.get);
|
391
|
-
desc.set = this.fromOtherWithContext(desc.set);
|
392
|
-
} else if (typeof object === 'function' && (key === 'caller' || key === 'callee' || key === 'arguments')) {
|
393
|
-
desc.value = null;
|
394
|
-
} else {
|
395
|
-
desc.value = this.fromOtherWithContext(desc.value);
|
396
|
-
}
|
397
|
-
} else {
|
398
|
-
if (desc.get || desc.set) {
|
399
|
-
desc = {
|
400
|
-
__proto__: null,
|
401
|
-
configurable: true,
|
402
|
-
enumerable: desc.enumerable,
|
403
|
-
writable: true,
|
404
|
-
value: null
|
405
|
-
};
|
406
|
-
} else {
|
407
|
-
desc.value = null;
|
408
|
-
}
|
409
|
-
}
|
410
|
-
if (!thisReflectDefineProperty(target, key, desc)) throw thisUnexpected();
|
411
|
-
}
|
412
|
-
if (!thisReflectPreventExtensions(target)) throw thisUnexpected();
|
413
|
-
}
|
414
|
-
|
415
|
-
get(target, key, receiver) {
|
416
|
-
// Note: target@this(unsafe) key@prim receiver@this(unsafe) throws@this(unsafe)
|
417
|
-
const object = this.getObject(); // @other(unsafe)
|
418
|
-
switch (key) {
|
419
|
-
case 'constructor': {
|
420
|
-
const desc = otherSafeGetOwnPropertyDescriptor(object, key);
|
421
|
-
if (desc) return thisDefaultGet(this, object, key, desc);
|
422
|
-
const proto = thisReflectGetPrototypeOf(target);
|
423
|
-
return proto === null ? undefined : proto.constructor;
|
424
|
-
}
|
425
|
-
case '__proto__': {
|
426
|
-
const desc = otherSafeGetOwnPropertyDescriptor(object, key);
|
427
|
-
if (desc) return thisDefaultGet(this, object, key, desc);
|
428
|
-
return thisReflectGetPrototypeOf(target);
|
429
|
-
}
|
430
|
-
case thisSymbolToStringTag:
|
431
|
-
if (!thisOtherHasOwnProperty(object, thisSymbolToStringTag)) {
|
432
|
-
const proto = thisReflectGetPrototypeOf(target);
|
433
|
-
const name = thisReflectApply(thisMapGet, protoName, [proto]);
|
434
|
-
if (name) return name;
|
435
|
-
}
|
436
|
-
break;
|
437
|
-
case 'arguments':
|
438
|
-
case 'caller':
|
439
|
-
case 'callee':
|
440
|
-
if (typeof object === 'function' && thisOtherHasOwnProperty(object, key)) {
|
441
|
-
throw thisThrowCallerCalleeArgumentsAccess(key);
|
442
|
-
}
|
443
|
-
break;
|
444
|
-
}
|
445
|
-
let ret; // @other(unsafe)
|
446
|
-
try {
|
447
|
-
ret = otherReflectGet(object, key);
|
448
|
-
} catch (e) { // @other(unsafe)
|
449
|
-
throw thisFromOtherForThrow(e);
|
450
|
-
}
|
451
|
-
return this.fromOtherWithContext(ret);
|
452
|
-
}
|
453
|
-
|
454
|
-
set(target, key, value, receiver) {
|
455
|
-
// Note: target@this(unsafe) key@prim value@this(unsafe) receiver@this(unsafe) throws@this(unsafe)
|
456
|
-
const object = this.getObject(); // @other(unsafe)
|
457
|
-
if (key === '__proto__' && !thisOtherHasOwnProperty(object, key)) {
|
458
|
-
return this.setPrototypeOf(target, value);
|
459
|
-
}
|
460
|
-
try {
|
461
|
-
value = otherFromThis(value);
|
462
|
-
return otherReflectSet(object, key, value) === true;
|
463
|
-
} catch (e) { // @other(unsafe)
|
464
|
-
throw thisFromOtherForThrow(e);
|
465
|
-
}
|
466
|
-
}
|
467
|
-
|
468
|
-
getPrototypeOf(target) {
|
469
|
-
// Note: target@this(unsafe)
|
470
|
-
return thisReflectGetPrototypeOf(target);
|
471
|
-
}
|
472
|
-
|
473
|
-
setPrototypeOf(target, value) {
|
474
|
-
// Note: target@this(unsafe) throws@this(unsafe)
|
475
|
-
throw new VMError(OPNA);
|
476
|
-
}
|
477
|
-
|
478
|
-
apply(target, context, args) {
|
479
|
-
// Note: target@this(unsafe) context@this(unsafe) args@this(safe-array) throws@this(unsafe)
|
480
|
-
const object = this.getObject(); // @other(unsafe)
|
481
|
-
let ret; // @other(unsafe)
|
482
|
-
try {
|
483
|
-
context = otherFromThis(context);
|
484
|
-
args = otherFromThisArguments(args);
|
485
|
-
ret = otherReflectApply(object, context, args);
|
486
|
-
} catch (e) { // @other(unsafe)
|
487
|
-
throw thisFromOtherForThrow(e);
|
488
|
-
}
|
489
|
-
return thisFromOther(ret);
|
490
|
-
}
|
491
|
-
|
492
|
-
construct(target, args, newTarget) {
|
493
|
-
// Note: target@this(unsafe) args@this(safe-array) newTarget@this(unsafe) throws@this(unsafe)
|
494
|
-
const object = this.getObject(); // @other(unsafe)
|
495
|
-
let ret; // @other(unsafe)
|
496
|
-
try {
|
497
|
-
args = otherFromThisArguments(args);
|
498
|
-
ret = otherReflectConstruct(object, args);
|
499
|
-
} catch (e) { // @other(unsafe)
|
500
|
-
throw thisFromOtherForThrow(e);
|
501
|
-
}
|
502
|
-
return thisFromOtherWithFactory(this.getFactory(), ret, thisFromOther(object));
|
503
|
-
}
|
504
|
-
|
505
|
-
getOwnPropertyDescriptorDesc(target, prop, desc) {
|
506
|
-
// Note: target@this(unsafe) prop@prim desc@other{safe} throws@this(unsafe)
|
507
|
-
const object = this.getObject(); // @other(unsafe)
|
508
|
-
if (desc && typeof object === 'function' && (prop === 'arguments' || prop === 'caller' || prop === 'callee')) desc.value = null;
|
509
|
-
return desc;
|
510
|
-
}
|
511
|
-
|
512
|
-
getOwnPropertyDescriptor(target, prop) {
|
513
|
-
// Note: target@this(unsafe) prop@prim throws@this(unsafe)
|
514
|
-
const object = this.getObject(); // @other(unsafe)
|
515
|
-
let desc; // @other(safe)
|
516
|
-
try {
|
517
|
-
desc = otherSafeGetOwnPropertyDescriptor(object, prop);
|
518
|
-
} catch (e) { // @other(unsafe)
|
519
|
-
throw thisFromOtherForThrow(e);
|
520
|
-
}
|
521
|
-
|
522
|
-
desc = this.getOwnPropertyDescriptorDesc(target, prop, desc);
|
523
|
-
|
524
|
-
if (!desc) return undefined;
|
525
|
-
|
526
|
-
let thisDesc;
|
527
|
-
if (desc.get || desc.set) {
|
528
|
-
thisDesc = {
|
529
|
-
__proto__: null,
|
530
|
-
get: this.fromOtherWithContext(desc.get),
|
531
|
-
set: this.fromOtherWithContext(desc.set),
|
532
|
-
enumerable: desc.enumerable === true,
|
533
|
-
configurable: desc.configurable === true
|
534
|
-
};
|
535
|
-
} else {
|
536
|
-
thisDesc = {
|
537
|
-
__proto__: null,
|
538
|
-
value: this.fromOtherWithContext(desc.value),
|
539
|
-
writable: desc.writable === true,
|
540
|
-
enumerable: desc.enumerable === true,
|
541
|
-
configurable: desc.configurable === true
|
542
|
-
};
|
543
|
-
}
|
544
|
-
if (!thisDesc.configurable) {
|
545
|
-
const oldDesc = thisSafeGetOwnPropertyDescriptor(target, prop);
|
546
|
-
if (!oldDesc || oldDesc.configurable || oldDesc.writable !== thisDesc.writable) {
|
547
|
-
if (!thisReflectDefineProperty(target, prop, thisDesc)) throw thisUnexpected();
|
548
|
-
}
|
549
|
-
}
|
550
|
-
return thisDesc;
|
551
|
-
}
|
552
|
-
|
553
|
-
definePropertyDesc(target, prop, desc) {
|
554
|
-
// Note: target@this(unsafe) prop@prim desc@this(safe) throws@this(unsafe)
|
555
|
-
return desc;
|
556
|
-
}
|
557
|
-
|
558
|
-
defineProperty(target, prop, desc) {
|
559
|
-
// Note: target@this(unsafe) prop@prim desc@this(unsafe) throws@this(unsafe)
|
560
|
-
const object = this.getObject(); // @other(unsafe)
|
561
|
-
if (!thisReflectSetPrototypeOf(desc, null)) throw thisUnexpected();
|
562
|
-
|
563
|
-
desc = this.definePropertyDesc(target, prop, desc);
|
564
|
-
|
565
|
-
if (!desc) return false;
|
566
|
-
|
567
|
-
let otherDesc = {__proto__: null};
|
568
|
-
let hasFunc = true;
|
569
|
-
let hasValue = true;
|
570
|
-
let hasBasic = true;
|
571
|
-
hasFunc &= otherFromThisIfAvailable(otherDesc, desc, 'get');
|
572
|
-
hasFunc &= otherFromThisIfAvailable(otherDesc, desc, 'set');
|
573
|
-
hasValue &= otherFromThisIfAvailable(otherDesc, desc, 'value');
|
574
|
-
hasValue &= otherFromThisIfAvailable(otherDesc, desc, 'writable');
|
575
|
-
hasBasic &= otherFromThisIfAvailable(otherDesc, desc, 'enumerable');
|
576
|
-
hasBasic &= otherFromThisIfAvailable(otherDesc, desc, 'configurable');
|
577
|
-
|
578
|
-
try {
|
579
|
-
if (!otherReflectDefineProperty(object, prop, otherDesc)) return false;
|
580
|
-
if (otherDesc.configurable !== true && (!hasBasic || !(hasFunc || hasValue))) {
|
581
|
-
otherDesc = otherSafeGetOwnPropertyDescriptor(object, prop);
|
582
|
-
}
|
583
|
-
} catch (e) { // @other(unsafe)
|
584
|
-
throw thisFromOtherForThrow(e);
|
585
|
-
}
|
586
|
-
|
587
|
-
if (!otherDesc.configurable) {
|
588
|
-
let thisDesc;
|
589
|
-
if (otherDesc.get || otherDesc.set) {
|
590
|
-
thisDesc = {
|
591
|
-
__proto__: null,
|
592
|
-
get: this.fromOtherWithContext(otherDesc.get),
|
593
|
-
set: this.fromOtherWithContext(otherDesc.set),
|
594
|
-
enumerable: otherDesc.enumerable,
|
595
|
-
configurable: otherDesc.configurable
|
596
|
-
};
|
597
|
-
} else {
|
598
|
-
thisDesc = {
|
599
|
-
__proto__: null,
|
600
|
-
value: this.fromOtherWithContext(otherDesc.value),
|
601
|
-
writable: otherDesc.writable,
|
602
|
-
enumerable: otherDesc.enumerable,
|
603
|
-
configurable: otherDesc.configurable
|
604
|
-
};
|
605
|
-
}
|
606
|
-
if (!thisReflectDefineProperty(target, prop, thisDesc)) throw thisUnexpected();
|
607
|
-
}
|
608
|
-
return true;
|
609
|
-
}
|
610
|
-
|
611
|
-
deleteProperty(target, prop) {
|
612
|
-
// Note: target@this(unsafe) prop@prim throws@this(unsafe)
|
613
|
-
const object = this.getObject(); // @other(unsafe)
|
614
|
-
try {
|
615
|
-
return otherReflectDeleteProperty(object, prop) === true;
|
616
|
-
} catch (e) { // @other(unsafe)
|
617
|
-
throw thisFromOtherForThrow(e);
|
618
|
-
}
|
619
|
-
}
|
620
|
-
|
621
|
-
has(target, key) {
|
622
|
-
// Note: target@this(unsafe) key@prim throws@this(unsafe)
|
623
|
-
const object = this.getObject(); // @other(unsafe)
|
624
|
-
try {
|
625
|
-
return otherReflectHas(object, key) === true;
|
626
|
-
} catch (e) { // @other(unsafe)
|
627
|
-
throw thisFromOtherForThrow(e);
|
628
|
-
}
|
629
|
-
}
|
630
|
-
|
631
|
-
isExtensible(target) {
|
632
|
-
// Note: target@this(unsafe) throws@this(unsafe)
|
633
|
-
const object = this.getObject(); // @other(unsafe)
|
634
|
-
try {
|
635
|
-
if (otherReflectIsExtensible(object)) return true;
|
636
|
-
} catch (e) { // @other(unsafe)
|
637
|
-
throw thisFromOtherForThrow(e);
|
638
|
-
}
|
639
|
-
if (thisReflectIsExtensible(target)) {
|
640
|
-
this.doPreventExtensions(target, object, this);
|
641
|
-
}
|
642
|
-
return false;
|
643
|
-
}
|
644
|
-
|
645
|
-
ownKeys(target) {
|
646
|
-
// Note: target@this(unsafe) throws@this(unsafe)
|
647
|
-
const object = this.getObject(); // @other(unsafe)
|
648
|
-
let res; // @other(unsafe)
|
649
|
-
try {
|
650
|
-
res = otherReflectOwnKeys(object);
|
651
|
-
} catch (e) { // @other(unsafe)
|
652
|
-
throw thisFromOtherForThrow(e);
|
653
|
-
}
|
654
|
-
return thisFromOther(res);
|
655
|
-
}
|
656
|
-
|
657
|
-
preventExtensions(target) {
|
658
|
-
// Note: target@this(unsafe) throws@this(unsafe)
|
659
|
-
const object = this.getObject(); // @other(unsafe)
|
660
|
-
try {
|
661
|
-
if (!otherReflectPreventExtensions(object)) return false;
|
662
|
-
} catch (e) { // @other(unsafe)
|
663
|
-
throw thisFromOtherForThrow(e);
|
664
|
-
}
|
665
|
-
if (thisReflectIsExtensible(target)) {
|
666
|
-
this.doPreventExtensions(target, object, this);
|
667
|
-
}
|
668
|
-
return true;
|
669
|
-
}
|
670
|
-
|
671
|
-
enumerate(target) {
|
672
|
-
// Note: target@this(unsafe) throws@this(unsafe)
|
673
|
-
const object = this.getObject(); // @other(unsafe)
|
674
|
-
let res; // @other(unsafe)
|
675
|
-
try {
|
676
|
-
res = otherReflectEnumerate(object);
|
677
|
-
} catch (e) { // @other(unsafe)
|
678
|
-
throw thisFromOtherForThrow(e);
|
679
|
-
}
|
680
|
-
return this.fromOtherWithContext(res);
|
681
|
-
}
|
682
|
-
|
683
|
-
}
|
684
|
-
|
685
|
-
BaseHandler.prototype[thisSymbolNodeJSUtilInspectCustom] = undefined;
|
686
|
-
BaseHandler.prototype[thisSymbolToStringTag] = 'VM2 Wrapper';
|
687
|
-
BaseHandler.prototype[thisSymbolIterator] = undefined;
|
688
|
-
|
689
|
-
function defaultFactory(object) {
|
690
|
-
// Note: other@other(unsafe) returns@this(unsafe) throws@this(unsafe)
|
691
|
-
return new BaseHandler(object);
|
692
|
-
}
|
693
|
-
|
694
|
-
class ProtectedHandler extends BaseHandler {
|
695
|
-
|
696
|
-
getFactory() {
|
697
|
-
return protectedFactory;
|
698
|
-
}
|
699
|
-
|
700
|
-
set(target, key, value, receiver) {
|
701
|
-
// Note: target@this(unsafe) key@prim value@this(unsafe) receiver@this(unsafe) throws@this(unsafe)
|
702
|
-
if (typeof value === 'function') {
|
703
|
-
return thisReflectDefineProperty(receiver, key, {
|
704
|
-
__proto__: null,
|
705
|
-
value: value,
|
706
|
-
writable: true,
|
707
|
-
enumerable: true,
|
708
|
-
configurable: true
|
709
|
-
}) === true;
|
710
|
-
}
|
711
|
-
return super.set(target, key, value, receiver);
|
712
|
-
}
|
713
|
-
|
714
|
-
definePropertyDesc(target, prop, desc) {
|
715
|
-
// Note: target@this(unsafe) prop@prim desc@this(safe) throws@this(unsafe)
|
716
|
-
if (desc && (desc.set || desc.get || typeof desc.value === 'function')) return undefined;
|
717
|
-
return desc;
|
718
|
-
}
|
719
|
-
|
720
|
-
}
|
721
|
-
|
722
|
-
function protectedFactory(object) {
|
723
|
-
// Note: other@other(unsafe) returns@this(unsafe) throws@this(unsafe)
|
724
|
-
return new ProtectedHandler(object);
|
725
|
-
}
|
726
|
-
|
727
|
-
class ReadOnlyHandler extends BaseHandler {
|
728
|
-
|
729
|
-
getFactory() {
|
730
|
-
return readonlyFactory;
|
731
|
-
}
|
732
|
-
|
733
|
-
set(target, key, value, receiver) {
|
734
|
-
// Note: target@this(unsafe) key@prim value@this(unsafe) receiver@this(unsafe) throws@this(unsafe)
|
735
|
-
return thisReflectDefineProperty(receiver, key, {
|
736
|
-
__proto__: null,
|
737
|
-
value: value,
|
738
|
-
writable: true,
|
739
|
-
enumerable: true,
|
740
|
-
configurable: true
|
741
|
-
});
|
742
|
-
}
|
743
|
-
|
744
|
-
setPrototypeOf(target, value) {
|
745
|
-
// Note: target@this(unsafe) throws@this(unsafe)
|
746
|
-
return false;
|
747
|
-
}
|
748
|
-
|
749
|
-
defineProperty(target, prop, desc) {
|
750
|
-
// Note: target@this(unsafe) prop@prim desc@this(unsafe) throws@this(unsafe)
|
751
|
-
return false;
|
752
|
-
}
|
753
|
-
|
754
|
-
deleteProperty(target, prop) {
|
755
|
-
// Note: target@this(unsafe) prop@prim throws@this(unsafe)
|
756
|
-
return false;
|
757
|
-
}
|
758
|
-
|
759
|
-
isExtensible(target) {
|
760
|
-
// Note: target@this(unsafe) throws@this(unsafe)
|
761
|
-
return false;
|
762
|
-
}
|
763
|
-
|
764
|
-
preventExtensions(target) {
|
765
|
-
// Note: target@this(unsafe) throws@this(unsafe)
|
766
|
-
return false;
|
767
|
-
}
|
768
|
-
|
769
|
-
}
|
770
|
-
|
771
|
-
function readonlyFactory(object) {
|
772
|
-
// Note: other@other(unsafe) returns@this(unsafe) throws@this(unsafe)
|
773
|
-
return new ReadOnlyHandler(object);
|
774
|
-
}
|
775
|
-
|
776
|
-
class ReadOnlyMockHandler extends ReadOnlyHandler {
|
777
|
-
|
778
|
-
constructor(object, mock) {
|
779
|
-
// Note: object@other(unsafe) mock:this(unsafe) throws@this(unsafe)
|
780
|
-
super(object);
|
781
|
-
this.mock = mock;
|
782
|
-
}
|
783
|
-
|
784
|
-
get(target, key, receiver) {
|
785
|
-
// Note: target@this(unsafe) key@prim receiver@this(unsafe) throws@this(unsafe)
|
786
|
-
const object = this.getObject(); // @other(unsafe)
|
787
|
-
const mock = this.mock;
|
788
|
-
if (thisReflectApply(thisObjectHasOwnProperty, mock, key) && !thisOtherHasOwnProperty(object, key)) {
|
789
|
-
return mock[key];
|
790
|
-
}
|
791
|
-
return super.get(target, key, receiver);
|
792
|
-
}
|
793
|
-
|
794
|
-
}
|
795
|
-
|
796
|
-
function thisFromOther(other) {
|
797
|
-
// Note: other@other(unsafe) returns@this(unsafe) throws@this(unsafe)
|
798
|
-
return thisFromOtherWithFactory(defaultFactory, other);
|
799
|
-
}
|
800
|
-
|
801
|
-
function thisProxyOther(factory, other, proto) {
|
802
|
-
const target = thisCreateTargetObject(other, proto);
|
803
|
-
const handler = factory(other);
|
804
|
-
const proxy = new ThisProxy(target, handler);
|
805
|
-
try {
|
806
|
-
otherReflectApply(otherWeakMapSet, mappingThisToOther, [proxy, other]);
|
807
|
-
registerProxy(proxy, handler);
|
808
|
-
} catch (e) {
|
809
|
-
throw new VMError('Unexpected error');
|
810
|
-
}
|
811
|
-
if (!isHost) {
|
812
|
-
thisReflectApply(thisWeakMapSet, mappingOtherToThis, [other, proxy]);
|
813
|
-
return proxy;
|
814
|
-
}
|
815
|
-
const proxy2 = new ThisProxy(proxy, emptyForzenObject);
|
816
|
-
try {
|
817
|
-
otherReflectApply(otherWeakMapSet, mappingThisToOther, [proxy2, other]);
|
818
|
-
registerProxy(proxy2, handler);
|
819
|
-
} catch (e) {
|
820
|
-
throw new VMError('Unexpected error');
|
821
|
-
}
|
822
|
-
thisReflectApply(thisWeakMapSet, mappingOtherToThis, [other, proxy2]);
|
823
|
-
return proxy2;
|
824
|
-
}
|
825
|
-
|
826
|
-
function thisEnsureThis(other) {
|
827
|
-
const type = typeof other;
|
828
|
-
switch (type) {
|
829
|
-
case 'object':
|
830
|
-
if (other === null) {
|
831
|
-
return null;
|
832
|
-
}
|
833
|
-
// fallthrough
|
834
|
-
case 'function':
|
835
|
-
let proto = thisReflectGetPrototypeOf(other);
|
836
|
-
if (!proto) {
|
837
|
-
return other;
|
838
|
-
}
|
839
|
-
while (proto) {
|
840
|
-
const mapping = thisReflectApply(thisMapGet, protoMappings, [proto]);
|
841
|
-
if (mapping) {
|
842
|
-
const mapped = thisReflectApply(thisWeakMapGet, mappingOtherToThis, [other]);
|
843
|
-
if (mapped) return mapped;
|
844
|
-
return mapping(defaultFactory, other);
|
845
|
-
}
|
846
|
-
proto = thisReflectGetPrototypeOf(proto);
|
847
|
-
}
|
848
|
-
return other;
|
849
|
-
case 'undefined':
|
850
|
-
case 'string':
|
851
|
-
case 'number':
|
852
|
-
case 'boolean':
|
853
|
-
case 'symbol':
|
854
|
-
case 'bigint':
|
855
|
-
return other;
|
856
|
-
|
857
|
-
default: // new, unknown types can be dangerous
|
858
|
-
throw new VMError(`Unknown type '${type}'`);
|
859
|
-
}
|
860
|
-
}
|
861
|
-
|
862
|
-
function thisFromOtherForThrow(other) {
|
863
|
-
for (let loop = 0; loop < 10; loop++) {
|
864
|
-
const type = typeof other;
|
865
|
-
switch (type) {
|
866
|
-
case 'object':
|
867
|
-
if (other === null) {
|
868
|
-
return null;
|
869
|
-
}
|
870
|
-
// fallthrough
|
871
|
-
case 'function':
|
872
|
-
const mapped = thisReflectApply(thisWeakMapGet, mappingOtherToThis, [other]);
|
873
|
-
if (mapped) return mapped;
|
874
|
-
let proto;
|
875
|
-
try {
|
876
|
-
proto = otherReflectGetPrototypeOf(other);
|
877
|
-
} catch (e) { // @other(unsafe)
|
878
|
-
other = e;
|
879
|
-
break;
|
880
|
-
}
|
881
|
-
if (!proto) {
|
882
|
-
return thisProxyOther(defaultFactory, other, null);
|
883
|
-
}
|
884
|
-
for (;;) {
|
885
|
-
const mapping = thisReflectApply(thisMapGet, protoMappings, [proto]);
|
886
|
-
if (mapping) return mapping(defaultFactory, other);
|
887
|
-
try {
|
888
|
-
proto = otherReflectGetPrototypeOf(proto);
|
889
|
-
} catch (e) { // @other(unsafe)
|
890
|
-
other = e;
|
891
|
-
break;
|
892
|
-
}
|
893
|
-
if (!proto) return thisProxyOther(defaultFactory, other, thisObjectPrototype);
|
894
|
-
}
|
895
|
-
break;
|
896
|
-
case 'undefined':
|
897
|
-
case 'string':
|
898
|
-
case 'number':
|
899
|
-
case 'boolean':
|
900
|
-
case 'symbol':
|
901
|
-
case 'bigint':
|
902
|
-
return other;
|
903
|
-
|
904
|
-
default: // new, unknown types can be dangerous
|
905
|
-
throw new VMError(`Unknown type '${type}'`);
|
906
|
-
}
|
907
|
-
}
|
908
|
-
throw new VMError('Exception recursion depth');
|
909
|
-
}
|
910
|
-
|
911
|
-
function thisFromOtherWithFactory(factory, other, proto) {
|
912
|
-
const type = typeof other;
|
913
|
-
switch (type) {
|
914
|
-
case 'object':
|
915
|
-
if (other === null) {
|
916
|
-
return null;
|
917
|
-
}
|
918
|
-
// fallthrough
|
919
|
-
case 'function':
|
920
|
-
const mapped = thisReflectApply(thisWeakMapGet, mappingOtherToThis, [other]);
|
921
|
-
if (mapped) return mapped;
|
922
|
-
if (proto) {
|
923
|
-
return thisProxyOther(factory, other, proto);
|
924
|
-
}
|
925
|
-
try {
|
926
|
-
proto = otherReflectGetPrototypeOf(other);
|
927
|
-
} catch (e) { // @other(unsafe)
|
928
|
-
throw thisFromOtherForThrow(e);
|
929
|
-
}
|
930
|
-
if (!proto) {
|
931
|
-
return thisProxyOther(factory, other, null);
|
932
|
-
}
|
933
|
-
do {
|
934
|
-
const mapping = thisReflectApply(thisMapGet, protoMappings, [proto]);
|
935
|
-
if (mapping) return mapping(factory, other);
|
936
|
-
try {
|
937
|
-
proto = otherReflectGetPrototypeOf(proto);
|
938
|
-
} catch (e) { // @other(unsafe)
|
939
|
-
throw thisFromOtherForThrow(e);
|
940
|
-
}
|
941
|
-
} while (proto);
|
942
|
-
return thisProxyOther(factory, other, thisObjectPrototype);
|
943
|
-
case 'undefined':
|
944
|
-
case 'string':
|
945
|
-
case 'number':
|
946
|
-
case 'boolean':
|
947
|
-
case 'symbol':
|
948
|
-
case 'bigint':
|
949
|
-
return other;
|
950
|
-
|
951
|
-
default: // new, unknown types can be dangerous
|
952
|
-
throw new VMError(`Unknown type '${type}'`);
|
953
|
-
}
|
954
|
-
}
|
955
|
-
|
956
|
-
function thisFromOtherArguments(args) {
|
957
|
-
// Note: args@other(safe-array) returns@this(safe-array) throws@this(unsafe)
|
958
|
-
const arr = [];
|
959
|
-
for (let i = 0; i < args.length; i++) {
|
960
|
-
const value = thisFromOther(args[i]);
|
961
|
-
thisReflectDefineProperty(arr, i, {
|
962
|
-
__proto__: null,
|
963
|
-
value: value,
|
964
|
-
writable: true,
|
965
|
-
enumerable: true,
|
966
|
-
configurable: true
|
967
|
-
});
|
968
|
-
}
|
969
|
-
return arr;
|
970
|
-
}
|
971
|
-
|
972
|
-
function thisConnect(obj, other) {
|
973
|
-
// Note: obj@this(unsafe) other@other(unsafe) throws@this(unsafe)
|
974
|
-
try {
|
975
|
-
otherReflectApply(otherWeakMapSet, mappingThisToOther, [obj, other]);
|
976
|
-
} catch (e) {
|
977
|
-
throw new VMError('Unexpected error');
|
978
|
-
}
|
979
|
-
thisReflectApply(thisWeakMapSet, mappingOtherToThis, [other, obj]);
|
980
|
-
}
|
981
|
-
|
982
|
-
thisAddProtoMapping(thisGlobalPrototypes.Object, otherGlobalPrototypes.Object);
|
983
|
-
thisAddProtoMapping(thisGlobalPrototypes.Array, otherGlobalPrototypes.Array);
|
984
|
-
|
985
|
-
for (let i = 0; i < globalsList.length; i++) {
|
986
|
-
const key = globalsList[i];
|
987
|
-
const tp = thisGlobalPrototypes[key];
|
988
|
-
const op = otherGlobalPrototypes[key];
|
989
|
-
if (tp && op) thisAddProtoMapping(tp, op, key);
|
990
|
-
}
|
991
|
-
|
992
|
-
for (let i = 0; i < errorsList.length; i++) {
|
993
|
-
const key = errorsList[i];
|
994
|
-
const tp = thisGlobalPrototypes[key];
|
995
|
-
const op = otherGlobalPrototypes[key];
|
996
|
-
if (tp && op) thisAddProtoMapping(tp, op, 'Error');
|
997
|
-
}
|
998
|
-
|
999
|
-
thisAddProtoMapping(thisGlobalPrototypes.VMError, otherGlobalPrototypes.VMError, 'Error');
|
1000
|
-
|
1001
|
-
result.BaseHandler = BaseHandler;
|
1002
|
-
result.ProtectedHandler = ProtectedHandler;
|
1003
|
-
result.ReadOnlyHandler = ReadOnlyHandler;
|
1004
|
-
result.ReadOnlyMockHandler = ReadOnlyMockHandler;
|
1005
|
-
|
1006
|
-
return result;
|
1007
|
-
}
|
1008
|
-
|
1009
|
-
exports.createBridge = createBridge;
|
1010
|
-
exports.VMError = VMError;
|