Skip to content

Commit

Permalink
add self
Browse files Browse the repository at this point in the history
  • Loading branch information
zloirock committed Sep 6, 2022
1 parent 2c1e73e commit ebbf949
Show file tree
Hide file tree
Showing 12 changed files with 100 additions and 0 deletions.
9 changes: 9 additions & 0 deletions packages/core-js-compat/src/data.mjs
Expand Up @@ -2508,6 +2508,15 @@ export const data = {
node: '12.0', // '11.0',
safari: '12.1',
},
'web.self': {
chrome: '86',
// https://github.com/denoland/deno/issues/15765
// deno: false,
// fails in early Chrome-based Edge
// edge: '12',
firefox: '31',
safari: '10',
},
'web.set-immediate': {
bun: '0.1.7',
ie: '10',
Expand Down
3 changes: 3 additions & 0 deletions packages/core-js-compat/src/modules-by-versions.mjs
Expand Up @@ -157,4 +157,7 @@ export default {
3.25: [
'es.object.proto',
],
3.26: [
'web.self',
],
};
8 changes: 8 additions & 0 deletions packages/core-js-pure/override/modules/web.self.js
@@ -0,0 +1,8 @@
var $ = require('../internals/export');
var global = require('../internals/global');

// `self` getter
// https://html.spec.whatwg.org/multipage/window-object.html#dom-self
$({ global: true, forced: global.self !== global }, {
self: global
});
3 changes: 3 additions & 0 deletions packages/core-js/actual/self.js
@@ -0,0 +1,3 @@
var parent = require('../stable/self');

module.exports = parent;
3 changes: 3 additions & 0 deletions packages/core-js/full/self.js
@@ -0,0 +1,3 @@
var parent = require('../actual/self');

module.exports = parent;
41 changes: 41 additions & 0 deletions packages/core-js/modules/web.self.js
@@ -0,0 +1,41 @@
'use strict';
var $ = require('../internals/export');
var global = require('../internals/global');
var defineBuiltInAccessor = require('../internals/define-built-in-accessor');
var DESCRIPTORS = require('../internals/descriptors');

var $TypeError = TypeError;
// eslint-disable-next-line es-x/no-object-defineproperty -- safe
var defineProperty = Object.defineProperty;
var INCORRECT_VALUE = global.self !== global;

// `self` getter
// https://html.spec.whatwg.org/multipage/window-object.html#dom-self
try {
if (DESCRIPTORS) {
// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
var descriptor = Object.getOwnPropertyDescriptor(global, '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(global, 'self', {
get: function self() {
return global;
},
set: function self(value) {
if (this !== global) throw $TypeError('Illegal invocation');
defineProperty(global, 'self', {
value: value,
writable: true,
configurable: true,
enumerable: true
});
},
configurable: true,
enumerable: true
});
}
} else $({ global: true, simple: true, forced: INCORRECT_VALUE }, {
self: global
});
} catch (error) { /* empty */ }
4 changes: 4 additions & 0 deletions packages/core-js/stable/self.js
@@ -0,0 +1,4 @@
require('../modules/web.self');
var path = require('../internals/path');

module.exports = path.self;
1 change: 1 addition & 0 deletions packages/core-js/web/index.js
Expand Up @@ -7,6 +7,7 @@ require('../modules/web.dom-exception.stack');
require('../modules/web.dom-exception.to-string-tag');
require('../modules/web.immediate');
require('../modules/web.queue-microtask');
require('../modules/web.self');
require('../modules/web.structured-clone');
require('../modules/web.timers');
require('../modules/web.url');
Expand Down
1 change: 1 addition & 0 deletions tests/commonjs.mjs
Expand Up @@ -584,6 +584,7 @@ for (PATH of ['core-js-pure', 'core-js']) {
ok(typeof load(NS, 'dom-collections').iterator == 'function');
ok(typeof load(NS, 'dom-collections/for-each') == 'function');
ok(typeof load(NS, 'dom-collections/iterator') == 'function');
ok(load(NS, 'self').Math === Math);
ok(typeof load(NS, 'set-timeout') == 'function');
ok(typeof load(NS, 'set-interval') == 'function');
ok(typeof load(NS, 'set-immediate') == 'function');
Expand Down
7 changes: 7 additions & 0 deletions tests/compat/tests.js
Expand Up @@ -1847,6 +1847,13 @@ GLOBAL.tests = {
'web.queue-microtask': function () {
return Object.getOwnPropertyDescriptor(GLOBAL, 'queueMicrotask').value;
},
'web.self': function () {
// eslint-disable-next-line no-restricted-globals -- safe
if (self !== GLOBAL) return false;
if (!DESCRIPTORS_SUPPORT) return true;
var descriptor = Object.getOwnPropertyDescriptor(GLOBAL, 'self');
return descriptor.get && descriptor.enumerable;
},
'web.set-immediate': IMMEDIATE,
'web.set-interval': TIMERS,
'web.set-timeout': TIMERS,
Expand Down
6 changes: 6 additions & 0 deletions tests/pure/web.self.js
@@ -0,0 +1,6 @@
import self from 'core-js-pure/stable/self';

QUnit.test('self', assert => {
assert.same(self, Object(self), 'is object');
assert.same(self.Math, Math, 'contains globals');
});
14 changes: 14 additions & 0 deletions tests/tests/web.self.js
@@ -0,0 +1,14 @@
/* eslint-disable no-restricted-globals -- safe */
import { DESCRIPTORS } from '../helpers/constants';

QUnit.test('self', assert => {
assert.same(self, Object(self), 'is object');
assert.same(self.Math, Math, 'contains globals');
if (DESCRIPTORS) {
const descriptor = Object.getOwnPropertyDescriptor(self, 'self');
// can't be properly defined (non-configurable) in some ancient engines like PhantomJS
// assert.isFunction(descriptor.get, 'a getter');
// assert.true(descriptor.configurable, 'configurable');
assert.true(descriptor.enumerable, 'enumerable');
}
});

0 comments on commit ebbf949

Please sign in to comment.