├── .gitignore ├── api ├── requirements.txt └── todo.py ├── todo-site ├── .eslintrc.json ├── styles │ └── globals.css ├── public │ ├── favicon.ico │ └── vercel.svg ├── postcss.config.js ├── components │ ├── task.ts │ └── taskItem.tsx ├── next.config.js ├── tailwind.config.js ├── pages │ ├── _app.tsx │ └── index.tsx ├── .gitignore ├── tsconfig.json ├── package.json ├── README.md └── yarn.lock ├── task_api.png ├── todo-infra ├── .npmignore ├── .gitignore ├── jest.config.js ├── README.md ├── test │ └── todo-infra.test.ts ├── package.json ├── tsconfig.json ├── bin │ └── todo-infra.ts ├── cdk.json └── lib │ └── todo-infra-stack.ts ├── README.md └── test └── api_integration_test.py /.gitignore: -------------------------------------------------------------------------------- 1 | **/*.pyc 2 | **/*.zip 3 | api/lib 4 | -------------------------------------------------------------------------------- /api/requirements.txt: -------------------------------------------------------------------------------- 1 | fastapi 2 | uvicorn 3 | mangum 4 | boto3 -------------------------------------------------------------------------------- /todo-site/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /task_api.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pixegami/todo-list-api/HEAD/task_api.png -------------------------------------------------------------------------------- /todo-site/styles/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /todo-infra/.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | 4 | # CDK asset staging directory 5 | .cdk.staging 6 | cdk.out 7 | -------------------------------------------------------------------------------- /todo-site/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pixegami/todo-list-api/HEAD/todo-site/public/favicon.ico -------------------------------------------------------------------------------- /todo-site/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /todo-infra/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | !jest.config.js 3 | *.d.ts 4 | node_modules 5 | 6 | # CDK asset staging directory 7 | .cdk.staging 8 | cdk.out 9 | -------------------------------------------------------------------------------- /todo-site/components/task.ts: -------------------------------------------------------------------------------- 1 | interface Task { 2 | task_id?: string; 3 | user_id?: string; 4 | content: string; 5 | is_done: boolean; 6 | } 7 | 8 | export default Task; 9 | -------------------------------------------------------------------------------- /todo-site/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | swcMinify: true, 5 | } 6 | 7 | module.exports = nextConfig 8 | -------------------------------------------------------------------------------- /todo-infra/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: 'node', 3 | roots: ['/test'], 4 | testMatch: ['**/*.test.ts'], 5 | transform: { 6 | '^.+\\.tsx?$': 'ts-jest' 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /todo-site/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | "./pages/**/*.{js,ts,jsx,tsx}", 5 | "./components/**/*.{js,ts,jsx,tsx}", 6 | ], 7 | theme: { 8 | extend: {}, 9 | }, 10 | plugins: [], 11 | }; 12 | -------------------------------------------------------------------------------- /todo-site/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import "../styles/globals.css"; 2 | import type { AppProps } from "next/app"; 3 | 4 | function MyApp({ Component, pageProps }: AppProps) { 5 | return ( 6 |
7 |
8 |
9 | 10 |
11 |
12 |
13 | ); 14 | } 15 | 16 | export default MyApp; 17 | -------------------------------------------------------------------------------- /todo-site/.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 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /todo-infra/README.md: -------------------------------------------------------------------------------- 1 | # Welcome to your CDK TypeScript project 2 | 3 | This is a blank project for CDK development with TypeScript. 4 | 5 | The `cdk.json` file tells the CDK Toolkit how to execute your app. 6 | 7 | ## Useful commands 8 | 9 | * `npm run build` compile typescript to js 10 | * `npm run watch` watch for changes and compile 11 | * `npm run test` perform the jest unit tests 12 | * `cdk deploy` deploy this stack to your default AWS account/region 13 | * `cdk diff` compare deployed stack with current state 14 | * `cdk synth` emits the synthesized CloudFormation template 15 | -------------------------------------------------------------------------------- /todo-site/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /todo-infra/test/todo-infra.test.ts: -------------------------------------------------------------------------------- 1 | // import * as cdk from 'aws-cdk-lib'; 2 | // import { Template } from 'aws-cdk-lib/assertions'; 3 | // import * as TodoInfra from '../lib/todo-infra-stack'; 4 | 5 | // example test. To run these tests, uncomment this file along with the 6 | // example resource in lib/todo-infra-stack.ts 7 | test('SQS Queue Created', () => { 8 | // const app = new cdk.App(); 9 | // // WHEN 10 | // const stack = new TodoInfra.TodoInfraStack(app, 'MyTestStack'); 11 | // // THEN 12 | // const template = Template.fromStack(stack); 13 | 14 | // template.hasResourceProperties('AWS::SQS::Queue', { 15 | // VisibilityTimeout: 300 16 | // }); 17 | }); 18 | -------------------------------------------------------------------------------- /todo-infra/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "todo-infra", 3 | "version": "0.1.0", 4 | "bin": { 5 | "todo-infra": "bin/todo-infra.js" 6 | }, 7 | "scripts": { 8 | "build": "tsc", 9 | "watch": "tsc -w", 10 | "test": "jest", 11 | "cdk": "cdk" 12 | }, 13 | "devDependencies": { 14 | "@types/jest": "^27.5.0", 15 | "@types/node": "10.17.27", 16 | "@types/prettier": "2.6.0", 17 | "jest": "^27.5.1", 18 | "ts-jest": "^27.1.4", 19 | "aws-cdk": "2.27.0", 20 | "ts-node": "^10.7.0", 21 | "typescript": "~3.9.7" 22 | }, 23 | "dependencies": { 24 | "aws-cdk-lib": "2.27.0", 25 | "constructs": "^10.0.0", 26 | "source-map-support": "^0.5.21" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /todo-site/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "todo-site", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build && next export", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@types/uuid": "^8.3.4", 13 | "next": "12.2.5", 14 | "react": "18.2.0", 15 | "react-dom": "18.2.0", 16 | "uuid": "^8.3.2" 17 | }, 18 | "devDependencies": { 19 | "@types/node": "18.7.8", 20 | "@types/react": "18.0.17", 21 | "@types/react-dom": "18.0.6", 22 | "autoprefixer": "^10.4.8", 23 | "eslint": "8.22.0", 24 | "eslint-config-next": "12.2.5", 25 | "postcss": "^8.4.16", 26 | "tailwindcss": "^3.1.8", 27 | "typescript": "4.7.4" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /todo-infra/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2018", 4 | "module": "commonjs", 5 | "lib": [ 6 | "es2018" 7 | ], 8 | "declaration": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": false, 18 | "inlineSourceMap": true, 19 | "inlineSources": true, 20 | "experimentalDecorators": true, 21 | "strictPropertyInitialization": false, 22 | "typeRoots": [ 23 | "./node_modules/@types" 24 | ] 25 | }, 26 | "exclude": [ 27 | "node_modules", 28 | "cdk.out" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /todo-infra/bin/todo-infra.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import 'source-map-support/register'; 3 | import * as cdk from 'aws-cdk-lib'; 4 | import { TodoInfraStack } from '../lib/todo-infra-stack'; 5 | 6 | const app = new cdk.App(); 7 | new TodoInfraStack(app, 'TodoInfraStack', { 8 | /* If you don't specify 'env', this stack will be environment-agnostic. 9 | * Account/Region-dependent features and context lookups will not work, 10 | * but a single synthesized template can be deployed anywhere. */ 11 | 12 | /* Uncomment the next line to specialize this stack for the AWS Account 13 | * and Region that are implied by the current CLI configuration. */ 14 | // env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION }, 15 | 16 | /* Uncomment the next line if you know exactly what Account and Region you 17 | * want to deploy the stack to. */ 18 | // env: { account: '123456789012', region: 'us-east-1' }, 19 | 20 | /* For more information, see https://docs.aws.amazon.com/cdk/latest/guide/environments.html */ 21 | }); -------------------------------------------------------------------------------- /todo-site/public/vercel.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /todo-infra/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "npx ts-node --prefer-ts-exts bin/todo-infra.ts", 3 | "watch": { 4 | "include": [ 5 | "**" 6 | ], 7 | "exclude": [ 8 | "README.md", 9 | "cdk*.json", 10 | "**/*.d.ts", 11 | "**/*.js", 12 | "tsconfig.json", 13 | "package*.json", 14 | "yarn.lock", 15 | "node_modules", 16 | "test" 17 | ] 18 | }, 19 | "context": { 20 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, 21 | "@aws-cdk/core:stackRelativeExports": true, 22 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, 23 | "@aws-cdk/aws-lambda:recognizeVersionProps": true, 24 | "@aws-cdk/aws-lambda:recognizeLayerVersion": true, 25 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true, 26 | "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true, 27 | "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true, 28 | "@aws-cdk/core:checkSecretUsage": true, 29 | "@aws-cdk/aws-iam:minimizePolicies": true, 30 | "@aws-cdk/core:target-partitions": [ 31 | "aws", 32 | "aws-cn" 33 | ] 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /todo-site/components/taskItem.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Task from "./task"; 3 | 4 | interface TaskItemInterface extends Task { 5 | onDelete: (taskId?: string) => void; 6 | onUpdate: (task: Task) => void; 7 | } 8 | 9 | const TaskItem: React.FC = (props) => { 10 | const [isDone, setIsDone] = React.useState(props.is_done); 11 | 12 | const handleTaskUpdate = async () => { 13 | const newIsDoneValue = !isDone; 14 | setIsDone(!isDone); 15 | const updatedTask = { 16 | task_id: props.task_id, 17 | user_id: props.user_id, 18 | content: props.content, 19 | is_done: newIsDoneValue, 20 | }; 21 | props.onUpdate(updatedTask); 22 | }; 23 | 24 | const taskStyle: string = isDone ? "text-gray-400 line-through" : ""; 25 | 26 | // Create a task item with a check box. 27 | const taskItem = ( 28 |
29 | 30 |
{props.content}
31 |
32 | 40 |
41 | ); 42 | return taskItem; 43 | }; 44 | export default TaskItem; 45 | -------------------------------------------------------------------------------- /todo-site/README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | ``` 12 | 13 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 14 | 15 | You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. 16 | 17 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. 18 | 19 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. 20 | 21 | ## Learn More 22 | 23 | To learn more about Next.js, take a look at the following resources: 24 | 25 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 26 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 27 | 28 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 29 | 30 | ## Deploy on Vercel 31 | 32 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 33 | 34 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # To-do List API: A FastAPI CRUD App 2 | 3 | This project is a full-stack CRUD app (a todo-list) with a Python FastAPI backend and a 4 | NextJS frontend. It is hosted on serverless AWS infrastructure (using Lambda and DynamoDB). 5 | 6 | ![Task API app](task_api.png) 7 | 8 | ## API Folder 9 | 10 | The `/api` folder contains the Python FastAPI code. 11 | 12 | ## Infrastructure Folder 13 | 14 | The `/todo-infra` folder contains the CDK code to deploy all the infrastructure 15 | (Lambda function and DynamoDB table) to your AWS account. 16 | 17 | You must have [AWS CLI](https://aws.amazon.com/cli/) configured, and 18 | [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html) installed on your machine. 19 | 20 | First, install the node modules. 21 | 22 | ```bash 23 | npm install 24 | ``` 25 | 26 | Then run bootstrap if you never used CDK with your account before. 27 | 28 | ```bash 29 | cdk bootstrap 30 | ``` 31 | 32 | Before you can deploy you need to build the front-end folder. Go into the `todo-site` folder and 33 | build the NextJS app. 34 | 35 | ```bash 36 | npm run build 37 | ``` 38 | 39 | Then go back to the `todo-infra` folder and deploy the stack. The site won't work yet because you'll need to get your API endpoint and update the front-end code too (see below). 40 | 41 | ```bash 42 | cdk deploy 43 | ``` 44 | 45 | ## Frontend Folder 46 | 47 | The `/todo-site` contains the NextJS frontend that interfaces with the CRUD API. If you want to 48 | test it with your endpoint, then don't forget to change `todoApiEndpoint` and `userId` to your own 49 | API (in `pages/index.tsx`). 50 | 51 | First, go into the `index.tsx` file and update the API route to the one you generated by your CDK deploy. 52 | 53 | ```typescript 54 | // TODO: Update this URL to your own API endpoint! 55 | const todoApiEndpoint: string = 56 | "https://XXXXXXX.lambda-url.ap-southeast-2.on.aws"; 57 | ``` 58 | 59 | Install the node modules. 60 | 61 | ```bash 62 | npm install 63 | ``` 64 | 65 | Run the development server locally. 66 | 67 | ```bash 68 | npm run dev 69 | ``` 70 | 71 | Build and export. 72 | 73 | ```bash 74 | npm run build 75 | ``` 76 | 77 | This will create static site assets to the `/out` folder in the front-end folder. 78 | 79 | ## Test Folder 80 | 81 | This contains the Pytest integration tests you can use to test your endpoint directly. Don't 82 | forget to change your `ENDPOINT` to the one you want to use (in `api_integration_test.py`). 83 | 84 | You can run the test like this (but you have to have `pytest` installed): 85 | 86 | ```bash 87 | pytest 88 | ``` 89 | -------------------------------------------------------------------------------- /api/todo.py: -------------------------------------------------------------------------------- 1 | import os 2 | import time 3 | import boto3 4 | from typing import Optional 5 | from uuid import uuid4 6 | from fastapi import FastAPI, HTTPException 7 | from mangum import Mangum 8 | from pydantic import BaseModel 9 | from boto3.dynamodb.conditions import Key 10 | 11 | app = FastAPI() 12 | handler = Mangum(app) 13 | 14 | 15 | class PutTaskRequest(BaseModel): 16 | content: str 17 | user_id: Optional[str] = None 18 | task_id: Optional[str] = None 19 | is_done: bool = False 20 | 21 | 22 | @app.get("/") 23 | async def root(): 24 | return {"message": "Hello from ToDo API!"} 25 | 26 | 27 | @app.put("/create-task") 28 | async def create_task(put_task_request: PutTaskRequest): 29 | created_time = int(time.time()) 30 | item = { 31 | "user_id": put_task_request.user_id, 32 | "content": put_task_request.content, 33 | "is_done": False, 34 | "created_time": created_time, 35 | "task_id": f"task_{uuid4().hex}", 36 | "ttl": int(created_time + 86400), # Expire after 24 hours. 37 | } 38 | 39 | # Put it into the table. 40 | table = _get_table() 41 | table.put_item(Item=item) 42 | return {"task": item} 43 | 44 | 45 | @app.get("/get-task/{task_id}") 46 | async def get_task(task_id: str): 47 | # Get the task from the table. 48 | table = _get_table() 49 | response = table.get_item(Key={"task_id": task_id}) 50 | item = response.get("Item") 51 | if not item: 52 | raise HTTPException(status_code=404, detail=f"Task {task_id} not found") 53 | return item 54 | 55 | 56 | @app.get("/list-tasks/{user_id}") 57 | async def list_tasks(user_id: str): 58 | # List the top N tasks from the table, using the user index. 59 | table = _get_table() 60 | response = table.query( 61 | IndexName="user-index", 62 | KeyConditionExpression=Key("user_id").eq(user_id), 63 | ScanIndexForward=False, 64 | Limit=10, 65 | ) 66 | tasks = response.get("Items") 67 | return {"tasks": tasks} 68 | 69 | 70 | @app.put("/update-task") 71 | async def update_task(put_task_request: PutTaskRequest): 72 | # Update the task in the table. 73 | table = _get_table() 74 | table.update_item( 75 | Key={"task_id": put_task_request.task_id}, 76 | UpdateExpression="SET content = :content, is_done = :is_done", 77 | ExpressionAttributeValues={ 78 | ":content": put_task_request.content, 79 | ":is_done": put_task_request.is_done, 80 | }, 81 | ReturnValues="ALL_NEW", 82 | ) 83 | return {"updated_task_id": put_task_request.task_id} 84 | 85 | 86 | @app.delete("/delete-task/{task_id}") 87 | async def delete_task(task_id: str): 88 | # Delete the task from the table. 89 | table = _get_table() 90 | table.delete_item(Key={"task_id": task_id}) 91 | return {"deleted_task_id": task_id} 92 | 93 | 94 | def _get_table(): 95 | table_name = os.environ.get("TABLE_NAME") 96 | return boto3.resource("dynamodb").Table(table_name) 97 | -------------------------------------------------------------------------------- /test/api_integration_test.py: -------------------------------------------------------------------------------- 1 | from uuid import uuid4 2 | import requests 3 | 4 | 5 | ENDPOINT = "https://67mtb3ab2k2rxf4o3xohyy7mfu0cfjho.lambda-url.ap-southeast-2.on.aws" 6 | 7 | 8 | def test_can_put_and_get_task(): 9 | user_id = f"user_{uuid4().hex}" 10 | random_task_content = f"task content: {uuid4().hex}" 11 | create_response = create_task(user_id, random_task_content) 12 | assert create_response.status_code == 200 13 | 14 | task_id = create_response.json()["task"]["task_id"] 15 | get_task_response = get_task(task_id) 16 | assert get_task_response.status_code == 200 17 | print(get_task_response) 18 | assert get_task_response.json()["content"] == random_task_content 19 | 20 | 21 | def test_can_list_tasks(): 22 | # Create a new user for this test. 23 | user_id = f"user_{uuid4().hex}" 24 | 25 | # Create 3 tasks for this user. 26 | for i in range(3): 27 | create_task(user_id, f"task_{i}") 28 | 29 | # List the tasks for this user. 30 | response = list_tasks(user_id) 31 | tasks = response.json()["tasks"] 32 | assert len(tasks) == 3 33 | 34 | 35 | def test_can_update_task(): 36 | # Create a new user for this test. 37 | user_id = f"user_{uuid4().hex}" 38 | create_response = create_task(user_id, "task content") 39 | task_id = create_response.json()["task"]["task_id"] 40 | 41 | # Update the task with new content. 42 | new_task_content = f"updated task content: {uuid4().hex}" 43 | payload = { 44 | "content": new_task_content, 45 | "task_id": task_id, 46 | "is_done": True, 47 | } 48 | update_task_response = update_task(payload) 49 | assert update_task_response.status_code == 200 50 | 51 | get_task_response = get_task(task_id) 52 | assert get_task_response.status_code == 200 53 | assert get_task_response.json()["content"] == new_task_content 54 | assert get_task_response.json()["is_done"] == True 55 | 56 | 57 | def test_can_delete_task(): 58 | user_id = f"user_{uuid4().hex}" 59 | create_response = create_task(user_id, "task1") 60 | task_id = create_response.json()["task"]["task_id"] 61 | 62 | # Delete the task. 63 | delete_task(task_id) 64 | 65 | # We shouldn't be able to get the task anymore. 66 | get_task_response = get_task(task_id) 67 | assert get_task_response.status_code == 404 68 | 69 | 70 | def list_tasks(user_id: str) -> dict: 71 | return requests.get(f"{ENDPOINT}/list-tasks/{user_id}") 72 | 73 | 74 | def create_task(user_id: str, content: str) -> dict: 75 | payload = { 76 | "user_id": user_id, 77 | "content": content, 78 | } 79 | return requests.put(f"{ENDPOINT}/create-task", json=payload) 80 | 81 | 82 | def get_task(task_id: str) -> dict: 83 | return requests.get(f"{ENDPOINT}/get-task/{task_id}") 84 | 85 | 86 | def delete_task(task_id: str) -> dict: 87 | return requests.delete(f"{ENDPOINT}/delete-task/{task_id}") 88 | 89 | 90 | def update_task(payload: dict) -> dict: 91 | return requests.put(f"{ENDPOINT}/update-task", json=payload) 92 | -------------------------------------------------------------------------------- /todo-infra/lib/todo-infra-stack.ts: -------------------------------------------------------------------------------- 1 | import { CfnOutput, RemovalPolicy, Stack, StackProps } from "aws-cdk-lib"; 2 | import { Construct } from "constructs"; 3 | import * as ddb from "aws-cdk-lib/aws-dynamodb"; 4 | import * as lambda from "aws-cdk-lib/aws-lambda"; 5 | import * as s3 from "aws-cdk-lib/aws-s3"; 6 | import * as s3deploy from "aws-cdk-lib/aws-s3-deployment"; 7 | 8 | export class TodoInfraStack extends Stack { 9 | constructor(scope: Construct, id: string, props?: StackProps) { 10 | super(scope, id, props); 11 | 12 | // Create DDB table to store the tasks. 13 | const table = new ddb.Table(this, "Tasks", { 14 | partitionKey: { name: "task_id", type: ddb.AttributeType.STRING }, 15 | billingMode: ddb.BillingMode.PAY_PER_REQUEST, 16 | timeToLiveAttribute: "ttl", 17 | }); 18 | 19 | // Add GSI based on user_id. 20 | table.addGlobalSecondaryIndex({ 21 | indexName: "user-index", 22 | partitionKey: { name: "user_id", type: ddb.AttributeType.STRING }, 23 | sortKey: { name: "created_time", type: ddb.AttributeType.NUMBER }, 24 | }); 25 | 26 | // Create an S3 bucket to host static website 27 | const websiteBucket = new s3.Bucket(this, "TodoSiteBucket", { 28 | websiteIndexDocument: "index.html", 29 | removalPolicy: RemovalPolicy.DESTROY, 30 | publicReadAccess: true, 31 | blockPublicAccess: s3.BlockPublicAccess.BLOCK_ACLS, 32 | accessControl: s3.BucketAccessControl.BUCKET_OWNER_FULL_CONTROL, 33 | }); 34 | 35 | // Create Lambda function for the API. 36 | const api = new lambda.Function(this, "API", { 37 | // https://docs.aws.amazon.com/cdk/api/v1/docs/aws-lambda-readme.html#bundling-asset-code 38 | code: lambda.Code.fromAsset("../api", { 39 | bundling: { 40 | image: lambda.Runtime.PYTHON_3_9.bundlingImage, 41 | command: [ 42 | "bash", 43 | "-c", 44 | "pip install -r requirements.txt -t /asset-output && cp -au . /asset-output", 45 | ], 46 | }, 47 | }), 48 | runtime: lambda.Runtime.PYTHON_3_9, 49 | handler: "todo.handler", 50 | architecture: lambda.Architecture.ARM_64, 51 | environment: { 52 | TABLE_NAME: table.tableName, 53 | }, 54 | }); 55 | table.grantReadWriteData(api); 56 | 57 | // Create a URL so we can access the function. 58 | const functionUrl = api.addFunctionUrl({ 59 | authType: lambda.FunctionUrlAuthType.NONE, 60 | cors: { 61 | allowedOrigins: ["*"], 62 | allowedMethods: [lambda.HttpMethod.ALL], 63 | allowedHeaders: ["*"], 64 | }, 65 | }); 66 | 67 | // Deploy site contents to S3 bucket 68 | new s3deploy.BucketDeployment(this, "DeployTodoSite", { 69 | sources: [s3deploy.Source.asset("../todo-site/out")], 70 | destinationBucket: websiteBucket, 71 | }); 72 | 73 | // Output the website URL 74 | new CfnOutput(this, "TodoSiteURL", { 75 | value: websiteBucket.bucketWebsiteUrl, 76 | }); 77 | 78 | // Output the API function url. 79 | new CfnOutput(this, "APIUrl", { 80 | value: functionUrl.url, 81 | }); 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /todo-site/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from "next"; 2 | import Head from "next/head"; 3 | import React, { useEffect } from "react"; 4 | import Task from "../components/task"; 5 | import TaskItem from "../components/taskItem"; 6 | import { v4 as uuidv4 } from "uuid"; 7 | 8 | const Home: NextPage = () => { 9 | // TODO: Update this URL to your own API endpoint! 10 | const todoApiEndpoint: string = 11 | "https://cv736exbi2rvfpwo45jluf3u5a0olvpe.lambda-url.ap-southeast-2.on.aws"; 12 | 13 | const userId: string = "pixegami"; 14 | const [isLoading, setIsLoading] = React.useState(true); 15 | const [tasks, setTasks] = React.useState([]); 16 | const [newTaskContent, setNewTaskContent] = React.useState(""); 17 | 18 | const getTasks = async () => { 19 | setIsLoading(true); 20 | const response = await fetch(`${todoApiEndpoint}/list-tasks/${userId}`); 21 | const responseData = await response.json(); 22 | 23 | // Convert raw JSON to tasks. 24 | const tasks: Task[] = responseData.tasks; 25 | console.log(tasks); 26 | setTasks(tasks); 27 | setIsLoading(false); 28 | }; 29 | 30 | // Get the existing to-do items. 31 | useEffect(() => { 32 | getTasks(); 33 | }, []); 34 | 35 | const putTask = async (task: Task) => { 36 | // Put a local copy of this task into the state first for immediate feedback. 37 | setTasks([task, ...tasks]); 38 | 39 | const response = await fetch(`${todoApiEndpoint}/create-task`, { 40 | method: "PUT", 41 | headers: { 42 | "Content-Type": "application/json", 43 | }, 44 | body: JSON.stringify(task), 45 | }); 46 | console.log(response); 47 | const responseData = await response.json(); 48 | const taskId: string = responseData.task.task_id; 49 | console.log(`Successfully put task: ${taskId}`); 50 | getTasks(); 51 | }; 52 | 53 | const deleteTask = async (taskId?: string) => { 54 | // Remove it from the local task list. 55 | const newTasks = tasks.filter((task) => task.task_id !== taskId); 56 | setTasks(newTasks); 57 | 58 | // Delete task from table. 59 | const response = await fetch(`${todoApiEndpoint}/delete-task/${taskId}`, { 60 | method: "DELETE", 61 | }); 62 | console.log(response); 63 | }; 64 | 65 | const updateTask = async (updatedTask: Task) => { 66 | const response = await fetch(`${todoApiEndpoint}/update-task`, { 67 | method: "PUT", 68 | headers: { 69 | "Content-Type": "application/json", 70 | }, 71 | body: JSON.stringify(updatedTask), 72 | }); 73 | console.log(response); 74 | }; 75 | 76 | const addNewTask = async () => { 77 | const task: Task = { 78 | task_id: `task_${uuidv4()}`, // New task with UUID4 79 | user_id: userId, 80 | content: newTaskContent, 81 | is_done: false, 82 | }; 83 | setNewTaskContent(""); 84 | await putTask(task); 85 | }; 86 | 87 | // Create the task input field. 88 | const taskInputField = ( 89 |
90 | setNewTaskContent(e.target.value)} 96 | /> 97 | 103 |
104 | ); 105 | 106 | // Create a list of the tasks. 107 | const taskList = ( 108 | // Create task using index as key 109 |
110 | {tasks.map((task) => ( 111 | 117 | ))} 118 |
119 | ); 120 | 121 | const loadingText: string = isLoading ? "Loading" : "Ready"; 122 | const loadingTextColor: string = isLoading 123 | ? "text-orange-500" 124 | : "text-green-500"; 125 | const loadingStatus = ( 126 |
127 | {loadingText} 128 |
129 | ); 130 | 131 | const userIdElement = ( 132 |
User ID: {userId}
133 | ); 134 | 135 | return ( 136 |
137 | 138 | To-Do List App 139 | 140 | 141 | 142 | 143 |
144 |

My Tasks

145 | {userIdElement} 146 | {loadingStatus} 147 | {taskList} 148 | {taskInputField} 149 |
150 |
151 | ); 152 | }; 153 | 154 | export default Home; 155 | -------------------------------------------------------------------------------- /todo-site/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime-corejs3@^7.10.2": 6 | version "7.18.9" 7 | resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz" 8 | integrity sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A== 9 | dependencies: 10 | core-js-pure "^3.20.2" 11 | regenerator-runtime "^0.13.4" 12 | 13 | "@babel/runtime@^7.10.2", "@babel/runtime@^7.18.9": 14 | version "7.18.9" 15 | resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz" 16 | integrity sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw== 17 | dependencies: 18 | regenerator-runtime "^0.13.4" 19 | 20 | "@eslint/eslintrc@^1.3.0": 21 | version "1.3.0" 22 | resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz" 23 | integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== 24 | dependencies: 25 | ajv "^6.12.4" 26 | debug "^4.3.2" 27 | espree "^9.3.2" 28 | globals "^13.15.0" 29 | ignore "^5.2.0" 30 | import-fresh "^3.2.1" 31 | js-yaml "^4.1.0" 32 | minimatch "^3.1.2" 33 | strip-json-comments "^3.1.1" 34 | 35 | "@humanwhocodes/config-array@^0.10.4": 36 | version "0.10.4" 37 | resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz" 38 | integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== 39 | dependencies: 40 | "@humanwhocodes/object-schema" "^1.2.1" 41 | debug "^4.1.1" 42 | minimatch "^3.0.4" 43 | 44 | "@humanwhocodes/gitignore-to-minimatch@^1.0.2": 45 | version "1.0.2" 46 | resolved "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" 47 | integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== 48 | 49 | "@humanwhocodes/object-schema@^1.2.1": 50 | version "1.2.1" 51 | resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" 52 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 53 | 54 | "@next/env@12.2.5": 55 | version "12.2.5" 56 | resolved "https://registry.npmjs.org/@next/env/-/env-12.2.5.tgz" 57 | integrity sha512-vLPLV3cpPGjUPT3PjgRj7e3nio9t6USkuew3JE/jMeon/9Mvp1WyR18v3iwnCuX7eUAm1HmAbJHHLAbcu/EJcw== 58 | 59 | "@next/eslint-plugin-next@12.2.5": 60 | version "12.2.5" 61 | resolved "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.5.tgz" 62 | integrity sha512-VBjVbmqEzGiOTBq4+wpeVXt/KgknnGB6ahvC/AxiIGnN93/RCSyXhFRI4uSfftM2Ba3w7ZO7076bfKasZsA0fw== 63 | dependencies: 64 | glob "7.1.7" 65 | 66 | "@next/swc-android-arm-eabi@12.2.5": 67 | version "12.2.5" 68 | resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.5.tgz#903a5479ab4c2705d9c08d080907475f7bacf94d" 69 | integrity sha512-cPWClKxGhgn2dLWnspW+7psl3MoLQUcNqJqOHk2BhNcou9ARDtC0IjQkKe5qcn9qg7I7U83Gp1yh2aesZfZJMA== 70 | 71 | "@next/swc-android-arm64@12.2.5": 72 | version "12.2.5" 73 | resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.2.5.tgz#2f9a98ec4166c7860510963b31bda1f57a77c792" 74 | integrity sha512-vMj0efliXmC5b7p+wfcQCX0AfU8IypjkzT64GiKJD9PgiA3IILNiGJr1fw2lyUDHkjeWx/5HMlMEpLnTsQslwg== 75 | 76 | "@next/swc-darwin-arm64@12.2.5": 77 | version "12.2.5" 78 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.5.tgz#31b1c3c659d54be546120c488a1e1bad21c24a1d" 79 | integrity sha512-VOPWbO5EFr6snla/WcxUKtvzGVShfs302TEMOtzYyWni6f9zuOetijJvVh9CCTzInnXAZMtHyNhefijA4HMYLg== 80 | 81 | "@next/swc-darwin-x64@12.2.5": 82 | version "12.2.5" 83 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.5.tgz#2e44dd82b2b7fef88238d1bc4d3bead5884cedfd" 84 | integrity sha512-5o8bTCgAmtYOgauO/Xd27vW52G2/m3i5PX7MUYePquxXAnX73AAtqA3WgPXBRitEB60plSKZgOTkcpqrsh546A== 85 | 86 | "@next/swc-freebsd-x64@12.2.5": 87 | version "12.2.5" 88 | resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.5.tgz#e24e75d8c2581bfebc75e4f08f6ddbd116ce9dbd" 89 | integrity sha512-yYUbyup1JnznMtEBRkK4LT56N0lfK5qNTzr6/DEyDw5TbFVwnuy2hhLBzwCBkScFVjpFdfiC6SQAX3FrAZzuuw== 90 | 91 | "@next/swc-linux-arm-gnueabihf@12.2.5": 92 | version "12.2.5" 93 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.5.tgz#46d8c514d834d2b5f67086013f0bd5e3081e10b9" 94 | integrity sha512-2ZE2/G921Acks7UopJZVMgKLdm4vN4U0yuzvAMJ6KBavPzqESA2yHJlm85TV/K9gIjKhSk5BVtauIUntFRP8cg== 95 | 96 | "@next/swc-linux-arm64-gnu@12.2.5": 97 | version "12.2.5" 98 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.5.tgz#91f725ac217d3a1f4f9f53b553615ba582fd3d9f" 99 | integrity sha512-/I6+PWVlz2wkTdWqhlSYYJ1pWWgUVva6SgX353oqTh8njNQp1SdFQuWDqk8LnM6ulheVfSsgkDzxrDaAQZnzjQ== 100 | 101 | "@next/swc-linux-arm64-musl@12.2.5": 102 | version "12.2.5" 103 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.5.tgz#e627e8c867920995810250303cd9b8e963598383" 104 | integrity sha512-LPQRelfX6asXyVr59p5sTpx5l+0yh2Vjp/R8Wi4X9pnqcayqT4CUJLiHqCvZuLin3IsFdisJL0rKHMoaZLRfmg== 105 | 106 | "@next/swc-linux-x64-gnu@12.2.5": 107 | version "12.2.5" 108 | resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.5.tgz" 109 | integrity sha512-0szyAo8jMCClkjNK0hknjhmAngUppoRekW6OAezbEYwHXN/VNtsXbfzgYOqjKWxEx3OoAzrT3jLwAF0HdX2MEw== 110 | 111 | "@next/swc-linux-x64-musl@12.2.5": 112 | version "12.2.5" 113 | resolved "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.5.tgz" 114 | integrity sha512-zg/Y6oBar1yVnW6Il1I/08/2ukWtOG6s3acdJdEyIdsCzyQi4RLxbbhkD/EGQyhqBvd3QrC6ZXQEXighQUAZ0g== 115 | 116 | "@next/swc-win32-arm64-msvc@12.2.5": 117 | version "12.2.5" 118 | resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.5.tgz#a93e958133ad3310373fda33a79aa10af2a0aa97" 119 | integrity sha512-3/90DRNSqeeSRMMEhj4gHHQlLhhKg5SCCoYfE3kBjGpE63EfnblYUqsszGGZ9ekpKL/R4/SGB40iCQr8tR5Jiw== 120 | 121 | "@next/swc-win32-ia32-msvc@12.2.5": 122 | version "12.2.5" 123 | resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.5.tgz#4f5f7ba0a98ff89a883625d4af0125baed8b2e19" 124 | integrity sha512-hGLc0ZRAwnaPL4ulwpp4D2RxmkHQLuI8CFOEEHdzZpS63/hMVzv81g8jzYA0UXbb9pus/iTc3VRbVbAM03SRrw== 125 | 126 | "@next/swc-win32-x64-msvc@12.2.5": 127 | version "12.2.5" 128 | resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.5.tgz#20fed129b04a0d3f632c6d0de135345bb623b1e4" 129 | integrity sha512-7h5/ahY7NeaO2xygqVrSG/Y8Vs4cdjxIjowTZ5W6CKoTKn7tmnuxlUc2h74x06FKmbhAd9agOjr/AOKyxYYm9Q== 130 | 131 | "@nodelib/fs.scandir@2.1.5": 132 | version "2.1.5" 133 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 134 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 135 | dependencies: 136 | "@nodelib/fs.stat" "2.0.5" 137 | run-parallel "^1.1.9" 138 | 139 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 140 | version "2.0.5" 141 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 142 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 143 | 144 | "@nodelib/fs.walk@^1.2.3": 145 | version "1.2.8" 146 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 147 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 148 | dependencies: 149 | "@nodelib/fs.scandir" "2.1.5" 150 | fastq "^1.6.0" 151 | 152 | "@rushstack/eslint-patch@^1.1.3": 153 | version "1.1.4" 154 | resolved "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz" 155 | integrity sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA== 156 | 157 | "@swc/helpers@0.4.3": 158 | version "0.4.3" 159 | resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.3.tgz" 160 | integrity sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA== 161 | dependencies: 162 | tslib "^2.4.0" 163 | 164 | "@types/json5@^0.0.29": 165 | version "0.0.29" 166 | resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" 167 | integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== 168 | 169 | "@types/node@18.7.8": 170 | version "18.7.8" 171 | resolved "https://registry.npmjs.org/@types/node/-/node-18.7.8.tgz" 172 | integrity sha512-/YP55EMK2341JkODUb8DM9O0x1SIz2aBvyF33Uf1c76St3VpsMXEIW0nxuKkq/5cxnbz0RD9cfwNZHEAZQD3ag== 173 | 174 | "@types/prop-types@*": 175 | version "15.7.5" 176 | resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz" 177 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== 178 | 179 | "@types/react-dom@18.0.6": 180 | version "18.0.6" 181 | resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz" 182 | integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== 183 | dependencies: 184 | "@types/react" "*" 185 | 186 | "@types/react@*", "@types/react@18.0.17": 187 | version "18.0.17" 188 | resolved "https://registry.npmjs.org/@types/react/-/react-18.0.17.tgz" 189 | integrity sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ== 190 | dependencies: 191 | "@types/prop-types" "*" 192 | "@types/scheduler" "*" 193 | csstype "^3.0.2" 194 | 195 | "@types/scheduler@*": 196 | version "0.16.2" 197 | resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" 198 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== 199 | 200 | "@types/uuid@^8.3.4": 201 | version "8.3.4" 202 | resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" 203 | integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== 204 | 205 | "@typescript-eslint/parser@^5.21.0": 206 | version "5.33.1" 207 | resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz" 208 | integrity sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA== 209 | dependencies: 210 | "@typescript-eslint/scope-manager" "5.33.1" 211 | "@typescript-eslint/types" "5.33.1" 212 | "@typescript-eslint/typescript-estree" "5.33.1" 213 | debug "^4.3.4" 214 | 215 | "@typescript-eslint/scope-manager@5.33.1": 216 | version "5.33.1" 217 | resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz" 218 | integrity sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA== 219 | dependencies: 220 | "@typescript-eslint/types" "5.33.1" 221 | "@typescript-eslint/visitor-keys" "5.33.1" 222 | 223 | "@typescript-eslint/types@5.33.1": 224 | version "5.33.1" 225 | resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz" 226 | integrity sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ== 227 | 228 | "@typescript-eslint/typescript-estree@5.33.1": 229 | version "5.33.1" 230 | resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz" 231 | integrity sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA== 232 | dependencies: 233 | "@typescript-eslint/types" "5.33.1" 234 | "@typescript-eslint/visitor-keys" "5.33.1" 235 | debug "^4.3.4" 236 | globby "^11.1.0" 237 | is-glob "^4.0.3" 238 | semver "^7.3.7" 239 | tsutils "^3.21.0" 240 | 241 | "@typescript-eslint/visitor-keys@5.33.1": 242 | version "5.33.1" 243 | resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz" 244 | integrity sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg== 245 | dependencies: 246 | "@typescript-eslint/types" "5.33.1" 247 | eslint-visitor-keys "^3.3.0" 248 | 249 | acorn-jsx@^5.3.2: 250 | version "5.3.2" 251 | resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" 252 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 253 | 254 | acorn-node@^1.8.2: 255 | version "1.8.2" 256 | resolved "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz" 257 | integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== 258 | dependencies: 259 | acorn "^7.0.0" 260 | acorn-walk "^7.0.0" 261 | xtend "^4.0.2" 262 | 263 | acorn-walk@^7.0.0: 264 | version "7.2.0" 265 | resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" 266 | integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== 267 | 268 | acorn@^7.0.0: 269 | version "7.4.1" 270 | resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" 271 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 272 | 273 | acorn@^8.8.0: 274 | version "8.8.0" 275 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" 276 | integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== 277 | 278 | ajv@^6.10.0, ajv@^6.12.4: 279 | version "6.12.6" 280 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 281 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 282 | dependencies: 283 | fast-deep-equal "^3.1.1" 284 | fast-json-stable-stringify "^2.0.0" 285 | json-schema-traverse "^0.4.1" 286 | uri-js "^4.2.2" 287 | 288 | ansi-regex@^5.0.1: 289 | version "5.0.1" 290 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" 291 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 292 | 293 | ansi-styles@^4.1.0: 294 | version "4.3.0" 295 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 296 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 297 | dependencies: 298 | color-convert "^2.0.1" 299 | 300 | anymatch@~3.1.2: 301 | version "3.1.2" 302 | resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" 303 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 304 | dependencies: 305 | normalize-path "^3.0.0" 306 | picomatch "^2.0.4" 307 | 308 | arg@^5.0.2: 309 | version "5.0.2" 310 | resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" 311 | integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== 312 | 313 | argparse@^2.0.1: 314 | version "2.0.1" 315 | resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" 316 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 317 | 318 | aria-query@^4.2.2: 319 | version "4.2.2" 320 | resolved "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz" 321 | integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== 322 | dependencies: 323 | "@babel/runtime" "^7.10.2" 324 | "@babel/runtime-corejs3" "^7.10.2" 325 | 326 | array-includes@^3.1.4, array-includes@^3.1.5: 327 | version "3.1.5" 328 | resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz" 329 | integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== 330 | dependencies: 331 | call-bind "^1.0.2" 332 | define-properties "^1.1.4" 333 | es-abstract "^1.19.5" 334 | get-intrinsic "^1.1.1" 335 | is-string "^1.0.7" 336 | 337 | array-union@^2.1.0: 338 | version "2.1.0" 339 | resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" 340 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 341 | 342 | array.prototype.flat@^1.2.5: 343 | version "1.3.0" 344 | resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz" 345 | integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== 346 | dependencies: 347 | call-bind "^1.0.2" 348 | define-properties "^1.1.3" 349 | es-abstract "^1.19.2" 350 | es-shim-unscopables "^1.0.0" 351 | 352 | array.prototype.flatmap@^1.3.0: 353 | version "1.3.0" 354 | resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz" 355 | integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== 356 | dependencies: 357 | call-bind "^1.0.2" 358 | define-properties "^1.1.3" 359 | es-abstract "^1.19.2" 360 | es-shim-unscopables "^1.0.0" 361 | 362 | ast-types-flow@^0.0.7: 363 | version "0.0.7" 364 | resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" 365 | integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== 366 | 367 | autoprefixer@^10.4.8: 368 | version "10.4.8" 369 | resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz" 370 | integrity sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw== 371 | dependencies: 372 | browserslist "^4.21.3" 373 | caniuse-lite "^1.0.30001373" 374 | fraction.js "^4.2.0" 375 | normalize-range "^0.1.2" 376 | picocolors "^1.0.0" 377 | postcss-value-parser "^4.2.0" 378 | 379 | axe-core@^4.4.3: 380 | version "4.4.3" 381 | resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz" 382 | integrity sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w== 383 | 384 | axobject-query@^2.2.0: 385 | version "2.2.0" 386 | resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" 387 | integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== 388 | 389 | balanced-match@^1.0.0: 390 | version "1.0.2" 391 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 392 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 393 | 394 | binary-extensions@^2.0.0: 395 | version "2.2.0" 396 | resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" 397 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 398 | 399 | brace-expansion@^1.1.7: 400 | version "1.1.11" 401 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 402 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 403 | dependencies: 404 | balanced-match "^1.0.0" 405 | concat-map "0.0.1" 406 | 407 | braces@^3.0.2, braces@~3.0.2: 408 | version "3.0.2" 409 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 410 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 411 | dependencies: 412 | fill-range "^7.0.1" 413 | 414 | browserslist@^4.21.3: 415 | version "4.21.3" 416 | resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz" 417 | integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== 418 | dependencies: 419 | caniuse-lite "^1.0.30001370" 420 | electron-to-chromium "^1.4.202" 421 | node-releases "^2.0.6" 422 | update-browserslist-db "^1.0.5" 423 | 424 | call-bind@^1.0.0, call-bind@^1.0.2: 425 | version "1.0.2" 426 | resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" 427 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 428 | dependencies: 429 | function-bind "^1.1.1" 430 | get-intrinsic "^1.0.2" 431 | 432 | callsites@^3.0.0: 433 | version "3.1.0" 434 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 435 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 436 | 437 | camelcase-css@^2.0.1: 438 | version "2.0.1" 439 | resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" 440 | integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== 441 | 442 | caniuse-lite@^1.0.30001332, caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: 443 | version "1.0.30001380" 444 | resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001380.tgz" 445 | integrity sha512-OO+pPubxx16lkI7TVrbFpde8XHz66SMwstl1YWpg6uMGw56XnhYVwtPIjvX4kYpzwMwQKr4DDce394E03dQPGg== 446 | 447 | chalk@^4.0.0: 448 | version "4.1.2" 449 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" 450 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 451 | dependencies: 452 | ansi-styles "^4.1.0" 453 | supports-color "^7.1.0" 454 | 455 | chokidar@^3.5.3: 456 | version "3.5.3" 457 | resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" 458 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 459 | dependencies: 460 | anymatch "~3.1.2" 461 | braces "~3.0.2" 462 | glob-parent "~5.1.2" 463 | is-binary-path "~2.1.0" 464 | is-glob "~4.0.1" 465 | normalize-path "~3.0.0" 466 | readdirp "~3.6.0" 467 | optionalDependencies: 468 | fsevents "~2.3.2" 469 | 470 | color-convert@^2.0.1: 471 | version "2.0.1" 472 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 473 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 474 | dependencies: 475 | color-name "~1.1.4" 476 | 477 | color-name@^1.1.4, color-name@~1.1.4: 478 | version "1.1.4" 479 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 480 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 481 | 482 | concat-map@0.0.1: 483 | version "0.0.1" 484 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 485 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 486 | 487 | core-js-pure@^3.20.2: 488 | version "3.24.1" 489 | resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.1.tgz" 490 | integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg== 491 | 492 | cross-spawn@^7.0.2: 493 | version "7.0.3" 494 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" 495 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 496 | dependencies: 497 | path-key "^3.1.0" 498 | shebang-command "^2.0.0" 499 | which "^2.0.1" 500 | 501 | cssesc@^3.0.0: 502 | version "3.0.0" 503 | resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" 504 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 505 | 506 | csstype@^3.0.2: 507 | version "3.1.0" 508 | resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz" 509 | integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== 510 | 511 | damerau-levenshtein@^1.0.8: 512 | version "1.0.8" 513 | resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" 514 | integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== 515 | 516 | debug@^2.6.9: 517 | version "2.6.9" 518 | resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" 519 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 520 | dependencies: 521 | ms "2.0.0" 522 | 523 | debug@^3.2.7: 524 | version "3.2.7" 525 | resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" 526 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 527 | dependencies: 528 | ms "^2.1.1" 529 | 530 | debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 531 | version "4.3.4" 532 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 533 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 534 | dependencies: 535 | ms "2.1.2" 536 | 537 | deep-is@^0.1.3: 538 | version "0.1.4" 539 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" 540 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 541 | 542 | define-properties@^1.1.3, define-properties@^1.1.4: 543 | version "1.1.4" 544 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" 545 | integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== 546 | dependencies: 547 | has-property-descriptors "^1.0.0" 548 | object-keys "^1.1.1" 549 | 550 | defined@^1.0.0: 551 | version "1.0.0" 552 | resolved "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" 553 | integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ== 554 | 555 | detective@^5.2.1: 556 | version "5.2.1" 557 | resolved "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz" 558 | integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== 559 | dependencies: 560 | acorn-node "^1.8.2" 561 | defined "^1.0.0" 562 | minimist "^1.2.6" 563 | 564 | didyoumean@^1.2.2: 565 | version "1.2.2" 566 | resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" 567 | integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== 568 | 569 | dir-glob@^3.0.1: 570 | version "3.0.1" 571 | resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" 572 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 573 | dependencies: 574 | path-type "^4.0.0" 575 | 576 | dlv@^1.1.3: 577 | version "1.1.3" 578 | resolved "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" 579 | integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== 580 | 581 | doctrine@^2.1.0: 582 | version "2.1.0" 583 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" 584 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 585 | dependencies: 586 | esutils "^2.0.2" 587 | 588 | doctrine@^3.0.0: 589 | version "3.0.0" 590 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" 591 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 592 | dependencies: 593 | esutils "^2.0.2" 594 | 595 | electron-to-chromium@^1.4.202: 596 | version "1.4.225" 597 | resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz" 598 | integrity sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw== 599 | 600 | emoji-regex@^9.2.2: 601 | version "9.2.2" 602 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" 603 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 604 | 605 | es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: 606 | version "1.20.1" 607 | resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz" 608 | integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== 609 | dependencies: 610 | call-bind "^1.0.2" 611 | es-to-primitive "^1.2.1" 612 | function-bind "^1.1.1" 613 | function.prototype.name "^1.1.5" 614 | get-intrinsic "^1.1.1" 615 | get-symbol-description "^1.0.0" 616 | has "^1.0.3" 617 | has-property-descriptors "^1.0.0" 618 | has-symbols "^1.0.3" 619 | internal-slot "^1.0.3" 620 | is-callable "^1.2.4" 621 | is-negative-zero "^2.0.2" 622 | is-regex "^1.1.4" 623 | is-shared-array-buffer "^1.0.2" 624 | is-string "^1.0.7" 625 | is-weakref "^1.0.2" 626 | object-inspect "^1.12.0" 627 | object-keys "^1.1.1" 628 | object.assign "^4.1.2" 629 | regexp.prototype.flags "^1.4.3" 630 | string.prototype.trimend "^1.0.5" 631 | string.prototype.trimstart "^1.0.5" 632 | unbox-primitive "^1.0.2" 633 | 634 | es-shim-unscopables@^1.0.0: 635 | version "1.0.0" 636 | resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" 637 | integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== 638 | dependencies: 639 | has "^1.0.3" 640 | 641 | es-to-primitive@^1.2.1: 642 | version "1.2.1" 643 | resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" 644 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 645 | dependencies: 646 | is-callable "^1.1.4" 647 | is-date-object "^1.0.1" 648 | is-symbol "^1.0.2" 649 | 650 | escalade@^3.1.1: 651 | version "3.1.1" 652 | resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" 653 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 654 | 655 | escape-string-regexp@^4.0.0: 656 | version "4.0.0" 657 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" 658 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 659 | 660 | eslint-config-next@12.2.5: 661 | version "12.2.5" 662 | resolved "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.2.5.tgz" 663 | integrity sha512-SOowilkqPzW6DxKp3a3SYlrfPi5Ajs9MIzp9gVfUDxxH9QFM5ElkR1hX5m/iICJuvCbWgQqFBiA3mCMozluniw== 664 | dependencies: 665 | "@next/eslint-plugin-next" "12.2.5" 666 | "@rushstack/eslint-patch" "^1.1.3" 667 | "@typescript-eslint/parser" "^5.21.0" 668 | eslint-import-resolver-node "^0.3.6" 669 | eslint-import-resolver-typescript "^2.7.1" 670 | eslint-plugin-import "^2.26.0" 671 | eslint-plugin-jsx-a11y "^6.5.1" 672 | eslint-plugin-react "^7.29.4" 673 | eslint-plugin-react-hooks "^4.5.0" 674 | 675 | eslint-import-resolver-node@^0.3.6: 676 | version "0.3.6" 677 | resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz" 678 | integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== 679 | dependencies: 680 | debug "^3.2.7" 681 | resolve "^1.20.0" 682 | 683 | eslint-import-resolver-typescript@^2.7.1: 684 | version "2.7.1" 685 | resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz" 686 | integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ== 687 | dependencies: 688 | debug "^4.3.4" 689 | glob "^7.2.0" 690 | is-glob "^4.0.3" 691 | resolve "^1.22.0" 692 | tsconfig-paths "^3.14.1" 693 | 694 | eslint-module-utils@^2.7.3: 695 | version "2.7.4" 696 | resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz" 697 | integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== 698 | dependencies: 699 | debug "^3.2.7" 700 | 701 | eslint-plugin-import@^2.26.0: 702 | version "2.26.0" 703 | resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz" 704 | integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== 705 | dependencies: 706 | array-includes "^3.1.4" 707 | array.prototype.flat "^1.2.5" 708 | debug "^2.6.9" 709 | doctrine "^2.1.0" 710 | eslint-import-resolver-node "^0.3.6" 711 | eslint-module-utils "^2.7.3" 712 | has "^1.0.3" 713 | is-core-module "^2.8.1" 714 | is-glob "^4.0.3" 715 | minimatch "^3.1.2" 716 | object.values "^1.1.5" 717 | resolve "^1.22.0" 718 | tsconfig-paths "^3.14.1" 719 | 720 | eslint-plugin-jsx-a11y@^6.5.1: 721 | version "6.6.1" 722 | resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz" 723 | integrity sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q== 724 | dependencies: 725 | "@babel/runtime" "^7.18.9" 726 | aria-query "^4.2.2" 727 | array-includes "^3.1.5" 728 | ast-types-flow "^0.0.7" 729 | axe-core "^4.4.3" 730 | axobject-query "^2.2.0" 731 | damerau-levenshtein "^1.0.8" 732 | emoji-regex "^9.2.2" 733 | has "^1.0.3" 734 | jsx-ast-utils "^3.3.2" 735 | language-tags "^1.0.5" 736 | minimatch "^3.1.2" 737 | semver "^6.3.0" 738 | 739 | eslint-plugin-react-hooks@^4.5.0: 740 | version "4.6.0" 741 | resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz" 742 | integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== 743 | 744 | eslint-plugin-react@^7.29.4: 745 | version "7.30.1" 746 | resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz" 747 | integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg== 748 | dependencies: 749 | array-includes "^3.1.5" 750 | array.prototype.flatmap "^1.3.0" 751 | doctrine "^2.1.0" 752 | estraverse "^5.3.0" 753 | jsx-ast-utils "^2.4.1 || ^3.0.0" 754 | minimatch "^3.1.2" 755 | object.entries "^1.1.5" 756 | object.fromentries "^2.0.5" 757 | object.hasown "^1.1.1" 758 | object.values "^1.1.5" 759 | prop-types "^15.8.1" 760 | resolve "^2.0.0-next.3" 761 | semver "^6.3.0" 762 | string.prototype.matchall "^4.0.7" 763 | 764 | eslint-scope@^7.1.1: 765 | version "7.1.1" 766 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" 767 | integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== 768 | dependencies: 769 | esrecurse "^4.3.0" 770 | estraverse "^5.2.0" 771 | 772 | eslint-utils@^3.0.0: 773 | version "3.0.0" 774 | resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" 775 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 776 | dependencies: 777 | eslint-visitor-keys "^2.0.0" 778 | 779 | eslint-visitor-keys@^2.0.0: 780 | version "2.1.0" 781 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" 782 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 783 | 784 | eslint-visitor-keys@^3.3.0: 785 | version "3.3.0" 786 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" 787 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 788 | 789 | eslint@8.22.0: 790 | version "8.22.0" 791 | resolved "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz" 792 | integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== 793 | dependencies: 794 | "@eslint/eslintrc" "^1.3.0" 795 | "@humanwhocodes/config-array" "^0.10.4" 796 | "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" 797 | ajv "^6.10.0" 798 | chalk "^4.0.0" 799 | cross-spawn "^7.0.2" 800 | debug "^4.3.2" 801 | doctrine "^3.0.0" 802 | escape-string-regexp "^4.0.0" 803 | eslint-scope "^7.1.1" 804 | eslint-utils "^3.0.0" 805 | eslint-visitor-keys "^3.3.0" 806 | espree "^9.3.3" 807 | esquery "^1.4.0" 808 | esutils "^2.0.2" 809 | fast-deep-equal "^3.1.3" 810 | file-entry-cache "^6.0.1" 811 | find-up "^5.0.0" 812 | functional-red-black-tree "^1.0.1" 813 | glob-parent "^6.0.1" 814 | globals "^13.15.0" 815 | globby "^11.1.0" 816 | grapheme-splitter "^1.0.4" 817 | ignore "^5.2.0" 818 | import-fresh "^3.0.0" 819 | imurmurhash "^0.1.4" 820 | is-glob "^4.0.0" 821 | js-yaml "^4.1.0" 822 | json-stable-stringify-without-jsonify "^1.0.1" 823 | levn "^0.4.1" 824 | lodash.merge "^4.6.2" 825 | minimatch "^3.1.2" 826 | natural-compare "^1.4.0" 827 | optionator "^0.9.1" 828 | regexpp "^3.2.0" 829 | strip-ansi "^6.0.1" 830 | strip-json-comments "^3.1.0" 831 | text-table "^0.2.0" 832 | v8-compile-cache "^2.0.3" 833 | 834 | espree@^9.3.2, espree@^9.3.3: 835 | version "9.3.3" 836 | resolved "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz" 837 | integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== 838 | dependencies: 839 | acorn "^8.8.0" 840 | acorn-jsx "^5.3.2" 841 | eslint-visitor-keys "^3.3.0" 842 | 843 | esquery@^1.4.0: 844 | version "1.4.0" 845 | resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" 846 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 847 | dependencies: 848 | estraverse "^5.1.0" 849 | 850 | esrecurse@^4.3.0: 851 | version "4.3.0" 852 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 853 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 854 | dependencies: 855 | estraverse "^5.2.0" 856 | 857 | estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: 858 | version "5.3.0" 859 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 860 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 861 | 862 | esutils@^2.0.2: 863 | version "2.0.3" 864 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 865 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 866 | 867 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 868 | version "3.1.3" 869 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 870 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 871 | 872 | fast-glob@^3.2.11, fast-glob@^3.2.9: 873 | version "3.2.11" 874 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" 875 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== 876 | dependencies: 877 | "@nodelib/fs.stat" "^2.0.2" 878 | "@nodelib/fs.walk" "^1.2.3" 879 | glob-parent "^5.1.2" 880 | merge2 "^1.3.0" 881 | micromatch "^4.0.4" 882 | 883 | fast-json-stable-stringify@^2.0.0: 884 | version "2.1.0" 885 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 886 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 887 | 888 | fast-levenshtein@^2.0.6: 889 | version "2.0.6" 890 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 891 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 892 | 893 | fastq@^1.6.0: 894 | version "1.13.0" 895 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" 896 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 897 | dependencies: 898 | reusify "^1.0.4" 899 | 900 | file-entry-cache@^6.0.1: 901 | version "6.0.1" 902 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" 903 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 904 | dependencies: 905 | flat-cache "^3.0.4" 906 | 907 | fill-range@^7.0.1: 908 | version "7.0.1" 909 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 910 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 911 | dependencies: 912 | to-regex-range "^5.0.1" 913 | 914 | find-up@^5.0.0: 915 | version "5.0.0" 916 | resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" 917 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 918 | dependencies: 919 | locate-path "^6.0.0" 920 | path-exists "^4.0.0" 921 | 922 | flat-cache@^3.0.4: 923 | version "3.0.4" 924 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" 925 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 926 | dependencies: 927 | flatted "^3.1.0" 928 | rimraf "^3.0.2" 929 | 930 | flatted@^3.1.0: 931 | version "3.2.7" 932 | resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" 933 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 934 | 935 | fraction.js@^4.2.0: 936 | version "4.2.0" 937 | resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz" 938 | integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== 939 | 940 | fs.realpath@^1.0.0: 941 | version "1.0.0" 942 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 943 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 944 | 945 | fsevents@~2.3.2: 946 | version "2.3.2" 947 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 948 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 949 | 950 | function-bind@^1.1.1: 951 | version "1.1.1" 952 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 953 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 954 | 955 | function.prototype.name@^1.1.5: 956 | version "1.1.5" 957 | resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" 958 | integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== 959 | dependencies: 960 | call-bind "^1.0.2" 961 | define-properties "^1.1.3" 962 | es-abstract "^1.19.0" 963 | functions-have-names "^1.2.2" 964 | 965 | functional-red-black-tree@^1.0.1: 966 | version "1.0.1" 967 | resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" 968 | integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== 969 | 970 | functions-have-names@^1.2.2: 971 | version "1.2.3" 972 | resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" 973 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== 974 | 975 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: 976 | version "1.1.2" 977 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" 978 | integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== 979 | dependencies: 980 | function-bind "^1.1.1" 981 | has "^1.0.3" 982 | has-symbols "^1.0.3" 983 | 984 | get-symbol-description@^1.0.0: 985 | version "1.0.0" 986 | resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" 987 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== 988 | dependencies: 989 | call-bind "^1.0.2" 990 | get-intrinsic "^1.1.1" 991 | 992 | glob-parent@^5.1.2, glob-parent@~5.1.2: 993 | version "5.1.2" 994 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 995 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 996 | dependencies: 997 | is-glob "^4.0.1" 998 | 999 | glob-parent@^6.0.1, glob-parent@^6.0.2: 1000 | version "6.0.2" 1001 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" 1002 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1003 | dependencies: 1004 | is-glob "^4.0.3" 1005 | 1006 | glob@7.1.7: 1007 | version "7.1.7" 1008 | resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" 1009 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 1010 | dependencies: 1011 | fs.realpath "^1.0.0" 1012 | inflight "^1.0.4" 1013 | inherits "2" 1014 | minimatch "^3.0.4" 1015 | once "^1.3.0" 1016 | path-is-absolute "^1.0.0" 1017 | 1018 | glob@^7.1.3, glob@^7.2.0: 1019 | version "7.2.3" 1020 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" 1021 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1022 | dependencies: 1023 | fs.realpath "^1.0.0" 1024 | inflight "^1.0.4" 1025 | inherits "2" 1026 | minimatch "^3.1.1" 1027 | once "^1.3.0" 1028 | path-is-absolute "^1.0.0" 1029 | 1030 | globals@^13.15.0: 1031 | version "13.17.0" 1032 | resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" 1033 | integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== 1034 | dependencies: 1035 | type-fest "^0.20.2" 1036 | 1037 | globby@^11.1.0: 1038 | version "11.1.0" 1039 | resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" 1040 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1041 | dependencies: 1042 | array-union "^2.1.0" 1043 | dir-glob "^3.0.1" 1044 | fast-glob "^3.2.9" 1045 | ignore "^5.2.0" 1046 | merge2 "^1.4.1" 1047 | slash "^3.0.0" 1048 | 1049 | grapheme-splitter@^1.0.4: 1050 | version "1.0.4" 1051 | resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" 1052 | integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== 1053 | 1054 | has-bigints@^1.0.1, has-bigints@^1.0.2: 1055 | version "1.0.2" 1056 | resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" 1057 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== 1058 | 1059 | has-flag@^4.0.0: 1060 | version "4.0.0" 1061 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 1062 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1063 | 1064 | has-property-descriptors@^1.0.0: 1065 | version "1.0.0" 1066 | resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" 1067 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== 1068 | dependencies: 1069 | get-intrinsic "^1.1.1" 1070 | 1071 | has-symbols@^1.0.2, has-symbols@^1.0.3: 1072 | version "1.0.3" 1073 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" 1074 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1075 | 1076 | has-tostringtag@^1.0.0: 1077 | version "1.0.0" 1078 | resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" 1079 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 1080 | dependencies: 1081 | has-symbols "^1.0.2" 1082 | 1083 | has@^1.0.3: 1084 | version "1.0.3" 1085 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 1086 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1087 | dependencies: 1088 | function-bind "^1.1.1" 1089 | 1090 | ignore@^5.2.0: 1091 | version "5.2.0" 1092 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" 1093 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 1094 | 1095 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1096 | version "3.3.0" 1097 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 1098 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1099 | dependencies: 1100 | parent-module "^1.0.0" 1101 | resolve-from "^4.0.0" 1102 | 1103 | imurmurhash@^0.1.4: 1104 | version "0.1.4" 1105 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" 1106 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1107 | 1108 | inflight@^1.0.4: 1109 | version "1.0.6" 1110 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 1111 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1112 | dependencies: 1113 | once "^1.3.0" 1114 | wrappy "1" 1115 | 1116 | inherits@2: 1117 | version "2.0.4" 1118 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 1119 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1120 | 1121 | internal-slot@^1.0.3: 1122 | version "1.0.3" 1123 | resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" 1124 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== 1125 | dependencies: 1126 | get-intrinsic "^1.1.0" 1127 | has "^1.0.3" 1128 | side-channel "^1.0.4" 1129 | 1130 | is-bigint@^1.0.1: 1131 | version "1.0.4" 1132 | resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" 1133 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 1134 | dependencies: 1135 | has-bigints "^1.0.1" 1136 | 1137 | is-binary-path@~2.1.0: 1138 | version "2.1.0" 1139 | resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" 1140 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1141 | dependencies: 1142 | binary-extensions "^2.0.0" 1143 | 1144 | is-boolean-object@^1.1.0: 1145 | version "1.1.2" 1146 | resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" 1147 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== 1148 | dependencies: 1149 | call-bind "^1.0.2" 1150 | has-tostringtag "^1.0.0" 1151 | 1152 | is-callable@^1.1.4, is-callable@^1.2.4: 1153 | version "1.2.4" 1154 | resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" 1155 | integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== 1156 | 1157 | is-core-module@^2.8.1, is-core-module@^2.9.0: 1158 | version "2.10.0" 1159 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" 1160 | integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== 1161 | dependencies: 1162 | has "^1.0.3" 1163 | 1164 | is-date-object@^1.0.1: 1165 | version "1.0.5" 1166 | resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" 1167 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== 1168 | dependencies: 1169 | has-tostringtag "^1.0.0" 1170 | 1171 | is-extglob@^2.1.1: 1172 | version "2.1.1" 1173 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 1174 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1175 | 1176 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 1177 | version "4.0.3" 1178 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 1179 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1180 | dependencies: 1181 | is-extglob "^2.1.1" 1182 | 1183 | is-negative-zero@^2.0.2: 1184 | version "2.0.2" 1185 | resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" 1186 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== 1187 | 1188 | is-number-object@^1.0.4: 1189 | version "1.0.7" 1190 | resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" 1191 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== 1192 | dependencies: 1193 | has-tostringtag "^1.0.0" 1194 | 1195 | is-number@^7.0.0: 1196 | version "7.0.0" 1197 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 1198 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1199 | 1200 | is-regex@^1.1.4: 1201 | version "1.1.4" 1202 | resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" 1203 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 1204 | dependencies: 1205 | call-bind "^1.0.2" 1206 | has-tostringtag "^1.0.0" 1207 | 1208 | is-shared-array-buffer@^1.0.2: 1209 | version "1.0.2" 1210 | resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" 1211 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== 1212 | dependencies: 1213 | call-bind "^1.0.2" 1214 | 1215 | is-string@^1.0.5, is-string@^1.0.7: 1216 | version "1.0.7" 1217 | resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" 1218 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 1219 | dependencies: 1220 | has-tostringtag "^1.0.0" 1221 | 1222 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1223 | version "1.0.4" 1224 | resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" 1225 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1226 | dependencies: 1227 | has-symbols "^1.0.2" 1228 | 1229 | is-weakref@^1.0.2: 1230 | version "1.0.2" 1231 | resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" 1232 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== 1233 | dependencies: 1234 | call-bind "^1.0.2" 1235 | 1236 | isexe@^2.0.0: 1237 | version "2.0.0" 1238 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 1239 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1240 | 1241 | "js-tokens@^3.0.0 || ^4.0.0": 1242 | version "4.0.0" 1243 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" 1244 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1245 | 1246 | js-yaml@^4.1.0: 1247 | version "4.1.0" 1248 | resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" 1249 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1250 | dependencies: 1251 | argparse "^2.0.1" 1252 | 1253 | json-schema-traverse@^0.4.1: 1254 | version "0.4.1" 1255 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 1256 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1257 | 1258 | json-stable-stringify-without-jsonify@^1.0.1: 1259 | version "1.0.1" 1260 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" 1261 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1262 | 1263 | json5@^1.0.1: 1264 | version "1.0.1" 1265 | resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" 1266 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 1267 | dependencies: 1268 | minimist "^1.2.0" 1269 | 1270 | "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.2: 1271 | version "3.3.3" 1272 | resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz" 1273 | integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== 1274 | dependencies: 1275 | array-includes "^3.1.5" 1276 | object.assign "^4.1.3" 1277 | 1278 | language-subtag-registry@~0.3.2: 1279 | version "0.3.22" 1280 | resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz" 1281 | integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== 1282 | 1283 | language-tags@^1.0.5: 1284 | version "1.0.5" 1285 | resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz" 1286 | integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== 1287 | dependencies: 1288 | language-subtag-registry "~0.3.2" 1289 | 1290 | levn@^0.4.1: 1291 | version "0.4.1" 1292 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" 1293 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1294 | dependencies: 1295 | prelude-ls "^1.2.1" 1296 | type-check "~0.4.0" 1297 | 1298 | lilconfig@^2.0.5, lilconfig@^2.0.6: 1299 | version "2.0.6" 1300 | resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz" 1301 | integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== 1302 | 1303 | locate-path@^6.0.0: 1304 | version "6.0.0" 1305 | resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" 1306 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1307 | dependencies: 1308 | p-locate "^5.0.0" 1309 | 1310 | lodash.merge@^4.6.2: 1311 | version "4.6.2" 1312 | resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" 1313 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1314 | 1315 | loose-envify@^1.1.0, loose-envify@^1.4.0: 1316 | version "1.4.0" 1317 | resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" 1318 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1319 | dependencies: 1320 | js-tokens "^3.0.0 || ^4.0.0" 1321 | 1322 | lru-cache@^6.0.0: 1323 | version "6.0.0" 1324 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" 1325 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1326 | dependencies: 1327 | yallist "^4.0.0" 1328 | 1329 | merge2@^1.3.0, merge2@^1.4.1: 1330 | version "1.4.1" 1331 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 1332 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1333 | 1334 | micromatch@^4.0.4: 1335 | version "4.0.5" 1336 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" 1337 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1338 | dependencies: 1339 | braces "^3.0.2" 1340 | picomatch "^2.3.1" 1341 | 1342 | minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: 1343 | version "3.1.2" 1344 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 1345 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1346 | dependencies: 1347 | brace-expansion "^1.1.7" 1348 | 1349 | minimist@^1.2.0, minimist@^1.2.6: 1350 | version "1.2.6" 1351 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" 1352 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 1353 | 1354 | ms@2.0.0: 1355 | version "2.0.0" 1356 | resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" 1357 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== 1358 | 1359 | ms@2.1.2: 1360 | version "2.1.2" 1361 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 1362 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1363 | 1364 | ms@^2.1.1: 1365 | version "2.1.3" 1366 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" 1367 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1368 | 1369 | nanoid@^3.3.4: 1370 | version "3.3.4" 1371 | resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz" 1372 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== 1373 | 1374 | natural-compare@^1.4.0: 1375 | version "1.4.0" 1376 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" 1377 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1378 | 1379 | next@12.2.5: 1380 | version "12.2.5" 1381 | resolved "https://registry.npmjs.org/next/-/next-12.2.5.tgz" 1382 | integrity sha512-tBdjqX5XC/oFs/6gxrZhjmiq90YWizUYU6qOWAfat7zJwrwapJ+BYgX2PmiacunXMaRpeVT4vz5MSPSLgNkrpA== 1383 | dependencies: 1384 | "@next/env" "12.2.5" 1385 | "@swc/helpers" "0.4.3" 1386 | caniuse-lite "^1.0.30001332" 1387 | postcss "8.4.14" 1388 | styled-jsx "5.0.4" 1389 | use-sync-external-store "1.2.0" 1390 | optionalDependencies: 1391 | "@next/swc-android-arm-eabi" "12.2.5" 1392 | "@next/swc-android-arm64" "12.2.5" 1393 | "@next/swc-darwin-arm64" "12.2.5" 1394 | "@next/swc-darwin-x64" "12.2.5" 1395 | "@next/swc-freebsd-x64" "12.2.5" 1396 | "@next/swc-linux-arm-gnueabihf" "12.2.5" 1397 | "@next/swc-linux-arm64-gnu" "12.2.5" 1398 | "@next/swc-linux-arm64-musl" "12.2.5" 1399 | "@next/swc-linux-x64-gnu" "12.2.5" 1400 | "@next/swc-linux-x64-musl" "12.2.5" 1401 | "@next/swc-win32-arm64-msvc" "12.2.5" 1402 | "@next/swc-win32-ia32-msvc" "12.2.5" 1403 | "@next/swc-win32-x64-msvc" "12.2.5" 1404 | 1405 | node-releases@^2.0.6: 1406 | version "2.0.6" 1407 | resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" 1408 | integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== 1409 | 1410 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1411 | version "3.0.0" 1412 | resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" 1413 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1414 | 1415 | normalize-range@^0.1.2: 1416 | version "0.1.2" 1417 | resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" 1418 | integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== 1419 | 1420 | object-assign@^4.1.1: 1421 | version "4.1.1" 1422 | resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" 1423 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 1424 | 1425 | object-hash@^3.0.0: 1426 | version "3.0.0" 1427 | resolved "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz" 1428 | integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== 1429 | 1430 | object-inspect@^1.12.0, object-inspect@^1.9.0: 1431 | version "1.12.2" 1432 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" 1433 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== 1434 | 1435 | object-keys@^1.1.1: 1436 | version "1.1.1" 1437 | resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" 1438 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1439 | 1440 | object.assign@^4.1.2, object.assign@^4.1.3: 1441 | version "4.1.4" 1442 | resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" 1443 | integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== 1444 | dependencies: 1445 | call-bind "^1.0.2" 1446 | define-properties "^1.1.4" 1447 | has-symbols "^1.0.3" 1448 | object-keys "^1.1.1" 1449 | 1450 | object.entries@^1.1.5: 1451 | version "1.1.5" 1452 | resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz" 1453 | integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== 1454 | dependencies: 1455 | call-bind "^1.0.2" 1456 | define-properties "^1.1.3" 1457 | es-abstract "^1.19.1" 1458 | 1459 | object.fromentries@^2.0.5: 1460 | version "2.0.5" 1461 | resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz" 1462 | integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== 1463 | dependencies: 1464 | call-bind "^1.0.2" 1465 | define-properties "^1.1.3" 1466 | es-abstract "^1.19.1" 1467 | 1468 | object.hasown@^1.1.1: 1469 | version "1.1.1" 1470 | resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz" 1471 | integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== 1472 | dependencies: 1473 | define-properties "^1.1.4" 1474 | es-abstract "^1.19.5" 1475 | 1476 | object.values@^1.1.5: 1477 | version "1.1.5" 1478 | resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz" 1479 | integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== 1480 | dependencies: 1481 | call-bind "^1.0.2" 1482 | define-properties "^1.1.3" 1483 | es-abstract "^1.19.1" 1484 | 1485 | once@^1.3.0: 1486 | version "1.4.0" 1487 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 1488 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1489 | dependencies: 1490 | wrappy "1" 1491 | 1492 | optionator@^0.9.1: 1493 | version "0.9.1" 1494 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" 1495 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1496 | dependencies: 1497 | deep-is "^0.1.3" 1498 | fast-levenshtein "^2.0.6" 1499 | levn "^0.4.1" 1500 | prelude-ls "^1.2.1" 1501 | type-check "^0.4.0" 1502 | word-wrap "^1.2.3" 1503 | 1504 | p-limit@^3.0.2: 1505 | version "3.1.0" 1506 | resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" 1507 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1508 | dependencies: 1509 | yocto-queue "^0.1.0" 1510 | 1511 | p-locate@^5.0.0: 1512 | version "5.0.0" 1513 | resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" 1514 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1515 | dependencies: 1516 | p-limit "^3.0.2" 1517 | 1518 | parent-module@^1.0.0: 1519 | version "1.0.1" 1520 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 1521 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1522 | dependencies: 1523 | callsites "^3.0.0" 1524 | 1525 | path-exists@^4.0.0: 1526 | version "4.0.0" 1527 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" 1528 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1529 | 1530 | path-is-absolute@^1.0.0: 1531 | version "1.0.1" 1532 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 1533 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1534 | 1535 | path-key@^3.1.0: 1536 | version "3.1.1" 1537 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 1538 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1539 | 1540 | path-parse@^1.0.7: 1541 | version "1.0.7" 1542 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" 1543 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1544 | 1545 | path-type@^4.0.0: 1546 | version "4.0.0" 1547 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" 1548 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1549 | 1550 | picocolors@^1.0.0: 1551 | version "1.0.0" 1552 | resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" 1553 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1554 | 1555 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 1556 | version "2.3.1" 1557 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 1558 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1559 | 1560 | pify@^2.3.0: 1561 | version "2.3.0" 1562 | resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" 1563 | integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== 1564 | 1565 | postcss-import@^14.1.0: 1566 | version "14.1.0" 1567 | resolved "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz" 1568 | integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== 1569 | dependencies: 1570 | postcss-value-parser "^4.0.0" 1571 | read-cache "^1.0.0" 1572 | resolve "^1.1.7" 1573 | 1574 | postcss-js@^4.0.0: 1575 | version "4.0.0" 1576 | resolved "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz" 1577 | integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== 1578 | dependencies: 1579 | camelcase-css "^2.0.1" 1580 | 1581 | postcss-load-config@^3.1.4: 1582 | version "3.1.4" 1583 | resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz" 1584 | integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== 1585 | dependencies: 1586 | lilconfig "^2.0.5" 1587 | yaml "^1.10.2" 1588 | 1589 | postcss-nested@5.0.6: 1590 | version "5.0.6" 1591 | resolved "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz" 1592 | integrity sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA== 1593 | dependencies: 1594 | postcss-selector-parser "^6.0.6" 1595 | 1596 | postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.6: 1597 | version "6.0.10" 1598 | resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz" 1599 | integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== 1600 | dependencies: 1601 | cssesc "^3.0.0" 1602 | util-deprecate "^1.0.2" 1603 | 1604 | postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: 1605 | version "4.2.0" 1606 | resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" 1607 | integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== 1608 | 1609 | postcss@8.4.14: 1610 | version "8.4.14" 1611 | resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz" 1612 | integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== 1613 | dependencies: 1614 | nanoid "^3.3.4" 1615 | picocolors "^1.0.0" 1616 | source-map-js "^1.0.2" 1617 | 1618 | postcss@^8.4.14, postcss@^8.4.16: 1619 | version "8.4.16" 1620 | resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz" 1621 | integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ== 1622 | dependencies: 1623 | nanoid "^3.3.4" 1624 | picocolors "^1.0.0" 1625 | source-map-js "^1.0.2" 1626 | 1627 | prelude-ls@^1.2.1: 1628 | version "1.2.1" 1629 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" 1630 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1631 | 1632 | prop-types@^15.8.1: 1633 | version "15.8.1" 1634 | resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" 1635 | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== 1636 | dependencies: 1637 | loose-envify "^1.4.0" 1638 | object-assign "^4.1.1" 1639 | react-is "^16.13.1" 1640 | 1641 | punycode@^2.1.0: 1642 | version "2.1.1" 1643 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" 1644 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1645 | 1646 | queue-microtask@^1.2.2: 1647 | version "1.2.3" 1648 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 1649 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1650 | 1651 | quick-lru@^5.1.1: 1652 | version "5.1.1" 1653 | resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" 1654 | integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== 1655 | 1656 | react-dom@18.2.0: 1657 | version "18.2.0" 1658 | resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" 1659 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== 1660 | dependencies: 1661 | loose-envify "^1.1.0" 1662 | scheduler "^0.23.0" 1663 | 1664 | react-is@^16.13.1: 1665 | version "16.13.1" 1666 | resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" 1667 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 1668 | 1669 | react@18.2.0: 1670 | version "18.2.0" 1671 | resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" 1672 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== 1673 | dependencies: 1674 | loose-envify "^1.1.0" 1675 | 1676 | read-cache@^1.0.0: 1677 | version "1.0.0" 1678 | resolved "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz" 1679 | integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== 1680 | dependencies: 1681 | pify "^2.3.0" 1682 | 1683 | readdirp@~3.6.0: 1684 | version "3.6.0" 1685 | resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" 1686 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1687 | dependencies: 1688 | picomatch "^2.2.1" 1689 | 1690 | regenerator-runtime@^0.13.4: 1691 | version "0.13.9" 1692 | resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" 1693 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== 1694 | 1695 | regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: 1696 | version "1.4.3" 1697 | resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" 1698 | integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== 1699 | dependencies: 1700 | call-bind "^1.0.2" 1701 | define-properties "^1.1.3" 1702 | functions-have-names "^1.2.2" 1703 | 1704 | regexpp@^3.2.0: 1705 | version "3.2.0" 1706 | resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" 1707 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 1708 | 1709 | resolve-from@^4.0.0: 1710 | version "4.0.0" 1711 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 1712 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1713 | 1714 | resolve@^1.1.7, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1: 1715 | version "1.22.1" 1716 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" 1717 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 1718 | dependencies: 1719 | is-core-module "^2.9.0" 1720 | path-parse "^1.0.7" 1721 | supports-preserve-symlinks-flag "^1.0.0" 1722 | 1723 | resolve@^2.0.0-next.3: 1724 | version "2.0.0-next.4" 1725 | resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz" 1726 | integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== 1727 | dependencies: 1728 | is-core-module "^2.9.0" 1729 | path-parse "^1.0.7" 1730 | supports-preserve-symlinks-flag "^1.0.0" 1731 | 1732 | reusify@^1.0.4: 1733 | version "1.0.4" 1734 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 1735 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1736 | 1737 | rimraf@^3.0.2: 1738 | version "3.0.2" 1739 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 1740 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1741 | dependencies: 1742 | glob "^7.1.3" 1743 | 1744 | run-parallel@^1.1.9: 1745 | version "1.2.0" 1746 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 1747 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1748 | dependencies: 1749 | queue-microtask "^1.2.2" 1750 | 1751 | scheduler@^0.23.0: 1752 | version "0.23.0" 1753 | resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" 1754 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== 1755 | dependencies: 1756 | loose-envify "^1.1.0" 1757 | 1758 | semver@^6.3.0: 1759 | version "6.3.0" 1760 | resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" 1761 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1762 | 1763 | semver@^7.3.7: 1764 | version "7.3.7" 1765 | resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" 1766 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 1767 | dependencies: 1768 | lru-cache "^6.0.0" 1769 | 1770 | shebang-command@^2.0.0: 1771 | version "2.0.0" 1772 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 1773 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1774 | dependencies: 1775 | shebang-regex "^3.0.0" 1776 | 1777 | shebang-regex@^3.0.0: 1778 | version "3.0.0" 1779 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 1780 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1781 | 1782 | side-channel@^1.0.4: 1783 | version "1.0.4" 1784 | resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" 1785 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1786 | dependencies: 1787 | call-bind "^1.0.0" 1788 | get-intrinsic "^1.0.2" 1789 | object-inspect "^1.9.0" 1790 | 1791 | slash@^3.0.0: 1792 | version "3.0.0" 1793 | resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" 1794 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1795 | 1796 | source-map-js@^1.0.2: 1797 | version "1.0.2" 1798 | resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" 1799 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 1800 | 1801 | string.prototype.matchall@^4.0.7: 1802 | version "4.0.7" 1803 | resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz" 1804 | integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== 1805 | dependencies: 1806 | call-bind "^1.0.2" 1807 | define-properties "^1.1.3" 1808 | es-abstract "^1.19.1" 1809 | get-intrinsic "^1.1.1" 1810 | has-symbols "^1.0.3" 1811 | internal-slot "^1.0.3" 1812 | regexp.prototype.flags "^1.4.1" 1813 | side-channel "^1.0.4" 1814 | 1815 | string.prototype.trimend@^1.0.5: 1816 | version "1.0.5" 1817 | resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz" 1818 | integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== 1819 | dependencies: 1820 | call-bind "^1.0.2" 1821 | define-properties "^1.1.4" 1822 | es-abstract "^1.19.5" 1823 | 1824 | string.prototype.trimstart@^1.0.5: 1825 | version "1.0.5" 1826 | resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz" 1827 | integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== 1828 | dependencies: 1829 | call-bind "^1.0.2" 1830 | define-properties "^1.1.4" 1831 | es-abstract "^1.19.5" 1832 | 1833 | strip-ansi@^6.0.1: 1834 | version "6.0.1" 1835 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" 1836 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1837 | dependencies: 1838 | ansi-regex "^5.0.1" 1839 | 1840 | strip-bom@^3.0.0: 1841 | version "3.0.0" 1842 | resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" 1843 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== 1844 | 1845 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1846 | version "3.1.1" 1847 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1848 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1849 | 1850 | styled-jsx@5.0.4: 1851 | version "5.0.4" 1852 | resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.4.tgz" 1853 | integrity sha512-sDFWLbg4zR+UkNzfk5lPilyIgtpddfxXEULxhujorr5jtePTUqiPDc5BC0v1NRqTr/WaFBGQQUoYToGlF4B2KQ== 1854 | 1855 | supports-color@^7.1.0: 1856 | version "7.2.0" 1857 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1858 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1859 | dependencies: 1860 | has-flag "^4.0.0" 1861 | 1862 | supports-preserve-symlinks-flag@^1.0.0: 1863 | version "1.0.0" 1864 | resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" 1865 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1866 | 1867 | tailwindcss@^3.1.8: 1868 | version "3.1.8" 1869 | resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz" 1870 | integrity sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g== 1871 | dependencies: 1872 | arg "^5.0.2" 1873 | chokidar "^3.5.3" 1874 | color-name "^1.1.4" 1875 | detective "^5.2.1" 1876 | didyoumean "^1.2.2" 1877 | dlv "^1.1.3" 1878 | fast-glob "^3.2.11" 1879 | glob-parent "^6.0.2" 1880 | is-glob "^4.0.3" 1881 | lilconfig "^2.0.6" 1882 | normalize-path "^3.0.0" 1883 | object-hash "^3.0.0" 1884 | picocolors "^1.0.0" 1885 | postcss "^8.4.14" 1886 | postcss-import "^14.1.0" 1887 | postcss-js "^4.0.0" 1888 | postcss-load-config "^3.1.4" 1889 | postcss-nested "5.0.6" 1890 | postcss-selector-parser "^6.0.10" 1891 | postcss-value-parser "^4.2.0" 1892 | quick-lru "^5.1.1" 1893 | resolve "^1.22.1" 1894 | 1895 | text-table@^0.2.0: 1896 | version "0.2.0" 1897 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" 1898 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1899 | 1900 | to-regex-range@^5.0.1: 1901 | version "5.0.1" 1902 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1903 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1904 | dependencies: 1905 | is-number "^7.0.0" 1906 | 1907 | tsconfig-paths@^3.14.1: 1908 | version "3.14.1" 1909 | resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" 1910 | integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== 1911 | dependencies: 1912 | "@types/json5" "^0.0.29" 1913 | json5 "^1.0.1" 1914 | minimist "^1.2.6" 1915 | strip-bom "^3.0.0" 1916 | 1917 | tslib@^1.8.1: 1918 | version "1.14.1" 1919 | resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" 1920 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1921 | 1922 | tslib@^2.4.0: 1923 | version "2.4.0" 1924 | resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" 1925 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 1926 | 1927 | tsutils@^3.21.0: 1928 | version "3.21.0" 1929 | resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" 1930 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1931 | dependencies: 1932 | tslib "^1.8.1" 1933 | 1934 | type-check@^0.4.0, type-check@~0.4.0: 1935 | version "0.4.0" 1936 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" 1937 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1938 | dependencies: 1939 | prelude-ls "^1.2.1" 1940 | 1941 | type-fest@^0.20.2: 1942 | version "0.20.2" 1943 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" 1944 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1945 | 1946 | typescript@4.7.4: 1947 | version "4.7.4" 1948 | resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz" 1949 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== 1950 | 1951 | unbox-primitive@^1.0.2: 1952 | version "1.0.2" 1953 | resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" 1954 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== 1955 | dependencies: 1956 | call-bind "^1.0.2" 1957 | has-bigints "^1.0.2" 1958 | has-symbols "^1.0.3" 1959 | which-boxed-primitive "^1.0.2" 1960 | 1961 | update-browserslist-db@^1.0.5: 1962 | version "1.0.5" 1963 | resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz" 1964 | integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== 1965 | dependencies: 1966 | escalade "^3.1.1" 1967 | picocolors "^1.0.0" 1968 | 1969 | uri-js@^4.2.2: 1970 | version "4.4.1" 1971 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" 1972 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1973 | dependencies: 1974 | punycode "^2.1.0" 1975 | 1976 | use-sync-external-store@1.2.0: 1977 | version "1.2.0" 1978 | resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" 1979 | integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== 1980 | 1981 | util-deprecate@^1.0.2: 1982 | version "1.0.2" 1983 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" 1984 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 1985 | 1986 | uuid@^8.3.2: 1987 | version "8.3.2" 1988 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 1989 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 1990 | 1991 | v8-compile-cache@^2.0.3: 1992 | version "2.3.0" 1993 | resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" 1994 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 1995 | 1996 | which-boxed-primitive@^1.0.2: 1997 | version "1.0.2" 1998 | resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" 1999 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 2000 | dependencies: 2001 | is-bigint "^1.0.1" 2002 | is-boolean-object "^1.1.0" 2003 | is-number-object "^1.0.4" 2004 | is-string "^1.0.5" 2005 | is-symbol "^1.0.3" 2006 | 2007 | which@^2.0.1: 2008 | version "2.0.2" 2009 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 2010 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2011 | dependencies: 2012 | isexe "^2.0.0" 2013 | 2014 | word-wrap@^1.2.3: 2015 | version "1.2.3" 2016 | resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" 2017 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2018 | 2019 | wrappy@1: 2020 | version "1.0.2" 2021 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 2022 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2023 | 2024 | xtend@^4.0.2: 2025 | version "4.0.2" 2026 | resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" 2027 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 2028 | 2029 | yallist@^4.0.0: 2030 | version "4.0.0" 2031 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" 2032 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2033 | 2034 | yaml@^1.10.2: 2035 | version "1.10.2" 2036 | resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" 2037 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 2038 | 2039 | yocto-queue@^0.1.0: 2040 | version "0.1.0" 2041 | resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" 2042 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2043 | --------------------------------------------------------------------------------