Files
asciidisco.com/build/node_modules/prepack/lib/intrinsics/ecma262/Proxy.js
2023-08-01 13:49:46 +02:00

105 lines
8.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); /**
* Copyright (c) 2017-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
exports.default = function (realm) {
// ECMA262 26.2.1.1
var func = new _index.NativeFunctionValue(realm, "Proxy", "Proxy", 2, function (context, _ref, argCount, NewTarget) {
var _ref2 = _slicedToArray(_ref, 2),
target = _ref2[0],
handler = _ref2[1];
// 1. If NewTarget is undefined, throw a TypeError exception.
if (!NewTarget) {
throw realm.createErrorThrowCompletion(realm.intrinsics.TypeError);
}
// 2. Return ? ProxyCreate(target, handler).
return (0, _proxy.ProxyCreate)(realm, target, handler);
});
// ECMA262 26.2.2.1
func.defineNativeMethod("revocable", 2, function (context, _ref3) {
var _ref4 = _slicedToArray(_ref3, 2),
target = _ref4[0],
handler = _ref4[1];
// 1. Let p be ? ProxyCreate(target, handler).
var p = (0, _proxy.ProxyCreate)(realm, target, handler);
// 2. Let revoker be a new built-in function object as defined in 26.2.2.1.1.
var revoker = createRevoker();
// 3. Set the [[RevocableProxy]] internal slot of revoker to p.
revoker.$RevocableProxy = p;
// 4. Let result be ObjectCreate(%ObjectPrototype%).
var result = _singletons.Create.ObjectCreate(realm, realm.intrinsics.ObjectPrototype);
// 5. Perform CreateDataProperty(result, "proxy", p).
_singletons.Create.CreateDataProperty(realm, result, "proxy", p);
// 6. Perform CreateDataProperty(result, "revoke", revoker).
_singletons.Create.CreateDataProperty(realm, result, "revoke", revoker);
// 7. Return result.
return result;
});
function createRevoker() {
var F = new _index.NativeFunctionValue(realm, undefined, undefined, 0, function (context, _ref5, argCount, NewTarget) {
var _ref6 = _slicedToArray(_ref5, 2),
target = _ref6[0],
handler = _ref6[1];
// 1. Let p be the value of F's [[RevocableProxy]] internal slot.
var p = F.$RevocableProxy;
// 2. If p is null, return undefined.
if (p instanceof _index.NullValue) return realm.intrinsics.undefined;
// 3. Set the value of F's [[RevocableProxy]] internal slot to null.
F.$RevocableProxy = realm.intrinsics.null;
// 4. Assert: p is a Proxy object.
(0, _invariant2.default)(p instanceof _index.ProxyValue, "expected proxy");
// 5. Set the [[ProxyTarget]] internal slot of p to null.
p.$ProxyTarget = realm.intrinsics.null;
// 6. Set the [[ProxyHandler]] internal slot of p to null.
p.$ProxyHandler = realm.intrinsics.null;
// 7. Return undefined.
return realm.intrinsics.undefined;
}, false);
return F;
}
return func;
};
var _index = require("../../values/index.js");
var _singletons = require("../../singletons.js");
var _proxy = require("../../methods/proxy.js");
var _invariant = require("../../invariant.js");
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
//# sourceMappingURL=Proxy.js.map