Index: frontend/node_modules/is-weakmap/.editorconfig
===================================================================
--- frontend/node_modules/is-weakmap/.editorconfig	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/is-weakmap/.editorconfig	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+root = true
+
+[*]
+indent_style = tab
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[{package.json,*.yml}]
+indent_style = space
+indent_size = 2
+
+[*.md]
+trim_trailing_whitespace = false
Index: frontend/node_modules/is-weakmap/.eslintrc
===================================================================
--- frontend/node_modules/is-weakmap/.eslintrc	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/is-weakmap/.eslintrc	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+{
+	"root": true,
+
+	"extends": "@ljharb",
+}
Index: frontend/node_modules/is-weakmap/.github/FUNDING.yml
===================================================================
--- frontend/node_modules/is-weakmap/.github/FUNDING.yml	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/is-weakmap/.github/FUNDING.yml	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/is-weakmap
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
Index: frontend/node_modules/is-weakmap/.nycrc
===================================================================
--- frontend/node_modules/is-weakmap/.nycrc	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/is-weakmap/.nycrc	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,9 @@
+{
+	"all": true,
+	"check-coverage": false,
+	"reporter": ["text-summary", "text", "html", "json"],
+	"exclude": [
+		"coverage",
+		"test"
+	]
+}
Index: frontend/node_modules/is-weakmap/CHANGELOG.md
===================================================================
--- frontend/node_modules/is-weakmap/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/is-weakmap/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,83 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [v2.0.2](https://github.com/inspect-js/is-weakmap/compare/v2.0.1...v2.0.2) - 2024-03-08
+
+### Commits
+
+- [actions] reuse common workflows [`0af1292`](https://github.com/inspect-js/is-weakmap/commit/0af1292f196cb1192acd4cea1b2eef00267a7e35)
+- [Tests] migrate tests to Github Actions [`f35679b`](https://github.com/inspect-js/is-weakmap/commit/f35679bad4f11be0b6e46aae85cbcab14d8a107e)
+- [actions] use `node/install` instead of `node/run`; use `codecov` action [`cd2f0fa`](https://github.com/inspect-js/is-weakmap/commit/cd2f0fa90293650cfdad8b933f976445071b34c9)
+- add types [`6e28e6a`](https://github.com/inspect-js/is-weakmap/commit/6e28e6ab76e9227aefdf39049f261873e5b391b6)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `es6-shim`, `object-inspect`, `tape` [`95815ce`](https://github.com/inspect-js/is-weakmap/commit/95815ce0e51ce37fa799314828ad87e73a08b37d)
+- [readme] update URLs [`2c4eb0b`](https://github.com/inspect-js/is-weakmap/commit/2c4eb0bec14e5015da378a8b6547b2740d7bcff3)
+- [Tests] run `nyc` on all tests; use `tape` runner [`0a45b37`](https://github.com/inspect-js/is-weakmap/commit/0a45b37a18afc28476e39f9fdf0fb42c78a1ff4c)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `object-inspect`, `safe-publish-latest`, `tape` [`ffe9459`](https://github.com/inspect-js/is-weakmap/commit/ffe945997accbae9583f76bd695559b0ba50274d)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `es5-shim`, `object-inspect`, `tape` [`c3c2f11`](https://github.com/inspect-js/is-weakmap/commit/c3c2f1176078dedf5138b7928b539c3a26e72685)
+- [actions] remove redundant finisher [`afa4018`](https://github.com/inspect-js/is-weakmap/commit/afa4018a6759b7c603c7c104a8035295ea6eb2eb)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `auto-changelog`, `core-js`, `es5-shim`, `object-inspect`, `safe-publish-latest`, `tape` [`3f22fc1`](https://github.com/inspect-js/is-weakmap/commit/3f22fc126fc442c020858266af7c46a741638e62)
+- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `es6-shim`, `npmignore`, `object-inspect`, `tape` [`84ba754`](https://github.com/inspect-js/is-weakmap/commit/84ba7549ce1ef2f01d4aae6436b821c52fe49b22)
+- [actions] update rebase action to use reusable workflow [`def85cb`](https://github.com/inspect-js/is-weakmap/commit/def85cb49bff74528f5e13610ca8b823fbb02aae)
+- [actions] update codecov uploader [`659031e`](https://github.com/inspect-js/is-weakmap/commit/659031e04714fe5a0225501a6f2589d8fae0d046)
+- [actions] add "Allow Edits" workflow [`a916e89`](https://github.com/inspect-js/is-weakmap/commit/a916e8952f0ac5091704ce8fd3e7dfd3c265c2e1)
+- [readme] remove travis badge [`01d0c7d`](https://github.com/inspect-js/is-weakmap/commit/01d0c7d19354ac73968be67290b81becfff428cf)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `object-inspect`, `tape` [`ad90d06`](https://github.com/inspect-js/is-weakmap/commit/ad90d063213d305a6c8226f5a45d8991f74eb10a)
+- [meta] use `npmignore` to autogenerate an npmignore file [`8b0b44f`](https://github.com/inspect-js/is-weakmap/commit/8b0b44f77be97b3c6c09c1ff7464a23774dd9ee6)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `es5-shim`, `tape` [`9d8a683`](https://github.com/inspect-js/is-weakmap/commit/9d8a683d23d755fe6d55364d0c7ebee65af572de)
+- [Tests] add `core-js` tests [`8ba8d2b`](https://github.com/inspect-js/is-weakmap/commit/8ba8d2b07b126b5c87a2ba837984337cde9e9ab9)
+- [readme] add actions and codecov badges [`49769ce`](https://github.com/inspect-js/is-weakmap/commit/49769ce6e57edb6a1461b4c786ca3ef7609a7972)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`377dfac`](https://github.com/inspect-js/is-weakmap/commit/377dfac3dfc0ad193a45d1d2bd13c1e5f00194f8)
+- [actions] switch Automatic Rease workflow to `pull_request_target` event [`00f8c17`](https://github.com/inspect-js/is-weakmap/commit/00f8c172d18c929dc6a5b43fe1854a7742200432)
+- [Dev Deps] update `es5-shim`, `tape` [`3a82ee8`](https://github.com/inspect-js/is-weakmap/commit/3a82ee8aff1d5f3c450edac1d4c96d824918d42c)
+- [meta] add missing `engines.node` [`3671b4f`](https://github.com/inspect-js/is-weakmap/commit/3671b4f0b2f07d03c447d2297807c17bbbaf313e)
+- [meta] use `prepublishOnly` script for npm 7+ [`2a5d5ea`](https://github.com/inspect-js/is-weakmap/commit/2a5d5ea541d3a25667a549fbdc95f7969791c7ba)
+- [Dev Deps] update `auto-changelog`; add `aud` [`595583b`](https://github.com/inspect-js/is-weakmap/commit/595583b5a1383ab3768038f8532d87e85d7fa1f2)
+- [readme] remove dead badges [`4d6cb2c`](https://github.com/inspect-js/is-weakmap/commit/4d6cb2cc35abd931e52abc4bc915eafc9d6f74b9)
+- [Tests] run all tests on `npm test` [`9da2487`](https://github.com/inspect-js/is-weakmap/commit/9da24874b64807159d1f80add60804ccf32ac84a)
+- [Tests] only audit prod deps [`2f9281a`](https://github.com/inspect-js/is-weakmap/commit/2f9281aa6fc26b15353515a089f2a312cf48b081)
+- [meta] add `sideEffects` flag [`b9c8797`](https://github.com/inspect-js/is-weakmap/commit/b9c87974922c16768f1cf11bf450ca7d5dc55ef9)
+
+## [v2.0.1](https://github.com/inspect-js/is-weakmap/compare/v2.0.0...v2.0.1) - 2019-12-17
+
+### Fixed
+
+- [Refactor] avoid top-level return, because babel and webpack are broken [`#79`](https://github.com/inspect-js/node-deep-equal/issues/79) [`#78`](https://github.com/inspect-js/node-deep-equal/issues/78) [`#7`](https://github.com/es-shims/Promise.allSettled/issues/7) [`#12`](https://github.com/airbnb/js-shims/issues/12)
+
+### Commits
+
+- [actions] add automatic rebasing / merge commit blocking [`4fa3010`](https://github.com/inspect-js/is-weakmap/commit/4fa301026787589c5a061072fda64b11d65bda18)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`44bafb6`](https://github.com/inspect-js/is-weakmap/commit/44bafb65829d687fcf8205d0c451cc407d96463c)
+
+## [v2.0.0](https://github.com/inspect-js/is-weakmap/compare/v1.0.1...v2.0.0) - 2019-11-12
+
+### Commits
+
+- Initial commit [`6e9bd4a`](https://github.com/inspect-js/is-weakmap/commit/6e9bd4a0d61deadbf40d9875033ebdf430924236)
+- Tests [`61985dd`](https://github.com/inspect-js/is-weakmap/commit/61985ddf042687f2c6d8c884200f576e9cc0f29d)
+- implementation [`67b468d`](https://github.com/inspect-js/is-weakmap/commit/67b468db3390671c14ad656d3489e7422151b2bf)
+- readme [`b0ed982`](https://github.com/inspect-js/is-weakmap/commit/b0ed9826547c25cfe2ed0c6e1258d407cb76e6f4)
+- npm init [`54a1f81`](https://github.com/inspect-js/is-weakmap/commit/54a1f815702bde057a83d6bc0d69816c3644d698)
+- [meta] add `funding` field; create `FUNDING.yml` [`74579bc`](https://github.com/inspect-js/is-weakmap/commit/74579bc96345f9d15392b384d765204f398fb3c3)
+- [meta] add `safe-publish-latest`, `auto-changelog` [`9495b13`](https://github.com/inspect-js/is-weakmap/commit/9495b13cea989c344fbb5747f1471feb24f35959)
+- [Tests] add `npm run lint` [`4d4657d`](https://github.com/inspect-js/is-weakmap/commit/4d4657d396ec9e2b6625b937fcc8794bd5583fd3)
+- [Tests] use shared travis-ci configs [`1db25d5`](https://github.com/inspect-js/is-weakmap/commit/1db25d515fa042c39828c3cbfac65667722a679b)
+- Only apps should have lockfiles [`f6b0152`](https://github.com/inspect-js/is-weakmap/commit/f6b015293a4702c9cb7672a364d725ae6cc8bca8)
+- [Tests] add `npx aud` in `posttest` [`35dce96`](https://github.com/inspect-js/is-weakmap/commit/35dce964f73ef11237d12b0759468526e0e628a2)
+
+## [v1.0.1](https://github.com/inspect-js/is-weakmap/compare/v1.0.0...v1.0.1) - 2015-08-31
+
+### Commits
+
+- Add XO [`180fb3e`](https://github.com/inspect-js/is-weakmap/commit/180fb3edf1ab1a2a449bdf5fae5911115d804f44)
+- tweaks [`b0d7b30`](https://github.com/inspect-js/is-weakmap/commit/b0d7b307d191513ee6fae80dda81db4bfe9ace00)
+- Add `related` section to readme [`5644247`](https://github.com/inspect-js/is-weakmap/commit/5644247240a74bc19ea2791f0b609a98a4af5f9f)
+
+## v1.0.0 - 2015-02-18
+
+### Commits
+
+- init [`837063d`](https://github.com/inspect-js/is-weakmap/commit/837063d1ac83ce194eda9135562113c035df4346)
Index: frontend/node_modules/is-weakmap/LICENSE
===================================================================
--- frontend/node_modules/is-weakmap/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/is-weakmap/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Inspect JS
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
Index: frontend/node_modules/is-weakmap/README.md
===================================================================
--- frontend/node_modules/is-weakmap/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/is-weakmap/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,50 @@
+# is-weakmap <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
+
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][npm-badge-png]][package-url]
+
+Is this value a JS WeakMap? This module works cross-realm/iframe, and despite ES6 @@toStringTag.
+
+## Example
+
+```js
+var isWeakMap = require('is-weakmap');
+assert(!isWeakMap(function () {}));
+assert(!isWeakMap(null));
+assert(!isWeakMap(function* () { yield 42; return Infinity; });
+assert(!isWeakMap(Symbol('foo')));
+assert(!isWeakMap(1n));
+assert(!isWeakMap(Object(1n)));
+
+assert(!isWeakMap(new Set()));
+assert(!isWeakMap(new WeakSet()));
+assert(!isWeakMap(new Map()));
+
+assert(isWeakMap(new WeakMap()));
+
+class MyWeakMap extends WeakMap {}
+assert(isWeakMap(new MyWeakMap()));
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[package-url]: https://npmjs.org/package/is-weakmap
+[npm-version-svg]: https://versionbadg.es/inspect-js/is-weakmap.svg
+[deps-svg]: https://david-dm.org/inspect-js/is-weakmap.svg
+[deps-url]: https://david-dm.org/inspect-js/is-weakmap
+[dev-deps-svg]: https://david-dm.org/inspect-js/is-weakmap/dev-status.svg
+[dev-deps-url]: https://david-dm.org/inspect-js/is-weakmap#info=devDependencies
+[npm-badge-png]: https://nodei.co/npm/is-weakmap.png?downloads=true&stars=true
+[license-image]: https://img.shields.io/npm/l/is-weakmap.svg
+[license-url]: LICENSE
+[downloads-image]: https://img.shields.io/npm/dm/is-weakmap.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=is-weakmap
+[codecov-image]: https://codecov.io/gh/inspect-js/is-weakmap/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/inspect-js/is-weakmap/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-weakmap
+[actions-url]: https://github.com/inspect-js/is-weakmap/actions
Index: frontend/node_modules/is-weakmap/index.d.ts
===================================================================
--- frontend/node_modules/is-weakmap/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/is-weakmap/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,3 @@
+declare function isWeakMap<K extends WeakKey = object, V = unknown>(value: unknown): value is WeakMap<K, V>;
+
+export = isWeakMap;
Index: frontend/node_modules/is-weakmap/index.js
===================================================================
--- frontend/node_modules/is-weakmap/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/is-weakmap/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,46 @@
+'use strict';
+
+var $WeakMap = typeof WeakMap === 'function' && WeakMap.prototype ? WeakMap : null;
+var $WeakSet = typeof WeakSet === 'function' && WeakSet.prototype ? WeakSet : null;
+
+var exported;
+
+if (!$WeakMap) {
+	/** @type {import('.')} */
+	// eslint-disable-next-line no-unused-vars
+	exported = function isWeakMap(x) {
+		// `WeakMap` is not present in this environment.
+		return false;
+	};
+}
+
+var $mapHas = $WeakMap ? $WeakMap.prototype.has : null;
+var $setHas = $WeakSet ? $WeakSet.prototype.has : null;
+if (!exported && !$mapHas) {
+	/** @type {import('.')} */
+	// eslint-disable-next-line no-unused-vars
+	exported = function isWeakMap(x) {
+		// `WeakMap` does not have a `has` method
+		return false;
+	};
+}
+
+/** @type {import('.')} */
+module.exports = exported || function isWeakMap(x) {
+	if (!x || typeof x !== 'object') {
+		return false;
+	}
+	try {
+		$mapHas.call(x, $mapHas);
+		if ($setHas) {
+			try {
+				$setHas.call(x, $setHas);
+			} catch (e) {
+				return true;
+			}
+		}
+		// @ts-expect-error TS can't figure out that $WeakMap is always truthy here
+		return x instanceof $WeakMap; // core-js workaround, pre-v3
+	} catch (e) {}
+	return false;
+};
Index: frontend/node_modules/is-weakmap/package.json
===================================================================
--- frontend/node_modules/is-weakmap/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/is-weakmap/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,81 @@
+{
+	"name": "is-weakmap",
+	"version": "2.0.2",
+	"description": "Is this value a JS WeakMap? This module works cross-realm/iframe, and despite ES6 @@toStringTag.",
+	"main": "index.js",
+	"sideEffects": true,
+	"scripts": {
+		"prepack": "npmignore --auto --commentLines=autogenerated",
+		"version": "auto-changelog && git add CHANGELOG.md",
+		"postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"",
+		"prepublishOnly": "safe-publish-latest",
+		"prepublish": "not-in-publish || npm run prepublishOnly",
+		"pretest": "npm run lint",
+		"lint": "eslint --ext=js,mjs .",
+		"postlint": "tsc -p . && attw -P",
+		"tests-only": "nyc tape 'test/**/*.js'",
+		"tests:shims": "nyc tape --require=es5-shim --require=es5-shim 'test/**/*.js'",
+		"tests:corejs": "nyc tape --require=core-js 'test/**/*.js'",
+		"test": "npm run tests-only && npm run tests:shims && npm run tests:corejs",
+		"posttest": "aud --production"
+	},
+	"repository": {
+		"type": "git",
+		"url": "git+https://github.com/inspect-js/is-weakmap.git"
+	},
+	"keywords": [
+		"map",
+		"weakmap",
+		"set",
+		"weakset",
+		"collection",
+		"is",
+		"robust"
+	],
+	"author": "Jordan Harband <ljharb@gmail.com>",
+	"funding": {
+		"url": "https://github.com/sponsors/ljharb"
+	},
+	"license": "MIT",
+	"bugs": {
+		"url": "https://github.com/inspect-js/is-weakmap/issues"
+	},
+	"homepage": "https://github.com/inspect-js/is-weakmap#readme",
+	"devDependencies": {
+		"@arethetypeswrong/cli": "^0.15.0",
+		"@ljharb/eslint-config": "^21.1.0",
+		"@types/for-each": "^0.3.3",
+		"@types/object-inspect": "^1.8.4",
+		"@types/tape": "^5.6.4",
+		"aud": "^2.0.4",
+		"auto-changelog": "^2.4.0",
+		"core-js": "^2.6.12",
+		"es5-shim": "^4.6.7",
+		"es6-shim": "^0.35.8",
+		"eslint": "=8.8.0",
+		"for-each": "^0.3.3",
+		"in-publish": "^2.0.1",
+		"npmignore": "^0.3.1",
+		"nyc": "^10.3.2",
+		"object-inspect": "^1.13.1",
+		"safe-publish-latest": "^2.0.0",
+		"tape": "^5.7.5",
+		"typescript": "next"
+	},
+	"auto-changelog": {
+		"output": "CHANGELOG.md",
+		"template": "keepachangelog",
+		"unreleased": false,
+		"commitLimit": false,
+		"backfillLimit": false,
+		"hideCredit": true
+	},
+	"publishConfig": {
+		"ignore": [
+			".github/workflows"
+		]
+	},
+	"engines": {
+		"node": ">= 0.4"
+	}
+}
Index: frontend/node_modules/is-weakmap/test/index.js
===================================================================
--- frontend/node_modules/is-weakmap/test/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/is-weakmap/test/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,59 @@
+'use strict';
+
+var test = require('tape');
+var debug = require('object-inspect');
+var forEach = require('for-each');
+
+var isWeakMap = require('..');
+
+test('non-collections', function (t) {
+	forEach([
+		null,
+		undefined,
+		true,
+		false,
+		42,
+		0,
+		-0,
+		NaN,
+		Infinity,
+		'',
+		'foo',
+		/a/g,
+		[],
+		{},
+		function () {}
+	], function (nonCollection) {
+		t.equal(isWeakMap(nonCollection), false, debug(nonCollection) + ' is not a WeakMap');
+	});
+
+	t.end();
+});
+
+test('Maps', { skip: typeof Map !== 'function' }, function (t) {
+	var m = new Map();
+	t.equal(isWeakMap(m), false, debug(m) + ' is not a WeakMap');
+
+	t.end();
+});
+
+test('Sets', { skip: typeof Set !== 'function' }, function (t) {
+	var s = new Set();
+	t.equal(isWeakMap(s), false, debug(s) + ' is not a WeakMap');
+
+	t.end();
+});
+
+test('WeakMaps', { skip: typeof WeakMap !== 'function' }, function (t) {
+	var wm = new WeakMap();
+	t.equal(isWeakMap(wm), true, debug(wm) + ' is a WeakMap');
+
+	t.end();
+});
+
+test('WeakSets', { skip: typeof WeakSet !== 'function' }, function (t) {
+	var ws = new WeakSet();
+	t.equal(isWeakMap(ws), false, debug(ws) + ' is not a WeakMap');
+
+	t.end();
+});
Index: frontend/node_modules/is-weakmap/tsconfig.json
===================================================================
--- frontend/node_modules/is-weakmap/tsconfig.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/is-weakmap/tsconfig.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,49 @@
+{
+  "compilerOptions": {
+    /* Visit https://aka.ms/tsconfig to read more about this file */
+
+    /* Projects */
+
+    /* Language and Environment */
+    "target": "ESNext",                                  /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
+    // "lib": [],                                        /* Specify a set of bundled library declaration files that describe the target runtime environment. */
+    // "noLib": true,                                    /* Disable including any library files, including the default lib.d.ts. */
+    "useDefineForClassFields": true,                     /* Emit ECMAScript-standard-compliant class fields. */
+    // "moduleDetection": "auto",                        /* Control what method is used to detect module-format JS files. */
+
+    /* Modules */
+    "module": "commonjs",                                /* Specify what module code is generated. */
+    // "rootDir": "./",                                  /* Specify the root folder within your source files. */
+    // "moduleResolution": "node10",                     /* Specify how TypeScript looks up a file from a given module specifier. */
+    // "baseUrl": "./",                                  /* Specify the base directory to resolve non-relative module names. */
+    // "paths": {},                                      /* Specify a set of entries that re-map imports to additional lookup locations. */
+    // "rootDirs": [],                                   /* Allow multiple folders to be treated as one when resolving modules. */
+    "typeRoots": ["types"],                              /* Specify multiple folders that act like './node_modules/@types'. */
+    "resolveJsonModule": true,                           /* Enable importing .json files. */
+    // "allowArbitraryExtensions": true,                 /* Enable importing files with any extension, provided a declaration file is present. */
+
+    /* JavaScript Support */
+    "allowJs": true,                                     /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
+    "checkJs": true,                                     /* Enable error reporting in type-checked JavaScript files. */
+    "maxNodeModuleJsDepth": 0,                           /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
+
+    /* Emit */
+    "declaration": true,                                 /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
+    "declarationMap": true,                              /* Create sourcemaps for d.ts files. */
+    "noEmit": true,                                      /* Disable emitting files from a compilation. */
+
+    /* Interop Constraints */
+    "allowSyntheticDefaultImports": true,                /* Allow 'import x from y' when a module doesn't have a default export. */
+    "esModuleInterop": true,                             /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
+    "forceConsistentCasingInFileNames": true,            /* Ensure that casing is correct in imports. */
+
+    /* Type Checking */
+    "strict": true,                                      /* Enable all strict type-checking options. */
+
+    /* Completeness */
+    //"skipLibCheck": true                                 /* Skip type checking all .d.ts files. */
+  },
+  "exclude": [
+    "coverage"
+  ]
+}
