"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