Index: frontend/node_modules/tsconfig-paths/CHANGELOG.md
===================================================================
--- frontend/node_modules/tsconfig-paths/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/CHANGELOG.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,371 @@
+# Change Log
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/)
+and this project adheres to [Semantic Versioning](http://semver.org/).
+
+## [Unreleased]
+
+## [3.15.0] - 2023-12-14
+
+### Added
+
+- Add support for extends as array of strings to v3 (backport of #245). See PR #260. Thanks to [@domdomegg](https://github.com/domdomegg) for this PR!
+
+## [3.14.1] - 2022-03-22
+
+### Fixed
+
+- Use minimist 1.2.6 for all depencencies becuase of pollution vulnerability. See PR [#197](https://github.com/dividab/tsconfig-paths/pull/197). Thanks to [@gopijaganthan](https://github.com/gopijaganthan) for this fix!
+
+## [3.14.0] - 2022-03-13
+
+### Added
+
+- Support for path mapping starting with `/`. See PR [#180](https://github.com/dividab/tsconfig-paths/pull/180), issue [#113](https://github.com/dividab/tsconfig-paths/issues/113), and issue [#128](https://github.com/dividab/tsconfig-paths/issues/128). Thanks to [@benevbright](https://github.com/benevbright) for this fix!
+
+## [3.13.0] - 2022-03-03
+
+### Added
+
+- Include file extension in paths resolved from package.json "main" field. See PR [#135](https://github.com/dividab/tsconfig-paths/pull/135) and issue [#133](https://github.com/dividab/tsconfig-paths/issues/133). Thanks to [@katywings](https://github.com/katywings) for this fix!
+
+## [3.12.0] - 2021-08-24
+
+- Add support for baseUrl override using TS_NODE_BASEURL env var #185 and #114. Thanks to @ejhayes and @information-security for these PRs!
+
+## [3.11.0] - 2021-08-24
+
+- Reverted upgrade of json5 due to being a breaking change. See PR #173.
+
+## [3.10.1] - 2021-07-06
+
+### Fixed
+
+- Add register.js to published files
+
+## [3.10.0] - 2021-07-06
+
+### Added
+
+- feat(tsconfig-loader): extends config from node_modules (#106). Thanks to @zorji for this PR!
+
+### Fixed
+
+- Update CHANGELOG.md (#96). Thanks to @OliverJAsh for this PR!
+- Fix "bootstraping" typo (#111). Thanks to @KRMisha for this PR!
+- Update Readme fixes #116 (#123). Thanks to @benwinding for this PR!
+- Fixed typo (#144). Thanks to @mprinc for this PR!
+- [TYPO] src/mapping-entry.ts (#145). Thanks to @mprinc for this PR!
+- docs(README): fix typos (#156). Thanks to @PiDelport for this PR!
+- deps: bump json5 to use type definition provided officially (#158). Thanks to @koba04 for this PR!
+- Update tsconfig-loader.ts (#161). Thanks to @fecqs for this PR!
+- fix typo (#165). Thanks to @wonda-tea-coffee for this PR!
+- Add file extenstion to typings property value (#151). Thanks to @dangrussell for this PR!
+
+## [3.9.0] - 2019-09-12
+
+### Added
+
+- Make extension config override instead of deep merge. See PR [#95](https://github.com/dividab/tsconfig-paths/pull/95) and issue [#94](https://github.com/dividab/tsconfig-paths/issues/94). Thanks to [@OliverJAsh](https://github.com/OliverJAsh) for this addition!
+
+## [3.8.0] - 2019-02-05
+
+### Added
+
+- Add option to avoid adding a match-all rule. See PR [#73](https://github.com/dividab/tsconfig-paths/pull/73) and issue [72](https://github.com/dividab/tsconfig-paths/issues/72). Thanks to [@Swatinem](https://github.com/Swatinem) for this addition!
+
+## [3.7.0] - 2018-11-11
+
+### Added
+
+- Allow cleanup of register(). See PR [#64](https://github.com/dividab/tsconfig-paths/pull/64) and issue [63](https://github.com/dividab/tsconfig-paths/issues/63). Thanks to [@TylorS](https://github.com/TylorS) for this addition!
+
+## [3.6.0] - 2018-09-10
+
+### Added
+
+- Prefer Node's core modules over file modules. See PR [#60](https://github.com/dividab/tsconfig-paths/pull/60) and issue [56](https://github.com/dividab/tsconfig-paths/issues/56). Thanks to @ljani for this addition!
+
+## [3.5.0] - 2018-07-28
+
+### Added
+
+- Add support for trailing commas in tsconfig.json (use JSON5 to parse). See issue [#48](https://github.com/dividab/tsconfig-paths/issues/48), and PR [#58](https://github.com/dividab/tsconfig-paths/pull/58). Thanks to [@jshado1](https://github.com/jshado1) for this addition!
+
+## [3.4.2] - 2018-06-30
+
+### Fixed
+
+- Do not resolve directories, only files, sse issue [#51](https://github.com/dividab/tsconfig-paths/issues/51).
+
+## [3.4.1] - 2018-06-24
+
+### Fixed
+
+- Ignore field name mappings in package.json files that are not paths of existing files [#46](https://github.com/dividab/tsconfig-paths/pull/45). Thanks to [@christoffer](https://github.com/christoffer) for this fix!
+
+## [3.4.0] - 2018-06-12
+
+### Added
+
+- Add support for providing a list of field names to try instead of just using "main", [#45](https://github.com/dividab/tsconfig-paths/pull/45). Thanks to [@christoffer-dropbox](https://github.com/christoffer-dropbox) for this addition!
+
+## [3.3.2] - 2018-05-07
+
+### Fixed
+
+- Adding json file extension to extends property, [#40](https://github.com/dividab/tsconfig-paths/pull/40). Thanks to [@cwhite-connectfirst](https://github.com/cwhite-connectfirst) for this fixing this!
+
+## [3.3.1] - 2018-04-17
+
+### Fixed
+
+- Fix project undefined error when calling register, [#37](https://github.com/dividab/tsconfig-paths/issues/37). Thanks to [@natedanner](https://github.com/natedanner) for this fixing this!
+
+## [3.3.0] - 2018-04-14
+
+### Added
+
+- Add possibility to indicate explicitly tsconfig location, [#35](https://github.com/dividab/tsconfig-paths/issues/35). Thanks to [@procopenco](https://github.com/procopenco) for this adding this!
+
+## [3.2.0] - 2018-03-31
+
+### Added
+
+- Added support for passing a filename as cwd, see issue [#31](https://github.com/dividab/tsconfig-paths/issues/31) and PR [#32](https://github.com/dividab/tsconfig-paths/pull/32). Thanks to [@amodm](https://github.com/amodm) for this adding this!
+
+## [3.1.3] - 2018-03-14
+
+### Fixed
+
+- Fix async recursion, see [#30](https://github.com/dividab/tsconfig-paths/pull/30). Thanks to [@Nayni](https://github.com/Nayni) for this fix!
+
+## [3.1.2] - 2018-03-13
+
+### Fixed
+
+- Fix a forgotten return when doneCallback is invoked, see [#29](https://github.com/dividab/tsconfig-paths/pull/29). Thanks to [@Nayni](https://github.com/Nayni) for this fix!
+
+## [3.1.1] - 2018-01-13
+
+### Fixed
+
+- Fix read json async when it does not exist
+
+## [3.1.0] - 2018-01-13
+
+### Added
+
+- Implement default async json reader function.
+
+## [3.0.0] - 2018-01-13
+
+### Changed
+
+- Remove parameter `absoluteSourceFileName` from the `MatchPath` and `matchFromAbsolutePaths` functions. It was not used internally.
+- `matchFromAbsolutePaths` now accepts a pre-sorted array of `MappingEntry`s instead of a dictionary. This was done so the sorting could be done once which should give better performance.
+
+### Added
+
+- `createMatchPathAsync`, creates an async version of the `MatchPath` function. Can be used for example by webpack plugins.
+- `matchFromAbsolutePathsAsync`, async version of `matchFromAbsolutePaths`.
+
+## [2.7.3]
+
+### Fixed
+
+- Only resolve path if tsconfig present [#25](https://github.com/dividab/tsconfig-paths/pull/25). Thanks to @nicoschoenmaker for the PR.
+
+## [2.7.2]
+
+### Fixed
+
+- Return absolute path to tsconfig.json.
+
+## [2.7.1]
+
+### Fixed
+
+- Remove left over console.log.
+
+## [2.7.0]
+
+### Added
+
+- Support `baseUrl` to exist in base tsconfig.json when using `extends`, see [#23](https://github.com/dividab/tsconfig-paths/issues/23).
+
+## [2.6.0]
+
+### Added
+
+- Add `baseUrl` and `configFileAbsolutePath` to the result of `loadConfig`.
+
+## [2.5.0]
+
+### Added
+
+- New function in Programmatic API `loadConfig`.
+
+## [2.4.3]
+
+### Fixed
+
+- Export MatchPth typing.
+
+## [2.4.2]
+
+### Fixed
+
+- Add missing types field in package.json.
+
+## [2.4.1]
+
+### Fixed
+
+- Include declaration files. Fixes [#22](https://github.com/dividab/tsconfig-paths/issues/22).
+
+## [2.4.0]
+
+### Changed
+
+- Removed dependency for package `tsconfig`.
+
+### Fixed
+
+- Support for config inheritance with `extends`. Fixes [#17](https://github.com/dividab/tsconfig-paths/issues/17).
+
+## [2.2.0]
+
+### Fixed
+
+- Fixed issue [#7](https://github.com/dividab/tsconfig-paths/issues/7).
+
+## [2.1.2]
+
+### Fixed
+
+- Fixed issue [#6](https://github.com/dividab/tsconfig-paths/issues/6).
+
+## [2.1.1]
+
+### Fixed
+
+- Fixed issue [#4](https://github.com/dividab/tsconfig-paths/issues/4)
+
+## [2.1.0]
+
+### Fixed
+
+- Fixed issue [#3](https://github.com/dividab/tsconfig-paths/issues/3)
+
+## [2.0.0]
+
+### Added
+
+- We now look at `process.env.TS_NODE_PROJECT`
+- Functionality to bootstrap tsconfig-paths. Documentation in [README](https://github.com/dividab/tsconfig-paths/blob/master/README.md)
+
+### Changed
+
+- Changed signature for `createMatchPath`. Now only takes absoluteUrl and paths.
+
+## [1.1.0]
+
+### Added
+
+- More explanation to readme.
+- Match all extensions in require.extensions.
+- Match longest pattern prefix first as typesript does.
+- Match file in main field of package.json.
+- Check for index files explicitly.
+
+## [1.0.0] - 2016-12-30
+
+- First stable release.
+
+## [0.4.0] - 2016-12-30
+
+### Changed
+
+- Renamed project to `tsocnfig-paths`.
+
+## [0.3.0] - 2016-12-30
+
+### Added
+
+- API documentation.
+- `createMatchPath` function.
+- `matchFromAbsolutePaths` function.
+
+### Removed
+
+- `findPath` function.
+
+## [0.2.1] - 2016-12-29
+
+### Fixed
+
+- `tsconfig-paths/register` was not available.
+
+## [0.2.0] - 2016-12-29
+
+### Fixed
+
+- Paths for files in sub-dirs.
+
+### Added
+
+- Programmatic use.
+
+## [0.1.2] - 2016-12-28
+
+### Fixed
+
+- Fixed wrong name of the package in README.
+- Add missing files on publish.
+
+## [0.1.1] - 2016-12-28
+
+### Added
+
+- Loading of tsconfig.
+- Example.
+- Publish scripts.
+
+## [0.1.0] - 2016-12-28
+
+- Initial version.
+
+[unreleased]: https://github.com/dividab/tsconfig-paths/compare/v3.9.0...master
+[3.9.0]: https://github.com/dividab/tsconfig-paths/compare/v3.8.0...v3.9.0
+[3.8.0]: https://github.com/dividab/tsconfig-paths/compare/3.7.0...3.8.0
+[3.7.0]: https://github.com/dividab/tsconfig-paths/compare/3.6.0...3.7.0
+[3.6.0]: https://github.com/dividab/tsconfig-paths/compare/3.5.0...3.6.0
+[3.5.0]: https://github.com/dividab/tsconfig-paths/compare/3.4.2...3.5.0
+[3.4.2]: https://github.com/dividab/tsconfig-paths/compare/3.4.1...3.4.2
+[3.4.1]: https://github.com/dividab/tsconfig-paths/compare/3.4.0...3.4.1
+[3.4.0]: https://github.com/dividab/tsconfig-paths/compare/3.3.2...3.4.0
+[3.3.2]: https://github.com/dividab/tsconfig-paths/compare/3.3.1...3.3.2
+[3.3.1]: https://github.com/dividab/tsconfig-paths/compare/3.3.0...3.3.1
+[3.3.0]: https://github.com/dividab/tsconfig-paths/compare/3.2.0...3.3.0
+[3.2.0]: https://github.com/dividab/tsconfig-paths/compare/3.1.3...3.2.0
+[3.1.3]: https://github.com/dividab/tsconfig-paths/compare/3.1.2...3.1.3
+[3.1.2]: https://github.com/dividab/tsconfig-paths/compare/3.1.1...3.1.2
+[3.1.1]: https://github.com/dividab/tsconfig-paths/compare/3.1.0...3.1.1
+[3.1.0]: https://github.com/dividab/tsconfig-paths/compare/3.0.0...3.1.0
+[3.0.0]: https://github.com/dividab/tsconfig-paths/compare/2.7.3...3.0.0
+[2.7.3]: https://github.com/dividab/tsconfig-paths/compare/2.7.2...2.7.3
+[2.7.2]: https://github.com/dividab/tsconfig-paths/compare/2.7.1...2.7.2
+[2.7.1]: https://github.com/dividab/tsconfig-paths/compare/2.7.0...2.7.1
+[2.7.0]: https://github.com/dividab/tsconfig-paths/compare/2.6.0...2.7.0
+[2.6.0]: https://github.com/dividab/tsconfig-paths/compare/2.5.0...2.6.0
+[2.5.0]: https://github.com/dividab/tsconfig-paths/compare/2.4.3...2.5.0
+[2.4.3]: https://github.com/dividab/tsconfig-paths/compare/2.4.2...2.4.3
+[2.4.2]: https://github.com/dividab/tsconfig-paths/compare/2.4.1...2.4.2
+[2.4.1]: https://github.com/dividab/tsconfig-paths/compare/2.4.0...2.4.1
+[2.4.0]: https://github.com/dividab/tsconfig-paths/compare/2.2.0...2.4.0
+[2.2.0]: https://github.com/dividab/tsconfig-paths/compare/2.1.2...2.2.0
+[2.1.2]: https://github.com/dividab/tsconfig-paths/compare/2.1.1...2.1.2
+[2.1.1]: https://github.com/dividab/tsconfig-paths/compare/2.1.0...2.1.1
Index: frontend/node_modules/tsconfig-paths/LICENSE
===================================================================
--- frontend/node_modules/tsconfig-paths/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/LICENSE	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Jonas Kello
+
+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/tsconfig-paths/README.md
===================================================================
--- frontend/node_modules/tsconfig-paths/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,268 @@
+# tsconfig-paths
+
+[![npm version][version-image]][version-url]
+[![build][build-image]][build-url]
+[![Coverage Status][codecov-image]][codecov-url]
+[![MIT license][license-image]][license-url]
+[![code style: prettier][prettier-image]][prettier-url]
+
+Use this to load modules whose location is specified in the `paths` section of `tsconfig.json`. Both loading at run-time and via API are supported.
+
+Typescript by default mimics the Node.js runtime resolution strategy of modules. But it also allows the use of [path mapping](https://www.typescriptlang.org/docs/handbook/module-resolution.html) which allows arbitrary module paths (that doesn't start with "/" or ".") to be specified and mapped to physical paths in the filesystem. The typescript compiler can resolve these paths from `tsconfig` so it will compile OK. But if you then try to execute the compiled files with node (or ts-node), it will only look in the `node_modules` folders all the way up to the root of the filesystem and thus will not find the modules specified by `paths` in `tsconfig`.
+
+If you require this package's `tsconfig-paths/register` module it will read the `paths` from `tsconfig.json` and convert node's module loading calls into to physical file paths that node can load.
+
+## How to install
+
+```
+yarn add --dev tsconfig-paths
+```
+
+or
+
+```
+npm install --save-dev tsconfig-paths
+```
+
+## How to use
+
+### With node
+
+`node -r tsconfig-paths/register main.js`
+
+If `process.env.TS_NODE_BASEURL` is set it will override the value of `baseUrl` in tsconfig.json:
+
+`TS_NODE_BASEURL=./dist node -r tsconfig-paths/register main.js`
+
+### With ts-node
+
+`ts-node -r tsconfig-paths/register main.ts`
+
+If `process.env.TS_NODE_PROJECT` is set it will be used to resolved tsconfig.json
+
+### With webpack
+
+For webpack please use the [tsconfig-paths-webpack-plugin](https://github.com/dividab/tsconfig-paths-webpack-plugin).
+
+### With mocha and ts-node
+
+As of Mocha >= 4.0.0 the `--compiler` was [deprecated](https://github.com/mochajs/mocha/wiki/compilers-deprecation). Instead `--require` should be used. You also have to specify a glob that includes `.ts` files because mocha looks after files with `.js` extension by default.
+
+```bash
+mocha -r ts-node/register -r tsconfig-paths/register "test/**/*.ts"
+```
+
+### With other commands
+
+As long as the command has something similar to a `--require` option that can load a module before it starts, tsconfig-paths should be able to work with it.
+
+### With `ts-node` and VSCode
+
+The following is an example configuration for the `.vscode/launch.json`.
+
+```js
+{
+  "version": "0.2.0",
+  "configurations": [
+    {
+      "name": "Debug Functions",
+      "request": "launch",
+      "type": "node",
+      "runtimeArgs": [
+        "-r",
+        "${workspaceFolder}/functions/node_modules/ts-node/register",
+        "-r",
+        "${workspaceFolder}/functions/node_modules/tsconfig-paths/register"
+      ],
+      "args": ["${workspaceFolder}/functions/src/index.ts"],
+      "cwd": "${workspaceFolder}",
+      "protocol": "inspector",
+      "env": {
+        "NODE_ENV": "development",
+        "TS_NODE_PROJECT": "${workspaceFolder}/functions/tsconfig.json"
+      },
+      "outFiles": ["${workspaceFolder}/functions/lib/**/*.js"]
+    }
+  ]
+}
+```
+
+## Bootstrapping with explicit params
+
+If you want more granular control over tsconfig-paths you can bootstrap it. This can be useful if you for instance have compiled with `tsc` to another directory where `tsconfig.json` doesn't exists.
+
+For example, create a wrapper script called `tsconfig-paths-bootstrap.js` with the contents below:
+
+```javascript
+const tsConfig = require("./tsconfig.json");
+const tsConfigPaths = require("tsconfig-paths");
+
+const baseUrl = "./"; // Either absolute or relative path. If relative it's resolved to current working directory.
+const cleanup = tsConfigPaths.register({
+  baseUrl,
+  paths: tsConfig.compilerOptions.paths,
+});
+
+// When path registration is no longer needed
+cleanup();
+```
+
+Then run with:
+
+`node -r ./tsconfig-paths-bootstrap.js main.js`
+
+## Configuration Options
+
+You can set options by passing them before the script path, via programmatic usage or via environment variables.
+
+```bash
+ts-node --project customLocation/tsconfig.json -r tsconfig-paths/register "test/**/*.ts"
+```
+
+### CLI and Programmatic Options
+
+_Environment variable denoted in parentheses._
+
+- `-P, --project [path]` Path to TypeScript JSON project file (`TS_NODE_PROJECT`)
+
+## Config loading process
+
+1.  Use explicit params passed to register
+2.  Use `process.env.TS_NODE_PROJECT` to resolve tsConfig.json and the specified baseUrl and paths.
+3.  Resolves tsconfig.json from current working directory and the specified baseUrl and paths.
+
+## Programmatic use
+
+The public API consists of these functions:
+
+- [register](#register)
+- [loadConfig](#loadConfig)
+- [createMatchPath](#createMatchPath) / [createMatchPathAsync](#createMatchPathAsync)
+- [matchFromAbsolutePaths](#matchFromAbsolutePaths) / [matchFromAbsolutePathsAsync](#matchFromAbsolutePathsAsync)
+
+### register
+
+```typescript
+export interface ExplicitParams {
+  baseUrl: string;
+  paths: { [key: string]: Array<string> };
+  mainFields?: Array<string>;
+  addMatchAll?: boolean;
+}
+
+/**
+ * Installs a custom module load function that can adhere to paths in tsconfig.
+ */
+export function register(explicitParams: ExplicitParams): () => void;
+```
+
+This function will patch the node's module loading so it will look for modules in paths specified by tsconfig.json.
+A function is returned for you to reinstate Node's original module loading.
+
+### loadConfig
+
+```typescript
+export function loadConfig(cwd: string = process.cwd()): ConfigLoaderResult;
+
+export type ConfigLoaderResult =
+  | ConfigLoaderSuccessResult
+  | ConfigLoaderFailResult;
+
+export interface ConfigLoaderSuccessResult {
+  resultType: "success";
+  absoluteBaseUrl: string;
+  paths: { [key: string]: Array<string> };
+}
+
+export interface ConfigLoaderFailResult {
+  resultType: "failed";
+  message: string;
+}
+```
+
+This function loads the tsconfig.json. It will start searching from the specified `cwd` directory. Passing the tsconfig.json file directly instead of a directory also works.
+
+### createMatchPath
+
+```typescript
+/**
+ * Function that can match a path
+ */
+export interface MatchPath {
+  (
+    requestedModule: string,
+    readJson?: Filesystem.ReadJsonSync,
+    fileExists?: (name: string) => boolean,
+    extensions?: ReadonlyArray<string>
+  ): string | undefined;
+}
+
+/**
+ * Creates a function that can resolve paths according to tsconfig paths property.
+ * @param absoluteBaseUrl Absolute version of baseUrl as specified in tsconfig.
+ * @param paths The paths as specified in tsconfig.
+ * @param mainFields A list of package.json field names to try when resolving module files.
+ * @param addMatchAll Add a match-all "*" rule if none is present
+ * @returns a function that can resolve paths.
+ */
+export function createMatchPath(
+  absoluteBaseUrl: string,
+  paths: { [key: string]: Array<string> },
+  mainFields: string[] = ["main"],
+  addMatchAll: boolean = true
+): MatchPath {
+```
+
+The `createMatchPath` function will create a function that can match paths. It accepts `baseUrl` and `paths` directly as they are specified in tsconfig and will handle resolving paths to absolute form. The created function has the signature specified by the type `MatchPath` above.
+
+### matchFromAbsolutePaths
+
+```typescript
+/**
+ * Finds a path from tsconfig that matches a module load request.
+ * @param absolutePathMappings The paths to try as specified in tsconfig but resolved to absolute form.
+ * @param requestedModule The required module name.
+ * @param readJson Function that can read json from a path (useful for testing).
+ * @param fileExists Function that checks for existence of a file at a path (useful for testing).
+ * @param extensions File extensions to probe for (useful for testing).
+ * @param mainFields A list of package.json field names to try when resolving module files.
+ * @returns the found path, or undefined if no path was found.
+ */
+export function matchFromAbsolutePaths(
+  absolutePathMappings: ReadonlyArray<MappingEntry.MappingEntry>,
+  requestedModule: string,
+  readJson: Filesystem.ReadJsonSync = Filesystem.readJsonFromDiskSync,
+  fileExists: Filesystem.FileExistsSync = Filesystem.fileExistsSync,
+  extensions: Array<string> = Object.keys(require.extensions),
+  mainFields: string[] = ["main"]
+): string | undefined {
+```
+
+This function is lower level and requires that the paths as already been resolved to absolute form and sorted in correct order into an array.
+
+### createMatchPathAsync
+
+This is the async version of `createMatchPath`. It has the same signature but with a callback parameter for the result.
+
+### matchFromAbsolutePathsAsync
+
+This is the async version of `matchFromAbsolutePaths`. It has the same signature but with a callback parameter for the result.
+
+## How to publish
+
+```
+yarn version --patch
+yarn version --minor
+yarn version --major
+```
+
+[version-image]: https://img.shields.io/npm/v/tsconfig-paths.svg?style=flat
+[version-url]: https://www.npmjs.com/package/tsconfig-paths
+[build-image]: https://github.com/dividab/tsconfig-paths/workflows/CI/badge.svg
+[build-url]: https://github.com/dividab/tsconfig-paths/actions/workflows/ci.yml?query=branch%3Amaster
+[codecov-image]: https://codecov.io/gh/dividab/tsconfig-paths/branch/master/graph/badge.svg
+[codecov-url]: https://codecov.io/gh/dividab/tsconfig-paths
+[license-image]: https://img.shields.io/github/license/dividab/tsconfig-paths.svg?style=flat
+[license-url]: https://opensource.org/licenses/MIT
+[prettier-image]: https://img.shields.io/badge/code_style-prettier-ff69b4.svg
+[prettier-url]: https://github.com/prettier/prettier
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/config-loader.test.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/config-loader.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/config-loader.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+export {};
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/config-loader.test.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/config-loader.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/config-loader.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,88 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var config_loader_1 = require("../config-loader");
+var path_1 = require("path");
+describe("config-loader", function () {
+    it("should use explicitParams when set", function () {
+        var result = (0, config_loader_1.configLoader)({
+            explicitParams: {
+                baseUrl: "/foo/bar",
+                paths: {
+                    asd: ["asd"],
+                },
+            },
+            cwd: "/baz",
+        });
+        var successResult = result;
+        // assert.equal(successResult.resultType, "success");
+        // assert.equal(successResult.absoluteBaseUrl, "/foo/bar");
+        // assert.equal(successResult.paths["asd"][0], "asd");
+        expect(successResult.resultType).toBe("success");
+        expect(successResult.absoluteBaseUrl).toBe("/foo/bar");
+        expect(successResult.paths["asd"][0]).toBe("asd");
+    });
+    it("should use explicitParams when set and add cwd when path is relative", function () {
+        var result = (0, config_loader_1.configLoader)({
+            explicitParams: {
+                baseUrl: "bar/",
+                paths: {
+                    asd: ["asd"],
+                },
+            },
+            cwd: "/baz",
+        });
+        var successResult = result;
+        // assert.equal(successResult.resultType, "success");
+        // assert.equal(successResult.absoluteBaseUrl, join("/baz", "bar/"));
+        expect(successResult.resultType).toBe("success");
+        expect(successResult.absoluteBaseUrl).toBe((0, path_1.join)("/baz", "bar/"));
+    });
+    it("should fallback to tsConfigLoader when explicitParams is not set", function () {
+        var result = (0, config_loader_1.configLoader)({
+            explicitParams: undefined,
+            cwd: "/baz",
+            // tslint:disable-next-line:no-any
+            tsConfigLoader: function (_) { return ({
+                tsConfigPath: "/baz/tsconfig.json",
+                baseUrl: "./src",
+                paths: {},
+            }); },
+        });
+        var successResult = result;
+        // assert.equal(successResult.resultType, "success");
+        // assert.equal(successResult.absoluteBaseUrl, join("/baz", "src"));
+        expect(successResult.resultType).toBe("success");
+        expect(successResult.absoluteBaseUrl).toBe((0, path_1.join)("/baz", "src"));
+    });
+    it("should show an error message when baseUrl is missing", function () {
+        var result = (0, config_loader_1.configLoader)({
+            explicitParams: undefined,
+            cwd: "/baz",
+            // tslint:disable-next-line:no-any
+            tsConfigLoader: function (_) { return ({
+                tsConfigPath: "/baz/tsconfig.json",
+                baseUrl: undefined,
+                paths: {},
+            }); },
+        });
+        var failResult = result;
+        // assert.equal(failResult.resultType, "failed");
+        // assert.isTrue(failResult.message.indexOf("baseUrl") > -1);
+        expect(failResult.resultType).toBe("failed");
+        expect(failResult.message.indexOf("baseUrl") > -1).toBeTruthy();
+    });
+    it("should presume cwd to be a tsconfig file when loadConfig is called with absolute path to tsconfig.json", function () {
+        // using tsconfig-named.json to ensure that future changes to fix
+        // https://github.com/dividab/tsconfig-paths/issues/31
+        // do not pass this test case just because of a directory walk looking
+        // for tsconfig.json
+        var configFile = (0, path_1.join)(__dirname, "tsconfig-named.json");
+        var result = (0, config_loader_1.loadConfig)(configFile);
+        var successResult = result;
+        // assert.equal(successResult.resultType, "success");
+        // assert.equal(successResult.configFileAbsolutePath, configFile);
+        expect(successResult.resultType).toBe("success");
+        expect(successResult.configFileAbsolutePath).toBe(configFile);
+    });
+});
+//# sourceMappingURL=config-loader.test.js.map
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/config-loader.test.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/config-loader.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/config-loader.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"config-loader.test.js","sourceRoot":"","sources":["../../src/__tests__/config-loader.test.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/data/match-path-data.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/data/match-path-data.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/data/match-path-data.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,17 @@
+export interface OneTest {
+    readonly name: string;
+    readonly only?: boolean;
+    readonly skip?: boolean;
+    readonly absoluteBaseUrl: string;
+    readonly paths: {
+        [key: string]: Array<string>;
+    };
+    readonly mainFields?: string[];
+    readonly addMatchAll?: boolean;
+    readonly existingFiles: ReadonlyArray<string>;
+    readonly requestedModule: string;
+    readonly extensions: ReadonlyArray<string>;
+    readonly packageJson?: {};
+    readonly expectedPath: string | undefined;
+}
+export declare const tests: ReadonlyArray<OneTest>;
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/data/match-path-data.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/data/match-path-data.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/data/match-path-data.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,205 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.tests = void 0;
+var path_1 = require("path");
+var filesystem_1 = require("../../filesystem");
+var defaultExtensionsWhenRunningInTsNode = [
+    ".js",
+    ".json",
+    ".node",
+    ".ts",
+    ".tsx",
+];
+exports.tests = [
+    {
+        name: "should locate path that matches with star and exists",
+        absoluteBaseUrl: "/root/",
+        paths: {
+            "lib/*": ["location/*"],
+        },
+        existingFiles: [(0, path_1.join)("/root", "location", "mylib", "index.ts")],
+        requestedModule: "lib/mylib",
+        expectedPath: (0, path_1.dirname)((0, path_1.join)("/root", "location", "mylib", "index.ts")),
+        extensions: defaultExtensionsWhenRunningInTsNode,
+    },
+    {
+        name: "should resolve to correct path when many are specified",
+        absoluteBaseUrl: "/root/",
+        paths: {
+            "lib/*": ["foo1/*", "foo2/*", "location/*", "foo3/*"],
+        },
+        existingFiles: [(0, path_1.join)("/root", "location", "mylib", "index.ts")],
+        requestedModule: "lib/mylib",
+        extensions: [".ts"],
+        expectedPath: (0, path_1.dirname)((0, path_1.join)("/root", "location", "mylib", "index.ts")),
+    },
+    {
+        name: "should locate path that matches with star and prioritize pattern with longest prefix",
+        absoluteBaseUrl: "/root/",
+        paths: {
+            "*": ["location/*"],
+            "lib/*": ["location/*"],
+        },
+        existingFiles: [
+            (0, path_1.join)("/root", "location", "lib", "mylib", "index.ts"),
+            (0, path_1.join)("/root", "location", "mylib", "index.ts"),
+        ],
+        requestedModule: "lib/mylib",
+        expectedPath: (0, path_1.dirname)((0, path_1.join)("/root", "location", "mylib", "index.ts")),
+        extensions: defaultExtensionsWhenRunningInTsNode,
+    },
+    {
+        name: "should locate path that matches with star and exists with extension",
+        absoluteBaseUrl: "/root/",
+        paths: { "lib/*": ["location/*"] },
+        existingFiles: [(0, path_1.join)("/root", "location", "mylib.myext")],
+        requestedModule: "lib/mylib",
+        extensions: [".js", ".myext"],
+        expectedPath: (0, filesystem_1.removeExtension)((0, path_1.join)("/root", "location", "mylib.myext")),
+    },
+    {
+        name: "should resolve request with extension specified",
+        absoluteBaseUrl: "/root/",
+        paths: { "lib/*": ["location/*"] },
+        existingFiles: [(0, path_1.join)("/root", "location", "test.jpg")],
+        requestedModule: "lib/test.jpg",
+        expectedPath: (0, path_1.join)("/root", "location", "test.jpg"),
+        extensions: defaultExtensionsWhenRunningInTsNode,
+    },
+    {
+        name: "should locate path that matches without star and exists",
+        absoluteBaseUrl: "/root/",
+        paths: {
+            "lib/foo": ["location/foo"],
+        },
+        existingFiles: [(0, path_1.join)("/root", "location", "foo.ts")],
+        requestedModule: "lib/foo",
+        expectedPath: (0, filesystem_1.removeExtension)((0, path_1.join)("/root", "location", "foo.ts")),
+        extensions: defaultExtensionsWhenRunningInTsNode,
+    },
+    {
+        name: "should resolve to parent folder when filename is in subfolder",
+        absoluteBaseUrl: "/root/",
+        paths: { "lib/*": ["location/*"] },
+        existingFiles: [(0, path_1.join)("/root", "location", "mylib", "index.ts")],
+        requestedModule: "lib/mylib",
+        expectedPath: (0, path_1.dirname)((0, path_1.join)("/root", "location", "mylib", "index.ts")),
+        extensions: defaultExtensionsWhenRunningInTsNode,
+    },
+    {
+        name: "should resolve from main field in package.json",
+        absoluteBaseUrl: "/root/",
+        paths: { "lib/*": ["location/*"] },
+        existingFiles: [(0, path_1.join)("/root", "location", "mylib", "kalle.ts")],
+        packageJson: { main: "./kalle.ts" },
+        requestedModule: "lib/mylib",
+        expectedPath: (0, path_1.join)("/root", "location", "mylib", "kalle.ts"),
+        extensions: defaultExtensionsWhenRunningInTsNode,
+    },
+    {
+        name: "should resolve from main field in package.json (js)",
+        absoluteBaseUrl: "/root",
+        paths: { "lib/*": ["location/*"] },
+        existingFiles: [(0, path_1.join)("/root", "location", "mylib.js", "kalle.js")],
+        packageJson: { main: "./kalle.js" },
+        requestedModule: "lib/mylib.js",
+        extensions: [".ts", ".js"],
+        expectedPath: (0, path_1.join)("/root", "location", "mylib.js", "kalle.js"),
+    },
+    {
+        name: "should resolve from list of fields by priority in package.json",
+        absoluteBaseUrl: "/root/",
+        paths: { "lib/*": ["location/*"] },
+        mainFields: ["missing", "browser", "main"],
+        packageJson: { main: "./main.js", browser: "./browser.js" },
+        existingFiles: [
+            (0, path_1.join)("/root", "location", "mylibjs", "main.js"),
+            (0, path_1.join)("/root", "location", "mylibjs", "browser.js"), // browserFilePath
+        ],
+        extensions: [".ts", ".js"],
+        requestedModule: "lib/mylibjs",
+        expectedPath: (0, path_1.join)("/root", "location", "mylibjs", "browser.js"),
+    },
+    {
+        name: "should ignore field mappings to missing files in package.json",
+        absoluteBaseUrl: "/root/",
+        paths: { "lib/*": ["location/*"] },
+        mainFields: ["browser", "main"],
+        existingFiles: [(0, path_1.join)("/root", "location", "mylibjs", "kalle.js")],
+        requestedModule: "lib/mylibjs",
+        packageJson: {
+            main: "./kalle.js",
+            browser: "./nope.js",
+        },
+        extensions: [".ts", ".js"],
+        expectedPath: (0, path_1.join)("/root", "location", "mylibjs", "kalle.js"),
+    },
+    {
+        name: "should ignore advanced field mappings in package.json",
+        absoluteBaseUrl: "/root/",
+        paths: { "lib/*": ["location/*"] },
+        existingFiles: [
+            (0, path_1.join)("/root", "location", "mylibjs", "kalle.js"),
+            (0, path_1.join)("/root", "location", "mylibjs", "browser.js"),
+        ],
+        requestedModule: "lib/mylibjs",
+        packageJson: {
+            main: "./kalle.js",
+            browser: { mylibjs: "./browser.js", "./kalle.js": "./browser.js" },
+        },
+        extensions: [".ts", ".js"],
+        expectedPath: (0, path_1.join)("/root", "location", "mylibjs", "kalle.js"),
+    },
+    {
+        name: "should resolve to with the help of baseUrl when not explicitly set",
+        absoluteBaseUrl: "/root/",
+        paths: {},
+        existingFiles: [(0, path_1.join)("/root", "mylib", "index.ts")],
+        requestedModule: "mylib",
+        expectedPath: (0, path_1.dirname)((0, path_1.join)("/root", "mylib", "index.ts")),
+        extensions: defaultExtensionsWhenRunningInTsNode,
+    },
+    {
+        name: "should not resolve with the help of baseUrl when asked not to",
+        absoluteBaseUrl: "/root/",
+        paths: {},
+        addMatchAll: false,
+        existingFiles: [(0, path_1.join)("/root", "mylib", "index.ts")],
+        requestedModule: "mylib",
+        expectedPath: undefined,
+        extensions: defaultExtensionsWhenRunningInTsNode,
+    },
+    {
+        name: "should not locate path that does not match",
+        absoluteBaseUrl: "/root/",
+        paths: { "lib/*": ["location/*"] },
+        existingFiles: [(0, path_1.join)("root", "location", "mylib")],
+        requestedModule: "mylib",
+        expectedPath: undefined,
+        extensions: defaultExtensionsWhenRunningInTsNode,
+    },
+    {
+        name: "should not resolve typings file (index.d.ts)",
+        absoluteBaseUrl: "/root/",
+        paths: {
+            "lib/*": ["location/*"],
+        },
+        existingFiles: [(0, path_1.join)("/root", "location", "mylib", "index.d.ts")],
+        requestedModule: "lib/mylib",
+        expectedPath: undefined,
+        extensions: defaultExtensionsWhenRunningInTsNode,
+    },
+    {
+        name: "should resolve main file with cjs file extension",
+        absoluteBaseUrl: "/root/",
+        paths: {},
+        existingFiles: [(0, path_1.join)("/root", "mylib", "index.cjs")],
+        packageJson: {
+            main: "./index.cjs",
+        },
+        requestedModule: "mylib",
+        expectedPath: (0, path_1.join)("/root", "mylib", "index.cjs"),
+        extensions: defaultExtensionsWhenRunningInTsNode,
+    },
+];
+//# sourceMappingURL=match-path-data.js.map
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/data/match-path-data.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/data/match-path-data.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/data/match-path-data.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"match-path-data.js","sourceRoot":"","sources":["../../../src/__tests__/data/match-path-data.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/filesystem.test.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/filesystem.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/filesystem.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+export {};
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/filesystem.test.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/filesystem.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/filesystem.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,64 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var Filesystem = require("../filesystem");
+var path = require("path");
+describe("filesystem", function () {
+    var fileThatExists = path.join(__dirname, "../../package.json");
+    var fileThatNotExists = path.join(__dirname, "../../package2.json");
+    it("should find file that exists, sync", function () {
+        var result = Filesystem.fileExistsSync(fileThatExists);
+        // assert.equal(result, true);
+        expect(result).toBe(true);
+    });
+    it("should not find file that not exists, sync", function () {
+        var result = Filesystem.fileExistsSync(fileThatNotExists);
+        // assert.equal(result, false);
+        expect(result).toBe(false);
+    });
+    it("should find file that exists, async", function (done) {
+        Filesystem.fileExistsAsync(fileThatExists, function (_err, result) {
+            try {
+                // assert.equal(result, true);
+                expect(result).toBe(true);
+                done();
+            }
+            catch (error) {
+                done(error);
+            }
+        });
+    });
+    it("should not find file that not exists, async", function (done) {
+        Filesystem.fileExistsAsync(fileThatNotExists, function (_err, result) {
+            try {
+                // assert.equal(result, false);
+                expect(result).toBe(false);
+                done();
+            }
+            catch (error) {
+                done(error);
+            }
+        });
+    });
+    it("should load json, sync", function () {
+        var result = Filesystem.readJsonFromDiskSync(fileThatExists);
+        // assert.isOk(result);
+        expect(result);
+        // assert.equal(result.main, "lib/index.js");
+        expect(result.main).toBe("lib/index.js");
+    });
+    it("should load json, async", function (done) {
+        Filesystem.readJsonFromDiskAsync(fileThatExists, function (_err, result) {
+            try {
+                // assert.isOk(result); // Asserts that object is truthy.
+                expect(result).toBeTruthy();
+                // assert.equal(result.main, "lib/index.js");
+                expect(result.main).toBe("lib/index.js");
+                done();
+            }
+            catch (error) {
+                done(error);
+            }
+        });
+    });
+});
+//# sourceMappingURL=filesystem.test.js.map
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/filesystem.test.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/filesystem.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/filesystem.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"filesystem.test.js","sourceRoot":"","sources":["../../src/__tests__/filesystem.test.ts"],"names":[],"mappings":";;AAAA,0CAA4C;AAC5C,2BAA6B;AAE7B,QAAQ,CAAC,YAAY,EAAE;IACrB,IAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IAClE,IAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAEtE,EAAE,CAAC,oCAAoC,EAAE;QACvC,IAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QACzD,8BAA8B;QAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE;QAC/C,IAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QAC5D,+BAA+B;QAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,UAAC,IAAI;QAC7C,UAAU,CAAC,eAAe,CAAC,cAAc,EAAE,UAAC,IAAI,EAAE,MAAM;YACtD,IAAI;gBACF,8BAA8B;gBAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,EAAE,CAAC;aACR;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,CAAC;aACb;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,UAAC,IAAI;QACrD,UAAU,CAAC,eAAe,CAAC,iBAAiB,EAAE,UAAC,IAAI,EAAE,MAAM;YACzD,IAAI;gBACF,+BAA+B;gBAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,EAAE,CAAC;aACR;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,CAAC;aACb;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE;QAC3B,IAAM,MAAM,GAAG,UAAU,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAC/D,uBAAuB;QACvB,MAAM,CAAC,MAAM,CAAC,CAAC;QACf,6CAA6C;QAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,UAAC,IAAI;QACjC,UAAU,CAAC,qBAAqB,CAAC,cAAc,EAAE,UAAC,IAAI,EAAE,MAAM;YAC5D,IAAI;gBACF,yDAAyD;gBACzD,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC5B,6CAA6C;gBAC7C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACzC,IAAI,EAAE,CAAC;aACR;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,KAAK,CAAC,CAAC;aACb;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/mapping-entry.test.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/mapping-entry.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/mapping-entry.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+export {};
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/mapping-entry.test.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/mapping-entry.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/mapping-entry.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,66 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var mapping_entry_1 = require("../mapping-entry");
+var path_1 = require("path");
+describe("mapping-entry", function () {
+    it("should change to absolute paths and sort in longest prefix order", function () {
+        var result = (0, mapping_entry_1.getAbsoluteMappingEntries)("/absolute/base/url", {
+            "*": ["/foo1", "/foo2"],
+            "longest/pre/fix/*": ["/foo2/bar"],
+            "pre/fix/*": ["/foo3"],
+        }, true);
+        // assert.deepEqual(result, [
+        //   {
+        //     pattern: "longest/pre/fix/*",
+        //     paths: [join("/absolute", "base", "url", "foo2", "bar")],
+        //   },
+        //   {
+        //     pattern: "pre/fix/*",
+        //     paths: [join("/absolute", "base", "url", "foo3")],
+        //   },
+        //   {
+        //     pattern: "*",
+        //     paths: [
+        //       join("/absolute", "base", "url", "foo1"),
+        //       join("/absolute", "base", "url", "foo2"),
+        //     ],
+        //   },
+        // ]);
+        expect(result).toEqual([
+            {
+                pattern: "longest/pre/fix/*",
+                paths: [(0, path_1.join)("/absolute", "base", "url", "foo2", "bar")],
+            },
+            {
+                pattern: "pre/fix/*",
+                paths: [(0, path_1.join)("/absolute", "base", "url", "foo3")],
+            },
+            {
+                pattern: "*",
+                paths: [
+                    (0, path_1.join)("/absolute", "base", "url", "foo1"),
+                    (0, path_1.join)("/absolute", "base", "url", "foo2"),
+                ],
+            },
+        ]);
+    });
+    it("should should add a match-all pattern when requested", function () {
+        var result = (0, mapping_entry_1.getAbsoluteMappingEntries)("/absolute/base/url", {}, true);
+        // assert.deepEqual(result, [
+        //   {
+        //     pattern: "*",
+        //     paths: [join("/absolute", "base", "url", "*")],
+        //   },
+        // ]);
+        expect(result).toEqual([
+            {
+                pattern: "*",
+                paths: [(0, path_1.join)("/absolute", "base", "url", "*")],
+            },
+        ]);
+        result = (0, mapping_entry_1.getAbsoluteMappingEntries)("/absolute/base/url", {}, false);
+        // assert.deepEqual(result, []);
+        expect(result).toEqual([]);
+    });
+});
+//# sourceMappingURL=mapping-entry.test.js.map
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/mapping-entry.test.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/mapping-entry.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/mapping-entry.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"mapping-entry.test.js","sourceRoot":"","sources":["../../src/__tests__/mapping-entry.test.ts"],"names":[],"mappings":";;AAAA,kDAA6D;AAC7D,6BAA4B;AAE5B,QAAQ,CAAC,eAAe,EAAE;IACxB,EAAE,CAAC,kEAAkE,EAAE;QACrE,IAAM,MAAM,GAAG,IAAA,yCAAyB,EACtC,oBAAoB,EACpB;YACE,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC;YACvB,mBAAmB,EAAE,CAAC,WAAW,CAAC;YAClC,WAAW,EAAE,CAAC,OAAO,CAAC;SACvB,EACD,IAAI,CACL,CAAC;QACF,6BAA6B;QAC7B,MAAM;QACN,oCAAoC;QACpC,gEAAgE;QAChE,OAAO;QACP,MAAM;QACN,4BAA4B;QAC5B,yDAAyD;QACzD,OAAO;QACP,MAAM;QACN,oBAAoB;QACpB,eAAe;QACf,kDAAkD;QAClD,kDAAkD;QAClD,SAAS;QACT,OAAO;QACP,MAAM;QACN,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB;gBACE,OAAO,EAAE,mBAAmB;gBAC5B,KAAK,EAAE,CAAC,IAAA,WAAI,EAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;aACzD;YACD;gBACE,OAAO,EAAE,WAAW;gBACpB,KAAK,EAAE,CAAC,IAAA,WAAI,EAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;aAClD;YACD;gBACE,OAAO,EAAE,GAAG;gBACZ,KAAK,EAAE;oBACL,IAAA,WAAI,EAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;oBACxC,IAAA,WAAI,EAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;iBACzC;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE;QACzD,IAAI,MAAM,GAAG,IAAA,yCAAyB,EAAC,oBAAoB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACvE,6BAA6B;QAC7B,MAAM;QACN,oBAAoB;QACpB,sDAAsD;QACtD,OAAO;QACP,MAAM;QACN,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB;gBACE,OAAO,EAAE,GAAG;gBACZ,KAAK,EAAE,CAAC,IAAA,WAAI,EAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;aAC/C;SACF,CAAC,CAAC;QAEH,MAAM,GAAG,IAAA,yCAAyB,EAAC,oBAAoB,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACpE,gCAAgC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-async.test.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-async.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-async.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+export {};
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-async.test.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-async.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-async.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,19 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var match_path_async_1 = require("../match-path-async");
+var Tests = require("./data/match-path-data");
+describe("match-path-async", function () {
+    Tests.tests.forEach(function (t) {
+        return it(t.name, function (done) {
+            var matchPath = (0, match_path_async_1.createMatchPathAsync)(t.absoluteBaseUrl, t.paths, t.mainFields, t.addMatchAll);
+            matchPath(t.requestedModule, function (_path, callback) { return callback(undefined, t.packageJson); }, function (path, callback) {
+                return callback(undefined, t.existingFiles.indexOf(path) !== -1);
+            }, t.extensions, function (_err, result) {
+                // assert.equal(result, t.expectedPath);
+                expect(result).toBe(t.expectedPath);
+                done();
+            });
+        });
+    });
+});
+//# sourceMappingURL=match-path-async.test.js.map
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-async.test.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-async.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-async.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"match-path-async.test.js","sourceRoot":"","sources":["../../src/__tests__/match-path-async.test.ts"],"names":[],"mappings":";;AAAA,wDAA2D;AAC3D,8CAAgD;AAEhD,QAAQ,CAAC,kBAAkB,EAAE;IAC3B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,CAAC;QACpB,OAAA,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,UAAC,IAAI;YACd,IAAM,SAAS,GAAG,IAAA,uCAAoB,EACpC,CAAC,CAAC,eAAe,EACjB,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,UAAU,EACZ,CAAC,CAAC,WAAW,CACd,CAAC;YACF,SAAS,CACP,CAAC,CAAC,eAAe,EACjB,UAAC,KAAK,EAAE,QAAQ,IAAK,OAAA,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,EAAlC,CAAkC,EACvD,UAAC,IAAI,EAAE,QAAQ;gBACb,OAAA,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAAzD,CAAyD,EAC3D,CAAC,CAAC,UAAU,EACZ,UAAC,IAAI,EAAE,MAAM;gBACX,wCAAwC;gBACxC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBACpC,IAAI,EAAE,CAAC;YACT,CAAC,CACF,CAAC;QACJ,CAAC,CAAC;IAnBF,CAmBE,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-sync.test.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-sync.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-sync.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+export {};
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-sync.test.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-sync.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-sync.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var match_path_sync_1 = require("../match-path-sync");
+var Tests = require("./data/match-path-data");
+describe("match-path-sync", function () {
+    Tests.tests.forEach(function (t) {
+        return it(t.name, function () {
+            var matchPath = (0, match_path_sync_1.createMatchPath)(t.absoluteBaseUrl, t.paths, t.mainFields, t.addMatchAll);
+            var result = matchPath(t.requestedModule, function (_) { return t.packageJson; }, function (name) { return t.existingFiles.indexOf(name) !== -1; }, t.extensions);
+            // assert.equal(result, t.expectedPath);
+            expect(result).toBe(t.expectedPath);
+        });
+    });
+});
+//# sourceMappingURL=match-path-sync.test.js.map
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-sync.test.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-sync.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/match-path-sync.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"match-path-sync.test.js","sourceRoot":"","sources":["../../src/__tests__/match-path-sync.test.ts"],"names":[],"mappings":";;AAAA,sDAAqD;AACrD,8CAAgD;AAEhD,QAAQ,CAAC,iBAAiB,EAAE;IAC1B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAC,CAAC;QACpB,OAAA,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;YACT,IAAM,SAAS,GAAG,IAAA,iCAAe,EAC/B,CAAC,CAAC,eAAe,EACjB,CAAC,CAAC,KAAK,EACP,CAAC,CAAC,UAAU,EACZ,CAAC,CAAC,WAAW,CACd,CAAC;YACF,IAAM,MAAM,GAAG,SAAS,CACtB,CAAC,CAAC,eAAe,EACjB,UAAC,CAAS,IAAK,OAAA,CAAC,CAAC,WAAW,EAAb,CAAa,EAC5B,UAAC,IAAY,IAAK,OAAA,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAApC,CAAoC,EACtD,CAAC,CAAC,UAAU,CACb,CAAC;YACF,wCAAwC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACtC,CAAC,CAAC;IAfF,CAeE,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/try-path.test.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/try-path.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/try-path.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+export {};
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/try-path.test.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/try-path.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/try-path.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,175 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var try_path_1 = require("../try-path");
+var path_1 = require("path");
+describe("mapping-entry", function () {
+    var abosolutePathMappings = [
+        {
+            pattern: "longest/pre/fix/*",
+            paths: [(0, path_1.join)("/absolute", "base", "url", "foo2", "bar")],
+        },
+        { pattern: "pre/fix/*", paths: [(0, path_1.join)("/absolute", "base", "url", "foo3")] },
+        { pattern: "*", paths: [(0, path_1.join)("/absolute", "base", "url", "foo1")] },
+    ];
+    var abosolutePathMappingsStarstWithSlash = [
+        {
+            pattern: "/opt/*",
+            paths: [(0, path_1.join)("/absolute", "src", "aws-layer")],
+        },
+        {
+            pattern: "*",
+            paths: [(0, path_1.join)("/absolute", "src")],
+        },
+    ];
+    it("should return no paths for relative requested module", function () {
+        var result = (0, try_path_1.getPathsToTry)([".ts", "tsx"], abosolutePathMappings, "./requested-module");
+        // assert.deepEqual(result, undefined);
+        expect(result).toBeUndefined();
+    });
+    it("should return no paths if no pattern match the requested module", function () {
+        var result = (0, try_path_1.getPathsToTry)([".ts", "tsx"], [
+            {
+                pattern: "longest/pre/fix/*",
+                paths: [(0, path_1.join)("/absolute", "base", "url", "foo2", "bar")],
+            },
+            {
+                pattern: "pre/fix/*",
+                paths: [(0, path_1.join)("/absolute", "base", "url", "foo3")],
+            },
+        ], "requested-module");
+        expect(result).toBeUndefined();
+    });
+    it("should get all paths that matches requested module", function () {
+        var result = (0, try_path_1.getPathsToTry)([".ts", ".tsx"], abosolutePathMappings, "longest/pre/fix/requested-module");
+        // assert.deepEqual(result, [
+        //   // "longest/pre/fix/*"
+        //   { type: "file", path: join("/absolute", "base", "url", "foo2", "bar") },
+        //   {
+        //     type: "extension",
+        //     path: join("/absolute", "base", "url", "foo2", "bar.ts"),
+        //   },
+        //   {
+        //     type: "extension",
+        //     path: join("/absolute", "base", "url", "foo2", "bar.tsx"),
+        //   },
+        //   {
+        //     type: "package",
+        //     path: join("/absolute", "base", "url", "foo2", "bar", "package.json"),
+        //   },
+        //   {
+        //     type: "index",
+        //     path: join("/absolute", "base", "url", "foo2", "bar", "index.ts"),
+        //   },
+        //   {
+        //     type: "index",
+        //     path: join("/absolute", "base", "url", "foo2", "bar", "index.tsx"),
+        //   },
+        //   // "*"
+        //   { type: "file", path: join("/absolute", "base", "url", "foo1") },
+        //   { type: "extension", path: join("/absolute", "base", "url", "foo1.ts") },
+        //   { type: "extension", path: join("/absolute", "base", "url", "foo1.tsx") },
+        //   {
+        //     type: "package",
+        //     path: join("/absolute", "base", "url", "foo1", "package.json"),
+        //   },
+        //   {
+        //     type: "index",
+        //     path: join("/absolute", "base", "url", "foo1", "index.ts"),
+        //   },
+        //   {
+        //     type: "index",
+        //     path: join("/absolute", "base", "url", "foo1", "index.tsx"),
+        //   },
+        // ]);
+        expect(result).toEqual([
+            // "longest/pre/fix/*"
+            { type: "file", path: (0, path_1.join)("/absolute", "base", "url", "foo2", "bar") },
+            {
+                type: "extension",
+                path: (0, path_1.join)("/absolute", "base", "url", "foo2", "bar.ts"),
+            },
+            {
+                type: "extension",
+                path: (0, path_1.join)("/absolute", "base", "url", "foo2", "bar.tsx"),
+            },
+            {
+                type: "package",
+                path: (0, path_1.join)("/absolute", "base", "url", "foo2", "bar", "package.json"),
+            },
+            {
+                type: "index",
+                path: (0, path_1.join)("/absolute", "base", "url", "foo2", "bar", "index.ts"),
+            },
+            {
+                type: "index",
+                path: (0, path_1.join)("/absolute", "base", "url", "foo2", "bar", "index.tsx"),
+            },
+            // "*"
+            { type: "file", path: (0, path_1.join)("/absolute", "base", "url", "foo1") },
+            { type: "extension", path: (0, path_1.join)("/absolute", "base", "url", "foo1.ts") },
+            { type: "extension", path: (0, path_1.join)("/absolute", "base", "url", "foo1.tsx") },
+            {
+                type: "package",
+                path: (0, path_1.join)("/absolute", "base", "url", "foo1", "package.json"),
+            },
+            {
+                type: "index",
+                path: (0, path_1.join)("/absolute", "base", "url", "foo1", "index.ts"),
+            },
+            {
+                type: "index",
+                path: (0, path_1.join)("/absolute", "base", "url", "foo1", "index.tsx"),
+            },
+        ]);
+    });
+    it("should resolve paths starting with a slash", function () {
+        var result = (0, try_path_1.getPathsToTry)([".ts"], abosolutePathMappingsStarstWithSlash, "/opt/utils");
+        expect(result).toEqual([
+            // "opt/*"
+            {
+                path: (0, path_1.join)("/absolute", "src", "aws-layer"),
+                type: "file",
+            },
+            {
+                path: (0, path_1.join)("/absolute", "src", "aws-layer.ts"),
+                type: "extension",
+            },
+            {
+                path: (0, path_1.join)("/absolute", "src", "aws-layer", "package.json"),
+                type: "package",
+            },
+            {
+                path: (0, path_1.join)("/absolute", "src", "aws-layer", "index.ts"),
+                type: "index",
+            },
+            // "*"
+            {
+                path: (0, path_1.join)("/absolute", "src"),
+                type: "file",
+            },
+            {
+                path: (0, path_1.join)("/absolute", "src.ts"),
+                type: "extension",
+            },
+            {
+                path: (0, path_1.join)("/absolute", "src", "package.json"),
+                type: "package",
+            },
+            {
+                path: (0, path_1.join)("/absolute", "src", "index.ts"),
+                type: "index",
+            },
+        ]);
+    });
+});
+// describe("match-star", () => {
+//   it("should match star in last position", () => {
+//     const result = matchStar("lib/*", "lib/mylib");
+//     assert.equal(result, "mylib");
+//   });
+//   it("should match star in first position", () => {
+//     const result = matchStar("*/lib", "mylib/lib");
+//     assert.equal(result, "mylib");
+//   });
+// });
+//# sourceMappingURL=try-path.test.js.map
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/try-path.test.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/try-path.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/try-path.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"try-path.test.js","sourceRoot":"","sources":["../../src/__tests__/try-path.test.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/tsconfig-loader.test.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/tsconfig-loader.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/tsconfig-loader.test.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+export {};
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/tsconfig-loader.test.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/tsconfig-loader.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/tsconfig-loader.test.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,328 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+var tsconfig_loader_1 = require("../tsconfig-loader");
+var path_1 = require("path");
+describe("tsconfig-loader", function () {
+    it("should find tsconfig in cwd", function () {
+        var result = (0, tsconfig_loader_1.tsConfigLoader)({
+            cwd: "/foo/bar",
+            getEnv: function (_) { return undefined; },
+            loadSync: function (cwd) {
+                return {
+                    tsConfigPath: "".concat(cwd, "/tsconfig.json"),
+                    baseUrl: "./",
+                    paths: {},
+                };
+            },
+        });
+        // assert.equal(result.tsConfigPath, "/foo/bar/tsconfig.json");
+        expect(result.tsConfigPath).toBe("/foo/bar/tsconfig.json");
+    });
+    it("should return loaderResult.tsConfigPath as undefined when not found", function () {
+        var result = (0, tsconfig_loader_1.tsConfigLoader)({
+            cwd: "/foo/bar",
+            getEnv: function (_) { return undefined; },
+            loadSync: function (_) {
+                return {
+                    tsConfigPath: undefined,
+                    baseUrl: "./",
+                    paths: {},
+                };
+            },
+        });
+        // assert.isUndefined(result.tsConfigPath);
+        expect(result.tsConfigPath).toBeUndefined();
+    });
+    it("should use TS_NODE_PROJECT env if exists", function () {
+        var result = (0, tsconfig_loader_1.tsConfigLoader)({
+            cwd: "/foo/bar",
+            getEnv: function (key) {
+                return key === "TS_NODE_PROJECT" ? "/foo/baz" : undefined;
+            },
+            loadSync: function (cwd, fileName) {
+                if (cwd === "/foo/bar" && fileName === "/foo/baz") {
+                    return {
+                        tsConfigPath: "/foo/baz/tsconfig.json",
+                        baseUrl: "./",
+                        paths: {},
+                    };
+                }
+                return {
+                    tsConfigPath: undefined,
+                    baseUrl: "./",
+                    paths: {},
+                };
+            },
+        });
+        // assert.equal(result.tsConfigPath, "/foo/baz/tsconfig.json");
+        expect(result.tsConfigPath).toBe("/foo/baz/tsconfig.json");
+    });
+    it("should use TS_NODE_BASEURL env if exists", function () {
+        var result = (0, tsconfig_loader_1.tsConfigLoader)({
+            cwd: "/foo/bar",
+            getEnv: function (key) {
+                return key === "TS_NODE_BASEURL" ? "SOME_BASEURL" : undefined;
+            },
+            loadSync: function (_0, _1, baseUrl) {
+                return {
+                    tsConfigPath: undefined,
+                    baseUrl: baseUrl,
+                    paths: {},
+                };
+            },
+        });
+        // assert.equal(result.baseUrl, "SOME_BASEURL");
+        expect(result.baseUrl).toBe("SOME_BASEURL");
+    });
+    it("should not use TS_NODE_BASEURL env if it does not exist", function () {
+        var result = (0, tsconfig_loader_1.tsConfigLoader)({
+            cwd: "/foo/bar",
+            getEnv: function (_) {
+                return undefined;
+            },
+            loadSync: function (_0, _1, baseUrl) {
+                return {
+                    tsConfigPath: undefined,
+                    baseUrl: baseUrl,
+                    paths: {},
+                };
+            },
+        });
+        // assert.equal(result.baseUrl, undefined);
+        expect(result.baseUrl).toBeUndefined();
+    });
+});
+describe("walkForTsConfig", function () {
+    it("should find tsconfig in starting directory", function () {
+        var pathToTsconfig = (0, path_1.join)("/root", "dir1", "tsconfig.json");
+        var res = (0, tsconfig_loader_1.walkForTsConfig)((0, path_1.join)("/root", "dir1"), function (path) { return path === pathToTsconfig; });
+        // assert.equal(res, pathToTsconfig);
+        expect(res).toBe(pathToTsconfig);
+    });
+    it("should find tsconfig in parent directory", function () {
+        var pathToTsconfig = (0, path_1.join)("/root", "tsconfig.json");
+        var res = (0, tsconfig_loader_1.walkForTsConfig)((0, path_1.join)("/root", "dir1"), function (path) { return path === pathToTsconfig; });
+        // assert.equal(res, pathToTsconfig);
+        expect(res).toBe(pathToTsconfig);
+    });
+    it("should return undefined when reaching the top", function () {
+        var res = (0, tsconfig_loader_1.walkForTsConfig)((0, path_1.join)("/root", "dir1", "kalle"), function () { return false; });
+        // assert.equal(res, undefined);
+        expect(res).toBeUndefined();
+    });
+});
+describe("loadConfig", function () {
+    it("should load a config", function () {
+        var config = { compilerOptions: { baseUrl: "hej" } };
+        var res = (0, tsconfig_loader_1.loadTsconfig)("/root/dir1/tsconfig.json", function (path) { return path === "/root/dir1/tsconfig.json"; }, function (_) { return JSON.stringify(config); });
+        // assert.deepEqual(res, config);
+        expect(res).toStrictEqual(config);
+    });
+    it("should load a config with comments", function () {
+        var config = { compilerOptions: { baseUrl: "hej" } };
+        var res = (0, tsconfig_loader_1.loadTsconfig)("/root/dir1/tsconfig.json", function (path) { return path === "/root/dir1/tsconfig.json"; }, function (_) { return "{\n          // my comment\n          \"compilerOptions\": { \n            \"baseUrl\": \"hej\"\n          }\n        }"; });
+        // assert.deepEqual(res, config);
+        expect(res).toStrictEqual(config);
+    });
+    it("should load a config with trailing commas", function () {
+        var config = { compilerOptions: { baseUrl: "hej" } };
+        var res = (0, tsconfig_loader_1.loadTsconfig)("/root/dir1/tsconfig.json", function (path) { return path === "/root/dir1/tsconfig.json"; }, function (_) { return "{\n          \"compilerOptions\": { \n            \"baseUrl\": \"hej\",\n          },\n        }"; });
+        // assert.deepEqual(res, config);
+        expect(res).toStrictEqual(config);
+    });
+    it("should throw an error including the file path when encountering invalid JSON5", function () {
+        expect(function () {
+            return (0, tsconfig_loader_1.loadTsconfig)("/root/dir1/tsconfig.json", function (path) { return path === "/root/dir1/tsconfig.json"; }, function (_) { return "{\n            \"compilerOptions\": {\n          }"; });
+        }).toThrowError("/root/dir1/tsconfig.json is malformed JSON5: invalid end of input at 3:12");
+    });
+    it("should load a config with string extends and overwrite all options", function () {
+        var firstConfig = {
+            extends: "../base-config.json",
+            compilerOptions: { baseUrl: "kalle", paths: { foo: ["bar2"] } },
+        };
+        var firstConfigPath = (0, path_1.join)("/root", "dir1", "tsconfig.json");
+        var baseConfig = {
+            compilerOptions: {
+                baseUrl: "olle",
+                paths: { foo: ["bar1"] },
+                strict: true,
+            },
+        };
+        var baseConfigPath = (0, path_1.join)("/root", "base-config.json");
+        var res = (0, tsconfig_loader_1.loadTsconfig)((0, path_1.join)("/root", "dir1", "tsconfig.json"), function (path) { return path === firstConfigPath || path === baseConfigPath; }, function (path) {
+            if (path === firstConfigPath) {
+                return JSON.stringify(firstConfig);
+            }
+            if (path === baseConfigPath) {
+                return JSON.stringify(baseConfig);
+            }
+            return "";
+        });
+        // assert.deepEqual(res, {
+        //   extends: "../base-config.json",
+        //   compilerOptions: {
+        //     baseUrl: "kalle",
+        //     paths: { foo: ["bar2"] },
+        //     strict: true,
+        //   },
+        // });
+        expect(res).toEqual({
+            extends: "../base-config.json",
+            compilerOptions: {
+                baseUrl: "kalle",
+                paths: { foo: ["bar2"] },
+                strict: true,
+            },
+        });
+    });
+    it("should load a config with string extends from node_modules and overwrite all options", function () {
+        var firstConfig = {
+            extends: "my-package/base-config.json",
+            compilerOptions: { baseUrl: "kalle", paths: { foo: ["bar2"] } },
+        };
+        var firstConfigPath = (0, path_1.join)("/root", "dir1", "tsconfig.json");
+        var baseConfig = {
+            compilerOptions: {
+                baseUrl: "olle",
+                paths: { foo: ["bar1"] },
+                strict: true,
+            },
+        };
+        var baseConfigPath = (0, path_1.join)("/root", "dir1", "node_modules", "my-package", "base-config.json");
+        var res = (0, tsconfig_loader_1.loadTsconfig)((0, path_1.join)("/root", "dir1", "tsconfig.json"), function (path) { return path === firstConfigPath || path === baseConfigPath; }, function (path) {
+            if (path === firstConfigPath) {
+                return JSON.stringify(firstConfig);
+            }
+            if (path === baseConfigPath) {
+                return JSON.stringify(baseConfig);
+            }
+            return "";
+        });
+        // assert.deepEqual(res, {
+        //   extends: "my-package/base-config.json",
+        //   compilerOptions: {
+        //     baseUrl: "kalle",
+        //     paths: { foo: ["bar2"] },
+        //     strict: true,
+        //   },
+        // });
+        expect(res).toEqual({
+            extends: "my-package/base-config.json",
+            compilerOptions: {
+                baseUrl: "kalle",
+                paths: { foo: ["bar2"] },
+                strict: true,
+            },
+        });
+    });
+    it("should use baseUrl relative to location of extended tsconfig", function () {
+        var firstConfig = { compilerOptions: { baseUrl: "." } };
+        var firstConfigPath = (0, path_1.join)("/root", "first-config.json");
+        var secondConfig = { extends: "../first-config.json" };
+        var secondConfigPath = (0, path_1.join)("/root", "dir1", "second-config.json");
+        var thirdConfig = { extends: "../second-config.json" };
+        var thirdConfigPath = (0, path_1.join)("/root", "dir1", "dir2", "third-config.json");
+        var res = (0, tsconfig_loader_1.loadTsconfig)((0, path_1.join)("/root", "dir1", "dir2", "third-config.json"), function (path) {
+            return path === firstConfigPath ||
+                path === secondConfigPath ||
+                path === thirdConfigPath;
+        }, function (path) {
+            if (path === firstConfigPath) {
+                return JSON.stringify(firstConfig);
+            }
+            if (path === secondConfigPath) {
+                return JSON.stringify(secondConfig);
+            }
+            if (path === thirdConfigPath) {
+                return JSON.stringify(thirdConfig);
+            }
+            return "";
+        });
+        // assert.deepEqual(res, {
+        //   extends: "../second-config.json",
+        //   compilerOptions: { baseUrl: join("..", "..") },
+        // });
+        expect(res).toEqual({
+            extends: "../second-config.json",
+            compilerOptions: { baseUrl: (0, path_1.join)("..", "..") },
+        });
+    });
+    it("should load a config with array extends and overwrite all options", function () {
+        var baseConfig1 = {
+            compilerOptions: { baseUrl: ".", paths: { foo: ["bar"] } },
+        };
+        var baseConfig1Path = (0, path_1.join)("/root", "base-config-1.json");
+        var baseConfig2 = { compilerOptions: { baseUrl: "." } };
+        var baseConfig2Path = (0, path_1.join)("/root", "dir1", "base-config-2.json");
+        var baseConfig3 = {
+            compilerOptions: { baseUrl: ".", paths: { foo: ["bar2"] } },
+        };
+        var baseConfig3Path = (0, path_1.join)("/root", "dir1", "dir2", "base-config-3.json");
+        var actualConfig = {
+            extends: [
+                "./base-config-1.json",
+                "./dir1/base-config-2.json",
+                "./dir1/dir2/base-config-3.json",
+            ],
+        };
+        var actualConfigPath = (0, path_1.join)("/root", "tsconfig.json");
+        var res = (0, tsconfig_loader_1.loadTsconfig)((0, path_1.join)("/root", "tsconfig.json"), function (path) {
+            return [
+                baseConfig1Path,
+                baseConfig2Path,
+                baseConfig3Path,
+                actualConfigPath,
+            ].indexOf(path) >= 0;
+        }, function (path) {
+            if (path === baseConfig1Path) {
+                return JSON.stringify(baseConfig1);
+            }
+            if (path === baseConfig2Path) {
+                return JSON.stringify(baseConfig2);
+            }
+            if (path === baseConfig3Path) {
+                return JSON.stringify(baseConfig3);
+            }
+            if (path === actualConfigPath) {
+                return JSON.stringify(actualConfig);
+            }
+            return "";
+        });
+        expect(res).toEqual({
+            extends: [
+                "./base-config-1.json",
+                "./dir1/base-config-2.json",
+                "./dir1/dir2/base-config-3.json",
+            ],
+            compilerOptions: {
+                baseUrl: (0, path_1.join)("dir1", "dir2"),
+                paths: { foo: ["bar2"] },
+            },
+        });
+    });
+    it("should load a config with array extends without .json extension", function () {
+        var baseConfig = {
+            compilerOptions: { baseUrl: ".", paths: { foo: ["bar"] } },
+        };
+        var baseConfigPath = (0, path_1.join)("/root", "base-config-1.json");
+        var actualConfig = { extends: ["./base-config-1"] };
+        var actualConfigPath = (0, path_1.join)("/root", "tsconfig.json");
+        var res = (0, tsconfig_loader_1.loadTsconfig)((0, path_1.join)("/root", "tsconfig.json"), function (path) { return [baseConfigPath, actualConfigPath].indexOf(path) >= 0; }, function (path) {
+            if (path === baseConfigPath) {
+                return JSON.stringify(baseConfig);
+            }
+            if (path === actualConfigPath) {
+                return JSON.stringify(actualConfig);
+            }
+            return "";
+        });
+        expect(res).toEqual({
+            extends: ["./base-config-1"],
+            compilerOptions: {
+                baseUrl: ".",
+                paths: { foo: ["bar"] },
+            },
+        });
+    });
+});
+//# sourceMappingURL=tsconfig-loader.test.js.map
Index: frontend/node_modules/tsconfig-paths/lib/__tests__/tsconfig-loader.test.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/__tests__/tsconfig-loader.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/__tests__/tsconfig-loader.test.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"tsconfig-loader.test.js","sourceRoot":"","sources":["../../src/__tests__/tsconfig-loader.test.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/tsconfig-paths/lib/config-loader.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/config-loader.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/config-loader.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,33 @@
+import * as TsConfigLoader2 from "./tsconfig-loader";
+export interface ExplicitParams {
+    baseUrl: string;
+    paths: {
+        [key: string]: Array<string>;
+    };
+    mainFields?: Array<string>;
+    addMatchAll?: boolean;
+}
+export declare type TsConfigLoader = (params: TsConfigLoader2.TsConfigLoaderParams) => TsConfigLoader2.TsConfigLoaderResult;
+export interface ConfigLoaderParams {
+    cwd: string;
+    explicitParams?: ExplicitParams;
+    tsConfigLoader?: TsConfigLoader;
+}
+export interface ConfigLoaderSuccessResult {
+    resultType: "success";
+    configFileAbsolutePath: string;
+    baseUrl: string;
+    absoluteBaseUrl: string;
+    paths: {
+        [key: string]: Array<string>;
+    };
+    mainFields?: Array<string>;
+    addMatchAll?: boolean;
+}
+export interface ConfigLoaderFailResult {
+    resultType: "failed";
+    message: string;
+}
+export declare type ConfigLoaderResult = ConfigLoaderSuccessResult | ConfigLoaderFailResult;
+export declare function loadConfig(cwd?: string): ConfigLoaderResult;
+export declare function configLoader({ cwd, explicitParams, tsConfigLoader, }: ConfigLoaderParams): ConfigLoaderResult;
Index: frontend/node_modules/tsconfig-paths/lib/config-loader.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/config-loader.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/config-loader.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,57 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.configLoader = exports.loadConfig = void 0;
+var TsConfigLoader2 = require("./tsconfig-loader");
+var path = require("path");
+var options_1 = require("./options");
+function loadConfig(cwd) {
+    if (cwd === void 0) { cwd = options_1.options.cwd; }
+    return configLoader({ cwd: cwd });
+}
+exports.loadConfig = loadConfig;
+function configLoader(_a) {
+    var cwd = _a.cwd, explicitParams = _a.explicitParams, _b = _a.tsConfigLoader, tsConfigLoader = _b === void 0 ? TsConfigLoader2.tsConfigLoader : _b;
+    if (explicitParams) {
+        // tslint:disable-next-line:no-shadowed-variable
+        var absoluteBaseUrl_1 = path.isAbsolute(explicitParams.baseUrl)
+            ? explicitParams.baseUrl
+            : path.join(cwd, explicitParams.baseUrl);
+        return {
+            resultType: "success",
+            configFileAbsolutePath: "",
+            baseUrl: explicitParams.baseUrl,
+            absoluteBaseUrl: absoluteBaseUrl_1,
+            paths: explicitParams.paths,
+            mainFields: explicitParams.mainFields,
+            addMatchAll: explicitParams.addMatchAll,
+        };
+    }
+    // Load tsconfig and create path matching function
+    var loadResult = tsConfigLoader({
+        cwd: cwd,
+        getEnv: function (key) { return process.env[key]; },
+    });
+    if (!loadResult.tsConfigPath) {
+        return {
+            resultType: "failed",
+            message: "Couldn't find tsconfig.json",
+        };
+    }
+    if (!loadResult.baseUrl) {
+        return {
+            resultType: "failed",
+            message: "Missing baseUrl in compilerOptions",
+        };
+    }
+    var tsConfigDir = path.dirname(loadResult.tsConfigPath);
+    var absoluteBaseUrl = path.join(tsConfigDir, loadResult.baseUrl);
+    return {
+        resultType: "success",
+        configFileAbsolutePath: loadResult.tsConfigPath,
+        baseUrl: loadResult.baseUrl,
+        absoluteBaseUrl: absoluteBaseUrl,
+        paths: loadResult.paths || {},
+    };
+}
+exports.configLoader = configLoader;
+//# sourceMappingURL=config-loader.js.map
Index: frontend/node_modules/tsconfig-paths/lib/config-loader.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/config-loader.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/config-loader.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":";;;AAAA,mDAAqD;AACrD,2BAA6B;AAC7B,qCAAoC;AAsCpC,SAAgB,UAAU,CAAC,GAAyB;IAAzB,oBAAA,EAAA,MAAc,iBAAO,CAAC,GAAG;IAClD,OAAO,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACpC,CAAC;AAFD,gCAEC;AAED,SAAgB,YAAY,CAAC,EAIR;QAHnB,GAAG,SAAA,EACH,cAAc,oBAAA,EACd,sBAA+C,EAA/C,cAAc,mBAAG,eAAe,CAAC,cAAc,KAAA;IAE/C,IAAI,cAAc,EAAE;QAClB,gDAAgD;QAChD,IAAM,iBAAe,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC;YAC7D,CAAC,CAAC,cAAc,CAAC,OAAO;YACxB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QAE3C,OAAO;YACL,UAAU,EAAE,SAAS;YACrB,sBAAsB,EAAE,EAAE;YAC1B,OAAO,EAAE,cAAc,CAAC,OAAO;YAC/B,eAAe,mBAAA;YACf,KAAK,EAAE,cAAc,CAAC,KAAK;YAC3B,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,WAAW,EAAE,cAAc,CAAC,WAAW;SACxC,CAAC;KACH;IAED,kDAAkD;IAClD,IAAM,UAAU,GAAG,cAAc,CAAC;QAChC,GAAG,KAAA;QACH,MAAM,EAAE,UAAC,GAAW,IAAK,OAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAhB,CAAgB;KAC1C,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;QAC5B,OAAO;YACL,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,6BAA6B;SACvC,CAAC;KACH;IAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;QACvB,OAAO;YACL,UAAU,EAAE,QAAQ;YACpB,OAAO,EAAE,oCAAoC;SAC9C,CAAC;KACH;IAED,IAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAEnE,OAAO;QACL,UAAU,EAAE,SAAS;QACrB,sBAAsB,EAAE,UAAU,CAAC,YAAY;QAC/C,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,eAAe,iBAAA;QACf,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,EAAE;KAC9B,CAAC;AACJ,CAAC;AApDD,oCAoDC"}
Index: frontend/node_modules/tsconfig-paths/lib/filesystem.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/filesystem.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/filesystem.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,33 @@
+/**
+ * Typing for the fields of package.json we care about
+ */
+export interface PackageJson {
+    [key: string]: string;
+}
+/**
+ * A function that json from a file
+ */
+export interface ReadJsonSync {
+    (packageJsonPath: string): any | undefined;
+}
+export interface FileExistsSync {
+    (name: string): boolean;
+}
+export interface FileExistsAsync {
+    (path: string, callback: (err?: Error, exists?: boolean) => void): void;
+}
+export interface ReadJsonAsyncCallback {
+    (err?: Error, content?: any): void;
+}
+export interface ReadJsonAsync {
+    (path: string, callback: ReadJsonAsyncCallback): void;
+}
+export declare function fileExistsSync(path: string): boolean;
+/**
+ * Reads package.json from disk
+ * @param file Path to package.json
+ */
+export declare function readJsonFromDiskSync(packageJsonPath: string): any | undefined;
+export declare function readJsonFromDiskAsync(path: string, callback: (err?: Error, content?: any) => void): void;
+export declare function fileExistsAsync(path2: string, callback2: (err?: Error, exists?: boolean) => void): void;
+export declare function removeExtension(path: string): string;
Index: frontend/node_modules/tsconfig-paths/lib/filesystem.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/filesystem.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/filesystem.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,55 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.removeExtension = exports.fileExistsAsync = exports.readJsonFromDiskAsync = exports.readJsonFromDiskSync = exports.fileExistsSync = void 0;
+var fs = require("fs");
+function fileExistsSync(path) {
+    try {
+        var stats = fs.statSync(path);
+        return stats.isFile();
+    }
+    catch (err) {
+        // If error, assume file did not exist
+        return false;
+    }
+}
+exports.fileExistsSync = fileExistsSync;
+/**
+ * Reads package.json from disk
+ * @param file Path to package.json
+ */
+// tslint:disable-next-line:no-any
+function readJsonFromDiskSync(packageJsonPath) {
+    if (!fs.existsSync(packageJsonPath)) {
+        return undefined;
+    }
+    return require(packageJsonPath);
+}
+exports.readJsonFromDiskSync = readJsonFromDiskSync;
+function readJsonFromDiskAsync(path, 
+// tslint:disable-next-line:no-any
+callback) {
+    fs.readFile(path, "utf8", function (err, result) {
+        // If error, assume file did not exist
+        if (err || !result) {
+            return callback();
+        }
+        var json = JSON.parse(result);
+        return callback(undefined, json);
+    });
+}
+exports.readJsonFromDiskAsync = readJsonFromDiskAsync;
+function fileExistsAsync(path2, callback2) {
+    fs.stat(path2, function (err, stats) {
+        if (err) {
+            // If error assume file does not exist
+            return callback2(undefined, false);
+        }
+        callback2(undefined, stats ? stats.isFile() : false);
+    });
+}
+exports.fileExistsAsync = fileExistsAsync;
+function removeExtension(path) {
+    return path.substring(0, path.lastIndexOf(".")) || path;
+}
+exports.removeExtension = removeExtension;
+//# sourceMappingURL=filesystem.js.map
Index: frontend/node_modules/tsconfig-paths/lib/filesystem.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/filesystem.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/filesystem.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":";;;AAAA,uBAAyB;AAkCzB,SAAgB,cAAc,CAAC,IAAY;IACzC,IAAI;QACF,IAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;KACvB;IAAC,OAAO,GAAG,EAAE;QACZ,sCAAsC;QACtC,OAAO,KAAK,CAAC;KACd;AACH,CAAC;AARD,wCAQC;AAED;;;GAGG;AACH,kCAAkC;AAClC,SAAgB,oBAAoB,CAAC,eAAuB;IAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;QACnC,OAAO,SAAS,CAAC;KAClB;IACD,OAAO,OAAO,CAAC,eAAe,CAAC,CAAC;AAClC,CAAC;AALD,oDAKC;AAED,SAAgB,qBAAqB,CACnC,IAAY;AACZ,kCAAkC;AAClC,QAA8C;IAE9C,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAC,GAAG,EAAE,MAAM;QACpC,sCAAsC;QACtC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE;YAClB,OAAO,QAAQ,EAAE,CAAC;SACnB;QACD,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAbD,sDAaC;AAED,SAAgB,eAAe,CAC7B,KAAa,EACb,SAAkD;IAElD,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,UAAC,GAAU,EAAE,KAAe;QACzC,IAAI,GAAG,EAAE;YACP,sCAAsC;YACtC,OAAO,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;SACpC;QACD,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAXD,0CAWC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AAC1D,CAAC;AAFD,0CAEC"}
Index: frontend/node_modules/tsconfig-paths/lib/index.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/index.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,5 @@
+export { createMatchPath, matchFromAbsolutePaths, MatchPath, } from "./match-path-sync";
+export { createMatchPathAsync, matchFromAbsolutePathsAsync, MatchPathAsync, } from "./match-path-async";
+export { register } from "./register";
+export { loadConfig, ConfigLoaderResult, ConfigLoaderSuccessResult, ConfigLoaderFailResult, } from "./config-loader";
+export { ReadJsonSync, ReadJsonAsync, FileExistsSync, FileExistsAsync, } from "./filesystem";
Index: frontend/node_modules/tsconfig-paths/lib/index.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.loadConfig = exports.register = exports.matchFromAbsolutePathsAsync = exports.createMatchPathAsync = exports.matchFromAbsolutePaths = exports.createMatchPath = void 0;
+// register is used from register.js in root dir
+var match_path_sync_1 = require("./match-path-sync");
+Object.defineProperty(exports, "createMatchPath", { enumerable: true, get: function () { return match_path_sync_1.createMatchPath; } });
+Object.defineProperty(exports, "matchFromAbsolutePaths", { enumerable: true, get: function () { return match_path_sync_1.matchFromAbsolutePaths; } });
+var match_path_async_1 = require("./match-path-async");
+Object.defineProperty(exports, "createMatchPathAsync", { enumerable: true, get: function () { return match_path_async_1.createMatchPathAsync; } });
+Object.defineProperty(exports, "matchFromAbsolutePathsAsync", { enumerable: true, get: function () { return match_path_async_1.matchFromAbsolutePathsAsync; } });
+var register_1 = require("./register");
+Object.defineProperty(exports, "register", { enumerable: true, get: function () { return register_1.register; } });
+var config_loader_1 = require("./config-loader");
+Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_loader_1.loadConfig; } });
+//# sourceMappingURL=index.js.map
Index: frontend/node_modules/tsconfig-paths/lib/index.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/index.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/index.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,gDAAgD;AAChD,qDAI2B;AAHzB,kHAAA,eAAe,OAAA;AACf,yHAAA,sBAAsB,OAAA;AAGxB,uDAI4B;AAH1B,wHAAA,oBAAoB,OAAA;AACpB,+HAAA,2BAA2B,OAAA;AAG7B,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,iDAKyB;AAJvB,2GAAA,UAAU,OAAA"}
Index: frontend/node_modules/tsconfig-paths/lib/mapping-entry.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/mapping-entry.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/mapping-entry.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,17 @@
+export interface MappingEntry {
+    readonly pattern: string;
+    readonly paths: ReadonlyArray<string>;
+}
+export interface Paths {
+    readonly [key: string]: ReadonlyArray<string>;
+}
+/**
+ * Converts an absolute baseUrl and paths to an array of absolute mapping entries.
+ * The array is sorted by longest prefix.
+ * Having an array with entries allows us to keep a sorting order rather than
+ * sort by keys each time we use the mappings.
+ * @param absoluteBaseUrl
+ * @param paths
+ * @param addMatchAll
+ */
+export declare function getAbsoluteMappingEntries(absoluteBaseUrl: string, paths: Paths, addMatchAll: boolean): ReadonlyArray<MappingEntry>;
Index: frontend/node_modules/tsconfig-paths/lib/mapping-entry.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/mapping-entry.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/mapping-entry.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,53 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getAbsoluteMappingEntries = void 0;
+var path = require("path");
+/**
+ * Converts an absolute baseUrl and paths to an array of absolute mapping entries.
+ * The array is sorted by longest prefix.
+ * Having an array with entries allows us to keep a sorting order rather than
+ * sort by keys each time we use the mappings.
+ * @param absoluteBaseUrl
+ * @param paths
+ * @param addMatchAll
+ */
+function getAbsoluteMappingEntries(absoluteBaseUrl, paths, addMatchAll) {
+    // Resolve all paths to absolute form once here, and sort them by
+    // longest prefix once here, this saves time on each request later.
+    // We need to put them in an array to preserve the sorting order.
+    var sortedKeys = sortByLongestPrefix(Object.keys(paths));
+    var absolutePaths = [];
+    for (var _i = 0, sortedKeys_1 = sortedKeys; _i < sortedKeys_1.length; _i++) {
+        var key = sortedKeys_1[_i];
+        absolutePaths.push({
+            pattern: key,
+            paths: paths[key].map(function (pathToResolve) {
+                return path.join(absoluteBaseUrl, pathToResolve);
+            }),
+        });
+    }
+    // If there is no match-all path specified in the paths section of tsconfig, then try to match
+    // all paths relative to baseUrl, this is how typescript works.
+    if (!paths["*"] && addMatchAll) {
+        absolutePaths.push({
+            pattern: "*",
+            paths: ["".concat(absoluteBaseUrl.replace(/\/$/, ""), "/*")],
+        });
+    }
+    return absolutePaths;
+}
+exports.getAbsoluteMappingEntries = getAbsoluteMappingEntries;
+/**
+ * Sort path patterns.
+ * If a module name can be matched with multiple patterns then pattern with the longest prefix will be picked.
+ */
+function sortByLongestPrefix(arr) {
+    return arr
+        .concat()
+        .sort(function (a, b) { return getPrefixLength(b) - getPrefixLength(a); });
+}
+function getPrefixLength(pattern) {
+    var prefixLength = pattern.indexOf("*");
+    return pattern.substr(0, prefixLength).length;
+}
+//# sourceMappingURL=mapping-entry.js.map
Index: frontend/node_modules/tsconfig-paths/lib/mapping-entry.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/mapping-entry.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/mapping-entry.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"mapping-entry.js","sourceRoot":"","sources":["../src/mapping-entry.ts"],"names":[],"mappings":";;;AAAA,2BAA6B;AAW7B;;;;;;;;GAQG;AACH,SAAgB,yBAAyB,CACvC,eAAuB,EACvB,KAAY,EACZ,WAAoB;IAEpB,iEAAiE;IACjE,mEAAmE;IACnE,iEAAiE;IACjE,IAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,IAAM,aAAa,GAAwB,EAAE,CAAC;IAC9C,KAAkB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU,EAAE;QAAzB,IAAM,GAAG,mBAAA;QACZ,aAAa,CAAC,IAAI,CAAC;YACjB,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAC,aAAa;gBAClC,OAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC;YAAzC,CAAyC,CAC1C;SACF,CAAC,CAAC;KACJ;IACD,8FAA8F;IAC9F,+DAA+D;IAC/D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE;QAC9B,aAAa,CAAC,IAAI,CAAC;YACjB,OAAO,EAAE,GAAG;YACZ,KAAK,EAAE,CAAC,UAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,OAAI,CAAC;SACnD,CAAC,CAAC;KACJ;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AA5BD,8DA4BC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,GAAkB;IAC7C,OAAO,GAAG;SACP,MAAM,EAAE;SACR,IAAI,CAAC,UAAC,CAAS,EAAE,CAAS,IAAK,OAAA,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,EAAvC,CAAuC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,IAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC;AAChD,CAAC"}
Index: frontend/node_modules/tsconfig-paths/lib/match-path-async.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/match-path-async.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/match-path-async.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+import * as MappingEntry from "./mapping-entry";
+import * as Filesystem from "./filesystem";
+/**
+ * Function that can match a path async
+ */
+export interface MatchPathAsync {
+    (requestedModule: string, readJson: Filesystem.ReadJsonAsync | undefined, fileExists: Filesystem.FileExistsAsync | undefined, extensions: ReadonlyArray<string> | undefined, callback: MatchPathAsyncCallback): void;
+}
+export interface MatchPathAsyncCallback {
+    (err?: Error, path?: string): void;
+}
+/**
+ * See the sync version for docs.
+ */
+export declare function createMatchPathAsync(absoluteBaseUrl: string, paths: {
+    [key: string]: Array<string>;
+}, mainFields?: string[], addMatchAll?: boolean): MatchPathAsync;
+/**
+ * See the sync version for docs.
+ */
+export declare function matchFromAbsolutePathsAsync(absolutePathMappings: ReadonlyArray<MappingEntry.MappingEntry>, requestedModule: string, readJson: Filesystem.ReadJsonAsync | undefined, fileExists: Filesystem.FileExistsAsync | undefined, extensions: readonly string[] | undefined, callback: MatchPathAsyncCallback, mainFields?: string[]): void;
Index: frontend/node_modules/tsconfig-paths/lib/match-path-async.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/match-path-async.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/match-path-async.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,113 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.matchFromAbsolutePathsAsync = exports.createMatchPathAsync = void 0;
+var path = require("path");
+var TryPath = require("./try-path");
+var MappingEntry = require("./mapping-entry");
+var Filesystem = require("./filesystem");
+/**
+ * See the sync version for docs.
+ */
+function createMatchPathAsync(absoluteBaseUrl, paths, mainFields, addMatchAll) {
+    if (mainFields === void 0) { mainFields = ["main"]; }
+    if (addMatchAll === void 0) { addMatchAll = true; }
+    var absolutePaths = MappingEntry.getAbsoluteMappingEntries(absoluteBaseUrl, paths, addMatchAll);
+    return function (requestedModule, readJson, fileExists, extensions, callback) {
+        return matchFromAbsolutePathsAsync(absolutePaths, requestedModule, readJson, fileExists, extensions, callback, mainFields);
+    };
+}
+exports.createMatchPathAsync = createMatchPathAsync;
+/**
+ * See the sync version for docs.
+ */
+function matchFromAbsolutePathsAsync(absolutePathMappings, requestedModule, readJson, fileExists, extensions, callback, mainFields) {
+    if (readJson === void 0) { readJson = Filesystem.readJsonFromDiskAsync; }
+    if (fileExists === void 0) { fileExists = Filesystem.fileExistsAsync; }
+    if (extensions === void 0) { extensions = Object.keys(require.extensions); }
+    if (mainFields === void 0) { mainFields = ["main"]; }
+    var tryPaths = TryPath.getPathsToTry(extensions, absolutePathMappings, requestedModule);
+    if (!tryPaths) {
+        return callback();
+    }
+    findFirstExistingPath(tryPaths, readJson, fileExists, callback, 0, mainFields);
+}
+exports.matchFromAbsolutePathsAsync = matchFromAbsolutePathsAsync;
+function findFirstExistingMainFieldMappedFile(packageJson, mainFields, packageJsonPath, fileExistsAsync, doneCallback, index) {
+    if (index === void 0) { index = 0; }
+    if (index >= mainFields.length) {
+        return doneCallback(undefined, undefined);
+    }
+    var tryNext = function () {
+        return findFirstExistingMainFieldMappedFile(packageJson, mainFields, packageJsonPath, fileExistsAsync, doneCallback, index + 1);
+    };
+    var mainFieldMapping = packageJson[mainFields[index]];
+    if (typeof mainFieldMapping !== "string") {
+        // Skip mappings that are not pointers to replacement files
+        return tryNext();
+    }
+    var mappedFilePath = path.join(path.dirname(packageJsonPath), mainFieldMapping);
+    fileExistsAsync(mappedFilePath, function (err, exists) {
+        if (err) {
+            return doneCallback(err);
+        }
+        if (exists) {
+            return doneCallback(undefined, mappedFilePath);
+        }
+        return tryNext();
+    });
+}
+// Recursive loop to probe for physical files
+function findFirstExistingPath(tryPaths, readJson, fileExists, doneCallback, index, mainFields) {
+    if (index === void 0) { index = 0; }
+    if (mainFields === void 0) { mainFields = ["main"]; }
+    var tryPath = tryPaths[index];
+    if (tryPath.type === "file" ||
+        tryPath.type === "extension" ||
+        tryPath.type === "index") {
+        fileExists(tryPath.path, function (err, exists) {
+            if (err) {
+                return doneCallback(err);
+            }
+            if (exists) {
+                return doneCallback(undefined, TryPath.getStrippedPath(tryPath));
+            }
+            if (index === tryPaths.length - 1) {
+                return doneCallback();
+            }
+            // Continue with the next path
+            return findFirstExistingPath(tryPaths, readJson, fileExists, doneCallback, index + 1, mainFields);
+        });
+    }
+    else if (tryPath.type === "package") {
+        readJson(tryPath.path, function (err, packageJson) {
+            if (err) {
+                return doneCallback(err);
+            }
+            if (packageJson) {
+                return findFirstExistingMainFieldMappedFile(packageJson, mainFields, tryPath.path, fileExists, function (mainFieldErr, mainFieldMappedFile) {
+                    if (mainFieldErr) {
+                        return doneCallback(mainFieldErr);
+                    }
+                    if (mainFieldMappedFile) {
+                        return doneCallback(undefined, mainFieldMappedFile);
+                    }
+                    // No field in package json was a valid option. Continue with the next path.
+                    return findFirstExistingPath(tryPaths, readJson, fileExists, doneCallback, index + 1, mainFields);
+                });
+            }
+            // This is async code, we need to return unconditionally, otherwise the code still falls
+            // through and keeps recursing. While this might work in general, libraries that use neo-async
+            // like Webpack will actually not allow you to call the same callback twice.
+            //
+            // An example of where this caused issues:
+            // https://github.com/dividab/tsconfig-paths-webpack-plugin/issues/11
+            //
+            // Continue with the next path
+            return findFirstExistingPath(tryPaths, readJson, fileExists, doneCallback, index + 1, mainFields);
+        });
+    }
+    else {
+        TryPath.exhaustiveTypeException(tryPath.type);
+    }
+}
+//# sourceMappingURL=match-path-async.js.map
Index: frontend/node_modules/tsconfig-paths/lib/match-path-async.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/match-path-async.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/match-path-async.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"match-path-async.js","sourceRoot":"","sources":["../src/match-path-async.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/tsconfig-paths/lib/match-path-sync.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/match-path-sync.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/match-path-sync.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,30 @@
+import * as Filesystem from "./filesystem";
+import * as MappingEntry from "./mapping-entry";
+/**
+ * Function that can match a path
+ */
+export interface MatchPath {
+    (requestedModule: string, readJson?: Filesystem.ReadJsonSync, fileExists?: (name: string) => boolean, extensions?: ReadonlyArray<string>): string | undefined;
+}
+/**
+ * Creates a function that can resolve paths according to tsconfig paths property.
+ * @param absoluteBaseUrl Absolute version of baseUrl as specified in tsconfig.
+ * @param paths The paths as specified in tsconfig.
+ * @param mainFields A list of package.json field names to try when resolving module files.
+ * @param addMatchAll Add a match-all "*" rule if none is present
+ * @returns a function that can resolve paths.
+ */
+export declare function createMatchPath(absoluteBaseUrl: string, paths: {
+    [key: string]: Array<string>;
+}, mainFields?: string[], addMatchAll?: boolean): MatchPath;
+/**
+ * Finds a path from tsconfig that matches a module load request.
+ * @param absolutePathMappings The paths to try as specified in tsconfig but resolved to absolute form.
+ * @param requestedModule The required module name.
+ * @param readJson Function that can read json from a path (useful for testing).
+ * @param fileExists Function that checks for existence of a file at a path (useful for testing).
+ * @param extensions File extensions to probe for (useful for testing).
+ * @param mainFields A list of package.json field names to try when resolving module files.
+ * @returns the found path, or undefined if no path was found.
+ */
+export declare function matchFromAbsolutePaths(absolutePathMappings: ReadonlyArray<MappingEntry.MappingEntry>, requestedModule: string, readJson?: Filesystem.ReadJsonSync, fileExists?: Filesystem.FileExistsSync, extensions?: Array<string>, mainFields?: string[]): string | undefined;
Index: frontend/node_modules/tsconfig-paths/lib/match-path-sync.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/match-path-sync.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/match-path-sync.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,87 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.matchFromAbsolutePaths = exports.createMatchPath = void 0;
+var path = require("path");
+var Filesystem = require("./filesystem");
+var MappingEntry = require("./mapping-entry");
+var TryPath = require("./try-path");
+/**
+ * Creates a function that can resolve paths according to tsconfig paths property.
+ * @param absoluteBaseUrl Absolute version of baseUrl as specified in tsconfig.
+ * @param paths The paths as specified in tsconfig.
+ * @param mainFields A list of package.json field names to try when resolving module files.
+ * @param addMatchAll Add a match-all "*" rule if none is present
+ * @returns a function that can resolve paths.
+ */
+function createMatchPath(absoluteBaseUrl, paths, mainFields, addMatchAll) {
+    if (mainFields === void 0) { mainFields = ["main"]; }
+    if (addMatchAll === void 0) { addMatchAll = true; }
+    var absolutePaths = MappingEntry.getAbsoluteMappingEntries(absoluteBaseUrl, paths, addMatchAll);
+    return function (requestedModule, readJson, fileExists, extensions) {
+        return matchFromAbsolutePaths(absolutePaths, requestedModule, readJson, fileExists, extensions, mainFields);
+    };
+}
+exports.createMatchPath = createMatchPath;
+/**
+ * Finds a path from tsconfig that matches a module load request.
+ * @param absolutePathMappings The paths to try as specified in tsconfig but resolved to absolute form.
+ * @param requestedModule The required module name.
+ * @param readJson Function that can read json from a path (useful for testing).
+ * @param fileExists Function that checks for existence of a file at a path (useful for testing).
+ * @param extensions File extensions to probe for (useful for testing).
+ * @param mainFields A list of package.json field names to try when resolving module files.
+ * @returns the found path, or undefined if no path was found.
+ */
+function matchFromAbsolutePaths(absolutePathMappings, requestedModule, readJson, fileExists, extensions, mainFields) {
+    if (readJson === void 0) { readJson = Filesystem.readJsonFromDiskSync; }
+    if (fileExists === void 0) { fileExists = Filesystem.fileExistsSync; }
+    if (extensions === void 0) { extensions = Object.keys(require.extensions); }
+    if (mainFields === void 0) { mainFields = ["main"]; }
+    var tryPaths = TryPath.getPathsToTry(extensions, absolutePathMappings, requestedModule);
+    if (!tryPaths) {
+        return undefined;
+    }
+    return findFirstExistingPath(tryPaths, readJson, fileExists, mainFields);
+}
+exports.matchFromAbsolutePaths = matchFromAbsolutePaths;
+function findFirstExistingMainFieldMappedFile(packageJson, mainFields, packageJsonPath, fileExists) {
+    for (var index = 0; index < mainFields.length; index++) {
+        var mainFieldName = mainFields[index];
+        var candidateMapping = packageJson[mainFieldName];
+        if (candidateMapping && typeof candidateMapping === "string") {
+            var candidateFilePath = path.join(path.dirname(packageJsonPath), candidateMapping);
+            if (fileExists(candidateFilePath)) {
+                return candidateFilePath;
+            }
+        }
+    }
+    return undefined;
+}
+function findFirstExistingPath(tryPaths, readJson, fileExists, mainFields) {
+    if (readJson === void 0) { readJson = Filesystem.readJsonFromDiskSync; }
+    if (mainFields === void 0) { mainFields = ["main"]; }
+    for (var _i = 0, tryPaths_1 = tryPaths; _i < tryPaths_1.length; _i++) {
+        var tryPath = tryPaths_1[_i];
+        if (tryPath.type === "file" ||
+            tryPath.type === "extension" ||
+            tryPath.type === "index") {
+            if (fileExists(tryPath.path)) {
+                return TryPath.getStrippedPath(tryPath);
+            }
+        }
+        else if (tryPath.type === "package") {
+            var packageJson = readJson(tryPath.path);
+            if (packageJson) {
+                var mainFieldMappedFile = findFirstExistingMainFieldMappedFile(packageJson, mainFields, tryPath.path, fileExists);
+                if (mainFieldMappedFile) {
+                    return mainFieldMappedFile;
+                }
+            }
+        }
+        else {
+            TryPath.exhaustiveTypeException(tryPath.type);
+        }
+    }
+    return undefined;
+}
+//# sourceMappingURL=match-path-sync.js.map
Index: frontend/node_modules/tsconfig-paths/lib/match-path-sync.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/match-path-sync.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/match-path-sync.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"match-path-sync.js","sourceRoot":"","sources":["../src/match-path-sync.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/tsconfig-paths/lib/options.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/options.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/options.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,4 @@
+export interface Options {
+    cwd: string;
+}
+export declare const options: Options;
Index: frontend/node_modules/tsconfig-paths/lib/options.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/options.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/options.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.options = void 0;
+var minimist = require("minimist");
+var argv = minimist(process.argv.slice(2), {
+    string: ["project"],
+    alias: {
+        project: ["P"],
+    },
+});
+var project = argv && argv.project;
+exports.options = {
+    cwd: project || process.cwd(),
+};
+//# sourceMappingURL=options.js.map
Index: frontend/node_modules/tsconfig-paths/lib/options.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/options.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/options.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AAErC,IAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAC3C,MAAM,EAAE,CAAC,SAAS,CAAC;IACnB,KAAK,EAAE;QACL,OAAO,EAAE,CAAC,GAAG,CAAC;KACf;CACF,CAAC,CAAC;AAEH,IAAM,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC;AAMxB,QAAA,OAAO,GAAY;IAC9B,GAAG,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE;CAC9B,CAAC"}
Index: frontend/node_modules/tsconfig-paths/lib/register.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/register.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/register.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,6 @@
+import { ExplicitParams } from "./config-loader";
+/**
+ * Installs a custom module load function that can adhere to paths in tsconfig.
+ * Returns a function to undo paths registration.
+ */
+export declare function register(explicitParams: ExplicitParams): () => void;
Index: frontend/node_modules/tsconfig-paths/lib/register.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/register.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/register.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,93 @@
+"use strict";
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.register = void 0;
+var match_path_sync_1 = require("./match-path-sync");
+var config_loader_1 = require("./config-loader");
+var options_1 = require("./options");
+var noOp = function () { return void 0; };
+function getCoreModules(builtinModules) {
+    builtinModules = builtinModules || [
+        "assert",
+        "buffer",
+        "child_process",
+        "cluster",
+        "crypto",
+        "dgram",
+        "dns",
+        "domain",
+        "events",
+        "fs",
+        "http",
+        "https",
+        "net",
+        "os",
+        "path",
+        "punycode",
+        "querystring",
+        "readline",
+        "stream",
+        "string_decoder",
+        "tls",
+        "tty",
+        "url",
+        "util",
+        "v8",
+        "vm",
+        "zlib",
+    ];
+    var coreModules = {};
+    for (var _i = 0, builtinModules_1 = builtinModules; _i < builtinModules_1.length; _i++) {
+        var module_1 = builtinModules_1[_i];
+        coreModules[module_1] = true;
+    }
+    return coreModules;
+}
+/**
+ * Installs a custom module load function that can adhere to paths in tsconfig.
+ * Returns a function to undo paths registration.
+ */
+function register(explicitParams) {
+    var configLoaderResult = (0, config_loader_1.configLoader)({
+        cwd: options_1.options.cwd,
+        explicitParams: explicitParams,
+    });
+    if (configLoaderResult.resultType === "failed") {
+        console.warn("".concat(configLoaderResult.message, ". tsconfig-paths will be skipped"));
+        return noOp;
+    }
+    var matchPath = (0, match_path_sync_1.createMatchPath)(configLoaderResult.absoluteBaseUrl, configLoaderResult.paths, configLoaderResult.mainFields, configLoaderResult.addMatchAll);
+    // Patch node's module loading
+    // tslint:disable-next-line:no-require-imports variable-name
+    var Module = require("module");
+    var originalResolveFilename = Module._resolveFilename;
+    var coreModules = getCoreModules(Module.builtinModules);
+    // tslint:disable-next-line:no-any
+    Module._resolveFilename = function (request, _parent) {
+        var isCoreModule = coreModules.hasOwnProperty(request);
+        if (!isCoreModule) {
+            var found = matchPath(request);
+            if (found) {
+                var modifiedArguments = __spreadArray([found], [].slice.call(arguments, 1), true); // Passes all arguments. Even those that is not specified above.
+                // tslint:disable-next-line:no-invalid-this
+                return originalResolveFilename.apply(this, modifiedArguments);
+            }
+        }
+        // tslint:disable-next-line:no-invalid-this
+        return originalResolveFilename.apply(this, arguments);
+    };
+    return function () {
+        // Return node's module loading to original state.
+        Module._resolveFilename = originalResolveFilename;
+    };
+}
+exports.register = register;
+//# sourceMappingURL=register.js.map
Index: frontend/node_modules/tsconfig-paths/lib/register.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/register.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/register.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAoD;AACpD,iDAA+D;AAC/D,qCAAoC;AAEpC,IAAM,IAAI,GAAG,cAAY,OAAA,KAAK,CAAC,EAAN,CAAM,CAAC;AAEhC,SAAS,cAAc,CACrB,cAAoC;IAEpC,cAAc,GAAG,cAAc,IAAI;QACjC,QAAQ;QACR,QAAQ;QACR,eAAe;QACf,SAAS;QACT,QAAQ;QACR,OAAO;QACP,KAAK;QACL,QAAQ;QACR,QAAQ;QACR,IAAI;QACJ,MAAM;QACN,OAAO;QACP,KAAK;QACL,IAAI;QACJ,MAAM;QACN,UAAU;QACV,aAAa;QACb,UAAU;QACV,QAAQ;QACR,gBAAgB;QAChB,KAAK;QACL,KAAK;QACL,KAAK;QACL,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,MAAM;KACP,CAAC;IAEF,IAAM,WAAW,GAA+B,EAAE,CAAC;IACnD,KAAmB,UAAc,EAAd,iCAAc,EAAd,4BAAc,EAAd,IAAc,EAAE;QAA9B,IAAI,QAAM,uBAAA;QACb,WAAW,CAAC,QAAM,CAAC,GAAG,IAAI,CAAC;KAC5B;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CAAC,cAA8B;IACrD,IAAM,kBAAkB,GAAG,IAAA,4BAAY,EAAC;QACtC,GAAG,EAAE,iBAAO,CAAC,GAAG;QAChB,cAAc,gBAAA;KACf,CAAC,CAAC;IAEH,IAAI,kBAAkB,CAAC,UAAU,KAAK,QAAQ,EAAE;QAC9C,OAAO,CAAC,IAAI,CACV,UAAG,kBAAkB,CAAC,OAAO,qCAAkC,CAChE,CAAC;QAEF,OAAO,IAAI,CAAC;KACb;IAED,IAAM,SAAS,GAAG,IAAA,iCAAe,EAC/B,kBAAkB,CAAC,eAAe,EAClC,kBAAkB,CAAC,KAAK,EACxB,kBAAkB,CAAC,UAAU,EAC7B,kBAAkB,CAAC,WAAW,CAC/B,CAAC;IAEF,8BAA8B;IAC9B,4DAA4D;IAC5D,IAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAM,uBAAuB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACxD,IAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC1D,kCAAkC;IAClC,MAAM,CAAC,gBAAgB,GAAG,UAAU,OAAe,EAAE,OAAY;QAC/D,IAAM,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,EAAE;YACjB,IAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,KAAK,EAAE;gBACT,IAAM,iBAAiB,kBAAI,KAAK,GAAK,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,OAAC,CAAC,CAAC,gEAAgE;gBACnI,2CAA2C;gBAC3C,OAAO,uBAAuB,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;aAC/D;SACF;QACD,2CAA2C;QAC3C,OAAO,uBAAuB,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC,CAAC;IAEF,OAAO;QACL,kDAAkD;QAClD,MAAM,CAAC,gBAAgB,GAAG,uBAAuB,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AA7CD,4BA6CC"}
Index: frontend/node_modules/tsconfig-paths/lib/try-path.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/try-path.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/try-path.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,15 @@
+import { MappingEntry } from "./mapping-entry";
+export interface TryPath {
+    readonly type: "file" | "extension" | "index" | "package";
+    readonly path: string;
+}
+/**
+ * Builds a list of all physical paths to try by:
+ * 1. Check for file named exactly as request.
+ * 2. Check for files named as request ending in any of the extensions.
+ * 3. Check for file specified in package.json's main property.
+ * 4. Check for files named as request ending in "index" with any of the extensions.
+ */
+export declare function getPathsToTry(extensions: ReadonlyArray<string>, absolutePathMappings: ReadonlyArray<MappingEntry>, requestedModule: string): ReadonlyArray<TryPath> | undefined;
+export declare function getStrippedPath(tryPath: TryPath): string;
+export declare function exhaustiveTypeException(check: never): never;
Index: frontend/node_modules/tsconfig-paths/lib/try-path.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/try-path.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/try-path.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,90 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.exhaustiveTypeException = exports.getStrippedPath = exports.getPathsToTry = void 0;
+var path = require("path");
+var path_1 = require("path");
+var filesystem_1 = require("./filesystem");
+/**
+ * Builds a list of all physical paths to try by:
+ * 1. Check for file named exactly as request.
+ * 2. Check for files named as request ending in any of the extensions.
+ * 3. Check for file specified in package.json's main property.
+ * 4. Check for files named as request ending in "index" with any of the extensions.
+ */
+function getPathsToTry(extensions, absolutePathMappings, requestedModule) {
+    if (!absolutePathMappings || !requestedModule || requestedModule[0] === ".") {
+        return undefined;
+    }
+    var pathsToTry = [];
+    for (var _i = 0, absolutePathMappings_1 = absolutePathMappings; _i < absolutePathMappings_1.length; _i++) {
+        var entry = absolutePathMappings_1[_i];
+        var starMatch = entry.pattern === requestedModule
+            ? ""
+            : matchStar(entry.pattern, requestedModule);
+        if (starMatch !== undefined) {
+            var _loop_1 = function (physicalPathPattern) {
+                var physicalPath = physicalPathPattern.replace("*", starMatch);
+                pathsToTry.push({ type: "file", path: physicalPath });
+                pathsToTry.push.apply(pathsToTry, extensions.map(function (e) { return ({ type: "extension", path: physicalPath + e }); }));
+                pathsToTry.push({
+                    type: "package",
+                    path: path.join(physicalPath, "/package.json"),
+                });
+                var indexPath = path.join(physicalPath, "/index");
+                pathsToTry.push.apply(pathsToTry, extensions.map(function (e) { return ({ type: "index", path: indexPath + e }); }));
+            };
+            for (var _a = 0, _b = entry.paths; _a < _b.length; _a++) {
+                var physicalPathPattern = _b[_a];
+                _loop_1(physicalPathPattern);
+            }
+        }
+    }
+    return pathsToTry.length === 0 ? undefined : pathsToTry;
+}
+exports.getPathsToTry = getPathsToTry;
+// Not sure why we don't just return the full found path?
+function getStrippedPath(tryPath) {
+    return tryPath.type === "index"
+        ? (0, path_1.dirname)(tryPath.path)
+        : tryPath.type === "file"
+            ? tryPath.path
+            : tryPath.type === "extension"
+                ? (0, filesystem_1.removeExtension)(tryPath.path)
+                : tryPath.type === "package"
+                    ? tryPath.path
+                    : exhaustiveTypeException(tryPath.type);
+}
+exports.getStrippedPath = getStrippedPath;
+function exhaustiveTypeException(check) {
+    throw new Error("Unknown type ".concat(check));
+}
+exports.exhaustiveTypeException = exhaustiveTypeException;
+/**
+ * Matches pattern with a single star against search.
+ * Star must match at least one character to be considered a match.
+ * @param patttern for example "foo*"
+ * @param search for example "fooawesomebar"
+ * @returns the part of search that * matches, or undefined if no match.
+ */
+function matchStar(pattern, search) {
+    if (search.length < pattern.length) {
+        return undefined;
+    }
+    if (pattern === "*") {
+        return search;
+    }
+    var star = pattern.indexOf("*");
+    if (star === -1) {
+        return undefined;
+    }
+    var part1 = pattern.substring(0, star);
+    var part2 = pattern.substring(star + 1);
+    if (search.substr(0, star) !== part1) {
+        return undefined;
+    }
+    if (search.substr(search.length - part2.length) !== part2) {
+        return undefined;
+    }
+    return search.substr(star, search.length - part2.length);
+}
+//# sourceMappingURL=try-path.js.map
Index: frontend/node_modules/tsconfig-paths/lib/try-path.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/try-path.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/try-path.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"try-path.js","sourceRoot":"","sources":["../src/try-path.ts"],"names":[],"mappings":";;;AAAA,2BAA6B;AAE7B,6BAA+B;AAC/B,2CAA+C;AAO/C;;;;;;GAMG;AACH,SAAgB,aAAa,CAC3B,UAAiC,EACjC,oBAAiD,EACjD,eAAuB;IAEvB,IAAI,CAAC,oBAAoB,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QAC3E,OAAO,SAAS,CAAC;KAClB;IAED,IAAM,UAAU,GAAmB,EAAE,CAAC;IACtC,KAAoB,UAAoB,EAApB,6CAAoB,EAApB,kCAAoB,EAApB,IAAoB,EAAE;QAArC,IAAM,KAAK,6BAAA;QACd,IAAM,SAAS,GACb,KAAK,CAAC,OAAO,KAAK,eAAe;YAC/B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAChD,IAAI,SAAS,KAAK,SAAS,EAAE;oCAChB,mBAAmB;gBAC5B,IAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBACjE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBACtD,UAAU,CAAC,IAAI,OAAf,UAAU,EACL,UAAU,CAAC,GAAG,CACf,UAAC,CAAC,IAAK,OAAA,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,EAAc,CAAA,EAA1D,CAA0D,CAClE,EACD;gBACF,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC;iBAC/C,CAAC,CAAC;gBACH,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBACpD,UAAU,CAAC,IAAI,OAAf,UAAU,EACL,UAAU,CAAC,GAAG,CACf,UAAC,CAAC,IAAK,OAAA,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,CAAC,EAAc,CAAA,EAAnD,CAAmD,CAC3D,EACD;;YAjBJ,KAAkC,UAAW,EAAX,KAAA,KAAK,CAAC,KAAK,EAAX,cAAW,EAAX,IAAW;gBAAxC,IAAM,mBAAmB,SAAA;wBAAnB,mBAAmB;aAkB7B;SACF;KACF;IACD,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;AAC1D,CAAC;AAtCD,sCAsCC;AAED,yDAAyD;AACzD,SAAgB,eAAe,CAAC,OAAgB;IAC9C,OAAO,OAAO,CAAC,IAAI,KAAK,OAAO;QAC7B,CAAC,CAAC,IAAA,cAAO,EAAC,OAAO,CAAC,IAAI,CAAC;QACvB,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM;YACzB,CAAC,CAAC,OAAO,CAAC,IAAI;YACd,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;gBAC9B,CAAC,CAAC,IAAA,4BAAe,EAAC,OAAO,CAAC,IAAI,CAAC;gBAC/B,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS;oBAC5B,CAAC,CAAC,OAAO,CAAC,IAAI;oBACd,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAVD,0CAUC;AAED,SAAgB,uBAAuB,CAAC,KAAY;IAClD,MAAM,IAAI,KAAK,CAAC,uBAAgB,KAAK,CAAE,CAAC,CAAC;AAC3C,CAAC;AAFD,0DAEC;AAED;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,OAAe,EAAE,MAAc;IAChD,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE;QAClC,OAAO,SAAS,CAAC;KAClB;IACD,IAAI,OAAO,KAAK,GAAG,EAAE;QACnB,OAAO,MAAM,CAAC;KACf;IACD,IAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE;QACf,OAAO,SAAS,CAAC;KAClB;IACD,IAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACzC,IAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,KAAK,EAAE;QACpC,OAAO,SAAS,CAAC;KAClB;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;QACzD,OAAO,SAAS,CAAC;KAClB;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC"}
Index: frontend/node_modules/tsconfig-paths/lib/tsconfig-loader.d.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/tsconfig-loader.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/tsconfig-loader.d.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,28 @@
+/**
+ * Typing for the parts of tsconfig that we care about
+ */
+export interface Tsconfig {
+    extends?: string | string[];
+    compilerOptions?: {
+        baseUrl?: string;
+        paths?: {
+            [key: string]: Array<string>;
+        };
+        strict?: boolean;
+    };
+}
+export interface TsConfigLoaderResult {
+    tsConfigPath: string | undefined;
+    baseUrl: string | undefined;
+    paths: {
+        [key: string]: Array<string>;
+    } | undefined;
+}
+export interface TsConfigLoaderParams {
+    getEnv: (key: string) => string | undefined;
+    cwd: string;
+    loadSync?(cwd: string, filename?: string, baseUrl?: string): TsConfigLoaderResult;
+}
+export declare function tsConfigLoader({ getEnv, cwd, loadSync, }: TsConfigLoaderParams): TsConfigLoaderResult;
+export declare function walkForTsConfig(directory: string, existsSync?: (path: string) => boolean): string | undefined;
+export declare function loadTsconfig(configFilePath: string, existsSync?: (path: string) => boolean, readFileSync?: (filename: string) => string): Tsconfig | undefined;
Index: frontend/node_modules/tsconfig-paths/lib/tsconfig-loader.js
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/tsconfig-loader.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/tsconfig-loader.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,141 @@
+"use strict";
+var __assign = (this && this.__assign) || function () {
+    __assign = Object.assign || function(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+                t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.loadTsconfig = exports.walkForTsConfig = exports.tsConfigLoader = void 0;
+var path = require("path");
+var fs = require("fs");
+// tslint:disable:no-require-imports
+var JSON5 = require("json5");
+var StripBom = require("strip-bom");
+function tsConfigLoader(_a) {
+    var getEnv = _a.getEnv, cwd = _a.cwd, _b = _a.loadSync, loadSync = _b === void 0 ? loadSyncDefault : _b;
+    var TS_NODE_PROJECT = getEnv("TS_NODE_PROJECT");
+    var TS_NODE_BASEURL = getEnv("TS_NODE_BASEURL");
+    // tsconfig.loadSync handles if TS_NODE_PROJECT is a file or directory
+    // and also overrides baseURL if TS_NODE_BASEURL is available.
+    var loadResult = loadSync(cwd, TS_NODE_PROJECT, TS_NODE_BASEURL);
+    return loadResult;
+}
+exports.tsConfigLoader = tsConfigLoader;
+function loadSyncDefault(cwd, filename, baseUrl) {
+    // Tsconfig.loadSync uses path.resolve. This is why we can use an absolute path as filename
+    var configPath = resolveConfigPath(cwd, filename);
+    if (!configPath) {
+        return {
+            tsConfigPath: undefined,
+            baseUrl: undefined,
+            paths: undefined,
+        };
+    }
+    var config = loadTsconfig(configPath);
+    return {
+        tsConfigPath: configPath,
+        baseUrl: baseUrl ||
+            (config && config.compilerOptions && config.compilerOptions.baseUrl),
+        paths: config && config.compilerOptions && config.compilerOptions.paths,
+    };
+}
+function resolveConfigPath(cwd, filename) {
+    if (filename) {
+        var absolutePath = fs.lstatSync(filename).isDirectory()
+            ? path.resolve(filename, "./tsconfig.json")
+            : path.resolve(cwd, filename);
+        return absolutePath;
+    }
+    if (fs.statSync(cwd).isFile()) {
+        return path.resolve(cwd);
+    }
+    var configAbsolutePath = walkForTsConfig(cwd);
+    return configAbsolutePath ? path.resolve(configAbsolutePath) : undefined;
+}
+function walkForTsConfig(directory, existsSync) {
+    if (existsSync === void 0) { existsSync = fs.existsSync; }
+    var configPath = path.join(directory, "./tsconfig.json");
+    if (existsSync(configPath)) {
+        return configPath;
+    }
+    var parentDirectory = path.join(directory, "../");
+    // If we reached the top
+    if (directory === parentDirectory) {
+        return undefined;
+    }
+    return walkForTsConfig(parentDirectory, existsSync);
+}
+exports.walkForTsConfig = walkForTsConfig;
+function loadTsconfig(configFilePath, existsSync, readFileSync) {
+    if (existsSync === void 0) { existsSync = fs.existsSync; }
+    if (readFileSync === void 0) { readFileSync = function (filename) {
+        return fs.readFileSync(filename, "utf8");
+    }; }
+    if (!existsSync(configFilePath)) {
+        return undefined;
+    }
+    var configString = readFileSync(configFilePath);
+    var cleanedJson = StripBom(configString);
+    var config;
+    try {
+        config = JSON5.parse(cleanedJson);
+    }
+    catch (e) {
+        throw new Error("".concat(configFilePath, " is malformed ").concat(e.message));
+    }
+    var extendedConfig = config.extends;
+    if (extendedConfig) {
+        var base = void 0;
+        if (Array.isArray(extendedConfig)) {
+            base = extendedConfig.reduce(function (currBase, extendedConfigElement) {
+                return mergeTsconfigs(currBase, loadTsconfigFromExtends(configFilePath, extendedConfigElement, existsSync, readFileSync));
+            }, {});
+        }
+        else {
+            base = loadTsconfigFromExtends(configFilePath, extendedConfig, existsSync, readFileSync);
+        }
+        return mergeTsconfigs(base, config);
+    }
+    return config;
+}
+exports.loadTsconfig = loadTsconfig;
+/**
+ * Intended to be called only from loadTsconfig.
+ * Parameters don't have defaults because they should use the same as loadTsconfig.
+ */
+function loadTsconfigFromExtends(configFilePath, extendedConfigValue, 
+// eslint-disable-next-line no-shadow
+existsSync, readFileSync) {
+    var _a;
+    if (typeof extendedConfigValue === "string" &&
+        extendedConfigValue.indexOf(".json") === -1) {
+        extendedConfigValue += ".json";
+    }
+    var currentDir = path.dirname(configFilePath);
+    var extendedConfigPath = path.join(currentDir, extendedConfigValue);
+    if (extendedConfigValue.indexOf("/") !== -1 &&
+        extendedConfigValue.indexOf(".") !== -1 &&
+        !existsSync(extendedConfigPath)) {
+        extendedConfigPath = path.join(currentDir, "node_modules", extendedConfigValue);
+    }
+    var config = loadTsconfig(extendedConfigPath, existsSync, readFileSync) || {};
+    // baseUrl should be interpreted as relative to extendedConfigPath,
+    // but we need to update it so it is relative to the original tsconfig being loaded
+    if ((_a = config.compilerOptions) === null || _a === void 0 ? void 0 : _a.baseUrl) {
+        var extendsDir = path.dirname(extendedConfigValue);
+        config.compilerOptions.baseUrl = path.join(extendsDir, config.compilerOptions.baseUrl);
+    }
+    return config;
+}
+function mergeTsconfigs(base, config) {
+    base = base || {};
+    config = config || {};
+    return __assign(__assign(__assign({}, base), config), { compilerOptions: __assign(__assign({}, base.compilerOptions), config.compilerOptions) });
+}
+//# sourceMappingURL=tsconfig-loader.js.map
Index: frontend/node_modules/tsconfig-paths/lib/tsconfig-loader.js.map
===================================================================
--- frontend/node_modules/tsconfig-paths/lib/tsconfig-loader.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/lib/tsconfig-loader.js.map	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+{"version":3,"file":"tsconfig-loader.js","sourceRoot":"","sources":["../src/tsconfig-loader.ts"],"names":[],"mappings":"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"}
Index: frontend/node_modules/tsconfig-paths/node_modules/.bin/json5
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/.bin/json5	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/.bin/json5	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,16 @@
+#!/bin/sh
+basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
+
+case `uname` in
+    *CYGWIN*|*MINGW*|*MSYS*)
+        if command -v cygpath > /dev/null 2>&1; then
+            basedir=`cygpath -w "$basedir"`
+        fi
+    ;;
+esac
+
+if [ -x "$basedir/node" ]; then
+  exec "$basedir/node"  "$basedir/../json5/lib/cli.js" "$@"
+else 
+  exec node  "$basedir/../json5/lib/cli.js" "$@"
+fi
Index: frontend/node_modules/tsconfig-paths/node_modules/.bin/json5.cmd
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/.bin/json5.cmd	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/.bin/json5.cmd	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,17 @@
+@ECHO off
+GOTO start
+:find_dp0
+SET dp0=%~dp0
+EXIT /b
+:start
+SETLOCAL
+CALL :find_dp0
+
+IF EXIST "%dp0%\node.exe" (
+  SET "_prog=%dp0%\node.exe"
+) ELSE (
+  SET "_prog=node"
+  SET PATHEXT=%PATHEXT:;.JS;=;%
+)
+
+endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\..\json5\lib\cli.js" %*
Index: frontend/node_modules/tsconfig-paths/node_modules/.bin/json5.ps1
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/.bin/json5.ps1	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/.bin/json5.ps1	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,28 @@
+#!/usr/bin/env pwsh
+$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
+
+$exe=""
+if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
+  # Fix case when both the Windows and Linux builds of Node
+  # are installed in the same directory
+  $exe=".exe"
+}
+$ret=0
+if (Test-Path "$basedir/node$exe") {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "$basedir/node$exe"  "$basedir/../json5/lib/cli.js" $args
+  } else {
+    & "$basedir/node$exe"  "$basedir/../json5/lib/cli.js" $args
+  }
+  $ret=$LASTEXITCODE
+} else {
+  # Support pipeline input
+  if ($MyInvocation.ExpectingInput) {
+    $input | & "node$exe"  "$basedir/../json5/lib/cli.js" $args
+  } else {
+    & "node$exe"  "$basedir/../json5/lib/cli.js" $args
+  }
+  $ret=$LASTEXITCODE
+}
+exit $ret
Index: frontend/node_modules/tsconfig-paths/node_modules/json5/LICENSE.md
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/json5/LICENSE.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/json5/LICENSE.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+MIT License
+
+Copyright (c) 2012-2018 Aseem Kishore, and [others].
+
+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.
+
+[others]: https://github.com/json5/json5/contributors
Index: frontend/node_modules/tsconfig-paths/node_modules/json5/README.md
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/json5/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/json5/README.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,234 @@
+# JSON5 – JSON for Humans
+
+[![Build Status](https://travis-ci.org/json5/json5.svg)][Build Status]
+[![Coverage
+Status](https://coveralls.io/repos/github/json5/json5/badge.svg)][Coverage
+Status]
+
+The JSON5 Data Interchange Format (JSON5) is a superset of [JSON] that aims to
+alleviate some of the limitations of JSON by expanding its syntax to include
+some productions from [ECMAScript 5.1].
+
+This JavaScript library is the official reference implementation for JSON5
+parsing and serialization libraries.
+
+[Build Status]: https://travis-ci.org/json5/json5
+
+[Coverage Status]: https://coveralls.io/github/json5/json5
+
+[JSON]: https://tools.ietf.org/html/rfc7159
+
+[ECMAScript 5.1]: https://www.ecma-international.org/ecma-262/5.1/
+
+## Summary of Features
+The following ECMAScript 5.1 features, which are not supported in JSON, have
+been extended to JSON5.
+
+### Objects
+- Object keys may be an ECMAScript 5.1 _[IdentifierName]_.
+- Objects may have a single trailing comma.
+
+### Arrays
+- Arrays may have a single trailing comma.
+
+### Strings
+- Strings may be single quoted.
+- Strings may span multiple lines by escaping new line characters.
+- Strings may include character escapes.
+
+### Numbers
+- Numbers may be hexadecimal.
+- Numbers may have a leading or trailing decimal point.
+- Numbers may be [IEEE 754] positive infinity, negative infinity, and NaN.
+- Numbers may begin with an explicit plus sign.
+
+### Comments
+- Single and multi-line comments are allowed.
+
+### White Space
+- Additional white space characters are allowed.
+
+[IdentifierName]: https://www.ecma-international.org/ecma-262/5.1/#sec-7.6
+
+[IEEE 754]: http://ieeexplore.ieee.org/servlet/opac?punumber=4610933
+
+## Short Example
+```js
+{
+  // comments
+  unquoted: 'and you can quote me on that',
+  singleQuotes: 'I can use "double quotes" here',
+  lineBreaks: "Look, Mom! \
+No \\n's!",
+  hexadecimal: 0xdecaf,
+  leadingDecimalPoint: .8675309, andTrailing: 8675309.,
+  positiveSign: +1,
+  trailingComma: 'in objects', andIn: ['arrays',],
+  "backwardsCompatible": "with JSON",
+}
+```
+
+## Specification
+For a detailed explanation of the JSON5 format, please read the [official
+specification](https://json5.github.io/json5-spec/).
+
+## Installation
+### Node.js
+```sh
+npm install json5
+```
+
+```js
+const JSON5 = require('json5')
+```
+
+### Browsers
+```html
+<script src="https://unpkg.com/json5@^1.0.0"></script>
+```
+
+This will create a global `JSON5` variable.
+
+## API
+The JSON5 API is compatible with the [JSON API].
+
+[JSON API]:
+https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON
+
+### JSON5.parse()
+Parses a JSON5 string, constructing the JavaScript value or object described by
+the string. An optional reviver function can be provided to perform a
+transformation on the resulting object before it is returned.
+
+#### Syntax
+    JSON5.parse(text[, reviver])
+
+#### Parameters
+- `text`: The string to parse as JSON5.
+- `reviver`: If a function, this prescribes how the value originally produced by
+  parsing is transformed, before being returned.
+
+#### Return value
+The object corresponding to the given JSON5 text.
+
+### JSON5.stringify()
+Converts a JavaScript value to a JSON5 string, optionally replacing values if a
+replacer function is specified, or optionally including only the specified
+properties if a replacer array is specified.
+
+#### Syntax
+    JSON5.stringify(value[, replacer[, space]])
+    JSON5.stringify(value[, options])
+
+#### Parameters
+- `value`: The value to convert to a JSON5 string.
+- `replacer`: A function that alters the behavior of the stringification
+  process, or an array of String and Number objects that serve as a whitelist
+  for selecting/filtering the properties of the value object to be included in
+  the JSON5 string. If this value is null or not provided, all properties of the
+  object are included in the resulting JSON5 string.
+- `space`: A String or Number object that's used to insert white space into the
+  output JSON5 string for readability purposes. If this is a Number, it
+  indicates the number of space characters to use as white space; this number is
+  capped at 10 (if it is greater, the value is just 10). Values less than 1
+  indicate that no space should be used. If this is a String, the string (or the
+  first 10 characters of the string, if it's longer than that) is used as white
+  space. If this parameter is not provided (or is null), no white space is used.
+  If white space is used, trailing commas will be used in objects and arrays.
+- `options`: An object with the following properties:
+  - `replacer`: Same as the `replacer` parameter.
+  - `space`: Same as the `space` parameter.
+  - `quote`: A String representing the quote character to use when serializing
+    strings.
+
+#### Return value
+A JSON5 string representing the value.
+
+### Node.js `require()` JSON5 files
+When using Node.js, you can `require()` JSON5 files by adding the following
+statement.
+
+```js
+require('json5/lib/register')
+```
+
+Then you can load a JSON5 file with a Node.js `require()` statement. For
+example:
+
+```js
+const config = require('./config.json5')
+```
+
+## CLI
+Since JSON is more widely used than JSON5, this package includes a CLI for
+converting JSON5 to JSON and for validating the syntax of JSON5 documents.
+
+### Installation
+```sh
+npm install --global json5
+```
+
+### Usage
+```sh
+json5 [options] <file>
+```
+
+If `<file>` is not provided, then STDIN is used.
+
+#### Options:
+- `-s`, `--space`: The number of spaces to indent or `t` for tabs
+- `-o`, `--out-file [file]`: Output to the specified file, otherwise STDOUT
+- `-v`, `--validate`: Validate JSON5 but do not output JSON
+- `-V`, `--version`: Output the version number
+- `-h`, `--help`: Output usage information
+
+## Contibuting
+### Development
+```sh
+git clone https://github.com/json5/json5
+cd json5
+npm install
+```
+
+When contributing code, please write relevant tests and run `npm test` and `npm
+run lint` before submitting pull requests. Please use an editor that supports
+[EditorConfig](http://editorconfig.org/).
+
+### Issues
+To report bugs or request features regarding the JSON5 data format, please
+submit an issue to the [official specification
+repository](https://github.com/json5/json5-spec).
+
+To report bugs or request features regarding the JavaScript implentation of
+JSON5, please submit an issue to this repository.
+
+## License
+MIT. See [LICENSE.md](./LICENSE.md) for details.
+
+## Credits
+[Assem Kishore](https://github.com/aseemk) founded this project.
+
+[Michael Bolin](http://bolinfest.com/) independently arrived at and published
+some of these same ideas with awesome explanations and detail. Recommended
+reading: [Suggested Improvements to JSON](http://bolinfest.com/essays/json.html)
+
+[Douglas Crockford](http://www.crockford.com/) of course designed and built
+JSON, but his state machine diagrams on the [JSON website](http://json.org/), as
+cheesy as it may sound, gave us motivation and confidence that building a new
+parser to implement these ideas was within reach! The original
+implementation of JSON5 was also modeled directly off of Doug’s open-source
+[json_parse.js] parser. We’re grateful for that clean and well-documented
+code.
+
+[json_parse.js]:
+https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js
+
+[Max Nanasy](https://github.com/MaxNanasy) has been an early and prolific
+supporter, contributing multiple patches and ideas.
+
+[Andrew Eisenberg](https://github.com/aeisenberg) contributed the original
+`stringify` method.
+
+[Jordan Tucker](https://github.com/jordanbtucker) has aligned JSON5 more closely
+with ES5, wrote the official JSON5 specification, completely rewrote the
+codebase from the ground up, and is actively maintaining this project.
Index: frontend/node_modules/tsconfig-paths/node_modules/json5/dist/index.js
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/json5/dist/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/json5/dist/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+!function(u,D){"object"==typeof exports&&"undefined"!=typeof module?module.exports=D():"function"==typeof define&&define.amd?define(D):u.JSON5=D()}(this,function(){"use strict";var u,D,e=(function(u,D){Object.defineProperty(D,"__esModule",{value:!0});D.Space_Separator=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,D.ID_Start=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,D.ID_Continue=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/}(u={exports:{}},u.exports),u.exports);(D=e)&&D.__esModule&&Object.prototype.hasOwnProperty.call(D,"default")&&D.default;var F=e.Space_Separator,C=e.ID_Start,A=e.ID_Continue;function r(u){return u>="a"&&u<="z"||u>="A"&&u<="Z"||"$"===u||"_"===u||C.test(u)}function t(u){return u>="a"&&u<="z"||u>="A"&&u<="Z"||u>="0"&&u<="9"||"$"===u||"_"===u||"‌"===u||"‍"===u||A.test(u)}function n(u){return/[0-9]/.test(u)}function E(u){return/[0-9A-Fa-f]/.test(u)}var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(u){return typeof u}:function(u){return u&&"function"==typeof Symbol&&u.constructor===Symbol&&u!==Symbol.prototype?"symbol":typeof u},a=void 0,o=void 0,B=void 0,c=void 0,s=void 0,f=void 0,l=void 0,d=void 0,v=void 0;var m=void 0,p=void 0,y=void 0,h=void 0,b=void 0;function w(){for(m="default",p="",y=!1,h=1;;){b=g();var u=x[m]();if(u)return u}}function g(){if(a[c])return String.fromCodePoint(a.codePointAt(c))}function S(){var u=g();return"\n"===u?(s++,f=0):u?f+=u.length:f++,u&&(c+=u.length),u}var x={default:function(){switch(b){case"\t":case"\v":case"\f":case" ":case" ":case"\ufeff":case"\n":case"\r":case"\u2028":case"\u2029":return void S();case"/":return S(),void(m="comment");case void 0:return S(),N("eof")}if(!function(u){return F.test(u)}(b))return x[o]();S()},comment:function(){switch(b){case"*":return S(),void(m="multiLineComment");case"/":return S(),void(m="singleLineComment")}throw V(S())},multiLineComment:function(){switch(b){case"*":return S(),void(m="multiLineCommentAsterisk");case void 0:throw V(S())}S()},multiLineCommentAsterisk:function(){switch(b){case"*":return void S();case"/":return S(),void(m="default");case void 0:throw V(S())}S(),m="multiLineComment"},singleLineComment:function(){switch(b){case"\n":case"\r":case"\u2028":case"\u2029":return S(),void(m="default");case void 0:return S(),N("eof")}S()},value:function(){switch(b){case"{":case"[":return N("punctuator",S());case"n":return S(),P("ull"),N("null",null);case"t":return S(),P("rue"),N("boolean",!0);case"f":return S(),P("alse"),N("boolean",!1);case"-":case"+":return"-"===S()&&(h=-1),void(m="sign");case".":return p=S(),void(m="decimalPointLeading");case"0":return p=S(),void(m="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return p=S(),void(m="decimalInteger");case"I":return S(),P("nfinity"),N("numeric",1/0);case"N":return S(),P("aN"),N("numeric",NaN);case'"':case"'":return y='"'===S(),p="",void(m="string")}throw V(S())},identifierNameStartEscape:function(){if("u"!==b)throw V(S());S();var u=O();switch(u){case"$":case"_":break;default:if(!r(u))throw L()}p+=u,m="identifierName"},identifierName:function(){switch(b){case"$":case"_":case"‌":case"‍":return void(p+=S());case"\\":return S(),void(m="identifierNameEscape")}if(!t(b))return N("identifier",p);p+=S()},identifierNameEscape:function(){if("u"!==b)throw V(S());S();var u=O();switch(u){case"$":case"_":case"‌":case"‍":break;default:if(!t(u))throw L()}p+=u,m="identifierName"},sign:function(){switch(b){case".":return p=S(),void(m="decimalPointLeading");case"0":return p=S(),void(m="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return p=S(),void(m="decimalInteger");case"I":return S(),P("nfinity"),N("numeric",h*(1/0));case"N":return S(),P("aN"),N("numeric",NaN)}throw V(S())},zero:function(){switch(b){case".":return p+=S(),void(m="decimalPoint");case"e":case"E":return p+=S(),void(m="decimalExponent");case"x":case"X":return p+=S(),void(m="hexadecimal")}return N("numeric",0*h)},decimalInteger:function(){switch(b){case".":return p+=S(),void(m="decimalPoint");case"e":case"E":return p+=S(),void(m="decimalExponent")}if(!n(b))return N("numeric",h*Number(p));p+=S()},decimalPointLeading:function(){if(n(b))return p+=S(),void(m="decimalFraction");throw V(S())},decimalPoint:function(){switch(b){case"e":case"E":return p+=S(),void(m="decimalExponent")}return n(b)?(p+=S(),void(m="decimalFraction")):N("numeric",h*Number(p))},decimalFraction:function(){switch(b){case"e":case"E":return p+=S(),void(m="decimalExponent")}if(!n(b))return N("numeric",h*Number(p));p+=S()},decimalExponent:function(){switch(b){case"+":case"-":return p+=S(),void(m="decimalExponentSign")}if(n(b))return p+=S(),void(m="decimalExponentInteger");throw V(S())},decimalExponentSign:function(){if(n(b))return p+=S(),void(m="decimalExponentInteger");throw V(S())},decimalExponentInteger:function(){if(!n(b))return N("numeric",h*Number(p));p+=S()},hexadecimal:function(){if(E(b))return p+=S(),void(m="hexadecimalInteger");throw V(S())},hexadecimalInteger:function(){if(!E(b))return N("numeric",h*Number(p));p+=S()},string:function(){switch(b){case"\\":return S(),void(p+=function(){switch(g()){case"b":return S(),"\b";case"f":return S(),"\f";case"n":return S(),"\n";case"r":return S(),"\r";case"t":return S(),"\t";case"v":return S(),"\v";case"0":if(S(),n(g()))throw V(S());return"\0";case"x":return S(),function(){var u="",D=g();if(!E(D))throw V(S());if(u+=S(),!E(D=g()))throw V(S());return u+=S(),String.fromCodePoint(parseInt(u,16))}();case"u":return S(),O();case"\n":case"\u2028":case"\u2029":return S(),"";case"\r":return S(),"\n"===g()&&S(),"";case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case void 0:throw V(S())}return S()}());case'"':return y?(S(),N("string",p)):void(p+=S());case"'":return y?void(p+=S()):(S(),N("string",p));case"\n":case"\r":throw V(S());case"\u2028":case"\u2029":!function(u){console.warn("JSON5: '"+u+"' is not valid ECMAScript; consider escaping")}(b);break;case void 0:throw V(S())}p+=S()},start:function(){switch(b){case"{":case"[":return N("punctuator",S())}m="value"},beforePropertyName:function(){switch(b){case"$":case"_":return p=S(),void(m="identifierName");case"\\":return S(),void(m="identifierNameStartEscape");case"}":return N("punctuator",S());case'"':case"'":return y='"'===S(),void(m="string")}if(r(b))return p+=S(),void(m="identifierName");throw V(S())},afterPropertyName:function(){if(":"===b)return N("punctuator",S());throw V(S())},beforePropertyValue:function(){m="value"},afterPropertyValue:function(){switch(b){case",":case"}":return N("punctuator",S())}throw V(S())},beforeArrayValue:function(){if("]"===b)return N("punctuator",S());m="value"},afterArrayValue:function(){switch(b){case",":case"]":return N("punctuator",S())}throw V(S())},end:function(){throw V(S())}};function N(u,D){return{type:u,value:D,line:s,column:f}}function P(u){var D=!0,e=!1,F=void 0;try{for(var C,A=u[Symbol.iterator]();!(D=(C=A.next()).done);D=!0){var r=C.value;if(g()!==r)throw V(S());S()}}catch(u){e=!0,F=u}finally{try{!D&&A.return&&A.return()}finally{if(e)throw F}}}function O(){for(var u="",D=4;D-- >0;){if(!E(g()))throw V(S());u+=S()}return String.fromCodePoint(parseInt(u,16))}var j={start:function(){if("eof"===l.type)throw J();I()},beforePropertyName:function(){switch(l.type){case"identifier":case"string":return d=l.value,void(o="afterPropertyName");case"punctuator":return void _();case"eof":throw J()}},afterPropertyName:function(){if("eof"===l.type)throw J();o="beforePropertyValue"},beforePropertyValue:function(){if("eof"===l.type)throw J();I()},beforeArrayValue:function(){if("eof"===l.type)throw J();"punctuator"!==l.type||"]"!==l.value?I():_()},afterPropertyValue:function(){if("eof"===l.type)throw J();switch(l.value){case",":return void(o="beforePropertyName");case"}":_()}},afterArrayValue:function(){if("eof"===l.type)throw J();switch(l.value){case",":return void(o="beforeArrayValue");case"]":_()}},end:function(){}};function I(){var u=void 0;switch(l.type){case"punctuator":switch(l.value){case"{":u={};break;case"[":u=[]}break;case"null":case"boolean":case"numeric":case"string":u=l.value}if(void 0===v)v=u;else{var D=B[B.length-1];Array.isArray(D)?D.push(u):Object.defineProperty(D,d,{value:u,writable:!0,enumerable:!0,configurable:!0})}if(null!==u&&"object"===(void 0===u?"undefined":i(u)))B.push(u),o=Array.isArray(u)?"beforeArrayValue":"beforePropertyName";else{var e=B[B.length-1];o=null==e?"end":Array.isArray(e)?"afterArrayValue":"afterPropertyValue"}}function _(){B.pop();var u=B[B.length-1];o=null==u?"end":Array.isArray(u)?"afterArrayValue":"afterPropertyValue"}function V(u){return k(void 0===u?"JSON5: invalid end of input at "+s+":"+f:"JSON5: invalid character '"+function(u){var D={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(D[u])return D[u];if(u<" "){var e=u.charCodeAt(0).toString(16);return"\\x"+("00"+e).substring(e.length)}return u}(u)+"' at "+s+":"+f)}function J(){return k("JSON5: invalid end of input at "+s+":"+f)}function L(){return k("JSON5: invalid identifier character at "+s+":"+(f-=5))}function k(u){var D=new SyntaxError(u);return D.lineNumber=s,D.columnNumber=f,D}return{parse:function(u,D){a=String(u),o="start",B=[],c=0,s=1,f=0,l=void 0,d=void 0,v=void 0;do{l=w(),j[o]()}while("eof"!==l.type);return"function"==typeof D?function u(D,e,F){var C=D[e];if(null!=C&&"object"===(void 0===C?"undefined":i(C)))if(Array.isArray(C))for(var A=0;A<C.length;A++){var r=String(A),t=u(C,r,F);void 0===t?delete C[r]:Object.defineProperty(C,r,{value:t,writable:!0,enumerable:!0,configurable:!0})}else for(var n in C){var E=u(C,n,F);void 0===E?delete C[n]:Object.defineProperty(C,n,{value:E,writable:!0,enumerable:!0,configurable:!0})}return F.call(D,e,C)}({"":v},"",D):v},stringify:function(u,D,e){var F=[],C="",A=void 0,n=void 0,E="",a=void 0;if(null==D||"object"!==(void 0===D?"undefined":i(D))||Array.isArray(D)||(e=D.space,a=D.quote,D=D.replacer),"function"==typeof D)n=D;else if(Array.isArray(D)){A=[];var o=!0,B=!1,c=void 0;try{for(var s,f=D[Symbol.iterator]();!(o=(s=f.next()).done);o=!0){var l=s.value,d=void 0;"string"==typeof l?d=l:("number"==typeof l||l instanceof String||l instanceof Number)&&(d=String(l)),void 0!==d&&A.indexOf(d)<0&&A.push(d)}}catch(u){B=!0,c=u}finally{try{!o&&f.return&&f.return()}finally{if(B)throw c}}}return e instanceof Number?e=Number(e):e instanceof String&&(e=String(e)),"number"==typeof e?e>0&&(e=Math.min(10,Math.floor(e)),E="          ".substr(0,e)):"string"==typeof e&&(E=e.substr(0,10)),v("",{"":u});function v(u,D){var e=D[u];switch(null!=e&&("function"==typeof e.toJSON5?e=e.toJSON5(u):"function"==typeof e.toJSON&&(e=e.toJSON(u))),n&&(e=n.call(D,u,e)),e instanceof Number?e=Number(e):e instanceof String?e=String(e):e instanceof Boolean&&(e=e.valueOf()),e){case null:return"null";case!0:return"true";case!1:return"false"}return"string"==typeof e?m(e):"number"==typeof e?String(e):"object"===(void 0===e?"undefined":i(e))?Array.isArray(e)?function(u){if(F.indexOf(u)>=0)throw TypeError("Converting circular structure to JSON5");F.push(u);var D=C;C+=E;for(var e=[],A=0;A<u.length;A++){var r=v(String(A),u);e.push(void 0!==r?r:"null")}var t=void 0;if(0===e.length)t="[]";else if(""===E){var n=e.join(",");t="["+n+"]"}else{var i=",\n"+C,a=e.join(i);t="[\n"+C+a+",\n"+D+"]"}return F.pop(),C=D,t}(e):function(u){if(F.indexOf(u)>=0)throw TypeError("Converting circular structure to JSON5");F.push(u);var D=C;C+=E;var e=A||Object.keys(u),r=[],t=!0,n=!1,i=void 0;try{for(var a,o=e[Symbol.iterator]();!(t=(a=o.next()).done);t=!0){var B=a.value,c=v(B,u);if(void 0!==c){var s=p(B)+":";""!==E&&(s+=" "),s+=c,r.push(s)}}}catch(u){n=!0,i=u}finally{try{!t&&o.return&&o.return()}finally{if(n)throw i}}var f=void 0;if(0===r.length)f="{}";else{var l=void 0;if(""===E)l=r.join(","),f="{"+l+"}";else{var d=",\n"+C;l=r.join(d),f="{\n"+C+l+",\n"+D+"}"}}return F.pop(),C=D,f}(e):void 0}function m(u){var D={"'":.1,'"':.2},e={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"},F="",C=!0,A=!1,r=void 0;try{for(var t,n=u[Symbol.iterator]();!(C=(t=n.next()).done);C=!0){var E=t.value;switch(E){case"'":case'"':D[E]++,F+=E;continue}if(e[E])F+=e[E];else if(E<" "){var i=E.charCodeAt(0).toString(16);F+="\\x"+("00"+i).substring(i.length)}else F+=E}}catch(u){A=!0,r=u}finally{try{!C&&n.return&&n.return()}finally{if(A)throw r}}var o=a||Object.keys(D).reduce(function(u,e){return D[u]<D[e]?u:e});return o+(F=F.replace(new RegExp(o,"g"),e[o]))+o}function p(u){if(0===u.length)return m(u);var D=String.fromCodePoint(u.codePointAt(0));if(!r(D))return m(u);for(var e=D.length;e<u.length;e++)if(!t(String.fromCodePoint(u.codePointAt(e))))return m(u);return u}}}});
Index: frontend/node_modules/tsconfig-paths/node_modules/json5/lib/cli.js
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/json5/lib/cli.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/json5/lib/cli.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,2 @@
+#!/usr/bin/env node
+'use strict';var _fs=require('fs');var _fs2=_interopRequireDefault(_fs);var _path=require('path');var _path2=_interopRequireDefault(_path);var _minimist=require('minimist');var _minimist2=_interopRequireDefault(_minimist);var _package=require('../package.json');var _package2=_interopRequireDefault(_package);var _=require('./');var _2=_interopRequireDefault(_);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}var argv=(0,_minimist2.default)(process.argv.slice(2),{alias:{'convert':'c','space':'s','validate':'v','out-file':'o','version':'V','help':'h'},boolean:['convert','validate','version','help'],string:['space','out-file']});if(argv.version){version()}else if(argv.help){usage()}else{var inFilename=argv._[0];var readStream=void 0;if(inFilename){readStream=_fs2.default.createReadStream(inFilename)}else{readStream=process.stdin}var json5='';readStream.on('data',function(data){json5+=data});readStream.on('end',function(){var space=void 0;if(argv.space==='t'||argv.space==='tab'){space='\t'}else{space=Number(argv.space)}var value=void 0;try{value=_2.default.parse(json5);if(!argv.validate){var json=JSON.stringify(value,null,space);var writeStream=void 0;if(argv.convert&&inFilename&&!argv.o){var parsedFilename=_path2.default.parse(inFilename);var outFilename=_path2.default.format(Object.assign(parsedFilename,{base:_path2.default.basename(parsedFilename.base,parsedFilename.ext)+'.json'}));writeStream=_fs2.default.createWriteStream(outFilename)}else if(argv.o){writeStream=_fs2.default.createWriteStream(argv.o)}else{writeStream=process.stdout}writeStream.write(json)}}catch(err){console.error(err.message);process.exit(1)}})}function version(){console.log(_package2.default.version)}function usage(){console.log('\n  Usage: json5 [options] <file>\n\n  If <file> is not provided, then STDIN is used.\n\n  Options:\n\n    -s, --space              The number of spaces to indent or \'t\' for tabs\n    -o, --out-file [file]    Output to the specified file, otherwise STDOUT\n    -v, --validate           Validate JSON5 but do not output JSON\n    -V, --version            Output the version number\n    -h, --help               Output usage information')}
Index: frontend/node_modules/tsconfig-paths/node_modules/json5/lib/index.js
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/json5/lib/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/json5/lib/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _parse=require('./parse');var _parse2=_interopRequireDefault(_parse);var _stringify=require('./stringify');var _stringify2=_interopRequireDefault(_stringify);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}exports.default={parse:_parse2.default,stringify:_stringify2.default};module.exports=exports['default'];
Index: frontend/node_modules/tsconfig-paths/node_modules/json5/lib/parse.js
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/json5/lib/parse.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/json5/lib/parse.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _typeof=typeof Symbol==='function'&&typeof Symbol.iterator==='symbol'?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==='function'&&obj.constructor===Symbol&&obj!==Symbol.prototype?'symbol':typeof obj};exports.default=parse;var _util=require('./util');var util=_interopRequireWildcard(_util);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}var source=void 0;var parseState=void 0;var stack=void 0;var pos=void 0;var line=void 0;var column=void 0;var token=void 0;var key=void 0;var root=void 0;function parse(text,reviver){source=String(text);parseState='start';stack=[];pos=0;line=1;column=0;token=undefined;key=undefined;root=undefined;do{token=lex();parseStates[parseState]()}while(token.type!=='eof');if(typeof reviver==='function'){return internalize({'':root},'',reviver)}return root}function internalize(holder,name,reviver){var value=holder[name];if(value!=null&&(typeof value==='undefined'?'undefined':_typeof(value))==='object'){if(Array.isArray(value)){for(var i=0;i<value.length;i++){var _key=String(i);var replacement=internalize(value,_key,reviver);if(replacement===undefined){delete value[_key]}else{Object.defineProperty(value,_key,{value:replacement,writable:true,enumerable:true,configurable:true})}}}else{for(var _key2 in value){var _replacement=internalize(value,_key2,reviver);if(_replacement===undefined){delete value[_key2]}else{Object.defineProperty(value,_key2,{value:_replacement,writable:true,enumerable:true,configurable:true})}}}}return reviver.call(holder,name,value)}var lexState=void 0;var buffer=void 0;var doubleQuote=void 0;var _sign=void 0;var c=void 0;function lex(){lexState='default';buffer='';doubleQuote=false;_sign=1;for(;;){c=peek();var _token=lexStates[lexState]();if(_token){return _token}}}function peek(){if(source[pos]){return String.fromCodePoint(source.codePointAt(pos))}}function read(){var c=peek();if(c==='\n'){line++;column=0}else if(c){column+=c.length}else{column++}if(c){pos+=c.length}return c}var lexStates={default:function _default(){switch(c){case'\t':case'\x0B':case'\f':case' ':case'\xA0':case'\uFEFF':case'\n':case'\r':case'\u2028':case'\u2029':read();return;case'/':read();lexState='comment';return;case undefined:read();return newToken('eof');}if(util.isSpaceSeparator(c)){read();return}return lexStates[parseState]()},comment:function comment(){switch(c){case'*':read();lexState='multiLineComment';return;case'/':read();lexState='singleLineComment';return;}throw invalidChar(read())},multiLineComment:function multiLineComment(){switch(c){case'*':read();lexState='multiLineCommentAsterisk';return;case undefined:throw invalidChar(read());}read()},multiLineCommentAsterisk:function multiLineCommentAsterisk(){switch(c){case'*':read();return;case'/':read();lexState='default';return;case undefined:throw invalidChar(read());}read();lexState='multiLineComment'},singleLineComment:function singleLineComment(){switch(c){case'\n':case'\r':case'\u2028':case'\u2029':read();lexState='default';return;case undefined:read();return newToken('eof');}read()},value:function value(){switch(c){case'{':case'[':return newToken('punctuator',read());case'n':read();literal('ull');return newToken('null',null);case't':read();literal('rue');return newToken('boolean',true);case'f':read();literal('alse');return newToken('boolean',false);case'-':case'+':if(read()==='-'){_sign=-1}lexState='sign';return;case'.':buffer=read();lexState='decimalPointLeading';return;case'0':buffer=read();lexState='zero';return;case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':buffer=read();lexState='decimalInteger';return;case'I':read();literal('nfinity');return newToken('numeric',Infinity);case'N':read();literal('aN');return newToken('numeric',NaN);case'"':case'\'':doubleQuote=read()==='"';buffer='';lexState='string';return;}throw invalidChar(read())},identifierNameStartEscape:function identifierNameStartEscape(){if(c!=='u'){throw invalidChar(read())}read();var u=unicodeEscape();switch(u){case'$':case'_':break;default:if(!util.isIdStartChar(u)){throw invalidIdentifier()}break;}buffer+=u;lexState='identifierName'},identifierName:function identifierName(){switch(c){case'$':case'_':case'\u200C':case'\u200D':buffer+=read();return;case'\\':read();lexState='identifierNameEscape';return;}if(util.isIdContinueChar(c)){buffer+=read();return}return newToken('identifier',buffer)},identifierNameEscape:function identifierNameEscape(){if(c!=='u'){throw invalidChar(read())}read();var u=unicodeEscape();switch(u){case'$':case'_':case'\u200C':case'\u200D':break;default:if(!util.isIdContinueChar(u)){throw invalidIdentifier()}break;}buffer+=u;lexState='identifierName'},sign:function sign(){switch(c){case'.':buffer=read();lexState='decimalPointLeading';return;case'0':buffer=read();lexState='zero';return;case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':buffer=read();lexState='decimalInteger';return;case'I':read();literal('nfinity');return newToken('numeric',_sign*Infinity);case'N':read();literal('aN');return newToken('numeric',NaN);}throw invalidChar(read())},zero:function zero(){switch(c){case'.':buffer+=read();lexState='decimalPoint';return;case'e':case'E':buffer+=read();lexState='decimalExponent';return;case'x':case'X':buffer+=read();lexState='hexadecimal';return;}return newToken('numeric',_sign*0)},decimalInteger:function decimalInteger(){switch(c){case'.':buffer+=read();lexState='decimalPoint';return;case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},decimalPointLeading:function decimalPointLeading(){if(util.isDigit(c)){buffer+=read();lexState='decimalFraction';return}throw invalidChar(read())},decimalPoint:function decimalPoint(){switch(c){case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util.isDigit(c)){buffer+=read();lexState='decimalFraction';return}return newToken('numeric',_sign*Number(buffer))},decimalFraction:function decimalFraction(){switch(c){case'e':case'E':buffer+=read();lexState='decimalExponent';return;}if(util.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},decimalExponent:function decimalExponent(){switch(c){case'+':case'-':buffer+=read();lexState='decimalExponentSign';return;}if(util.isDigit(c)){buffer+=read();lexState='decimalExponentInteger';return}throw invalidChar(read())},decimalExponentSign:function decimalExponentSign(){if(util.isDigit(c)){buffer+=read();lexState='decimalExponentInteger';return}throw invalidChar(read())},decimalExponentInteger:function decimalExponentInteger(){if(util.isDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},hexadecimal:function hexadecimal(){if(util.isHexDigit(c)){buffer+=read();lexState='hexadecimalInteger';return}throw invalidChar(read())},hexadecimalInteger:function hexadecimalInteger(){if(util.isHexDigit(c)){buffer+=read();return}return newToken('numeric',_sign*Number(buffer))},string:function string(){switch(c){case'\\':read();buffer+=escape();return;case'"':if(doubleQuote){read();return newToken('string',buffer)}buffer+=read();return;case'\'':if(!doubleQuote){read();return newToken('string',buffer)}buffer+=read();return;case'\n':case'\r':throw invalidChar(read());case'\u2028':case'\u2029':separatorChar(c);break;case undefined:throw invalidChar(read());}buffer+=read()},start:function start(){switch(c){case'{':case'[':return newToken('punctuator',read());}lexState='value'},beforePropertyName:function beforePropertyName(){switch(c){case'$':case'_':buffer=read();lexState='identifierName';return;case'\\':read();lexState='identifierNameStartEscape';return;case'}':return newToken('punctuator',read());case'"':case'\'':doubleQuote=read()==='"';lexState='string';return;}if(util.isIdStartChar(c)){buffer+=read();lexState='identifierName';return}throw invalidChar(read())},afterPropertyName:function afterPropertyName(){if(c===':'){return newToken('punctuator',read())}throw invalidChar(read())},beforePropertyValue:function beforePropertyValue(){lexState='value'},afterPropertyValue:function afterPropertyValue(){switch(c){case',':case'}':return newToken('punctuator',read());}throw invalidChar(read())},beforeArrayValue:function beforeArrayValue(){if(c===']'){return newToken('punctuator',read())}lexState='value'},afterArrayValue:function afterArrayValue(){switch(c){case',':case']':return newToken('punctuator',read());}throw invalidChar(read())},end:function end(){throw invalidChar(read())}};function newToken(type,value){return{type:type,value:value,line:line,column:column}}function literal(s){var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=s[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var _c=_step.value;var p=peek();if(p!==_c){throw invalidChar(read())}read()}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}}function escape(){var c=peek();switch(c){case'b':read();return'\b';case'f':read();return'\f';case'n':read();return'\n';case'r':read();return'\r';case't':read();return'\t';case'v':read();return'\x0B';case'0':read();if(util.isDigit(peek())){throw invalidChar(read())}return'\0';case'x':read();return hexEscape();case'u':read();return unicodeEscape();case'\n':case'\u2028':case'\u2029':read();return'';case'\r':read();if(peek()==='\n'){read()}return'';case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':throw invalidChar(read());case undefined:throw invalidChar(read());}return read()}function hexEscape(){var buffer='';var c=peek();if(!util.isHexDigit(c)){throw invalidChar(read())}buffer+=read();c=peek();if(!util.isHexDigit(c)){throw invalidChar(read())}buffer+=read();return String.fromCodePoint(parseInt(buffer,16))}function unicodeEscape(){var buffer='';var count=4;while(count-->0){var _c2=peek();if(!util.isHexDigit(_c2)){throw invalidChar(read())}buffer+=read()}return String.fromCodePoint(parseInt(buffer,16))}var parseStates={start:function start(){if(token.type==='eof'){throw invalidEOF()}push()},beforePropertyName:function beforePropertyName(){switch(token.type){case'identifier':case'string':key=token.value;parseState='afterPropertyName';return;case'punctuator':pop();return;case'eof':throw invalidEOF();}},afterPropertyName:function afterPropertyName(){if(token.type==='eof'){throw invalidEOF()}parseState='beforePropertyValue'},beforePropertyValue:function beforePropertyValue(){if(token.type==='eof'){throw invalidEOF()}push()},beforeArrayValue:function beforeArrayValue(){if(token.type==='eof'){throw invalidEOF()}if(token.type==='punctuator'&&token.value===']'){pop();return}push()},afterPropertyValue:function afterPropertyValue(){if(token.type==='eof'){throw invalidEOF()}switch(token.value){case',':parseState='beforePropertyName';return;case'}':pop();}},afterArrayValue:function afterArrayValue(){if(token.type==='eof'){throw invalidEOF()}switch(token.value){case',':parseState='beforeArrayValue';return;case']':pop();}},end:function end(){}};function push(){var value=void 0;switch(token.type){case'punctuator':switch(token.value){case'{':value={};break;case'[':value=[];break;}break;case'null':case'boolean':case'numeric':case'string':value=token.value;break;}if(root===undefined){root=value}else{var parent=stack[stack.length-1];if(Array.isArray(parent)){parent.push(value)}else{Object.defineProperty(parent,key,{value:value,writable:true,enumerable:true,configurable:true})}}if(value!==null&&(typeof value==='undefined'?'undefined':_typeof(value))==='object'){stack.push(value);if(Array.isArray(value)){parseState='beforeArrayValue'}else{parseState='beforePropertyName'}}else{var current=stack[stack.length-1];if(current==null){parseState='end'}else if(Array.isArray(current)){parseState='afterArrayValue'}else{parseState='afterPropertyValue'}}}function pop(){stack.pop();var current=stack[stack.length-1];if(current==null){parseState='end'}else if(Array.isArray(current)){parseState='afterArrayValue'}else{parseState='afterPropertyValue'}}function invalidChar(c){if(c===undefined){return syntaxError('JSON5: invalid end of input at '+line+':'+column)}return syntaxError('JSON5: invalid character \''+formatChar(c)+'\' at '+line+':'+column)}function invalidEOF(){return syntaxError('JSON5: invalid end of input at '+line+':'+column)}function invalidIdentifier(){column-=5;return syntaxError('JSON5: invalid identifier character at '+line+':'+column)}function separatorChar(c){console.warn('JSON5: \''+c+'\' is not valid ECMAScript; consider escaping')}function formatChar(c){var replacements={'\'':'\\\'','"':'\\"','\\':'\\\\','\b':'\\b','\f':'\\f','\n':'\\n','\r':'\\r','\t':'\\t','\x0B':'\\v','\0':'\\0','\u2028':'\\u2028','\u2029':'\\u2029'};if(replacements[c]){return replacements[c]}if(c<' '){var hexString=c.charCodeAt(0).toString(16);return'\\x'+('00'+hexString).substring(hexString.length)}return c}function syntaxError(message){var err=new SyntaxError(message);err.lineNumber=line;err.columnNumber=column;return err}module.exports=exports['default'];
Index: frontend/node_modules/tsconfig-paths/node_modules/json5/lib/register.js
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/json5/lib/register.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/json5/lib/register.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+'use strict';var _fs=require('fs');var _fs2=_interopRequireDefault(_fs);var _=require('./');var _2=_interopRequireDefault(_);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}require.extensions['.json5']=function(module,filename){var content=_fs2.default.readFileSync(filename,'utf8');try{module.exports=_2.default.parse(content)}catch(err){err.message=filename+': '+err.message;throw err}};
Index: frontend/node_modules/tsconfig-paths/node_modules/json5/lib/require.js
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/json5/lib/require.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/json5/lib/require.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+"use strict";require("./register");console.warn("'json5/require' is deprecated. Please use 'json5/register' instead.");
Index: frontend/node_modules/tsconfig-paths/node_modules/json5/lib/stringify.js
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/json5/lib/stringify.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/json5/lib/stringify.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+'use strict';Object.defineProperty(exports,'__esModule',{value:true});var _typeof=typeof Symbol==='function'&&typeof Symbol.iterator==='symbol'?function(obj){return typeof obj}:function(obj){return obj&&typeof Symbol==='function'&&obj.constructor===Symbol&&obj!==Symbol.prototype?'symbol':typeof obj};exports.default=stringify;var _util=require('./util');var util=_interopRequireWildcard(_util);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}function stringify(value,replacer,space){var stack=[];var indent='';var propertyList=void 0;var replacerFunc=void 0;var gap='';var quote=void 0;if(replacer!=null&&(typeof replacer==='undefined'?'undefined':_typeof(replacer))==='object'&&!Array.isArray(replacer)){space=replacer.space;quote=replacer.quote;replacer=replacer.replacer}if(typeof replacer==='function'){replacerFunc=replacer}else if(Array.isArray(replacer)){propertyList=[];var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=replacer[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var v=_step.value;var item=void 0;if(typeof v==='string'){item=v}else if(typeof v==='number'||v instanceof String||v instanceof Number){item=String(v)}if(item!==undefined&&propertyList.indexOf(item)<0){propertyList.push(item)}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}}if(space instanceof Number){space=Number(space)}else if(space instanceof String){space=String(space)}if(typeof space==='number'){if(space>0){space=Math.min(10,Math.floor(space));gap='          '.substr(0,space)}}else if(typeof space==='string'){gap=space.substr(0,10)}return serializeProperty('',{'':value});function serializeProperty(key,holder){var value=holder[key];if(value!=null){if(typeof value.toJSON5==='function'){value=value.toJSON5(key)}else if(typeof value.toJSON==='function'){value=value.toJSON(key)}}if(replacerFunc){value=replacerFunc.call(holder,key,value)}if(value instanceof Number){value=Number(value)}else if(value instanceof String){value=String(value)}else if(value instanceof Boolean){value=value.valueOf()}switch(value){case null:return'null';case true:return'true';case false:return'false';}if(typeof value==='string'){return quoteString(value,false)}if(typeof value==='number'){return String(value)}if((typeof value==='undefined'?'undefined':_typeof(value))==='object'){return Array.isArray(value)?serializeArray(value):serializeObject(value)}return undefined}function quoteString(value){var quotes={'\'':0.1,'"':0.2};var replacements={'\'':'\\\'','"':'\\"','\\':'\\\\','\b':'\\b','\f':'\\f','\n':'\\n','\r':'\\r','\t':'\\t','\x0B':'\\v','\0':'\\0','\u2028':'\\u2028','\u2029':'\\u2029'};var product='';var _iteratorNormalCompletion2=true;var _didIteratorError2=false;var _iteratorError2=undefined;try{for(var _iterator2=value[Symbol.iterator](),_step2;!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=true){var c=_step2.value;switch(c){case'\'':case'"':quotes[c]++;product+=c;continue;}if(replacements[c]){product+=replacements[c];continue}if(c<' '){var hexString=c.charCodeAt(0).toString(16);product+='\\x'+('00'+hexString).substring(hexString.length);continue}product+=c}}catch(err){_didIteratorError2=true;_iteratorError2=err}finally{try{if(!_iteratorNormalCompletion2&&_iterator2.return){_iterator2.return()}}finally{if(_didIteratorError2){throw _iteratorError2}}}var quoteChar=quote||Object.keys(quotes).reduce(function(a,b){return quotes[a]<quotes[b]?a:b});product=product.replace(new RegExp(quoteChar,'g'),replacements[quoteChar]);return quoteChar+product+quoteChar}function serializeObject(value){if(stack.indexOf(value)>=0){throw TypeError('Converting circular structure to JSON5')}stack.push(value);var stepback=indent;indent=indent+gap;var keys=propertyList||Object.keys(value);var partial=[];var _iteratorNormalCompletion3=true;var _didIteratorError3=false;var _iteratorError3=undefined;try{for(var _iterator3=keys[Symbol.iterator](),_step3;!(_iteratorNormalCompletion3=(_step3=_iterator3.next()).done);_iteratorNormalCompletion3=true){var key=_step3.value;var propertyString=serializeProperty(key,value);if(propertyString!==undefined){var member=serializeKey(key)+':';if(gap!==''){member+=' '}member+=propertyString;partial.push(member)}}}catch(err){_didIteratorError3=true;_iteratorError3=err}finally{try{if(!_iteratorNormalCompletion3&&_iterator3.return){_iterator3.return()}}finally{if(_didIteratorError3){throw _iteratorError3}}}var final=void 0;if(partial.length===0){final='{}'}else{var properties=void 0;if(gap===''){properties=partial.join(',');final='{'+properties+'}'}else{var separator=',\n'+indent;properties=partial.join(separator);final='{\n'+indent+properties+',\n'+stepback+'}'}}stack.pop();indent=stepback;return final}function serializeKey(key){if(key.length===0){return quoteString(key,true)}var firstChar=String.fromCodePoint(key.codePointAt(0));if(!util.isIdStartChar(firstChar)){return quoteString(key,true)}for(var i=firstChar.length;i<key.length;i++){if(!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))){return quoteString(key,true)}}return key}function serializeArray(value){if(stack.indexOf(value)>=0){throw TypeError('Converting circular structure to JSON5')}stack.push(value);var stepback=indent;indent=indent+gap;var partial=[];for(var i=0;i<value.length;i++){var propertyString=serializeProperty(String(i),value);partial.push(propertyString!==undefined?propertyString:'null')}var final=void 0;if(partial.length===0){final='[]'}else{if(gap===''){var properties=partial.join(',');final='['+properties+']'}else{var separator=',\n'+indent;var _properties=partial.join(separator);final='[\n'+indent+_properties+',\n'+stepback+']'}}stack.pop();indent=stepback;return final}}module.exports=exports['default'];
Index: frontend/node_modules/tsconfig-paths/node_modules/json5/lib/unicode.js
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/json5/lib/unicode.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/json5/lib/unicode.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+"use strict";Object.defineProperty(exports,"__esModule",{value:true});var Space_Separator=exports.Space_Separator=/[\u1680\u2000-\u200A\u202F\u205F\u3000]/;var ID_Start=exports.ID_Start=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/;var ID_Continue=exports.ID_Continue=/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/;
Index: frontend/node_modules/tsconfig-paths/node_modules/json5/lib/util.js
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/json5/lib/util.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/json5/lib/util.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+'use strict';Object.defineProperty(exports,'__esModule',{value:true});exports.isSpaceSeparator=isSpaceSeparator;exports.isIdStartChar=isIdStartChar;exports.isIdContinueChar=isIdContinueChar;exports.isDigit=isDigit;exports.isHexDigit=isHexDigit;var _unicode=require('../lib/unicode');var unicode=_interopRequireWildcard(_unicode);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}function isSpaceSeparator(c){return unicode.Space_Separator.test(c)}function isIdStartChar(c){return c>='a'&&c<='z'||c>='A'&&c<='Z'||c==='$'||c==='_'||unicode.ID_Start.test(c)}function isIdContinueChar(c){return c>='a'&&c<='z'||c>='A'&&c<='Z'||c>='0'&&c<='9'||c==='$'||c==='_'||c==='\u200C'||c==='\u200D'||unicode.ID_Continue.test(c)}function isDigit(c){return /[0-9]/.test(c)}function isHexDigit(c){return /[0-9A-Fa-f]/.test(c)}
Index: frontend/node_modules/tsconfig-paths/node_modules/json5/package.json
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/json5/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/json5/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,76 @@
+{
+  "name": "json5",
+  "version": "1.0.2",
+  "description": "JSON for humans.",
+  "main": "lib/index.js",
+  "bin": "lib/cli.js",
+  "browser": "dist/index.js",
+  "files": [
+    "lib/",
+    "dist/"
+  ],
+  "scripts": {
+    "build": "babel-node build/build.js && babel src -d lib && rollup -c",
+    "coverage": "nyc report --reporter=text-lcov | coveralls",
+    "lint": "eslint --fix build src",
+    "prepublishOnly": "npm run lint && npm test && npm run production",
+    "pretest": "cross-env NODE_ENV=test npm run build",
+    "preversion": "npm run lint && npm test && npm run production",
+    "production": "cross-env NODE_ENV=production npm run build",
+    "test": "nyc --reporter=html --reporter=text mocha"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/json5/json5.git"
+  },
+  "keywords": [
+    "json",
+    "json5",
+    "es5",
+    "es2015",
+    "ecmascript"
+  ],
+  "author": "Aseem Kishore <aseem.kishore@gmail.com>",
+  "contributors": [
+    "Max Nanasy <max.nanasy@gmail.com>",
+    "Andrew Eisenberg <andrew@eisenberg.as>",
+    "Jordan Tucker <jordanbtucker@gmail.com>"
+  ],
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/json5/json5/issues"
+  },
+  "homepage": "http://json5.org/",
+  "dependencies": {
+    "minimist": "^1.2.0"
+  },
+  "devDependencies": {
+    "babel-cli": "^6.26.0",
+    "babel-core": "^6.26.0",
+    "babel-plugin-add-module-exports": "^0.2.1",
+    "babel-plugin-external-helpers": "^6.22.0",
+    "babel-plugin-istanbul": "^4.1.5",
+    "babel-preset-env": "^1.6.1",
+    "babel-register": "^6.26.0",
+    "babelrc-rollup": "^3.0.0",
+    "coveralls": "^3.0.0",
+    "cross-env": "^5.1.4",
+    "del": "^3.0.0",
+    "eslint": "^4.18.2",
+    "eslint-config-standard": "^11.0.0",
+    "eslint-plugin-import": "^2.9.0",
+    "eslint-plugin-node": "^6.0.1",
+    "eslint-plugin-promise": "^3.7.0",
+    "eslint-plugin-standard": "^3.0.1",
+    "mocha": "^5.0.4",
+    "nyc": "^11.4.1",
+    "regenerate": "^1.3.3",
+    "rollup": "^0.56.5",
+    "rollup-plugin-babel": "^3.0.3",
+    "rollup-plugin-commonjs": "^9.0.0",
+    "rollup-plugin-node-resolve": "^3.2.0",
+    "rollup-plugin-uglify": "^3.0.0",
+    "sinon": "^4.4.2",
+    "unicode-9.0.0": "^0.7.5"
+  }
+}
Index: frontend/node_modules/tsconfig-paths/node_modules/strip-bom/index.js
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/strip-bom/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/strip-bom/index.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,14 @@
+'use strict';
+module.exports = x => {
+	if (typeof x !== 'string') {
+		throw new TypeError('Expected a string, got ' + typeof x);
+	}
+
+	// Catches EFBBBF (UTF-8 BOM) because the buffer-to-string
+	// conversion translates it to FEFF (UTF-16 BOM)
+	if (x.charCodeAt(0) === 0xFEFF) {
+		return x.slice(1);
+	}
+
+	return x;
+};
Index: frontend/node_modules/tsconfig-paths/node_modules/strip-bom/license
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/strip-bom/license	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/strip-bom/license	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/tsconfig-paths/node_modules/strip-bom/package.json
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/strip-bom/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/strip-bom/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,40 @@
+{
+  "name": "strip-bom",
+  "version": "3.0.0",
+  "description": "Strip UTF-8 byte order mark (BOM) from a string",
+  "license": "MIT",
+  "repository": "sindresorhus/strip-bom",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "engines": {
+    "node": ">=4"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "files": [
+    "index.js"
+  ],
+  "keywords": [
+    "strip",
+    "bom",
+    "byte",
+    "order",
+    "mark",
+    "unicode",
+    "utf8",
+    "utf-8",
+    "remove",
+    "delete",
+    "trim",
+    "text",
+    "string"
+  ],
+  "devDependencies": {
+    "ava": "*",
+    "xo": "*"
+  }
+}
Index: frontend/node_modules/tsconfig-paths/node_modules/strip-bom/readme.md
===================================================================
--- frontend/node_modules/tsconfig-paths/node_modules/strip-bom/readme.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/node_modules/strip-bom/readme.md	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,36 @@
+# strip-bom [![Build Status](https://travis-ci.org/sindresorhus/strip-bom.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-bom)
+
+> Strip UTF-8 [byte order mark](http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8) (BOM) from a string
+
+From Wikipedia:
+
+> The Unicode Standard permits the BOM in UTF-8, but does not require nor recommend its use. Byte order has no meaning in UTF-8.
+
+
+## Install
+
+```
+$ npm install --save strip-bom
+```
+
+
+## Usage
+
+```js
+const stripBom = require('strip-bom');
+
+stripBom('\uFEFFunicorn');
+//=> 'unicorn'
+```
+
+
+## Related
+
+- [strip-bom-cli](https://github.com/sindresorhus/strip-bom-cli) - CLI for this module
+- [strip-bom-buf](https://github.com/sindresorhus/strip-bom-buf) - Buffer version of this module
+- [strip-bom-stream](https://github.com/sindresorhus/strip-bom-stream) - Stream version of this module
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
Index: frontend/node_modules/tsconfig-paths/package.json
===================================================================
--- frontend/node_modules/tsconfig-paths/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/package.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,67 @@
+{
+  "name": "tsconfig-paths",
+  "version": "3.15.0",
+  "description": "Load node modules according to tsconfig paths, in run-time or via API.",
+  "main": "lib/index.js",
+  "types": "lib/index.d.ts",
+  "author": "Jonas Kello",
+  "license": "MIT",
+  "repository": "https://github.com/dividab/tsconfig-paths",
+  "files": [
+    "/src",
+    "/lib",
+    "register.js",
+    "package.json",
+    "CHANGELOG.md",
+    "LICENSE",
+    "README.md"
+  ],
+  "devDependencies": {
+    "@types/jest": "^27.0.3",
+    "@types/minimist": "^1.2.2",
+    "@types/node": "^6.0.54",
+    "@types/strip-bom": "^3.0.0",
+    "@types/strip-json-comments": "^0.0.30",
+    "husky": "^4.2.5",
+    "jest": "^27.3.1",
+    "lint-staged": "^10.2.11",
+    "prettier": "^2.0.5",
+    "rimraf": "^2.6.2",
+    "ts-jest": "^27.0.7",
+    "ts-node": "^10.7.0",
+    "tslint": "^5.8.0",
+    "typescript": "^4.5.2"
+  },
+  "dependencies": {
+    "@types/json5": "^0.0.29",
+    "json5": "^1.0.2",
+    "minimist": "^1.2.6",
+    "strip-bom": "^3.0.0"
+  },
+  "scripts": {
+    "start": "cd src && ts-node index.ts",
+    "example:node": "yarn build && cd ./example/node && ts-node -r ../register.js main.ts",
+    "example:project": "yarn build && ts-node -r ./register.js -P ./example/project/tsconfig.json ./example/project/main.ts",
+    "example:api": "cd example/api && ts-node main.ts",
+    "example:perf": "cd example/perf && ts-node main.ts",
+    "test": "jest",
+    "test-coverage": "jest --coverage",
+    "build": "rimraf lib && tsc -p .",
+    "lint": "tslint './{src,tests}/**/*.ts{,x}'",
+    "verify": "yarn build && yarn lint && yarn test-coverage",
+    "preversion": "yarn verify",
+    "postversion": "git push --tags && yarn publish --new-version $npm_package_version && git push && echo \"Successfully released version $npm_package_version!\""
+  },
+  "lint-staged": {
+    "*.{ts,tsx}": "tslint",
+    "*.{ts,tsx,json,css}": [
+      "prettier --write",
+      "git add"
+    ]
+  },
+  "husky": {
+    "hooks": {
+      "pre-commit": "lint-staged"
+    }
+  }
+}
Index: frontend/node_modules/tsconfig-paths/register.js
===================================================================
--- frontend/node_modules/tsconfig-paths/register.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/register.js	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,1 @@
+require("./").register();
Index: frontend/node_modules/tsconfig-paths/src/__tests__/config-loader.test.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/__tests__/config-loader.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/__tests__/config-loader.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,100 @@
+import {
+  configLoader,
+  loadConfig,
+  ConfigLoaderFailResult,
+  ConfigLoaderSuccessResult,
+} from "../config-loader";
+import { join } from "path";
+
+describe("config-loader", (): void => {
+  it("should use explicitParams when set", () => {
+    const result = configLoader({
+      explicitParams: {
+        baseUrl: "/foo/bar",
+        paths: {
+          asd: ["asd"],
+        },
+      },
+      cwd: "/baz",
+    });
+
+    const successResult = result as ConfigLoaderSuccessResult;
+    // assert.equal(successResult.resultType, "success");
+    // assert.equal(successResult.absoluteBaseUrl, "/foo/bar");
+    // assert.equal(successResult.paths["asd"][0], "asd");
+    expect(successResult.resultType).toBe("success");
+    expect(successResult.absoluteBaseUrl).toBe("/foo/bar");
+    expect(successResult.paths["asd"][0]).toBe("asd");
+  });
+
+  it("should use explicitParams when set and add cwd when path is relative", () => {
+    const result = configLoader({
+      explicitParams: {
+        baseUrl: "bar/",
+        paths: {
+          asd: ["asd"],
+        },
+      },
+      cwd: "/baz",
+    });
+
+    const successResult = result as ConfigLoaderSuccessResult;
+    // assert.equal(successResult.resultType, "success");
+    // assert.equal(successResult.absoluteBaseUrl, join("/baz", "bar/"));
+    expect(successResult.resultType).toBe("success");
+    expect(successResult.absoluteBaseUrl).toBe(join("/baz", "bar/"));
+  });
+
+  it("should fallback to tsConfigLoader when explicitParams is not set", () => {
+    const result = configLoader({
+      explicitParams: undefined,
+      cwd: "/baz",
+      // tslint:disable-next-line:no-any
+      tsConfigLoader: (_: any) => ({
+        tsConfigPath: "/baz/tsconfig.json",
+        baseUrl: "./src",
+        paths: {},
+      }),
+    });
+
+    const successResult = result as ConfigLoaderSuccessResult;
+    // assert.equal(successResult.resultType, "success");
+    // assert.equal(successResult.absoluteBaseUrl, join("/baz", "src"));
+    expect(successResult.resultType).toBe("success");
+    expect(successResult.absoluteBaseUrl).toBe(join("/baz", "src"));
+  });
+
+  it("should show an error message when baseUrl is missing", () => {
+    const result = configLoader({
+      explicitParams: undefined,
+      cwd: "/baz",
+      // tslint:disable-next-line:no-any
+      tsConfigLoader: (_: any) => ({
+        tsConfigPath: "/baz/tsconfig.json",
+        baseUrl: undefined,
+        paths: {},
+      }),
+    });
+
+    const failResult = result as ConfigLoaderFailResult;
+    // assert.equal(failResult.resultType, "failed");
+    // assert.isTrue(failResult.message.indexOf("baseUrl") > -1);
+    expect(failResult.resultType).toBe("failed");
+    expect(failResult.message.indexOf("baseUrl") > -1).toBeTruthy();
+  });
+
+  it("should presume cwd to be a tsconfig file when loadConfig is called with absolute path to tsconfig.json", () => {
+    // using tsconfig-named.json to ensure that future changes to fix
+    // https://github.com/dividab/tsconfig-paths/issues/31
+    // do not pass this test case just because of a directory walk looking
+    // for tsconfig.json
+    const configFile = join(__dirname, "tsconfig-named.json");
+    const result = loadConfig(configFile);
+
+    const successResult = result as ConfigLoaderSuccessResult;
+    // assert.equal(successResult.resultType, "success");
+    // assert.equal(successResult.configFileAbsolutePath, configFile);
+    expect(successResult.resultType).toBe("success");
+    expect(successResult.configFileAbsolutePath).toBe(configFile);
+  });
+});
Index: frontend/node_modules/tsconfig-paths/src/__tests__/data/match-path-data.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/__tests__/data/match-path-data.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/__tests__/data/match-path-data.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,219 @@
+import { join, dirname } from "path";
+import { removeExtension } from "../../filesystem";
+
+export interface OneTest {
+  readonly name: string;
+  readonly only?: boolean;
+  readonly skip?: boolean;
+  readonly absoluteBaseUrl: string;
+  readonly paths: { [key: string]: Array<string> };
+  readonly mainFields?: string[];
+  readonly addMatchAll?: boolean;
+  readonly existingFiles: ReadonlyArray<string>;
+  readonly requestedModule: string;
+  readonly extensions: ReadonlyArray<string>;
+  readonly packageJson?: {};
+  readonly expectedPath: string | undefined;
+}
+
+const defaultExtensionsWhenRunningInTsNode = [
+  ".js",
+  ".json",
+  ".node",
+  ".ts",
+  ".tsx",
+];
+
+export const tests: ReadonlyArray<OneTest> = [
+  {
+    name: "should locate path that matches with star and exists",
+    absoluteBaseUrl: "/root/",
+    paths: {
+      "lib/*": ["location/*"],
+    },
+    existingFiles: [join("/root", "location", "mylib", "index.ts")],
+    requestedModule: "lib/mylib",
+    expectedPath: dirname(join("/root", "location", "mylib", "index.ts")),
+    extensions: defaultExtensionsWhenRunningInTsNode,
+  },
+  {
+    name: "should resolve to correct path when many are specified",
+    absoluteBaseUrl: "/root/",
+    paths: {
+      "lib/*": ["foo1/*", "foo2/*", "location/*", "foo3/*"],
+    },
+    existingFiles: [join("/root", "location", "mylib", "index.ts")],
+    requestedModule: "lib/mylib",
+    extensions: [".ts"],
+    expectedPath: dirname(join("/root", "location", "mylib", "index.ts")),
+  },
+  {
+    name:
+      "should locate path that matches with star and prioritize pattern with longest prefix",
+    absoluteBaseUrl: "/root/",
+    paths: {
+      "*": ["location/*"],
+      "lib/*": ["location/*"],
+    },
+    existingFiles: [
+      join("/root", "location", "lib", "mylib", "index.ts"),
+      join("/root", "location", "mylib", "index.ts"),
+    ],
+    requestedModule: "lib/mylib",
+    expectedPath: dirname(join("/root", "location", "mylib", "index.ts")),
+    extensions: defaultExtensionsWhenRunningInTsNode,
+  },
+  {
+    name: "should locate path that matches with star and exists with extension",
+    absoluteBaseUrl: "/root/",
+    paths: { "lib/*": ["location/*"] },
+    existingFiles: [join("/root", "location", "mylib.myext")],
+    requestedModule: "lib/mylib",
+    extensions: [".js", ".myext"],
+    expectedPath: removeExtension(join("/root", "location", "mylib.myext")),
+  },
+  {
+    name: "should resolve request with extension specified",
+    absoluteBaseUrl: "/root/",
+    paths: { "lib/*": ["location/*"] },
+    existingFiles: [join("/root", "location", "test.jpg")],
+    requestedModule: "lib/test.jpg",
+    expectedPath: join("/root", "location", "test.jpg"),
+    extensions: defaultExtensionsWhenRunningInTsNode,
+  },
+  {
+    name: "should locate path that matches without star and exists",
+    absoluteBaseUrl: "/root/",
+    paths: {
+      "lib/foo": ["location/foo"],
+    },
+    existingFiles: [join("/root", "location", "foo.ts")],
+    requestedModule: "lib/foo",
+    expectedPath: removeExtension(join("/root", "location", "foo.ts")),
+    extensions: defaultExtensionsWhenRunningInTsNode,
+  },
+  {
+    name: "should resolve to parent folder when filename is in subfolder",
+    absoluteBaseUrl: "/root/",
+    paths: { "lib/*": ["location/*"] },
+    existingFiles: [join("/root", "location", "mylib", "index.ts")],
+    requestedModule: "lib/mylib",
+    expectedPath: dirname(join("/root", "location", "mylib", "index.ts")),
+    extensions: defaultExtensionsWhenRunningInTsNode,
+  },
+  {
+    name: "should resolve from main field in package.json",
+    absoluteBaseUrl: "/root/",
+    paths: { "lib/*": ["location/*"] },
+    existingFiles: [join("/root", "location", "mylib", "kalle.ts")],
+    packageJson: { main: "./kalle.ts" },
+    requestedModule: "lib/mylib",
+    expectedPath: join("/root", "location", "mylib", "kalle.ts"),
+    extensions: defaultExtensionsWhenRunningInTsNode,
+  },
+  {
+    name: "should resolve from main field in package.json (js)",
+    absoluteBaseUrl: "/root",
+    paths: { "lib/*": ["location/*"] },
+    existingFiles: [join("/root", "location", "mylib.js", "kalle.js")],
+    packageJson: { main: "./kalle.js" },
+    requestedModule: "lib/mylib.js",
+    extensions: [".ts", ".js"],
+    expectedPath: join("/root", "location", "mylib.js", "kalle.js"),
+  },
+  {
+    name: "should resolve from list of fields by priority in package.json",
+    absoluteBaseUrl: "/root/",
+    paths: { "lib/*": ["location/*"] },
+    mainFields: ["missing", "browser", "main"],
+    packageJson: { main: "./main.js", browser: "./browser.js" },
+    existingFiles: [
+      join("/root", "location", "mylibjs", "main.js"), // mainFilePath
+      join("/root", "location", "mylibjs", "browser.js"), // browserFilePath
+    ],
+    extensions: [".ts", ".js"],
+    requestedModule: "lib/mylibjs",
+    expectedPath: join("/root", "location", "mylibjs", "browser.js"),
+  },
+  {
+    name: "should ignore field mappings to missing files in package.json",
+    absoluteBaseUrl: "/root/",
+    paths: { "lib/*": ["location/*"] },
+    mainFields: ["browser", "main"],
+    existingFiles: [join("/root", "location", "mylibjs", "kalle.js")],
+    requestedModule: "lib/mylibjs",
+    packageJson: {
+      main: "./kalle.js",
+      browser: "./nope.js",
+    },
+    extensions: [".ts", ".js"],
+    expectedPath: join("/root", "location", "mylibjs", "kalle.js"),
+  },
+  {
+    name: "should ignore advanced field mappings in package.json",
+    absoluteBaseUrl: "/root/",
+    paths: { "lib/*": ["location/*"] },
+    existingFiles: [
+      join("/root", "location", "mylibjs", "kalle.js"),
+      join("/root", "location", "mylibjs", "browser.js"),
+    ],
+    requestedModule: "lib/mylibjs",
+    packageJson: {
+      main: "./kalle.js",
+      browser: { mylibjs: "./browser.js", "./kalle.js": "./browser.js" },
+    },
+    extensions: [".ts", ".js"],
+    expectedPath: join("/root", "location", "mylibjs", "kalle.js"),
+  },
+  {
+    name: "should resolve to with the help of baseUrl when not explicitly set",
+    absoluteBaseUrl: "/root/",
+    paths: {},
+    existingFiles: [join("/root", "mylib", "index.ts")],
+    requestedModule: "mylib",
+    expectedPath: dirname(join("/root", "mylib", "index.ts")),
+    extensions: defaultExtensionsWhenRunningInTsNode,
+  },
+  {
+    name: "should not resolve with the help of baseUrl when asked not to",
+    absoluteBaseUrl: "/root/",
+    paths: {},
+    addMatchAll: false,
+    existingFiles: [join("/root", "mylib", "index.ts")],
+    requestedModule: "mylib",
+    expectedPath: undefined,
+    extensions: defaultExtensionsWhenRunningInTsNode,
+  },
+  {
+    name: "should not locate path that does not match",
+    absoluteBaseUrl: "/root/",
+    paths: { "lib/*": ["location/*"] },
+    existingFiles: [join("root", "location", "mylib")],
+    requestedModule: "mylib",
+    expectedPath: undefined,
+    extensions: defaultExtensionsWhenRunningInTsNode,
+  },
+  {
+    name: "should not resolve typings file (index.d.ts)",
+    absoluteBaseUrl: "/root/",
+    paths: {
+      "lib/*": ["location/*"],
+    },
+    existingFiles: [join("/root", "location", "mylib", "index.d.ts")],
+    requestedModule: "lib/mylib",
+    expectedPath: undefined,
+    extensions: defaultExtensionsWhenRunningInTsNode,
+  },
+  {
+    name: "should resolve main file with cjs file extension",
+    absoluteBaseUrl: "/root/",
+    paths: {},
+    existingFiles: [join("/root", "mylib", "index.cjs")],
+    packageJson: {
+      main: "./index.cjs",
+    },
+    requestedModule: "mylib",
+    expectedPath: join("/root", "mylib", "index.cjs"),
+    extensions: defaultExtensionsWhenRunningInTsNode,
+  },
+];
Index: frontend/node_modules/tsconfig-paths/src/__tests__/filesystem.test.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/__tests__/filesystem.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/__tests__/filesystem.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,65 @@
+import * as Filesystem from "../filesystem";
+import * as path from "path";
+
+describe("filesystem", () => {
+  const fileThatExists = path.join(__dirname, "../../package.json");
+  const fileThatNotExists = path.join(__dirname, "../../package2.json");
+
+  it("should find file that exists, sync", () => {
+    const result = Filesystem.fileExistsSync(fileThatExists);
+    // assert.equal(result, true);
+    expect(result).toBe(true);
+  });
+
+  it("should not find file that not exists, sync", () => {
+    const result = Filesystem.fileExistsSync(fileThatNotExists);
+    // assert.equal(result, false);
+    expect(result).toBe(false);
+  });
+
+  it("should find file that exists, async", (done) => {
+    Filesystem.fileExistsAsync(fileThatExists, (_err, result) => {
+      try {
+        // assert.equal(result, true);
+        expect(result).toBe(true);
+        done();
+      } catch (error) {
+        done(error);
+      }
+    });
+  });
+
+  it("should not find file that not exists, async", (done) => {
+    Filesystem.fileExistsAsync(fileThatNotExists, (_err, result) => {
+      try {
+        // assert.equal(result, false);
+        expect(result).toBe(false);
+        done();
+      } catch (error) {
+        done(error);
+      }
+    });
+  });
+
+  it("should load json, sync", () => {
+    const result = Filesystem.readJsonFromDiskSync(fileThatExists);
+    // assert.isOk(result);
+    expect(result);
+    // assert.equal(result.main, "lib/index.js");
+    expect(result.main).toBe("lib/index.js");
+  });
+
+  it("should load json, async", (done) => {
+    Filesystem.readJsonFromDiskAsync(fileThatExists, (_err, result) => {
+      try {
+        // assert.isOk(result); // Asserts that object is truthy.
+        expect(result).toBeTruthy();
+        // assert.equal(result.main, "lib/index.js");
+        expect(result.main).toBe("lib/index.js");
+        done();
+      } catch (error) {
+        done(error);
+      }
+    });
+  });
+});
Index: frontend/node_modules/tsconfig-paths/src/__tests__/mapping-entry.test.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/__tests__/mapping-entry.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/__tests__/mapping-entry.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,70 @@
+import { getAbsoluteMappingEntries } from "../mapping-entry";
+import { join } from "path";
+
+describe("mapping-entry", () => {
+  it("should change to absolute paths and sort in longest prefix order", () => {
+    const result = getAbsoluteMappingEntries(
+      "/absolute/base/url",
+      {
+        "*": ["/foo1", "/foo2"],
+        "longest/pre/fix/*": ["/foo2/bar"],
+        "pre/fix/*": ["/foo3"],
+      },
+      true
+    );
+    // assert.deepEqual(result, [
+    //   {
+    //     pattern: "longest/pre/fix/*",
+    //     paths: [join("/absolute", "base", "url", "foo2", "bar")],
+    //   },
+    //   {
+    //     pattern: "pre/fix/*",
+    //     paths: [join("/absolute", "base", "url", "foo3")],
+    //   },
+    //   {
+    //     pattern: "*",
+    //     paths: [
+    //       join("/absolute", "base", "url", "foo1"),
+    //       join("/absolute", "base", "url", "foo2"),
+    //     ],
+    //   },
+    // ]);
+    expect(result).toEqual([
+      {
+        pattern: "longest/pre/fix/*",
+        paths: [join("/absolute", "base", "url", "foo2", "bar")],
+      },
+      {
+        pattern: "pre/fix/*",
+        paths: [join("/absolute", "base", "url", "foo3")],
+      },
+      {
+        pattern: "*",
+        paths: [
+          join("/absolute", "base", "url", "foo1"),
+          join("/absolute", "base", "url", "foo2"),
+        ],
+      },
+    ]);
+  });
+
+  it("should should add a match-all pattern when requested", () => {
+    let result = getAbsoluteMappingEntries("/absolute/base/url", {}, true);
+    // assert.deepEqual(result, [
+    //   {
+    //     pattern: "*",
+    //     paths: [join("/absolute", "base", "url", "*")],
+    //   },
+    // ]);
+    expect(result).toEqual([
+      {
+        pattern: "*",
+        paths: [join("/absolute", "base", "url", "*")],
+      },
+    ]);
+
+    result = getAbsoluteMappingEntries("/absolute/base/url", {}, false);
+    // assert.deepEqual(result, []);
+    expect(result).toEqual([]);
+  });
+});
Index: frontend/node_modules/tsconfig-paths/src/__tests__/match-path-async.test.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/__tests__/match-path-async.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/__tests__/match-path-async.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,27 @@
+import { createMatchPathAsync } from "../match-path-async";
+import * as Tests from "./data/match-path-data";
+
+describe("match-path-async", () => {
+  Tests.tests.forEach((t) =>
+    it(t.name, (done) => {
+      const matchPath = createMatchPathAsync(
+        t.absoluteBaseUrl,
+        t.paths,
+        t.mainFields,
+        t.addMatchAll
+      );
+      matchPath(
+        t.requestedModule,
+        (_path, callback) => callback(undefined, t.packageJson),
+        (path, callback) =>
+          callback(undefined, t.existingFiles.indexOf(path) !== -1),
+        t.extensions,
+        (_err, result) => {
+          // assert.equal(result, t.expectedPath);
+          expect(result).toBe(t.expectedPath);
+          done();
+        }
+      );
+    })
+  );
+});
Index: frontend/node_modules/tsconfig-paths/src/__tests__/match-path-sync.test.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/__tests__/match-path-sync.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/__tests__/match-path-sync.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,23 @@
+import { createMatchPath } from "../match-path-sync";
+import * as Tests from "./data/match-path-data";
+
+describe("match-path-sync", () => {
+  Tests.tests.forEach((t) =>
+    it(t.name, () => {
+      const matchPath = createMatchPath(
+        t.absoluteBaseUrl,
+        t.paths,
+        t.mainFields,
+        t.addMatchAll
+      );
+      const result = matchPath(
+        t.requestedModule,
+        (_: string) => t.packageJson,
+        (name: string) => t.existingFiles.indexOf(name) !== -1,
+        t.extensions
+      );
+      // assert.equal(result, t.expectedPath);
+      expect(result).toBe(t.expectedPath);
+    })
+  );
+});
Index: frontend/node_modules/tsconfig-paths/src/__tests__/try-path.test.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/__tests__/try-path.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/__tests__/try-path.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,193 @@
+import { getPathsToTry } from "../try-path";
+import { join } from "path";
+
+describe("mapping-entry", () => {
+  const abosolutePathMappings = [
+    {
+      pattern: "longest/pre/fix/*",
+      paths: [join("/absolute", "base", "url", "foo2", "bar")],
+    },
+    { pattern: "pre/fix/*", paths: [join("/absolute", "base", "url", "foo3")] },
+    { pattern: "*", paths: [join("/absolute", "base", "url", "foo1")] },
+  ];
+  const abosolutePathMappingsStarstWithSlash = [
+    {
+      pattern: "/opt/*",
+      paths: [join("/absolute", "src", "aws-layer")],
+    },
+    {
+      pattern: "*",
+      paths: [join("/absolute", "src")],
+    },
+  ];
+  it("should return no paths for relative requested module", () => {
+    const result = getPathsToTry(
+      [".ts", "tsx"],
+      abosolutePathMappings,
+      "./requested-module"
+    );
+    // assert.deepEqual(result, undefined);
+    expect(result).toBeUndefined();
+  });
+
+  it("should return no paths if no pattern match the requested module", () => {
+    const result = getPathsToTry(
+      [".ts", "tsx"],
+      [
+        {
+          pattern: "longest/pre/fix/*",
+          paths: [join("/absolute", "base", "url", "foo2", "bar")],
+        },
+        {
+          pattern: "pre/fix/*",
+          paths: [join("/absolute", "base", "url", "foo3")],
+        },
+      ],
+      "requested-module"
+    );
+    expect(result).toBeUndefined();
+  });
+
+  it("should get all paths that matches requested module", () => {
+    const result = getPathsToTry(
+      [".ts", ".tsx"],
+      abosolutePathMappings,
+      "longest/pre/fix/requested-module"
+    );
+    // assert.deepEqual(result, [
+    //   // "longest/pre/fix/*"
+    //   { type: "file", path: join("/absolute", "base", "url", "foo2", "bar") },
+    //   {
+    //     type: "extension",
+    //     path: join("/absolute", "base", "url", "foo2", "bar.ts"),
+    //   },
+    //   {
+    //     type: "extension",
+    //     path: join("/absolute", "base", "url", "foo2", "bar.tsx"),
+    //   },
+    //   {
+    //     type: "package",
+    //     path: join("/absolute", "base", "url", "foo2", "bar", "package.json"),
+    //   },
+    //   {
+    //     type: "index",
+    //     path: join("/absolute", "base", "url", "foo2", "bar", "index.ts"),
+    //   },
+    //   {
+    //     type: "index",
+    //     path: join("/absolute", "base", "url", "foo2", "bar", "index.tsx"),
+    //   },
+    //   // "*"
+    //   { type: "file", path: join("/absolute", "base", "url", "foo1") },
+    //   { type: "extension", path: join("/absolute", "base", "url", "foo1.ts") },
+    //   { type: "extension", path: join("/absolute", "base", "url", "foo1.tsx") },
+    //   {
+    //     type: "package",
+    //     path: join("/absolute", "base", "url", "foo1", "package.json"),
+    //   },
+    //   {
+    //     type: "index",
+    //     path: join("/absolute", "base", "url", "foo1", "index.ts"),
+    //   },
+    //   {
+    //     type: "index",
+    //     path: join("/absolute", "base", "url", "foo1", "index.tsx"),
+    //   },
+    // ]);
+    expect(result).toEqual([
+      // "longest/pre/fix/*"
+      { type: "file", path: join("/absolute", "base", "url", "foo2", "bar") },
+      {
+        type: "extension",
+        path: join("/absolute", "base", "url", "foo2", "bar.ts"),
+      },
+      {
+        type: "extension",
+        path: join("/absolute", "base", "url", "foo2", "bar.tsx"),
+      },
+      {
+        type: "package",
+        path: join("/absolute", "base", "url", "foo2", "bar", "package.json"),
+      },
+      {
+        type: "index",
+        path: join("/absolute", "base", "url", "foo2", "bar", "index.ts"),
+      },
+      {
+        type: "index",
+        path: join("/absolute", "base", "url", "foo2", "bar", "index.tsx"),
+      },
+      // "*"
+      { type: "file", path: join("/absolute", "base", "url", "foo1") },
+      { type: "extension", path: join("/absolute", "base", "url", "foo1.ts") },
+      { type: "extension", path: join("/absolute", "base", "url", "foo1.tsx") },
+      {
+        type: "package",
+        path: join("/absolute", "base", "url", "foo1", "package.json"),
+      },
+      {
+        type: "index",
+        path: join("/absolute", "base", "url", "foo1", "index.ts"),
+      },
+      {
+        type: "index",
+        path: join("/absolute", "base", "url", "foo1", "index.tsx"),
+      },
+    ]);
+  });
+
+  it("should resolve paths starting with a slash", () => {
+    const result = getPathsToTry(
+      [".ts"],
+      abosolutePathMappingsStarstWithSlash,
+      "/opt/utils"
+    );
+    expect(result).toEqual([
+      // "opt/*"
+      {
+        path: join("/absolute", "src", "aws-layer"),
+        type: "file",
+      },
+      {
+        path: join("/absolute", "src", "aws-layer.ts"),
+        type: "extension",
+      },
+      {
+        path: join("/absolute", "src", "aws-layer", "package.json"),
+        type: "package",
+      },
+      {
+        path: join("/absolute", "src", "aws-layer", "index.ts"),
+        type: "index",
+      },
+      // "*"
+      {
+        path: join("/absolute", "src"),
+        type: "file",
+      },
+      {
+        path: join("/absolute", "src.ts"),
+        type: "extension",
+      },
+      {
+        path: join("/absolute", "src", "package.json"),
+        type: "package",
+      },
+      {
+        path: join("/absolute", "src", "index.ts"),
+        type: "index",
+      },
+    ]);
+  });
+});
+
+// describe("match-star", () => {
+//   it("should match star in last position", () => {
+//     const result = matchStar("lib/*", "lib/mylib");
+//     assert.equal(result, "mylib");
+//   });
+//   it("should match star in first position", () => {
+//     const result = matchStar("*/lib", "mylib/lib");
+//     assert.equal(result, "mylib");
+//   });
+// });
Index: frontend/node_modules/tsconfig-paths/src/__tests__/tsconfig-loader.test.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/__tests__/tsconfig-loader.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/__tests__/tsconfig-loader.test.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,416 @@
+import {
+  loadTsconfig,
+  tsConfigLoader,
+  walkForTsConfig,
+} from "../tsconfig-loader";
+import { join } from "path";
+
+describe("tsconfig-loader", () => {
+  it("should find tsconfig in cwd", () => {
+    const result = tsConfigLoader({
+      cwd: "/foo/bar",
+      getEnv: (_: string) => undefined,
+      loadSync: (cwd: string) => {
+        return {
+          tsConfigPath: `${cwd}/tsconfig.json`,
+          baseUrl: "./",
+          paths: {},
+        };
+      },
+    });
+
+    // assert.equal(result.tsConfigPath, "/foo/bar/tsconfig.json");
+    expect(result.tsConfigPath).toBe("/foo/bar/tsconfig.json");
+  });
+
+  it("should return loaderResult.tsConfigPath as undefined when not found", () => {
+    const result = tsConfigLoader({
+      cwd: "/foo/bar",
+      getEnv: (_: string) => undefined,
+      loadSync: (_: string) => {
+        return {
+          tsConfigPath: undefined,
+          baseUrl: "./",
+          paths: {},
+        };
+      },
+    });
+
+    // assert.isUndefined(result.tsConfigPath);
+    expect(result.tsConfigPath).toBeUndefined();
+  });
+
+  it("should use TS_NODE_PROJECT env if exists", () => {
+    const result = tsConfigLoader({
+      cwd: "/foo/bar",
+      getEnv: (key: string) =>
+        key === "TS_NODE_PROJECT" ? "/foo/baz" : undefined,
+      loadSync: (cwd: string, fileName: string) => {
+        if (cwd === "/foo/bar" && fileName === "/foo/baz") {
+          return {
+            tsConfigPath: "/foo/baz/tsconfig.json",
+            baseUrl: "./",
+            paths: {},
+          };
+        }
+
+        return {
+          tsConfigPath: undefined,
+          baseUrl: "./",
+          paths: {},
+        };
+      },
+    });
+
+    // assert.equal(result.tsConfigPath, "/foo/baz/tsconfig.json");
+    expect(result.tsConfigPath).toBe("/foo/baz/tsconfig.json");
+  });
+
+  it("should use TS_NODE_BASEURL env if exists", () => {
+    const result = tsConfigLoader({
+      cwd: "/foo/bar",
+      getEnv: (key: string) =>
+        key === "TS_NODE_BASEURL" ? "SOME_BASEURL" : undefined,
+      loadSync: (_0: string, _1: string, baseUrl: string) => {
+        return {
+          tsConfigPath: undefined,
+          baseUrl,
+          paths: {},
+        };
+      },
+    });
+
+    // assert.equal(result.baseUrl, "SOME_BASEURL");
+    expect(result.baseUrl).toBe("SOME_BASEURL");
+  });
+
+  it("should not use TS_NODE_BASEURL env if it does not exist", () => {
+    const result = tsConfigLoader({
+      cwd: "/foo/bar",
+      getEnv: (_: string) => {
+        return undefined;
+      },
+      loadSync: (_0: string, _1: string, baseUrl: string) => {
+        return {
+          tsConfigPath: undefined,
+          baseUrl,
+          paths: {},
+        };
+      },
+    });
+
+    // assert.equal(result.baseUrl, undefined);
+    expect(result.baseUrl).toBeUndefined();
+  });
+});
+
+describe("walkForTsConfig", () => {
+  it("should find tsconfig in starting directory", () => {
+    const pathToTsconfig = join("/root", "dir1", "tsconfig.json");
+    const res = walkForTsConfig(
+      join("/root", "dir1"),
+      (path) => path === pathToTsconfig
+    );
+    // assert.equal(res, pathToTsconfig);
+    expect(res).toBe(pathToTsconfig);
+  });
+
+  it("should find tsconfig in parent directory", () => {
+    const pathToTsconfig = join("/root", "tsconfig.json");
+    const res = walkForTsConfig(
+      join("/root", "dir1"),
+      (path) => path === pathToTsconfig
+    );
+    // assert.equal(res, pathToTsconfig);
+    expect(res).toBe(pathToTsconfig);
+  });
+
+  it("should return undefined when reaching the top", () => {
+    const res = walkForTsConfig(join("/root", "dir1", "kalle"), () => false);
+    // assert.equal(res, undefined);
+    expect(res).toBeUndefined();
+  });
+});
+
+describe("loadConfig", () => {
+  it("should load a config", () => {
+    const config = { compilerOptions: { baseUrl: "hej" } };
+    const res = loadTsconfig(
+      "/root/dir1/tsconfig.json",
+      (path) => path === "/root/dir1/tsconfig.json",
+      (_) => JSON.stringify(config)
+    );
+    // assert.deepEqual(res, config);
+    expect(res).toStrictEqual(config);
+  });
+
+  it("should load a config with comments", () => {
+    const config = { compilerOptions: { baseUrl: "hej" } };
+    const res = loadTsconfig(
+      "/root/dir1/tsconfig.json",
+      (path) => path === "/root/dir1/tsconfig.json",
+      (_) => `{
+          // my comment
+          "compilerOptions": { 
+            "baseUrl": "hej"
+          }
+        }`
+    );
+    // assert.deepEqual(res, config);
+    expect(res).toStrictEqual(config);
+  });
+
+  it("should load a config with trailing commas", () => {
+    const config = { compilerOptions: { baseUrl: "hej" } };
+    const res = loadTsconfig(
+      "/root/dir1/tsconfig.json",
+      (path) => path === "/root/dir1/tsconfig.json",
+      (_) => `{
+          "compilerOptions": { 
+            "baseUrl": "hej",
+          },
+        }`
+    );
+    // assert.deepEqual(res, config);
+    expect(res).toStrictEqual(config);
+  });
+
+  it("should throw an error including the file path when encountering invalid JSON5", () => {
+    expect(() =>
+      loadTsconfig(
+        "/root/dir1/tsconfig.json",
+        (path) => path === "/root/dir1/tsconfig.json",
+        (_) => `{
+            "compilerOptions": {
+          }`
+      )
+    ).toThrowError(
+      "/root/dir1/tsconfig.json is malformed JSON5: invalid end of input at 3:12"
+    );
+  });
+
+  it("should load a config with string extends and overwrite all options", () => {
+    const firstConfig = {
+      extends: "../base-config.json",
+      compilerOptions: { baseUrl: "kalle", paths: { foo: ["bar2"] } },
+    };
+    const firstConfigPath = join("/root", "dir1", "tsconfig.json");
+    const baseConfig = {
+      compilerOptions: {
+        baseUrl: "olle",
+        paths: { foo: ["bar1"] },
+        strict: true,
+      },
+    };
+    const baseConfigPath = join("/root", "base-config.json");
+    const res = loadTsconfig(
+      join("/root", "dir1", "tsconfig.json"),
+      (path) => path === firstConfigPath || path === baseConfigPath,
+      (path) => {
+        if (path === firstConfigPath) {
+          return JSON.stringify(firstConfig);
+        }
+        if (path === baseConfigPath) {
+          return JSON.stringify(baseConfig);
+        }
+        return "";
+      }
+    );
+
+    // assert.deepEqual(res, {
+    //   extends: "../base-config.json",
+    //   compilerOptions: {
+    //     baseUrl: "kalle",
+    //     paths: { foo: ["bar2"] },
+    //     strict: true,
+    //   },
+    // });
+    expect(res).toEqual({
+      extends: "../base-config.json",
+      compilerOptions: {
+        baseUrl: "kalle",
+        paths: { foo: ["bar2"] },
+        strict: true,
+      },
+    });
+  });
+
+  it("should load a config with string extends from node_modules and overwrite all options", () => {
+    const firstConfig = {
+      extends: "my-package/base-config.json",
+      compilerOptions: { baseUrl: "kalle", paths: { foo: ["bar2"] } },
+    };
+    const firstConfigPath = join("/root", "dir1", "tsconfig.json");
+    const baseConfig = {
+      compilerOptions: {
+        baseUrl: "olle",
+        paths: { foo: ["bar1"] },
+        strict: true,
+      },
+    };
+    const baseConfigPath = join(
+      "/root",
+      "dir1",
+      "node_modules",
+      "my-package",
+      "base-config.json"
+    );
+    const res = loadTsconfig(
+      join("/root", "dir1", "tsconfig.json"),
+      (path) => path === firstConfigPath || path === baseConfigPath,
+      (path) => {
+        if (path === firstConfigPath) {
+          return JSON.stringify(firstConfig);
+        }
+        if (path === baseConfigPath) {
+          return JSON.stringify(baseConfig);
+        }
+        return "";
+      }
+    );
+
+    // assert.deepEqual(res, {
+    //   extends: "my-package/base-config.json",
+    //   compilerOptions: {
+    //     baseUrl: "kalle",
+    //     paths: { foo: ["bar2"] },
+    //     strict: true,
+    //   },
+    // });
+    expect(res).toEqual({
+      extends: "my-package/base-config.json",
+      compilerOptions: {
+        baseUrl: "kalle",
+        paths: { foo: ["bar2"] },
+        strict: true,
+      },
+    });
+  });
+
+  it("should use baseUrl relative to location of extended tsconfig", () => {
+    const firstConfig = { compilerOptions: { baseUrl: "." } };
+    const firstConfigPath = join("/root", "first-config.json");
+    const secondConfig = { extends: "../first-config.json" };
+    const secondConfigPath = join("/root", "dir1", "second-config.json");
+    const thirdConfig = { extends: "../second-config.json" };
+    const thirdConfigPath = join("/root", "dir1", "dir2", "third-config.json");
+    const res = loadTsconfig(
+      join("/root", "dir1", "dir2", "third-config.json"),
+      (path) =>
+        path === firstConfigPath ||
+        path === secondConfigPath ||
+        path === thirdConfigPath,
+      (path) => {
+        if (path === firstConfigPath) {
+          return JSON.stringify(firstConfig);
+        }
+        if (path === secondConfigPath) {
+          return JSON.stringify(secondConfig);
+        }
+        if (path === thirdConfigPath) {
+          return JSON.stringify(thirdConfig);
+        }
+        return "";
+      }
+    );
+
+    // assert.deepEqual(res, {
+    //   extends: "../second-config.json",
+    //   compilerOptions: { baseUrl: join("..", "..") },
+    // });
+    expect(res).toEqual({
+      extends: "../second-config.json",
+      compilerOptions: { baseUrl: join("..", "..") },
+    });
+  });
+
+  it("should load a config with array extends and overwrite all options", () => {
+    const baseConfig1 = {
+      compilerOptions: { baseUrl: ".", paths: { foo: ["bar"] } },
+    };
+    const baseConfig1Path = join("/root", "base-config-1.json");
+    const baseConfig2 = { compilerOptions: { baseUrl: "." } };
+    const baseConfig2Path = join("/root", "dir1", "base-config-2.json");
+    const baseConfig3 = {
+      compilerOptions: { baseUrl: ".", paths: { foo: ["bar2"] } },
+    };
+    const baseConfig3Path = join("/root", "dir1", "dir2", "base-config-3.json");
+    const actualConfig = {
+      extends: [
+        "./base-config-1.json",
+        "./dir1/base-config-2.json",
+        "./dir1/dir2/base-config-3.json",
+      ],
+    };
+    const actualConfigPath = join("/root", "tsconfig.json");
+
+    const res = loadTsconfig(
+      join("/root", "tsconfig.json"),
+      (path) =>
+        [
+          baseConfig1Path,
+          baseConfig2Path,
+          baseConfig3Path,
+          actualConfigPath,
+        ].indexOf(path) >= 0,
+      (path) => {
+        if (path === baseConfig1Path) {
+          return JSON.stringify(baseConfig1);
+        }
+        if (path === baseConfig2Path) {
+          return JSON.stringify(baseConfig2);
+        }
+        if (path === baseConfig3Path) {
+          return JSON.stringify(baseConfig3);
+        }
+        if (path === actualConfigPath) {
+          return JSON.stringify(actualConfig);
+        }
+        return "";
+      }
+    );
+
+    expect(res).toEqual({
+      extends: [
+        "./base-config-1.json",
+        "./dir1/base-config-2.json",
+        "./dir1/dir2/base-config-3.json",
+      ],
+      compilerOptions: {
+        baseUrl: join("dir1", "dir2"),
+        paths: { foo: ["bar2"] },
+      },
+    });
+  });
+
+  it("should load a config with array extends without .json extension", () => {
+    const baseConfig = {
+      compilerOptions: { baseUrl: ".", paths: { foo: ["bar"] } },
+    };
+    const baseConfigPath = join("/root", "base-config-1.json");
+    const actualConfig = { extends: ["./base-config-1"] };
+    const actualConfigPath = join("/root", "tsconfig.json");
+
+    const res = loadTsconfig(
+      join("/root", "tsconfig.json"),
+      (path) => [baseConfigPath, actualConfigPath].indexOf(path) >= 0,
+      (path) => {
+        if (path === baseConfigPath) {
+          return JSON.stringify(baseConfig);
+        }
+        if (path === actualConfigPath) {
+          return JSON.stringify(actualConfig);
+        }
+        return "";
+      }
+    );
+
+    expect(res).toEqual({
+      extends: ["./base-config-1"],
+      compilerOptions: {
+        baseUrl: ".",
+        paths: { foo: ["bar"] },
+      },
+    });
+  });
+});
Index: frontend/node_modules/tsconfig-paths/src/__tests__/tsconfig-named.json
===================================================================
--- frontend/node_modules/tsconfig-paths/src/__tests__/tsconfig-named.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/__tests__/tsconfig-named.json	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,10 @@
+{
+  "extends": "../base-tsconfig.json",
+  "compilerOptions": {
+    "baseUrl": ".",
+    "module": "commonjs",
+    "target": "es6",
+    "sourceMap": true,
+    "outDir": "./js_out"
+  }
+}
Index: frontend/node_modules/tsconfig-paths/src/config-loader.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/config-loader.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/config-loader.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,97 @@
+import * as TsConfigLoader2 from "./tsconfig-loader";
+import * as path from "path";
+import { options } from "./options";
+
+export interface ExplicitParams {
+  baseUrl: string;
+  paths: { [key: string]: Array<string> };
+  mainFields?: Array<string>;
+  addMatchAll?: boolean;
+}
+
+export type TsConfigLoader = (
+  params: TsConfigLoader2.TsConfigLoaderParams
+) => TsConfigLoader2.TsConfigLoaderResult;
+
+export interface ConfigLoaderParams {
+  cwd: string;
+  explicitParams?: ExplicitParams;
+  tsConfigLoader?: TsConfigLoader;
+}
+
+export interface ConfigLoaderSuccessResult {
+  resultType: "success";
+  configFileAbsolutePath: string;
+  baseUrl: string;
+  absoluteBaseUrl: string;
+  paths: { [key: string]: Array<string> };
+  mainFields?: Array<string>;
+  addMatchAll?: boolean;
+}
+
+export interface ConfigLoaderFailResult {
+  resultType: "failed";
+  message: string;
+}
+
+export type ConfigLoaderResult =
+  | ConfigLoaderSuccessResult
+  | ConfigLoaderFailResult;
+
+export function loadConfig(cwd: string = options.cwd): ConfigLoaderResult {
+  return configLoader({ cwd: cwd });
+}
+
+export function configLoader({
+  cwd,
+  explicitParams,
+  tsConfigLoader = TsConfigLoader2.tsConfigLoader,
+}: ConfigLoaderParams): ConfigLoaderResult {
+  if (explicitParams) {
+    // tslint:disable-next-line:no-shadowed-variable
+    const absoluteBaseUrl = path.isAbsolute(explicitParams.baseUrl)
+      ? explicitParams.baseUrl
+      : path.join(cwd, explicitParams.baseUrl);
+
+    return {
+      resultType: "success",
+      configFileAbsolutePath: "",
+      baseUrl: explicitParams.baseUrl,
+      absoluteBaseUrl,
+      paths: explicitParams.paths,
+      mainFields: explicitParams.mainFields,
+      addMatchAll: explicitParams.addMatchAll,
+    };
+  }
+
+  // Load tsconfig and create path matching function
+  const loadResult = tsConfigLoader({
+    cwd,
+    getEnv: (key: string) => process.env[key],
+  });
+
+  if (!loadResult.tsConfigPath) {
+    return {
+      resultType: "failed",
+      message: "Couldn't find tsconfig.json",
+    };
+  }
+
+  if (!loadResult.baseUrl) {
+    return {
+      resultType: "failed",
+      message: "Missing baseUrl in compilerOptions",
+    };
+  }
+
+  const tsConfigDir = path.dirname(loadResult.tsConfigPath);
+  const absoluteBaseUrl = path.join(tsConfigDir, loadResult.baseUrl);
+
+  return {
+    resultType: "success",
+    configFileAbsolutePath: loadResult.tsConfigPath,
+    baseUrl: loadResult.baseUrl,
+    absoluteBaseUrl,
+    paths: loadResult.paths || {},
+  };
+}
Index: frontend/node_modules/tsconfig-paths/src/filesystem.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/filesystem.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/filesystem.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,87 @@
+import * as fs from "fs";
+
+/**
+ * Typing for the fields of package.json we care about
+ */
+export interface PackageJson {
+  [key: string]: string;
+}
+
+/**
+ * A function that json from a file
+ */
+export interface ReadJsonSync {
+  // tslint:disable-next-line:no-any
+  (packageJsonPath: string): any | undefined;
+}
+
+export interface FileExistsSync {
+  (name: string): boolean;
+}
+
+export interface FileExistsAsync {
+  (path: string, callback: (err?: Error, exists?: boolean) => void): void;
+}
+
+export interface ReadJsonAsyncCallback {
+  // tslint:disable-next-line:no-any
+  (err?: Error, content?: any): void;
+}
+
+export interface ReadJsonAsync {
+  (path: string, callback: ReadJsonAsyncCallback): void;
+}
+
+export function fileExistsSync(path: string): boolean {
+  try {
+    const stats = fs.statSync(path);
+    return stats.isFile();
+  } catch (err) {
+    // If error, assume file did not exist
+    return false;
+  }
+}
+
+/**
+ * Reads package.json from disk
+ * @param file Path to package.json
+ */
+// tslint:disable-next-line:no-any
+export function readJsonFromDiskSync(packageJsonPath: string): any | undefined {
+  if (!fs.existsSync(packageJsonPath)) {
+    return undefined;
+  }
+  return require(packageJsonPath);
+}
+
+export function readJsonFromDiskAsync(
+  path: string,
+  // tslint:disable-next-line:no-any
+  callback: (err?: Error, content?: any) => void
+): void {
+  fs.readFile(path, "utf8", (err, result) => {
+    // If error, assume file did not exist
+    if (err || !result) {
+      return callback();
+    }
+    const json = JSON.parse(result);
+    return callback(undefined, json);
+  });
+}
+
+export function fileExistsAsync(
+  path2: string,
+  callback2: (err?: Error, exists?: boolean) => void
+): void {
+  fs.stat(path2, (err: Error, stats: fs.Stats) => {
+    if (err) {
+      // If error assume file does not exist
+      return callback2(undefined, false);
+    }
+    callback2(undefined, stats ? stats.isFile() : false);
+  });
+}
+
+export function removeExtension(path: string): string {
+  return path.substring(0, path.lastIndexOf(".")) || path;
+}
Index: frontend/node_modules/tsconfig-paths/src/index.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/index.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/index.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,24 @@
+// register is used from register.js in root dir
+export {
+  createMatchPath,
+  matchFromAbsolutePaths,
+  MatchPath,
+} from "./match-path-sync";
+export {
+  createMatchPathAsync,
+  matchFromAbsolutePathsAsync,
+  MatchPathAsync,
+} from "./match-path-async";
+export { register } from "./register";
+export {
+  loadConfig,
+  ConfigLoaderResult,
+  ConfigLoaderSuccessResult,
+  ConfigLoaderFailResult,
+} from "./config-loader";
+export {
+  ReadJsonSync,
+  ReadJsonAsync,
+  FileExistsSync,
+  FileExistsAsync,
+} from "./filesystem";
Index: frontend/node_modules/tsconfig-paths/src/mapping-entry.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/mapping-entry.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/mapping-entry.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,64 @@
+import * as path from "path";
+
+export interface MappingEntry {
+  readonly pattern: string;
+  readonly paths: ReadonlyArray<string>;
+}
+
+export interface Paths {
+  readonly [key: string]: ReadonlyArray<string>;
+}
+
+/**
+ * Converts an absolute baseUrl and paths to an array of absolute mapping entries.
+ * The array is sorted by longest prefix.
+ * Having an array with entries allows us to keep a sorting order rather than
+ * sort by keys each time we use the mappings.
+ * @param absoluteBaseUrl
+ * @param paths
+ * @param addMatchAll
+ */
+export function getAbsoluteMappingEntries(
+  absoluteBaseUrl: string,
+  paths: Paths,
+  addMatchAll: boolean
+): ReadonlyArray<MappingEntry> {
+  // Resolve all paths to absolute form once here, and sort them by
+  // longest prefix once here, this saves time on each request later.
+  // We need to put them in an array to preserve the sorting order.
+  const sortedKeys = sortByLongestPrefix(Object.keys(paths));
+  const absolutePaths: Array<MappingEntry> = [];
+  for (const key of sortedKeys) {
+    absolutePaths.push({
+      pattern: key,
+      paths: paths[key].map((pathToResolve) =>
+        path.join(absoluteBaseUrl, pathToResolve)
+      ),
+    });
+  }
+  // If there is no match-all path specified in the paths section of tsconfig, then try to match
+  // all paths relative to baseUrl, this is how typescript works.
+  if (!paths["*"] && addMatchAll) {
+    absolutePaths.push({
+      pattern: "*",
+      paths: [`${absoluteBaseUrl.replace(/\/$/, "")}/*`],
+    });
+  }
+
+  return absolutePaths;
+}
+
+/**
+ * Sort path patterns.
+ * If a module name can be matched with multiple patterns then pattern with the longest prefix will be picked.
+ */
+function sortByLongestPrefix(arr: Array<string>): Array<string> {
+  return arr
+    .concat()
+    .sort((a: string, b: string) => getPrefixLength(b) - getPrefixLength(a));
+}
+
+function getPrefixLength(pattern: string): number {
+  const prefixLength = pattern.indexOf("*");
+  return pattern.substr(0, prefixLength).length;
+}
Index: frontend/node_modules/tsconfig-paths/src/match-path-async.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/match-path-async.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/match-path-async.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,218 @@
+import * as path from "path";
+import * as TryPath from "./try-path";
+import * as MappingEntry from "./mapping-entry";
+import * as Filesystem from "./filesystem";
+
+/**
+ * Function that can match a path async
+ */
+export interface MatchPathAsync {
+  (
+    requestedModule: string,
+    readJson: Filesystem.ReadJsonAsync | undefined,
+    fileExists: Filesystem.FileExistsAsync | undefined,
+    extensions: ReadonlyArray<string> | undefined,
+    callback: MatchPathAsyncCallback
+  ): void;
+}
+
+export interface MatchPathAsyncCallback {
+  (err?: Error, path?: string): void;
+}
+
+/**
+ * See the sync version for docs.
+ */
+export function createMatchPathAsync(
+  absoluteBaseUrl: string,
+  paths: { [key: string]: Array<string> },
+  mainFields: string[] = ["main"],
+  addMatchAll: boolean = true
+): MatchPathAsync {
+  const absolutePaths = MappingEntry.getAbsoluteMappingEntries(
+    absoluteBaseUrl,
+    paths,
+    addMatchAll
+  );
+
+  return (
+    requestedModule: string,
+    readJson: Filesystem.ReadJsonAsync | undefined,
+    fileExists: Filesystem.FileExistsAsync | undefined,
+    extensions: ReadonlyArray<string> | undefined,
+    callback: MatchPathAsyncCallback
+  ) =>
+    matchFromAbsolutePathsAsync(
+      absolutePaths,
+      requestedModule,
+      readJson,
+      fileExists,
+      extensions,
+      callback,
+      mainFields
+    );
+}
+
+/**
+ * See the sync version for docs.
+ */
+export function matchFromAbsolutePathsAsync(
+  absolutePathMappings: ReadonlyArray<MappingEntry.MappingEntry>,
+  requestedModule: string,
+  readJson: Filesystem.ReadJsonAsync = Filesystem.readJsonFromDiskAsync,
+  fileExists: Filesystem.FileExistsAsync = Filesystem.fileExistsAsync,
+  extensions: ReadonlyArray<string> = Object.keys(require.extensions),
+  callback: MatchPathAsyncCallback,
+  mainFields: string[] = ["main"]
+): void {
+  const tryPaths = TryPath.getPathsToTry(
+    extensions,
+    absolutePathMappings,
+    requestedModule
+  );
+
+  if (!tryPaths) {
+    return callback();
+  }
+
+  findFirstExistingPath(
+    tryPaths,
+    readJson,
+    fileExists,
+    callback,
+    0,
+    mainFields
+  );
+}
+
+function findFirstExistingMainFieldMappedFile(
+  packageJson: Filesystem.PackageJson,
+  mainFields: string[],
+  packageJsonPath: string,
+  fileExistsAsync: Filesystem.FileExistsAsync,
+  doneCallback: (err?: Error, filepath?: string) => void,
+  index: number = 0
+): void {
+  if (index >= mainFields.length) {
+    return doneCallback(undefined, undefined);
+  }
+
+  const tryNext = () =>
+    findFirstExistingMainFieldMappedFile(
+      packageJson,
+      mainFields,
+      packageJsonPath,
+      fileExistsAsync,
+      doneCallback,
+      index + 1
+    );
+
+  const mainFieldMapping = packageJson[mainFields[index]];
+  if (typeof mainFieldMapping !== "string") {
+    // Skip mappings that are not pointers to replacement files
+    return tryNext();
+  }
+
+  const mappedFilePath = path.join(
+    path.dirname(packageJsonPath),
+    mainFieldMapping
+  );
+  fileExistsAsync(mappedFilePath, (err?: Error, exists?: boolean) => {
+    if (err) {
+      return doneCallback(err);
+    }
+    if (exists) {
+      return doneCallback(undefined, mappedFilePath);
+    }
+    return tryNext();
+  });
+}
+
+// Recursive loop to probe for physical files
+function findFirstExistingPath(
+  tryPaths: ReadonlyArray<TryPath.TryPath>,
+  readJson: Filesystem.ReadJsonAsync,
+  fileExists: Filesystem.FileExistsAsync,
+  doneCallback: MatchPathAsyncCallback,
+  index: number = 0,
+  mainFields: string[] = ["main"]
+): void {
+  const tryPath = tryPaths[index];
+  if (
+    tryPath.type === "file" ||
+    tryPath.type === "extension" ||
+    tryPath.type === "index"
+  ) {
+    fileExists(tryPath.path, (err: Error, exists: boolean) => {
+      if (err) {
+        return doneCallback(err);
+      }
+      if (exists) {
+        return doneCallback(undefined, TryPath.getStrippedPath(tryPath));
+      }
+      if (index === tryPaths.length - 1) {
+        return doneCallback();
+      }
+      // Continue with the next path
+      return findFirstExistingPath(
+        tryPaths,
+        readJson,
+        fileExists,
+        doneCallback,
+        index + 1,
+        mainFields
+      );
+    });
+  } else if (tryPath.type === "package") {
+    readJson(tryPath.path, (err, packageJson) => {
+      if (err) {
+        return doneCallback(err);
+      }
+      if (packageJson) {
+        return findFirstExistingMainFieldMappedFile(
+          packageJson,
+          mainFields,
+          tryPath.path,
+          fileExists,
+          (mainFieldErr?: Error, mainFieldMappedFile?: string) => {
+            if (mainFieldErr) {
+              return doneCallback(mainFieldErr);
+            }
+            if (mainFieldMappedFile) {
+              return doneCallback(undefined, mainFieldMappedFile);
+            }
+
+            // No field in package json was a valid option. Continue with the next path.
+            return findFirstExistingPath(
+              tryPaths,
+              readJson,
+              fileExists,
+              doneCallback,
+              index + 1,
+              mainFields
+            );
+          }
+        );
+      }
+
+      // This is async code, we need to return unconditionally, otherwise the code still falls
+      // through and keeps recursing. While this might work in general, libraries that use neo-async
+      // like Webpack will actually not allow you to call the same callback twice.
+      //
+      // An example of where this caused issues:
+      // https://github.com/dividab/tsconfig-paths-webpack-plugin/issues/11
+      //
+      // Continue with the next path
+      return findFirstExistingPath(
+        tryPaths,
+        readJson,
+        fileExists,
+        doneCallback,
+        index + 1,
+        mainFields
+      );
+    });
+  } else {
+    TryPath.exhaustiveTypeException(tryPath.type);
+  }
+}
Index: frontend/node_modules/tsconfig-paths/src/match-path-sync.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/match-path-sync.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/match-path-sync.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,141 @@
+import * as path from "path";
+import * as Filesystem from "./filesystem";
+import * as MappingEntry from "./mapping-entry";
+import * as TryPath from "./try-path";
+
+/**
+ * Function that can match a path
+ */
+export interface MatchPath {
+  (
+    requestedModule: string,
+    readJson?: Filesystem.ReadJsonSync,
+    fileExists?: (name: string) => boolean,
+    extensions?: ReadonlyArray<string>
+  ): string | undefined;
+}
+
+/**
+ * Creates a function that can resolve paths according to tsconfig paths property.
+ * @param absoluteBaseUrl Absolute version of baseUrl as specified in tsconfig.
+ * @param paths The paths as specified in tsconfig.
+ * @param mainFields A list of package.json field names to try when resolving module files.
+ * @param addMatchAll Add a match-all "*" rule if none is present
+ * @returns a function that can resolve paths.
+ */
+export function createMatchPath(
+  absoluteBaseUrl: string,
+  paths: { [key: string]: Array<string> },
+  mainFields: string[] = ["main"],
+  addMatchAll: boolean = true
+): MatchPath {
+  const absolutePaths = MappingEntry.getAbsoluteMappingEntries(
+    absoluteBaseUrl,
+    paths,
+    addMatchAll
+  );
+
+  return (
+    requestedModule: string,
+    readJson?: Filesystem.ReadJsonSync,
+    fileExists?: Filesystem.FileExistsSync,
+    extensions?: Array<string>
+  ) =>
+    matchFromAbsolutePaths(
+      absolutePaths,
+      requestedModule,
+      readJson,
+      fileExists,
+      extensions,
+      mainFields
+    );
+}
+
+/**
+ * Finds a path from tsconfig that matches a module load request.
+ * @param absolutePathMappings The paths to try as specified in tsconfig but resolved to absolute form.
+ * @param requestedModule The required module name.
+ * @param readJson Function that can read json from a path (useful for testing).
+ * @param fileExists Function that checks for existence of a file at a path (useful for testing).
+ * @param extensions File extensions to probe for (useful for testing).
+ * @param mainFields A list of package.json field names to try when resolving module files.
+ * @returns the found path, or undefined if no path was found.
+ */
+export function matchFromAbsolutePaths(
+  absolutePathMappings: ReadonlyArray<MappingEntry.MappingEntry>,
+  requestedModule: string,
+  readJson: Filesystem.ReadJsonSync = Filesystem.readJsonFromDiskSync,
+  fileExists: Filesystem.FileExistsSync = Filesystem.fileExistsSync,
+  extensions: Array<string> = Object.keys(require.extensions),
+  mainFields: string[] = ["main"]
+): string | undefined {
+  const tryPaths = TryPath.getPathsToTry(
+    extensions,
+    absolutePathMappings,
+    requestedModule
+  );
+
+  if (!tryPaths) {
+    return undefined;
+  }
+
+  return findFirstExistingPath(tryPaths, readJson, fileExists, mainFields);
+}
+
+function findFirstExistingMainFieldMappedFile(
+  packageJson: Filesystem.PackageJson,
+  mainFields: string[],
+  packageJsonPath: string,
+  fileExists: Filesystem.FileExistsSync
+): string | undefined {
+  for (let index = 0; index < mainFields.length; index++) {
+    const mainFieldName = mainFields[index];
+    const candidateMapping = packageJson[mainFieldName];
+    if (candidateMapping && typeof candidateMapping === "string") {
+      const candidateFilePath = path.join(
+        path.dirname(packageJsonPath),
+        candidateMapping
+      );
+      if (fileExists(candidateFilePath)) {
+        return candidateFilePath;
+      }
+    }
+  }
+
+  return undefined;
+}
+
+function findFirstExistingPath(
+  tryPaths: ReadonlyArray<TryPath.TryPath>,
+  readJson: Filesystem.ReadJsonSync = Filesystem.readJsonFromDiskSync,
+  fileExists: Filesystem.FileExistsSync,
+  mainFields: string[] = ["main"]
+): string | undefined {
+  for (const tryPath of tryPaths) {
+    if (
+      tryPath.type === "file" ||
+      tryPath.type === "extension" ||
+      tryPath.type === "index"
+    ) {
+      if (fileExists(tryPath.path)) {
+        return TryPath.getStrippedPath(tryPath);
+      }
+    } else if (tryPath.type === "package") {
+      const packageJson: Filesystem.PackageJson = readJson(tryPath.path);
+      if (packageJson) {
+        const mainFieldMappedFile = findFirstExistingMainFieldMappedFile(
+          packageJson,
+          mainFields,
+          tryPath.path,
+          fileExists
+        );
+        if (mainFieldMappedFile) {
+          return mainFieldMappedFile;
+        }
+      }
+    } else {
+      TryPath.exhaustiveTypeException(tryPath.type);
+    }
+  }
+  return undefined;
+}
Index: frontend/node_modules/tsconfig-paths/src/options.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/options.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/options.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,18 @@
+import * as minimist from "minimist";
+
+const argv = minimist(process.argv.slice(2), {
+  string: ["project"],
+  alias: {
+    project: ["P"],
+  },
+});
+
+const project = argv && argv.project;
+
+export interface Options {
+  cwd: string;
+}
+
+export const options: Options = {
+  cwd: project || process.cwd(),
+};
Index: frontend/node_modules/tsconfig-paths/src/register.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/register.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/register.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,97 @@
+import { createMatchPath } from "./match-path-sync";
+import { configLoader, ExplicitParams } from "./config-loader";
+import { options } from "./options";
+
+const noOp = (): void => void 0;
+
+function getCoreModules(
+  builtinModules: string[] | undefined
+): { [key: string]: boolean } {
+  builtinModules = builtinModules || [
+    "assert",
+    "buffer",
+    "child_process",
+    "cluster",
+    "crypto",
+    "dgram",
+    "dns",
+    "domain",
+    "events",
+    "fs",
+    "http",
+    "https",
+    "net",
+    "os",
+    "path",
+    "punycode",
+    "querystring",
+    "readline",
+    "stream",
+    "string_decoder",
+    "tls",
+    "tty",
+    "url",
+    "util",
+    "v8",
+    "vm",
+    "zlib",
+  ];
+
+  const coreModules: { [key: string]: boolean } = {};
+  for (let module of builtinModules) {
+    coreModules[module] = true;
+  }
+
+  return coreModules;
+}
+
+/**
+ * Installs a custom module load function that can adhere to paths in tsconfig.
+ * Returns a function to undo paths registration.
+ */
+export function register(explicitParams: ExplicitParams): () => void {
+  const configLoaderResult = configLoader({
+    cwd: options.cwd,
+    explicitParams,
+  });
+
+  if (configLoaderResult.resultType === "failed") {
+    console.warn(
+      `${configLoaderResult.message}. tsconfig-paths will be skipped`
+    );
+
+    return noOp;
+  }
+
+  const matchPath = createMatchPath(
+    configLoaderResult.absoluteBaseUrl,
+    configLoaderResult.paths,
+    configLoaderResult.mainFields,
+    configLoaderResult.addMatchAll
+  );
+
+  // Patch node's module loading
+  // tslint:disable-next-line:no-require-imports variable-name
+  const Module = require("module");
+  const originalResolveFilename = Module._resolveFilename;
+  const coreModules = getCoreModules(Module.builtinModules);
+  // tslint:disable-next-line:no-any
+  Module._resolveFilename = function (request: string, _parent: any): string {
+    const isCoreModule = coreModules.hasOwnProperty(request);
+    if (!isCoreModule) {
+      const found = matchPath(request);
+      if (found) {
+        const modifiedArguments = [found, ...[].slice.call(arguments, 1)]; // Passes all arguments. Even those that is not specified above.
+        // tslint:disable-next-line:no-invalid-this
+        return originalResolveFilename.apply(this, modifiedArguments);
+      }
+    }
+    // tslint:disable-next-line:no-invalid-this
+    return originalResolveFilename.apply(this, arguments);
+  };
+
+  return () => {
+    // Return node's module loading to original state.
+    Module._resolveFilename = originalResolveFilename;
+  };
+}
Index: frontend/node_modules/tsconfig-paths/src/try-path.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/try-path.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/try-path.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,102 @@
+import * as path from "path";
+import { MappingEntry } from "./mapping-entry";
+import { dirname } from "path";
+import { removeExtension } from "./filesystem";
+
+export interface TryPath {
+  readonly type: "file" | "extension" | "index" | "package";
+  readonly path: string;
+}
+
+/**
+ * Builds a list of all physical paths to try by:
+ * 1. Check for file named exactly as request.
+ * 2. Check for files named as request ending in any of the extensions.
+ * 3. Check for file specified in package.json's main property.
+ * 4. Check for files named as request ending in "index" with any of the extensions.
+ */
+export function getPathsToTry(
+  extensions: ReadonlyArray<string>,
+  absolutePathMappings: ReadonlyArray<MappingEntry>,
+  requestedModule: string
+): ReadonlyArray<TryPath> | undefined {
+  if (!absolutePathMappings || !requestedModule || requestedModule[0] === ".") {
+    return undefined;
+  }
+
+  const pathsToTry: Array<TryPath> = [];
+  for (const entry of absolutePathMappings) {
+    const starMatch =
+      entry.pattern === requestedModule
+        ? ""
+        : matchStar(entry.pattern, requestedModule);
+    if (starMatch !== undefined) {
+      for (const physicalPathPattern of entry.paths) {
+        const physicalPath = physicalPathPattern.replace("*", starMatch);
+        pathsToTry.push({ type: "file", path: physicalPath });
+        pathsToTry.push(
+          ...extensions.map(
+            (e) => ({ type: "extension", path: physicalPath + e } as TryPath)
+          )
+        );
+        pathsToTry.push({
+          type: "package",
+          path: path.join(physicalPath, "/package.json"),
+        });
+        const indexPath = path.join(physicalPath, "/index");
+        pathsToTry.push(
+          ...extensions.map(
+            (e) => ({ type: "index", path: indexPath + e } as TryPath)
+          )
+        );
+      }
+    }
+  }
+  return pathsToTry.length === 0 ? undefined : pathsToTry;
+}
+
+// Not sure why we don't just return the full found path?
+export function getStrippedPath(tryPath: TryPath): string {
+  return tryPath.type === "index"
+    ? dirname(tryPath.path)
+    : tryPath.type === "file"
+    ? tryPath.path
+    : tryPath.type === "extension"
+    ? removeExtension(tryPath.path)
+    : tryPath.type === "package"
+    ? tryPath.path
+    : exhaustiveTypeException(tryPath.type);
+}
+
+export function exhaustiveTypeException(check: never): never {
+  throw new Error(`Unknown type ${check}`);
+}
+
+/**
+ * Matches pattern with a single star against search.
+ * Star must match at least one character to be considered a match.
+ * @param patttern for example "foo*"
+ * @param search for example "fooawesomebar"
+ * @returns the part of search that * matches, or undefined if no match.
+ */
+function matchStar(pattern: string, search: string): string | undefined {
+  if (search.length < pattern.length) {
+    return undefined;
+  }
+  if (pattern === "*") {
+    return search;
+  }
+  const star = pattern.indexOf("*");
+  if (star === -1) {
+    return undefined;
+  }
+  const part1 = pattern.substring(0, star);
+  const part2 = pattern.substring(star + 1);
+  if (search.substr(0, star) !== part1) {
+    return undefined;
+  }
+  if (search.substr(search.length - part2.length) !== part2) {
+    return undefined;
+  }
+  return search.substr(star, search.length - part2.length);
+}
Index: frontend/node_modules/tsconfig-paths/src/tsconfig-loader.ts
===================================================================
--- frontend/node_modules/tsconfig-paths/src/tsconfig-loader.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
+++ frontend/node_modules/tsconfig-paths/src/tsconfig-loader.ts	(revision 9af201e94b5a79beb92a30858fc54de4bc3b9449)
@@ -0,0 +1,226 @@
+import * as path from "path";
+import * as fs from "fs";
+// tslint:disable:no-require-imports
+import JSON5 = require("json5");
+import StripBom = require("strip-bom");
+// tslint:enable:no-require-imports
+
+/**
+ * Typing for the parts of tsconfig that we care about
+ */
+export interface Tsconfig {
+  extends?: string | string[];
+  compilerOptions?: {
+    baseUrl?: string;
+    paths?: { [key: string]: Array<string> };
+    strict?: boolean;
+  };
+}
+
+export interface TsConfigLoaderResult {
+  tsConfigPath: string | undefined;
+  baseUrl: string | undefined;
+  paths: { [key: string]: Array<string> } | undefined;
+}
+
+export interface TsConfigLoaderParams {
+  getEnv: (key: string) => string | undefined;
+  cwd: string;
+  loadSync?(
+    cwd: string,
+    filename?: string,
+    baseUrl?: string
+  ): TsConfigLoaderResult;
+}
+
+export function tsConfigLoader({
+  getEnv,
+  cwd,
+  loadSync = loadSyncDefault,
+}: TsConfigLoaderParams): TsConfigLoaderResult {
+  const TS_NODE_PROJECT = getEnv("TS_NODE_PROJECT");
+  const TS_NODE_BASEURL = getEnv("TS_NODE_BASEURL");
+
+  // tsconfig.loadSync handles if TS_NODE_PROJECT is a file or directory
+  // and also overrides baseURL if TS_NODE_BASEURL is available.
+  const loadResult = loadSync(cwd, TS_NODE_PROJECT, TS_NODE_BASEURL);
+  return loadResult;
+}
+
+function loadSyncDefault(
+  cwd: string,
+  filename?: string,
+  baseUrl?: string
+): TsConfigLoaderResult {
+  // Tsconfig.loadSync uses path.resolve. This is why we can use an absolute path as filename
+
+  const configPath = resolveConfigPath(cwd, filename);
+
+  if (!configPath) {
+    return {
+      tsConfigPath: undefined,
+      baseUrl: undefined,
+      paths: undefined,
+    };
+  }
+  const config = loadTsconfig(configPath);
+
+  return {
+    tsConfigPath: configPath,
+    baseUrl:
+      baseUrl ||
+      (config && config.compilerOptions && config.compilerOptions.baseUrl),
+    paths: config && config.compilerOptions && config.compilerOptions.paths,
+  };
+}
+
+function resolveConfigPath(cwd: string, filename?: string): string | undefined {
+  if (filename) {
+    const absolutePath = fs.lstatSync(filename).isDirectory()
+      ? path.resolve(filename, "./tsconfig.json")
+      : path.resolve(cwd, filename);
+
+    return absolutePath;
+  }
+
+  if (fs.statSync(cwd).isFile()) {
+    return path.resolve(cwd);
+  }
+
+  const configAbsolutePath = walkForTsConfig(cwd);
+  return configAbsolutePath ? path.resolve(configAbsolutePath) : undefined;
+}
+
+export function walkForTsConfig(
+  directory: string,
+  existsSync: (path: string) => boolean = fs.existsSync
+): string | undefined {
+  const configPath = path.join(directory, "./tsconfig.json");
+  if (existsSync(configPath)) {
+    return configPath;
+  }
+
+  const parentDirectory = path.join(directory, "../");
+
+  // If we reached the top
+  if (directory === parentDirectory) {
+    return undefined;
+  }
+
+  return walkForTsConfig(parentDirectory, existsSync);
+}
+
+export function loadTsconfig(
+  configFilePath: string,
+  existsSync: (path: string) => boolean = fs.existsSync,
+  readFileSync: (filename: string) => string = (filename: string) =>
+    fs.readFileSync(filename, "utf8")
+): Tsconfig | undefined {
+  if (!existsSync(configFilePath)) {
+    return undefined;
+  }
+
+  const configString = readFileSync(configFilePath);
+  const cleanedJson = StripBom(configString);
+  let config: Tsconfig;
+  try {
+    config = JSON5.parse(cleanedJson);
+  } catch (e) {
+    throw new Error(`${configFilePath} is malformed ${e.message}`);
+  }
+
+  let extendedConfig = config.extends;
+  if (extendedConfig) {
+    let base: Tsconfig;
+
+    if (Array.isArray(extendedConfig)) {
+      base = extendedConfig.reduce(
+        (currBase, extendedConfigElement) =>
+          mergeTsconfigs(
+            currBase,
+            loadTsconfigFromExtends(
+              configFilePath,
+              extendedConfigElement,
+              existsSync,
+              readFileSync
+            )
+          ),
+        {}
+      );
+    } else {
+      base = loadTsconfigFromExtends(
+        configFilePath,
+        extendedConfig,
+        existsSync,
+        readFileSync
+      );
+    }
+
+    return mergeTsconfigs(base, config);
+  }
+  return config;
+}
+
+/**
+ * Intended to be called only from loadTsconfig.
+ * Parameters don't have defaults because they should use the same as loadTsconfig.
+ */
+function loadTsconfigFromExtends(
+  configFilePath: string,
+  extendedConfigValue: string,
+  // eslint-disable-next-line no-shadow
+  existsSync: (path: string) => boolean,
+  readFileSync: (filename: string) => string
+): Tsconfig {
+  if (
+    typeof extendedConfigValue === "string" &&
+    extendedConfigValue.indexOf(".json") === -1
+  ) {
+    extendedConfigValue += ".json";
+  }
+  const currentDir = path.dirname(configFilePath);
+  let extendedConfigPath = path.join(currentDir, extendedConfigValue);
+  if (
+    extendedConfigValue.indexOf("/") !== -1 &&
+    extendedConfigValue.indexOf(".") !== -1 &&
+    !existsSync(extendedConfigPath)
+  ) {
+    extendedConfigPath = path.join(
+      currentDir,
+      "node_modules",
+      extendedConfigValue
+    );
+  }
+
+  const config =
+    loadTsconfig(extendedConfigPath, existsSync, readFileSync) || {};
+
+  // baseUrl should be interpreted as relative to extendedConfigPath,
+  // but we need to update it so it is relative to the original tsconfig being loaded
+  if (config.compilerOptions?.baseUrl) {
+    const extendsDir = path.dirname(extendedConfigValue);
+    config.compilerOptions.baseUrl = path.join(
+      extendsDir,
+      config.compilerOptions.baseUrl
+    );
+  }
+
+  return config;
+}
+
+function mergeTsconfigs(
+  base: Tsconfig | undefined,
+  config: Tsconfig | undefined
+): Tsconfig {
+  base = base || {};
+  config = config || {};
+
+  return {
+    ...base,
+    ...config,
+    compilerOptions: {
+      ...base.compilerOptions,
+      ...config.compilerOptions,
+    },
+  };
+}
