Index: frontend/node_modules/globalthis/test/implementation.js
===================================================================
--- frontend/node_modules/globalthis/test/implementation.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/globalthis/test/implementation.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+var implementation = require('../implementation');
+var test = require('tape');
+var runTests = require('./tests');
+
+test('implementation', function (t) {
+	runTests(implementation, t);
+
+	t.end();
+});
Index: frontend/node_modules/globalthis/test/index.js
===================================================================
--- frontend/node_modules/globalthis/test/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/globalthis/test/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,11 @@
+'use strict';
+
+var systemGlobal = require('../');
+var test = require('tape');
+var runTests = require('./tests');
+
+test('as a function', function (t) {
+	runTests(systemGlobal(), t);
+
+	t.end();
+});
Index: frontend/node_modules/globalthis/test/native.js
===================================================================
--- frontend/node_modules/globalthis/test/native.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/globalthis/test/native.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,26 @@
+'use strict';
+
+var test = require('tape');
+var defineProperties = require('define-properties');
+var isEnumerable = Object.prototype.propertyIsEnumerable;
+
+var missing = {};
+var theGlobal = typeof globalThis === 'object' ? globalThis : missing;
+
+var runTests = require('./tests');
+
+test('native', { todo: theGlobal === missing }, function (t) {
+	if (theGlobal !== missing) {
+		t.equal(typeof theGlobal, 'object', 'globalThis is an object');
+		t.equal('globalThis' in theGlobal, true, 'globalThis is in globalThis');
+
+		t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) {
+			et.equal(false, isEnumerable.call(theGlobal, 'globalThis'), 'globalThis is not enumerable');
+			et.end();
+		});
+
+		runTests(theGlobal, t);
+	}
+
+	t.end();
+});
Index: frontend/node_modules/globalthis/test/shimmed.js
===================================================================
--- frontend/node_modules/globalthis/test/shimmed.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/globalthis/test/shimmed.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,29 @@
+'use strict';
+
+require('../auto');
+
+var test = require('tape');
+var defineProperties = require('define-properties');
+var isEnumerable = Object.prototype.propertyIsEnumerable;
+
+var runTests = require('./tests');
+
+test('shimmed', function (t) {
+	t.equal(typeof globalThis, 'object', 'globalThis is an object');
+	t.equal('globalThis' in globalThis, true, 'globalThis is in globalThis');
+
+	t.test('enumerability', { skip: !defineProperties.supportsDescriptors }, function (et) {
+		et.equal(false, isEnumerable.call(globalThis, 'globalThis'), 'globalThis.globalThis is not enumerable');
+		et.end();
+	});
+
+	t.test('writability', { skip: !defineProperties.supportsDescriptors }, function (wt) {
+		var desc = Object.getOwnPropertyDescriptor(globalThis, 'globalThis');
+		wt.equal(desc.writable, true, 'globalThis.globalThis is writable');
+		wt.end();
+	});
+
+	runTests(globalThis.globalThis, t);
+
+	t.end();
+});
Index: frontend/node_modules/globalthis/test/tests.js
===================================================================
--- frontend/node_modules/globalthis/test/tests.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/globalthis/test/tests.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,36 @@
+/* jscs:disable requireUseStrict */
+/* eslint strict: 0, max-statements: 0 */
+
+module.exports = function (theGlobal, t) {
+	t.equal(typeof theGlobal, 'object', 'is an object');
+
+	t.test('built-in globals', function (st) {
+		st.equal(theGlobal.Math, Math, 'Math is on the global');
+		st.equal(theGlobal.JSON, JSON, 'JSON is on the global');
+		st.equal(theGlobal.String, String, 'String is on the global');
+		st.equal(theGlobal.Array, Array, 'Array is on the global');
+		st.equal(theGlobal.Number, Number, 'Number is on the global');
+		st.equal(theGlobal.Boolean, Boolean, 'Boolean is on the global');
+		st.equal(theGlobal.Object, Object, 'Object is on the global');
+		st.equal(theGlobal.Function, Function, 'Function is on the global');
+		st.equal(theGlobal.Date, Date, 'Date is on the global');
+		st.equal(theGlobal.RegExp, RegExp, 'RegExp is on the global');
+
+		if (typeof Symbol === 'undefined') {
+			st.comment('# SKIP Symbol is not supported');
+		} else {
+			st.equal(theGlobal.Symbol, Symbol, 'Symbol is on the global');
+		}
+		st.end();
+	});
+
+	t.test('custom property', function (st) {
+		var key = 'random_custom_key_' + new Date().getTime();
+		var semaphore = {};
+		/* eslint no-eval: 1 */
+		eval(key + ' = semaphore;');
+		st.equal(theGlobal[key], semaphore, 'global variable ends up on the global object');
+		delete theGlobal[key]; // eslint-disable-line no-param-reassign
+		st.end();
+	});
+};
