Index: frontend/node_modules/babel-plugin-macros/CHANGELOG.md
===================================================================
--- frontend/node_modules/babel-plugin-macros/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/babel-plugin-macros/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+# CHANGELOG
+
+The changelog is automatically updated using
+[semantic-release](https://github.com/semantic-release/semantic-release). You
+can see it on the [releases page](../../releases).
Index: frontend/node_modules/babel-plugin-macros/LICENSE
===================================================================
--- frontend/node_modules/babel-plugin-macros/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/babel-plugin-macros/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+Copyright (c) 2020 Kent C. Dodds
+
+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/babel-plugin-macros/README.md
===================================================================
--- frontend/node_modules/babel-plugin-macros/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/babel-plugin-macros/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,457 @@
+<div align="center">
+<h1>babel-plugin-macros 🎣</h1>
+
+<p>Allows you to build simple compile-time libraries</p>
+</div>
+
+---
+
+<!-- prettier-ignore-start -->
+[![Build Status][build-badge]][build]
+[![Code Coverage][coverage-badge]][coverage]
+[![version][version-badge]][package]
+[![downloads][downloads-badge]][npmtrends]
+[![MIT License][license-badge]][license]
+[![All Contributors][all-contributors-badge]](#contributors-)
+[![PRs Welcome][prs-badge]][prs]
+[![Code of Conduct][coc-badge]][coc]
+<!-- prettier-ignore-end -->
+
+## The problem
+
+Check out
+[this guest post](https://babeljs.io/blog/2017/09/11/zero-config-with-babel-macros)
+on the Babel.js blog for a complete write up on the problem, motivation, and
+solution.
+
+Currently, each babel plugin in the babel ecosystem requires that you configure
+it individually. This is fine for things like language features, but can be
+frustrating overhead for libraries that allow for compile-time code
+transformation as an optimization.
+
+## This solution
+
+babel-plugin-macros defines a standard interface for libraries that want to use
+compile-time code transformation without requiring the user to add a babel
+plugin to their build system (other than `babel-plugin-macros`, which is ideally
+already in place).
+
+<details>
+
+<summary>Expand for more details on the motivation</summary>
+
+For instance, many css-in-js libraries have a css tagged template string
+function:
+
+```js
+const styles = css`
+  .red {
+    color: red;
+  }
+`
+```
+
+The function compiles your css into (for example) an object with generated class
+names for each of the classes you defined in your css:
+
+```js
+console.log(styles) // { red: "1f-d34j8rn43y587t" }
+```
+
+This class name can be generated at runtime (in the browser), but this has some
+disadvantages:
+
+- There is cpu usage/time overhead; the client needs to run the code to generate
+  these classes every time the page loads
+- There is code bundle size overhead; the client needs to receive a CSS parser
+  in order to generate these class names, and shipping this makes the amount of
+  js the client needs to parse larger.
+
+To help solve those issues, many css-in-js libraries write their own babel
+plugin that generates the class names at compile-time instead of runtime:
+
+```js
+// Before running through babel:
+const styles = css`
+  .red {
+    color: red;
+  }
+`
+// After running through babel, with the library-specific plugin:
+const styles = {red: '1f-d34j8rn43y587t'}
+```
+
+If the css-in-js library supported babel-plugin-macros instead, then they
+wouldn't need their own babel plugin to compile these out; they could instead
+rely on babel-plugin-macros to do it for them. So if a user already had
+`babel-plugin-macros` installed and configured with babel, then they wouldn't
+need to change their babel configuration to get the compile-time benefits of the
+library. This would be most useful if the boilerplate they were using came with
+`babel-plugin-macros` out of the box, which is true for
+[`create-react-app`][cra].
+
+Although css-in-js is the most common example, there are lots of other things
+you could use `babel-plugin-macros` for, like:
+
+- Compiling GraphQL fragments into objects so that the client doesn't need a
+  GraphQL parser
+- Eval-ing out code at compile time that will be baked into the runtime code,
+  for instance to get a list of directories in the filesystem (see
+  [preval][preval])
+
+</details>
+
+## Table of Contents
+
+<!-- START doctoc generated TOC please keep comment here to allow auto update -->
+<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
+
+- [Installation](#installation)
+- [Usage](#usage)
+  - [User docs](#user-docs)
+  - [Author docs](#author-docs)
+  - [Caveats](#caveats)
+- [FAQ](#faq)
+  - [How do I find available macros?](#how-do-i-find-available-macros)
+  - [What's the difference between babel plugins and macros?](#whats-the-difference-between-babel-plugins-and-macros)
+  - [In what order are macros executed?](#in-what-order-are-macros-executed)
+  - [Does it work with function calls only?](#does-it-work-with-function-calls-only)
+  - [How about implicit optimizations at compile time?](#how-about-implicit-optimizations-at-compile-time)
+- [Inspiration](#inspiration)
+- [Other Solutions](#other-solutions)
+- [Issues](#issues)
+  - [🐛 Bugs](#-bugs)
+  - [💡 Feature Requests](#-feature-requests)
+- [Contributors ✨](#contributors-)
+- [LICENSE](#license)
+
+<!-- END doctoc generated TOC please keep comment here to allow auto update -->
+
+## Installation
+
+This module is distributed via [npm][npm] which is bundled with [node][node] and
+should be installed as one of your project's `devDependencies`:
+
+```
+npm install --save-dev babel-plugin-macros
+```
+
+## Usage
+
+> You may like to watch
+> [this YouTube video](https://www.youtube.com/watch?v=1queadQ0048&list=PLV5CVI1eNcJgCrPH_e6d57KRUTiDZgs0u)
+> to get an idea of what macros is and how it can be used.
+
+### User docs
+
+Are you trying to use `babel-plugin-macros`? Go to
+[`other/docs/user.md`](other/docs/user.md).
+
+### Author docs
+
+Are you trying to make your own macros that works with `babel-plugin-macros`? Go
+to [`other/docs/author.md`](other/docs/author.md). (you should probably read the
+user docs too).
+
+### Caveats
+
+#### Babel cache problem
+
+> **Note:** This issue is not present when used in Create React App.
+
+Most of the time you'll probably be using this with the babel cache enabled in
+webpack to rebuild faster. If your macro function is **not pure** which gets
+different output with same code (e.g., IO side effects) it will cause recompile
+mechanism fail. Unfortunately you'll also experience this problem while
+developing your macro as well. If there's not a change to the source code that's
+being transpiled, then babel will use the cache rather than running your macro
+again.
+
+For now, to force recompile the code you can simply add a cache busting comment
+in the file:
+
+```diff
+import macro from 'non-pure.macro';
+
+-// Do some changes of your code or
++// add a cache busting comment to force recompile.
+macro('parameters');
+```
+
+This problem is still being worked on and is not unique to
+`babel-plugin-macros`. For more details and workarounds, please check related
+issues below:
+
+- babel-plugin-preval:
+  [How to force recompile? #19](https://github.com/kentcdodds/babel-plugin-preval/issues/19)
+- graphql.macro:
+  [Recompile problem (babel cache) #6](https://github.com/evenchange4/graphql.macro/issues/6)
+- twin.macro: 
+  [Can't change taliwind config #37](https://github.com/ben-rogerson/twin.macro/discussions/37)
+
+## FAQ
+
+### How do I find available macros?
+
+You can write your own without publishing them to `npm`, but if you'd like to
+see existing macros you can add to your project, then take a look at the
+[Awesome babel macros](https://github.com/jgierer12/awesome-babel-macros)
+repository.
+
+Please add any you don't see listed!
+
+### What's the difference between babel plugins and macros?
+
+Let's use
+[`babel-plugin-console`](https://www.npmjs.com/package/babel-plugin-console) as
+an example.
+
+If we used `babel-plugin-console`, it would look like this:
+
+1.  Add `babel-plugin-console` to `.babelrc`
+2.  Use it in a code:
+
+```js
+function add100(a) {
+  const oneHundred = 100
+  console.scope('Add 100 to another number')
+  return add(a, oneHundred)
+}
+
+function add(a, b) {
+  return a + b
+}
+```
+
+When that code is run, the `scope` function does some pretty nifty things:
+
+**Browser:**
+
+![Browser console scoping add100](https://github.com/mattphillips/babel-plugin-console/raw/53536cba919d5be49d4f66d957769c07ca7a4207/assets/add100-chrome.gif)
+
+**Node:**
+
+<img alt="Node console scoping add100" src="https://github.com/mattphillips/babel-plugin-console/raw/53536cba919d5be49d4f66d957769c07ca7a4207/assets/add100-node.png" width="372" />
+
+Instead, let's use the macro it's shipped with like this:
+
+1.  Add `babel-plugin-macros` to `.babelrc` (only once for all macros)
+2.  Use it in a code:
+
+```js
+import scope from 'babel-plugin-console/scope.macro'
+function add100(a) {
+  const oneHundred = 100
+  scope('Add 100 to another number')
+  return add(a, oneHundred)
+}
+
+function add(a, b) {
+  return a + b
+}
+```
+
+The result is exactly the same, but this approach has a few advantages:
+
+**Advantages:**
+
+- requires only one entry in `.babelrc` for all macros used in project. Add that
+  once and you can use all the macros you want
+- toolkits (like [create-react-app][cra]) may already support
+  `babel-plugin-macros`, so no configuration is needed at all
+- it's explicit. With `console.scope` people may be fooled that it's just a
+  normal `console` API when there's really a babel transpilation going on. When
+  you import `scope`, it's obvious that it's macro and does something with the
+  code at compile time. Some ESLint rules may also have issues with plugins that
+  look for "global" variables
+- macros are safer and easier to write, because they receive exactly the AST
+  node to process
+- If you misconfigure `babel-plugin-console` you wont find out until you run the
+  code. If you misconfigure `babel-plugin-macros` you'll get a compile-time
+  error.
+
+**Drawbacks:**
+
+- Cannot (should not) be used for implicit transpilations (like syntax plugins)
+- Explicitness is more verbose. Which some people might consider a drawback...
+
+### In what order are macros executed?
+
+This is another advantage of `babel-plugin-macros` over regular plugins. The
+user of the macro is in control of the ordering! The order of execution is the
+same order as imported. The order of execution is clear, explicit and in full
+control of the user:
+
+```js
+import preval from 'preval.macro'
+import idx from 'idx.macro'
+
+// preval macro is evaluated first, then idx
+```
+
+This differs from the current situation with babel plugins where it's
+prohibitively difficult to control the order plugins run in a particular file.
+
+### Does it work with function calls only?
+
+No! Any AST node type is supported.
+
+It can be tagged template literal:
+
+```js
+import eval from 'eval.macro'
+const val = eval`7 * 6`
+```
+
+A function:
+
+```js
+import eval from 'eval.macro'
+const val = eval('7 * 6')
+```
+
+JSX Element:
+
+```js
+import Eval from 'eval.macro'
+const val = <Eval>7 * 6</Eval>
+```
+
+Really, anything...
+
+See the [testing snapshot](src/__tests__/__snapshots__/index.js.snap) for more
+examples.
+
+### How about implicit optimizations at compile time?
+
+All examples above were _explicit_ - a macro was imported and then evaluated
+with a specific AST node.
+
+Completely different story are _implicit_ babel plugins, like
+[transform-react-constant-elements](https://babeljs.io/docs/plugins/transform-react-constant-elements/),
+which process whole AST tree.
+
+Explicit is often a better pattern than implicit because it requires others to
+understand how things are globally configured. This is in this spirit are
+`babel-plugin-macros` designed. However, some things _do_ need to be implicit,
+and those kinds of babel plugins can't be turned into macros.
+
+## Inspiration
+
+- [threepointone/babel-plugin-macros](https://github.com/threepointone/babel-plugin-macros)
+- [facebookincubator/create-react-app#2730][cra-issue]
+
+Thank you to [@phpnode](https://github.com/phpnode) for donating the npm package
+`babel-plugin-macros`.
+
+## Other Solutions
+
+- [sweetjs](http://sweetjs.org/)
+
+## Issues
+
+_Looking to contribute? Look for the [Good First Issue][good-first-issue]
+label._
+
+### 🐛 Bugs
+
+Please file an issue for bugs, missing documentation, or unexpected behavior.
+
+[**See Bugs**][bugs]
+
+### 💡 Feature Requests
+
+Please file an issue to suggest new features. Vote on feature requests by adding
+a 👍. This helps maintainers prioritize what to work on.
+
+[**See Feature Requests**][requests]
+
+## Contributors ✨
+
+Thanks goes to these people ([emoji key][emojis]):
+
+<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
+<!-- prettier-ignore-start -->
+<!-- markdownlint-disable -->
+<table>
+  <tr>
+    <td align="center"><a href="https://kentcdodds.com"><img src="https://avatars.githubusercontent.com/u/1500684?v=3?s=100" width="100px;" alt=""/><br /><sub><b>Kent C. Dodds</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=kentcdodds" title="Code">💻</a> <a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=kentcdodds" title="Documentation">📖</a> <a href="#infra-kentcdodds" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=kentcdodds" title="Tests">⚠️</a></td>
+    <td align="center"><a href="https://github.com/threepointone"><img src="https://avatars1.githubusercontent.com/u/18808?v=3?s=100" width="100px;" alt=""/><br /><sub><b>Sunil Pai</b></sub></a><br /><a href="#ideas-threepointone" title="Ideas, Planning, & Feedback">🤔</a></td>
+    <td align="center"><a href="http://suchipi.com"><img src="https://avatars0.githubusercontent.com/u/1341513?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Lily Scott</b></sub></a><br /><a href="#question-suchipi" title="Answering Questions">💬</a> <a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=suchipi" title="Documentation">📖</a></td>
+    <td align="center"><a href="http://twitter.com/dralletje"><img src="https://avatars1.githubusercontent.com/u/767261?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Michiel Dral</b></sub></a><br /><a href="#ideas-dralletje" title="Ideas, Planning, & Feedback">🤔</a></td>
+    <td align="center"><a href="https://github.com/tkh44"><img src="https://avatars2.githubusercontent.com/u/662750?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kye Hohenberger</b></sub></a><br /><a href="#ideas-tkh44" title="Ideas, Planning, & Feedback">🤔</a></td>
+    <td align="center"><a href="https://hamil.town"><img src="https://avatars1.githubusercontent.com/u/11481355?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Mitchell Hamilton</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=mitchellhamilton" title="Code">💻</a> <a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=mitchellhamilton" title="Tests">⚠️</a></td>
+    <td align="center"><a href="https://github.com/wKovacs64"><img src="https://avatars1.githubusercontent.com/u/1288694?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Justin Hall</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=wKovacs64" title="Documentation">📖</a></td>
+  </tr>
+  <tr>
+    <td align="center"><a href="https://github.com/PiereDome"><img src="https://avatars3.githubusercontent.com/u/1903016?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Brian Pedersen</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=PiereDome" title="Code">💻</a> <a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=PiereDome" title="Documentation">📖</a></td>
+    <td align="center"><a href="https://github.com/apalm"><img src="https://avatars3.githubusercontent.com/u/4495237?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrew Palm</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=apalm" title="Code">💻</a></td>
+    <td align="center"><a href="https://michaelhsu.tw/"><img src="https://avatars1.githubusercontent.com/u/1527371?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Michael Hsu</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=evenchange4" title="Documentation">📖</a> <a href="#plugin-evenchange4" title="Plugin/utility libraries">🔌</a></td>
+    <td align="center"><a href="https://github.com/citycide"><img src="https://avatars2.githubusercontent.com/u/16605186?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Bo Lingen</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=citycide" title="Code">💻</a></td>
+    <td align="center"><a href="https://github.com/tylerthehaas"><img src="https://avatars1.githubusercontent.com/u/11150235?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tyler Haas</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=tylerthehaas" title="Documentation">📖</a></td>
+    <td align="center"><a href="https://github.com/FWeinb"><img src="https://avatars0.githubusercontent.com/u/1250430?v=4?s=100" width="100px;" alt=""/><br /><sub><b>FWeinb</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=FWeinb" title="Code">💻</a></td>
+    <td align="center"><a href="http://www.tomasehrlich.cz"><img src="https://avatars2.githubusercontent.com/u/827862?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tomáš Ehrlich</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/issues?q=author%3Atricoder42" title="Bug reports">🐛</a> <a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=tricoder42" title="Code">💻</a></td>
+  </tr>
+  <tr>
+    <td align="center"><a href="https://github.com/jgierer12"><img src="https://avatars0.githubusercontent.com/u/4331946?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jonas Gierer</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=jgierer12" title="Documentation">📖</a></td>
+    <td align="center"><a href="http://loicpadier.com"><img src="https://avatars2.githubusercontent.com/u/4009640?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Loïc Padier</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=lPadier" title="Code">💻</a></td>
+    <td align="center"><a href="https://www.pshrmn.com"><img src="https://avatars0.githubusercontent.com/u/1127037?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Paul Sherman</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=pshrmn" title="Code">💻</a></td>
+    <td align="center"><a href="http://burningpotato.com"><img src="https://avatars1.githubusercontent.com/u/540777?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Conrad Buck</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=conartist6" title="Code">💻</a> <a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=conartist6" title="Tests">⚠️</a> <a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=conartist6" title="Documentation">📖</a></td>
+    <td align="center"><a href="https://github.com/InvictusMB"><img src="https://avatars3.githubusercontent.com/u/3091209?v=4?s=100" width="100px;" alt=""/><br /><sub><b>InvictusMB</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=InvictusMB" title="Tests">⚠️</a></td>
+    <td align="center"><a href="https://codefund.io"><img src="https://avatars2.githubusercontent.com/u/12481?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Eric Berry</b></sub></a><br /><a href="#fundingFinding-coderberry" title="Funding Finding">🔍</a></td>
+    <td align="center"><a href="http://futagoza.github.io/"><img src="https://avatars1.githubusercontent.com/u/1943570?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Futago-za Ryuu</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=futagoza" title="Code">💻</a> <a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=futagoza" title="Tests">⚠️</a></td>
+  </tr>
+  <tr>
+    <td align="center"><a href="https://luc.im"><img src="https://avatars3.githubusercontent.com/u/6616955?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Luc</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=lucleray" title="Code">💻</a></td>
+    <td align="center"><a href="http://wintercounter.me"><img src="https://avatars2.githubusercontent.com/u/963776?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Victor Vincent</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=wintercounter" title="Code">💻</a></td>
+    <td align="center"><a href="http://mvasilkov.ovh"><img src="https://avatars3.githubusercontent.com/u/140257?v=4?s=100" width="100px;" alt=""/><br /><sub><b>я котик пур-пур</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=mvasilkov" title="Documentation">📖</a></td>
+    <td align="center"><a href="http://armandososa.com"><img src="https://avatars0.githubusercontent.com/u/139577?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Armando Sosa</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=soska" title="Documentation">📖</a></td>
+    <td align="center"><a href="https://github.com/matvp91"><img src="https://avatars3.githubusercontent.com/u/12699796?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Matthias</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=matvp91" title="Code">💻</a></td>
+    <td align="center"><a href="https://www.jovidecroock.com/"><img src="https://avatars3.githubusercontent.com/u/17125876?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jovi De Croock</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=JoviDeCroock" title="Code">💻</a> <a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=JoviDeCroock" title="Tests">⚠️</a></td>
+    <td align="center"><a href="http://victorarowo.com"><img src="https://avatars0.githubusercontent.com/u/25545108?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Victor Arowo</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=VictorArowo" title="Documentation">📖</a></td>
+  </tr>
+  <tr>
+    <td align="center"><a href="https://twitter.com/alexandermchan"><img src="https://avatars.githubusercontent.com/u/1864372?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Alex Chan</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=alexanderchan" title="Documentation">📖</a></td>
+    <td align="center"><a href="https://probablyup.com"><img src="https://avatars.githubusercontent.com/u/570070?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Evan Jacobs</b></sub></a><br /><a href="https://github.com/kentcdodds/babel-plugin-macros/commits?author=probablyup" title="Code">💻</a></td>
+  </tr>
+</table>
+
+<!-- markdownlint-restore -->
+<!-- prettier-ignore-end -->
+
+<!-- ALL-CONTRIBUTORS-LIST:END -->
+
+This project follows the [all-contributors][all-contributors] specification.
+Contributions of any kind welcome!
+
+## LICENSE
+
+MIT
+
+<!-- prettier-ignore-start -->
+[npm]: https://www.npmjs.com
+[node]: https://nodejs.org
+[build-badge]: https://img.shields.io/github/workflow/status/kentcdodds/babel-plugin-macros/validate?logo=github&style=flat-square
+[build]: https://github.com/kentcdodds/babel-plugin-macros/actions?query=workflow%3Avalidate
+[coverage-badge]: https://img.shields.io/codecov/c/github/kentcdodds/babel-plugin-macros.svg?style=flat-square
+[coverage]: https://codecov.io/github/kentcdodds/babel-plugin-macros
+[version-badge]: https://img.shields.io/npm/v/babel-plugin-macros.svg?style=flat-square
+[package]: https://www.npmjs.com/package/babel-plugin-macros
+[downloads-badge]: https://img.shields.io/npm/dm/babel-plugin-macros.svg?style=flat-square
+[npmtrends]: http://www.npmtrends.com/babel-plugin-macros
+[license-badge]: https://img.shields.io/npm/l/babel-plugin-macros.svg?style=flat-square
+[license]: https://github.com/kentcdodds/babel-plugin-macros/blob/main/LICENSE
+[prs-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square
+[prs]: http://makeapullrequest.com
+[coc-badge]: https://img.shields.io/badge/code%20of-conduct-ff69b4.svg?style=flat-square
+[coc]: https://github.com/kentcdodds/babel-plugin-macros/blob/main/CODE_OF_CONDUCT.md
+[emojis]: https://github.com/all-contributors/all-contributors#emoji-key
+[all-contributors]: https://github.com/all-contributors/all-contributors
+[all-contributors-badge]: https://img.shields.io/github/all-contributors/kentcdodds/babel-plugin-macros?color=orange&style=flat-square
+[bugs]: https://github.com/kentcdodds/babel-plugin-macros/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+sort%3Acreated-desc+label%3Abug
+[requests]: https://github.com/kentcdodds/babel-plugin-macros/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc+label%3Aenhancement
+[good-first-issue]: https://github.com/kentcdodds/babel-plugin-macros/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+sort%3Areactions-%2B1-desc+label%3Aenhancement+label%3A%22good+first+issue%22
+[preval]: https://github.com/kentcdodds/babel-plugin-preval
+[cra]: https://github.com/facebook/create-react-app
+[cra-issue]: https://github.com/facebook/create-react-app/issues/2730
+<!-- prettier-ignore-end -->
Index: frontend/node_modules/babel-plugin-macros/dist/index.js
===================================================================
--- frontend/node_modules/babel-plugin-macros/dist/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/babel-plugin-macros/dist/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,351 @@
+"use strict";
+
+const p = require('path');
+
+const resolve = require('resolve'); // const printAST = require('ast-pretty-print')
+
+
+const macrosRegex = /[./]macro(\.c?js)?$/;
+
+const testMacrosRegex = v => macrosRegex.test(v); // https://stackoverflow.com/a/32749533/971592
+
+
+class MacroError extends Error {
+  constructor(message) {
+    super(message);
+    this.name = 'MacroError';
+    /* istanbul ignore else */
+
+    if (typeof Error.captureStackTrace === 'function') {
+      Error.captureStackTrace(this, this.constructor);
+    } else if (!this.stack) {
+      this.stack = new Error(message).stack;
+    }
+  }
+
+}
+
+let _configExplorer = null;
+
+function getConfigExplorer() {
+  return _configExplorer = _configExplorer || // Lazy load cosmiconfig since it is a relatively large bundle
+  require('cosmiconfig').cosmiconfigSync('babel-plugin-macros', {
+    searchPlaces: ['package.json', '.babel-plugin-macrosrc', '.babel-plugin-macrosrc.json', '.babel-plugin-macrosrc.yaml', '.babel-plugin-macrosrc.yml', '.babel-plugin-macrosrc.js', 'babel-plugin-macros.config.js'],
+    packageProp: 'babelMacros'
+  });
+}
+
+function createMacro(macro, options = {}) {
+  if (options.configName === 'options') {
+    throw new Error(`You cannot use the configName "options". It is reserved for babel-plugin-macros.`);
+  }
+
+  macroWrapper.isBabelMacro = true;
+  macroWrapper.options = options;
+  return macroWrapper;
+
+  function macroWrapper(args) {
+    const {
+      source,
+      isBabelMacrosCall
+    } = args;
+
+    if (!isBabelMacrosCall) {
+      throw new MacroError(`The macro you imported from "${source}" is being executed outside the context of compilation with babel-plugin-macros. ` + `This indicates that you don't have the babel plugin "babel-plugin-macros" configured correctly. ` + `Please see the documentation for how to configure babel-plugin-macros properly: ` + 'https://github.com/kentcdodds/babel-plugin-macros/blob/master/other/docs/user.md');
+    }
+
+    return macro(args);
+  }
+}
+
+function nodeResolvePath(source, basedir) {
+  return resolve.sync(source, {
+    basedir,
+    extensions: ['.js', '.ts', '.tsx', '.mjs', '.cjs', '.jsx'],
+    // This is here to support the package being globally installed
+    // read more: https://github.com/kentcdodds/babel-plugin-macros/pull/138
+    paths: [p.resolve(__dirname, '../../')]
+  });
+}
+
+function macrosPlugin(babel, // istanbul doesn't like the default of an object for the plugin options
+// but I think older versions of babel didn't always pass options
+// istanbul ignore next
+{
+  require: _require = require,
+  resolvePath = nodeResolvePath,
+  isMacrosName = testMacrosRegex,
+  ...options
+} = {}) {
+  function interopRequire(path) {
+    // eslint-disable-next-line import/no-dynamic-require
+    const o = _require(path);
+
+    return o && o.__esModule && o.default ? o.default : o;
+  }
+
+  return {
+    name: 'macros',
+    visitor: {
+      Program(progPath, state) {
+        progPath.traverse({
+          ImportDeclaration(path) {
+            const isMacros = looksLike(path, {
+              node: {
+                source: {
+                  value: v => isMacrosName(v)
+                }
+              }
+            });
+
+            if (!isMacros) {
+              return;
+            }
+
+            const imports = path.node.specifiers.map(s => ({
+              localName: s.local.name,
+              importedName: s.type === 'ImportDefaultSpecifier' ? 'default' : s.imported.name
+            }));
+            const source = path.node.source.value;
+            const result = applyMacros({
+              path,
+              imports,
+              source,
+              state,
+              babel,
+              interopRequire,
+              resolvePath,
+              options
+            });
+
+            if (!result || !result.keepImports) {
+              path.remove();
+            }
+          },
+
+          VariableDeclaration(path) {
+            const isMacros = child => looksLike(child, {
+              node: {
+                init: {
+                  callee: {
+                    type: 'Identifier',
+                    name: 'require'
+                  },
+                  arguments: args => args.length === 1 && isMacrosName(args[0].value)
+                }
+              }
+            });
+
+            path.get('declarations').filter(isMacros).forEach(child => {
+              const imports = child.node.id.name ? [{
+                localName: child.node.id.name,
+                importedName: 'default'
+              }] : child.node.id.properties.map(property => ({
+                localName: property.value.name,
+                importedName: property.key.name
+              }));
+              const call = child.get('init');
+              const source = call.node.arguments[0].value;
+              const result = applyMacros({
+                path: call,
+                imports,
+                source,
+                state,
+                babel,
+                interopRequire,
+                resolvePath,
+                options
+              });
+
+              if (!result || !result.keepImports) {
+                child.remove();
+              }
+            });
+          }
+
+        });
+      }
+
+    }
+  };
+} // eslint-disable-next-line complexity
+
+
+function applyMacros({
+  path,
+  imports,
+  source,
+  state,
+  babel,
+  interopRequire,
+  resolvePath,
+  options
+}) {
+  /* istanbul ignore next (pretty much only useful for astexplorer I think) */
+  const {
+    file: {
+      opts: {
+        filename = ''
+      }
+    }
+  } = state;
+  let hasReferences = false;
+  const referencePathsByImportName = imports.reduce((byName, {
+    importedName,
+    localName
+  }) => {
+    const binding = path.scope.getBinding(localName);
+    byName[importedName] = binding.referencePaths;
+    hasReferences = hasReferences || Boolean(byName[importedName].length);
+    return byName;
+  }, {});
+  const isRelative = source.indexOf('.') === 0;
+  const requirePath = resolvePath(source, p.dirname(getFullFilename(filename)));
+  const macro = interopRequire(requirePath);
+
+  if (!macro.isBabelMacro) {
+    throw new Error(`The macro imported from "${source}" must be wrapped in "createMacro" ` + `which you can get from "babel-plugin-macros". ` + `Please refer to the documentation to see how to do this properly: https://github.com/kentcdodds/babel-plugin-macros/blob/master/other/docs/author.md#writing-a-macro`);
+  }
+
+  const config = getConfig(macro, filename, source, options);
+  let result;
+
+  try {
+    /**
+     * Other plugins that run before babel-plugin-macros might use path.replace, where a path is
+     * put into its own replacement. Apparently babel does not update the scope after such
+     * an operation. As a remedy, the whole scope is traversed again with an empty "Identifier"
+     * visitor - this makes the problem go away.
+     *
+     * See: https://github.com/kentcdodds/import-all.macro/issues/7
+     */
+    state.file.scope.path.traverse({
+      Identifier() {}
+
+    });
+    result = macro({
+      references: referencePathsByImportName,
+      source,
+      state,
+      babel,
+      config,
+      isBabelMacrosCall: true
+    });
+  } catch (error) {
+    if (error.name === 'MacroError') {
+      throw error;
+    }
+
+    error.message = `${source}: ${error.message}`;
+
+    if (!isRelative) {
+      error.message = `${error.message} Learn more: https://www.npmjs.com/package/${source.replace( // remove everything after package name
+      // @org/package/macro -> @org/package
+      // package/macro      -> package
+      /^((?:@[^/]+\/)?[^/]+).*/, '$1')}`;
+    }
+
+    throw error;
+  }
+
+  return result;
+}
+
+function getConfigFromFile(configName, filename) {
+  try {
+    const loaded = getConfigExplorer().search(filename);
+
+    if (loaded) {
+      return {
+        options: loaded.config[configName],
+        path: loaded.filepath
+      };
+    }
+  } catch (e) {
+    return {
+      error: e
+    };
+  }
+
+  return {};
+}
+
+function getConfigFromOptions(configName, options) {
+  if (options.hasOwnProperty(configName)) {
+    if (options[configName] && typeof options[configName] !== 'object') {
+      // eslint-disable-next-line no-console
+      console.error(`The macro plugin options' ${configName} property was not an object or null.`);
+    } else {
+      return {
+        options: options[configName]
+      };
+    }
+  }
+
+  return {};
+}
+
+function getConfig(macro, filename, source, options) {
+  const {
+    configName
+  } = macro.options;
+
+  if (configName) {
+    const fileConfig = getConfigFromFile(configName, filename);
+    const optionsConfig = getConfigFromOptions(configName, options);
+
+    if (optionsConfig.options === undefined && fileConfig.options === undefined && fileConfig.error !== undefined) {
+      // eslint-disable-next-line no-console
+      console.error(`There was an error trying to load the config "${configName}" ` + `for the macro imported from "${source}. ` + `Please see the error thrown for more information.`);
+      throw fileConfig.error;
+    }
+
+    if (fileConfig.options !== undefined && optionsConfig.options !== undefined && typeof fileConfig.options !== 'object') {
+      throw new Error(`${fileConfig.path} specified a ${configName} config of type ` + `${typeof optionsConfig.options}, but the the macros plugin's ` + `options.${configName} did contain an object. Both configs must ` + `contain objects for their options to be mergeable.`);
+    }
+
+    return { ...optionsConfig.options,
+      ...fileConfig.options
+    };
+  }
+
+  return undefined;
+}
+/*
+ istanbul ignore next
+ because this is hard to test
+ and not worth it...
+ */
+
+
+function getFullFilename(filename) {
+  if (p.isAbsolute(filename)) {
+    return filename;
+  }
+
+  return p.join(process.cwd(), filename);
+}
+
+function looksLike(a, b) {
+  return a && b && Object.keys(b).every(bKey => {
+    const bVal = b[bKey];
+    const aVal = a[bKey];
+
+    if (typeof bVal === 'function') {
+      return bVal(aVal);
+    }
+
+    return isPrimitive(bVal) ? bVal === aVal : looksLike(aVal, bVal);
+  });
+}
+
+function isPrimitive(val) {
+  // eslint-disable-next-line
+  return val == null || /^[sbn]/.test(typeof val);
+}
+
+module.exports = macrosPlugin;
+Object.assign(module.exports, {
+  createMacro,
+  MacroError
+});
Index: frontend/node_modules/babel-plugin-macros/package.json
===================================================================
--- frontend/node_modules/babel-plugin-macros/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/babel-plugin-macros/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,68 @@
+{
+  "name": "babel-plugin-macros",
+  "version": "3.1.0",
+  "description": "Allows you to build compile-time libraries",
+  "main": "dist/index.js",
+  "scripts": {
+    "build": "kcd-scripts build",
+    "lint": "kcd-scripts lint",
+    "setup": "npm install && npm run validate -s",
+    "test": "kcd-scripts test",
+    "test:update": "npm test -- --updateSnapshot --coverage",
+    "validate": "kcd-scripts validate"
+  },
+  "files": [
+    "dist"
+  ],
+  "keywords": [
+    "babel-plugin",
+    "macros",
+    "macro",
+    "babel-macro",
+    "babel-plugin-macro",
+    "babel-macros",
+    "babel-plugin-macros"
+  ],
+  "author": "Kent C. Dodds <me@kentcdodds.com> (https://kentcdodds.com)",
+  "license": "MIT",
+  "dependencies": {
+    "@babel/runtime": "^7.12.5",
+    "cosmiconfig": "^7.0.0",
+    "resolve": "^1.19.0"
+  },
+  "devDependencies": {
+    "@babel/core": "^7.12.9",
+    "@babel/parser": "^7.12.7",
+    "@babel/types": "^7.12.7",
+    "ast-pretty-print": "^2.0.1",
+    "babel-plugin-tester": "^10.0.0",
+    "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
+    "cpy": "^8.1.1",
+    "kcd-scripts": "^7.1.0"
+  },
+  "eslintConfig": {
+    "extends": "./node_modules/kcd-scripts/eslint.js"
+  },
+  "eslintIgnore": [
+    "node_modules",
+    "coverage",
+    "dist"
+  ],
+  "babel": {
+    "presets": [
+      "./other/babel-config.js"
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/kentcdodds/babel-plugin-macros"
+  },
+  "bugs": {
+    "url": "https://github.com/kentcdodds/babel-plugin-macros/issues"
+  },
+  "homepage": "https://github.com/kentcdodds/babel-plugin-macros#readme",
+  "engines": {
+    "node": ">=10",
+    "npm": ">=6"
+  }
+}
