├── .env.example
├── .eslintrc.cjs
├── .gitignore
├── License
├── README.md
├── next.config.mjs
├── package-lock.json
├── package.json
├── pnpm-lock.yaml
├── postcss.config.cjs
├── prettier.config.cjs
├── prisma
└── schema.prisma
├── public
├── fathom-full-white.png
└── favicon.ico
├── src
├── env.mjs
├── pages
│ ├── _app.tsx
│ ├── api
│ │ ├── auth
│ │ │ └── [...nextauth].ts
│ │ └── trpc
│ │ │ └── [trpc].ts
│ ├── assets
│ │ ├── Fathom-text-blue.png
│ │ └── Fathom-text-gradient.png
│ ├── components
│ │ ├── Chart.tsx
│ │ ├── ChartContainer.tsx
│ │ ├── ClusterContext.tsx
│ │ ├── DashBlank.tsx
│ │ ├── Dashboard.tsx
│ │ ├── InteractionBar.tsx
│ │ └── LoginHeader.tsx
│ └── index.tsx
├── server
│ ├── api
│ │ ├── root.ts
│ │ ├── routers
│ │ │ ├── clusterIP.ts
│ │ │ └── snapshot.ts
│ │ └── trpc.ts
│ ├── auth.ts
│ └── db.ts
├── styles
│ └── globals.css
└── utils
│ └── api.ts
├── tailwind.config.ts
└── tsconfig.json
/.env.example:
--------------------------------------------------------------------------------
1 | # Since the ".env" file is gitignored, you can use the ".env.example" file to
2 | # build a new ".env" file when you clone the repo. Keep this file up-to-date
3 | # when you add new variables to `.env`.
4 |
5 | # This file will be committed to version control, so make sure not to have any
6 | # secrets in it. If you are cloning this repo, create a copy of this file named
7 | # ".env" and populate it with your secrets.
8 |
9 | # When adding additional environment variables, the schema in "/src/env.mjs"
10 | # should be updated accordingly.
11 |
12 | # Prisma
13 | # https://www.prisma.io/docs/reference/database-reference/connection-urls#env
14 | DATABASE_URL="file:./db.sqlite"
15 |
16 | # Next Auth
17 | # You can generate a new secret on the command line with:
18 | # openssl rand -base64 32
19 | # https://next-auth.js.org/configuration/options#secret
20 | # NEXTAUTH_SECRET=""
21 | NEXTAUTH_URL="http://localhost:3000"
22 |
23 | # Next Auth Github Provider
24 | GITHUB_CLIENT_ID=""
25 | GITHUB_CLIENT_SECRET=""
26 |
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | // eslint-disable-next-line @typescript-eslint/no-var-requires
2 | const path = require("path");
3 |
4 | /** @type {import("eslint").Linter.Config} */
5 | const config = {
6 | overrides: [
7 | {
8 | extends: [
9 | "plugin:@typescript-eslint/recommended-requiring-type-checking",
10 | ],
11 | files: ["*.ts", "*.tsx"],
12 | parserOptions: {
13 | project: path.join(__dirname, "tsconfig.json"),
14 | },
15 | },
16 | ],
17 | parser: "@typescript-eslint/parser",
18 | parserOptions: {
19 | project: path.join(__dirname, "tsconfig.json"),
20 | },
21 | plugins: ["@typescript-eslint"],
22 | extends: ["next/core-web-vitals", "plugin:@typescript-eslint/recommended"],
23 | rules: {
24 | "@typescript-eslint/consistent-type-imports": [
25 | "warn",
26 | {
27 | prefer: "type-imports",
28 | fixStyle: "inline-type-imports",
29 | },
30 | ],
31 | "@typescript-eslint/no-unused-vars": ["warn", { argsIgnorePattern: "^_" }],
32 | },
33 | };
34 |
35 | module.exports = config;
36 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # database
12 | /prisma/db.sqlite
13 | /prisma/db.sqlite-journal
14 |
15 | # next.js
16 | /.next/
17 | /out/
18 | next-env.d.ts
19 |
20 | # production
21 | /build
22 |
23 | # misc
24 | .DS_Store
25 | *.pem
26 |
27 | # debug
28 | npm-debug.log*
29 | yarn-debug.log*
30 | yarn-error.log*
31 | .pnpm-debug.log*
32 |
33 | # local env files
34 | # do not commit any .env files to git, except for the .env.example file.
35 | .env
36 | .env*.local
37 |
38 | # vercel
39 | .vercel
40 |
41 | # typescript
42 | *.tsbuildinfo
43 |
--------------------------------------------------------------------------------
/License:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Fathom-for-Kubernetes
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Fathom for Kubernetes
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | Fathom is an open-source application that provides comprehensive monitoring and analysis of Kubernetes metrics. With Fathom, you can easily monitor the performance and health of your Kubernetes clusters, compare metric snapshots, and gain insights across multiple clusters.
11 |
12 | For more information visit our [website](https://www.fathom.nyc)
13 |
14 |
15 |
16 |
17 |
18 | [](https://www.typescriptlang.org/)
19 | [](https://www.javascript.com/)
20 | [](https://nextjs.org/)
21 | [](https://next-auth.js.org/)
22 | [](https://trpc.io/)
23 | [](https://www.prisma.io/)
24 | [](https://reactjs.org/)
25 | [](https://kubernetes.io/)
26 | [](https://grafana.com/)
27 | [](https://prometheus.io/)
28 | [](https://www.docker.com/)
29 |
30 |
31 |
32 |
33 |
34 |
35 | ## Features
36 | 1. Real-time Cluster Monitoring: Get immediate insights into your Kubernetes clusters with real-time monitoring and visually appealing Grafana charts.
37 | 2. OAuth for Secure User Authentication: Safeguard user data and access to Fathom through OAuth integration for authentication.
38 | 3. Tabbed Navigation between Clusters: Seamlessly switch between multiple clusters within Fathom's interface for efficient management and monitoring.
39 | 4. Dashboard Snapshots for Easy Comparison: Capture and save dashboard snapshots to analyze and compare metric trends over time.
40 | 5. Flexible Data Storage Options: Choose between local or cloud-hosted databases to store and retrieve dashboard snapshots based on your needs.
41 | 6. Dual Dashboard Display: Compare and contrast snapshots side by side with Fathom's dual dashboard display, enabling comprehensive analysis of multiple clusters.
42 |
43 |
44 |
45 |
46 | # Getting Started
47 |
48 | Before you begin, set up your kubernetes cluster with Prometheus, Grafana as external services, and allow embedding - [Example Initializing on Google Kubernetes Engine](https://github.com/oslabs-beta/Fathom/blob/dev/clusterSetup.md)
49 |
50 | Make sure to take note of the Grafana external IP!
51 |
52 |
53 | ## Locally
54 | 1. Fork and clone this repo
55 | 2. Install dependencies `pnpm install` (optionally, use `npm` as your package manager instead for the remainder of the instructions)
56 | 3. Start up the application `pnpm run dev` and visit the localhost address in a web browser
57 | 4. Add the Grafana IP of the cluster you want to monitor
58 |
59 | ## Through Docker-hub
60 | 1. Install/run [Docker desktop](https://www.docker.com/products/docker-desktop/)
61 | 2. Pull the [docker image](https://hub.docker.com/r/fathomforkubernetes/fathom-beta) `docker pull fathomforkubernetes/fathom-beta`
62 | 3. Run the image passing in your oAuth Client_ID and Secret and exposing port 3000 `docker run -e GITHUB_CLIENT_ID= \ -e GOOGLE_CLIENT_ID= \ -e GITHUB_CLIENT_SECRET= \ -e GOOGLE_CLIENT_SECRET= \ -p 3000:3000 fathomforkubernetes/fathom-beta:0.1`
63 | 4. visit the localhost address in a web browser
64 | 5. Add the Grafana IP of the cluster you want to monitor
65 |
66 | ## Through our website
67 | 1. Visit our [application website](https://www.fathom.watch/)
68 | 2. Allow insecure content from Site settings
69 | 3. Add the Grafana IP of the cluster you want to monitor
70 |
71 |
72 |
73 |
74 | # Contributing
75 | We appreciate your interest in contributing to Fathom-for-Kubernetes! Whether you want to report a bug, propose new features, or submit improvements to the project, we welcome your contributions.
76 |
77 | To contribute to Fathom, please follow these guidelines:
78 |
79 | - Fork the repository and create your own branch for the feature/bug fix you intend to work on.
80 |
81 | - Ensure that your code adheres to the project's coding conventions and style guidelines.
82 |
83 | - Write clear, concise, and well-documented code. Include necessary comments to help others understand your contributions.
84 |
85 | - Test your changes thoroughly to ensure they do not introduce any new issues and that existing functionality remains intact.
86 |
87 | - Commit your changes and provide a descriptive and meaningful commit message.
88 |
89 | - Push your changes to your forked repository.
90 |
91 | - Submit a pull request to the main repository, clearly outlining the purpose and details of your contribution. Include any relevant information that helps reviewers understand the context and purpose of your changes.
92 |
93 | - Be responsive to feedback and actively participate in discussions related to your pull request.
94 |
95 | By contributing to Project Name, you agree that your contributions will be licensed under the [MIT LICENSE](License).
96 |
97 | Thank you for your valuable contributions to Fathom! We greatly appreciate your help in making this project even better.
98 |
99 |
100 |
101 |
102 | # Fathom Team
103 | | Developed By | Github | LinkedIn |
104 | | :------------------: | :-------------: | :-------------: |
105 | | Melissa Armstrong | [](https://github.com/mkarmstr) | [](https://www.linkedin.com/in/mkarmstr/) |
106 | | Sun Jin Kim | [](https://github.com/sjin-k) | [](https://www.linkedin.com/) |
107 | | Faisal Rahman | [](https://github.com/fairahman) | [](https://www.linkedin.com/in/faisal-rahman-348a22203/) |
108 | | Wayland Singh | [](https://github.com/waylandsingh) | [](https://www.linkedin.com/in/wayland-singh/) |
109 |
--------------------------------------------------------------------------------
/next.config.mjs:
--------------------------------------------------------------------------------
1 | /**
2 | * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful
3 | * for Docker builds.
4 | */
5 | await import("./src/env.mjs");
6 |
7 | /** @type {import("next").NextConfig} */
8 | const config = {
9 | reactStrictMode: true,
10 |
11 | /**
12 | * If you have `experimental: { appDir: true }` set, then you must comment the below `i18n` config
13 | * out.
14 | *
15 | * @see https://github.com/vercel/next.js/issues/41980
16 | */
17 | i18n: {
18 | locales: ["en"],
19 | defaultLocale: "en",
20 | },
21 | };
22 | export default config;
23 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "fathom",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "build": "next build",
7 | "dev": "next dev",
8 | "postinstall": "prisma generate",
9 | "lint": "next lint",
10 | "start": "next start"
11 | },
12 | "dependencies": {
13 | "@headlessui/react": "^1.7.14",
14 | "@heroicons/react": "^2.0.18",
15 | "@next-auth/prisma-adapter": "^1.0.5",
16 | "@prisma/client": "^4.14.1",
17 | "@slack/web-api": "^6.8.1",
18 | "@t3-oss/env-nextjs": "^0.2.1",
19 | "@tanstack/react-query": "^4.28.0",
20 | "@trpc/client": "^10.18.0",
21 | "@trpc/next": "^10.18.0",
22 | "@trpc/react-query": "^10.18.0",
23 | "@trpc/server": "^10.18.0",
24 | "daisyui": "^2.51.6",
25 | "headlessui": "^0.0.0",
26 | "html2canvas": "^1.4.1",
27 | "next": "^13.4.1",
28 | "next-auth": "^4.21.0",
29 | "react": "18.2.0",
30 | "react-dom": "18.2.0",
31 | "superjson": "1.12.2",
32 | "zod": "^3.21.4"
33 | },
34 | "devDependencies": {
35 | "@tailwindcss/typography": "^0.5.9",
36 | "@types/eslint": "^8.21.3",
37 | "@types/node": "^18.15.5",
38 | "@types/prettier": "^2.7.2",
39 | "@types/react": "^18.0.28",
40 | "@types/react-dom": "^18.0.11",
41 | "@typescript-eslint/eslint-plugin": "^5.56.0",
42 | "@typescript-eslint/parser": "^5.56.0",
43 | "autoprefixer": "^10.4.14",
44 | "eslint": "^8.36.0",
45 | "eslint-config-next": "^13.4.1",
46 | "postcss": "^8.4.21",
47 | "prettier": "^2.8.6",
48 | "prettier-plugin-tailwindcss": "^0.2.6",
49 | "prisma": "^4.14.1",
50 | "tailwindcss": "^3.3.0",
51 | "typescript": "^5.0.2"
52 | },
53 | "ct3aMetadata": {
54 | "initVersion": "7.13.0"
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | dependencies:
4 | '@headlessui/react':
5 | specifier: ^1.7.14
6 | version: 1.7.14(react-dom@18.2.0)(react@18.2.0)
7 | '@heroicons/react':
8 | specifier: ^2.0.18
9 | version: 2.0.18(react@18.2.0)
10 | '@next-auth/prisma-adapter':
11 | specifier: ^1.0.5
12 | version: 1.0.5(@prisma/client@4.15.0)(next-auth@4.21.0)
13 | '@prisma/client':
14 | specifier: ^4.14.1
15 | version: 4.15.0(prisma@4.15.0)
16 | '@t3-oss/env-nextjs':
17 | specifier: ^0.2.1
18 | version: 0.2.1(zod@3.21.4)
19 | '@tanstack/react-query':
20 | specifier: ^4.28.0
21 | version: 4.28.0(react-dom@18.2.0)(react@18.2.0)
22 | '@trpc/client':
23 | specifier: ^10.18.0
24 | version: 10.18.0(@trpc/server@10.18.0)
25 | '@trpc/next':
26 | specifier: ^10.18.0
27 | version: 10.18.0(@tanstack/react-query@4.28.0)(@trpc/client@10.18.0)(@trpc/react-query@10.18.0)(@trpc/server@10.18.0)(next@13.4.1)(react-dom@18.2.0)(react@18.2.0)
28 | '@trpc/react-query':
29 | specifier: ^10.18.0
30 | version: 10.18.0(@tanstack/react-query@4.28.0)(@trpc/client@10.18.0)(@trpc/server@10.18.0)(react-dom@18.2.0)(react@18.2.0)
31 | '@trpc/server':
32 | specifier: ^10.18.0
33 | version: 10.18.0
34 | daisyui:
35 | specifier: ^2.51.6
36 | version: 2.51.6(autoprefixer@10.4.14)(postcss@8.4.21)
37 | headlessui:
38 | specifier: ^0.0.0
39 | version: 0.0.0
40 | next:
41 | specifier: ^13.4.1
42 | version: 13.4.1(react-dom@18.2.0)(react@18.2.0)
43 | next-auth:
44 | specifier: ^4.21.0
45 | version: 4.21.0(next@13.4.1)(react-dom@18.2.0)(react@18.2.0)
46 | react:
47 | specifier: 18.2.0
48 | version: 18.2.0
49 | react-dom:
50 | specifier: 18.2.0
51 | version: 18.2.0(react@18.2.0)
52 | superjson:
53 | specifier: 1.12.2
54 | version: 1.12.2
55 | zod:
56 | specifier: ^3.21.4
57 | version: 3.21.4
58 |
59 | devDependencies:
60 | '@tailwindcss/typography':
61 | specifier: ^0.5.9
62 | version: 0.5.9(tailwindcss@3.3.0)
63 | '@types/eslint':
64 | specifier: ^8.21.3
65 | version: 8.21.3
66 | '@types/node':
67 | specifier: ^18.15.5
68 | version: 18.15.5
69 | '@types/prettier':
70 | specifier: ^2.7.2
71 | version: 2.7.2
72 | '@types/react':
73 | specifier: ^18.0.28
74 | version: 18.0.28
75 | '@types/react-dom':
76 | specifier: ^18.0.11
77 | version: 18.0.11
78 | '@typescript-eslint/eslint-plugin':
79 | specifier: ^5.56.0
80 | version: 5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@5.0.2)
81 | '@typescript-eslint/parser':
82 | specifier: ^5.56.0
83 | version: 5.56.0(eslint@8.36.0)(typescript@5.0.2)
84 | autoprefixer:
85 | specifier: ^10.4.14
86 | version: 10.4.14(postcss@8.4.21)
87 | eslint:
88 | specifier: ^8.36.0
89 | version: 8.36.0
90 | eslint-config-next:
91 | specifier: ^13.4.1
92 | version: 13.4.1(eslint@8.36.0)(typescript@5.0.2)
93 | postcss:
94 | specifier: ^8.4.21
95 | version: 8.4.21
96 | prettier:
97 | specifier: ^2.8.6
98 | version: 2.8.6
99 | prettier-plugin-tailwindcss:
100 | specifier: ^0.2.6
101 | version: 0.2.6(prettier@2.8.6)
102 | prisma:
103 | specifier: ^4.14.1
104 | version: 4.15.0
105 | tailwindcss:
106 | specifier: ^3.3.0
107 | version: 3.3.0(postcss@8.4.21)
108 | typescript:
109 | specifier: ^5.0.2
110 | version: 5.0.2
111 |
112 | packages:
113 |
114 | /@babel/runtime@7.21.5:
115 | resolution: {integrity: sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==}
116 | engines: {node: '>=6.9.0'}
117 | dependencies:
118 | regenerator-runtime: 0.13.11
119 |
120 | /@eslint-community/eslint-utils@4.4.0(eslint@8.36.0):
121 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
122 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
123 | peerDependencies:
124 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
125 | dependencies:
126 | eslint: 8.36.0
127 | eslint-visitor-keys: 3.4.1
128 | dev: true
129 |
130 | /@eslint-community/regexpp@4.5.1:
131 | resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==}
132 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
133 | dev: true
134 |
135 | /@eslint/eslintrc@2.0.3:
136 | resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==}
137 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
138 | dependencies:
139 | ajv: 6.12.6
140 | debug: 4.3.4
141 | espree: 9.5.2
142 | globals: 13.20.0
143 | ignore: 5.2.4
144 | import-fresh: 3.3.0
145 | js-yaml: 4.1.0
146 | minimatch: 3.1.2
147 | strip-json-comments: 3.1.1
148 | transitivePeerDependencies:
149 | - supports-color
150 | dev: true
151 |
152 | /@eslint/js@8.36.0:
153 | resolution: {integrity: sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==}
154 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
155 | dev: true
156 |
157 | /@headlessui/react@1.7.14(react-dom@18.2.0)(react@18.2.0):
158 | resolution: {integrity: sha512-znzdq9PG8rkwcu9oQ2FwIy0ZFtP9Z7ycS+BAqJ3R5EIqC/0bJGvhT7193rFf+45i9nnPsYvCQVW4V/bB9Xc+gA==}
159 | engines: {node: '>=10'}
160 | peerDependencies:
161 | react: ^16 || ^17 || ^18
162 | react-dom: ^16 || ^17 || ^18
163 | dependencies:
164 | client-only: 0.0.1
165 | react: 18.2.0
166 | react-dom: 18.2.0(react@18.2.0)
167 | dev: false
168 |
169 | /@heroicons/react@2.0.18(react@18.2.0):
170 | resolution: {integrity: sha512-7TyMjRrZZMBPa+/5Y8lN0iyvUU/01PeMGX2+RE7cQWpEUIcb4QotzUObFkJDejj/HUH4qjP/eQ0gzzKs2f+6Yw==}
171 | peerDependencies:
172 | react: '>= 16'
173 | dependencies:
174 | react: 18.2.0
175 | dev: false
176 |
177 | /@humanwhocodes/config-array@0.11.8:
178 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==}
179 | engines: {node: '>=10.10.0'}
180 | dependencies:
181 | '@humanwhocodes/object-schema': 1.2.1
182 | debug: 4.3.4
183 | minimatch: 3.1.2
184 | transitivePeerDependencies:
185 | - supports-color
186 | dev: true
187 |
188 | /@humanwhocodes/module-importer@1.0.1:
189 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
190 | engines: {node: '>=12.22'}
191 | dev: true
192 |
193 | /@humanwhocodes/object-schema@1.2.1:
194 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
195 | dev: true
196 |
197 | /@jridgewell/gen-mapping@0.3.3:
198 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
199 | engines: {node: '>=6.0.0'}
200 | dependencies:
201 | '@jridgewell/set-array': 1.1.2
202 | '@jridgewell/sourcemap-codec': 1.4.15
203 | '@jridgewell/trace-mapping': 0.3.18
204 |
205 | /@jridgewell/resolve-uri@3.1.0:
206 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
207 | engines: {node: '>=6.0.0'}
208 |
209 | /@jridgewell/set-array@1.1.2:
210 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
211 | engines: {node: '>=6.0.0'}
212 |
213 | /@jridgewell/sourcemap-codec@1.4.14:
214 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
215 |
216 | /@jridgewell/sourcemap-codec@1.4.15:
217 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
218 |
219 | /@jridgewell/trace-mapping@0.3.18:
220 | resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==}
221 | dependencies:
222 | '@jridgewell/resolve-uri': 3.1.0
223 | '@jridgewell/sourcemap-codec': 1.4.14
224 |
225 | /@next-auth/prisma-adapter@1.0.5(@prisma/client@4.15.0)(next-auth@4.21.0):
226 | resolution: {integrity: sha512-VqMS11IxPXrPGXw6Oul6jcyS/n8GLOWzRMrPr3EMdtD6eOalM6zz05j08PcNiis8QzkfuYnCv49OvufTuaEwYQ==}
227 | peerDependencies:
228 | '@prisma/client': '>=2.26.0 || >=3'
229 | next-auth: ^4
230 | dependencies:
231 | '@prisma/client': 4.15.0(prisma@4.15.0)
232 | next-auth: 4.21.0(next@13.4.1)(react-dom@18.2.0)(react@18.2.0)
233 | dev: false
234 |
235 | /@next/env@13.4.1:
236 | resolution: {integrity: sha512-eD6WCBMFjLFooLM19SIhSkWBHtaFrZFfg2Cxnyl3vS3DAdFRfnx5TY2RxlkuKXdIRCC0ySbtK9JXXt8qLCqzZg==}
237 | dev: false
238 |
239 | /@next/eslint-plugin-next@13.4.1:
240 | resolution: {integrity: sha512-tVPS/2FKlA3ANCRCYZVT5jdbUKasBU8LG6bYqcNhyORDFTlDYa4cAWQJjZ7msIgLwMQIbL8CAsxrOL8maa/4Lg==}
241 | dependencies:
242 | glob: 7.1.7
243 | dev: true
244 |
245 | /@next/swc-darwin-arm64@13.4.1:
246 | resolution: {integrity: sha512-eF8ARHtYfnoYtDa6xFHriUKA/Mfj/cCbmKb3NofeKhMccs65G6/loZ15a6wYCCx4rPAd6x4t1WmVYtri7EdeBg==}
247 | engines: {node: '>= 10'}
248 | cpu: [arm64]
249 | os: [darwin]
250 | requiresBuild: true
251 | dev: false
252 | optional: true
253 |
254 | /@next/swc-darwin-x64@13.4.1:
255 | resolution: {integrity: sha512-7cmDgF9tGWTgn5Gw+vP17miJbH4wcraMHDCOHTYWkO/VeKT73dUWG23TNRLfgtCNSPgH4V5B4uLHoZTanx9bAw==}
256 | engines: {node: '>= 10'}
257 | cpu: [x64]
258 | os: [darwin]
259 | requiresBuild: true
260 | dev: false
261 | optional: true
262 |
263 | /@next/swc-linux-arm64-gnu@13.4.1:
264 | resolution: {integrity: sha512-qwJqmCri2ie8aTtE5gjTSr8S6O8B67KCYgVZhv9gKH44yvc/zXbAY8u23QGULsYOyh1islWE5sWfQNLOj9iryg==}
265 | engines: {node: '>= 10'}
266 | cpu: [arm64]
267 | os: [linux]
268 | requiresBuild: true
269 | dev: false
270 | optional: true
271 |
272 | /@next/swc-linux-arm64-musl@13.4.1:
273 | resolution: {integrity: sha512-qcC54tWNGDv/VVIFkazxhqH1Bnagjfs4enzELVRlUOoJPD2BGJTPI7z08pQPbbgxLtRiu8gl2mXvpB8WlOkMeA==}
274 | engines: {node: '>= 10'}
275 | cpu: [arm64]
276 | os: [linux]
277 | requiresBuild: true
278 | dev: false
279 | optional: true
280 |
281 | /@next/swc-linux-x64-gnu@13.4.1:
282 | resolution: {integrity: sha512-9TeWFlpLsBosZ+tsm/rWBaMwt5It9tPH8m3nawZqFUUrZyGRfGcI67js774vtx0k3rL9qbyY6+3pw9BCVpaYUA==}
283 | engines: {node: '>= 10'}
284 | cpu: [x64]
285 | os: [linux]
286 | requiresBuild: true
287 | dev: false
288 | optional: true
289 |
290 | /@next/swc-linux-x64-musl@13.4.1:
291 | resolution: {integrity: sha512-sNDGaWmSqTS4QRUzw61wl4mVPeSqNIr1OOjLlQTRuyInxMxtqImRqdvzDvFTlDfdeUMU/DZhWGYoHrXLlZXe6A==}
292 | engines: {node: '>= 10'}
293 | cpu: [x64]
294 | os: [linux]
295 | requiresBuild: true
296 | dev: false
297 | optional: true
298 |
299 | /@next/swc-win32-arm64-msvc@13.4.1:
300 | resolution: {integrity: sha512-+CXZC7u1iXdLRudecoUYbhbsXpglYv8KFYsFxKBPn7kg+bk7eJo738wAA4jXIl8grTF2mPdmO93JOQym+BlYGA==}
301 | engines: {node: '>= 10'}
302 | cpu: [arm64]
303 | os: [win32]
304 | requiresBuild: true
305 | dev: false
306 | optional: true
307 |
308 | /@next/swc-win32-ia32-msvc@13.4.1:
309 | resolution: {integrity: sha512-vIoXVVc7UYO68VwVMDKwJC2+HqAZQtCYiVlApyKEeIPIQpz2gpufzGxk1z3/gwrJt/kJ5CDZjlhYDCzd3hdz+g==}
310 | engines: {node: '>= 10'}
311 | cpu: [ia32]
312 | os: [win32]
313 | requiresBuild: true
314 | dev: false
315 | optional: true
316 |
317 | /@next/swc-win32-x64-msvc@13.4.1:
318 | resolution: {integrity: sha512-n8V5ImLQZibKTu10UUdI3nIeTLkliEXe628qxqW9v8My3BAH2a7H0SaCqkV2OgqFnn8sG1wxKYw9/SNJ632kSA==}
319 | engines: {node: '>= 10'}
320 | cpu: [x64]
321 | os: [win32]
322 | requiresBuild: true
323 | dev: false
324 | optional: true
325 |
326 | /@nodelib/fs.scandir@2.1.5:
327 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
328 | engines: {node: '>= 8'}
329 | dependencies:
330 | '@nodelib/fs.stat': 2.0.5
331 | run-parallel: 1.2.0
332 |
333 | /@nodelib/fs.stat@2.0.5:
334 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
335 | engines: {node: '>= 8'}
336 |
337 | /@nodelib/fs.walk@1.2.8:
338 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
339 | engines: {node: '>= 8'}
340 | dependencies:
341 | '@nodelib/fs.scandir': 2.1.5
342 | fastq: 1.15.0
343 |
344 | /@panva/hkdf@1.1.1:
345 | resolution: {integrity: sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==}
346 | dev: false
347 |
348 | /@pkgr/utils@2.4.1:
349 | resolution: {integrity: sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==}
350 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
351 | dependencies:
352 | cross-spawn: 7.0.3
353 | fast-glob: 3.2.12
354 | is-glob: 4.0.3
355 | open: 9.1.0
356 | picocolors: 1.0.0
357 | tslib: 2.5.2
358 | dev: true
359 |
360 | /@prisma/client@4.15.0(prisma@4.15.0):
361 | resolution: {integrity: sha512-xnROvyABcGiwqRNdrObHVZkD9EjkJYHOmVdlKy1yGgI+XOzvMzJ4tRg3dz1pUlsyhKxXGCnjIQjWW+2ur+YXuw==}
362 | engines: {node: '>=14.17'}
363 | requiresBuild: true
364 | peerDependencies:
365 | prisma: '*'
366 | peerDependenciesMeta:
367 | prisma:
368 | optional: true
369 | dependencies:
370 | '@prisma/engines-version': 4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944
371 | prisma: 4.15.0
372 | dev: false
373 |
374 | /@prisma/engines-version@4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944:
375 | resolution: {integrity: sha512-sVOig4tjGxxlYaFcXgE71f/rtFhzyYrfyfNFUsxCIEJyVKU9rdOWIlIwQ2NQ7PntvGnn+x0XuFo4OC1jvPJKzg==}
376 | dev: false
377 |
378 | /@prisma/engines@4.15.0:
379 | resolution: {integrity: sha512-FTaOCGs0LL0OW68juZlGxFtYviZa4xdQj/rQEdat2txw0s3Vu/saAPKjNVXfIgUsGXmQ72HPgNr6935/P8FNAA==}
380 | requiresBuild: true
381 |
382 | /@rushstack/eslint-patch@1.3.0:
383 | resolution: {integrity: sha512-IthPJsJR85GhOkp3Hvp8zFOPK5ynKn6STyHa/WZpioK7E1aYDiBzpqQPrngc14DszIUkIrdd3k9Iu0XSzlP/1w==}
384 | dev: true
385 |
386 | /@swc/helpers@0.5.1:
387 | resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==}
388 | dependencies:
389 | tslib: 2.5.2
390 | dev: false
391 |
392 | /@t3-oss/env-core@0.2.1(zod@3.21.4):
393 | resolution: {integrity: sha512-aTf/E+t0i7WsHJelg8LaynUVgIXeQdDViIr3LCL8XiE+qzE8vWoTgfc+VML/lBBgE2cbcG2VCBnk45EUCjIRdQ==}
394 | peerDependencies:
395 | zod: ^3.0.0
396 | dependencies:
397 | zod: 3.21.4
398 | dev: false
399 |
400 | /@t3-oss/env-nextjs@0.2.1(zod@3.21.4):
401 | resolution: {integrity: sha512-fWyoUHrwMz+CuO6lJ7jaWNj76LHminYzA0quYp1wv+8EKjHOuP/zf2k0FDtjnHBs//6K+kpWxttVW2Uby3SuQA==}
402 | peerDependencies:
403 | zod: ^3.0.0
404 | dependencies:
405 | '@t3-oss/env-core': 0.2.1(zod@3.21.4)
406 | zod: 3.21.4
407 | dev: false
408 |
409 | /@tailwindcss/typography@0.5.9(tailwindcss@3.3.0):
410 | resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==}
411 | peerDependencies:
412 | tailwindcss: '>=3.0.0 || insiders'
413 | dependencies:
414 | lodash.castarray: 4.4.0
415 | lodash.isplainobject: 4.0.6
416 | lodash.merge: 4.6.2
417 | postcss-selector-parser: 6.0.10
418 | tailwindcss: 3.3.0(postcss@8.4.21)
419 | dev: true
420 |
421 | /@tanstack/query-core@4.27.0:
422 | resolution: {integrity: sha512-sm+QncWaPmM73IPwFlmWSKPqjdTXZeFf/7aEmWh00z7yl2FjqophPt0dE1EHW9P1giMC5rMviv7OUbSDmWzXXA==}
423 | dev: false
424 |
425 | /@tanstack/react-query@4.28.0(react-dom@18.2.0)(react@18.2.0):
426 | resolution: {integrity: sha512-8cGBV5300RHlvYdS4ea+G1JcZIt5CIuprXYFnsWggkmGoC0b5JaqG0fIX3qwDL9PTNkKvG76NGThIWbpXivMrQ==}
427 | peerDependencies:
428 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
429 | react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
430 | react-native: '*'
431 | peerDependenciesMeta:
432 | react-dom:
433 | optional: true
434 | react-native:
435 | optional: true
436 | dependencies:
437 | '@tanstack/query-core': 4.27.0
438 | react: 18.2.0
439 | react-dom: 18.2.0(react@18.2.0)
440 | use-sync-external-store: 1.2.0(react@18.2.0)
441 | dev: false
442 |
443 | /@trpc/client@10.18.0(@trpc/server@10.18.0):
444 | resolution: {integrity: sha512-2d+6r2C/xygTjDWX9jT66defgHzbQP0Z8vrvyT3XtPjqU6JNlRNuS2ZtB8xDPdOQUUVnndzZ43BMr+Zu49K0OQ==}
445 | peerDependencies:
446 | '@trpc/server': 10.18.0
447 | dependencies:
448 | '@trpc/server': 10.18.0
449 | dev: false
450 |
451 | /@trpc/next@10.18.0(@tanstack/react-query@4.28.0)(@trpc/client@10.18.0)(@trpc/react-query@10.18.0)(@trpc/server@10.18.0)(next@13.4.1)(react-dom@18.2.0)(react@18.2.0):
452 | resolution: {integrity: sha512-GftAMy3K9AEATmsVTdc5zhCTLzSYpZ9bene7+sTlCF7QX/AMxIsd0ZUFrRnF6yg3jnxN+SvdNcF9IXeETXtGUw==}
453 | peerDependencies:
454 | '@tanstack/react-query': ^4.18.0
455 | '@trpc/client': 10.18.0
456 | '@trpc/react-query': 10.18.0
457 | '@trpc/server': 10.18.0
458 | next: '*'
459 | react: '>=16.8.0'
460 | react-dom: '>=16.8.0'
461 | dependencies:
462 | '@tanstack/react-query': 4.28.0(react-dom@18.2.0)(react@18.2.0)
463 | '@trpc/client': 10.18.0(@trpc/server@10.18.0)
464 | '@trpc/react-query': 10.18.0(@tanstack/react-query@4.28.0)(@trpc/client@10.18.0)(@trpc/server@10.18.0)(react-dom@18.2.0)(react@18.2.0)
465 | '@trpc/server': 10.18.0
466 | next: 13.4.1(react-dom@18.2.0)(react@18.2.0)
467 | react: 18.2.0
468 | react-dom: 18.2.0(react@18.2.0)
469 | react-ssr-prepass: 1.5.0(react@18.2.0)
470 | dev: false
471 |
472 | /@trpc/react-query@10.18.0(@tanstack/react-query@4.28.0)(@trpc/client@10.18.0)(@trpc/server@10.18.0)(react-dom@18.2.0)(react@18.2.0):
473 | resolution: {integrity: sha512-5IxlvBh+KY/zOYCekBXzZUHtOrURQyXNnpQg9ZlEZTiyZmivGjIyH2VQIsFsGrK8IU99GAmIReQCw6uWgQrEcQ==}
474 | peerDependencies:
475 | '@tanstack/react-query': ^4.18.0
476 | '@trpc/client': 10.18.0
477 | '@trpc/server': 10.18.0
478 | react: '>=16.8.0'
479 | react-dom: '>=16.8.0'
480 | dependencies:
481 | '@tanstack/react-query': 4.28.0(react-dom@18.2.0)(react@18.2.0)
482 | '@trpc/client': 10.18.0(@trpc/server@10.18.0)
483 | '@trpc/server': 10.18.0
484 | react: 18.2.0
485 | react-dom: 18.2.0(react@18.2.0)
486 | dev: false
487 |
488 | /@trpc/server@10.18.0:
489 | resolution: {integrity: sha512-nVMqdDIF9YLOeC3g6RdAvdCPqkHFjpshSqZGThZ+fyjiWSUXj2ZKCduhJFnY77TjtgODojeaaghmzcnjxb+Onw==}
490 | dev: false
491 |
492 | /@types/eslint@8.21.3:
493 | resolution: {integrity: sha512-fa7GkppZVEByMWGbTtE5MbmXWJTVbrjjaS8K6uQj+XtuuUv1fsuPAxhygfqLmsb/Ufb3CV8deFCpiMfAgi00Sw==}
494 | dependencies:
495 | '@types/estree': 1.0.1
496 | '@types/json-schema': 7.0.11
497 | dev: true
498 |
499 | /@types/estree@1.0.1:
500 | resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
501 | dev: true
502 |
503 | /@types/json-schema@7.0.11:
504 | resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
505 | dev: true
506 |
507 | /@types/json5@0.0.29:
508 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
509 | dev: true
510 |
511 | /@types/node@18.15.5:
512 | resolution: {integrity: sha512-Ark2WDjjZO7GmvsyFFf81MXuGTA/d6oP38anyxWOL6EREyBKAxKoFHwBhaZxCfLRLpO8JgVXwqOwSwa7jRcjew==}
513 | dev: true
514 |
515 | /@types/prettier@2.7.2:
516 | resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==}
517 | dev: true
518 |
519 | /@types/prop-types@15.7.5:
520 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
521 | dev: true
522 |
523 | /@types/react-dom@18.0.11:
524 | resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==}
525 | dependencies:
526 | '@types/react': 18.0.28
527 | dev: true
528 |
529 | /@types/react@18.0.28:
530 | resolution: {integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==}
531 | dependencies:
532 | '@types/prop-types': 15.7.5
533 | '@types/scheduler': 0.16.3
534 | csstype: 3.1.2
535 | dev: true
536 |
537 | /@types/scheduler@0.16.3:
538 | resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
539 | dev: true
540 |
541 | /@types/semver@7.5.0:
542 | resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==}
543 | dev: true
544 |
545 | /@typescript-eslint/eslint-plugin@5.56.0(@typescript-eslint/parser@5.56.0)(eslint@8.36.0)(typescript@5.0.2):
546 | resolution: {integrity: sha512-ZNW37Ccl3oMZkzxrYDUX4o7cnuPgU+YrcaYXzsRtLB16I1FR5SHMqga3zGsaSliZADCWo2v8qHWqAYIj8nWCCg==}
547 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
548 | peerDependencies:
549 | '@typescript-eslint/parser': ^5.0.0
550 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
551 | typescript: '*'
552 | peerDependenciesMeta:
553 | typescript:
554 | optional: true
555 | dependencies:
556 | '@eslint-community/regexpp': 4.5.1
557 | '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@5.0.2)
558 | '@typescript-eslint/scope-manager': 5.56.0
559 | '@typescript-eslint/type-utils': 5.56.0(eslint@8.36.0)(typescript@5.0.2)
560 | '@typescript-eslint/utils': 5.56.0(eslint@8.36.0)(typescript@5.0.2)
561 | debug: 4.3.4
562 | eslint: 8.36.0
563 | grapheme-splitter: 1.0.4
564 | ignore: 5.2.4
565 | natural-compare-lite: 1.4.0
566 | semver: 7.5.1
567 | tsutils: 3.21.0(typescript@5.0.2)
568 | typescript: 5.0.2
569 | transitivePeerDependencies:
570 | - supports-color
571 | dev: true
572 |
573 | /@typescript-eslint/parser@5.56.0(eslint@8.36.0)(typescript@5.0.2):
574 | resolution: {integrity: sha512-sn1OZmBxUsgxMmR8a8U5QM/Wl+tyqlH//jTqCg8daTAmhAk26L2PFhcqPLlYBhYUJMZJK276qLXlHN3a83o2cg==}
575 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
576 | peerDependencies:
577 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
578 | typescript: '*'
579 | peerDependenciesMeta:
580 | typescript:
581 | optional: true
582 | dependencies:
583 | '@typescript-eslint/scope-manager': 5.56.0
584 | '@typescript-eslint/types': 5.56.0
585 | '@typescript-eslint/typescript-estree': 5.56.0(typescript@5.0.2)
586 | debug: 4.3.4
587 | eslint: 8.36.0
588 | typescript: 5.0.2
589 | transitivePeerDependencies:
590 | - supports-color
591 | dev: true
592 |
593 | /@typescript-eslint/scope-manager@5.56.0:
594 | resolution: {integrity: sha512-jGYKyt+iBakD0SA5Ww8vFqGpoV2asSjwt60Gl6YcO8ksQ8s2HlUEyHBMSa38bdLopYqGf7EYQMUIGdT/Luw+sw==}
595 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
596 | dependencies:
597 | '@typescript-eslint/types': 5.56.0
598 | '@typescript-eslint/visitor-keys': 5.56.0
599 | dev: true
600 |
601 | /@typescript-eslint/type-utils@5.56.0(eslint@8.36.0)(typescript@5.0.2):
602 | resolution: {integrity: sha512-8WxgOgJjWRy6m4xg9KoSHPzBNZeQbGlQOH7l2QEhQID/+YseaFxg5J/DLwWSsi9Axj4e/cCiKx7PVzOq38tY4A==}
603 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
604 | peerDependencies:
605 | eslint: '*'
606 | typescript: '*'
607 | peerDependenciesMeta:
608 | typescript:
609 | optional: true
610 | dependencies:
611 | '@typescript-eslint/typescript-estree': 5.56.0(typescript@5.0.2)
612 | '@typescript-eslint/utils': 5.56.0(eslint@8.36.0)(typescript@5.0.2)
613 | debug: 4.3.4
614 | eslint: 8.36.0
615 | tsutils: 3.21.0(typescript@5.0.2)
616 | typescript: 5.0.2
617 | transitivePeerDependencies:
618 | - supports-color
619 | dev: true
620 |
621 | /@typescript-eslint/types@5.56.0:
622 | resolution: {integrity: sha512-JyAzbTJcIyhuUhogmiu+t79AkdnqgPUEsxMTMc/dCZczGMJQh1MK2wgrju++yMN6AWroVAy2jxyPcPr3SWCq5w==}
623 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
624 | dev: true
625 |
626 | /@typescript-eslint/typescript-estree@5.56.0(typescript@5.0.2):
627 | resolution: {integrity: sha512-41CH/GncsLXOJi0jb74SnC7jVPWeVJ0pxQj8bOjH1h2O26jXN3YHKDT1ejkVz5YeTEQPeLCCRY0U2r68tfNOcg==}
628 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
629 | peerDependencies:
630 | typescript: '*'
631 | peerDependenciesMeta:
632 | typescript:
633 | optional: true
634 | dependencies:
635 | '@typescript-eslint/types': 5.56.0
636 | '@typescript-eslint/visitor-keys': 5.56.0
637 | debug: 4.3.4
638 | globby: 11.1.0
639 | is-glob: 4.0.3
640 | semver: 7.5.1
641 | tsutils: 3.21.0(typescript@5.0.2)
642 | typescript: 5.0.2
643 | transitivePeerDependencies:
644 | - supports-color
645 | dev: true
646 |
647 | /@typescript-eslint/utils@5.56.0(eslint@8.36.0)(typescript@5.0.2):
648 | resolution: {integrity: sha512-XhZDVdLnUJNtbzaJeDSCIYaM+Tgr59gZGbFuELgF7m0IY03PlciidS7UQNKLE0+WpUTn1GlycEr6Ivb/afjbhA==}
649 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
650 | peerDependencies:
651 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
652 | dependencies:
653 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0)
654 | '@types/json-schema': 7.0.11
655 | '@types/semver': 7.5.0
656 | '@typescript-eslint/scope-manager': 5.56.0
657 | '@typescript-eslint/types': 5.56.0
658 | '@typescript-eslint/typescript-estree': 5.56.0(typescript@5.0.2)
659 | eslint: 8.36.0
660 | eslint-scope: 5.1.1
661 | semver: 7.5.1
662 | transitivePeerDependencies:
663 | - supports-color
664 | - typescript
665 | dev: true
666 |
667 | /@typescript-eslint/visitor-keys@5.56.0:
668 | resolution: {integrity: sha512-1mFdED7u5bZpX6Xxf5N9U2c18sb+8EvU3tyOIj6LQZ5OOvnmj8BVeNNP603OFPm5KkS1a7IvCIcwrdHXaEMG/Q==}
669 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
670 | dependencies:
671 | '@typescript-eslint/types': 5.56.0
672 | eslint-visitor-keys: 3.4.1
673 | dev: true
674 |
675 | /acorn-jsx@5.3.2(acorn@8.8.2):
676 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
677 | peerDependencies:
678 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
679 | dependencies:
680 | acorn: 8.8.2
681 | dev: true
682 |
683 | /acorn@8.8.2:
684 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
685 | engines: {node: '>=0.4.0'}
686 | hasBin: true
687 | dev: true
688 |
689 | /ajv@6.12.6:
690 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
691 | dependencies:
692 | fast-deep-equal: 3.1.3
693 | fast-json-stable-stringify: 2.1.0
694 | json-schema-traverse: 0.4.1
695 | uri-js: 4.4.1
696 | dev: true
697 |
698 | /ansi-regex@5.0.1:
699 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
700 | engines: {node: '>=8'}
701 | dev: true
702 |
703 | /ansi-styles@4.3.0:
704 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
705 | engines: {node: '>=8'}
706 | dependencies:
707 | color-convert: 2.0.1
708 | dev: true
709 |
710 | /any-promise@1.3.0:
711 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
712 |
713 | /anymatch@3.1.3:
714 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
715 | engines: {node: '>= 8'}
716 | dependencies:
717 | normalize-path: 3.0.0
718 | picomatch: 2.3.1
719 |
720 | /arg@5.0.2:
721 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
722 |
723 | /argparse@2.0.1:
724 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
725 | dev: true
726 |
727 | /aria-query@5.1.3:
728 | resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
729 | dependencies:
730 | deep-equal: 2.2.1
731 | dev: true
732 |
733 | /array-buffer-byte-length@1.0.0:
734 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
735 | dependencies:
736 | call-bind: 1.0.2
737 | is-array-buffer: 3.0.2
738 | dev: true
739 |
740 | /array-includes@3.1.6:
741 | resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==}
742 | engines: {node: '>= 0.4'}
743 | dependencies:
744 | call-bind: 1.0.2
745 | define-properties: 1.2.0
746 | es-abstract: 1.21.2
747 | get-intrinsic: 1.2.1
748 | is-string: 1.0.7
749 | dev: true
750 |
751 | /array-union@2.1.0:
752 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
753 | engines: {node: '>=8'}
754 | dev: true
755 |
756 | /array.prototype.flat@1.3.1:
757 | resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==}
758 | engines: {node: '>= 0.4'}
759 | dependencies:
760 | call-bind: 1.0.2
761 | define-properties: 1.2.0
762 | es-abstract: 1.21.2
763 | es-shim-unscopables: 1.0.0
764 | dev: true
765 |
766 | /array.prototype.flatmap@1.3.1:
767 | resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==}
768 | engines: {node: '>= 0.4'}
769 | dependencies:
770 | call-bind: 1.0.2
771 | define-properties: 1.2.0
772 | es-abstract: 1.21.2
773 | es-shim-unscopables: 1.0.0
774 | dev: true
775 |
776 | /array.prototype.tosorted@1.1.1:
777 | resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==}
778 | dependencies:
779 | call-bind: 1.0.2
780 | define-properties: 1.2.0
781 | es-abstract: 1.21.2
782 | es-shim-unscopables: 1.0.0
783 | get-intrinsic: 1.2.1
784 | dev: true
785 |
786 | /ast-types-flow@0.0.7:
787 | resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
788 | dev: true
789 |
790 | /autoprefixer@10.4.14(postcss@8.4.21):
791 | resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==}
792 | engines: {node: ^10 || ^12 || >=14}
793 | hasBin: true
794 | peerDependencies:
795 | postcss: ^8.1.0
796 | dependencies:
797 | browserslist: 4.21.5
798 | caniuse-lite: 1.0.30001489
799 | fraction.js: 4.2.0
800 | normalize-range: 0.1.2
801 | picocolors: 1.0.0
802 | postcss: 8.4.21
803 | postcss-value-parser: 4.2.0
804 |
805 | /available-typed-arrays@1.0.5:
806 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
807 | engines: {node: '>= 0.4'}
808 | dev: true
809 |
810 | /axe-core@4.7.1:
811 | resolution: {integrity: sha512-sCXXUhA+cljomZ3ZAwb8i1p3oOlkABzPy08ZDAoGcYuvtBPlQ1Ytde129ArXyHWDhfeewq7rlx9F+cUx2SSlkg==}
812 | engines: {node: '>=4'}
813 | dev: true
814 |
815 | /axobject-query@3.1.1:
816 | resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==}
817 | dependencies:
818 | deep-equal: 2.2.1
819 | dev: true
820 |
821 | /balanced-match@1.0.2:
822 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
823 |
824 | /big-integer@1.6.51:
825 | resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
826 | engines: {node: '>=0.6'}
827 | dev: true
828 |
829 | /binary-extensions@2.2.0:
830 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
831 | engines: {node: '>=8'}
832 |
833 | /bplist-parser@0.2.0:
834 | resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
835 | engines: {node: '>= 5.10.0'}
836 | dependencies:
837 | big-integer: 1.6.51
838 | dev: true
839 |
840 | /brace-expansion@1.1.11:
841 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
842 | dependencies:
843 | balanced-match: 1.0.2
844 | concat-map: 0.0.1
845 |
846 | /braces@3.0.2:
847 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
848 | engines: {node: '>=8'}
849 | dependencies:
850 | fill-range: 7.0.1
851 |
852 | /browserslist@4.21.5:
853 | resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==}
854 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
855 | hasBin: true
856 | dependencies:
857 | caniuse-lite: 1.0.30001489
858 | electron-to-chromium: 1.4.405
859 | node-releases: 2.0.12
860 | update-browserslist-db: 1.0.11(browserslist@4.21.5)
861 |
862 | /bundle-name@3.0.0:
863 | resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==}
864 | engines: {node: '>=12'}
865 | dependencies:
866 | run-applescript: 5.0.0
867 | dev: true
868 |
869 | /busboy@1.6.0:
870 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
871 | engines: {node: '>=10.16.0'}
872 | dependencies:
873 | streamsearch: 1.1.0
874 | dev: false
875 |
876 | /call-bind@1.0.2:
877 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
878 | dependencies:
879 | function-bind: 1.1.1
880 | get-intrinsic: 1.2.1
881 | dev: true
882 |
883 | /callsites@3.1.0:
884 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
885 | engines: {node: '>=6'}
886 | dev: true
887 |
888 | /camelcase-css@2.0.1:
889 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
890 | engines: {node: '>= 6'}
891 |
892 | /caniuse-lite@1.0.30001489:
893 | resolution: {integrity: sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ==}
894 |
895 | /chalk@4.1.2:
896 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
897 | engines: {node: '>=10'}
898 | dependencies:
899 | ansi-styles: 4.3.0
900 | supports-color: 7.2.0
901 | dev: true
902 |
903 | /chokidar@3.5.3:
904 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
905 | engines: {node: '>= 8.10.0'}
906 | dependencies:
907 | anymatch: 3.1.3
908 | braces: 3.0.2
909 | glob-parent: 5.1.2
910 | is-binary-path: 2.1.0
911 | is-glob: 4.0.3
912 | normalize-path: 3.0.0
913 | readdirp: 3.6.0
914 | optionalDependencies:
915 | fsevents: 2.3.2
916 |
917 | /client-only@0.0.1:
918 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
919 | dev: false
920 |
921 | /color-convert@2.0.1:
922 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
923 | engines: {node: '>=7.0.0'}
924 | dependencies:
925 | color-name: 1.1.4
926 |
927 | /color-name@1.1.4:
928 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
929 |
930 | /color-string@1.9.1:
931 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
932 | dependencies:
933 | color-name: 1.1.4
934 | simple-swizzle: 0.2.2
935 | dev: false
936 |
937 | /color@4.2.3:
938 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
939 | engines: {node: '>=12.5.0'}
940 | dependencies:
941 | color-convert: 2.0.1
942 | color-string: 1.9.1
943 | dev: false
944 |
945 | /commander@4.1.1:
946 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
947 | engines: {node: '>= 6'}
948 |
949 | /concat-map@0.0.1:
950 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
951 |
952 | /cookie@0.5.0:
953 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
954 | engines: {node: '>= 0.6'}
955 | dev: false
956 |
957 | /copy-anything@3.0.5:
958 | resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
959 | engines: {node: '>=12.13'}
960 | dependencies:
961 | is-what: 4.1.11
962 | dev: false
963 |
964 | /cross-spawn@7.0.3:
965 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
966 | engines: {node: '>= 8'}
967 | dependencies:
968 | path-key: 3.1.1
969 | shebang-command: 2.0.0
970 | which: 2.0.2
971 | dev: true
972 |
973 | /css-selector-tokenizer@0.8.0:
974 | resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==}
975 | dependencies:
976 | cssesc: 3.0.0
977 | fastparse: 1.1.2
978 | dev: false
979 |
980 | /cssesc@3.0.0:
981 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
982 | engines: {node: '>=4'}
983 | hasBin: true
984 |
985 | /csstype@3.1.2:
986 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
987 | dev: true
988 |
989 | /daisyui@2.51.6(autoprefixer@10.4.14)(postcss@8.4.21):
990 | resolution: {integrity: sha512-JRqOKayuFCmWe4X4k6Qvx1y7V/VNao8U5eTSOhusOKIzCsYqf56+TCSe4d7zmqGE0V6JiLDYAT8JeoWUeRKFCw==}
991 | peerDependencies:
992 | autoprefixer: ^10.0.2
993 | postcss: ^8.1.6
994 | dependencies:
995 | autoprefixer: 10.4.14(postcss@8.4.21)
996 | color: 4.2.3
997 | css-selector-tokenizer: 0.8.0
998 | postcss: 8.4.21
999 | postcss-js: 4.0.1(postcss@8.4.21)
1000 | tailwindcss: 3.3.0(postcss@8.4.21)
1001 | transitivePeerDependencies:
1002 | - ts-node
1003 | dev: false
1004 |
1005 | /damerau-levenshtein@1.0.8:
1006 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
1007 | dev: true
1008 |
1009 | /debug@3.2.7:
1010 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
1011 | peerDependencies:
1012 | supports-color: '*'
1013 | peerDependenciesMeta:
1014 | supports-color:
1015 | optional: true
1016 | dependencies:
1017 | ms: 2.1.3
1018 | dev: true
1019 |
1020 | /debug@4.3.4:
1021 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
1022 | engines: {node: '>=6.0'}
1023 | peerDependencies:
1024 | supports-color: '*'
1025 | peerDependenciesMeta:
1026 | supports-color:
1027 | optional: true
1028 | dependencies:
1029 | ms: 2.1.2
1030 | dev: true
1031 |
1032 | /deep-equal@2.2.1:
1033 | resolution: {integrity: sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==}
1034 | dependencies:
1035 | array-buffer-byte-length: 1.0.0
1036 | call-bind: 1.0.2
1037 | es-get-iterator: 1.1.3
1038 | get-intrinsic: 1.2.1
1039 | is-arguments: 1.1.1
1040 | is-array-buffer: 3.0.2
1041 | is-date-object: 1.0.5
1042 | is-regex: 1.1.4
1043 | is-shared-array-buffer: 1.0.2
1044 | isarray: 2.0.5
1045 | object-is: 1.1.5
1046 | object-keys: 1.1.1
1047 | object.assign: 4.1.4
1048 | regexp.prototype.flags: 1.5.0
1049 | side-channel: 1.0.4
1050 | which-boxed-primitive: 1.0.2
1051 | which-collection: 1.0.1
1052 | which-typed-array: 1.1.9
1053 | dev: true
1054 |
1055 | /deep-is@0.1.4:
1056 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
1057 | dev: true
1058 |
1059 | /default-browser-id@3.0.0:
1060 | resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==}
1061 | engines: {node: '>=12'}
1062 | dependencies:
1063 | bplist-parser: 0.2.0
1064 | untildify: 4.0.0
1065 | dev: true
1066 |
1067 | /default-browser@4.0.0:
1068 | resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==}
1069 | engines: {node: '>=14.16'}
1070 | dependencies:
1071 | bundle-name: 3.0.0
1072 | default-browser-id: 3.0.0
1073 | execa: 7.1.1
1074 | titleize: 3.0.0
1075 | dev: true
1076 |
1077 | /define-lazy-prop@3.0.0:
1078 | resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
1079 | engines: {node: '>=12'}
1080 | dev: true
1081 |
1082 | /define-properties@1.2.0:
1083 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
1084 | engines: {node: '>= 0.4'}
1085 | dependencies:
1086 | has-property-descriptors: 1.0.0
1087 | object-keys: 1.1.1
1088 | dev: true
1089 |
1090 | /didyoumean@1.2.2:
1091 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
1092 |
1093 | /dir-glob@3.0.1:
1094 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
1095 | engines: {node: '>=8'}
1096 | dependencies:
1097 | path-type: 4.0.0
1098 | dev: true
1099 |
1100 | /dlv@1.1.3:
1101 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
1102 |
1103 | /doctrine@2.1.0:
1104 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
1105 | engines: {node: '>=0.10.0'}
1106 | dependencies:
1107 | esutils: 2.0.3
1108 | dev: true
1109 |
1110 | /doctrine@3.0.0:
1111 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
1112 | engines: {node: '>=6.0.0'}
1113 | dependencies:
1114 | esutils: 2.0.3
1115 | dev: true
1116 |
1117 | /electron-to-chromium@1.4.405:
1118 | resolution: {integrity: sha512-JdDgnwU69FMZURoesf9gNOej2Cms1XJFfLk24y1IBtnAdhTcJY/mXnokmpmxHN59PcykBP4bgUU98vLY44Lhuw==}
1119 |
1120 | /emoji-regex@9.2.2:
1121 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
1122 | dev: true
1123 |
1124 | /enhanced-resolve@5.14.0:
1125 | resolution: {integrity: sha512-+DCows0XNwLDcUhbFJPdlQEVnT2zXlCv7hPxemTz86/O+B/hCQ+mb7ydkPKiflpVraqLPCAfu7lDy+hBXueojw==}
1126 | engines: {node: '>=10.13.0'}
1127 | dependencies:
1128 | graceful-fs: 4.2.11
1129 | tapable: 2.2.1
1130 | dev: true
1131 |
1132 | /es-abstract@1.21.2:
1133 | resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==}
1134 | engines: {node: '>= 0.4'}
1135 | dependencies:
1136 | array-buffer-byte-length: 1.0.0
1137 | available-typed-arrays: 1.0.5
1138 | call-bind: 1.0.2
1139 | es-set-tostringtag: 2.0.1
1140 | es-to-primitive: 1.2.1
1141 | function.prototype.name: 1.1.5
1142 | get-intrinsic: 1.2.1
1143 | get-symbol-description: 1.0.0
1144 | globalthis: 1.0.3
1145 | gopd: 1.0.1
1146 | has: 1.0.3
1147 | has-property-descriptors: 1.0.0
1148 | has-proto: 1.0.1
1149 | has-symbols: 1.0.3
1150 | internal-slot: 1.0.5
1151 | is-array-buffer: 3.0.2
1152 | is-callable: 1.2.7
1153 | is-negative-zero: 2.0.2
1154 | is-regex: 1.1.4
1155 | is-shared-array-buffer: 1.0.2
1156 | is-string: 1.0.7
1157 | is-typed-array: 1.1.10
1158 | is-weakref: 1.0.2
1159 | object-inspect: 1.12.3
1160 | object-keys: 1.1.1
1161 | object.assign: 4.1.4
1162 | regexp.prototype.flags: 1.5.0
1163 | safe-regex-test: 1.0.0
1164 | string.prototype.trim: 1.2.7
1165 | string.prototype.trimend: 1.0.6
1166 | string.prototype.trimstart: 1.0.6
1167 | typed-array-length: 1.0.4
1168 | unbox-primitive: 1.0.2
1169 | which-typed-array: 1.1.9
1170 | dev: true
1171 |
1172 | /es-get-iterator@1.1.3:
1173 | resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==}
1174 | dependencies:
1175 | call-bind: 1.0.2
1176 | get-intrinsic: 1.2.1
1177 | has-symbols: 1.0.3
1178 | is-arguments: 1.1.1
1179 | is-map: 2.0.2
1180 | is-set: 2.0.2
1181 | is-string: 1.0.7
1182 | isarray: 2.0.5
1183 | stop-iteration-iterator: 1.0.0
1184 | dev: true
1185 |
1186 | /es-set-tostringtag@2.0.1:
1187 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
1188 | engines: {node: '>= 0.4'}
1189 | dependencies:
1190 | get-intrinsic: 1.2.1
1191 | has: 1.0.3
1192 | has-tostringtag: 1.0.0
1193 | dev: true
1194 |
1195 | /es-shim-unscopables@1.0.0:
1196 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
1197 | dependencies:
1198 | has: 1.0.3
1199 | dev: true
1200 |
1201 | /es-to-primitive@1.2.1:
1202 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
1203 | engines: {node: '>= 0.4'}
1204 | dependencies:
1205 | is-callable: 1.2.7
1206 | is-date-object: 1.0.5
1207 | is-symbol: 1.0.4
1208 | dev: true
1209 |
1210 | /escalade@3.1.1:
1211 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
1212 | engines: {node: '>=6'}
1213 |
1214 | /escape-string-regexp@4.0.0:
1215 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1216 | engines: {node: '>=10'}
1217 | dev: true
1218 |
1219 | /eslint-config-next@13.4.1(eslint@8.36.0)(typescript@5.0.2):
1220 | resolution: {integrity: sha512-ajuxjCkW1hvirr0EQZb3/B/bFH52Z7CT89uCtTcICFL9l30i5c8hN4p0LXvTjdOXNPV5fEDcxBgGHgXdzTj1/A==}
1221 | peerDependencies:
1222 | eslint: ^7.23.0 || ^8.0.0
1223 | typescript: '>=3.3.1'
1224 | peerDependenciesMeta:
1225 | typescript:
1226 | optional: true
1227 | dependencies:
1228 | '@next/eslint-plugin-next': 13.4.1
1229 | '@rushstack/eslint-patch': 1.3.0
1230 | '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@5.0.2)
1231 | eslint: 8.36.0
1232 | eslint-import-resolver-node: 0.3.7
1233 | eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.36.0)
1234 | eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.36.0)
1235 | eslint-plugin-jsx-a11y: 6.7.1(eslint@8.36.0)
1236 | eslint-plugin-react: 7.32.2(eslint@8.36.0)
1237 | eslint-plugin-react-hooks: 4.6.0(eslint@8.36.0)
1238 | typescript: 5.0.2
1239 | transitivePeerDependencies:
1240 | - eslint-import-resolver-webpack
1241 | - supports-color
1242 | dev: true
1243 |
1244 | /eslint-import-resolver-node@0.3.7:
1245 | resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==}
1246 | dependencies:
1247 | debug: 3.2.7
1248 | is-core-module: 2.12.1
1249 | resolve: 1.22.2
1250 | transitivePeerDependencies:
1251 | - supports-color
1252 | dev: true
1253 |
1254 | /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.36.0):
1255 | resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==}
1256 | engines: {node: ^14.18.0 || >=16.0.0}
1257 | peerDependencies:
1258 | eslint: '*'
1259 | eslint-plugin-import: '*'
1260 | dependencies:
1261 | debug: 4.3.4
1262 | enhanced-resolve: 5.14.0
1263 | eslint: 8.36.0
1264 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.36.0)
1265 | eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.36.0)
1266 | get-tsconfig: 4.5.0
1267 | globby: 13.1.4
1268 | is-core-module: 2.12.1
1269 | is-glob: 4.0.3
1270 | synckit: 0.8.5
1271 | transitivePeerDependencies:
1272 | - '@typescript-eslint/parser'
1273 | - eslint-import-resolver-node
1274 | - eslint-import-resolver-webpack
1275 | - supports-color
1276 | dev: true
1277 |
1278 | /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.36.0):
1279 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
1280 | engines: {node: '>=4'}
1281 | peerDependencies:
1282 | '@typescript-eslint/parser': '*'
1283 | eslint: '*'
1284 | eslint-import-resolver-node: '*'
1285 | eslint-import-resolver-typescript: '*'
1286 | eslint-import-resolver-webpack: '*'
1287 | peerDependenciesMeta:
1288 | '@typescript-eslint/parser':
1289 | optional: true
1290 | eslint:
1291 | optional: true
1292 | eslint-import-resolver-node:
1293 | optional: true
1294 | eslint-import-resolver-typescript:
1295 | optional: true
1296 | eslint-import-resolver-webpack:
1297 | optional: true
1298 | dependencies:
1299 | '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@5.0.2)
1300 | debug: 3.2.7
1301 | eslint: 8.36.0
1302 | eslint-import-resolver-node: 0.3.7
1303 | eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.36.0)
1304 | transitivePeerDependencies:
1305 | - supports-color
1306 | dev: true
1307 |
1308 | /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.5)(eslint@8.36.0):
1309 | resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==}
1310 | engines: {node: '>=4'}
1311 | peerDependencies:
1312 | '@typescript-eslint/parser': '*'
1313 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
1314 | peerDependenciesMeta:
1315 | '@typescript-eslint/parser':
1316 | optional: true
1317 | dependencies:
1318 | '@typescript-eslint/parser': 5.56.0(eslint@8.36.0)(typescript@5.0.2)
1319 | array-includes: 3.1.6
1320 | array.prototype.flat: 1.3.1
1321 | array.prototype.flatmap: 1.3.1
1322 | debug: 3.2.7
1323 | doctrine: 2.1.0
1324 | eslint: 8.36.0
1325 | eslint-import-resolver-node: 0.3.7
1326 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.36.0)
1327 | has: 1.0.3
1328 | is-core-module: 2.12.1
1329 | is-glob: 4.0.3
1330 | minimatch: 3.1.2
1331 | object.values: 1.1.6
1332 | resolve: 1.22.2
1333 | semver: 6.3.0
1334 | tsconfig-paths: 3.14.2
1335 | transitivePeerDependencies:
1336 | - eslint-import-resolver-typescript
1337 | - eslint-import-resolver-webpack
1338 | - supports-color
1339 | dev: true
1340 |
1341 | /eslint-plugin-jsx-a11y@6.7.1(eslint@8.36.0):
1342 | resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
1343 | engines: {node: '>=4.0'}
1344 | peerDependencies:
1345 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
1346 | dependencies:
1347 | '@babel/runtime': 7.21.5
1348 | aria-query: 5.1.3
1349 | array-includes: 3.1.6
1350 | array.prototype.flatmap: 1.3.1
1351 | ast-types-flow: 0.0.7
1352 | axe-core: 4.7.1
1353 | axobject-query: 3.1.1
1354 | damerau-levenshtein: 1.0.8
1355 | emoji-regex: 9.2.2
1356 | eslint: 8.36.0
1357 | has: 1.0.3
1358 | jsx-ast-utils: 3.3.3
1359 | language-tags: 1.0.5
1360 | minimatch: 3.1.2
1361 | object.entries: 1.1.6
1362 | object.fromentries: 2.0.6
1363 | semver: 6.3.0
1364 | dev: true
1365 |
1366 | /eslint-plugin-react-hooks@4.6.0(eslint@8.36.0):
1367 | resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
1368 | engines: {node: '>=10'}
1369 | peerDependencies:
1370 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
1371 | dependencies:
1372 | eslint: 8.36.0
1373 | dev: true
1374 |
1375 | /eslint-plugin-react@7.32.2(eslint@8.36.0):
1376 | resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==}
1377 | engines: {node: '>=4'}
1378 | peerDependencies:
1379 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
1380 | dependencies:
1381 | array-includes: 3.1.6
1382 | array.prototype.flatmap: 1.3.1
1383 | array.prototype.tosorted: 1.1.1
1384 | doctrine: 2.1.0
1385 | eslint: 8.36.0
1386 | estraverse: 5.3.0
1387 | jsx-ast-utils: 3.3.3
1388 | minimatch: 3.1.2
1389 | object.entries: 1.1.6
1390 | object.fromentries: 2.0.6
1391 | object.hasown: 1.1.2
1392 | object.values: 1.1.6
1393 | prop-types: 15.8.1
1394 | resolve: 2.0.0-next.4
1395 | semver: 6.3.0
1396 | string.prototype.matchall: 4.0.8
1397 | dev: true
1398 |
1399 | /eslint-scope@5.1.1:
1400 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
1401 | engines: {node: '>=8.0.0'}
1402 | dependencies:
1403 | esrecurse: 4.3.0
1404 | estraverse: 4.3.0
1405 | dev: true
1406 |
1407 | /eslint-scope@7.2.0:
1408 | resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==}
1409 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1410 | dependencies:
1411 | esrecurse: 4.3.0
1412 | estraverse: 5.3.0
1413 | dev: true
1414 |
1415 | /eslint-visitor-keys@3.4.1:
1416 | resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==}
1417 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1418 | dev: true
1419 |
1420 | /eslint@8.36.0:
1421 | resolution: {integrity: sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==}
1422 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1423 | hasBin: true
1424 | dependencies:
1425 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.36.0)
1426 | '@eslint-community/regexpp': 4.5.1
1427 | '@eslint/eslintrc': 2.0.3
1428 | '@eslint/js': 8.36.0
1429 | '@humanwhocodes/config-array': 0.11.8
1430 | '@humanwhocodes/module-importer': 1.0.1
1431 | '@nodelib/fs.walk': 1.2.8
1432 | ajv: 6.12.6
1433 | chalk: 4.1.2
1434 | cross-spawn: 7.0.3
1435 | debug: 4.3.4
1436 | doctrine: 3.0.0
1437 | escape-string-regexp: 4.0.0
1438 | eslint-scope: 7.2.0
1439 | eslint-visitor-keys: 3.4.1
1440 | espree: 9.5.2
1441 | esquery: 1.5.0
1442 | esutils: 2.0.3
1443 | fast-deep-equal: 3.1.3
1444 | file-entry-cache: 6.0.1
1445 | find-up: 5.0.0
1446 | glob-parent: 6.0.2
1447 | globals: 13.20.0
1448 | grapheme-splitter: 1.0.4
1449 | ignore: 5.2.4
1450 | import-fresh: 3.3.0
1451 | imurmurhash: 0.1.4
1452 | is-glob: 4.0.3
1453 | is-path-inside: 3.0.3
1454 | js-sdsl: 4.4.0
1455 | js-yaml: 4.1.0
1456 | json-stable-stringify-without-jsonify: 1.0.1
1457 | levn: 0.4.1
1458 | lodash.merge: 4.6.2
1459 | minimatch: 3.1.2
1460 | natural-compare: 1.4.0
1461 | optionator: 0.9.1
1462 | strip-ansi: 6.0.1
1463 | strip-json-comments: 3.1.1
1464 | text-table: 0.2.0
1465 | transitivePeerDependencies:
1466 | - supports-color
1467 | dev: true
1468 |
1469 | /espree@9.5.2:
1470 | resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==}
1471 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1472 | dependencies:
1473 | acorn: 8.8.2
1474 | acorn-jsx: 5.3.2(acorn@8.8.2)
1475 | eslint-visitor-keys: 3.4.1
1476 | dev: true
1477 |
1478 | /esquery@1.5.0:
1479 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
1480 | engines: {node: '>=0.10'}
1481 | dependencies:
1482 | estraverse: 5.3.0
1483 | dev: true
1484 |
1485 | /esrecurse@4.3.0:
1486 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1487 | engines: {node: '>=4.0'}
1488 | dependencies:
1489 | estraverse: 5.3.0
1490 | dev: true
1491 |
1492 | /estraverse@4.3.0:
1493 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
1494 | engines: {node: '>=4.0'}
1495 | dev: true
1496 |
1497 | /estraverse@5.3.0:
1498 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1499 | engines: {node: '>=4.0'}
1500 | dev: true
1501 |
1502 | /esutils@2.0.3:
1503 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1504 | engines: {node: '>=0.10.0'}
1505 | dev: true
1506 |
1507 | /execa@5.1.1:
1508 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
1509 | engines: {node: '>=10'}
1510 | dependencies:
1511 | cross-spawn: 7.0.3
1512 | get-stream: 6.0.1
1513 | human-signals: 2.1.0
1514 | is-stream: 2.0.1
1515 | merge-stream: 2.0.0
1516 | npm-run-path: 4.0.1
1517 | onetime: 5.1.2
1518 | signal-exit: 3.0.7
1519 | strip-final-newline: 2.0.0
1520 | dev: true
1521 |
1522 | /execa@7.1.1:
1523 | resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==}
1524 | engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
1525 | dependencies:
1526 | cross-spawn: 7.0.3
1527 | get-stream: 6.0.1
1528 | human-signals: 4.3.1
1529 | is-stream: 3.0.0
1530 | merge-stream: 2.0.0
1531 | npm-run-path: 5.1.0
1532 | onetime: 6.0.0
1533 | signal-exit: 3.0.7
1534 | strip-final-newline: 3.0.0
1535 | dev: true
1536 |
1537 | /fast-deep-equal@3.1.3:
1538 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
1539 | dev: true
1540 |
1541 | /fast-glob@3.2.12:
1542 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
1543 | engines: {node: '>=8.6.0'}
1544 | dependencies:
1545 | '@nodelib/fs.stat': 2.0.5
1546 | '@nodelib/fs.walk': 1.2.8
1547 | glob-parent: 5.1.2
1548 | merge2: 1.4.1
1549 | micromatch: 4.0.5
1550 |
1551 | /fast-json-stable-stringify@2.1.0:
1552 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
1553 | dev: true
1554 |
1555 | /fast-levenshtein@2.0.6:
1556 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
1557 | dev: true
1558 |
1559 | /fastparse@1.1.2:
1560 | resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==}
1561 | dev: false
1562 |
1563 | /fastq@1.15.0:
1564 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
1565 | dependencies:
1566 | reusify: 1.0.4
1567 |
1568 | /file-entry-cache@6.0.1:
1569 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
1570 | engines: {node: ^10.12.0 || >=12.0.0}
1571 | dependencies:
1572 | flat-cache: 3.0.4
1573 | dev: true
1574 |
1575 | /fill-range@7.0.1:
1576 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
1577 | engines: {node: '>=8'}
1578 | dependencies:
1579 | to-regex-range: 5.0.1
1580 |
1581 | /find-up@5.0.0:
1582 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
1583 | engines: {node: '>=10'}
1584 | dependencies:
1585 | locate-path: 6.0.0
1586 | path-exists: 4.0.0
1587 | dev: true
1588 |
1589 | /flat-cache@3.0.4:
1590 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
1591 | engines: {node: ^10.12.0 || >=12.0.0}
1592 | dependencies:
1593 | flatted: 3.2.7
1594 | rimraf: 3.0.2
1595 | dev: true
1596 |
1597 | /flatted@3.2.7:
1598 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
1599 | dev: true
1600 |
1601 | /for-each@0.3.3:
1602 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
1603 | dependencies:
1604 | is-callable: 1.2.7
1605 | dev: true
1606 |
1607 | /fraction.js@4.2.0:
1608 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
1609 |
1610 | /fs.realpath@1.0.0:
1611 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
1612 |
1613 | /fsevents@2.3.2:
1614 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
1615 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1616 | os: [darwin]
1617 | requiresBuild: true
1618 | optional: true
1619 |
1620 | /function-bind@1.1.1:
1621 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
1622 |
1623 | /function.prototype.name@1.1.5:
1624 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==}
1625 | engines: {node: '>= 0.4'}
1626 | dependencies:
1627 | call-bind: 1.0.2
1628 | define-properties: 1.2.0
1629 | es-abstract: 1.21.2
1630 | functions-have-names: 1.2.3
1631 | dev: true
1632 |
1633 | /functions-have-names@1.2.3:
1634 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
1635 | dev: true
1636 |
1637 | /get-intrinsic@1.2.1:
1638 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
1639 | dependencies:
1640 | function-bind: 1.1.1
1641 | has: 1.0.3
1642 | has-proto: 1.0.1
1643 | has-symbols: 1.0.3
1644 | dev: true
1645 |
1646 | /get-stream@6.0.1:
1647 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
1648 | engines: {node: '>=10'}
1649 | dev: true
1650 |
1651 | /get-symbol-description@1.0.0:
1652 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
1653 | engines: {node: '>= 0.4'}
1654 | dependencies:
1655 | call-bind: 1.0.2
1656 | get-intrinsic: 1.2.1
1657 | dev: true
1658 |
1659 | /get-tsconfig@4.5.0:
1660 | resolution: {integrity: sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==}
1661 | dev: true
1662 |
1663 | /glob-parent@5.1.2:
1664 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1665 | engines: {node: '>= 6'}
1666 | dependencies:
1667 | is-glob: 4.0.3
1668 |
1669 | /glob-parent@6.0.2:
1670 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
1671 | engines: {node: '>=10.13.0'}
1672 | dependencies:
1673 | is-glob: 4.0.3
1674 |
1675 | /glob@7.1.6:
1676 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
1677 | dependencies:
1678 | fs.realpath: 1.0.0
1679 | inflight: 1.0.6
1680 | inherits: 2.0.4
1681 | minimatch: 3.1.2
1682 | once: 1.4.0
1683 | path-is-absolute: 1.0.1
1684 |
1685 | /glob@7.1.7:
1686 | resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
1687 | dependencies:
1688 | fs.realpath: 1.0.0
1689 | inflight: 1.0.6
1690 | inherits: 2.0.4
1691 | minimatch: 3.1.2
1692 | once: 1.4.0
1693 | path-is-absolute: 1.0.1
1694 | dev: true
1695 |
1696 | /glob@7.2.3:
1697 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
1698 | dependencies:
1699 | fs.realpath: 1.0.0
1700 | inflight: 1.0.6
1701 | inherits: 2.0.4
1702 | minimatch: 3.1.2
1703 | once: 1.4.0
1704 | path-is-absolute: 1.0.1
1705 | dev: true
1706 |
1707 | /globals@13.20.0:
1708 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
1709 | engines: {node: '>=8'}
1710 | dependencies:
1711 | type-fest: 0.20.2
1712 | dev: true
1713 |
1714 | /globalthis@1.0.3:
1715 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
1716 | engines: {node: '>= 0.4'}
1717 | dependencies:
1718 | define-properties: 1.2.0
1719 | dev: true
1720 |
1721 | /globby@11.1.0:
1722 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1723 | engines: {node: '>=10'}
1724 | dependencies:
1725 | array-union: 2.1.0
1726 | dir-glob: 3.0.1
1727 | fast-glob: 3.2.12
1728 | ignore: 5.2.4
1729 | merge2: 1.4.1
1730 | slash: 3.0.0
1731 | dev: true
1732 |
1733 | /globby@13.1.4:
1734 | resolution: {integrity: sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==}
1735 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1736 | dependencies:
1737 | dir-glob: 3.0.1
1738 | fast-glob: 3.2.12
1739 | ignore: 5.2.4
1740 | merge2: 1.4.1
1741 | slash: 4.0.0
1742 | dev: true
1743 |
1744 | /gopd@1.0.1:
1745 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
1746 | dependencies:
1747 | get-intrinsic: 1.2.1
1748 | dev: true
1749 |
1750 | /graceful-fs@4.2.11:
1751 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1752 | dev: true
1753 |
1754 | /grapheme-splitter@1.0.4:
1755 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==}
1756 | dev: true
1757 |
1758 | /has-bigints@1.0.2:
1759 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
1760 | dev: true
1761 |
1762 | /has-flag@4.0.0:
1763 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
1764 | engines: {node: '>=8'}
1765 | dev: true
1766 |
1767 | /has-property-descriptors@1.0.0:
1768 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
1769 | dependencies:
1770 | get-intrinsic: 1.2.1
1771 | dev: true
1772 |
1773 | /has-proto@1.0.1:
1774 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
1775 | engines: {node: '>= 0.4'}
1776 | dev: true
1777 |
1778 | /has-symbols@1.0.3:
1779 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
1780 | engines: {node: '>= 0.4'}
1781 | dev: true
1782 |
1783 | /has-tostringtag@1.0.0:
1784 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
1785 | engines: {node: '>= 0.4'}
1786 | dependencies:
1787 | has-symbols: 1.0.3
1788 | dev: true
1789 |
1790 | /has@1.0.3:
1791 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
1792 | engines: {node: '>= 0.4.0'}
1793 | dependencies:
1794 | function-bind: 1.1.1
1795 |
1796 | /headlessui@0.0.0:
1797 | resolution: {integrity: sha512-CHvacVPbl8AqIg2sBNKySUmumu7o15jSrCaTrIh9GW2Eq4y/krCN/vZFOsKCwlrhWQbO4267a8xvvP8bs+qREQ==}
1798 | dev: false
1799 |
1800 | /human-signals@2.1.0:
1801 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
1802 | engines: {node: '>=10.17.0'}
1803 | dev: true
1804 |
1805 | /human-signals@4.3.1:
1806 | resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
1807 | engines: {node: '>=14.18.0'}
1808 | dev: true
1809 |
1810 | /ignore@5.2.4:
1811 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
1812 | engines: {node: '>= 4'}
1813 | dev: true
1814 |
1815 | /import-fresh@3.3.0:
1816 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
1817 | engines: {node: '>=6'}
1818 | dependencies:
1819 | parent-module: 1.0.1
1820 | resolve-from: 4.0.0
1821 | dev: true
1822 |
1823 | /imurmurhash@0.1.4:
1824 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
1825 | engines: {node: '>=0.8.19'}
1826 | dev: true
1827 |
1828 | /inflight@1.0.6:
1829 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
1830 | dependencies:
1831 | once: 1.4.0
1832 | wrappy: 1.0.2
1833 |
1834 | /inherits@2.0.4:
1835 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
1836 |
1837 | /internal-slot@1.0.5:
1838 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
1839 | engines: {node: '>= 0.4'}
1840 | dependencies:
1841 | get-intrinsic: 1.2.1
1842 | has: 1.0.3
1843 | side-channel: 1.0.4
1844 | dev: true
1845 |
1846 | /is-arguments@1.1.1:
1847 | resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
1848 | engines: {node: '>= 0.4'}
1849 | dependencies:
1850 | call-bind: 1.0.2
1851 | has-tostringtag: 1.0.0
1852 | dev: true
1853 |
1854 | /is-array-buffer@3.0.2:
1855 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
1856 | dependencies:
1857 | call-bind: 1.0.2
1858 | get-intrinsic: 1.2.1
1859 | is-typed-array: 1.1.10
1860 | dev: true
1861 |
1862 | /is-arrayish@0.3.2:
1863 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
1864 | dev: false
1865 |
1866 | /is-bigint@1.0.4:
1867 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
1868 | dependencies:
1869 | has-bigints: 1.0.2
1870 | dev: true
1871 |
1872 | /is-binary-path@2.1.0:
1873 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
1874 | engines: {node: '>=8'}
1875 | dependencies:
1876 | binary-extensions: 2.2.0
1877 |
1878 | /is-boolean-object@1.1.2:
1879 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
1880 | engines: {node: '>= 0.4'}
1881 | dependencies:
1882 | call-bind: 1.0.2
1883 | has-tostringtag: 1.0.0
1884 | dev: true
1885 |
1886 | /is-callable@1.2.7:
1887 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
1888 | engines: {node: '>= 0.4'}
1889 | dev: true
1890 |
1891 | /is-core-module@2.12.1:
1892 | resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==}
1893 | dependencies:
1894 | has: 1.0.3
1895 |
1896 | /is-date-object@1.0.5:
1897 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
1898 | engines: {node: '>= 0.4'}
1899 | dependencies:
1900 | has-tostringtag: 1.0.0
1901 | dev: true
1902 |
1903 | /is-docker@2.2.1:
1904 | resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
1905 | engines: {node: '>=8'}
1906 | hasBin: true
1907 | dev: true
1908 |
1909 | /is-docker@3.0.0:
1910 | resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
1911 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1912 | hasBin: true
1913 | dev: true
1914 |
1915 | /is-extglob@2.1.1:
1916 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1917 | engines: {node: '>=0.10.0'}
1918 |
1919 | /is-glob@4.0.3:
1920 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1921 | engines: {node: '>=0.10.0'}
1922 | dependencies:
1923 | is-extglob: 2.1.1
1924 |
1925 | /is-inside-container@1.0.0:
1926 | resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
1927 | engines: {node: '>=14.16'}
1928 | hasBin: true
1929 | dependencies:
1930 | is-docker: 3.0.0
1931 | dev: true
1932 |
1933 | /is-map@2.0.2:
1934 | resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
1935 | dev: true
1936 |
1937 | /is-negative-zero@2.0.2:
1938 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
1939 | engines: {node: '>= 0.4'}
1940 | dev: true
1941 |
1942 | /is-number-object@1.0.7:
1943 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
1944 | engines: {node: '>= 0.4'}
1945 | dependencies:
1946 | has-tostringtag: 1.0.0
1947 | dev: true
1948 |
1949 | /is-number@7.0.0:
1950 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1951 | engines: {node: '>=0.12.0'}
1952 |
1953 | /is-path-inside@3.0.3:
1954 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
1955 | engines: {node: '>=8'}
1956 | dev: true
1957 |
1958 | /is-regex@1.1.4:
1959 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
1960 | engines: {node: '>= 0.4'}
1961 | dependencies:
1962 | call-bind: 1.0.2
1963 | has-tostringtag: 1.0.0
1964 | dev: true
1965 |
1966 | /is-set@2.0.2:
1967 | resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
1968 | dev: true
1969 |
1970 | /is-shared-array-buffer@1.0.2:
1971 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
1972 | dependencies:
1973 | call-bind: 1.0.2
1974 | dev: true
1975 |
1976 | /is-stream@2.0.1:
1977 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
1978 | engines: {node: '>=8'}
1979 | dev: true
1980 |
1981 | /is-stream@3.0.0:
1982 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
1983 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1984 | dev: true
1985 |
1986 | /is-string@1.0.7:
1987 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
1988 | engines: {node: '>= 0.4'}
1989 | dependencies:
1990 | has-tostringtag: 1.0.0
1991 | dev: true
1992 |
1993 | /is-symbol@1.0.4:
1994 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
1995 | engines: {node: '>= 0.4'}
1996 | dependencies:
1997 | has-symbols: 1.0.3
1998 | dev: true
1999 |
2000 | /is-typed-array@1.1.10:
2001 | resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==}
2002 | engines: {node: '>= 0.4'}
2003 | dependencies:
2004 | available-typed-arrays: 1.0.5
2005 | call-bind: 1.0.2
2006 | for-each: 0.3.3
2007 | gopd: 1.0.1
2008 | has-tostringtag: 1.0.0
2009 | dev: true
2010 |
2011 | /is-weakmap@2.0.1:
2012 | resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
2013 | dev: true
2014 |
2015 | /is-weakref@1.0.2:
2016 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
2017 | dependencies:
2018 | call-bind: 1.0.2
2019 | dev: true
2020 |
2021 | /is-weakset@2.0.2:
2022 | resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
2023 | dependencies:
2024 | call-bind: 1.0.2
2025 | get-intrinsic: 1.2.1
2026 | dev: true
2027 |
2028 | /is-what@4.1.11:
2029 | resolution: {integrity: sha512-gr9+qDrJvdwT4+N2TAACsZQIB4Ow9j2eefqlh3m9JUV41M1LoKhcE+/j+IVni/r6U8Jnc1PwhjdjVJr+Xmtb0A==}
2030 | engines: {node: '>=12.13'}
2031 | dev: false
2032 |
2033 | /is-wsl@2.2.0:
2034 | resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
2035 | engines: {node: '>=8'}
2036 | dependencies:
2037 | is-docker: 2.2.1
2038 | dev: true
2039 |
2040 | /isarray@2.0.5:
2041 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
2042 | dev: true
2043 |
2044 | /isexe@2.0.0:
2045 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
2046 | dev: true
2047 |
2048 | /jiti@1.18.2:
2049 | resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==}
2050 | hasBin: true
2051 |
2052 | /jose@4.14.4:
2053 | resolution: {integrity: sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==}
2054 | dev: false
2055 |
2056 | /js-sdsl@4.4.0:
2057 | resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==}
2058 | dev: true
2059 |
2060 | /js-tokens@4.0.0:
2061 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
2062 |
2063 | /js-yaml@4.1.0:
2064 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
2065 | hasBin: true
2066 | dependencies:
2067 | argparse: 2.0.1
2068 | dev: true
2069 |
2070 | /json-schema-traverse@0.4.1:
2071 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
2072 | dev: true
2073 |
2074 | /json-stable-stringify-without-jsonify@1.0.1:
2075 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
2076 | dev: true
2077 |
2078 | /json5@1.0.2:
2079 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
2080 | hasBin: true
2081 | dependencies:
2082 | minimist: 1.2.8
2083 | dev: true
2084 |
2085 | /jsx-ast-utils@3.3.3:
2086 | resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==}
2087 | engines: {node: '>=4.0'}
2088 | dependencies:
2089 | array-includes: 3.1.6
2090 | object.assign: 4.1.4
2091 | dev: true
2092 |
2093 | /language-subtag-registry@0.3.22:
2094 | resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
2095 | dev: true
2096 |
2097 | /language-tags@1.0.5:
2098 | resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==}
2099 | dependencies:
2100 | language-subtag-registry: 0.3.22
2101 | dev: true
2102 |
2103 | /levn@0.4.1:
2104 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
2105 | engines: {node: '>= 0.8.0'}
2106 | dependencies:
2107 | prelude-ls: 1.2.1
2108 | type-check: 0.4.0
2109 | dev: true
2110 |
2111 | /lilconfig@2.1.0:
2112 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
2113 | engines: {node: '>=10'}
2114 |
2115 | /lines-and-columns@1.2.4:
2116 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
2117 |
2118 | /locate-path@6.0.0:
2119 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
2120 | engines: {node: '>=10'}
2121 | dependencies:
2122 | p-locate: 5.0.0
2123 | dev: true
2124 |
2125 | /lodash.castarray@4.4.0:
2126 | resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
2127 | dev: true
2128 |
2129 | /lodash.isplainobject@4.0.6:
2130 | resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
2131 | dev: true
2132 |
2133 | /lodash.merge@4.6.2:
2134 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
2135 | dev: true
2136 |
2137 | /loose-envify@1.4.0:
2138 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
2139 | hasBin: true
2140 | dependencies:
2141 | js-tokens: 4.0.0
2142 |
2143 | /lru-cache@6.0.0:
2144 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
2145 | engines: {node: '>=10'}
2146 | dependencies:
2147 | yallist: 4.0.0
2148 |
2149 | /merge-stream@2.0.0:
2150 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
2151 | dev: true
2152 |
2153 | /merge2@1.4.1:
2154 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
2155 | engines: {node: '>= 8'}
2156 |
2157 | /micromatch@4.0.5:
2158 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
2159 | engines: {node: '>=8.6'}
2160 | dependencies:
2161 | braces: 3.0.2
2162 | picomatch: 2.3.1
2163 |
2164 | /mimic-fn@2.1.0:
2165 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
2166 | engines: {node: '>=6'}
2167 | dev: true
2168 |
2169 | /mimic-fn@4.0.0:
2170 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
2171 | engines: {node: '>=12'}
2172 | dev: true
2173 |
2174 | /minimatch@3.1.2:
2175 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
2176 | dependencies:
2177 | brace-expansion: 1.1.11
2178 |
2179 | /minimist@1.2.8:
2180 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
2181 | dev: true
2182 |
2183 | /ms@2.1.2:
2184 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
2185 | dev: true
2186 |
2187 | /ms@2.1.3:
2188 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
2189 | dev: true
2190 |
2191 | /mz@2.7.0:
2192 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
2193 | dependencies:
2194 | any-promise: 1.3.0
2195 | object-assign: 4.1.1
2196 | thenify-all: 1.6.0
2197 |
2198 | /nanoid@3.3.6:
2199 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
2200 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
2201 | hasBin: true
2202 |
2203 | /natural-compare-lite@1.4.0:
2204 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==}
2205 | dev: true
2206 |
2207 | /natural-compare@1.4.0:
2208 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
2209 | dev: true
2210 |
2211 | /next-auth@4.21.0(next@13.4.1)(react-dom@18.2.0)(react@18.2.0):
2212 | resolution: {integrity: sha512-KbqFQAPG5GVqszrjMFv5LXAkpmG1hs9sOkC6T+DshmfJ8COm3y/rIdIw9nEEZ17lqZNXy2/1+mVmwVDrPbLeng==}
2213 | peerDependencies:
2214 | next: ^12.2.5 || ^13
2215 | nodemailer: ^6.6.5
2216 | react: ^17.0.2 || ^18
2217 | react-dom: ^17.0.2 || ^18
2218 | peerDependenciesMeta:
2219 | nodemailer:
2220 | optional: true
2221 | dependencies:
2222 | '@babel/runtime': 7.21.5
2223 | '@panva/hkdf': 1.1.1
2224 | cookie: 0.5.0
2225 | jose: 4.14.4
2226 | next: 13.4.1(react-dom@18.2.0)(react@18.2.0)
2227 | oauth: 0.9.15
2228 | openid-client: 5.4.2
2229 | preact: 10.15.0
2230 | preact-render-to-string: 5.2.6(preact@10.15.0)
2231 | react: 18.2.0
2232 | react-dom: 18.2.0(react@18.2.0)
2233 | uuid: 8.3.2
2234 | dev: false
2235 |
2236 | /next@13.4.1(react-dom@18.2.0)(react@18.2.0):
2237 | resolution: {integrity: sha512-JBw2kAIyhKDpjhEWvNVoFeIzNp9xNxg8wrthDOtMctfn3EpqGCmW0FSviNyGgOSOSn6zDaX48pmvbdf6X2W9xA==}
2238 | engines: {node: '>=16.8.0'}
2239 | hasBin: true
2240 | peerDependencies:
2241 | '@opentelemetry/api': ^1.1.0
2242 | fibers: '>= 3.1.0'
2243 | node-sass: ^6.0.0 || ^7.0.0
2244 | react: ^18.2.0
2245 | react-dom: ^18.2.0
2246 | sass: ^1.3.0
2247 | peerDependenciesMeta:
2248 | '@opentelemetry/api':
2249 | optional: true
2250 | fibers:
2251 | optional: true
2252 | node-sass:
2253 | optional: true
2254 | sass:
2255 | optional: true
2256 | dependencies:
2257 | '@next/env': 13.4.1
2258 | '@swc/helpers': 0.5.1
2259 | busboy: 1.6.0
2260 | caniuse-lite: 1.0.30001489
2261 | postcss: 8.4.14
2262 | react: 18.2.0
2263 | react-dom: 18.2.0(react@18.2.0)
2264 | styled-jsx: 5.1.1(react@18.2.0)
2265 | zod: 3.21.4
2266 | optionalDependencies:
2267 | '@next/swc-darwin-arm64': 13.4.1
2268 | '@next/swc-darwin-x64': 13.4.1
2269 | '@next/swc-linux-arm64-gnu': 13.4.1
2270 | '@next/swc-linux-arm64-musl': 13.4.1
2271 | '@next/swc-linux-x64-gnu': 13.4.1
2272 | '@next/swc-linux-x64-musl': 13.4.1
2273 | '@next/swc-win32-arm64-msvc': 13.4.1
2274 | '@next/swc-win32-ia32-msvc': 13.4.1
2275 | '@next/swc-win32-x64-msvc': 13.4.1
2276 | transitivePeerDependencies:
2277 | - '@babel/core'
2278 | - babel-plugin-macros
2279 | dev: false
2280 |
2281 | /node-releases@2.0.12:
2282 | resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==}
2283 |
2284 | /normalize-path@3.0.0:
2285 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
2286 | engines: {node: '>=0.10.0'}
2287 |
2288 | /normalize-range@0.1.2:
2289 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
2290 | engines: {node: '>=0.10.0'}
2291 |
2292 | /npm-run-path@4.0.1:
2293 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
2294 | engines: {node: '>=8'}
2295 | dependencies:
2296 | path-key: 3.1.1
2297 | dev: true
2298 |
2299 | /npm-run-path@5.1.0:
2300 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
2301 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2302 | dependencies:
2303 | path-key: 4.0.0
2304 | dev: true
2305 |
2306 | /oauth@0.9.15:
2307 | resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==}
2308 | dev: false
2309 |
2310 | /object-assign@4.1.1:
2311 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
2312 | engines: {node: '>=0.10.0'}
2313 |
2314 | /object-hash@2.2.0:
2315 | resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==}
2316 | engines: {node: '>= 6'}
2317 | dev: false
2318 |
2319 | /object-hash@3.0.0:
2320 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
2321 | engines: {node: '>= 6'}
2322 |
2323 | /object-inspect@1.12.3:
2324 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
2325 | dev: true
2326 |
2327 | /object-is@1.1.5:
2328 | resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==}
2329 | engines: {node: '>= 0.4'}
2330 | dependencies:
2331 | call-bind: 1.0.2
2332 | define-properties: 1.2.0
2333 | dev: true
2334 |
2335 | /object-keys@1.1.1:
2336 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
2337 | engines: {node: '>= 0.4'}
2338 | dev: true
2339 |
2340 | /object.assign@4.1.4:
2341 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
2342 | engines: {node: '>= 0.4'}
2343 | dependencies:
2344 | call-bind: 1.0.2
2345 | define-properties: 1.2.0
2346 | has-symbols: 1.0.3
2347 | object-keys: 1.1.1
2348 | dev: true
2349 |
2350 | /object.entries@1.1.6:
2351 | resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==}
2352 | engines: {node: '>= 0.4'}
2353 | dependencies:
2354 | call-bind: 1.0.2
2355 | define-properties: 1.2.0
2356 | es-abstract: 1.21.2
2357 | dev: true
2358 |
2359 | /object.fromentries@2.0.6:
2360 | resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==}
2361 | engines: {node: '>= 0.4'}
2362 | dependencies:
2363 | call-bind: 1.0.2
2364 | define-properties: 1.2.0
2365 | es-abstract: 1.21.2
2366 | dev: true
2367 |
2368 | /object.hasown@1.1.2:
2369 | resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==}
2370 | dependencies:
2371 | define-properties: 1.2.0
2372 | es-abstract: 1.21.2
2373 | dev: true
2374 |
2375 | /object.values@1.1.6:
2376 | resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==}
2377 | engines: {node: '>= 0.4'}
2378 | dependencies:
2379 | call-bind: 1.0.2
2380 | define-properties: 1.2.0
2381 | es-abstract: 1.21.2
2382 | dev: true
2383 |
2384 | /oidc-token-hash@5.0.3:
2385 | resolution: {integrity: sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==}
2386 | engines: {node: ^10.13.0 || >=12.0.0}
2387 | dev: false
2388 |
2389 | /once@1.4.0:
2390 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
2391 | dependencies:
2392 | wrappy: 1.0.2
2393 |
2394 | /onetime@5.1.2:
2395 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
2396 | engines: {node: '>=6'}
2397 | dependencies:
2398 | mimic-fn: 2.1.0
2399 | dev: true
2400 |
2401 | /onetime@6.0.0:
2402 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
2403 | engines: {node: '>=12'}
2404 | dependencies:
2405 | mimic-fn: 4.0.0
2406 | dev: true
2407 |
2408 | /open@9.1.0:
2409 | resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==}
2410 | engines: {node: '>=14.16'}
2411 | dependencies:
2412 | default-browser: 4.0.0
2413 | define-lazy-prop: 3.0.0
2414 | is-inside-container: 1.0.0
2415 | is-wsl: 2.2.0
2416 | dev: true
2417 |
2418 | /openid-client@5.4.2:
2419 | resolution: {integrity: sha512-lIhsdPvJ2RneBm3nGBBhQchpe3Uka//xf7WPHTIglery8gnckvW7Bd9IaQzekzXJvWthCMyi/xVEyGW0RFPytw==}
2420 | dependencies:
2421 | jose: 4.14.4
2422 | lru-cache: 6.0.0
2423 | object-hash: 2.2.0
2424 | oidc-token-hash: 5.0.3
2425 | dev: false
2426 |
2427 | /optionator@0.9.1:
2428 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==}
2429 | engines: {node: '>= 0.8.0'}
2430 | dependencies:
2431 | deep-is: 0.1.4
2432 | fast-levenshtein: 2.0.6
2433 | levn: 0.4.1
2434 | prelude-ls: 1.2.1
2435 | type-check: 0.4.0
2436 | word-wrap: 1.2.3
2437 | dev: true
2438 |
2439 | /p-limit@3.1.0:
2440 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
2441 | engines: {node: '>=10'}
2442 | dependencies:
2443 | yocto-queue: 0.1.0
2444 | dev: true
2445 |
2446 | /p-locate@5.0.0:
2447 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
2448 | engines: {node: '>=10'}
2449 | dependencies:
2450 | p-limit: 3.1.0
2451 | dev: true
2452 |
2453 | /parent-module@1.0.1:
2454 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
2455 | engines: {node: '>=6'}
2456 | dependencies:
2457 | callsites: 3.1.0
2458 | dev: true
2459 |
2460 | /path-exists@4.0.0:
2461 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
2462 | engines: {node: '>=8'}
2463 | dev: true
2464 |
2465 | /path-is-absolute@1.0.1:
2466 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
2467 | engines: {node: '>=0.10.0'}
2468 |
2469 | /path-key@3.1.1:
2470 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
2471 | engines: {node: '>=8'}
2472 | dev: true
2473 |
2474 | /path-key@4.0.0:
2475 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
2476 | engines: {node: '>=12'}
2477 | dev: true
2478 |
2479 | /path-parse@1.0.7:
2480 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
2481 |
2482 | /path-type@4.0.0:
2483 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
2484 | engines: {node: '>=8'}
2485 | dev: true
2486 |
2487 | /picocolors@1.0.0:
2488 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
2489 |
2490 | /picomatch@2.3.1:
2491 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
2492 | engines: {node: '>=8.6'}
2493 |
2494 | /pify@2.3.0:
2495 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
2496 | engines: {node: '>=0.10.0'}
2497 |
2498 | /pirates@4.0.5:
2499 | resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==}
2500 | engines: {node: '>= 6'}
2501 |
2502 | /postcss-import@14.1.0(postcss@8.4.21):
2503 | resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==}
2504 | engines: {node: '>=10.0.0'}
2505 | peerDependencies:
2506 | postcss: ^8.0.0
2507 | dependencies:
2508 | postcss: 8.4.21
2509 | postcss-value-parser: 4.2.0
2510 | read-cache: 1.0.0
2511 | resolve: 1.22.2
2512 |
2513 | /postcss-js@4.0.1(postcss@8.4.21):
2514 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
2515 | engines: {node: ^12 || ^14 || >= 16}
2516 | peerDependencies:
2517 | postcss: ^8.4.21
2518 | dependencies:
2519 | camelcase-css: 2.0.1
2520 | postcss: 8.4.21
2521 |
2522 | /postcss-load-config@3.1.4(postcss@8.4.21):
2523 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
2524 | engines: {node: '>= 10'}
2525 | peerDependencies:
2526 | postcss: '>=8.0.9'
2527 | ts-node: '>=9.0.0'
2528 | peerDependenciesMeta:
2529 | postcss:
2530 | optional: true
2531 | ts-node:
2532 | optional: true
2533 | dependencies:
2534 | lilconfig: 2.1.0
2535 | postcss: 8.4.21
2536 | yaml: 1.10.2
2537 |
2538 | /postcss-nested@6.0.0(postcss@8.4.21):
2539 | resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==}
2540 | engines: {node: '>=12.0'}
2541 | peerDependencies:
2542 | postcss: ^8.2.14
2543 | dependencies:
2544 | postcss: 8.4.21
2545 | postcss-selector-parser: 6.0.13
2546 |
2547 | /postcss-selector-parser@6.0.10:
2548 | resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
2549 | engines: {node: '>=4'}
2550 | dependencies:
2551 | cssesc: 3.0.0
2552 | util-deprecate: 1.0.2
2553 | dev: true
2554 |
2555 | /postcss-selector-parser@6.0.13:
2556 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
2557 | engines: {node: '>=4'}
2558 | dependencies:
2559 | cssesc: 3.0.0
2560 | util-deprecate: 1.0.2
2561 |
2562 | /postcss-value-parser@4.2.0:
2563 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
2564 |
2565 | /postcss@8.4.14:
2566 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
2567 | engines: {node: ^10 || ^12 || >=14}
2568 | dependencies:
2569 | nanoid: 3.3.6
2570 | picocolors: 1.0.0
2571 | source-map-js: 1.0.2
2572 | dev: false
2573 |
2574 | /postcss@8.4.21:
2575 | resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
2576 | engines: {node: ^10 || ^12 || >=14}
2577 | dependencies:
2578 | nanoid: 3.3.6
2579 | picocolors: 1.0.0
2580 | source-map-js: 1.0.2
2581 |
2582 | /preact-render-to-string@5.2.6(preact@10.15.0):
2583 | resolution: {integrity: sha512-JyhErpYOvBV1hEPwIxc/fHWXPfnEGdRKxc8gFdAZ7XV4tlzyzG847XAyEZqoDnynP88akM4eaHcSOzNcLWFguw==}
2584 | peerDependencies:
2585 | preact: '>=10'
2586 | dependencies:
2587 | preact: 10.15.0
2588 | pretty-format: 3.8.0
2589 | dev: false
2590 |
2591 | /preact@10.15.0:
2592 | resolution: {integrity: sha512-nZSa8M2R2m1n7nJSBlzDpxRJaIsejrTO1vlFbdpFvyC8qM1iU+On2y0otfoUm6SRB5o0lF0CKDFxg6grEFU0iQ==}
2593 | dev: false
2594 |
2595 | /prelude-ls@1.2.1:
2596 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
2597 | engines: {node: '>= 0.8.0'}
2598 | dev: true
2599 |
2600 | /prettier-plugin-tailwindcss@0.2.6(prettier@2.8.6):
2601 | resolution: {integrity: sha512-F+7XCl9RLF/LPrGdUMHWpsT6TM31JraonAUyE6eBmpqymFvDwyl0ETHsKFHP1NG+sEfv8bmKqnTxEbWQbHPlBA==}
2602 | engines: {node: '>=12.17.0'}
2603 | peerDependencies:
2604 | '@ianvs/prettier-plugin-sort-imports': '*'
2605 | '@prettier/plugin-php': '*'
2606 | '@prettier/plugin-pug': '*'
2607 | '@shopify/prettier-plugin-liquid': '*'
2608 | '@shufo/prettier-plugin-blade': '*'
2609 | '@trivago/prettier-plugin-sort-imports': '*'
2610 | prettier: '>=2.2.0'
2611 | prettier-plugin-astro: '*'
2612 | prettier-plugin-css-order: '*'
2613 | prettier-plugin-import-sort: '*'
2614 | prettier-plugin-jsdoc: '*'
2615 | prettier-plugin-organize-attributes: '*'
2616 | prettier-plugin-organize-imports: '*'
2617 | prettier-plugin-style-order: '*'
2618 | prettier-plugin-svelte: '*'
2619 | prettier-plugin-twig-melody: '*'
2620 | peerDependenciesMeta:
2621 | '@ianvs/prettier-plugin-sort-imports':
2622 | optional: true
2623 | '@prettier/plugin-php':
2624 | optional: true
2625 | '@prettier/plugin-pug':
2626 | optional: true
2627 | '@shopify/prettier-plugin-liquid':
2628 | optional: true
2629 | '@shufo/prettier-plugin-blade':
2630 | optional: true
2631 | '@trivago/prettier-plugin-sort-imports':
2632 | optional: true
2633 | prettier-plugin-astro:
2634 | optional: true
2635 | prettier-plugin-css-order:
2636 | optional: true
2637 | prettier-plugin-import-sort:
2638 | optional: true
2639 | prettier-plugin-jsdoc:
2640 | optional: true
2641 | prettier-plugin-organize-attributes:
2642 | optional: true
2643 | prettier-plugin-organize-imports:
2644 | optional: true
2645 | prettier-plugin-style-order:
2646 | optional: true
2647 | prettier-plugin-svelte:
2648 | optional: true
2649 | prettier-plugin-twig-melody:
2650 | optional: true
2651 | dependencies:
2652 | prettier: 2.8.6
2653 | dev: true
2654 |
2655 | /prettier@2.8.6:
2656 | resolution: {integrity: sha512-mtuzdiBbHwPEgl7NxWlqOkithPyp4VN93V7VeHVWBF+ad3I5avc0RVDT4oImXQy9H/AqxA2NSQH8pSxHW6FYbQ==}
2657 | engines: {node: '>=10.13.0'}
2658 | hasBin: true
2659 | dev: true
2660 |
2661 | /pretty-format@3.8.0:
2662 | resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==}
2663 | dev: false
2664 |
2665 | /prisma@4.15.0:
2666 | resolution: {integrity: sha512-iKZZpobPl48gTcSZVawLMQ3lEy6BnXwtoMj7hluoGFYu2kQ6F9LBuBrUyF95zRVnNo8/3KzLXJXJ5TEnLSJFiA==}
2667 | engines: {node: '>=14.17'}
2668 | hasBin: true
2669 | requiresBuild: true
2670 | dependencies:
2671 | '@prisma/engines': 4.15.0
2672 |
2673 | /prop-types@15.8.1:
2674 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
2675 | dependencies:
2676 | loose-envify: 1.4.0
2677 | object-assign: 4.1.1
2678 | react-is: 16.13.1
2679 | dev: true
2680 |
2681 | /punycode@2.3.0:
2682 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
2683 | engines: {node: '>=6'}
2684 | dev: true
2685 |
2686 | /queue-microtask@1.2.3:
2687 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
2688 |
2689 | /quick-lru@5.1.1:
2690 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
2691 | engines: {node: '>=10'}
2692 |
2693 | /react-dom@18.2.0(react@18.2.0):
2694 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
2695 | peerDependencies:
2696 | react: ^18.2.0
2697 | dependencies:
2698 | loose-envify: 1.4.0
2699 | react: 18.2.0
2700 | scheduler: 0.23.0
2701 | dev: false
2702 |
2703 | /react-is@16.13.1:
2704 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
2705 | dev: true
2706 |
2707 | /react-ssr-prepass@1.5.0(react@18.2.0):
2708 | resolution: {integrity: sha512-yFNHrlVEReVYKsLI5lF05tZoHveA5pGzjFbFJY/3pOqqjGOmMmqx83N4hIjN2n6E1AOa+eQEUxs3CgRnPmT0RQ==}
2709 | peerDependencies:
2710 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
2711 | dependencies:
2712 | react: 18.2.0
2713 | dev: false
2714 |
2715 | /react@18.2.0:
2716 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
2717 | engines: {node: '>=0.10.0'}
2718 | dependencies:
2719 | loose-envify: 1.4.0
2720 | dev: false
2721 |
2722 | /read-cache@1.0.0:
2723 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
2724 | dependencies:
2725 | pify: 2.3.0
2726 |
2727 | /readdirp@3.6.0:
2728 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
2729 | engines: {node: '>=8.10.0'}
2730 | dependencies:
2731 | picomatch: 2.3.1
2732 |
2733 | /regenerator-runtime@0.13.11:
2734 | resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
2735 |
2736 | /regexp.prototype.flags@1.5.0:
2737 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==}
2738 | engines: {node: '>= 0.4'}
2739 | dependencies:
2740 | call-bind: 1.0.2
2741 | define-properties: 1.2.0
2742 | functions-have-names: 1.2.3
2743 | dev: true
2744 |
2745 | /resolve-from@4.0.0:
2746 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
2747 | engines: {node: '>=4'}
2748 | dev: true
2749 |
2750 | /resolve@1.22.2:
2751 | resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
2752 | hasBin: true
2753 | dependencies:
2754 | is-core-module: 2.12.1
2755 | path-parse: 1.0.7
2756 | supports-preserve-symlinks-flag: 1.0.0
2757 |
2758 | /resolve@2.0.0-next.4:
2759 | resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
2760 | hasBin: true
2761 | dependencies:
2762 | is-core-module: 2.12.1
2763 | path-parse: 1.0.7
2764 | supports-preserve-symlinks-flag: 1.0.0
2765 | dev: true
2766 |
2767 | /reusify@1.0.4:
2768 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
2769 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
2770 |
2771 | /rimraf@3.0.2:
2772 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
2773 | hasBin: true
2774 | dependencies:
2775 | glob: 7.2.3
2776 | dev: true
2777 |
2778 | /run-applescript@5.0.0:
2779 | resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==}
2780 | engines: {node: '>=12'}
2781 | dependencies:
2782 | execa: 5.1.1
2783 | dev: true
2784 |
2785 | /run-parallel@1.2.0:
2786 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
2787 | dependencies:
2788 | queue-microtask: 1.2.3
2789 |
2790 | /safe-regex-test@1.0.0:
2791 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
2792 | dependencies:
2793 | call-bind: 1.0.2
2794 | get-intrinsic: 1.2.1
2795 | is-regex: 1.1.4
2796 | dev: true
2797 |
2798 | /scheduler@0.23.0:
2799 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
2800 | dependencies:
2801 | loose-envify: 1.4.0
2802 | dev: false
2803 |
2804 | /semver@6.3.0:
2805 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
2806 | hasBin: true
2807 | dev: true
2808 |
2809 | /semver@7.5.1:
2810 | resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==}
2811 | engines: {node: '>=10'}
2812 | hasBin: true
2813 | dependencies:
2814 | lru-cache: 6.0.0
2815 | dev: true
2816 |
2817 | /shebang-command@2.0.0:
2818 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
2819 | engines: {node: '>=8'}
2820 | dependencies:
2821 | shebang-regex: 3.0.0
2822 | dev: true
2823 |
2824 | /shebang-regex@3.0.0:
2825 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
2826 | engines: {node: '>=8'}
2827 | dev: true
2828 |
2829 | /side-channel@1.0.4:
2830 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
2831 | dependencies:
2832 | call-bind: 1.0.2
2833 | get-intrinsic: 1.2.1
2834 | object-inspect: 1.12.3
2835 | dev: true
2836 |
2837 | /signal-exit@3.0.7:
2838 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
2839 | dev: true
2840 |
2841 | /simple-swizzle@0.2.2:
2842 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
2843 | dependencies:
2844 | is-arrayish: 0.3.2
2845 | dev: false
2846 |
2847 | /slash@3.0.0:
2848 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
2849 | engines: {node: '>=8'}
2850 | dev: true
2851 |
2852 | /slash@4.0.0:
2853 | resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
2854 | engines: {node: '>=12'}
2855 | dev: true
2856 |
2857 | /source-map-js@1.0.2:
2858 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
2859 | engines: {node: '>=0.10.0'}
2860 |
2861 | /stop-iteration-iterator@1.0.0:
2862 | resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
2863 | engines: {node: '>= 0.4'}
2864 | dependencies:
2865 | internal-slot: 1.0.5
2866 | dev: true
2867 |
2868 | /streamsearch@1.1.0:
2869 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
2870 | engines: {node: '>=10.0.0'}
2871 | dev: false
2872 |
2873 | /string.prototype.matchall@4.0.8:
2874 | resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==}
2875 | dependencies:
2876 | call-bind: 1.0.2
2877 | define-properties: 1.2.0
2878 | es-abstract: 1.21.2
2879 | get-intrinsic: 1.2.1
2880 | has-symbols: 1.0.3
2881 | internal-slot: 1.0.5
2882 | regexp.prototype.flags: 1.5.0
2883 | side-channel: 1.0.4
2884 | dev: true
2885 |
2886 | /string.prototype.trim@1.2.7:
2887 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==}
2888 | engines: {node: '>= 0.4'}
2889 | dependencies:
2890 | call-bind: 1.0.2
2891 | define-properties: 1.2.0
2892 | es-abstract: 1.21.2
2893 | dev: true
2894 |
2895 | /string.prototype.trimend@1.0.6:
2896 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
2897 | dependencies:
2898 | call-bind: 1.0.2
2899 | define-properties: 1.2.0
2900 | es-abstract: 1.21.2
2901 | dev: true
2902 |
2903 | /string.prototype.trimstart@1.0.6:
2904 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==}
2905 | dependencies:
2906 | call-bind: 1.0.2
2907 | define-properties: 1.2.0
2908 | es-abstract: 1.21.2
2909 | dev: true
2910 |
2911 | /strip-ansi@6.0.1:
2912 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
2913 | engines: {node: '>=8'}
2914 | dependencies:
2915 | ansi-regex: 5.0.1
2916 | dev: true
2917 |
2918 | /strip-bom@3.0.0:
2919 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
2920 | engines: {node: '>=4'}
2921 | dev: true
2922 |
2923 | /strip-final-newline@2.0.0:
2924 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
2925 | engines: {node: '>=6'}
2926 | dev: true
2927 |
2928 | /strip-final-newline@3.0.0:
2929 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
2930 | engines: {node: '>=12'}
2931 | dev: true
2932 |
2933 | /strip-json-comments@3.1.1:
2934 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
2935 | engines: {node: '>=8'}
2936 | dev: true
2937 |
2938 | /styled-jsx@5.1.1(react@18.2.0):
2939 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
2940 | engines: {node: '>= 12.0.0'}
2941 | peerDependencies:
2942 | '@babel/core': '*'
2943 | babel-plugin-macros: '*'
2944 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
2945 | peerDependenciesMeta:
2946 | '@babel/core':
2947 | optional: true
2948 | babel-plugin-macros:
2949 | optional: true
2950 | dependencies:
2951 | client-only: 0.0.1
2952 | react: 18.2.0
2953 | dev: false
2954 |
2955 | /sucrase@3.32.0:
2956 | resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==}
2957 | engines: {node: '>=8'}
2958 | hasBin: true
2959 | dependencies:
2960 | '@jridgewell/gen-mapping': 0.3.3
2961 | commander: 4.1.1
2962 | glob: 7.1.6
2963 | lines-and-columns: 1.2.4
2964 | mz: 2.7.0
2965 | pirates: 4.0.5
2966 | ts-interface-checker: 0.1.13
2967 |
2968 | /superjson@1.12.2:
2969 | resolution: {integrity: sha512-ugvUo9/WmvWOjstornQhsN/sR9mnGtWGYeTxFuqLb4AiT4QdUavjGFRALCPKWWnAiUJ4HTpytj5e0t5HoMRkXg==}
2970 | engines: {node: '>=10'}
2971 | dependencies:
2972 | copy-anything: 3.0.5
2973 | dev: false
2974 |
2975 | /supports-color@7.2.0:
2976 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
2977 | engines: {node: '>=8'}
2978 | dependencies:
2979 | has-flag: 4.0.0
2980 | dev: true
2981 |
2982 | /supports-preserve-symlinks-flag@1.0.0:
2983 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
2984 | engines: {node: '>= 0.4'}
2985 |
2986 | /synckit@0.8.5:
2987 | resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==}
2988 | engines: {node: ^14.18.0 || >=16.0.0}
2989 | dependencies:
2990 | '@pkgr/utils': 2.4.1
2991 | tslib: 2.5.2
2992 | dev: true
2993 |
2994 | /tailwindcss@3.3.0(postcss@8.4.21):
2995 | resolution: {integrity: sha512-hOXlFx+YcklJ8kXiCAfk/FMyr4Pm9ck477G0m/us2344Vuj355IpoEDB5UmGAsSpTBmr+4ZhjzW04JuFXkb/fw==}
2996 | engines: {node: '>=12.13.0'}
2997 | hasBin: true
2998 | peerDependencies:
2999 | postcss: ^8.0.9
3000 | dependencies:
3001 | arg: 5.0.2
3002 | chokidar: 3.5.3
3003 | color-name: 1.1.4
3004 | didyoumean: 1.2.2
3005 | dlv: 1.1.3
3006 | fast-glob: 3.2.12
3007 | glob-parent: 6.0.2
3008 | is-glob: 4.0.3
3009 | jiti: 1.18.2
3010 | lilconfig: 2.1.0
3011 | micromatch: 4.0.5
3012 | normalize-path: 3.0.0
3013 | object-hash: 3.0.0
3014 | picocolors: 1.0.0
3015 | postcss: 8.4.21
3016 | postcss-import: 14.1.0(postcss@8.4.21)
3017 | postcss-js: 4.0.1(postcss@8.4.21)
3018 | postcss-load-config: 3.1.4(postcss@8.4.21)
3019 | postcss-nested: 6.0.0(postcss@8.4.21)
3020 | postcss-selector-parser: 6.0.13
3021 | postcss-value-parser: 4.2.0
3022 | quick-lru: 5.1.1
3023 | resolve: 1.22.2
3024 | sucrase: 3.32.0
3025 | transitivePeerDependencies:
3026 | - ts-node
3027 |
3028 | /tapable@2.2.1:
3029 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
3030 | engines: {node: '>=6'}
3031 | dev: true
3032 |
3033 | /text-table@0.2.0:
3034 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
3035 | dev: true
3036 |
3037 | /thenify-all@1.6.0:
3038 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
3039 | engines: {node: '>=0.8'}
3040 | dependencies:
3041 | thenify: 3.3.1
3042 |
3043 | /thenify@3.3.1:
3044 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
3045 | dependencies:
3046 | any-promise: 1.3.0
3047 |
3048 | /titleize@3.0.0:
3049 | resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==}
3050 | engines: {node: '>=12'}
3051 | dev: true
3052 |
3053 | /to-regex-range@5.0.1:
3054 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
3055 | engines: {node: '>=8.0'}
3056 | dependencies:
3057 | is-number: 7.0.0
3058 |
3059 | /ts-interface-checker@0.1.13:
3060 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
3061 |
3062 | /tsconfig-paths@3.14.2:
3063 | resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==}
3064 | dependencies:
3065 | '@types/json5': 0.0.29
3066 | json5: 1.0.2
3067 | minimist: 1.2.8
3068 | strip-bom: 3.0.0
3069 | dev: true
3070 |
3071 | /tslib@1.14.1:
3072 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
3073 | dev: true
3074 |
3075 | /tslib@2.5.2:
3076 | resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==}
3077 |
3078 | /tsutils@3.21.0(typescript@5.0.2):
3079 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
3080 | engines: {node: '>= 6'}
3081 | peerDependencies:
3082 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
3083 | dependencies:
3084 | tslib: 1.14.1
3085 | typescript: 5.0.2
3086 | dev: true
3087 |
3088 | /type-check@0.4.0:
3089 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
3090 | engines: {node: '>= 0.8.0'}
3091 | dependencies:
3092 | prelude-ls: 1.2.1
3093 | dev: true
3094 |
3095 | /type-fest@0.20.2:
3096 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
3097 | engines: {node: '>=10'}
3098 | dev: true
3099 |
3100 | /typed-array-length@1.0.4:
3101 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
3102 | dependencies:
3103 | call-bind: 1.0.2
3104 | for-each: 0.3.3
3105 | is-typed-array: 1.1.10
3106 | dev: true
3107 |
3108 | /typescript@5.0.2:
3109 | resolution: {integrity: sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==}
3110 | engines: {node: '>=12.20'}
3111 | hasBin: true
3112 | dev: true
3113 |
3114 | /unbox-primitive@1.0.2:
3115 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
3116 | dependencies:
3117 | call-bind: 1.0.2
3118 | has-bigints: 1.0.2
3119 | has-symbols: 1.0.3
3120 | which-boxed-primitive: 1.0.2
3121 | dev: true
3122 |
3123 | /untildify@4.0.0:
3124 | resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
3125 | engines: {node: '>=8'}
3126 | dev: true
3127 |
3128 | /update-browserslist-db@1.0.11(browserslist@4.21.5):
3129 | resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
3130 | hasBin: true
3131 | peerDependencies:
3132 | browserslist: '>= 4.21.0'
3133 | dependencies:
3134 | browserslist: 4.21.5
3135 | escalade: 3.1.1
3136 | picocolors: 1.0.0
3137 |
3138 | /uri-js@4.4.1:
3139 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
3140 | dependencies:
3141 | punycode: 2.3.0
3142 | dev: true
3143 |
3144 | /use-sync-external-store@1.2.0(react@18.2.0):
3145 | resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
3146 | peerDependencies:
3147 | react: ^16.8.0 || ^17.0.0 || ^18.0.0
3148 | dependencies:
3149 | react: 18.2.0
3150 | dev: false
3151 |
3152 | /util-deprecate@1.0.2:
3153 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
3154 |
3155 | /uuid@8.3.2:
3156 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
3157 | hasBin: true
3158 | dev: false
3159 |
3160 | /which-boxed-primitive@1.0.2:
3161 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
3162 | dependencies:
3163 | is-bigint: 1.0.4
3164 | is-boolean-object: 1.1.2
3165 | is-number-object: 1.0.7
3166 | is-string: 1.0.7
3167 | is-symbol: 1.0.4
3168 | dev: true
3169 |
3170 | /which-collection@1.0.1:
3171 | resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
3172 | dependencies:
3173 | is-map: 2.0.2
3174 | is-set: 2.0.2
3175 | is-weakmap: 2.0.1
3176 | is-weakset: 2.0.2
3177 | dev: true
3178 |
3179 | /which-typed-array@1.1.9:
3180 | resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==}
3181 | engines: {node: '>= 0.4'}
3182 | dependencies:
3183 | available-typed-arrays: 1.0.5
3184 | call-bind: 1.0.2
3185 | for-each: 0.3.3
3186 | gopd: 1.0.1
3187 | has-tostringtag: 1.0.0
3188 | is-typed-array: 1.1.10
3189 | dev: true
3190 |
3191 | /which@2.0.2:
3192 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
3193 | engines: {node: '>= 8'}
3194 | hasBin: true
3195 | dependencies:
3196 | isexe: 2.0.0
3197 | dev: true
3198 |
3199 | /word-wrap@1.2.3:
3200 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
3201 | engines: {node: '>=0.10.0'}
3202 | dev: true
3203 |
3204 | /wrappy@1.0.2:
3205 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
3206 |
3207 | /yallist@4.0.0:
3208 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
3209 |
3210 | /yaml@1.10.2:
3211 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
3212 | engines: {node: '>= 6'}
3213 |
3214 | /yocto-queue@0.1.0:
3215 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
3216 | engines: {node: '>=10'}
3217 | dev: true
3218 |
3219 | /zod@3.21.4:
3220 | resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
3221 | dev: false
3222 |
--------------------------------------------------------------------------------
/postcss.config.cjs:
--------------------------------------------------------------------------------
1 | const config = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
8 | module.exports = config;
9 |
--------------------------------------------------------------------------------
/prettier.config.cjs:
--------------------------------------------------------------------------------
1 | /** @type {import("prettier").Config} */
2 | const config = {
3 | plugins: [require.resolve("prettier-plugin-tailwindcss")],
4 | };
5 |
6 | module.exports = config;
7 |
--------------------------------------------------------------------------------
/prisma/schema.prisma:
--------------------------------------------------------------------------------
1 | // This is your Prisma schema file,
2 | // learn more about it in the docs: https://pris.ly/d/prisma-schema
3 |
4 | generator client {
5 | provider = "prisma-client-js"
6 | previewFeatures = ["jsonProtocol"]
7 | }
8 |
9 | datasource db {
10 | provider = "sqlite"
11 | // NOTE: When using mysql or sqlserver, uncomment the @db.Text annotations in model Account below
12 | // Further reading:
13 | // https://next-auth.js.org/adapters/prisma#create-the-prisma-schema
14 | // https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#string
15 | url = env("DATABASE_URL")
16 | }
17 |
18 | model Example {
19 | id String @id @default(cuid())
20 | createdAt DateTime @default(now())
21 | updatedAt DateTime @updatedAt
22 | }
23 |
24 | // Necessary for Next auth
25 | model Account {
26 | id String @id @default(cuid())
27 | userId String
28 | type String
29 | provider String
30 | providerAccountId String
31 | refresh_token String? // @db.Text
32 | access_token String? // @db.Text
33 | expires_at Int?
34 | token_type String?
35 | scope String?
36 | id_token String? // @db.Text
37 | session_state String?
38 | user User @relation(fields: [userId], references: [id], onDelete: Cascade)
39 |
40 | @@unique([provider, providerAccountId])
41 | }
42 |
43 | model Session {
44 | id String @id @default(cuid())
45 | sessionToken String @unique
46 | userId String
47 | expires DateTime
48 | user User @relation(fields: [userId], references: [id], onDelete: Cascade)
49 | }
50 |
51 | model User {
52 | id String @id @default(cuid())
53 | name String?
54 | email String? @unique
55 | emailVerified DateTime?
56 | image String?
57 | accounts Account[]
58 | sessions Session[]
59 | clusters ClusterIP[]
60 | snapshots Snapshot[]
61 | }
62 |
63 | model VerificationToken {
64 | identifier String
65 | token String @unique
66 | expires DateTime
67 |
68 | @@unique([identifier, token])
69 | }
70 |
71 | model ClusterIP {
72 | id String @id @default(cuid())
73 | createdAt DateTime @default(now())
74 | updatedAt DateTime @updatedAt
75 | ipAddress String @unique
76 | user User @relation(fields: [userId], references: [id])
77 | userId String
78 | snapshots Snapshot[]
79 | }
80 |
81 | model Snapshot {
82 | id String @id @default(cuid())
83 | createdAt DateTime @default(now())
84 | updatedAt DateTime @updatedAt
85 | unixtime BigInt
86 | user User @relation(fields: [userId], references: [id])
87 | userId String
88 | label String?
89 | cluster ClusterIP? @relation(fields: [clusterIP], references: [ipAddress])
90 | clusterIP String
91 | }
92 |
--------------------------------------------------------------------------------
/public/fathom-full-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oslabs-beta/Fathom/b6b041eb62e3887386eb9ab957afaec4c35d01a1/public/fathom-full-white.png
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oslabs-beta/Fathom/b6b041eb62e3887386eb9ab957afaec4c35d01a1/public/favicon.ico
--------------------------------------------------------------------------------
/src/env.mjs:
--------------------------------------------------------------------------------
1 | import { z } from "zod";
2 | import { createEnv } from "@t3-oss/env-nextjs";
3 |
4 | export const env = createEnv({
5 | /**
6 | * Specify your server-side environment variables schema here. This way you can ensure the app
7 | * isn't built with invalid env vars.
8 | */
9 | server: {
10 | DATABASE_URL: z.string().url(),
11 | NODE_ENV: z.enum(["development", "test", "production"]),
12 | NEXTAUTH_SECRET:
13 | process.env.NODE_ENV === "production"
14 | ? z.string().min(1)
15 | : z.string().min(1).optional(),
16 | NEXTAUTH_URL: z.preprocess(
17 | // This makes Vercel deployments not fail if you don't set NEXTAUTH_URL
18 | // Since NextAuth.js automatically uses the VERCEL_URL if present.
19 | (str) => process.env.VERCEL_URL ?? str,
20 | // VERCEL_URL doesn't include `https` so it cant be validated as a URL
21 | process.env.VERCEL ? z.string().min(1) : z.string().url()
22 | ),
23 | // Add `.min(1) on ID and SECRET if you want to make sure they're not empty
24 | GITHUB_CLIENT_ID: z.string(),
25 | GITHUB_CLIENT_SECRET: z.string(),
26 | GOOGLE_CLIENT_ID: z.string(),
27 | GOOGLE_CLIENT_SECRET: z.string(),
28 | },
29 |
30 | /**
31 | * Specify your client-side environment variables schema here. This way you can ensure the app
32 | * isn't built with invalid env vars. To expose them to the client, prefix them with
33 | * `NEXT_PUBLIC_`.
34 | */
35 | client: {
36 | // NEXT_PUBLIC_CLIENTVAR: z.string().min(1),
37 | },
38 |
39 | /**
40 | * You can't destruct `process.env` as a regular object in the Next.js edge runtimes (e.g.
41 | * middlewares) or client-side so we need to destruct manually.
42 | */
43 | runtimeEnv: {
44 | DATABASE_URL: process.env.DATABASE_URL,
45 | NODE_ENV: process.env.NODE_ENV,
46 | NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET,
47 | NEXTAUTH_URL: process.env.NEXTAUTH_URL,
48 | GITHUB_CLIENT_ID: process.env.GITHUB_CLIENT_ID,
49 | GITHUB_CLIENT_SECRET: process.env.GITHUB_CLIENT_SECRET,
50 | GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,
51 | GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET,
52 | },
53 | });
54 |
--------------------------------------------------------------------------------
/src/pages/_app.tsx:
--------------------------------------------------------------------------------
1 | import { type AppType } from "next/app";
2 | import { type Session } from "next-auth";
3 | import { SessionProvider } from "next-auth/react";
4 |
5 | //
6 | import { ClusterContext } from "./components/ClusterContext";
7 |
8 | import { api } from "~/utils/api";
9 |
10 | import "~/styles/globals.css";
11 |
12 | const MyApp: AppType<{ session: Session | null }> = ({
13 | Component,
14 | pageProps: { session, ...pageProps },
15 | }) => {
16 | return (
17 |
18 |
19 |
20 |
21 |
22 | );
23 | };
24 |
25 | export default api.withTRPC(MyApp);
26 |
--------------------------------------------------------------------------------
/src/pages/api/auth/[...nextauth].ts:
--------------------------------------------------------------------------------
1 | import NextAuth from "next-auth";
2 | import { authOptions } from "~/server/auth";
3 |
4 | export default NextAuth(authOptions);
5 |
--------------------------------------------------------------------------------
/src/pages/api/trpc/[trpc].ts:
--------------------------------------------------------------------------------
1 | import { createNextApiHandler } from "@trpc/server/adapters/next";
2 |
3 | import { env } from "~/env.mjs";
4 | import { createTRPCContext } from "~/server/api/trpc";
5 | import { appRouter } from "~/server/api/root";
6 |
7 | // export API handler
8 | export default createNextApiHandler({
9 | router: appRouter,
10 | createContext: createTRPCContext,
11 | onError:
12 | env.NODE_ENV === "development"
13 | ? ({ path, error }) => {
14 | console.error(
15 | `❌ tRPC failed on ${path ?? ""}: ${error.message}`,
16 | );
17 | }
18 | : undefined,
19 | });
20 |
--------------------------------------------------------------------------------
/src/pages/assets/Fathom-text-blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oslabs-beta/Fathom/b6b041eb62e3887386eb9ab957afaec4c35d01a1/src/pages/assets/Fathom-text-blue.png
--------------------------------------------------------------------------------
/src/pages/assets/Fathom-text-gradient.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/oslabs-beta/Fathom/b6b041eb62e3887386eb9ab957afaec4c35d01a1/src/pages/assets/Fathom-text-gradient.png
--------------------------------------------------------------------------------
/src/pages/components/Chart.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 |
4 | // Chart.tsx: components that hold individual charts; built with intention to size charts specifically
5 | // May now be refactored into one single chart component, as they are properly auto-sized by Grafana
6 |
7 | type ChartProps = {
8 | source: string;
9 | };
10 |
11 | // valid source? if no, render something else?
12 |
13 | export function Chart({ source } : ChartProps) {
14 | return
15 | {/* Flex container with max width, columns, gap between elements, rounded corners, and padding */}
16 |
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/pages/components/ChartContainer.tsx:
--------------------------------------------------------------------------------
1 | import { Chart } from 'src/pages/components/Chart'
2 | type ChartContainer = {
3 | currentClusterIP: string;
4 | currentTimeStamp: string;
5 | }
6 |
7 | export default function ChartContainer({ currentClusterIP, currentTimeStamp }: ChartContainer) {
8 | return (
9 |
10 |
11 |
12 | {/* grid layout - 1 column, gap size, columns, responsive settings */}
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | {/* grid layout - 1 column, gap size, columns, responsive settings */}
21 |
22 |
23 |
24 |
25 |
26 | {/* grid layout - 1 column, gap size, columns, responsive settings */}
27 |
28 |
29 |
30 |
31 | {/*
*/}
32 | {/* grid layout - 1 column, gap size, columns, responsive settings */}
33 | {/* */}
34 | {/* */}
35 | {/*
*/}
36 |
37 |
38 | )
39 | }
40 |
41 |
42 |
--------------------------------------------------------------------------------
/src/pages/components/ClusterContext.tsx:
--------------------------------------------------------------------------------
1 | // add a context provider for state management
2 | import {useState, createContext, ReactNode, useContext} from "react"
3 | import { api } from '~/utils/api';
4 | // define the type of the AppContext object
5 | type clusterContextType = {
6 | // current clusterIP
7 | currentClusterIP: string;
8 | // set current cluster IP
9 | setCIP: (arg:string)=>void;
10 |
11 | // array of cluster IPS
12 | clusterIPArray: {}[]|undefined; //array of objects
13 | // get cluster IP array
14 | refetchCIPArray: ()=>void;
15 | }
16 |
17 | // to instantiate the context
18 | const clusterContextDefaults: clusterContextType = {
19 | currentClusterIP:'',
20 | setCIP: ()=>{},
21 | clusterIPArray: [{}], //array of objects
22 | refetchCIPArray: ()=>{}, // get cluster IP array
23 | }
24 |
25 | export const AppContext = createContext(clusterContextDefaults)
26 |
27 | export function useClusterContext() {
28 | return useContext(AppContext)
29 | }
30 |
31 | type Props = {
32 | children: ReactNode;
33 | };
34 |
35 | export function ClusterContext({ children }: Props) {
36 | // states and functions to pass
37 | const[currentClusterIP, setCurrentClusterIP] = useState('')
38 | const setCIP = (ip:string) =>{
39 | setCurrentClusterIP(ip)
40 | }
41 |
42 | // state and update state (refetch from API)
43 | const { data: clusterIPArray, refetch: refetchClusterIPArray } = api.clusterIP.getAll.useQuery();
44 | const refetchCIPArray = () =>{
45 | refetchClusterIPArray()
46 | }
47 |
48 | // value object to provide to children
49 | const value= {
50 | currentClusterIP,
51 | setCIP,
52 | clusterIPArray,
53 | refetchCIPArray
54 |
55 | }
56 | return (
57 |
58 | {children}
59 |
60 | )
61 | }
--------------------------------------------------------------------------------
/src/pages/components/DashBlank.tsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from "react";
2 | import Image from 'next/image';
3 | import icon from '/src/pages/assets/Fathom-text-blue.png'
4 | // Component which displays when user is not logged in and/or the cluster IP has not been entered
5 |
6 | export function DashBlank() {
7 | return (
8 |
9 | {/* margin, flex, font style, centers all text */}
10 | No Dashboard to Display
11 |
12 |
13 | );
14 | }
15 | export function DashBlankSignedOut() {
16 | const [showComponent, setShowComponent] = useState(false);
17 |
18 | useEffect(() => {
19 | setShowComponent(true);
20 | }, []);
21 |
22 | return (
23 |
25 |
30 | {/*
for Kubernetes
*/}
31 |
47 |
48 | );
49 | }
--------------------------------------------------------------------------------
/src/pages/components/Dashboard.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { signIn, signOut, useSession } from 'next-auth/react';
3 | import ChartContainer from './ChartContainer';
4 | import { DashBlank } from './DashBlank';
5 | import { api } from "~/utils/api";
6 | import { useClusterContext } from '../components/ClusterContext';
7 |
8 |
9 |
10 | //type definition
11 | interface DashboardProps {
12 | initialClusterIP: string;
13 | clusterIPArray: Array;
14 | refetchClusterIPArray: any;
15 | snapshotObj: any;
16 | setSnapshotObj: any;
17 | dashNum: number;
18 | currClusterId: string;
19 | }
20 | //type definition
21 | interface snapshotProps {
22 | clusterIP:string
23 | createdAt:any //datetime?
24 | id: string
25 | label: string
26 | unixtime:any
27 | updatedAt:any
28 | userId:string
29 |
30 | }
31 | // helper to get snaps by IP
32 | function filterByIp (notFiltered:Array, ip:string) : Array{
33 | if(notFiltered){
34 | const results = notFiltered.filter(el=>{
35 | return el.clusterIP === ip ? true : false
36 | });
37 | // console.log('filtered',results)
38 | return results
39 | } else {
40 | // returns an empty array of "snaps"
41 | return [{
42 | clusterIP:`${ip}`,
43 | createdAt:'', //datetime?
44 | id: '',
45 | label: 'Current',
46 | unixtime:'now',
47 | updatedAt:'',
48 | userId:''
49 | }]
50 | }
51 | }
52 |
53 | // dashboard component
54 | const Dashboard: React.FC = ({
55 | snapshotObj,
56 | setSnapshotObj,
57 | dashNum,
58 | }) => {
59 | const [currentTimeStamp, setCurrentTimeStamp] = useState('now');
60 | const { data: sessionData } = useSession();
61 |
62 | // const [currentClusterIP, setCurrentClusterIP] = useState(initialClusterIP);
63 |
64 | const {
65 | currentClusterIP,
66 | setCIP: setCurrentClusterIP,
67 | clusterIPArray,
68 | refetchCIPArray: refetchClusterIPArray,
69 | } = useClusterContext();
70 |
71 | // handleTabClick(currentClusterIP)
72 | // hooks for snapshot management
73 | const { data: unfilteredSnapshots, refetch: refetchunfilteredSnapshots } = api.snapshot.getAll.useQuery()
74 | // const { data: filteredSnapshots, refetch: refetchfilteredSnapshots } = api.snapshot.getByUserCluster.useQuery({clusterIP: initialClusterIP})
75 | // state containing filtered snaps by clusterIP
76 | const [filteredByIPSnaps, setfilteredByIPSnaps] = useState(filterByIp(unfilteredSnapshots, currentClusterIP))
77 | const [showConfirmation, setShowConfirmation] = useState(false);
78 | const [ipToDelete, setIpToDelete] = useState('');
79 |
80 | const deleteIP = api.clusterIP.deleteIP.useMutation({
81 | onSuccess: () => {
82 | refetchClusterIPArray();
83 | console.log('successfully deleted clusterIP');
84 | },
85 | });
86 |
87 | const deleteSnapshotsByIP = api.snapshot.deleteSnapshotsByIP.useMutation({
88 | onSuccess: () => {
89 | console.log('successfully deleted snapshots');
90 | setCurrentTimeStamp('Now') // adjust the timestamp to now
91 | },
92 | });
93 |
94 |
95 |
96 | const handleDeleteIP = (ipAddress: string) => {
97 | setIpToDelete(ipAddress);
98 | setShowConfirmation(true);
99 | };
100 |
101 | // combines clusterIP and associated snapshots deletion
102 | const confirmDeleteIP = async() => {
103 | const clusterIPToDelete = clusterIPArray.find((obj) => obj.ipAddress === ipToDelete);
104 | if (clusterIPToDelete) {
105 | // wait for the snapshots to be deleted before deleting IPs
106 | await deleteSnapshotsByIP.mutateAsync({ ipToDelete: clusterIPToDelete.ipAddress });
107 | deleteIP.mutate({ id: clusterIPToDelete.id });
108 |
109 | // set state to remove old snapshots
110 | setSnapshotObj({})
111 | }
112 | setShowConfirmation(false);
113 | };
114 |
115 | const cancelDeleteIP = () => {
116 | setShowConfirmation(false);
117 | setIpToDelete('');
118 | };
119 |
120 | // add a property in snapshotObj
121 | const handleSnapshotSubmit = (event: React.FormEvent) => {
122 | event.preventDefault()
123 | const unixTimeStamp = Date.now();
124 | const date = new Date(unixTimeStamp);
125 | const formattedDate = date.toLocaleString()
126 | const obj = { ...snapshotObj }
127 | // if labelName exists add a property into snapshotObj labelName: Unix Time otherwise add a property as M/D/Y Time: Unix Time
128 | console.log(labelName)
129 | labelName ? obj[labelName] = unixTimeStamp : obj[formattedDate] = unixTimeStamp
130 | setSnapshotObj(obj)
131 | createNewSnapshot.mutate({
132 | unixtime: unixTimeStamp,
133 | label: labelName,
134 | clusterIP: currentClusterIP
135 | })
136 | console.log('new snapshotObj', snapshotObj)
137 | }
138 |
139 |
140 |
141 | // hook to create snapshot in db
142 | const createNewSnapshot = api.snapshot.createNew.useMutation({
143 | onSuccess:()=>{
144 | refetchunfilteredSnapshots();
145 | console.log(`the snapshots, unfiltered`, unfilteredSnapshots)
146 | console.log(`the snapshots, filtered`, filterByIp(unfilteredSnapshots, currentClusterIP))
147 | // console.log(`the snapshots, filtered by ${currentClusterIP} and user`, unfilteredSnapshots)
148 | }
149 | })
150 |
151 | const [labelName, setLabelName] = useState('')
152 |
153 | // eventHandlers
154 | //handle tab click
155 | async function handleTabClick (ip: string){
156 | setCurrentClusterIP(ip);
157 | console.log('current cluster ip is:', currentClusterIP)
158 |
159 | // refetch and rerender the available snaps
160 | // get the unfiltered check with console.log(unfilteredSnapshots)
161 | await refetchunfilteredSnapshots();
162 |
163 | //set the filtered filteredByIPSnaps
164 | setfilteredByIPSnaps(filterByIp(unfilteredSnapshots, currentClusterIP))
165 |
166 | // modify snapshotObj
167 | // set snapshotObj to object with labels of labels, values
168 | const updatedSnapshotObj:any = {}
169 | filteredByIPSnaps.forEach(el=>{updatedSnapshotObj[el.label] = el.unixtime})
170 |
171 | // update the snapshot object with the new object
172 | await setSnapshotObj({...updatedSnapshotObj })
173 | console.log(snapshotObj)
174 | };
175 |
176 |
177 | // set currentTimeStamp state to option we choose on the dropbown
178 | const handleDashboardChange = (event: React.ChangeEvent) => {
179 | event.preventDefault()
180 | const changedTimeStamp = event.target.value
181 | // console.log('snapshotObj', snapshotObj, 'event value', event.target.value)
182 | // console.log('changedTimeStamp', changedTimeStamp)
183 | setCurrentTimeStamp(changedTimeStamp)
184 | // console.log('currentTimeStamp', currentTimeStamp)
185 | }
186 |
187 |
188 | // set labelName to our input
189 | const handleLabelChange = (event: any) => {
190 | event.preventDefault()
191 | setLabelName(event.target.value)
192 | }
193 |
194 | useEffect(() => {
195 | if (clusterIPArray.length > 0) {
196 | setCurrentClusterIP(clusterIPArray[0].ipAddress);
197 | }
198 | }, []);
199 |
200 | return (
201 | <>
202 | {/* {currentClusterIP} */}
203 | {dashNum === 1 ? (
204 |
205 | {clusterIPArray?.map((obj) => (
206 |
219 | ))}
220 |
221 | ) : (
222 | ''
223 | )}
224 |
225 |
226 |
227 |
228 |
229 | {dashNum === 1 ? 'Select Dashboard' : 'Select Snapshot'}
230 |
231 |
236 | {dashNum === 2 ? (
237 | Object.keys(snapshotObj).map((ip) => {
238 | if (ip !== 'Current') return {ip} ;
239 | })
240 | ) : (
241 | Object.keys(snapshotObj).map((ip) => (
242 | {ip}
243 | ))
244 | )}
245 |
246 |
247 |
248 |
249 |
250 | {/* snapshot button */}
251 | {dashNum === 1 ? (
252 |
253 |
261 |
262 |
263 | ) : ''}
264 |
265 |
266 | {dashNum === 2 && Object.keys(snapshotObj).length > 1 ? (
267 |
268 | ) : dashNum === 1 ? (
269 |
270 | ) : (
271 |
272 | )}
273 |
274 |
275 | {/* confirm delete ip modal */}
276 | {showConfirmation && (
277 |
278 |
279 |
Are you sure you want to delete this IP?
280 |
281 |
282 | Confirm
283 |
284 |
285 | Cancel
286 |
287 |
288 |
289 |
290 | )}
291 | >
292 | );
293 | };
294 |
295 | export default Dashboard;
296 |
--------------------------------------------------------------------------------
/src/pages/components/InteractionBar.tsx:
--------------------------------------------------------------------------------
1 | import { signIn, signOut, useSession } from "next-auth/react"
2 | import { useState, useRef, useEffect } from "react"
3 | import { api } from "~/utils/api";
4 | import { useClusterContext } from "./ClusterContext";
5 |
6 | // TODO: define a type for InteractionBar props and import it instead of any
7 | export const InteractionBar: any = ({ clusterIPArray, refetchClusterIPArray}: any) => {
8 | const { data: sessionData } = useSession()
9 | const [inputIP, setInputIP] = useState('')
10 | const [isIPValid, setIsIPValid] = useState(true);
11 | const inputRef = useRef(null);
12 |
13 | const {currentClusterIP, setCIP} = useClusterContext();
14 | console.log('using context here with cluster ip selection:',currentClusterIP)
15 |
16 |
17 | // TRPC
18 | // const {data: clusterIPArray, refetch:refetchClusterIPArray} = api.clusterIP.getAll.useQuery();
19 |
20 | // route - adds new clusterIP
21 | const createNewClusterIP = api.clusterIP.createNew.useMutation({
22 | onSuccess:()=>{
23 | refetchClusterIPArray();
24 | console.log('successfully saved clusterIP')
25 | }
26 | })
27 |
28 | // Update the input field value when inputIP changes
29 | useEffect(() => {
30 | if (inputRef.current) {
31 | inputRef.current.value = inputIP;
32 | }
33 | }, [inputIP]);
34 |
35 | // const existingIP = clusterIPArray?.find(ip => ip === inputIP);
36 | // TODO: Validate that IP does not already exist in database
37 | const validateIP = (IP) => {
38 | if (IP && /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(IP)) {
39 | setIsIPValid(true);
40 | console.log("IP VALID")
41 | return true;
42 | }
43 | else {
44 | console.log("IP INVALID")
45 | return false;
46 | }
47 | };
48 |
49 | // need to manage state: one of the props is likely to be a reference to state in the parent
50 | // will give a reference to the IP address of the cluster to other components
51 | const handleClusterIPSubmit = async (event: any) => {
52 | event.preventDefault()
53 | if (validateIP(inputIP)) {
54 | // setClusterIP(inputIP);
55 | setInputIP('');
56 | const {ipAddress:newipAddress} = await createNewClusterIP.mutateAsync({clusterIP: inputIP})
57 | // set the state of the app to the newly created
58 | setCIP(newipAddress)
59 | refetchClusterIPArray();
60 | console.log("CLUSTERIPARRAY", clusterIPArray);
61 | console.log("SESSIONDATA", sessionData);
62 | }
63 | else {
64 | setInputIP('');
65 | setIsIPValid(false);
66 | }
67 | }
68 |
69 | const handleClusterChange = (event: React.ChangeEvent) => {
70 | event.preventDefault()
71 | const newIP = (event.target as HTMLInputElement).value
72 | if (newIP) setInputIP(newIP)
73 | console.log('the new ip', inputIP)
74 | }
75 |
76 | return (
77 |
78 | {/* navbar styling, flex layout, centers content */}
79 |
80 | {/* Form container */}
81 |
101 |
102 | )
103 | }
--------------------------------------------------------------------------------
/src/pages/components/LoginHeader.tsx:
--------------------------------------------------------------------------------
1 | import { signIn, signOut, useSession } from "next-auth/react"
2 | import Image from 'next/image';
3 |
4 | import icon from '/src/pages/assets/Fathom-text-blue.png'
5 |
6 | export const LoginHeader: React.FC = () => {
7 | const { data: sessionData } = useSession()
8 |
9 | return (
10 |
11 | // Topmost navbar, always displays. Includes Fathom logo and sign in button(s)
12 |
13 | {/* gradient background, fixed position, span entire top of page, padding */}
14 |
15 |
16 | {/* logo */}
17 |
18 |
23 |
24 |
25 |
{/* image of the github user profile */}
26 | {sessionData?.user.image ?
: ""}
27 |
28 | {/* sign in/out button */}
29 |
void signOut() : () => void signIn()}
32 | >
33 | {sessionData ? "Sign out" : "Sign in"}
34 |
35 |
36 | )
37 | }
--------------------------------------------------------------------------------
/src/pages/index.tsx:
--------------------------------------------------------------------------------
1 | import { type NextPage } from "next";
2 | import Head from "next/head";
3 | import React from 'react';
4 | import Dashboard from './components/Dashboard';
5 | import { signIn, signOut, useSession } from "next-auth/react";
6 | // context for global Cluster IP, Array state and setters
7 | import { useClusterContext } from './components/ClusterContext';
8 | import { api } from "~/utils/api";
9 | import { LoginHeader } from "./components/LoginHeader";
10 | import { InteractionBar } from "./components/InteractionBar";
11 | import { useState } from "react";
12 | import { DashBlankSignedOut } from 'src/pages/components/DashBlank'
13 |
14 | const Home: NextPage = () => {
15 | const { data: sessionData } = useSession()
16 | // const { data: clusterIPArray, refetch: refetchClusterIPArray } = api.clusterIP.getAll.useQuery();
17 |
18 | // test out use context with clusterIP
19 | const {currentClusterIP, setCIP, clusterIPArray, refetchCIPArray} = useClusterContext();
20 | // const refetchClusterIPArray = refetchCIPArray
21 | console.log('the cluster IP', clusterIPArray)
22 |
23 | // refactored snapshotArr (array of objects) to snapshotObj (object) to keep track of our snapshots in our dropdown
24 | // TODO load up snapshotObj from db according to user info
25 | const [snapshotObj, setSnapshotObj] = useState({ Current: 'now' })
26 | return (
27 | <>
28 |
29 | Fathom for Kubernetes
30 |
31 |
32 | {/* extra button to test tRPC hooks */}
33 | {/* can be modified here for components */}
34 |
35 |
36 | {/* this button tests the snapshot procedures: remove when snapshot CRUD is implemented */}
37 | {/* {checkSnapshot()}}>blah */}
38 |
39 |
40 |
41 | {/* passed in state/setStates as props to components that update/rely on them */}
42 | {sessionData?.user.image ? : }
43 |
44 | {
45 | (sessionData?.user.image && clusterIPArray !== null && clusterIPArray?.length > 0)
46 | ? (
47 |
48 |
)
49 |
50 | : ""
51 | }
52 |
53 | >
54 | );
55 | }
56 | export default Home;
--------------------------------------------------------------------------------
/src/server/api/root.ts:
--------------------------------------------------------------------------------
1 | import { createTRPCRouter } from "~/server/api/trpc";
2 | import { snapshotRouter } from "~/server/api/routers/snapshot"
3 | import { clusterIPRouter } from "./routers/clusterIP";
4 | /**
5 | * This is the primary router for your server.
6 | *
7 | * All routers added in /api/routers should be manually added here.
8 | */
9 | export const appRouter = createTRPCRouter({
10 | snapshot: snapshotRouter,
11 | clusterIP: clusterIPRouter,
12 | });
13 |
14 | // export type definition of API
15 | export type AppRouter = typeof appRouter;
16 |
--------------------------------------------------------------------------------
/src/server/api/routers/clusterIP.ts:
--------------------------------------------------------------------------------
1 | import { z } from "zod";
2 | import {
3 | createTRPCRouter,
4 | publicProcedure,
5 | protectedProcedure,
6 | } from "~/server/api/trpc";
7 |
8 | export const clusterIPRouter = createTRPCRouter({
9 | getAll: protectedProcedure.query(({ ctx }) => {
10 | return ctx.prisma.clusterIP.findMany({
11 | where: {
12 | userId: {
13 | equals: ctx.session?.user.id,
14 | },
15 | },
16 | });
17 | }),
18 | createNew: protectedProcedure
19 | .input(z.object({ clusterIP: z.string() }))
20 | .mutation(async ({ ctx, input }) => {
21 | return await ctx.prisma.clusterIP.create({
22 | data: {
23 | ipAddress: input.clusterIP,
24 | userId: ctx.session?.user.id,
25 | },
26 | });
27 | }
28 | ),
29 | deleteIP: protectedProcedure
30 | .input(z.object({ id: z.string() }))
31 | .mutation(async ({ ctx, input }) => {
32 | const deletedClusterIP = await ctx.prisma.clusterIP.delete({
33 | where: {
34 | id: input.id,
35 | },
36 | });
37 |
38 | return {
39 | success: Boolean(deletedClusterIP),
40 | deletedClusterIP,
41 | };
42 | }),
43 | });
44 |
--------------------------------------------------------------------------------
/src/server/api/routers/snapshot.ts:
--------------------------------------------------------------------------------
1 | import { z } from "zod";
2 |
3 | import {
4 | createTRPCRouter,
5 | publicProcedure,
6 | protectedProcedure,
7 | } from "~/server/api/trpc";
8 |
9 | export const snapshotRouter = createTRPCRouter({
10 | // test procedure for checking that snapshot.ts is imported
11 | hello: publicProcedure
12 | .input(z.object({ text: z.string() }))
13 | .query(({ input }) => {
14 | return {
15 | greeting: `Hello ${input.text}`,
16 | };
17 | }),
18 |
19 | // queries and returns all snapshots
20 | getAll: publicProcedure.query(({ ctx }) => {
21 | return ctx.prisma.snapshot.findMany({
22 | where: {
23 | userId: {
24 | equals: ctx.session?.user.id,
25 | }
26 | }
27 | })
28 | }),
29 |
30 | // type
31 | getByUserCluster: protectedProcedure
32 | .input(z.object({ clusterIP: z.string()}))
33 | .query(({ ctx, input }) => {
34 | return ctx.prisma.snapshot.findMany({
35 | where: {
36 | clusterIP: {
37 | equals: input.clusterIP
38 | },
39 | AND: {
40 | userId: {
41 | equals: ctx.session?.user.id,
42 | }
43 | }
44 | }
45 | })
46 | }),
47 |
48 | // change to private procedure when working
49 | // new procudure: takes an object with timestamp info
50 | createNew: protectedProcedure
51 | .input(z.object({unixtime: z.number(),
52 | label:z.string(),
53 | clusterIP:z.string()
54 | }))
55 | .mutation(({ctx, input}) => {
56 | return ctx.prisma.snapshot.create({
57 | data: {
58 | unixtime: input.unixtime,
59 | label: input.label,
60 | userId: ctx.session?.user.id,
61 | clusterIP: input.clusterIP,
62 | }
63 | })
64 | }),
65 |
66 | deleteSnapshotsByIP: protectedProcedure
67 | .input(z.object({ ipToDelete: z.string() }))
68 | .mutation(async ({ ctx, input }) => {
69 | const deleteSnaps = await ctx.prisma.snapshot.deleteMany({
70 | where: {
71 | clusterIP: {
72 | equals: input.ipToDelete
73 | },
74 | },
75 | });
76 |
77 | return {
78 | success: 'deleted',
79 | data:{
80 | deleteSnaps
81 | }
82 | };
83 | }),
84 |
85 | // getSecretMessage: protectedProcedure.query(() => {
86 | // return "you can now see this secret message!";
87 | // }),
88 | });
89 |
--------------------------------------------------------------------------------
/src/server/api/trpc.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * YOU PROBABLY DON'T NEED TO EDIT THIS FILE, UNLESS:
3 | * 1. You want to modify request context (see Part 1).
4 | * 2. You want to create a new middleware or type of procedure (see Part 3).
5 | *
6 | * TL;DR - This is where all the tRPC server stuff is created and plugged in. The pieces you will
7 | * need to use are documented accordingly near the end.
8 | */
9 |
10 | /**
11 | * 1. CONTEXT
12 | *
13 | * This section defines the "contexts" that are available in the backend API.
14 | *
15 | * These allow you to access things when processing a request, like the database, the session, etc.
16 | */
17 | import { type CreateNextContextOptions } from "@trpc/server/adapters/next";
18 | import { type Session } from "next-auth";
19 |
20 | import { getServerAuthSession } from "~/server/auth";
21 | import { prisma } from "~/server/db";
22 |
23 | type CreateContextOptions = {
24 | session: Session | null;
25 | };
26 |
27 | /**
28 | * This helper generates the "internals" for a tRPC context. If you need to use it, you can export
29 | * it from here.
30 | *
31 | * Examples of things you may need it for:
32 | * - testing, so we don't have to mock Next.js' req/res
33 | * - tRPC's `createSSGHelpers`, where we don't have req/res
34 | *
35 | *
36 | */
37 | const createInnerTRPCContext = (opts: CreateContextOptions) => {
38 | return {
39 | session: opts.session,
40 | prisma,
41 | };
42 | };
43 |
44 | /**
45 | * This is the actual context you will use in your router. It will be used to process every request
46 | * that goes through your tRPC endpoint.
47 | *
48 | * @see https://trpc.io/docs/context
49 | */
50 | export const createTRPCContext = async (opts: CreateNextContextOptions) => {
51 | const { req, res } = opts;
52 |
53 | // Get the session from the server using the getServerSession wrapper function
54 | const session = await getServerAuthSession({ req, res });
55 |
56 | return createInnerTRPCContext({
57 | session,
58 | });
59 | };
60 |
61 | /**
62 | * 2. INITIALIZATION
63 | *
64 | * This is where the tRPC API is initialized, connecting the context and transformer. We also parse
65 | * ZodErrors so that you get typesafety on the frontend if your procedure fails due to validation
66 | * errors on the backend.
67 | */
68 | import { initTRPC, TRPCError } from "@trpc/server";
69 | import superjson from "superjson";
70 | import { ZodError } from "zod";
71 |
72 | const t = initTRPC.context().create({
73 | transformer: superjson,
74 | errorFormatter({ shape, error }) {
75 | return {
76 | ...shape,
77 | data: {
78 | ...shape.data,
79 | zodError:
80 | error.cause instanceof ZodError ? error.cause.flatten() : null,
81 | },
82 | };
83 | },
84 | });
85 |
86 | /**
87 | * 3. ROUTER & PROCEDURE (THE IMPORTANT BIT)
88 | *
89 | * These are the pieces you use to build your tRPC API. You should import these a lot in the
90 | * "/src/server/api/routers" directory.
91 | */
92 |
93 | /**
94 | * This is how you create new routers and sub-routers in your tRPC API.
95 | *
96 | * @see https://trpc.io/docs/router
97 | */
98 | export const createTRPCRouter = t.router;
99 |
100 | /**
101 | * Public (unauthenticated) procedure
102 | *
103 | * This is the base piece you use to build new queries and mutations on your tRPC API. It does not
104 | * guarantee that a user querying is authorized, but you can still access user session data if they
105 | * are logged in.
106 | */
107 | export const publicProcedure = t.procedure;
108 |
109 | /** Reusable middleware that enforces users are logged in before running the procedure. */
110 | const enforceUserIsAuthed = t.middleware(({ ctx, next }) => {
111 | if (!ctx.session || !ctx.session.user) {
112 | throw new TRPCError({ code: "UNAUTHORIZED" });
113 | }
114 | return next({
115 | ctx: {
116 | // infers the `session` as non-nullable
117 | session: { ...ctx.session, user: ctx.session.user },
118 | },
119 | });
120 | });
121 |
122 | /**
123 | * Protected (authenticated) procedure
124 | *
125 | * If you want a query or mutation to ONLY be accessible to logged in users, use this. It verifies
126 | * the session is valid and guarantees `ctx.session.user` is not null.
127 | *
128 | * @see https://trpc.io/docs/procedures
129 | */
130 | export const protectedProcedure = t.procedure.use(enforceUserIsAuthed);
131 |
--------------------------------------------------------------------------------
/src/server/auth.ts:
--------------------------------------------------------------------------------
1 | import { type GetServerSidePropsContext } from "next";
2 | import {
3 | getServerSession,
4 | type NextAuthOptions,
5 | type DefaultSession,
6 | } from "next-auth";
7 | import GithubProvider from "next-auth/providers/github";
8 | import GoogleProvider from "next-auth/providers/google";
9 | import { PrismaAdapter } from "@next-auth/prisma-adapter";
10 | import { env } from "~/env.mjs";
11 | import { prisma } from "~/server/db";
12 | /**
13 | * Module augmentation for `next-auth` types. Allows us to add custom properties to the `session`
14 | * object and keep type safety.
15 | *
16 | * @see https://next-auth.js.org/getting-started/typescript#module-augmentation
17 | */
18 | declare module "next-auth" {
19 | interface Session extends DefaultSession {
20 | user: {
21 | id: string;
22 | // ...other properties
23 | // role: UserRole;
24 | } & DefaultSession["user"];
25 | }
26 |
27 | // interface User {
28 | // // ...other properties
29 | // // role: UserRole;
30 | // }
31 | }
32 |
33 | /**
34 | * Options for NextAuth.js used to configure adapters, providers, callbacks, etc.
35 | *
36 | * @see https://next-auth.js.org/configuration/options
37 | */
38 | export const authOptions: NextAuthOptions = {
39 | theme: {
40 | colorScheme: "dark", // "auto" | "dark" | "light"
41 | },
42 | callbacks: {
43 | session: ({ session, user }) => ({
44 | ...session,
45 | user: {
46 | ...session.user,
47 | id: user.id,
48 | },
49 | }),
50 | },
51 | adapter: PrismaAdapter(prisma),
52 | providers: [
53 | GithubProvider({
54 | clientId: env.GITHUB_CLIENT_ID,
55 | clientSecret: env.GITHUB_CLIENT_SECRET,
56 | allowDangerousEmailAccountLinking: true,
57 | }),
58 |
59 | GoogleProvider({
60 | clientId: env.GOOGLE_CLIENT_ID,
61 | clientSecret: env.GOOGLE_CLIENT_SECRET,
62 | allowDangerousEmailAccountLinking: true,
63 | }),
64 |
65 | /**
66 | *
67 | * GitHub provider requires you to add the `refresh_token_expires_in` field to the Account
68 | * model. Refer to the NextAuth.js docs for the provider you want to use. Example:
69 | *
70 | * @see https://next-auth.js.org/providers/github
71 | */
72 | ],
73 | };
74 |
75 | /**
76 | * Wrapper for `getServerSession` so that you don't need to import the `authOptions` in every file.
77 | *
78 | * @see https://next-auth.js.org/configuration/nextjs
79 | */
80 | export const getServerAuthSession = (ctx: {
81 | req: GetServerSidePropsContext["req"];
82 | res: GetServerSidePropsContext["res"];
83 | }) => {
84 | return getServerSession(ctx.req, ctx.res, authOptions);
85 | };
86 |
--------------------------------------------------------------------------------
/src/server/db.ts:
--------------------------------------------------------------------------------
1 | import { PrismaClient } from "@prisma/client";
2 |
3 | import { env } from "~/env.mjs";
4 |
5 | const globalForPrisma = globalThis as unknown as {
6 | prisma: PrismaClient | undefined;
7 | };
8 |
9 | export const prisma =
10 | globalForPrisma.prisma ??
11 | new PrismaClient({
12 | log:
13 | env.NODE_ENV === "development" ? ["query", "error", "warn"] : ["error"],
14 | });
15 |
16 | if (env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
17 |
--------------------------------------------------------------------------------
/src/styles/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/src/utils/api.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * This is the client-side entrypoint for your tRPC API. It is used to create the `api` object which
3 | * contains the Next.js App-wrapper, as well as your type-safe React Query hooks.
4 | *
5 | * We also create a few inference helpers for input and output types.
6 | */
7 | import { httpBatchLink, loggerLink } from "@trpc/client";
8 | import { createTRPCNext } from "@trpc/next";
9 | import { type inferRouterInputs, type inferRouterOutputs } from "@trpc/server";
10 | import superjson from "superjson";
11 |
12 | import { type AppRouter } from "~/server/api/root";
13 |
14 | const getBaseUrl = () => {
15 | if (typeof window !== "undefined") return ""; // browser should use relative url
16 | if (process.env.VERCEL_URL) return `https://${process.env.VERCEL_URL}`; // SSR should use vercel url
17 | return `http://localhost:${process.env.PORT ?? 3000}`; // dev SSR should use localhost
18 | };
19 |
20 | /** A set of type-safe react-query hooks for your tRPC API. */
21 | export const api = createTRPCNext({
22 | config() {
23 | return {
24 | /**
25 | * Transformer used for data de-serialization from the server.
26 | *
27 | * @see https://trpc.io/docs/data-transformers
28 | */
29 | transformer: superjson,
30 |
31 | /**
32 | * Links used to determine request flow from client to server.
33 | *
34 | * @see https://trpc.io/docs/links
35 | */
36 | links: [
37 | loggerLink({
38 | enabled: (opts) =>
39 | process.env.NODE_ENV === "development" ||
40 | (opts.direction === "down" && opts.result instanceof Error),
41 | }),
42 | httpBatchLink({
43 | url: `${getBaseUrl()}/api/trpc`,
44 | }),
45 | ],
46 | };
47 | },
48 | /**
49 | * Whether tRPC should await queries when server rendering pages.
50 | *
51 | * @see https://trpc.io/docs/nextjs#ssr-boolean-default-false
52 | */
53 | ssr: false,
54 | });
55 |
56 | /**
57 | * Inference helper for inputs.
58 | *
59 | * @example type HelloInput = RouterInputs['example']['hello']
60 | */
61 | export type RouterInputs = inferRouterInputs;
62 |
63 | /**
64 | * Inference helper for outputs.
65 | *
66 | * @example type HelloOutput = RouterOutputs['example']['hello']
67 | */
68 | export type RouterOutputs = inferRouterOutputs;
69 |
70 |
--------------------------------------------------------------------------------
/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import { type Config } from "tailwindcss";
2 |
3 | export default {
4 | content: ["./src/**/*.{js,ts,jsx,tsx}"],
5 | theme: {
6 | extend: {},
7 | },
8 | plugins: [require("daisyui"), require('@tailwindcss/typography')],
9 |
10 | daisyui: {
11 | styled: true,
12 | base: true,
13 | utils: true,
14 | logs: true,
15 | rtl: false,
16 | prefix: "",
17 | themes: ["luxury",
18 | "dark"
19 | ],
20 | },
21 |
22 | } satisfies Config;
23 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2017",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "checkJs": true,
7 | "skipLibCheck": true,
8 | "strict": true,
9 | "forceConsistentCasingInFileNames": true,
10 | "noEmit": true,
11 | "esModuleInterop": true,
12 | "module": "esnext",
13 | "moduleResolution": "node",
14 | "resolveJsonModule": true,
15 | "isolatedModules": true,
16 | "jsx": "preserve",
17 | "incremental": true,
18 | "noUncheckedIndexedAccess": true,
19 | "baseUrl": ".",
20 | "paths": {
21 | "~/*": ["./src/*"]
22 | }
23 | },
24 | "include": [
25 | ".eslintrc.cjs",
26 | "next-env.d.ts",
27 | "**/*.ts",
28 | "**/*.tsx",
29 | "**/*.cjs",
30 | "**/*.mjs"
31 | ],
32 | "exclude": ["node_modules"]
33 | }
34 |
--------------------------------------------------------------------------------