diff --git a/.gitignore b/.gitignore
index 737d872..a9ae364 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
+.env
+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
diff --git a/components/home/Home.tsx b/components/home/Home.tsx
index 3a0879d..1b89492 100644
--- a/components/home/Home.tsx
+++ b/components/home/Home.tsx
@@ -15,6 +15,7 @@ export const Home: FC = () => {
groups,
addGroup,
doNotSuggest,
+ baseFactories,
ignoredFactories,
setIgnoredFactories,
store,
@@ -40,6 +41,15 @@ export const Home: FC = () => {
+
{
const stream = evt.currentTarget.files?.[0].stream() as globalThis.ReadableStream|undefined
if (stream) {
diff --git a/next.config.js b/next.config.js
index e674786..5198568 100644
--- a/next.config.js
+++ b/next.config.js
@@ -1,7 +1,16 @@
+const envVar = require('env-var')
+
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
- swcMinify: true
+ swcMinify: true,
+ /** @type {import('next/config').ServerRuntimeConfig} */
+ serverRuntimeConfig: {
+ MONGO_URL: envVar.get('MONGO_URL').required().asUrlString(),
+ MONGO_DB: envVar.get('MONGO_DB').required().asString(),
+ MONGO_USER: envVar.get('MONGO_USER').required().asString(),
+ MONGO_PASS: envVar.get('MONGO_PASS').required().asString()
+ }
}
module.exports = nextConfig
diff --git a/package.json b/package.json
index b9d7fa1..d8dbb11 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,8 @@
"dependencies": {
"classnames": "^2.3.1",
"deepcopy": "^2.1.0",
+ "env-var": "^7.1.1",
+ "mongodb": "^4.8.1",
"next": "12.2.4",
"pako": "^2.0.4",
"react": "18.2.0",
diff --git a/pages/api/submit.ts b/pages/api/submit.ts
new file mode 100644
index 0000000..c20affa
--- /dev/null
+++ b/pages/api/submit.ts
@@ -0,0 +1,13 @@
+import {NextApiHandler} from "next";
+import {Dict, Group} from "../../src/types";
+import {setGroups} from "../../src/database/groups";
+
+const handler: NextApiHandler = async (req, res) => {
+ if (req.method !== 'POST') throw new Error('Invalid method')
+ const {groups, ignored, base} = req.body as {groups: Dict, ignored: string[], base: string[]}
+ const uuid = await setGroups(groups, ignored, base)
+ console.log(uuid)
+ res.json({ uuid })
+}
+
+export default handler
diff --git a/src/database/groups.ts b/src/database/groups.ts
new file mode 100644
index 0000000..58ba0cd
--- /dev/null
+++ b/src/database/groups.ts
@@ -0,0 +1,19 @@
+import {database} from "./start";
+import {Dict, Group} from "../types";
+import crypto from "crypto"
+
+export async function setGroups(groups: Dict, ignored: string[], base: string[]) {
+ const collection = (await database.resolve())?.collection('setups')
+ if (!collection) return
+ await collection.deleteMany({}).catch(e => {
+ if (e.message !== 'ns not found') throw e
+ })
+ const result = await collection.insertOne({
+ groups,
+ ignored,
+ base,
+ createdOn: new Date(),
+ modifiedOn: new Date()
+ })
+ return result.insertedId.toString()
+}
diff --git a/src/database/start.ts b/src/database/start.ts
new file mode 100644
index 0000000..5f3efb6
--- /dev/null
+++ b/src/database/start.ts
@@ -0,0 +1,20 @@
+import {Db, MongoClient} from 'mongodb'
+import getConfig from 'next/config'
+import {Resolvable} from "../utils/Resolvable";
+
+const { serverRuntimeConfig: {
+ MONGO_URL,
+ MONGO_USER,
+ MONGO_PASS,
+ MONGO_DB
+} } = getConfig()
+
+async function getDatabase(): Promise {
+ const url = `mongodb://${MONGO_USER ? `${MONGO_USER}:${MONGO_PASS ?? ''}@` : ''}${MONGO_URL}`;
+ const client = new MongoClient(url);
+ await client.connect();
+ console.log('Connected successfully to server')
+ return client.db(MONGO_DB)
+}
+
+export const database = new Resolvable(getDatabase)
diff --git a/src/next-types.d.ts b/src/next-types.d.ts
new file mode 100644
index 0000000..a654342
--- /dev/null
+++ b/src/next-types.d.ts
@@ -0,0 +1,22 @@
+
+
+
+
+declare module 'next/config' {
+ export interface ServerRuntimeConfig {
+ MONGO_URL: string
+ MONGO_DB: string
+ MONGO_USER?: string
+ MONGO_PASS?: string
+ }
+
+ export interface PublicRuntimeConfig {
+ }
+
+ const getConfig: () => {
+ serverRuntimeConfig: ServerRuntimeConfig,
+ publicRuntimeConfig: PublicRuntimeConfig
+ }
+ //export const serConfig = () =>
+ export default getConfig
+}
diff --git a/src/utils/Resolvable.ts b/src/utils/Resolvable.ts
new file mode 100644
index 0000000..1dd26c1
--- /dev/null
+++ b/src/utils/Resolvable.ts
@@ -0,0 +1,97 @@
+// eslint-disable-next-line no-shadow
+enum ResolvableState {
+ WAITING,
+ PENDING,
+ ERROR,
+ DONE
+}
+
+class FetchOnce {
+ protected data: T | undefined
+ protected error: unknown | undefined
+ protected state: ResolvableState = ResolvableState.WAITING
+ protected pendingList: [(res: Promise | T) => void, (reason: unknown) => void][] = []
+
+ constructor(protected fetchMethod?: () => Promise) {}
+
+ public reset(): void {
+ this.data = undefined
+ this.error = undefined
+ this.state = ResolvableState.WAITING
+ }
+
+ public resolve(): Promise {
+ return new Promise((resolve, reject) => {
+ switch (this.state) {
+ case ResolvableState.WAITING:
+ this.state = ResolvableState.PENDING
+ this.pendingList.push([resolve, reject])
+ if (this.fetchMethod) this.parsePromise(this.fetchMethod())
+ break
+ case ResolvableState.PENDING:
+ this.pendingList.push([resolve, reject])
+ break
+ case ResolvableState.DONE:
+ resolve(this.data!)
+ break
+ case ResolvableState.ERROR:
+ reject(this.error)
+ break
+ }
+ })
+ }
+
+ protected isFinished(): boolean {
+ return this.state === ResolvableState.DONE || this.state === ResolvableState.ERROR
+ }
+
+ protected parsePromise(promise: Promise): void {
+ promise
+ .then(data => {
+ this.data = data
+ this.state = ResolvableState.DONE
+ this.pendingList.forEach(pending => pending[0](data))
+ })
+ .catch(err => {
+ this.error = err
+ this.state = ResolvableState.ERROR
+ this.pendingList.forEach(pending => pending[1](err))
+ })
+ }
+}
+
+export class Resolvable> extends FetchOnce {
+ // eslint-disable-next-line @typescript-eslint/no-useless-constructor
+ constructor(fetchMethod: (...args: U) => Promise) {
+ super(fetchMethod)
+ }
+}
+
+export class WaitForSync extends FetchOnce {
+ protected state: ResolvableState = ResolvableState.PENDING
+
+ constructor() {
+ super(undefined)
+ }
+
+ public setData(data: T): void {
+ if (!this.isFinished()) {
+ this.parsePromise((async () => data)())
+ }
+ }
+
+ public setError(error: unknown): void {
+ if (!this.isFinished()) {
+ this.parsePromise(
+ (async () => {
+ throw error
+ })()
+ )
+ }
+ }
+
+ public reset(): void {
+ super.reset()
+ this.state = ResolvableState.PENDING
+ }
+}
diff --git a/yarn.lock b/yarn.lock
index e0304f4..cb766da 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -303,6 +303,11 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+"@types/node@*":
+ version "18.7.6"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.6.tgz#31743bc5772b6ac223845e18c3fc26f042713c83"
+ integrity sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A==
+
"@types/node@18.6.4":
version "18.6.4"
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.4.tgz#fd26723a8a3f8f46729812a7f9b4fc2d1608ed39"
@@ -356,6 +361,19 @@
resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.2.tgz#7f30db28221067a90b02e73ffd46b6685b18df1a"
integrity sha512-YPLqEOo0/X8JU3rdiq+RgUKtQhQtrppE766y7vMTu8dGML7TVtZNiiiaC/hhU9Zqw9UYopXxhuWWENclMVBwKQ==
+"@types/webidl-conversions@*":
+ version "6.1.1"
+ resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz#e33bc8ea812a01f63f90481c666334844b12a09e"
+ integrity sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==
+
+"@types/whatwg-url@^8.2.1":
+ version "8.2.2"
+ resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63"
+ integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==
+ dependencies:
+ "@types/node" "*"
+ "@types/webidl-conversions" "*"
+
"@typescript-eslint/parser@^5.21.0":
version "5.33.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.33.0.tgz#26ec3235b74f0667414613727cb98f9b69dc5383"
@@ -517,6 +535,11 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -532,6 +555,21 @@ braces@^3.0.2:
dependencies:
fill-range "^7.0.1"
+bson@^4.6.5:
+ version "4.6.5"
+ resolved "https://registry.yarnpkg.com/bson/-/bson-4.6.5.tgz#1a410148c20eef4e40d484878a037a7036e840fb"
+ integrity sha512-uqrgcjyOaZsHfz7ea8zLRCLe1u+QGUSzMZmvXqO24CDW7DWoW1qiN9folSwa7hSneTSgM2ykDIzF5kcQQ8cwNw==
+ dependencies:
+ buffer "^5.6.0"
+
+buffer@^5.6.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
@@ -689,6 +727,11 @@ define-properties@^1.1.3, define-properties@^1.1.4:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
+denque@^2.0.1:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
+ integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==
+
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@@ -728,6 +771,11 @@ emoji-regex@^9.2.2:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+env-var@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/env-var/-/env-var-7.1.1.tgz#c1697f8dfded0b54418dc9bbd78a82119910e57c"
+ integrity sha512-4+vvlq+wwGQNwY/nI3/+Ojc1MKHCmITRJ6VWkQzDtMD6fAEb60ACRUCnlIAonMKW9YzqYmYxbyVu9vTb++yNRg==
+
error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@@ -1235,6 +1283,11 @@ hoist-non-react-statics@^3.3.1:
dependencies:
react-is "^16.7.0"
+ieee754@^1.1.13:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
ignore@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
@@ -1275,6 +1328,11 @@ internal-slot@^1.0.3:
has "^1.0.3"
side-channel "^1.0.4"
+ip@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
+ integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
+
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
@@ -1490,6 +1548,11 @@ memoize-one@^5.0.0:
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==
+memory-pager@^1.0.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5"
+ integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==
+
merge2@^1.3.0, merge2@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
@@ -1515,6 +1578,26 @@ minimist@^1.2.0, minimist@^1.2.6:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
+mongodb-connection-string-url@^2.5.2:
+ version "2.5.3"
+ resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.3.tgz#c0c572b71570e58be2bd52b33dffd1330cfb6990"
+ integrity sha512-f+/WsED+xF4B74l3k9V/XkTVj5/fxFH2o5ToKXd8Iyi5UhM+sO9u0Ape17Mvl/GkZaFtM0HQnzAG5OTmhKw+tQ==
+ dependencies:
+ "@types/whatwg-url" "^8.2.1"
+ whatwg-url "^11.0.0"
+
+mongodb@^4.8.1:
+ version "4.8.1"
+ resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-4.8.1.tgz#596de88ff4519128266d9254dbe5b781c4005796"
+ integrity sha512-/NyiM3Ox9AwP5zrfT9TXjRKDJbXlLaUDQ9Rg//2lbg8D2A8GXV0VidYYnA/gfdK6uwbnL4FnAflH7FbGw3TS7w==
+ dependencies:
+ bson "^4.6.5"
+ denque "^2.0.1"
+ mongodb-connection-string-url "^2.5.2"
+ socks "^2.6.2"
+ optionalDependencies:
+ saslprep "^1.0.3"
+
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -1763,7 +1846,7 @@ prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1:
object-assign "^4.1.1"
react-is "^16.13.1"
-punycode@^2.1.0:
+punycode@^2.1.0, punycode@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
@@ -1899,6 +1982,13 @@ safe-buffer@~5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+saslprep@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226"
+ integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==
+ dependencies:
+ sparse-bitfield "^3.0.3"
+
scheduler@^0.23.0:
version "0.23.0"
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
@@ -1949,6 +2039,19 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+smart-buffer@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+ integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+
+socks@^2.6.2:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0"
+ integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==
+ dependencies:
+ ip "^2.0.0"
+ smart-buffer "^4.2.0"
+
source-map-js@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
@@ -1959,6 +2062,13 @@ source-map@^0.5.7:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
+sparse-bitfield@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11"
+ integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==
+ dependencies:
+ memory-pager "^1.0.2"
+
string.prototype.matchall@^4.0.7:
version "4.0.7"
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
@@ -2054,6 +2164,13 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
+tr46@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
+ integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==
+ dependencies:
+ punycode "^2.1.1"
+
tsconfig-paths@^3.14.1:
version "3.14.1"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
@@ -2135,6 +2252,19 @@ v8-compile-cache@^2.0.3:
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
+webidl-conversions@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
+ integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
+
+whatwg-url@^11.0.0:
+ version "11.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018"
+ integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==
+ dependencies:
+ tr46 "^3.0.0"
+ webidl-conversions "^7.0.0"
+
which-boxed-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"