Index: imaps-frontend/node_modules/dunder-proto/test/get.js
===================================================================
--- imaps-frontend/node_modules/dunder-proto/test/get.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/dunder-proto/test/get.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,34 @@
+'use strict';
+
+var test = require('tape');
+
+var getDunderProto = require('../get');
+
+test('getDunderProto', { skip: !getDunderProto }, function (t) {
+	if (!getDunderProto) {
+		throw 'should never happen; this is just for type narrowing'; // eslint-disable-line no-throw-literal
+	}
+
+	// @ts-expect-error
+	t['throws'](function () { getDunderProto(); }, TypeError, 'throws if no argument');
+	// @ts-expect-error
+	t['throws'](function () { getDunderProto(undefined); }, TypeError, 'throws with undefined');
+	// @ts-expect-error
+	t['throws'](function () { getDunderProto(null); }, TypeError, 'throws with null');
+
+	t.equal(getDunderProto({}), Object.prototype);
+	t.equal(getDunderProto([]), Array.prototype);
+	t.equal(getDunderProto(function () {}), Function.prototype);
+	t.equal(getDunderProto(/./g), RegExp.prototype);
+	t.equal(getDunderProto(42), Number.prototype);
+	t.equal(getDunderProto(true), Boolean.prototype);
+	t.equal(getDunderProto('foo'), String.prototype);
+
+	t.end();
+});
+
+test('no dunder proto', { skip: !!getDunderProto }, function (t) {
+	t.notOk('__proto__' in Object.prototype, 'no __proto__ in Object.prototype');
+
+	t.end();
+});
Index: imaps-frontend/node_modules/dunder-proto/test/index.js
===================================================================
--- imaps-frontend/node_modules/dunder-proto/test/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/dunder-proto/test/index.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,4 @@
+'use strict';
+
+require('./get');
+require('./set');
Index: imaps-frontend/node_modules/dunder-proto/test/set.js
===================================================================
--- imaps-frontend/node_modules/dunder-proto/test/set.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
+++ imaps-frontend/node_modules/dunder-proto/test/set.js	(revision 79a03170cdde4e801d12257ee86723774970427b)
@@ -0,0 +1,50 @@
+'use strict';
+
+var test = require('tape');
+
+var setDunderProto = require('../set');
+
+test('setDunderProto', { skip: !setDunderProto }, function (t) {
+	if (!setDunderProto) {
+		throw 'should never happen; this is just for type narrowing'; // eslint-disable-line no-throw-literal
+	}
+
+	// @ts-expect-error
+	t['throws'](function () { setDunderProto(); }, TypeError, 'throws if no arguments');
+	// @ts-expect-error
+	t['throws'](function () { setDunderProto(undefined); }, TypeError, 'throws with undefined and nothing');
+	// @ts-expect-error
+	t['throws'](function () { setDunderProto(undefined, undefined); }, TypeError, 'throws with undefined and undefined');
+	// @ts-expect-error
+	t['throws'](function () { setDunderProto(null); }, TypeError, 'throws with null and undefined');
+	// @ts-expect-error
+	t['throws'](function () { setDunderProto(null, undefined); }, TypeError, 'throws with null and undefined');
+
+	/** @type {{ inherited?: boolean }} */
+	var obj = {};
+	t.ok('toString' in obj, 'object initially has toString');
+
+	setDunderProto(obj, null);
+	t.notOk('toString' in obj, 'object no longer has toString');
+
+	t.notOk('inherited' in obj, 'object lacks inherited property');
+	setDunderProto(obj, { inherited: true });
+	t.equal(obj.inherited, true, 'object has inherited property');
+
+	t.end();
+});
+
+test('no dunder proto', { skip: !!setDunderProto }, function (t) {
+	if ('__proto__' in Object.prototype) {
+		t['throws'](
+			// @ts-expect-error
+			function () { ({}).__proto__ = null; }, // eslint-disable-line no-proto
+			Error,
+			'throws when setting Object.prototype.__proto__'
+		);
+	} else {
+		t.notOk('__proto__' in Object.prototype, 'no __proto__ in Object.prototype');
+	}
+
+	t.end();
+});
