UNPKG

1.48 kBJavaScriptView Raw
1'use strict';
2var $ = require('../internals/export');
3var global = require('../internals/global');
4var defineBuiltInAccessor = require('../internals/define-built-in-accessor');
5var DESCRIPTORS = require('../internals/descriptors');
6
7var $TypeError = TypeError;
8// eslint-disable-next-line es/no-object-defineproperty -- safe
9var defineProperty = Object.defineProperty;
10var INCORRECT_VALUE = global.self !== global;
11
12// `self` getter
13// https://html.spec.whatwg.org/multipage/window-object.html#dom-self
14try {
15 if (DESCRIPTORS) {
16 // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
17 var descriptor = Object.getOwnPropertyDescriptor(global, 'self');
18 // some engines have `self`, but with incorrect descriptor
19 // https://github.com/denoland/deno/issues/15765
20 if (INCORRECT_VALUE || !descriptor || !descriptor.get || !descriptor.enumerable) {
21 defineBuiltInAccessor(global, 'self', {
22 get: function self() {
23 return global;
24 },
25 set: function self(value) {
26 if (this !== global) throw new $TypeError('Illegal invocation');
27 defineProperty(global, 'self', {
28 value: value,
29 writable: true,
30 configurable: true,
31 enumerable: true
32 });
33 },
34 configurable: true,
35 enumerable: true
36 });
37 }
38 } else $({ global: true, simple: true, forced: INCORRECT_VALUE }, {
39 self: global
40 });
41} catch (error) { /* empty */ }