From e948e073d49f41ef50f43d78c2959f50b80bd30e Mon Sep 17 00:00:00 2001 From: Tade Strehk <42637916+TadeSF@users.noreply.github.com> Date: Wed, 14 Jun 2023 10:27:01 +0200 Subject: [PATCH] Update Speakers List (#21) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Bakend setup rework (#10) * chore: Bakend setup rework * 🐞 fix: Satisfy typescript compiler * πŸ”΅ other: satisfy linter * ✨feature: Add CI mode for backend run to test server start in CICD * 🐞 fix: Esbuild set production env at build time * 🐞 fix: Make disconnect db only run when db initialized * 🐞 fix: Make github action not fail on expected timeout * 🐞 fix: Gh action * 🐞 fix: gh action * 🐞 fix: gh action * 🐞 fix: gh action * Merge backend rework and ci actions into main (#12) * chore: Bakend setup rework * 🐞 fix: Satisfy typescript compiler * πŸ”΅ other: satisfy linter * ✨feature: Add CI mode for backend run to test server start in CICD * 🐞 fix: Esbuild set production env at build time * 🐞 fix: Make disconnect db only run when db initialized * 🐞 fix: Make github action not fail on expected timeout * 🐞 fix: Gh action * 🐞 fix: gh action * 🐞 fix: gh action * 🐞 fix: gh action * Setup 2 (#13) * chore: Bakend setup rework * 🐞 fix: Satisfy typescript compiler * πŸ”΅ other: satisfy linter * ✨feature: Add CI mode for backend run to test server start in CICD * 🐞 fix: Esbuild set production env at build time * 🐞 fix: Make disconnect db only run when db initialized * 🐞 fix: Make github action not fail on expected timeout * 🐞 fix: Gh action * 🐞 fix: gh action * 🐞 fix: gh action * 🐞 fix: gh action * Setup i18n (#14) * chore: Bakend setup rework * 🐞 fix: Satisfy typescript compiler * πŸ”΅ other: satisfy linter * ✨feature: Add CI mode for backend run to test server start in CICD * 🐞 fix: Esbuild set production env at build time * 🐞 fix: Make disconnect db only run when db initialized * 🐞 fix: Make github action not fail on expected timeout * 🐞 fix: Gh action * 🐞 fix: gh action * 🐞 fix: gh action * 🐞 fix: gh action * πŸ–₯️ wip: Setup i18n solution * 🐞 fix: Make linter compatible with i18n * 🐞 fix: Metadata & use Client Directive * 🐞 fix: Remove harming lines from nested layout.tsx files * 🐞 temp fix: Metadata, i18n & use Client Directive * Added TODO i18n support for country names Co-authored-by: Felix <14091540+m1212e@users.noreply.github.com> --------- Co-authored-by: Felix <14091540+m1212e@users.noreply.github.com> --- .github/workflows/build.yml | 9 +- chase/backend/.env | 2 - chase/backend/build.js | 90 +- chase/backend/package-lock.json | 1276 ++++++++++++++- chase/backend/package.json | 10 +- chase/backend/prisma/client.ts | 9 +- chase/backend/prisma/schema.prisma | 2 +- chase/backend/src/hooks/auth.ts | 42 +- chase/backend/src/main.ts | 254 +-- chase/backend/src/routes/auth/login.ts | 31 +- chase/backend/src/routes/auth/register.ts | 0 chase/backend/src/routes/auth/status.ts | 2 +- chase/backend/static/chase_logo_blue.png | Bin 0 -> 24489 bytes chase/backend/tsconfig.json | 4 +- chase/frontend/.typesafe-i18n.json | 4 + chase/frontend/app/layout.tsx | 37 +- chase/frontend/app/login/layout.tsx | 51 +- chase/frontend/app/login/participant/page.tsx | 4 +- .../misc/get_country_name_by_code.tsx | 2 +- chase/frontend/package-lock.json | 1413 +++++++++++++---- chase/frontend/package.json | 8 +- chase/frontend/src/i18n/de/index.ts | 9 + chase/frontend/src/i18n/en/index.ts | 9 + chase/frontend/src/i18n/formatters.ts | 12 + chase/frontend/src/i18n/i18n-react.tsx | 30 + chase/frontend/src/i18n/i18n-types.ts | 35 + chase/frontend/src/i18n/i18n-util.async.ts | 33 + chase/frontend/src/i18n/i18n-util.sync.ts | 26 + chase/frontend/src/i18n/i18n-util.ts | 63 + rome.json | 3 + 30 files changed, 2887 insertions(+), 583 deletions(-) delete mode 100644 chase/backend/src/routes/auth/register.ts create mode 100644 chase/backend/static/chase_logo_blue.png create mode 100644 chase/frontend/.typesafe-i18n.json create mode 100644 chase/frontend/src/i18n/de/index.ts create mode 100644 chase/frontend/src/i18n/en/index.ts create mode 100644 chase/frontend/src/i18n/formatters.ts create mode 100644 chase/frontend/src/i18n/i18n-react.tsx create mode 100644 chase/frontend/src/i18n/i18n-types.ts create mode 100644 chase/frontend/src/i18n/i18n-util.async.ts create mode 100644 chase/frontend/src/i18n/i18n-util.sync.ts create mode 100644 chase/frontend/src/i18n/i18n-util.ts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a05b5a06..657a9961 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -38,4 +38,11 @@ jobs: run: npm ci - name: Run build - run: npm run build \ No newline at end of file + run: npm run build + + - name: Run the server + id: run + env: + CI: "true" + run: | + timeout 20s node ./build/main.js || true \ No newline at end of file diff --git a/chase/backend/.env b/chase/backend/.env index b5513024..10009109 100644 --- a/chase/backend/.env +++ b/chase/backend/.env @@ -1,6 +1,4 @@ PORT=3001 SESSION_SECRET=fFcteW8N2d2hMxMvd8EEy8CtDpvXR4cpDMgEE -SERVE_DOCUMENTATION=true -SECURE_COOKIE=false REDIS_URL=redis://localhost:6379 DATABASE_URL="postgresql://postgres:postgres@localhost:5432/postgres" diff --git a/chase/backend/build.js b/chase/backend/build.js index b1e50cab..9faa310a 100644 --- a/chase/backend/build.js +++ b/chase/backend/build.js @@ -1,58 +1,62 @@ -const { build } = require("esbuild"); +const {build} = require("esbuild"); const path = require("path"); +const {definePlugin} = require('esbuild-plugin-define'); const fs = require("fs"); -const OUTDIR = path.join(__dirname, "build"); - -// ╔══════════════════════════════╗ -// β•‘ Build the server entry point β•‘ -// β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• +//TODO document that the built server only correctly registers routes on unix platforms -build({ - entryPoints: ["src/main.ts"], - bundle: true, - platform: "node", - minify: true, - outdir: OUTDIR, -}).catch((error) => { - console.error(error); - process.exit(1); -}); +const OUTDIR = path.join(__dirname, "build"); -// ╔══════════════════╗ -// β•‘ Build each route β•‘ -// β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• +fs.rmSync(OUTDIR, {recursive: true, force: true}); -const routesPath = path.join(__dirname, "src", "routes"); -const outputRoutesPath = path.join(OUTDIR, "routes"); +/** + * @param {string} dir The start directory to traverse + * @returns An array of files recursively in the start directory + */ +function listFiles(dir) { + let fileArray = []; -function processDirectory(dirPath) { - const files = fs.readdirSync(dirPath); + const files = fs.readdirSync(dir); - files.forEach((file) => { - const filepath = path.join(dirPath, file); - const stats = fs.statSync(filepath); + files.forEach(file => { + const filePath = path.join(dir, file); + const stats = fs.statSync(filePath); if (stats.isDirectory()) { - processDirectory(filepath); + const subdirectoryFiles = listFiles(filePath); // Recursive call for subdirectories + fileArray = fileArray.concat(subdirectoryFiles); } else { - const options = { - entryPoints: [filepath], - bundle: true, - platform: "node", - minify: true, - outdir: path.join( - outputRoutesPath, - path.dirname(path.relative(routesPath, filepath)), - ), - }; - - build(options).catch((error) => { - console.error(error); - process.exit(1); - }); + fileArray.push(filePath); // Add file path to array } }); + + return fileArray; } -processDirectory(routesPath); +// ╔══════════════════╗ +// β•‘ Build the server β•‘ +// β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + +const entryPoints = [path.join(__dirname, "src", "main.ts"), ...listFiles(path.join(__dirname, "src", "routes"))]; + +build({ + entryPoints, + bundle: true, + platform: "node", + format: "cjs", + target: "es2022", + // minify: true, + outdir: OUTDIR, + plugins: [ + definePlugin({ + process: { + env: { + PRODUCTION: "true", + }, + }, + }), + ] +}).catch((error) => { + console.error(error); + process.exit(1); +}); \ No newline at end of file diff --git a/chase/backend/package-lock.json b/chase/backend/package-lock.json index f51e4f20..f974f7ea 100644 --- a/chase/backend/package-lock.json +++ b/chase/backend/package-lock.json @@ -10,6 +10,7 @@ "@fastify/type-provider-typebox": "^3.2.0", "@prisma/client": "^4.15.0", "@sinclair/typebox": "^0.28.11", + "argon2": "^0.30.3", "connect-redis": "^7.1.0", "fastify": "^4.17.0", "fastify-now": "^3.0.4", @@ -22,11 +23,16 @@ "@types/express-session": "^1.17.7", "@types/node": "^20.2.5", "dotenv": "^16.0.3", - "esbuild": "^0.17.19", + "esbuild": "^0.18.0", + "esbuild-plugin-define": "^0.3.0", "npm-run-all": "^4.1.5", "prisma": "^4.15.0", + "rollup": "^3.25.0", + "rollup-plugin-esbuild": "^5.0.0", + "rollup-plugin-multi-input": "^1.4.1", "ts-node": "^10.9.1", "ts-node-dev": "^2.0.0", + "tslib": "^2.5.3", "typescript": "^5.1.3" } }, @@ -42,10 +48,346 @@ "node": ">=12" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.0.tgz", + "integrity": "sha512-+uLHSiWK3qOeyDYCf/nuvIgCnQsYjXWNa3TlGYLW1pPG7OYMawllU+VyBgHQPjF2aIUVFpfrvz5aAfxGk/0qNg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.0.tgz", + "integrity": "sha512-nAwRCs5+jxi3gBMVkOqmRvsITB/UtfpvkbMwAwJUIbp66NnPbV2KGCFnjNn7IEqabJQXfBLe/QLdjCGpHU+yEw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.0.tgz", + "integrity": "sha512-TiOJmHQ8bXCGlYLpBd3Qy7N8dxi4n6q+nOmTzPr5Hb/bUr+PKuP4e5lWaOlpkaKc1Q9wsFt+sHfQpFCrM7SMow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.0.tgz", + "integrity": "sha512-5GsFovtGyjMIXJrcCzmI1hX3TneCrmFncFIlo0WrRvWcVU6H094P854ZaP8qoLgevXhggO2dhlEGYY0Zv6/S9Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.0.tgz", + "integrity": "sha512-4K/QCksQ8F58rvC1D62Xi4q4E7YWpiyc3zy2H/n1W7y0hjQpOBBxciLn0qycMskP/m/I5h9HNbRlu1aK821sHg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.0.tgz", + "integrity": "sha512-DMazN0UGzipD0Fi1O9pRX0xfp+JC3gSnFWxTWq88Dr/odWhZzm8Jqy44LN2veYeipb1fBMxhoEp7eCr902SWqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.0.tgz", + "integrity": "sha512-GdkJAB3ZBiYnie9iFO9v/CM4ko0dm5SYkUs97lBKNLHw9mo4H9IXwGNKtUztisEsmUP0IWfEi4YTWOJF3DIO4w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.0.tgz", + "integrity": "sha512-A3Ue/oZdb43znNpeY71FrAjZF20MtnBKCGb1vXLIVg5qg8rRM1gRgn6X2ixYwATiw5dE04JnP+aV4OBf8c5ZvQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.0.tgz", + "integrity": "sha512-Mb3yCN9PXA6G5qf84UF0IEuXP22eyNlquF17Zs2F1vVBM0CtyWLYosC5JaxBxfK6EzWwB2IkPBIjMeK3ek+ItA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.0.tgz", + "integrity": "sha512-WNDXgJdfDhN6ZxHU7HgR2BRDVx9iGN8SpmebUUGdENg4MZJndGcaQuf2kCJjMwoK0+es1g61TeJzAMxfgDcmcA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.0.tgz", + "integrity": "sha512-PBr8Lf+L8amvheTGFVNK/0qionszkOKMq2WyfFlVz8D41v0+uSth6fYYHwtASkMk4xf+oh0vW8NYuav3/3RHuQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.0.tgz", + "integrity": "sha512-Lg4ygah5bwfDDCOMFsBJjSVbD1UzNwWt4f7DhpaSIFOrJqoECX1VTByKw3iSDAVRlwl1cljlfy7wlysrRZcdiQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.0.tgz", + "integrity": "sha512-obz/firdtou244DIjHzdKmJChwGseqA3tWGa6xPMfuq54Ca4Pp1a4ANMrqy2IZ67rfpRHcJTlb2h3rSfW6tvAA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.0.tgz", + "integrity": "sha512-UkuBdxQsxi39wWrRLMOkJl//82/hpQw79TD+OBLw3IBYyVQ4Wfvpe56RfEGK/j439sIm79ccnD5RUNQceHvZdQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.0.tgz", + "integrity": "sha512-MgyuC30oYB465hyAqsb3EH6Y4zTeqqgixRAOpsDNMCelyDiW9ZDPXvMPfBgCZGJlDZFGKDm2I9ou8E3VI+v7pg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.0.tgz", + "integrity": "sha512-oLLKU3F4pKWAsNmfi7Rd4qkj0qvg1S923ZjlcISA2IMgHsODA9xzwerqWayI5nOhLGgKXviDofn9exTeA4EUQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.0.tgz", + "integrity": "sha512-BEfJrZsZ/gMtpS2vC+2YoFGxmfLKiYQvj8lZrBfjKzQrwyMpH53CzQJj9ypOx9ldjM/MVxf9i9wi/rS4BWV7WA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.0.tgz", + "integrity": "sha512-eDolHeG3REnEIgwl7Lw2S0znUMY4PFVtCAzLKqdRO0HD+iPKJR8n2MEJJyhPdUjcobo8SEQ2AG6gtYfft9VFHg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.0.tgz", + "integrity": "sha512-kl7vONem2wmRQke015rSrknmc6TYXKVNs2quiVTdvkSufscrjegpNqKyP7v6EHqXtvkzrB92ySjpfzazKG627g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.0.tgz", + "integrity": "sha512-WohArFQ3HStBu9MAsx3JUk2wfC2v8QoadnMoNfx3Y26ac54tD/wQhPzw4QOzQbSqOFqzIMLKWbxindTsko+9OA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.0.tgz", + "integrity": "sha512-SdnpSOxpeoewYCurmfLVepLuhOAphWkGTxWHifFjp37DaUHwF1fpGzyxhZoXMt5MKGuAO5aE3c5668YYtno+9Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.0.tgz", + "integrity": "sha512-WJxImv0Pehpbo+pgg7Xrn88/b6ZzSweNHTw/2LW95JjeQUIS6ToJeQmjAdud9H3yiHJmhLOmEAOvUdNLhptD0w==", "cpu": [ "x64" ], @@ -267,6 +609,82 @@ "node": ">=8" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@phc/format": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@phc/format/-/format-1.0.0.tgz", + "integrity": "sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/@prisma/client": { "version": "4.15.0", "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.15.0.tgz", @@ -352,15 +770,37 @@ "@redis/client": "^1.0.0" } }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@sinclair/typebox": { "version": "0.28.11", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.28.11.tgz", "integrity": "sha512-8QPhkOowccAdXa/ra54pq+UVYvzbKjYMuojxCOTFq+yyEfcWZJSdlIVdivTRrIq7Mgjx1n4E37t8Js/RXwyvUg==" }, "node_modules/@swc/core": { - "version": "1.3.60", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.60.tgz", - "integrity": "sha512-dWfic7sVjnrStzGcMWakHd2XPau8UXGPmFUTkx6xGX+DOVtfAQVzG6ZW7ohw/yNcTqI05w6Ser26XMTMGBgXdA==", + "version": "1.3.62", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.62.tgz", + "integrity": "sha512-J58hWY+/G8vOr4J6ZH9hLg0lMSijZtqIIf4HofZezGog/pVX6sJyBJ40dZ1ploFkDIlWTWvJyqtpesBKS73gkQ==", "dev": true, "hasInstallScript": true, "optional": true, @@ -373,16 +813,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.60", - "@swc/core-darwin-x64": "1.3.60", - "@swc/core-linux-arm-gnueabihf": "1.3.60", - "@swc/core-linux-arm64-gnu": "1.3.60", - "@swc/core-linux-arm64-musl": "1.3.60", - "@swc/core-linux-x64-gnu": "1.3.60", - "@swc/core-linux-x64-musl": "1.3.60", - "@swc/core-win32-arm64-msvc": "1.3.60", - "@swc/core-win32-ia32-msvc": "1.3.60", - "@swc/core-win32-x64-msvc": "1.3.60" + "@swc/core-darwin-arm64": "1.3.62", + "@swc/core-darwin-x64": "1.3.62", + "@swc/core-linux-arm-gnueabihf": "1.3.62", + "@swc/core-linux-arm64-gnu": "1.3.62", + "@swc/core-linux-arm64-musl": "1.3.62", + "@swc/core-linux-x64-gnu": "1.3.62", + "@swc/core-linux-x64-musl": "1.3.62", + "@swc/core-win32-arm64-msvc": "1.3.62", + "@swc/core-win32-ia32-msvc": "1.3.62", + "@swc/core-win32-x64-msvc": "1.3.62" }, "peerDependencies": { "@swc/helpers": "^0.5.0" @@ -393,10 +833,163 @@ } } }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.62", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.62.tgz", + "integrity": "sha512-MmGilibITz68LEje6vJlKzc2gUUSgzvB3wGLSjEORikTNeM7P8jXVxE4A8fgZqDeudJUm9HVWrxCV+pHDSwXhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.62", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.62.tgz", + "integrity": "sha512-Xl93MMB3sCWVlYWuQIB+v6EQgzoiuQYK5tNt9lsHoIEVu2zLdkQjae+5FUHZb1VYqCXIiWcULFfVz0R4Sjb7JQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.62", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.62.tgz", + "integrity": "sha512-nJsp6O7kCtAjTTMcIjVB0g5y1JNiYAa5q630eiwrnaHUusEFoANDdORI3Z9vXeikMkng+6yIv9/V8Rb093xLjQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.62", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.62.tgz", + "integrity": "sha512-XGsV93vpUAopDt5y6vPwbK1Nc/MlL55L77bAZUPIiosWD1cWWPHNtNSpriE6+I+JiMHe0pqtfS/SSTk6ZkFQVw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.62", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.62.tgz", + "integrity": "sha512-ESUmJjSlTTkoBy9dMG49opcNn8BmviqStMhwyeD1G8XRnmRVCZZgoBOKdvCXmJhw8bQXDhZumeaTUB+OFUKVXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.62", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.62.tgz", + "integrity": "sha512-wnHJkt3ZBrax3SFnUHDcncG6mrSg9ZZjMhQV9Mc3JL1x1s1Gy9rGZCoBNnV/BUZWTemxIBcQbANRSDut/WO+9A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.62", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.62.tgz", + "integrity": "sha512-9oRbuTC/VshB66Rgwi3pTq3sPxSTIb8k9L1vJjES+dDMKa29DAjPtWCXG/pyZ00ufpFZgkGEuAHH5uqUcr1JQg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.62", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.62.tgz", + "integrity": "sha512-zv14vlF2VRrxS061XkfzGjCYnOrEo5glKJjLK5PwUKysIoVrx/L8nAbFxjkX5cObdlyoqo+ekelyBPAO+4bS0w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.62", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.62.tgz", + "integrity": "sha512-8MC/PZQSsOP2iA/81tAfNRqMWyEqTS/8zKUI67vPuLvpx6NAjRn3E9qBv7iFqH79iqZNzqSMo3awnLrKZyFbcw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.60", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.60.tgz", - "integrity": "sha512-ouw+s22i9PYQpSE7Xc+ZittEyA87jElXABesviSpP+jgHt10sM5KFUpVAeV8DRlxJCXMJJ5AhOdCf4TAtFr+6A==", + "version": "1.3.62", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.62.tgz", + "integrity": "sha512-GJSmUJ95HKHZXAxiuPUmrcm/S3ivQvEzXhOZaIqYBIwUsm02vFZkClsV7eIKzWjso1t0+I/8MjrnUNaSWqh1rQ==", "cpu": [ "x64" ], @@ -453,6 +1046,12 @@ "@types/node": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, "node_modules/@types/express": { "version": "4.17.17", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", @@ -542,6 +1141,11 @@ "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", "dev": true }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -579,6 +1183,17 @@ "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -610,6 +1225,14 @@ } } }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -635,17 +1258,61 @@ "node": ">= 8" } }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, + "node_modules/argon2": { + "version": "0.30.3", + "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.30.3.tgz", + "integrity": "sha512-DoH/kv8c9127ueJSBxAVJXinW9+EuPA3EMUxoV2sAY1qDE5H9BjTyVF/aD2XyHqbqUWabgBkIfcP3ZZuGhbJdg==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.10", + "@phc/format": "^1.0.0", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -692,8 +1359,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -727,7 +1393,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -828,6 +1493,14 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/cluster-key-slot": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", @@ -851,11 +1524,18 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/connect-redis": { "version": "7.1.0", @@ -868,6 +1548,11 @@ "express-session": ">=1" } }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -957,12 +1642,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">= 0.8" + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" } }, "node_modules/diff": { @@ -992,6 +1690,11 @@ "xtend": "^4.0.0" } }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1049,6 +1752,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, "node_modules/es-set-tostringtag": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", @@ -1081,9 +1790,9 @@ } }, "node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.0.tgz", + "integrity": "sha512-/2sQaWHNX2jkglLu85EjmEAR2ANpKOa1kp2rAE3wjKcuYjEHFlB+D60tn6W9BRgHiAQEKYtl4hEygKWothfDEA==", "dev": true, "hasInstallScript": true, "bin": { @@ -1093,28 +1802,41 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" + "@esbuild/android-arm": "0.18.0", + "@esbuild/android-arm64": "0.18.0", + "@esbuild/android-x64": "0.18.0", + "@esbuild/darwin-arm64": "0.18.0", + "@esbuild/darwin-x64": "0.18.0", + "@esbuild/freebsd-arm64": "0.18.0", + "@esbuild/freebsd-x64": "0.18.0", + "@esbuild/linux-arm": "0.18.0", + "@esbuild/linux-arm64": "0.18.0", + "@esbuild/linux-ia32": "0.18.0", + "@esbuild/linux-loong64": "0.18.0", + "@esbuild/linux-mips64el": "0.18.0", + "@esbuild/linux-ppc64": "0.18.0", + "@esbuild/linux-riscv64": "0.18.0", + "@esbuild/linux-s390x": "0.18.0", + "@esbuild/linux-x64": "0.18.0", + "@esbuild/netbsd-x64": "0.18.0", + "@esbuild/openbsd-x64": "0.18.0", + "@esbuild/sunos-x64": "0.18.0", + "@esbuild/win32-arm64": "0.18.0", + "@esbuild/win32-ia32": "0.18.0", + "@esbuild/win32-x64": "0.18.0" + } + }, + "node_modules/esbuild-plugin-define": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/esbuild-plugin-define/-/esbuild-plugin-define-0.3.0.tgz", + "integrity": "sha512-SQaeK6Ith8LVDzNwuJh4usAERl04pK1dpO0RPf5GhTw82GU+r0ULy/z7IGLjM/C3+znQC2984vgckemwOrgGow==", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.15" } }, "node_modules/escape-html": { @@ -1132,6 +1854,12 @@ "node": ">=0.8.0" } }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -1206,6 +1934,22 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fast-json-stringify": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.7.0.tgz", @@ -1329,11 +2073,46 @@ "node": ">= 0.6" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, "node_modules/function-bind": { "version": "1.1.1", @@ -1368,6 +2147,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/generic-pool": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz", @@ -1411,7 +2209,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1553,6 +2350,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -1575,6 +2377,18 @@ "node": ">= 0.8" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -1598,7 +2412,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1607,8 +2420,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { "version": "1.0.5", @@ -1740,6 +2552,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -1883,6 +2703,15 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -1911,6 +2740,12 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, "node_modules/light-my-request": { "version": "5.9.1", "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.9.1.tgz", @@ -1947,6 +2782,28 @@ "node": ">=10" } }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -1962,6 +2819,28 @@ "node": ">= 0.10.0" } }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", @@ -1978,7 +2857,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1995,11 +2873,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -2018,6 +2926,44 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -2073,6 +3019,25 @@ "node": ">= 4" } }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -2127,7 +3092,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -2204,7 +3168,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2359,6 +3322,26 @@ "node": ">=6" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-format-unescaped": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", @@ -2510,6 +3493,78 @@ "rimraf": "bin.js" } }, + "node_modules/rollup": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.0.tgz", + "integrity": "sha512-FnJkNRst2jEZGw7f+v4hFo6UTzpDKrAKcHZWcEfm5/GJQ5CK7wgb4moNLNAe7npKUev7yQn1AY/YbZRIxOv6Qg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-esbuild": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-5.0.0.tgz", + "integrity": "sha512-1cRIOHAPh8WQgdQQyyvFdeOdxuiyk+zB5zJ5+YOwrZP4cJ0MT3Fs48pQxrZeyZHcn+klFherytILVfE4aYrneg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "debug": "^4.3.4", + "es-module-lexer": "^1.0.5", + "joycon": "^3.1.1", + "jsonc-parser": "^3.2.0" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.10.1", + "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0" + } + }, + "node_modules/rollup-plugin-multi-input": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-multi-input/-/rollup-plugin-multi-input-1.4.1.tgz", + "integrity": "sha512-ybvotObZFFDEbqw6MDrYUa/TXmF+1qCVX3svpAddmIOLP3/to5zkSKP0MJV5bNBZfFFpblwChurz4tsPR/zJew==", + "dev": true, + "dependencies": { + "fast-glob": "3.2.12" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -2578,6 +3633,11 @@ "node": ">=10" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/set-cookie-parser": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", @@ -2633,6 +3693,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, "node_modules/sonic-boom": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz", @@ -2709,6 +3774,27 @@ "node": ">= 0.8" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.padend": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", @@ -2771,6 +3857,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -2813,6 +3910,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/thread-stream": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.3.0.tgz", @@ -2850,6 +3963,11 @@ "node": ">=0.6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -2948,6 +4066,12 @@ "strip-json-comments": "^2.0.0" } }, + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", + "dev": true + }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", @@ -3010,6 +4134,11 @@ "punycode": "^2.1.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -3034,6 +4163,20 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -3082,11 +4225,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/xtend": { "version": "4.0.2", diff --git a/chase/backend/package.json b/chase/backend/package.json index 5a38f4e3..126a040d 100644 --- a/chase/backend/package.json +++ b/chase/backend/package.json @@ -2,7 +2,7 @@ "scripts": { "build": "tsc --noEmit && node build.js", "dev": "npm-run-all -p dev:server dev:db", - "dev:server": "ts-node-dev src/main.ts --load-env-vars-from-file", + "dev:server": "ts-node-dev src/main.ts -p tsconfig.json --respawn", "dev:db": "docker compose up", "dev:migrate": "npx prisma migrate dev" }, @@ -12,6 +12,7 @@ "@fastify/type-provider-typebox": "^3.2.0", "@prisma/client": "^4.15.0", "@sinclair/typebox": "^0.28.11", + "argon2": "^0.30.3", "connect-redis": "^7.1.0", "fastify": "^4.17.0", "fastify-now": "^3.0.4", @@ -24,11 +25,16 @@ "@types/express-session": "^1.17.7", "@types/node": "^20.2.5", "dotenv": "^16.0.3", - "esbuild": "^0.17.19", + "esbuild": "^0.18.0", + "esbuild-plugin-define": "^0.3.0", "npm-run-all": "^4.1.5", "prisma": "^4.15.0", + "rollup": "^3.25.0", + "rollup-plugin-esbuild": "^5.0.0", + "rollup-plugin-multi-input": "^1.4.1", "ts-node": "^10.9.1", "ts-node-dev": "^2.0.0", + "tslib": "^2.5.3", "typescript": "^5.1.3" } } diff --git a/chase/backend/prisma/client.ts b/chase/backend/prisma/client.ts index e1948bf0..49916371 100644 --- a/chase/backend/prisma/client.ts +++ b/chase/backend/prisma/client.ts @@ -1,5 +1,10 @@ import { PrismaClient } from "@prisma/client"; -//TOD document how to use prisma/migrations +/** + * The application wide db connection + */ +export let db: PrismaClient; -export const db = new PrismaClient(); +export function setDb(newDb: PrismaClient) { + db = newDb; +} diff --git a/chase/backend/prisma/schema.prisma b/chase/backend/prisma/schema.prisma index f39437b4..2e71ef82 100644 --- a/chase/backend/prisma/schema.prisma +++ b/chase/backend/prisma/schema.prisma @@ -15,7 +15,7 @@ model User { createdAt DateTime @default(now()) updatedAt DateTime @updatedAt email String @unique - passwordHash Bytes + passwordHash String firstName String lastName String pronouns String diff --git a/chase/backend/src/hooks/auth.ts b/chase/backend/src/hooks/auth.ts index 36bac0fc..c428b0c1 100644 --- a/chase/backend/src/hooks/auth.ts +++ b/chase/backend/src/hooks/auth.ts @@ -1,28 +1,28 @@ import { FastifyError, FastifyReply, FastifyRequest } from "fastify"; -import { server } from "../main"; +// import { server } from "../main"; // decorate to optimize the js engine // https://www.fastify.io/docs/latest/Reference/Decorators/ -server.decorateRequest("session", { - cookie: { - originalMaxAge: 0, - domain: "", - expires: new Date(), - httpOnly: true, - maxAge: 0, - path: "/", - sameSite: true, - secure: true, - signed: true, - }, - authentication: { - userId: "", - email: "", - firstName: "", - lastName: "", - pronouns: "", - }, -}); +// server.decorateRequest("session", { +// cookie: { +// originalMaxAge: 0, +// domain: "", +// expires: new Date(), +// httpOnly: true, +// maxAge: 0, +// path: "/", +// sameSite: true, +// secure: true, +// signed: true, +// }, +// authentication: { +// userId: "", +// email: "", +// firstName: "", +// lastName: "", +// pronouns: "", +// }, +// }); export function authenticated( req: FastifyRequest, diff --git a/chase/backend/src/main.ts b/chase/backend/src/main.ts index b428dabf..7e85960c 100644 --- a/chase/backend/src/main.ts +++ b/chase/backend/src/main.ts @@ -1,143 +1,163 @@ import fastifyCookie from "@fastify/cookie"; import fastifySession from "@fastify/session"; -import swagger from "@fastify/swagger"; -import swaggerUi from "@fastify/swagger-ui"; import { TypeBoxTypeProvider } from "@fastify/type-provider-typebox"; import RedisStore from "connect-redis"; -import { config as dotenv } from "dotenv"; import Fastify, { FastifyInstance } from "fastify"; import fastifyNow from "fastify-now"; import { join } from "path"; import { createClient } from "redis"; +import { PrismaClient } from "@prisma/client"; +import { setDb, db } from "../prisma/client"; -import { db } from "../prisma/client"; +import "./types/types"; //TODO establish testing concept & coverage -// ╔═══════════════╗ -// β•‘ Configuration β•‘ -// β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• - -const LOAD_ENV_VARS_FROM_FILE = - process.argv.find((a) => a === "--load-env-vars-from-file") !== undefined; - -if (LOAD_ENV_VARS_FROM_FILE) { - // load environment variables from .env file during development - // in production, environment variables are set by the host - dotenv({ path: join(__dirname, "../.env") }); -} - -let PORT = 0; -if (process.env.PORT === undefined) { - throw new Error( - "Please make sure the PORT environment variable is set to a valid port number", - ); -} -PORT = Number.parseInt(process.env.PORT); - -// ╔════════════════════════╗ -// β•‘ Creating server object β•‘ -// β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• -//TODO make the logger non ugly: https://www.fastify.io/docs/latest/Reference/Logging/ - -export const server: FastifyInstance = Fastify({ - logger: { level: "warn" }, -}).withTypeProvider(); - -// ╔═══════════════════════════════════════════════════╗ -// β•‘ API documentation generation & serving (dev only) β•‘ -// β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• - -if (process.env.SERVE_DOCUMENTATION) { - server.register(swagger); - server.register(swaggerUi, { - routePrefix: "/documentation", - uiConfig: { - docExpansion: "full", - deepLinking: false, - }, - }); +/** + * The server instance + */ +export let server: FastifyInstance; + +(async () => { + // ╔═══════════════╗ + // β•‘ Configuration β•‘ + // β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + + if (!process.env.PRODUCTION) { + const { config: dotenv } = await import("dotenv"); + // load environment variables from .env file during development + // in production, environment variables are set by the host + dotenv({ path: join(__dirname, "../.env") }); + } + + let PORT = 0; + if (process.env.PORT === undefined) { + throw new Error( + "Please make sure the PORT environment variable is set to a valid port number", + ); + } + PORT = Number.parseInt(process.env.PORT); + + // ╔══════════════════════════════╗ + // β•‘ Prisma (database) connection β•‘ + // β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + + // we populate the client inside the async main wrapper to ensure env vars are set when this is called since prisma depends on them - console.log(` + //TODO document how to use prisma/migrations + if (process.env.CI !== "true") { + setDb(new PrismaClient()); + } + + // ╔════════════════════════╗ + // β•‘ Creating server object β•‘ + // β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + + // TODO: make logger more readable in dev + server = Fastify({ + logger: { level: "warn" }, + }).withTypeProvider(); + + // ╔═══════════════════════════════════════════════════╗ + // β•‘ API documentation generation & serving (dev only) β•‘ + // β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + + if (!process.env.PRODUCTION) { + const swagger = await import("@fastify/swagger"); + const swaggerUi = await import("@fastify/swagger-ui"); + + server.register(swagger.default); + server.register(swaggerUi.default, { + routePrefix: "/documentation", + uiConfig: { + docExpansion: "full", + deepLinking: false, + }, + }); + + console.log(` ╔══════════════════════════════════════════════════════════════════╗ β•‘ Serving API documentation on http://localhost:${PORT}/documentation β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• `); -} - -// ╔══════════════════════╗ -// β•‘ Import hooks & types β•‘ -// β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• - -import "./hooks/hooks"; - -// ╔═════════════════════════════════════════╗ -// β•‘ Cookie parsing & Session initialization β•‘ -// β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• - -server.register(fastifyCookie, {}); - -const redisUrl = process.env.REDIS_URL; -if (redisUrl === undefined) { - throw new Error( - "Could not find REDIS_URL environment variable. Make sure it's set", - ); -} - -// Initialize redis client. -const redisClient = createClient({ - url: redisUrl, -}); -redisClient.connect().catch(console.error); - -// Initialize store. -const redisStore = new RedisStore({ - client: redisClient, - prefix: "chase-session:", -}); - -const sessionSecret = process.env.SESSION_SECRET; -if (sessionSecret === undefined) { - throw new Error( - "Could not find session secret in environment variable. Make sure that the 'SESSION_SECRET' environment variable is set and a secure string with more than 21 characters.", - ); -} - -server.register(fastifySession, { - secret: sessionSecret, - cookie: { - httpOnly: true, - // secure is only deactivated when running in dev (env var 'SECURE_COOKIE' is set to 'false') - secure: process.env.SECURE_COOKIE !== "false", - sameSite: "strict", - }, - store: redisStore, - saveUninitialized: false, // recommended: only save session when data exists -}); - -// ╔══════════════════════════════════════╗ -// β•‘ File system based route registration β•‘ -// β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• - -server.register(fastifyNow, { - routesFolder: join(__dirname, "./routes"), - pathPrefix: "/api", -}); - -// ╔════════════════╗ -// β•‘ Run the server β•‘ -// β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• - -// wrap in an async function to allow top level async -(async () => { + } + + // ╔═════════════════════════════════════════╗ + // β•‘ Cookie parsing & Session initialization β•‘ + // β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + + server.register(fastifyCookie, {}); + + const redisUrl = process.env.REDIS_URL; + if (redisUrl === undefined) { + throw new Error( + "Could not find REDIS_URL environment variable. Make sure it's set", + ); + } + + // Initialize redis client + const redisClient = createClient({ + url: redisUrl, + }); + + if (process.env.CI !== "true") { + try { + await redisClient.connect(); + } catch (error) { + console.error("Could not connect to redis"); + throw error; + } + } + + // Initialize store + const redisStore = new RedisStore({ + client: redisClient, + prefix: "chase-session:", + }); + + const sessionSecret = process.env.SESSION_SECRET; + if (sessionSecret === undefined) { + throw new Error( + "Could not find session secret in environment variable. Make sure that the 'SESSION_SECRET' environment variable is set and a secure string with more than 21 characters.", + ); + } + + server.register(fastifySession, { + secret: sessionSecret, + cookie: { + httpOnly: true, + // secure is only deactivated when running in dev + secure: process.env.PRODUCTION === "true", + sameSite: "strict", + maxAge: 86400000, // 7 days + }, + store: redisStore, + saveUninitialized: false, // recommended: only save session when data exists + }); + + // ╔══════════════════════════════════════╗ + // β•‘ File system based route registration β•‘ + // β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + + server.register(fastifyNow, { + routesFolder: join(__dirname, "./routes"), + pathPrefix: "/api", + }); + + // ╔════════════════╗ + // β•‘ Run the server β•‘ + // β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• + + // wrap in an async function to allow top level async + try { await server.ready(); - if (process.env.SERVE_DOCUMENTATION) { + if (!process.env.PRODUCTION) { server.swagger(); } console.log(`Running on port ${PORT}`); await server.listen({ port: PORT, host: "0.0.0.0" }); - db.$disconnect(); + db?.$disconnect(); } catch (err) { server.log.error(err); process.exit(1); diff --git a/chase/backend/src/routes/auth/login.ts b/chase/backend/src/routes/auth/login.ts index 4b4b0ac8..186f6d1c 100644 --- a/chase/backend/src/routes/auth/login.ts +++ b/chase/backend/src/routes/auth/login.ts @@ -1,5 +1,7 @@ import { NowRequestHandler } from "fastify-now"; import { Static, Type } from "@sinclair/typebox"; +import { db } from "../../../prisma/client"; +// import {verify} from "argon2"; const Body = Type.Object({ password: Type.String(), @@ -17,11 +19,36 @@ const ErrorResponse = Type.Union([ Type.Literal("CouldNotFindUser"), Type.Literal("InvalidPassword"), ]); +type ErrorReplyType = Static; export const POST: NowRequestHandler<{ Body: BodyType; - Reply: ReplyType; -}> = async () => { + Reply: ReplyType | ErrorReplyType; +}> = async (req, rep) => { + const user = await db.user.findFirst({ + where: { + email: req.body.email, + }, + }); + + if (!user) { + rep.status(401); + return "CouldNotFindUser"; + } + + // if (!(await verify(user.passwordHash, req.body.password))) { + // rep.status(401); + // return "InvalidPassword"; + // } + + req.session.authentication = { + email: req.body.email, + firstName: "Antonio", + lastName: "Guterres", + pronouns: "he/him", + userId: "1", + }; + return { firstName: "FirstName", lastName: "LastName", diff --git a/chase/backend/src/routes/auth/register.ts b/chase/backend/src/routes/auth/register.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/chase/backend/src/routes/auth/status.ts b/chase/backend/src/routes/auth/status.ts index 6a97a796..673c940d 100644 --- a/chase/backend/src/routes/auth/status.ts +++ b/chase/backend/src/routes/auth/status.ts @@ -1,5 +1,5 @@ import { NowRequestHandler } from "fastify-now"; -import { authenticated } from "src/hooks/auth"; +import { authenticated } from "../../hooks/auth"; export const GET: NowRequestHandler<{}> = async () => {}; diff --git a/chase/backend/static/chase_logo_blue.png b/chase/backend/static/chase_logo_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..4c413220ce0346f6f23d55cb577d66dfceef01cd GIT binary patch literal 24489 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 - {children} - + + + {children} + + ); -} +} \ No newline at end of file diff --git a/chase/frontend/app/login/layout.tsx b/chase/frontend/app/login/layout.tsx index 969454e6..b3c8be1b 100644 --- a/chase/frontend/app/login/layout.tsx +++ b/chase/frontend/app/login/layout.tsx @@ -1,47 +1,26 @@ -import "@/app/globals.scss"; -import { Inter } from "next/font/google"; // TODO Remove Google Fonts and use local fonts (legal reasons) import Image from "next/image"; -//TODO check the possibility of a route guard for logged in state - -//theme -import "primereact/resources/themes/lara-light-indigo/theme.css"; -//core -import "primereact/resources/primereact.min.css"; -//icons -import "primeicons/primeicons.css"; - -const inter = Inter({ subsets: ["latin"] }); - -export const metadata = { - title: "Chase | Login", -}; - export default function RootLayout({ children, }: { children: React.ReactNode; }) { return ( - - -
-
-
- {children} -
-
-
- Stock Image -
+
+
+
+ {children}
- - +
+
+ Stock Image +
+
); } diff --git a/chase/frontend/app/login/participant/page.tsx b/chase/frontend/app/login/participant/page.tsx index 88d2da8c..ffe36e2d 100644 --- a/chase/frontend/app/login/participant/page.tsx +++ b/chase/frontend/app/login/participant/page.tsx @@ -6,9 +6,11 @@ import UsernameLogin from "@/components/login/username"; import PasswordLogin from "@/components/login/password_participant"; import Loading from "@/app/loading"; import Link from "next/link"; +import { useI18nContext } from "@/src/i18n/i18n-react"; export default function loginVorsitz() { const [loginStage, changeLoginState] = useState(0); + const { LL } = useI18nContext(); return ( <> @@ -25,7 +27,7 @@ export default function loginVorsitz() {

- Stattdessen als Vorsitz anmelden + {LL.login.otherSignIn()}

diff --git a/chase/frontend/misc/get_country_name_by_code.tsx b/chase/frontend/misc/get_country_name_by_code.tsx index bd534019..48be4ef8 100644 --- a/chase/frontend/misc/get_country_name_by_code.tsx +++ b/chase/frontend/misc/get_country_name_by_code.tsx @@ -3,7 +3,7 @@ import { CountryCode } from "@/custom_types"; export default function getCountryNameByCode( countryCode: string, - language: "de" | "en" = "de", // TODO add more languages + language: "de" | "en" = "de", // TODO add more languages from i18n solution ): CountryCode { const country = countryData.find((item) => item.alpha3 === countryCode); diff --git a/chase/frontend/package-lock.json b/chase/frontend/package-lock.json index 46f55d9f..1412207f 100644 --- a/chase/frontend/package-lock.json +++ b/chase/frontend/package-lock.json @@ -26,16 +26,17 @@ "react-markdown": "^8.0.7", "remark-gfm": "^3.0.1", "tailwindcss": "3.3.2", + "typesafe-i18n": "^5.24.3", "typescript": "5.0.4" }, "devDependencies": { + "npm-run-all": "^4.1.5", "sass": "^1.62.1" } }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -45,8 +46,7 @@ }, "node_modules/@babel/runtime": { "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", - "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -113,8 +113,7 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -126,29 +125,25 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -156,8 +151,7 @@ }, "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "license": "MIT" }, "node_modules/@next/env": { "version": "13.4.4", @@ -301,8 +295,7 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -313,16 +306,14 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -333,8 +324,7 @@ }, "node_modules/@swc/helpers": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "license": "Apache-2.0", "dependencies": { "tslib": "^2.4.0" } @@ -370,18 +360,15 @@ }, "node_modules/@types/node": { "version": "20.2.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz", - "integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==" + "license": "MIT" }, "node_modules/@types/prop-types": { "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "license": "MIT" }, "node_modules/@types/react": { "version": "18.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.7.tgz", - "integrity": "sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==", + "license": "MIT", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -390,39 +377,45 @@ }, "node_modules/@types/react-dom": { "version": "18.2.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz", - "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==", + "license": "MIT", "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-transition-group": { "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", - "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", + "license": "MIT", "dependencies": { "@types/react": "*" } }, "node_modules/@types/scheduler": { "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + "license": "MIT" }, "node_modules/@types/unist": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/any-promise": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -433,13 +426,22 @@ }, "node_modules/arg": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + "license": "MIT" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/autoprefixer": { "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", "funding": [ { "type": "opencollective", @@ -450,6 +452,7 @@ "url": "https://tidelift.com/funding/github/npm/autoprefixer" } ], + "license": "MIT", "dependencies": { "browserslist": "^4.21.5", "caniuse-lite": "^1.0.30001464", @@ -468,6 +471,17 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", @@ -479,21 +493,18 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "license": "MIT" }, "node_modules/binary-extensions": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -501,8 +512,7 @@ }, "node_modules/braces": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -512,8 +522,6 @@ }, "node_modules/browserslist": { "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "funding": [ { "type": "opencollective", @@ -524,6 +532,7 @@ "url": "https://tidelift.com/funding/github/npm/browserslist" } ], + "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001449", "electron-to-chromium": "^1.4.284", @@ -539,8 +548,6 @@ }, "node_modules/busboy": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dependencies": { "streamsearch": "^1.1.0" }, @@ -548,18 +555,27 @@ "node": ">=10.16.0" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/camelcase-css": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/caniuse-lite": { "version": "1.0.30001489", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz", - "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==", "funding": [ { "type": "opencollective", @@ -573,7 +589,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/ccount": { "version": "2.0.1", @@ -584,6 +601,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/character-entities": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", @@ -595,14 +625,13 @@ }, "node_modules/chokidar": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -621,8 +650,7 @@ }, "node_modules/chokidar/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -632,8 +660,20 @@ }, "node_modules/client-only": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" }, "node_modules/comma-separated-tokens": { "version": "2.0.3", @@ -646,21 +686,33 @@ }, "node_modules/commander": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } }, "node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -670,8 +722,7 @@ }, "node_modules/csstype": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "license": "MIT" }, "node_modules/debug": { "version": "4.3.4", @@ -701,6 +752,21 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/define-properties": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -711,8 +777,7 @@ }, "node_modules/didyoumean": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + "license": "Apache-2.0" }, "node_modules/diff": { "version": "5.1.0", @@ -724,13 +789,11 @@ }, "node_modules/dlv": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "license": "MIT" }, "node_modules/dom-helpers": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -738,26 +801,105 @@ }, "node_modules/electron-to-chromium": { "version": "1.4.405", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.405.tgz", - "integrity": "sha512-JdDgnwU69FMZURoesf9gNOej2Cms1XJFfLk24y1IBtnAdhTcJY/mXnokmpmxHN59PcykBP4bgUU98vLY44Lhuw==" + "license": "ISC" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.21.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "version": "1.0.5", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, "node_modules/extend": { @@ -767,8 +909,7 @@ }, "node_modules/fast-glob": { "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -782,8 +923,7 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -793,16 +933,14 @@ }, "node_modules/fastq": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fill-range": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -810,10 +948,17 @@ "node": ">=8" } }, + "node_modules/for-each": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/fraction.js": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "license": "MIT", "engines": { "node": "*" }, @@ -824,31 +969,69 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "license": "ISC" }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/function-bind": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/glob": { "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -866,8 +1049,7 @@ }, "node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -875,10 +1057,39 @@ "node": ">=10.13.0" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, "node_modules/has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.1" }, @@ -886,6 +1097,69 @@ "node": ">= 0.4.0" } }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hast-util-whitespace": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", @@ -895,16 +1169,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, "node_modules/immutable": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -912,18 +1189,58 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "license": "ISC" }, "node_modules/inline-style-parser": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, + "node_modules/internal-slot": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -931,6 +1248,21 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -953,10 +1285,20 @@ "node": ">=4" } }, + "node_modules/is-callable": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-core-module": { "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -964,18 +1306,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -983,37 +1337,152 @@ "node": ">=0.10.0" } }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "engines": { - "node": ">=12" + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, "node_modules/jiti": { "version": "1.18.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", - "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "dev": true, + "license": "MIT" }, "node_modules/kleur": { "version": "4.1.5", @@ -1025,16 +1494,36 @@ }, "node_modules/lilconfig": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "license": "MIT" + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, "node_modules/longest-streak": { "version": "3.1.0", @@ -1047,8 +1536,7 @@ }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -1094,6 +1582,17 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mdast-util-from-markdown": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", @@ -1268,10 +1767,16 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/memorystream": { + "version": "0.3.1", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", "engines": { "node": ">= 8" } @@ -1813,8 +2318,7 @@ }, "node_modules/micromatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -1825,8 +2329,7 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1849,8 +2352,7 @@ }, "node_modules/mz": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -1859,14 +2361,13 @@ }, "node_modules/nanoid": { "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -1925,8 +2426,6 @@ }, "node_modules/next/node_modules/postcss": { "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", "funding": [ { "type": "opencollective", @@ -1937,6 +2436,7 @@ "url": "https://tidelift.com/funding/github/npm/postcss" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -1946,73 +2446,175 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, "node_modules/node-releases": { "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-range": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-hash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", "engines": { "node": ">= 6" } }, + "node_modules/object-inspect": { + "version": "1.12.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, + "node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "license": "MIT" + }, + "node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, "node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -2020,26 +2622,33 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidtree": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/pirates": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/postcss": { "version": "8.4.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", - "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", "funding": [ { "type": "opencollective", @@ -2054,6 +2663,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", @@ -2065,8 +2675,7 @@ }, "node_modules/postcss-import": { "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -2081,8 +2690,7 @@ }, "node_modules/postcss-js": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" }, @@ -2099,8 +2707,7 @@ }, "node_modules/postcss-load-config": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "license": "MIT", "dependencies": { "lilconfig": "^2.0.5", "yaml": "^2.1.1" @@ -2127,8 +2734,7 @@ }, "node_modules/postcss-nested": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.11" }, @@ -2145,8 +2751,7 @@ }, "node_modules/postcss-selector-parser": { "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2157,18 +2762,15 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "license": "MIT" }, "node_modules/primeicons": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-6.0.1.tgz", - "integrity": "sha512-KDeO94CbWI4pKsPnYpA1FPjo79EsY9I+M8ywoPBSf9XMXoe/0crjbUK7jcQEDHuc0ZMRIZsxH3TYLv4TUtHmAA==" + "license": "MIT" }, "node_modules/primereact": { "version": "9.5.0", - "resolved": "https://registry.npmjs.org/primereact/-/primereact-9.5.0.tgz", - "integrity": "sha512-ZykUr4MtEsVLECiTCk58oexYqYwtfa1/eg9T+0u6IaxQczEo/4UfljWCg/KLrs2KCgH6OKGScxvlUePiVMsBrw==", + "license": "MIT", "dependencies": { "@types/react-transition-group": "^4.4.1", "react-transition-group": "^4.4.1" @@ -2186,8 +2788,7 @@ }, "node_modules/prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -2205,8 +2806,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -2220,12 +2819,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/react": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -2235,8 +2834,7 @@ }, "node_modules/react-dom": { "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -2247,8 +2845,7 @@ }, "node_modules/react-hook-form": { "version": "7.43.9", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.43.9.tgz", - "integrity": "sha512-AUDN3Pz2NSeoxQ7Hs6OhQhDr6gtF9YRuutGDwPQqhSUAHJSgGl2VeY3qN19MG0SucpjgDiuMJ4iC5T5uB+eaNQ==", + "license": "MIT", "engines": { "node": ">=12.22.0" }, @@ -2262,8 +2859,7 @@ }, "node_modules/react-is": { "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "license": "MIT" }, "node_modules/react-markdown": { "version": "8.0.7", @@ -2302,8 +2898,7 @@ }, "node_modules/react-transition-group": { "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -2317,16 +2912,27 @@ }, "node_modules/read-cache": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", "dependencies": { "pify": "^2.3.0" } }, + "node_modules/read-pkg": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -2336,8 +2942,23 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/remark-gfm": { "version": "3.0.1", @@ -2385,8 +3006,7 @@ }, "node_modules/resolve": { "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "license": "MIT", "dependencies": { "is-core-module": "^2.11.0", "path-parse": "^1.0.7", @@ -2401,8 +3021,7 @@ }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -2410,8 +3029,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", @@ -2426,6 +3043,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -2441,11 +3059,23 @@ "node": ">=6" } }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/sass": { "version": "1.62.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz", - "integrity": "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==", "devOptional": true, + "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -2460,16 +3090,62 @@ }, "node_modules/scheduler": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } }, + "node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/source-map-js": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -2483,14 +3159,106 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/streamsearch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "engines": { "node": ">=10.0.0" } }, + "node_modules/string.prototype.padend": { + "version": "3.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/style-to-object": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz", @@ -2501,8 +3269,7 @@ }, "node_modules/styled-jsx": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "license": "MIT", "dependencies": { "client-only": "0.0.1" }, @@ -2523,8 +3290,7 @@ }, "node_modules/sucrase": { "version": "3.32.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", - "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -2542,10 +3308,20 @@ "node": ">=8" } }, + "node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2555,8 +3331,7 @@ }, "node_modules/tailwindcss": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", - "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", + "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -2592,16 +3367,14 @@ }, "node_modules/thenify": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", "dependencies": { "any-promise": "^1.0.0" } }, "node_modules/thenify-all": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -2611,8 +3384,7 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -2640,18 +3412,42 @@ }, "node_modules/ts-interface-checker": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + "license": "Apache-2.0" }, "node_modules/tslib": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", - "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==" + "license": "0BSD" + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typesafe-i18n": { + "version": "5.24.3", + "license": "MIT", + "bin": { + "typesafe-i18n": "cli/typesafe-i18n.mjs" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ivanhofer" + }, + "peerDependencies": { + "typescript": ">=3.5.1" + } }, "node_modules/typescript": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2660,6 +3456,20 @@ "node": ">=12.20" } }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/unified": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", @@ -2752,8 +3562,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "funding": [ { "type": "opencollective", @@ -2768,6 +3576,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -2781,8 +3590,7 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "license": "MIT" }, "node_modules/uvu": { "version": "0.5.6", @@ -2801,6 +3609,15 @@ "node": ">=8" } }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/vfile": { "version": "5.3.7", "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", @@ -2829,15 +3646,58 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "license": "ISC" }, "node_modules/yaml": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.0.tgz", - "integrity": "sha512-8/1wgzdKc7bc9E6my5wZjmdavHLvO/QOmLG1FBugblEvY4IXrLjlViIOmL24HthU042lWTDRO90Fz1Yp66UnMw==", + "license": "ISC", "engines": { "node": ">= 14", "npm": ">= 7" @@ -2845,8 +3705,7 @@ }, "node_modules/zod": { "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/chase/frontend/package.json b/chase/frontend/package.json index a671a729..785fb9c8 100644 --- a/chase/frontend/package.json +++ b/chase/frontend/package.json @@ -3,10 +3,12 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev", + "dev": "npm-run-all -p devserver typesafe-i18n", + "devserver": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "typesafe-i18n": "typesafe-i18n" }, "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.4.0", @@ -27,9 +29,11 @@ "react-markdown": "^8.0.7", "remark-gfm": "^3.0.1", "tailwindcss": "3.3.2", + "typesafe-i18n": "^5.24.3", "typescript": "5.0.4" }, "devDependencies": { + "npm-run-all": "^4.1.5", "sass": "^1.62.1" } } diff --git a/chase/frontend/src/i18n/de/index.ts b/chase/frontend/src/i18n/de/index.ts new file mode 100644 index 00000000..3a7529c7 --- /dev/null +++ b/chase/frontend/src/i18n/de/index.ts @@ -0,0 +1,9 @@ +import type { Translation } from "../i18n-types"; + +const de = { + login: { + otherSignIn: "Stattdessen als Vorsitz anmelden", + }, +} satisfies Translation; + +export default de; diff --git a/chase/frontend/src/i18n/en/index.ts b/chase/frontend/src/i18n/en/index.ts new file mode 100644 index 00000000..1b0aa045 --- /dev/null +++ b/chase/frontend/src/i18n/en/index.ts @@ -0,0 +1,9 @@ +import type { BaseTranslation } from "../i18n-types"; + +const en = { + login: { + otherSignIn: "Sign in as chair instead", + }, +} satisfies BaseTranslation; + +export default en; diff --git a/chase/frontend/src/i18n/formatters.ts b/chase/frontend/src/i18n/formatters.ts new file mode 100644 index 00000000..80e1342d --- /dev/null +++ b/chase/frontend/src/i18n/formatters.ts @@ -0,0 +1,12 @@ +import type { FormattersInitializer } from "typesafe-i18n"; +import type { Locales, Formatters } from "./i18n-types"; + +export const initFormatters: FormattersInitializer = ( + locale: Locales, +) => { + const formatters: Formatters = { + // add your formatter functions here + }; + + return formatters; +}; diff --git a/chase/frontend/src/i18n/i18n-react.tsx b/chase/frontend/src/i18n/i18n-react.tsx new file mode 100644 index 00000000..96647f6d --- /dev/null +++ b/chase/frontend/src/i18n/i18n-react.tsx @@ -0,0 +1,30 @@ +// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. +/* eslint-disable */ + +import { useContext } from "react"; +import { initI18nReact } from "typesafe-i18n/react"; +import type { I18nContextType } from "typesafe-i18n/react"; +import type { + Formatters, + Locales, + TranslationFunctions, + Translations, +} from "./i18n-types"; +import { loadedFormatters, loadedLocales } from "./i18n-util"; + +const { component: TypesafeI18n, context: I18nContext } = initI18nReact< + Locales, + Translations, + TranslationFunctions, + Formatters +>(loadedLocales, loadedFormatters); + +const useI18nContext = (): I18nContextType< + Locales, + Translations, + TranslationFunctions +> => useContext(I18nContext); + +export { I18nContext, useI18nContext }; + +export default TypesafeI18n; diff --git a/chase/frontend/src/i18n/i18n-types.ts b/chase/frontend/src/i18n/i18n-types.ts new file mode 100644 index 00000000..530d6068 --- /dev/null +++ b/chase/frontend/src/i18n/i18n-types.ts @@ -0,0 +1,35 @@ +// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. +/* eslint-disable */ +import type { + BaseTranslation as BaseTranslationType, + LocalizedString, +} from "typesafe-i18n"; + +export type BaseTranslation = BaseTranslationType; +export type BaseLocale = "en"; + +export type Locales = "de" | "en"; + +export type Translation = RootTranslation; + +export type Translations = RootTranslation; + +type RootTranslation = { + login: { + /** + * S​i​g​n​ ​i​n​ ​a​s​ ​c​h​a​i​r​ ​i​n​s​t​e​a​d + */ + otherSignIn: string; + }; +}; + +export type TranslationFunctions = { + login: { + /** + * Sign in as chair instead + */ + otherSignIn: () => LocalizedString; + }; +}; + +export type Formatters = {}; diff --git a/chase/frontend/src/i18n/i18n-util.async.ts b/chase/frontend/src/i18n/i18n-util.async.ts new file mode 100644 index 00000000..29dc65fc --- /dev/null +++ b/chase/frontend/src/i18n/i18n-util.async.ts @@ -0,0 +1,33 @@ +// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. +/* eslint-disable */ + +import { initFormatters } from "./formatters"; +import type { Locales, Translations } from "./i18n-types"; +import { loadedFormatters, loadedLocales, locales } from "./i18n-util"; + +const localeTranslationLoaders = { + de: () => import("./de"), + en: () => import("./en"), +}; + +const updateDictionary = ( + locale: Locales, + dictionary: Partial, +): Translations => + (loadedLocales[locale] = { ...loadedLocales[locale], ...dictionary }); + +export const importLocaleAsync = async ( + locale: Locales, +): Promise => + (await localeTranslationLoaders[locale]()).default as unknown as Translations; + +export const loadLocaleAsync = async (locale: Locales): Promise => { + updateDictionary(locale, await importLocaleAsync(locale)); + loadFormatters(locale); +}; + +export const loadAllLocalesAsync = (): Promise => + Promise.all(locales.map(loadLocaleAsync)); + +export const loadFormatters = (locale: Locales): void => + void (loadedFormatters[locale] = initFormatters(locale)); diff --git a/chase/frontend/src/i18n/i18n-util.sync.ts b/chase/frontend/src/i18n/i18n-util.sync.ts new file mode 100644 index 00000000..2eee1f87 --- /dev/null +++ b/chase/frontend/src/i18n/i18n-util.sync.ts @@ -0,0 +1,26 @@ +// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. +/* eslint-disable */ + +import { initFormatters } from "./formatters"; +import type { Locales, Translations } from "./i18n-types"; +import { loadedFormatters, loadedLocales, locales } from "./i18n-util"; + +import de from "./de"; +import en from "./en"; + +const localeTranslations = { + de, + en, +}; + +export const loadLocale = (locale: Locales): void => { + if (loadedLocales[locale]) return; + + loadedLocales[locale] = localeTranslations[locale] as unknown as Translations; + loadFormatters(locale); +}; + +export const loadAllLocales = (): void => locales.forEach(loadLocale); + +export const loadFormatters = (locale: Locales): void => + void (loadedFormatters[locale] = initFormatters(locale)); diff --git a/chase/frontend/src/i18n/i18n-util.ts b/chase/frontend/src/i18n/i18n-util.ts new file mode 100644 index 00000000..ef76a9b3 --- /dev/null +++ b/chase/frontend/src/i18n/i18n-util.ts @@ -0,0 +1,63 @@ +// This file was auto-generated by 'typesafe-i18n'. Any manual changes will be overwritten. +/* eslint-disable */ + +import { + i18n as initI18n, + i18nObject as initI18nObject, + i18nString as initI18nString, +} from "typesafe-i18n"; +import type { LocaleDetector } from "typesafe-i18n/detectors"; +import type { + LocaleTranslationFunctions, + TranslateByString, +} from "typesafe-i18n"; +import { detectLocale as detectLocaleFn } from "typesafe-i18n/detectors"; +import { initExtendDictionary } from "typesafe-i18n/utils"; +import type { + Formatters, + Locales, + Translations, + TranslationFunctions, +} from "./i18n-types"; + +export const baseLocale: Locales = "en"; + +export const locales: Locales[] = ["de", "en"]; + +export const isLocale = (locale: string): locale is Locales => + locales.includes(locale as Locales); + +export const loadedLocales: Record = {} as Record< + Locales, + Translations +>; + +export const loadedFormatters: Record = {} as Record< + Locales, + Formatters +>; + +export const extendDictionary = initExtendDictionary(); + +export const i18nString = (locale: Locales): TranslateByString => + initI18nString(locale, loadedFormatters[locale]); + +export const i18nObject = (locale: Locales): TranslationFunctions => + initI18nObject( + locale, + loadedLocales[locale], + loadedFormatters[locale], + ); + +export const i18n = (): LocaleTranslationFunctions< + Locales, + Translations, + TranslationFunctions +> => + initI18n( + loadedLocales, + loadedFormatters, + ); + +export const detectLocale = (...detectors: LocaleDetector[]): Locales => + detectLocaleFn(baseLocale, locales, ...detectors); diff --git a/rome.json b/rome.json index 6afb9bef..c1c20fd3 100644 --- a/rome.json +++ b/rome.json @@ -13,5 +13,8 @@ "clientKind": "git", "enabled": true, "useIgnoreFile": true + }, + "files": { + "ignore": ["chase/frontend/src/i18n/*.ts", "chase/frontend/src/i18n/*.tsx"] } }