30 lines
715 B
JavaScript
30 lines
715 B
JavaScript
|
'use strict';
|
||
|
|
||
|
var define = require('define-properties');
|
||
|
var gOPD = require('gopd');
|
||
|
var getPolyfill = require('./polyfill');
|
||
|
|
||
|
module.exports = function shimGlobal() {
|
||
|
var polyfill = getPolyfill();
|
||
|
if (define.supportsDescriptors) {
|
||
|
var descriptor = gOPD(polyfill, 'globalThis');
|
||
|
if (
|
||
|
!descriptor
|
||
|
|| (
|
||
|
descriptor.configurable
|
||
|
&& (descriptor.enumerable || !descriptor.writable || globalThis !== polyfill)
|
||
|
)
|
||
|
) {
|
||
|
Object.defineProperty(polyfill, 'globalThis', {
|
||
|
configurable: true,
|
||
|
enumerable: false,
|
||
|
value: polyfill,
|
||
|
writable: true
|
||
|
});
|
||
|
}
|
||
|
} else if (typeof globalThis !== 'object' || globalThis !== polyfill) {
|
||
|
polyfill.globalThis = polyfill;
|
||
|
}
|
||
|
return polyfill;
|
||
|
};
|