You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.5 KiB
42 lines
1.5 KiB
4 weeks ago
|
'use strict';
|
||
|
var $ = require('../internals/export');
|
||
|
var globalThis = require('../internals/global-this');
|
||
|
var defineBuiltInAccessor = require('../internals/define-built-in-accessor');
|
||
|
var DESCRIPTORS = require('../internals/descriptors');
|
||
|
|
||
|
var $TypeError = TypeError;
|
||
|
// eslint-disable-next-line es/no-object-defineproperty -- safe
|
||
|
var defineProperty = Object.defineProperty;
|
||
|
var INCORRECT_VALUE = globalThis.self !== globalThis;
|
||
|
|
||
|
// `self` getter
|
||
|
// https://html.spec.whatwg.org/multipage/window-object.html#dom-self
|
||
|
try {
|
||
|
if (DESCRIPTORS) {
|
||
|
// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
|
||
|
var descriptor = Object.getOwnPropertyDescriptor(globalThis, 'self');
|
||
|
// some engines have `self`, but with incorrect descriptor
|
||
|
// https://github.com/denoland/deno/issues/15765
|
||
|
if (INCORRECT_VALUE || !descriptor || !descriptor.get || !descriptor.enumerable) {
|
||
|
defineBuiltInAccessor(globalThis, 'self', {
|
||
|
get: function self() {
|
||
|
return globalThis;
|
||
|
},
|
||
|
set: function self(value) {
|
||
|
if (this !== globalThis) throw new $TypeError('Illegal invocation');
|
||
|
defineProperty(globalThis, 'self', {
|
||
|
value: value,
|
||
|
writable: true,
|
||
|
configurable: true,
|
||
|
enumerable: true
|
||
|
});
|
||
|
},
|
||
|
configurable: true,
|
||
|
enumerable: true
|
||
|
});
|
||
|
}
|
||
|
} else $({ global: true, simple: true, forced: INCORRECT_VALUE }, {
|
||
|
self: globalThis
|
||
|
});
|
||
|
} catch (error) { /* empty */ }
|