From 32fb4eb75c43fd624091b65e8ddf51889fb2191f Mon Sep 17 00:00:00 2001 From: Christiaan Landman Date: Mon, 4 May 2026 15:26:52 +0200 Subject: [PATCH 1/3] Init. --- README.md | 47 + backend/.env.template | 8 + backend/.envrc | 3 + backend/.gitignore | 6 + backend/.nvmrc | 1 + backend/.prettierignore | 2 + backend/.prettierrc | 8 + backend/Dockerfile | 30 + backend/LICENSE | 121 + backend/README.md | 115 + backend/app.ts | 44 + backend/config.ts | 17 + backend/index.ts | 8 + backend/package.json | 36 + backend/pnpm-lock.yaml | 2928 +++++++++ backend/src/api/auth.ts | 104 + backend/src/api/data.ts | 67 + backend/src/api/index.ts | 10 + backend/src/errors.ts | 16 + backend/src/generated/api.ts | 270 + backend/src/mapping/default.ts | 13 + backend/src/mapping/index.ts | 3 + backend/src/mapping/mongo.ts | 18 + backend/src/mapping/types.ts | 14 + backend/src/middleware/logger.ts | 24 + .../persistance/mongo/mongo-persistance.ts | 61 + backend/src/persistance/mongo/mongo-schema.ts | 51 + .../persistance/mssql/mssql-persistance.ts | 155 + .../persistance/mysql/mysql-persistance.ts | 120 + .../src/persistance/persister-factories.ts | 12 + .../postgres/postgres-persistance.ts | 137 + backend/src/types.ts | 31 + backend/src/utils/generate-key.ts | 30 + backend/tsconfig.json | 16 + config/powersync.yaml | 25 + config/sync_rules.yaml | 5 + custom.md | 44 + docker-compose.yaml | 80 + frontend/.dockerignore | 1 + frontend/.env.template | 5 + frontend/.gitignore | 48 + frontend/.nvmrc | 1 + frontend/.prettierrc | 9 + frontend/Dockerfile | 28 + frontend/LICENSE | 121 + frontend/README.md | 7 + frontend/package.json | 53 + frontend/pnpm-lock.yaml | 5761 +++++++++++++++++ frontend/public/favicon.ico | Bin 0 -> 1576 bytes frontend/public/icons/icon-192x192.png | Bin 0 -> 27110 bytes frontend/public/icons/icon-256x256.png | Bin 0 -> 42070 bytes frontend/public/icons/icon-384x384.png | Bin 0 -> 74557 bytes frontend/public/icons/icon-512x512.png | Bin 0 -> 109318 bytes frontend/public/icons/icon.png | Bin 0 -> 76918 bytes frontend/public/powersync-logo.svg | 1 + frontend/public/supabase-logo.png | Bin 0 -> 46427 bytes frontend/src/app/globals.css | 12 + frontend/src/app/index.tsx | 18 + frontend/src/app/page.tsx | 32 + frontend/src/app/router.tsx | 43 + frontend/src/app/views/layout.tsx | 125 + frontend/src/app/views/sql-console/page.tsx | 105 + .../src/app/views/todo-lists/edit/page.tsx | 165 + frontend/src/app/views/todo-lists/page.tsx | 89 + .../components/navigation/NavigationPage.tsx | 24 + .../navigation/NavigationPanelContext.tsx | 21 + .../components/providers/SystemProvider.tsx | 51 + .../providers/ThemeProviderContainer.tsx | 20 + .../src/components/widgets/ListItemWidget.tsx | 72 + .../src/components/widgets/TodoItemWidget.tsx | 52 + .../components/widgets/TodoListsWidget.tsx | 57 + frontend/src/generated/api.d.ts | 270 + frontend/src/index.html | 11 + frontend/src/library/powersync/AppSchema.ts | 35 + .../src/library/powersync/DemoConnector.ts | 80 + .../src/library/powersync/OpenAPITransport.ts | 36 + .../src/library/powersync/WriteAPIClient.ts | 117 + frontend/src/library/powersync/vite-env.d.ts | 11 + frontend/tsconfig.json | 22 + frontend/vite.config.mts | 84 + init-scripts/setup.sql | 32 + openapi.yaml | 236 + plan.md | 145 + 83 files changed, 12680 insertions(+) create mode 100644 README.md create mode 100644 backend/.env.template create mode 100644 backend/.envrc create mode 100644 backend/.gitignore create mode 100644 backend/.nvmrc create mode 100644 backend/.prettierignore create mode 100644 backend/.prettierrc create mode 100644 backend/Dockerfile create mode 100644 backend/LICENSE create mode 100644 backend/README.md create mode 100644 backend/app.ts create mode 100644 backend/config.ts create mode 100644 backend/index.ts create mode 100644 backend/package.json create mode 100644 backend/pnpm-lock.yaml create mode 100644 backend/src/api/auth.ts create mode 100644 backend/src/api/data.ts create mode 100644 backend/src/api/index.ts create mode 100644 backend/src/errors.ts create mode 100644 backend/src/generated/api.ts create mode 100644 backend/src/mapping/default.ts create mode 100644 backend/src/mapping/index.ts create mode 100644 backend/src/mapping/mongo.ts create mode 100644 backend/src/mapping/types.ts create mode 100644 backend/src/middleware/logger.ts create mode 100644 backend/src/persistance/mongo/mongo-persistance.ts create mode 100644 backend/src/persistance/mongo/mongo-schema.ts create mode 100644 backend/src/persistance/mssql/mssql-persistance.ts create mode 100644 backend/src/persistance/mysql/mysql-persistance.ts create mode 100644 backend/src/persistance/persister-factories.ts create mode 100644 backend/src/persistance/postgres/postgres-persistance.ts create mode 100644 backend/src/types.ts create mode 100644 backend/src/utils/generate-key.ts create mode 100644 backend/tsconfig.json create mode 100644 config/powersync.yaml create mode 100644 config/sync_rules.yaml create mode 100644 custom.md create mode 100644 docker-compose.yaml create mode 100644 frontend/.dockerignore create mode 100644 frontend/.env.template create mode 100644 frontend/.gitignore create mode 100644 frontend/.nvmrc create mode 100644 frontend/.prettierrc create mode 100644 frontend/Dockerfile create mode 100644 frontend/LICENSE create mode 100644 frontend/README.md create mode 100644 frontend/package.json create mode 100644 frontend/pnpm-lock.yaml create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/public/icons/icon-192x192.png create mode 100644 frontend/public/icons/icon-256x256.png create mode 100644 frontend/public/icons/icon-384x384.png create mode 100644 frontend/public/icons/icon-512x512.png create mode 100644 frontend/public/icons/icon.png create mode 100644 frontend/public/powersync-logo.svg create mode 100644 frontend/public/supabase-logo.png create mode 100644 frontend/src/app/globals.css create mode 100644 frontend/src/app/index.tsx create mode 100644 frontend/src/app/page.tsx create mode 100644 frontend/src/app/router.tsx create mode 100644 frontend/src/app/views/layout.tsx create mode 100644 frontend/src/app/views/sql-console/page.tsx create mode 100644 frontend/src/app/views/todo-lists/edit/page.tsx create mode 100644 frontend/src/app/views/todo-lists/page.tsx create mode 100644 frontend/src/components/navigation/NavigationPage.tsx create mode 100644 frontend/src/components/navigation/NavigationPanelContext.tsx create mode 100644 frontend/src/components/providers/SystemProvider.tsx create mode 100644 frontend/src/components/providers/ThemeProviderContainer.tsx create mode 100644 frontend/src/components/widgets/ListItemWidget.tsx create mode 100644 frontend/src/components/widgets/TodoItemWidget.tsx create mode 100644 frontend/src/components/widgets/TodoListsWidget.tsx create mode 100644 frontend/src/generated/api.d.ts create mode 100644 frontend/src/index.html create mode 100644 frontend/src/library/powersync/AppSchema.ts create mode 100644 frontend/src/library/powersync/DemoConnector.ts create mode 100644 frontend/src/library/powersync/OpenAPITransport.ts create mode 100644 frontend/src/library/powersync/WriteAPIClient.ts create mode 100644 frontend/src/library/powersync/vite-env.d.ts create mode 100644 frontend/tsconfig.json create mode 100644 frontend/vite.config.mts create mode 100644 init-scripts/setup.sql create mode 100644 openapi.yaml create mode 100644 plan.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..9103cd0 --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# PowerSync Write API Demo + +## Project Layout + +``` +write-api/ +├── docker-compose.yaml # Postgres + MongoDB + PowerSync +├── config/ +│ ├── powersync.yaml # PowerSync service config +│ └── sync_rules.yaml # Sync rules (lists + todos) +├── init-scripts/ +│ └── setup.sql # DB schema + seed data +├── powersync-nodejs-backend-todolist-demo/ # Backend (Express, port 6060) +│ └── .env +└── demo-app/ # Frontend (React/Vite, port 5173) + └── .env.local +``` + +## Running Everything + +```bash +# 1. Start infrastructure (Postgres, Mongo, PowerSync) +docker compose up -d + +# 2. Start backend (new terminal) +cd backend && pnpm install && pnpm start + +# 3. Start frontend (new terminal) +cd frontend && pnpm install && pnpm dev +``` + +- Frontend: http://localhost:5173 +- Backend: http://localhost:6060 +- PowerSync: http://localhost:8080 +- Postgres: localhost:5432 + +## Generating Types from OpenAPI Spec + +Both the backend and frontend generate TypeScript types from the shared `openapi.yaml` spec. + +```bash +# Backend (generates src/generated/api.ts) +cd backend && pnpm generate-types + +# Frontend (generates src/generated/api.d.ts) +cd frontend && pnpm generate +``` diff --git a/backend/.env.template b/backend/.env.template new file mode 100644 index 0000000..6c5331f --- /dev/null +++ b/backend/.env.template @@ -0,0 +1,8 @@ +POWERSYNC_PRIVATE_KEY= +POWERSYNC_PUBLIC_KEY= +POWERSYNC_URL= +PORT= +JWT_ISSUER= +# Either 'mongodb', 'mysql', 'mssql' or 'postgres'. This defaults to Postgres +DATABASE_TYPE= +DATABASE_URI= diff --git a/backend/.envrc b/backend/.envrc new file mode 100644 index 0000000..013a35c --- /dev/null +++ b/backend/.envrc @@ -0,0 +1,3 @@ +layout node +use node +[ -f .env ] && dotenv \ No newline at end of file diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..7da23d9 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,6 @@ +node_modules +.env +.idea +error.log +combined.log +*.tsbuildinfo diff --git a/backend/.nvmrc b/backend/.nvmrc new file mode 100644 index 0000000..805b5a4 --- /dev/null +++ b/backend/.nvmrc @@ -0,0 +1 @@ +v20.9.0 diff --git a/backend/.prettierignore b/backend/.prettierignore new file mode 100644 index 0000000..b7f051d --- /dev/null +++ b/backend/.prettierignore @@ -0,0 +1,2 @@ +# Ignore all node_modules +**/node_modules/** diff --git a/backend/.prettierrc b/backend/.prettierrc new file mode 100644 index 0000000..dd651a5 --- /dev/null +++ b/backend/.prettierrc @@ -0,0 +1,8 @@ +{ + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "useTabs": false, + "printWidth": 120, + "trailingComma": "none" +} diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..83dc7e2 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,30 @@ +# Use Node.js 20 Docker image as base +FROM node:20 + +ENV DATABASE_URI= +# Either 'mongodb', 'postgres', 'mssql' or 'mysql'. This defaults to Postgres +ENV DATABASE_TYPE= +ENV POWERSYNC_PRIVATE_KEY= +ENV POWERSYNC_PUBLIC_KEY= +ENV POWERSYNC_URL= +ENV PORT= +ENV JWT_ISSUER= + +# Set the working directory inside the container + +RUN npm install -g pnpm@9 + +WORKDIR /app + +# Copy the package.json and package-lock.json files to the container +COPY package*.json ./ +COPY pnpm-lock*.yaml ./ + +# Install dependencies +RUN pnpm install --frozen-lockfile + +# Copy the rest of the demo launcher code to the container +COPY / ./ + +# Command to run the application +CMD ["pnpm", "start"] \ No newline at end of file diff --git a/backend/LICENSE b/backend/LICENSE new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/backend/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..7de5c52 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,115 @@ +# Backend + +## Overview + +Node.js server application with HTTP endpoints to authorize a [PowerSync](https://www.powersync.com/) enabled application to sync data between a client device and a PostgreSQL, MySQL, MSSQL or MongoDB database. + +The endpoints are as follows: + +1. GET `/api/auth/token` + + - Returns a JWT access token used for PowerSync authentication. + - Provide an optional `user_id` query parameter to set the subject of the JWT. + +2. GET `/api/auth/keys` + + - JWKS endpoint used by the PowerSync service to validate JWTs. + +3. POST `/api/data` + + - Accepts a batch of CRUD operations (PUT/PATCH/DELETE) from the client. + +4. PUT `/api/data/checkpoint` + + - Returns a custom write checkpoint for a given user/client. + +## Packages + +[node-postgres](https://github.com/brianc/node-postgres) is used to interact with the Postgres database when a client performs requests to the `/api/data` endpoint. + +[mongodb](https://www.npmjs.com/package/mongodb) is used to interact with the MongoDB database when a client performs requests to the `/api/data` endpoint. + +[mysql2](https://www.npmjs.com/package/mysql2) is used to interact with the MySQL database when a client performs requests to the `/api/data` endpoint. + +[node-mssql](https://www.npmjs.com/package/mssql) is used to connect to a MSSQL database to perform operations from the `/api/data` endpoint. + +[jose](https://github.com/panva/jose) is used to sign the JWT which PowerSync uses for authorization. + +## Requirements + +Based on configuration, this app needs a Postgres, Mongo, MSSQL or MySQL instance. Easiest is probably to use docker containers for these databases. +Hosted free versions that can also be used: + +1. Postgres: For a free version for testing/demo purposes, visit [Supabase](https://supabase.com/). + +## Running the app + +1. Clone the repository +2. Follow the steps outlined in [PowerSync Custom Authentication Example](https://github.com/journeyapps/powersync-jwks-example) → [Generate a key-pair](https://github.com/journeyapps/powersync-jwks-example#1-generate-a-key-pair) to get the keys you need for this app. This is an easy way to get started with this demo app. You can use your own public/private keys as well. Note: This backend will generate a temporary key pair for development purposes if the keys are not present in the `.env` file. This should not be used in production. +3. Create a new `.env` file in the root project directory and add the variables as defined in the `.env` file: + +```shell +cp .env.template .env +``` + +4. Install dependancies + +```shell +nvm use +``` + +```shell +pnpm install +``` + +## Start App + +1. Run the following to start the application + +```shell +pnpm start +``` + +This will start the app on `http://127.0.0.1:PORT`, where PORT is what you specify in your `.env` file. + +2. Test if the app is working by opening `http://127.0.0.1:PORT/api/auth/token/` in the browser + +3. You should get a JSON object as the response to that request + +## Connecting the app with PowerSync + +This process is only designed for demo/testing purposes, and is not intended for production use. You won't be using ngrok to host your application and database. + +1. Download and install [ngrok](https://ngrok.com/) +2. Run the ngrok command to create a HTTPS tunnel to your local application + +```shell +ngrok http 8000 +``` + +This should create the tunnel and a new HTTPS URL should be availible e.g. + +```shell +ngrok by @inconshreveable (Ctrl+C to quit) + +Session Status online +Account Michael Barnes (Plan: Free) +Update update available (version 2.3.41, Ctrl-U to update) +Version 2.3.40 +Region United States (us) +Web Interface http://127.0.0.1:4040 +Forwarding http://your_id.ngrok-free.app -> http://localhost:8000 +Forwarding https://your_id.ngrok-free.app -> http://localhost:8000 + +Connections ttl opn rt1 rt5 p50 p90 + 1957 0 0.04 0.03 0.01 89.93 +``` + +3. Open the [PowerSync Dashboard](https://powersync.journeyapps.com/) and paste the `Forwarding` URL starting with HTTPS into the Credentials tab of your PowerSync instance e.g. + +``` +JWKS URI +https://your_id.ngrok-free.app/api/auth/keys/ +``` + +Pay special attention to the URL, it should include the `/api/auth/keys/` path as this is used by the PowerSync server to validate tokens. diff --git a/backend/app.ts b/backend/app.ts new file mode 100644 index 0000000..48d174b --- /dev/null +++ b/backend/app.ts @@ -0,0 +1,44 @@ +import express from 'express'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import * as OpenApiValidator from 'express-openapi-validator'; +import { apiRouter } from './src/api/index.js'; +import logRequest from './src/middleware/logger.js'; +import type { Request, Response, NextFunction } from 'express'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const app = express(); + +app.use(express.json()); +app.use(logRequest); + +app.use((req: Request, res: Response, next: NextFunction) => { + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); + res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); + if (req.method === 'OPTIONS') { + return res.sendStatus(200); + } + next(); +}); + +app.use( + OpenApiValidator.middleware({ + apiSpec: path.join(__dirname, '..', 'openapi.yaml'), + validateRequests: true, + validateResponses: false + }) +); + +app.get('/', (_req: Request, res: Response) => { + res.status(200).send({ message: 'backend' }); +}); + +app.use('/api', apiRouter); + +const errorHandler = (err: Error & { status?: number }, _req: Request, res: Response, _next: NextFunction) => { + res.status(err.status || 500).send({ message: err.message }); +}; +app.use(errorHandler); + +export default app; diff --git a/backend/config.ts b/backend/config.ts new file mode 100644 index 0000000..3746858 --- /dev/null +++ b/backend/config.ts @@ -0,0 +1,17 @@ +import 'dotenv/config'; + +const config = { + port: process.env.PORT ? parseInt(process.env.PORT) : 6060, + database: { + type: process.env.DATABASE_TYPE || 'postgres', + uri: process.env.DATABASE_URI + }, + powersync: { + url: process.env.POWERSYNC_URL, + publicKey: process.env.POWERSYNC_PUBLIC_KEY, + privateKey: process.env.POWERSYNC_PRIVATE_KEY, + jwtIssuer: process.env.JWT_ISSUER + } +}; + +export default config; diff --git a/backend/index.ts b/backend/index.ts new file mode 100644 index 0000000..52a7099 --- /dev/null +++ b/backend/index.ts @@ -0,0 +1,8 @@ +import app from './app.js'; +import config from './config.js'; + +const PORT = process.env.PORT || config.port; + +app.listen(PORT, () => { + console.log(`Server is running @ http://127.0.0.1:${PORT}`); +}); diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..330412b --- /dev/null +++ b/backend/package.json @@ -0,0 +1,36 @@ +{ + "name": "backend", + "version": "1.0.0", + "main": "index.ts", + "type": "module", + "author": "Mike Barnes ", + "scripts": { + "start": "tsx index.ts", + "dev": "tsx watch index.ts", + "format": "prettier --write .", + "check": "tsc -b", + "generate-types": "openapi-typescript ../openapi.yaml -o src/generated/api.ts" + }, + "dependencies": { + "dotenv": "^16.3.1", + "express": "^4.18.2", + "express-openapi-validator": "^5.6.2", + "jose": "^5.3.0", + "mongodb": "^6.9.0", + "mssql": "^12.1.0", + "mysql2": "^3.11.3", + "pg": "^8.11.3", + "winston": "^3.11.0" + }, + "devDependencies": { + "@types/express": "^5.0.6", + "@types/mssql": "^9.1.8", + "@types/node": "^22.7.5", + "@types/pg": "^8.20.0", + "openapi-typescript": "^7.13.0", + "prettier": "^3.2.4", + "tsx": "^4.21.0", + "typescript": "^5.6.2" + }, + "packageManager": "pnpm@9.12.3+sha512.cce0f9de9c5a7c95bef944169cc5dfe8741abfb145078c0d508b868056848a87c81e626246cb60967cbd7fd29a6c062ef73ff840d96b3c86c40ac92cf4a813ee" +} diff --git a/backend/pnpm-lock.yaml b/backend/pnpm-lock.yaml new file mode 100644 index 0000000..fcd3cd3 --- /dev/null +++ b/backend/pnpm-lock.yaml @@ -0,0 +1,2928 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + .: + dependencies: + dotenv: + specifier: ^16.3.1 + version: 16.4.5 + express: + specifier: ^4.18.2 + version: 4.21.0 + express-openapi-validator: + specifier: ^5.6.2 + version: 5.6.2(@types/json-schema@7.0.15)(express@4.21.0) + jose: + specifier: ^5.3.0 + version: 5.9.2 + mongodb: + specifier: ^6.9.0 + version: 6.9.0 + mssql: + specifier: ^12.1.0 + version: 12.1.1 + mysql2: + specifier: ^3.11.3 + version: 3.11.3 + pg: + specifier: ^8.11.3 + version: 8.13.0 + winston: + specifier: ^3.11.0 + version: 3.14.2 + devDependencies: + '@types/express': + specifier: ^5.0.6 + version: 5.0.6 + '@types/mssql': + specifier: ^9.1.8 + version: 9.1.8 + '@types/node': + specifier: ^22.7.5 + version: 22.7.5 + '@types/pg': + specifier: ^8.20.0 + version: 8.20.0 + openapi-typescript: + specifier: ^7.13.0 + version: 7.13.0(typescript@5.6.2) + prettier: + specifier: ^3.2.4 + version: 3.3.3 + tsx: + specifier: ^4.21.0 + version: 4.21.0 + typescript: + specifier: ^5.6.2 + version: 5.6.2 + +packages: + '@apidevtools/json-schema-ref-parser@14.2.1': + resolution: + { integrity: sha512-HmdFw9CDYqM6B25pqGBpNeLCKvGPlIx1EbLrVL0zPvj50CJQUHyBNBw45Muk0kEIkogo1VZvOKHajdMuAzSxRg== } + engines: { node: '>= 20' } + peerDependencies: + '@types/json-schema': ^7.0.15 + + '@azure-rest/core-client@2.5.1': + resolution: + { integrity: sha512-EHaOXW0RYDKS5CFffnixdyRPak5ytiCtU7uXDcP/uiY+A6jFRwNGzzJBiznkCzvi5EYpY+YWinieqHb0oY916A== } + engines: { node: '>=20.0.0' } + + '@azure/abort-controller@2.1.2': + resolution: + { integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA== } + engines: { node: '>=18.0.0' } + + '@azure/core-auth@1.10.1': + resolution: + { integrity: sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg== } + engines: { node: '>=20.0.0' } + + '@azure/core-client@1.10.1': + resolution: + { integrity: sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w== } + engines: { node: '>=20.0.0' } + + '@azure/core-http-compat@2.3.1': + resolution: + { integrity: sha512-az9BkXND3/d5VgdRRQVkiJb2gOmDU8Qcq4GvjtBmDICNiQ9udFmDk4ZpSB5Qq1OmtDJGlQAfBaS4palFsazQ5g== } + engines: { node: '>=20.0.0' } + + '@azure/core-lro@2.7.2': + resolution: + { integrity: sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw== } + engines: { node: '>=18.0.0' } + + '@azure/core-paging@1.6.2': + resolution: + { integrity: sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA== } + engines: { node: '>=18.0.0' } + + '@azure/core-rest-pipeline@1.22.2': + resolution: + { integrity: sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg== } + engines: { node: '>=20.0.0' } + + '@azure/core-tracing@1.3.1': + resolution: + { integrity: sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ== } + engines: { node: '>=20.0.0' } + + '@azure/core-util@1.13.1': + resolution: + { integrity: sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A== } + engines: { node: '>=20.0.0' } + + '@azure/identity@4.13.0': + resolution: + { integrity: sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw== } + engines: { node: '>=20.0.0' } + + '@azure/keyvault-common@2.0.0': + resolution: + { integrity: sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w== } + engines: { node: '>=18.0.0' } + + '@azure/keyvault-keys@4.10.0': + resolution: + { integrity: sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag== } + engines: { node: '>=18.0.0' } + + '@azure/logger@1.3.0': + resolution: + { integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA== } + engines: { node: '>=20.0.0' } + + '@azure/msal-browser@4.26.2': + resolution: + { integrity: sha512-F2U1mEAFsYGC5xzo1KuWc/Sy3CRglU9Ql46cDUx8x/Y3KnAIr1QAq96cIKCk/ZfnVxlvprXWRjNKoEpgLJXLhg== } + engines: { node: '>=0.8.0' } + + '@azure/msal-common@15.13.2': + resolution: + { integrity: sha512-cNwUoCk3FF8VQ7Ln/MdcJVIv3sF73/OT86cRH81ECsydh7F4CNfIo2OAx6Cegtg8Yv75x4506wN4q+Emo6erOA== } + engines: { node: '>=0.8.0' } + + '@azure/msal-node@3.8.3': + resolution: + { integrity: sha512-Ul7A4gwmaHzYWj2Z5xBDly/W8JSC1vnKgJ898zPMZr0oSf1ah0tiL15sytjycU/PMhDZAlkWtEL1+MzNMU6uww== } + engines: { node: '>=16' } + + '@babel/code-frame@7.29.0': + resolution: + { integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== } + engines: { node: '>=6.9.0' } + + '@babel/helper-validator-identifier@7.28.5': + resolution: + { integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== } + engines: { node: '>=6.9.0' } + + '@colors/colors@1.6.0': + resolution: + { integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== } + engines: { node: '>=0.1.90' } + + '@dabh/diagnostics@2.0.3': + resolution: + { integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== } + + '@esbuild/aix-ppc64@0.27.7': + resolution: + { integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg== } + engines: { node: '>=18' } + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.7': + resolution: + { integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ== } + engines: { node: '>=18' } + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.7': + resolution: + { integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ== } + engines: { node: '>=18' } + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.7': + resolution: + { integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg== } + engines: { node: '>=18' } + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.7': + resolution: + { integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw== } + engines: { node: '>=18' } + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.7': + resolution: + { integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ== } + engines: { node: '>=18' } + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.7': + resolution: + { integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w== } + engines: { node: '>=18' } + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.7': + resolution: + { integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ== } + engines: { node: '>=18' } + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.7': + resolution: + { integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A== } + engines: { node: '>=18' } + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.7': + resolution: + { integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA== } + engines: { node: '>=18' } + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.7': + resolution: + { integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg== } + engines: { node: '>=18' } + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.7': + resolution: + { integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q== } + engines: { node: '>=18' } + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.7': + resolution: + { integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw== } + engines: { node: '>=18' } + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.7': + resolution: + { integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ== } + engines: { node: '>=18' } + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.7': + resolution: + { integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ== } + engines: { node: '>=18' } + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.7': + resolution: + { integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw== } + engines: { node: '>=18' } + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.7': + resolution: + { integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA== } + engines: { node: '>=18' } + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.7': + resolution: + { integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w== } + engines: { node: '>=18' } + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.7': + resolution: + { integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw== } + engines: { node: '>=18' } + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.7': + resolution: + { integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A== } + engines: { node: '>=18' } + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.7': + resolution: + { integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg== } + engines: { node: '>=18' } + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.7': + resolution: + { integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw== } + engines: { node: '>=18' } + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.7': + resolution: + { integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA== } + engines: { node: '>=18' } + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.7': + resolution: + { integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA== } + engines: { node: '>=18' } + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.7': + resolution: + { integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw== } + engines: { node: '>=18' } + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.7': + resolution: + { integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg== } + engines: { node: '>=18' } + cpu: [x64] + os: [win32] + + '@js-joda/core@5.6.5': + resolution: + { integrity: sha512-3zwefSMwHpu8iVUW8YYz227sIv6UFqO31p1Bf1ZH/Vom7CmNyUsXjDBlnNzcuhmOL1XfxZ3nvND42kR23XlbcQ== } + + '@jsdevtools/ono@7.1.3': + resolution: + { integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== } + + '@mongodb-js/saslprep@1.1.9': + resolution: + { integrity: sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw== } + + '@redocly/ajv@8.11.2': + resolution: + { integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg== } + + '@redocly/config@0.22.0': + resolution: + { integrity: sha512-gAy93Ddo01Z3bHuVdPWfCwzgfaYgMdaZPcfL7JZ7hWJoK9V0lXDbigTWkhiPFAaLWzbOJ+kbUQG1+XwIm0KRGQ== } + + '@redocly/openapi-core@1.34.12': + resolution: + { integrity: sha512-b32XWsz6enN6K4bx8xWsqUaXTJR/DnYT3lL1CzDYzIYKw243NNlz6fexmr71q/U4HrEcMoJGBvwAfcxOb8ymQw== } + engines: { node: '>=18.17.0', npm: '>=9.5.0' } + + '@tediousjs/connection-string@0.6.0': + resolution: + { integrity: sha512-GxlsW354Vi6QqbUgdPyQVcQjI7cZBdGV5vOYVYuCVDTylx2wl3WHR2HlhcxxHTrMigbelpXsdcZso+66uxPfow== } + + '@types/body-parser@1.19.6': + resolution: + { integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== } + + '@types/connect@3.4.38': + resolution: + { integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== } + + '@types/express-serve-static-core@5.1.1': + resolution: + { integrity: sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A== } + + '@types/express@5.0.6': + resolution: + { integrity: sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA== } + + '@types/http-errors@2.0.5': + resolution: + { integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== } + + '@types/json-schema@7.0.15': + resolution: + { integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== } + + '@types/mssql@9.1.8': + resolution: + { integrity: sha512-mt9h5jWj+DYE5jxnKaWSV/GqDf9FV52XYVk6T3XZF69noEe+JJV6MKirii48l81+cjmAkSq+qeKX+k61fHkYrQ== } + + '@types/multer@2.1.0': + resolution: + { integrity: sha512-zYZb0+nJhOHtPpGDb3vqPjwpdeGlGC157VpkqNQL+UU2qwoacoQ7MpsAmUptI/0Oa127X32JzWDqQVEXp2RcIA== } + + '@types/node@22.7.5': + resolution: + { integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== } + + '@types/pg@8.20.0': + resolution: + { integrity: sha512-bEPFOaMAHTEP1EzpvHTbmwR8UsFyHSKsRisLIHVMXnpNefSbGA1bD6CVy+qKjGSqmZqNqBDV2azOBo8TgkcVow== } + + '@types/qs@6.15.0': + resolution: + { integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow== } + + '@types/range-parser@1.2.7': + resolution: + { integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== } + + '@types/readable-stream@4.0.22': + resolution: + { integrity: sha512-/FFhJpfCLAPwAcN3mFycNUa77ddnr8jTgF5VmSNetaemWB2cIlfCA9t0YTM3JAT0wOcv8D4tjPo7pkDhK3EJIg== } + + '@types/send@1.2.1': + resolution: + { integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== } + + '@types/serve-static@2.2.0': + resolution: + { integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ== } + + '@types/triple-beam@1.3.5': + resolution: + { integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== } + + '@types/webidl-conversions@7.0.3': + resolution: + { integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA== } + + '@types/whatwg-url@11.0.5': + resolution: + { integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ== } + + '@typespec/ts-http-runtime@0.3.2': + resolution: + { integrity: sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg== } + engines: { node: '>=20.0.0' } + + abort-controller@3.0.0: + resolution: + { integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== } + engines: { node: '>=6.5' } + + accepts@1.3.8: + resolution: + { integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== } + engines: { node: '>= 0.6' } + + agent-base@7.1.4: + resolution: + { integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== } + engines: { node: '>= 14' } + + ajv-draft-04@1.0.0: + resolution: + { integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== } + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: + { integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== } + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@8.18.0: + resolution: + { integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A== } + + ansi-colors@4.1.3: + resolution: + { integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== } + engines: { node: '>=6' } + + append-field@1.0.0: + resolution: + { integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== } + + argparse@2.0.1: + resolution: + { integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== } + + array-flatten@1.1.1: + resolution: + { integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== } + + async@3.2.6: + resolution: + { integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== } + + aws-ssl-profiles@1.1.2: + resolution: + { integrity: sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g== } + engines: { node: '>= 6.0.0' } + + balanced-match@1.0.2: + resolution: + { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== } + + base64-js@1.5.1: + resolution: + { integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== } + + bl@6.1.5: + resolution: + { integrity: sha512-XylDt2P3JBttAwLpORq/hOEX9eJzP0r6Voa46C/WVvad8D1J0jW5876txB8FnzKtbdnU6X4Y1vOEvC6PllJrDg== } + + body-parser@1.20.3: + resolution: + { integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== } + engines: { node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16 } + + brace-expansion@2.1.0: + resolution: + { integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w== } + + bson@6.8.0: + resolution: + { integrity: sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ== } + engines: { node: '>=16.20.1' } + + buffer-equal-constant-time@1.0.1: + resolution: + { integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== } + + buffer-from@1.1.2: + resolution: + { integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== } + + buffer@6.0.3: + resolution: + { integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== } + + bundle-name@4.1.0: + resolution: + { integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== } + engines: { node: '>=18' } + + busboy@1.6.0: + resolution: + { integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== } + engines: { node: '>=10.16.0' } + + bytes@3.1.2: + resolution: + { integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== } + engines: { node: '>= 0.8' } + + call-bind-apply-helpers@1.0.2: + resolution: + { integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== } + engines: { node: '>= 0.4' } + + call-bind@1.0.7: + resolution: + { integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== } + engines: { node: '>= 0.4' } + + call-bound@1.0.4: + resolution: + { integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== } + engines: { node: '>= 0.4' } + + change-case@5.4.4: + resolution: + { integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w== } + + color-convert@1.9.3: + resolution: + { integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== } + + color-name@1.1.3: + resolution: + { integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== } + + color-name@1.1.4: + resolution: + { integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== } + + color-string@1.9.1: + resolution: + { integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== } + + color@3.2.1: + resolution: + { integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== } + + colorette@1.4.0: + resolution: + { integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== } + + colorspace@1.1.4: + resolution: + { integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== } + + commander@11.1.0: + resolution: + { integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== } + engines: { node: '>=16' } + + concat-stream@2.0.0: + resolution: + { integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== } + engines: { '0': node >= 6.0 } + + content-disposition@0.5.4: + resolution: + { integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== } + engines: { node: '>= 0.6' } + + content-type@1.0.5: + resolution: + { integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== } + engines: { node: '>= 0.6' } + + cookie-signature@1.0.6: + resolution: + { integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== } + + cookie@0.6.0: + resolution: + { integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== } + engines: { node: '>= 0.6' } + + debug@2.6.9: + resolution: + { integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== } + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: + { integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== } + engines: { node: '>=6.0' } + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + default-browser-id@5.0.1: + resolution: + { integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== } + engines: { node: '>=18' } + + default-browser@5.4.0: + resolution: + { integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg== } + engines: { node: '>=18' } + + define-data-property@1.1.4: + resolution: + { integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== } + engines: { node: '>= 0.4' } + + define-lazy-prop@3.0.0: + resolution: + { integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== } + engines: { node: '>=12' } + + denque@2.1.0: + resolution: + { integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== } + engines: { node: '>=0.10' } + + depd@2.0.0: + resolution: + { integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== } + engines: { node: '>= 0.8' } + + destroy@1.2.0: + resolution: + { integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== } + engines: { node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16 } + + dotenv@16.4.5: + resolution: + { integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== } + engines: { node: '>=12' } + + dunder-proto@1.0.1: + resolution: + { integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== } + engines: { node: '>= 0.4' } + + ecdsa-sig-formatter@1.0.11: + resolution: + { integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== } + + ee-first@1.1.1: + resolution: + { integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== } + + enabled@2.0.0: + resolution: + { integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== } + + encodeurl@1.0.2: + resolution: + { integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== } + engines: { node: '>= 0.8' } + + encodeurl@2.0.0: + resolution: + { integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== } + engines: { node: '>= 0.8' } + + es-define-property@1.0.0: + resolution: + { integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== } + engines: { node: '>= 0.4' } + + es-define-property@1.0.1: + resolution: + { integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== } + engines: { node: '>= 0.4' } + + es-errors@1.3.0: + resolution: + { integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== } + engines: { node: '>= 0.4' } + + es-object-atoms@1.1.1: + resolution: + { integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== } + engines: { node: '>= 0.4' } + + esbuild@0.27.7: + resolution: + { integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w== } + engines: { node: '>=18' } + hasBin: true + + escape-html@1.0.3: + resolution: + { integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== } + + etag@1.8.1: + resolution: + { integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== } + engines: { node: '>= 0.6' } + + event-target-shim@5.0.1: + resolution: + { integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== } + engines: { node: '>=6' } + + events@3.3.0: + resolution: + { integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== } + engines: { node: '>=0.8.x' } + + express-openapi-validator@5.6.2: + resolution: + { integrity: sha512-fkDn4+ImUC4HTJ1g0cek/ItqYhmEO19AglJd2Iw2OJco0jLIbxIlDGVazmXbvvYeziU4Bnah2h+S2tb6NtWg8w== } + peerDependencies: + express: '*' + + express@4.21.0: + resolution: + { integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng== } + engines: { node: '>= 0.10.0' } + + fast-deep-equal@3.1.3: + resolution: + { integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== } + + fast-uri@3.1.0: + resolution: + { integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== } + + fecha@4.2.3: + resolution: + { integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== } + + finalhandler@1.3.1: + resolution: + { integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== } + engines: { node: '>= 0.8' } + + fn.name@1.1.0: + resolution: + { integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== } + + forwarded@0.2.0: + resolution: + { integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== } + engines: { node: '>= 0.6' } + + fresh@0.5.2: + resolution: + { integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== } + engines: { node: '>= 0.6' } + + fsevents@2.3.3: + resolution: + { integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] + + function-bind@1.1.2: + resolution: + { integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== } + + generate-function@2.3.1: + resolution: + { integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== } + + get-intrinsic@1.2.4: + resolution: + { integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== } + engines: { node: '>= 0.4' } + + get-intrinsic@1.3.0: + resolution: + { integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== } + engines: { node: '>= 0.4' } + + get-proto@1.0.1: + resolution: + { integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== } + engines: { node: '>= 0.4' } + + get-tsconfig@4.14.0: + resolution: + { integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA== } + + gopd@1.0.1: + resolution: + { integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== } + + gopd@1.2.0: + resolution: + { integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== } + engines: { node: '>= 0.4' } + + has-property-descriptors@1.0.2: + resolution: + { integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== } + + has-proto@1.0.3: + resolution: + { integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== } + engines: { node: '>= 0.4' } + + has-symbols@1.0.3: + resolution: + { integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== } + engines: { node: '>= 0.4' } + + has-symbols@1.1.0: + resolution: + { integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== } + engines: { node: '>= 0.4' } + + hasown@2.0.2: + resolution: + { integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== } + engines: { node: '>= 0.4' } + + http-errors@2.0.0: + resolution: + { integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== } + engines: { node: '>= 0.8' } + + http-proxy-agent@7.0.2: + resolution: + { integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== } + engines: { node: '>= 14' } + + https-proxy-agent@7.0.6: + resolution: + { integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== } + engines: { node: '>= 14' } + + iconv-lite@0.4.24: + resolution: + { integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== } + engines: { node: '>=0.10.0' } + + iconv-lite@0.6.3: + resolution: + { integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== } + engines: { node: '>=0.10.0' } + + iconv-lite@0.7.0: + resolution: + { integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ== } + engines: { node: '>=0.10.0' } + + ieee754@1.2.1: + resolution: + { integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== } + + index-to-position@1.2.0: + resolution: + { integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw== } + engines: { node: '>=18' } + + inherits@2.0.4: + resolution: + { integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== } + + ipaddr.js@1.9.1: + resolution: + { integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== } + engines: { node: '>= 0.10' } + + is-arrayish@0.3.2: + resolution: + { integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== } + + is-docker@3.0.0: + resolution: + { integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + hasBin: true + + is-inside-container@1.0.0: + resolution: + { integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== } + engines: { node: '>=14.16' } + hasBin: true + + is-property@1.0.2: + resolution: + { integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== } + + is-stream@2.0.1: + resolution: + { integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== } + engines: { node: '>=8' } + + is-wsl@3.1.0: + resolution: + { integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== } + engines: { node: '>=16' } + + jose@5.9.2: + resolution: + { integrity: sha512-ILI2xx/I57b20sd7rHZvgiiQrmp2mcotwsAH+5ajbpFQbrYVQdNHYlQhoA5cFb78CgtBOxtC05TeA+mcgkuCqQ== } + + js-levenshtein@1.1.6: + resolution: + { integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== } + engines: { node: '>=0.10.0' } + + js-md4@0.3.2: + resolution: + { integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA== } + + js-tokens@4.0.0: + resolution: + { integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== } + + js-yaml@4.1.1: + resolution: + { integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== } + hasBin: true + + json-schema-traverse@1.0.0: + resolution: + { integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== } + + jsonwebtoken@9.0.2: + resolution: + { integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== } + engines: { node: '>=12', npm: '>=6' } + + jwa@1.4.2: + resolution: + { integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw== } + + jws@3.2.2: + resolution: + { integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== } + + kuler@2.0.0: + resolution: + { integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== } + + lodash.clonedeep@4.5.0: + resolution: + { integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== } + + lodash.get@4.4.2: + resolution: + { integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== } + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + + lodash.includes@4.3.0: + resolution: + { integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== } + + lodash.isboolean@3.0.3: + resolution: + { integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== } + + lodash.isinteger@4.0.4: + resolution: + { integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== } + + lodash.isnumber@3.0.3: + resolution: + { integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== } + + lodash.isplainobject@4.0.6: + resolution: + { integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== } + + lodash.isstring@4.0.1: + resolution: + { integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== } + + lodash.once@4.1.1: + resolution: + { integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== } + + logform@2.6.1: + resolution: + { integrity: sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA== } + engines: { node: '>= 12.0.0' } + + long@5.2.3: + resolution: + { integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== } + + lru-cache@7.18.3: + resolution: + { integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== } + engines: { node: '>=12' } + + lru.min@1.1.1: + resolution: + { integrity: sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q== } + engines: { bun: '>=1.0.0', deno: '>=1.30.0', node: '>=8.0.0' } + + math-intrinsics@1.1.0: + resolution: + { integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== } + engines: { node: '>= 0.4' } + + media-typer@0.3.0: + resolution: + { integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== } + engines: { node: '>= 0.6' } + + media-typer@1.1.0: + resolution: + { integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== } + engines: { node: '>= 0.8' } + + memory-pager@1.5.0: + resolution: + { integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== } + + merge-descriptors@1.0.3: + resolution: + { integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== } + + methods@1.1.2: + resolution: + { integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== } + engines: { node: '>= 0.6' } + + mime-db@1.52.0: + resolution: + { integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== } + engines: { node: '>= 0.6' } + + mime-types@2.1.35: + resolution: + { integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== } + engines: { node: '>= 0.6' } + + mime@1.6.0: + resolution: + { integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== } + engines: { node: '>=4' } + hasBin: true + + minimatch@5.1.9: + resolution: + { integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw== } + engines: { node: '>=10' } + + mongodb-connection-string-url@3.0.1: + resolution: + { integrity: sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg== } + + mongodb@6.9.0: + resolution: + { integrity: sha512-UMopBVx1LmEUbW/QE0Hw18u583PEDVQmUmVzzBRH0o/xtE9DBRA5ZYLOjpLIa03i8FXjzvQECJcqoMvCXftTUA== } + engines: { node: '>=16.20.1' } + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.1.0 + gcp-metadata: ^5.2.0 + kerberos: ^2.0.1 + mongodb-client-encryption: '>=6.0.0 <7' + snappy: ^7.2.2 + socks: ^2.7.1 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + + ms@2.0.0: + resolution: + { integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== } + + ms@2.1.3: + resolution: + { integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== } + + mssql@12.1.1: + resolution: + { integrity: sha512-nUTXi0unU6p72YKe6KDR9vW2mSQWsmy1KZqV0JkaT2v3RSkxlwx4Y4srjYmH+DZNbyA53Ijp6o2OaLnLc4F2Qg== } + engines: { node: '>=18' } + hasBin: true + + multer@2.1.1: + resolution: + { integrity: sha512-mo+QTzKlx8R7E5ylSXxWzGoXoZbOsRMpyitcht8By2KHvMbf3tjwosZ/Mu/XYU6UuJ3VZnODIrak5ZrPiPyB6A== } + engines: { node: '>= 10.16.0' } + + mysql2@3.11.3: + resolution: + { integrity: sha512-Qpu2ADfbKzyLdwC/5d4W7+5Yz7yBzCU05YWt5npWzACST37wJsB23wgOSo00qi043urkiRwXtEvJc9UnuLX/MQ== } + engines: { node: '>= 8.0' } + + named-placeholders@1.1.3: + resolution: + { integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w== } + engines: { node: '>=12.0.0' } + + native-duplexpair@1.0.0: + resolution: + { integrity: sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA== } + + negotiator@0.6.3: + resolution: + { integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== } + engines: { node: '>= 0.6' } + + object-inspect@1.13.2: + resolution: + { integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== } + engines: { node: '>= 0.4' } + + object-inspect@1.13.4: + resolution: + { integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== } + engines: { node: '>= 0.4' } + + on-finished@2.4.1: + resolution: + { integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== } + engines: { node: '>= 0.8' } + + one-time@1.0.0: + resolution: + { integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== } + + ono@7.1.3: + resolution: + { integrity: sha512-9jnfVriq7uJM4o5ganUY54ntUm+5EK21EGaQ5NWnkWg3zz5ywbbonlBguRcnmF1/HDiIe3zxNxXcO1YPBmPcQQ== } + + open@10.2.0: + resolution: + { integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA== } + engines: { node: '>=18' } + + openapi-typescript@7.13.0: + resolution: + { integrity: sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ== } + hasBin: true + peerDependencies: + typescript: ^5.x + + parse-json@8.3.0: + resolution: + { integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ== } + engines: { node: '>=18' } + + parseurl@1.3.3: + resolution: + { integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== } + engines: { node: '>= 0.8' } + + path-to-regexp@0.1.10: + resolution: + { integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== } + + path-to-regexp@8.4.2: + resolution: + { integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA== } + + pg-cloudflare@1.1.1: + resolution: + { integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== } + + pg-connection-string@2.7.0: + resolution: + { integrity: sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA== } + + pg-int8@1.0.1: + resolution: + { integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== } + engines: { node: '>=4.0.0' } + + pg-pool@3.7.0: + resolution: + { integrity: sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g== } + peerDependencies: + pg: '>=8.0' + + pg-protocol@1.7.0: + resolution: + { integrity: sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ== } + + pg-types@2.2.0: + resolution: + { integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== } + engines: { node: '>=4' } + + pg@8.13.0: + resolution: + { integrity: sha512-34wkUTh3SxTClfoHB3pQ7bIMvw9dpFU1audQQeZG837fmHfHpr14n/AELVDoOYVDW2h5RDWU78tFjkD+erSBsw== } + engines: { node: '>= 8.0.0' } + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: + { integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== } + + picocolors@1.1.1: + resolution: + { integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== } + + pluralize@8.0.0: + resolution: + { integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== } + engines: { node: '>=4' } + + postgres-array@2.0.0: + resolution: + { integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== } + engines: { node: '>=4' } + + postgres-bytea@1.0.0: + resolution: + { integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== } + engines: { node: '>=0.10.0' } + + postgres-date@1.0.7: + resolution: + { integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== } + engines: { node: '>=0.10.0' } + + postgres-interval@1.2.0: + resolution: + { integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== } + engines: { node: '>=0.10.0' } + + prettier@3.3.3: + resolution: + { integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== } + engines: { node: '>=14' } + hasBin: true + + process@0.11.10: + resolution: + { integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== } + engines: { node: '>= 0.6.0' } + + proxy-addr@2.0.7: + resolution: + { integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== } + engines: { node: '>= 0.10' } + + punycode@2.3.1: + resolution: + { integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== } + engines: { node: '>=6' } + + qs@6.13.0: + resolution: + { integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== } + engines: { node: '>=0.6' } + + qs@6.15.1: + resolution: + { integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg== } + engines: { node: '>=0.6' } + + range-parser@1.2.1: + resolution: + { integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== } + engines: { node: '>= 0.6' } + + raw-body@2.5.2: + resolution: + { integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== } + engines: { node: '>= 0.8' } + + readable-stream@3.6.2: + resolution: + { integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== } + engines: { node: '>= 6' } + + readable-stream@4.7.0: + resolution: + { integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + require-from-string@2.0.2: + resolution: + { integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== } + engines: { node: '>=0.10.0' } + + resolve-pkg-maps@1.0.0: + resolution: + { integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== } + + run-applescript@7.1.0: + resolution: + { integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== } + engines: { node: '>=18' } + + safe-buffer@5.2.1: + resolution: + { integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== } + + safe-stable-stringify@2.5.0: + resolution: + { integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== } + engines: { node: '>=10' } + + safer-buffer@2.1.2: + resolution: + { integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== } + + semver@7.7.3: + resolution: + { integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== } + engines: { node: '>=10' } + hasBin: true + + send@0.19.0: + resolution: + { integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== } + engines: { node: '>= 0.8.0' } + + seq-queue@0.0.5: + resolution: + { integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q== } + + serve-static@1.16.2: + resolution: + { integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== } + engines: { node: '>= 0.8.0' } + + set-function-length@1.2.2: + resolution: + { integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== } + engines: { node: '>= 0.4' } + + setprototypeof@1.2.0: + resolution: + { integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== } + + side-channel-list@1.0.1: + resolution: + { integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== } + engines: { node: '>= 0.4' } + + side-channel-map@1.0.1: + resolution: + { integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== } + engines: { node: '>= 0.4' } + + side-channel-weakmap@1.0.2: + resolution: + { integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== } + engines: { node: '>= 0.4' } + + side-channel@1.0.6: + resolution: + { integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== } + engines: { node: '>= 0.4' } + + side-channel@1.1.0: + resolution: + { integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== } + engines: { node: '>= 0.4' } + + simple-swizzle@0.2.2: + resolution: + { integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== } + + sparse-bitfield@3.0.3: + resolution: + { integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== } + + split2@4.2.0: + resolution: + { integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== } + engines: { node: '>= 10.x' } + + sprintf-js@1.1.3: + resolution: + { integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== } + + sqlstring@2.3.3: + resolution: + { integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== } + engines: { node: '>= 0.6' } + + stack-trace@0.0.10: + resolution: + { integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== } + + statuses@2.0.1: + resolution: + { integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== } + engines: { node: '>= 0.8' } + + streamsearch@1.1.0: + resolution: + { integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== } + engines: { node: '>=10.0.0' } + + string_decoder@1.3.0: + resolution: + { integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== } + + supports-color@10.2.2: + resolution: + { integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g== } + engines: { node: '>=18' } + + tarn@3.0.2: + resolution: + { integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== } + engines: { node: '>=8.0.0' } + + tedious@19.1.3: + resolution: + { integrity: sha512-6O6efTeYtcnar3Cqf/ptqJs+U10fYYjp/SHRNm3VGuCTUDys+AUgIbxWbT2kzl4baXAzuy9byV3qCgOimrRfTA== } + engines: { node: '>=18.17' } + + text-hex@1.0.0: + resolution: + { integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== } + + toidentifier@1.0.1: + resolution: + { integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== } + engines: { node: '>=0.6' } + + tr46@4.1.1: + resolution: + { integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== } + engines: { node: '>=14' } + + triple-beam@1.4.1: + resolution: + { integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== } + engines: { node: '>= 14.0.0' } + + tslib@2.8.1: + resolution: + { integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== } + + tsx@4.21.0: + resolution: + { integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw== } + engines: { node: '>=18.0.0' } + hasBin: true + + type-fest@4.41.0: + resolution: + { integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== } + engines: { node: '>=16' } + + type-is@1.6.18: + resolution: + { integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== } + engines: { node: '>= 0.6' } + + typedarray@0.0.6: + resolution: + { integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== } + + typescript@5.6.2: + resolution: + { integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== } + engines: { node: '>=14.17' } + hasBin: true + + undici-types@6.19.8: + resolution: + { integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== } + + unpipe@1.0.0: + resolution: + { integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== } + engines: { node: '>= 0.8' } + + uri-js-replace@1.0.1: + resolution: + { integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g== } + + util-deprecate@1.0.2: + resolution: + { integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== } + + utils-merge@1.0.1: + resolution: + { integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== } + engines: { node: '>= 0.4.0' } + + uuid@8.3.2: + resolution: + { integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== } + hasBin: true + + vary@1.1.2: + resolution: + { integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== } + engines: { node: '>= 0.8' } + + webidl-conversions@7.0.0: + resolution: + { integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== } + engines: { node: '>=12' } + + whatwg-url@13.0.0: + resolution: + { integrity: sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig== } + engines: { node: '>=16' } + + winston-transport@4.7.1: + resolution: + { integrity: sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA== } + engines: { node: '>= 12.0.0' } + + winston@3.14.2: + resolution: + { integrity: sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg== } + engines: { node: '>= 12.0.0' } + + wsl-utils@0.1.0: + resolution: + { integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw== } + engines: { node: '>=18' } + + xtend@4.0.2: + resolution: + { integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== } + engines: { node: '>=0.4' } + + yaml-ast-parser@0.0.43: + resolution: + { integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== } + + yargs-parser@21.1.1: + resolution: + { integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== } + engines: { node: '>=12' } + +snapshots: + '@apidevtools/json-schema-ref-parser@14.2.1(@types/json-schema@7.0.15)': + dependencies: + '@types/json-schema': 7.0.15 + js-yaml: 4.1.1 + + '@azure-rest/core-client@2.5.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@typespec/ts-http-runtime': 0.3.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/abort-controller@2.1.2': + dependencies: + tslib: 2.8.1 + + '@azure/core-auth@1.10.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.13.1 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-client@1.10.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-http-compat@2.3.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-client': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + transitivePeerDependencies: + - supports-color + + '@azure/core-lro@2.7.2': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-paging@1.6.2': + dependencies: + tslib: 2.8.1 + + '@azure/core-rest-pipeline@1.22.2': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + '@typespec/ts-http-runtime': 0.3.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-tracing@1.3.1': + dependencies: + tslib: 2.8.1 + + '@azure/core-util@1.13.1': + dependencies: + '@azure/abort-controller': 2.1.2 + '@typespec/ts-http-runtime': 0.3.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/identity@4.13.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-client': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + '@azure/msal-browser': 4.26.2 + '@azure/msal-node': 3.8.3 + open: 10.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/keyvault-common@2.0.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-client': 1.10.1 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/logger': 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/keyvault-keys@4.10.0': + dependencies: + '@azure-rest/core-client': 2.5.1 + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.1 + '@azure/core-http-compat': 2.3.1 + '@azure/core-lro': 2.7.2 + '@azure/core-paging': 1.6.2 + '@azure/core-rest-pipeline': 1.22.2 + '@azure/core-tracing': 1.3.1 + '@azure/core-util': 1.13.1 + '@azure/keyvault-common': 2.0.0 + '@azure/logger': 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/logger@1.3.0': + dependencies: + '@typespec/ts-http-runtime': 0.3.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/msal-browser@4.26.2': + dependencies: + '@azure/msal-common': 15.13.2 + + '@azure/msal-common@15.13.2': {} + + '@azure/msal-node@3.8.3': + dependencies: + '@azure/msal-common': 15.13.2 + jsonwebtoken: 9.0.2 + uuid: 8.3.2 + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.28.5': {} + + '@colors/colors@1.6.0': {} + + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-x64@0.27.7': + optional: true + + '@esbuild/linux-arm64@0.27.7': + optional: true + + '@esbuild/linux-arm@0.27.7': + optional: true + + '@esbuild/linux-ia32@0.27.7': + optional: true + + '@esbuild/linux-loong64@0.27.7': + optional: true + + '@esbuild/linux-mips64el@0.27.7': + optional: true + + '@esbuild/linux-ppc64@0.27.7': + optional: true + + '@esbuild/linux-riscv64@0.27.7': + optional: true + + '@esbuild/linux-s390x@0.27.7': + optional: true + + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/netbsd-arm64@0.27.7': + optional: true + + '@esbuild/netbsd-x64@0.27.7': + optional: true + + '@esbuild/openbsd-arm64@0.27.7': + optional: true + + '@esbuild/openbsd-x64@0.27.7': + optional: true + + '@esbuild/openharmony-arm64@0.27.7': + optional: true + + '@esbuild/sunos-x64@0.27.7': + optional: true + + '@esbuild/win32-arm64@0.27.7': + optional: true + + '@esbuild/win32-ia32@0.27.7': + optional: true + + '@esbuild/win32-x64@0.27.7': + optional: true + + '@js-joda/core@5.6.5': {} + + '@jsdevtools/ono@7.1.3': {} + + '@mongodb-js/saslprep@1.1.9': + dependencies: + sparse-bitfield: 3.0.3 + + '@redocly/ajv@8.11.2': + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js-replace: 1.0.1 + + '@redocly/config@0.22.0': {} + + '@redocly/openapi-core@1.34.12(supports-color@10.2.2)': + dependencies: + '@redocly/ajv': 8.11.2 + '@redocly/config': 0.22.0 + colorette: 1.4.0 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + js-levenshtein: 1.1.6 + js-yaml: 4.1.1 + minimatch: 5.1.9 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - supports-color + + '@tediousjs/connection-string@0.6.0': {} + + '@types/body-parser@1.19.6': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 22.7.5 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 22.7.5 + + '@types/express-serve-static-core@5.1.1': + dependencies: + '@types/node': 22.7.5 + '@types/qs': 6.15.0 + '@types/range-parser': 1.2.7 + '@types/send': 1.2.1 + + '@types/express@5.0.6': + dependencies: + '@types/body-parser': 1.19.6 + '@types/express-serve-static-core': 5.1.1 + '@types/serve-static': 2.2.0 + + '@types/http-errors@2.0.5': {} + + '@types/json-schema@7.0.15': {} + + '@types/mssql@9.1.8': + dependencies: + '@types/node': 22.7.5 + tarn: 3.0.2 + tedious: 19.1.3 + transitivePeerDependencies: + - supports-color + + '@types/multer@2.1.0': + dependencies: + '@types/express': 5.0.6 + + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 + + '@types/pg@8.20.0': + dependencies: + '@types/node': 22.7.5 + pg-protocol: 1.7.0 + pg-types: 2.2.0 + + '@types/qs@6.15.0': {} + + '@types/range-parser@1.2.7': {} + + '@types/readable-stream@4.0.22': + dependencies: + '@types/node': 22.7.5 + + '@types/send@1.2.1': + dependencies: + '@types/node': 22.7.5 + + '@types/serve-static@2.2.0': + dependencies: + '@types/http-errors': 2.0.5 + '@types/node': 22.7.5 + + '@types/triple-beam@1.3.5': {} + + '@types/webidl-conversions@7.0.3': {} + + '@types/whatwg-url@11.0.5': + dependencies: + '@types/webidl-conversions': 7.0.3 + + '@typespec/ts-http-runtime@0.3.2': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + agent-base@7.1.4: {} + + ajv-draft-04@1.0.0(ajv@8.18.0): + optionalDependencies: + ajv: 8.18.0 + + ajv-formats@3.0.1(ajv@8.18.0): + optionalDependencies: + ajv: 8.18.0 + + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-colors@4.1.3: {} + + append-field@1.0.0: {} + + argparse@2.0.1: {} + + array-flatten@1.1.1: {} + + async@3.2.6: {} + + aws-ssl-profiles@1.1.2: {} + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + bl@6.1.5: + dependencies: + '@types/readable-stream': 4.0.22 + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 4.7.0 + + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + brace-expansion@2.1.0: + dependencies: + balanced-match: 1.0.2 + + bson@6.8.0: {} + + buffer-equal-constant-time@1.0.1: {} + + buffer-from@1.1.2: {} + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + change-case@5.4.4: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + colorette@1.4.0: {} + + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + + commander@11.1.0: {} + + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + cookie-signature@1.0.6: {} + + cookie@0.6.0: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.4.3(supports-color@10.2.2): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 + + default-browser-id@5.0.1: {} + + default-browser@5.4.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-lazy-prop@3.0.0: {} + + denque@2.1.0: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + dotenv@16.4.5: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + ee-first@1.1.1: {} + + enabled@2.0.0: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + esbuild@0.27.7: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + + escape-html@1.0.3: {} + + etag@1.8.1: {} + + event-target-shim@5.0.1: {} + + events@3.3.0: {} + + express-openapi-validator@5.6.2(@types/json-schema@7.0.15)(express@4.21.0): + dependencies: + '@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15) + '@types/multer': 2.1.0 + ajv: 8.18.0 + ajv-draft-04: 1.0.0(ajv@8.18.0) + ajv-formats: 3.0.1(ajv@8.18.0) + content-type: 1.0.5 + express: 4.21.0 + json-schema-traverse: 1.0.0 + lodash.clonedeep: 4.5.0 + lodash.get: 4.4.2 + media-typer: 1.1.0 + multer: 2.1.1 + ono: 7.1.3 + path-to-regexp: 8.4.2 + qs: 6.15.1 + transitivePeerDependencies: + - '@types/json-schema' + + express@4.21.0: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.6.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.10 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + fast-deep-equal@3.1.3: {} + + fast-uri@3.1.0: {} + + fecha@4.2.3: {} + + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + fn.name@1.1.0: {} + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-tsconfig@4.14.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + gopd@1.2.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-symbols@1.1.0: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6(supports-color@10.2.2): + dependencies: + agent-base: 7.1.4 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + index-to-position@1.2.0: {} + + inherits@2.0.4: {} + + ipaddr.js@1.9.1: {} + + is-arrayish@0.3.2: {} + + is-docker@3.0.0: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-property@1.0.2: {} + + is-stream@2.0.1: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + jose@5.9.2: {} + + js-levenshtein@1.1.6: {} + + js-md4@0.3.2: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + json-schema-traverse@1.0.0: {} + + jsonwebtoken@9.0.2: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.7.3 + + jwa@1.4.2: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.2 + safe-buffer: 5.2.1 + + kuler@2.0.0: {} + + lodash.clonedeep@4.5.0: {} + + lodash.get@4.4.2: {} + + lodash.includes@4.3.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.once@4.1.1: {} + + logform@2.6.1: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.5.0 + triple-beam: 1.4.1 + + long@5.2.3: {} + + lru-cache@7.18.3: {} + + lru.min@1.1.1: {} + + math-intrinsics@1.1.0: {} + + media-typer@0.3.0: {} + + media-typer@1.1.0: {} + + memory-pager@1.5.0: {} + + merge-descriptors@1.0.3: {} + + methods@1.1.2: {} + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + minimatch@5.1.9: + dependencies: + brace-expansion: 2.1.0 + + mongodb-connection-string-url@3.0.1: + dependencies: + '@types/whatwg-url': 11.0.5 + whatwg-url: 13.0.0 + + mongodb@6.9.0: + dependencies: + '@mongodb-js/saslprep': 1.1.9 + bson: 6.8.0 + mongodb-connection-string-url: 3.0.1 + + ms@2.0.0: {} + + ms@2.1.3: {} + + mssql@12.1.1: + dependencies: + '@tediousjs/connection-string': 0.6.0 + commander: 11.1.0 + debug: 4.4.3(supports-color@10.2.2) + tarn: 3.0.2 + tedious: 19.1.3 + transitivePeerDependencies: + - supports-color + + multer@2.1.1: + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 2.0.0 + type-is: 1.6.18 + + mysql2@3.11.3: + dependencies: + aws-ssl-profiles: 1.1.2 + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.6.3 + long: 5.2.3 + lru.min: 1.1.1 + named-placeholders: 1.1.3 + seq-queue: 0.0.5 + sqlstring: 2.3.3 + + named-placeholders@1.1.3: + dependencies: + lru-cache: 7.18.3 + + native-duplexpair@1.0.0: {} + + negotiator@0.6.3: {} + + object-inspect@1.13.2: {} + + object-inspect@1.13.4: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + + ono@7.1.3: + dependencies: + '@jsdevtools/ono': 7.1.3 + + open@10.2.0: + dependencies: + default-browser: 5.4.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + openapi-typescript@7.13.0(typescript@5.6.2): + dependencies: + '@redocly/openapi-core': 1.34.12(supports-color@10.2.2) + ansi-colors: 4.1.3 + change-case: 5.4.4 + parse-json: 8.3.0 + supports-color: 10.2.2 + typescript: 5.6.2 + yargs-parser: 21.1.1 + + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.29.0 + index-to-position: 1.2.0 + type-fest: 4.41.0 + + parseurl@1.3.3: {} + + path-to-regexp@0.1.10: {} + + path-to-regexp@8.4.2: {} + + pg-cloudflare@1.1.1: + optional: true + + pg-connection-string@2.7.0: {} + + pg-int8@1.0.1: {} + + pg-pool@3.7.0(pg@8.13.0): + dependencies: + pg: 8.13.0 + + pg-protocol@1.7.0: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + pg@8.13.0: + dependencies: + pg-connection-string: 2.7.0 + pg-pool: 3.7.0(pg@8.13.0) + pg-protocol: 1.7.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.1.1 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + + picocolors@1.1.1: {} + + pluralize@8.0.0: {} + + postgres-array@2.0.0: {} + + postgres-bytea@1.0.0: {} + + postgres-date@1.0.7: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + + prettier@3.3.3: {} + + process@0.11.10: {} + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + punycode@2.3.1: {} + + qs@6.13.0: + dependencies: + side-channel: 1.0.6 + + qs@6.15.1: + dependencies: + side-channel: 1.1.0 + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + require-from-string@2.0.2: {} + + resolve-pkg-maps@1.0.0: {} + + run-applescript@7.1.0: {} + + safe-buffer@5.2.1: {} + + safe-stable-stringify@2.5.0: {} + + safer-buffer@2.1.2: {} + + semver@7.7.3: {} + + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + seq-queue@0.0.5: {} + + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + setprototypeof@1.2.0: {} + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + sparse-bitfield@3.0.3: + dependencies: + memory-pager: 1.5.0 + + split2@4.2.0: {} + + sprintf-js@1.1.3: {} + + sqlstring@2.3.3: {} + + stack-trace@0.0.10: {} + + statuses@2.0.1: {} + + streamsearch@1.1.0: {} + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + supports-color@10.2.2: {} + + tarn@3.0.2: {} + + tedious@19.1.3: + dependencies: + '@azure/core-auth': 1.10.1 + '@azure/identity': 4.13.0 + '@azure/keyvault-keys': 4.10.0 + '@js-joda/core': 5.6.5 + '@types/node': 22.7.5 + bl: 6.1.5 + iconv-lite: 0.7.0 + js-md4: 0.3.2 + native-duplexpair: 1.0.0 + sprintf-js: 1.1.3 + transitivePeerDependencies: + - supports-color + + text-hex@1.0.0: {} + + toidentifier@1.0.1: {} + + tr46@4.1.1: + dependencies: + punycode: 2.3.1 + + triple-beam@1.4.1: {} + + tslib@2.8.1: {} + + tsx@4.21.0: + dependencies: + esbuild: 0.27.7 + get-tsconfig: 4.14.0 + optionalDependencies: + fsevents: 2.3.3 + + type-fest@4.41.0: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typedarray@0.0.6: {} + + typescript@5.6.2: {} + + undici-types@6.19.8: {} + + unpipe@1.0.0: {} + + uri-js-replace@1.0.1: {} + + util-deprecate@1.0.2: {} + + utils-merge@1.0.1: {} + + uuid@8.3.2: {} + + vary@1.1.2: {} + + webidl-conversions@7.0.0: {} + + whatwg-url@13.0.0: + dependencies: + tr46: 4.1.1 + webidl-conversions: 7.0.0 + + winston-transport@4.7.1: + dependencies: + logform: 2.6.1 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.14.2: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.6 + is-stream: 2.0.1 + logform: 2.6.1 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.5.0 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.7.1 + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 + + xtend@4.0.2: {} + + yaml-ast-parser@0.0.43: {} + + yargs-parser@21.1.1: {} diff --git a/backend/src/api/auth.ts b/backend/src/api/auth.ts new file mode 100644 index 0000000..8aff924 --- /dev/null +++ b/backend/src/api/auth.ts @@ -0,0 +1,104 @@ +import express, { type Request, type Response } from 'express'; +import { SignJWT, importJWK, type JWK, type KeyLike } from 'jose'; +import config from '../../config.js'; +import { generateKeyPair } from '../utils/generate-key.js'; +import type { OpQuery, OpResponse } from '../types.js'; +const router = express.Router(); + +interface ImportedKeys { + privateKey: { alg: string; kid: string; key: KeyLike } | null; + publicKey: JWK | null; +} + +const keys: ImportedKeys = { + privateKey: null, + publicKey: null +}; + +async function ensureKeys(): Promise { + // Keys are loaded already + if (keys.privateKey) { + return; + } + + const { powersync } = config; + const base64Keys: { private: string | undefined; public: string | undefined } = { + private: powersync.privateKey, + public: powersync.publicKey + }; + + if (!base64Keys.private) { + // Key is not present in ENV + console.warn( + `Private key has not been supplied in process.env.POWERSYNC_PRIVATE_KEY. A temporary key pair will be generated.` + ); + const generated = await generateKeyPair(); + base64Keys.private = generated.privateBase64; + base64Keys.public = generated.publicBase64; + } + + const decodedPrivateKey = Buffer.from(base64Keys.private, 'base64'); + const powerSyncPrivateKey = JSON.parse(new TextDecoder().decode(decodedPrivateKey)); + keys.privateKey = { + alg: powerSyncPrivateKey.alg, + kid: powerSyncPrivateKey.kid, + key: (await importJWK(powerSyncPrivateKey)) as KeyLike + }; + + const decodedPublicKey = Buffer.from(base64Keys.public!, 'base64'); + keys.publicKey = JSON.parse(new TextDecoder().decode(decodedPublicKey)); +} + +/** + * Get the JWT token that PowerSync will use to authenticate the user + * Provide an optional user_id in the url params query string to use as the subject of the token + * If no id is provided, "UserID" is used as the subject + */ +router.get( + '/token', + async ( + req: Request<{}, OpResponse<'getAuthToken'>, never, OpQuery<'getAuthToken'>>, + res: Response> + ) => { + const user_id = req.query.user_id ?? 'UserID '; + + const token = await generateToken(user_id, {}); + res.send({ + token, + powersync_url: config.powersync.url! + }); + } +); + +/** + * This is the JWKS endpoint PowerSync uses to handle authentication + */ +router.get('/keys', async (_req: Request, res: Response>) => { + await ensureKeys(); + res.send({ + keys: [{ ...keys.publicKey }] + }); +}); + +export { router as authRouter }; + +const generateToken = async (user_id: string, payload: Record): Promise => { + await ensureKeys(); + const powerSyncKey = keys.privateKey!; + const token = await new SignJWT(payload) + .setProtectedHeader({ + alg: powerSyncKey.alg, + kid: powerSyncKey.kid + }) + .setSubject(user_id) + .setIssuedAt() + .setIssuer(config.powersync.jwtIssuer!) + .setAudience(config.powersync.url!) + // Long-lived tokens should only be used for development purposes. + // Powersync won't authenticate tokens that expire on or after 60 minutes. + // See: https://docs.powersync.com/installation/authentication-setup/custom + .setExpirationTime('60m') + .sign(powerSyncKey.key); + + return token; +}; diff --git a/backend/src/api/data.ts b/backend/src/api/data.ts new file mode 100644 index 0000000..c608e08 --- /dev/null +++ b/backend/src/api/data.ts @@ -0,0 +1,67 @@ +import express, { type Request, type Response } from 'express'; +import config from '../../config.js'; +import { factories } from '../persistance/persister-factories.js'; +import { FatalOperationError, RetryableError } from '../errors.js'; +import type { OpBody, OpResponse } from '../types.js'; + +const router = express.Router(); + +const persistenceFactory = factories[config.database.type]; +if (!persistenceFactory) { + throw new Error(`Unsupported database type: ${config.database.type}`); +} +if (!config.database.uri) { + throw new Error('DATABASE_URI environment variable is required'); +} + +const { updateBatch, createCheckpoint } = await persistenceFactory(config.database.uri); + +/** + * Handle a CrudTransaction. + */ +router.post( + '/', + async ( + req: Request<{}, OpResponse<'postCrudTransaction'>, OpBody<'postCrudTransaction'>>, + res: Response> + ) => { + try { + await updateBatch(req.body.crud); + res.status(200).send({ status: 'success', message: 'Transaction completed' }); + } catch (e) { + if (e instanceof FatalOperationError) { + res.status(200).send({ + status: 'fatal_error', + message: e.message, + failed_operation: { error_code: e.errorCode, message: e.message } + }); + } else if (e instanceof RetryableError) { + res.status(200).send({ + status: 'retryable_error', + message: e.message + }); + } else { + const msg = e instanceof Error ? e.message : String(e); + res.status(200).send({ status: 'retryable_error', message: msg }); + } + } + } +); + +router.put( + '/checkpoint', + async ( + req: Request<{}, OpResponse<'putCheckpoint'>, OpBody<'putCheckpoint'>>, + res: Response> + ) => { + const { user_id, client_id } = req.body; + + const checkpoint = await createCheckpoint(user_id, client_id); + + res.status(200).send({ + checkpoint: String(checkpoint) + }); + } +); + +export { router as dataRouter }; diff --git a/backend/src/api/index.ts b/backend/src/api/index.ts new file mode 100644 index 0000000..0866305 --- /dev/null +++ b/backend/src/api/index.ts @@ -0,0 +1,10 @@ +import express from 'express'; +import { authRouter } from './auth.js'; +import { dataRouter } from './data.js'; + +const router = express.Router(); + +router.use('/auth', authRouter); +router.use('/data', dataRouter); + +export { router as apiRouter }; diff --git a/backend/src/errors.ts b/backend/src/errors.ts new file mode 100644 index 0000000..0eecfd7 --- /dev/null +++ b/backend/src/errors.ts @@ -0,0 +1,16 @@ +/** Transient failure (deadlock, timeout, connection error). Client should retry. */ +export class RetryableError extends Error { + constructor(message: string) { + super(message); + } +} + +/** Non-recoverable failure (constraint violation, schema mismatch). Client should NOT retry. */ +export class FatalOperationError extends Error { + constructor( + public readonly errorCode: string, + message: string + ) { + super(message); + } +} diff --git a/backend/src/generated/api.ts b/backend/src/generated/api.ts new file mode 100644 index 0000000..6610359 --- /dev/null +++ b/backend/src/generated/api.ts @@ -0,0 +1,270 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + '/api/auth/token': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get a JWT access token */ + get: operations['getAuthToken']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/auth/keys': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** JWKS endpoint for PowerSync JWT validation */ + get: operations['getAuthKeys']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/data': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Apply a transaction of CRUD operations */ + post: operations['postCrudTransaction']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/data/checkpoint': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Get a custom write checkpoint */ + put: operations['putCheckpoint']; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + TokenResponse: { + /** @description Signed JWT access token */ + token: string; + /** @description PowerSync service URL */ + powersync_url: string; + }; + CrudTransaction: { + crud: components['schemas']['CrudEntry'][]; + /** + * Format: int64 + * @description Groups changes from the same transaction; null if no explicit transaction + */ + transaction_id?: number; + }; + CrudEntry: { + /** + * Format: int64 + * @description Auto-incrementing client-side id + */ + client_id: number; + /** @description ID of the changed row */ + id: string; + /** + * @description Type of change + * @enum {string} + */ + op: 'PUT' | 'PATCH' | 'DELETE'; + /** @description Table that contained the change */ + table: string; + /** + * Format: int64 + * @description Auto-incrementing transaction id + */ + transaction_id?: number; + /** @description Data associated with the change */ + op_data?: { + [key: string]: unknown; + }; + /** @description Previous values for UPDATE/DELETE (when trackPreviousValues is enabled) */ + previous_values?: { + [key: string]: unknown; + }; + /** @description Client-side metadata (when trackMetadata is enabled) */ + metadata?: string; + }; + TransactionResponse: { + /** + * @description success: entire transaction persisted, safe to complete. retryable_error: transient failure, transaction rolled back, + * client should retry. + * fatal_error: transaction rolled back due to a non-recoverable + * issue — see failed_operation for details. + * @enum {string} + */ + status: 'success' | 'retryable_error' | 'fatal_error'; + /** @description Suggested retry delay in ms. Only meaningful for retryable_error. */ + retry_after_ms?: number; + /** @description Present when status is fatal_error. Identifies what caused the rollback. */ + failed_operation?: components['schemas']['FailedOperation']; + /** @description Human-readable summary for logging/debugging. */ + message?: string; + }; + FailedOperation: { + /** @description Machine-readable classification, e.g. CONFLICT, SCHEMA_MISMATCH, VALIDATION_ERROR, UNIQUE_VIOLATION, FOREIGN_KEY_VIOLATION. */ + error_code: string; + /** @description Human-readable error detail. */ + message?: string; + }; + CheckpointRequest: { + user_id: string; + client_id: string; + }; + CheckpointResponse: { + checkpoint: string; + }; + JwksResponse: { + keys: { + [key: string]: unknown; + }[]; + }; + MessageResponse: { + message: string; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + getAuthToken: { + parameters: { + query?: { + /** @description Subject of the JWT. A random UUID is typically passed by the client. */ + user_id?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description JWT token and PowerSync URL */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['TokenResponse']; + }; + }; + }; + }; + getAuthKeys: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description JSON Web Key Set */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['JwksResponse']; + }; + }; + }; + }; + postCrudTransaction: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CrudTransaction']; + }; + }; + responses: { + /** @description Transaction result. Always returns 200 — the outcome is determined by the status field in the response body. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['TransactionResponse']; + }; + }; + }; + }; + putCheckpoint: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CheckpointRequest']; + }; + }; + responses: { + /** @description Checkpoint value */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CheckpointResponse']; + }; + }; + /** @description Invalid body */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MessageResponse']; + }; + }; + }; + }; +} diff --git a/backend/src/mapping/default.ts b/backend/src/mapping/default.ts new file mode 100644 index 0000000..6bd83a5 --- /dev/null +++ b/backend/src/mapping/default.ts @@ -0,0 +1,13 @@ +import type { EntryMapper } from './types.js'; + +export const defaultMapper: EntryMapper = (entry) => { + const data = entry.op_data ?? {}; + const id = (entry.id ?? data.id) as string; + + if (entry.op === 'DELETE') { + return { table: entry.table, op: entry.op, id, data: {} }; + } + + const { id: _discardId, ...fields } = data; + return { table: entry.table, op: entry.op, id, data: fields }; +}; diff --git a/backend/src/mapping/index.ts b/backend/src/mapping/index.ts new file mode 100644 index 0000000..5b00fe2 --- /dev/null +++ b/backend/src/mapping/index.ts @@ -0,0 +1,3 @@ +export type { MappedEntry, EntryMapper } from './types.js'; +export { defaultMapper } from './default.js'; +export { mongoMapper } from './mongo.js'; diff --git a/backend/src/mapping/mongo.ts b/backend/src/mapping/mongo.ts new file mode 100644 index 0000000..2349c6d --- /dev/null +++ b/backend/src/mapping/mongo.ts @@ -0,0 +1,18 @@ +import { applySchema, schema } from '../persistance/mongo/mongo-schema.js'; +import type { EntryMapper } from './types.js'; + +export const mongoMapper: EntryMapper = (entry) => { + const tableSchema = schema[entry.table]; + if (!tableSchema) return null; + + const data = entry.op_data ?? {}; + const id = (entry.id ?? data.id) as string; + + if (entry.op === 'DELETE') { + return { table: entry.table, op: entry.op, id, data: {} }; + } + + const { id: _discardId, ...fields } = data; + const converted = applySchema(tableSchema, fields); + return { table: entry.table, op: entry.op, id, data: converted }; +}; diff --git a/backend/src/mapping/types.ts b/backend/src/mapping/types.ts new file mode 100644 index 0000000..32c133d --- /dev/null +++ b/backend/src/mapping/types.ts @@ -0,0 +1,14 @@ +import type { CrudEntry } from '../types.js'; + +export interface MappedEntry { + table: string; + op: 'PUT' | 'PATCH' | 'DELETE'; + id: string; + data: Record; +} + +/** + * Transforms a CrudEntry into a MappedEntry for persistence. + * Return null to skip the operation. + */ +export type EntryMapper = (entry: CrudEntry) => MappedEntry | null; diff --git a/backend/src/middleware/logger.ts b/backend/src/middleware/logger.ts new file mode 100644 index 0000000..3ba84f2 --- /dev/null +++ b/backend/src/middleware/logger.ts @@ -0,0 +1,24 @@ +import winston from 'winston'; +import type { Request, Response, NextFunction } from 'express'; + +const logger = winston.createLogger({ + level: 'info', + format: winston.format.combine( + winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), + winston.format.printf(({ level, message, timestamp }) => { + return `${timestamp} ${level}: ${message}`; + }) + ), + transports: [ + new winston.transports.Console(), // Log to console + new winston.transports.File({ filename: 'error.log', level: 'error' }), + new winston.transports.File({ filename: 'combined.log' }) + ] +}); + +const logRequest = (req: Request, _res: Response, next: NextFunction) => { + logger.info(`${req.method} ${req.url}`); + next(); +}; + +export default logRequest; diff --git a/backend/src/persistance/mongo/mongo-persistance.ts b/backend/src/persistance/mongo/mongo-persistance.ts new file mode 100644 index 0000000..cafc162 --- /dev/null +++ b/backend/src/persistance/mongo/mongo-persistance.ts @@ -0,0 +1,61 @@ +import * as mongo from 'mongodb'; +import type { Persister, CrudEntry } from '../../types.js'; +import { RetryableError, FatalOperationError } from '../../errors.js'; +import type { EntryMapper } from '../../mapping/types.js'; +import { mongoMapper } from '../../mapping/mongo.js'; + +export const createMongoPersister = async (uri: string, mapper: EntryMapper = mongoMapper): Promise => { + console.debug('Using MongoDB Persister'); + + const client = new mongo.MongoClient(uri); + const db = client.db(); + await client.connect(); + + const persister: Persister = { + createCheckpoint: async (user_id: string, client_id: string) => { + const doc = await db.collection('checkpoints').findOneAndUpdate( + { + user_id, + client_id + }, + { + $inc: { + checkpoint: 1n + } + }, + { upsert: true, returnDocument: 'after' } + ); + return doc!.checkpoint; + }, + updateBatch: async (batch: CrudEntry[]) => { + // TODO: Use batches & transactions. + try { + for (const op of batch) { + const mapped = mapper(op); + if (mapped === null) continue; + + const collection = db.collection(mapped.table); + + if (mapped.op == 'PUT') { + const doc: Record = { _id: mapped.id, ...mapped.data }; + await collection.insertOne(doc as mongo.OptionalId); + } else if (mapped.op == 'PATCH') { + await collection.updateOne({ _id: mapped.id as unknown as mongo.ObjectId }, { $set: mapped.data }); + } else if (mapped.op == 'DELETE') { + await collection.deleteOne({ _id: mapped.id as unknown as mongo.ObjectId }); + } + } + } catch (e) { + const err = e as Error & { code?: number; hasErrorLabel?: (label: string) => boolean }; + if (err.code === 11000) { + throw new FatalOperationError('UNIQUE_VIOLATION', err.message); + } else if (err.hasErrorLabel?.('TransientTransactionError')) { + throw new RetryableError(err.message); + } + throw new RetryableError(err.message); + } + } + }; + + return persister; +}; diff --git a/backend/src/persistance/mongo/mongo-schema.ts b/backend/src/persistance/mongo/mongo-schema.ts new file mode 100644 index 0000000..2971336 --- /dev/null +++ b/backend/src/persistance/mongo/mongo-schema.ts @@ -0,0 +1,51 @@ +export type TypeConverter = (v: unknown) => unknown; + +export type TableSchema = Record; + +export const types: Record = { + date: (v) => new Date(v as string | number), + boolean: (v) => !!v, + string: (v) => String(v), + number: (v) => Number(v) +}; + +export const schema: Record = { + lists: { + _id: types.string, + created_at: types.date, + name: types.string, + owner_id: types.string + }, + todos: { + _id: types.string, + completed: types.boolean, + created_at: types.date, + created_by: types.string, + description: types.string, + list_id: types.string, + completed_at: types.date, + completed_by: types.string + } +}; + +/** + * A basic function to convert data according to a schema specified above. + * + * A production application should probably use a purpose-built library for this, + * and use MongoDB Schema Validation to enforce the types in the database. + */ +export function applySchema(tableSchema: TableSchema, data: Record): Record { + const converted = Object.entries(tableSchema) + .map(([key, converter]) => { + const rawValue = data[key]; + if (typeof rawValue == 'undefined') { + return null; + } else if (rawValue == null) { + return [key, null] as [string, null]; + } else { + return [key, converter(rawValue)] as [string, unknown]; + } + }) + .filter((v): v is [string, unknown] => v != null); + return Object.fromEntries(converted); +} diff --git a/backend/src/persistance/mssql/mssql-persistance.ts b/backend/src/persistance/mssql/mssql-persistance.ts new file mode 100644 index 0000000..273e50b --- /dev/null +++ b/backend/src/persistance/mssql/mssql-persistance.ts @@ -0,0 +1,155 @@ +import { URL } from 'url'; +import sql from 'mssql'; +import type { Persister, CrudEntry } from '../../types.js'; +import { RetryableError, FatalOperationError } from '../../errors.js'; +import type { EntryMapper } from '../../mapping/types.js'; +import { defaultMapper } from '../../mapping/default.js'; + +function escapeIdentifier(identifier: string): string { + return `[${identifier}]`; +} + +export const createMSSQLPersister = async (uri: string, mapper: EntryMapper = defaultMapper): Promise => { + console.debug('Using MSSQL Persister'); + + const url = new URL(uri); + + const pool = new sql.ConnectionPool({ + user: url.username, + password: url.password, + server: url.hostname, + port: parseInt(url.port), + database: url.pathname.split('/')[1], + options: { + encrypt: true, + trustServerCertificate: true + } + }); + + pool.on('error', (err: Error) => { + console.error('MSSQL pool connection failure', err); + }); + + await pool.connect(); + + const persister: Persister = { + updateBatch: async (batch: CrudEntry[]) => { + const transaction = pool.transaction(); + try { + await transaction.begin(); + + for (const op of batch) { + const mapped = mapper(op); + if (mapped === null) continue; + + const table = escapeIdentifier(mapped.table); + + if (mapped.op == 'PUT') { + const with_id: Record = { ...mapped.data, id: mapped.id }; + + const columnNames = Object.keys(with_id); + const columnsEscaped = columnNames.map(escapeIdentifier); + const columns = columnsEscaped.join(', '); + const columnParamaters = columnNames.map((c) => `@${c}`).join(', '); + const sourceColumns = columnsEscaped.map((column) => `source.${column}`).join(', '); + + const updateClauses: string[] = []; + for (const key of Object.keys(mapped.data)) { + if (key == 'id') { + continue; + } + updateClauses.push(`${escapeIdentifier(key)} = source.${escapeIdentifier(key)}`); + } + + const updateClause = + updateClauses.length > 0 ? `WHEN MATCHED THEN UPDATE SET ${updateClauses.join(', ')}` : null; + const insertClause = `WHEN NOT MATCHED THEN INSERT (${columns}) VALUES (${sourceColumns})`; + + const statement = ` + MERGE INTO ${table} AS t + USING (VALUES (${columnParamaters})) AS source (${columns}) + ON t.[id] = source.[id] + ${updateClause ? updateClause : ''} + ${insertClause}; + `; + + const request = transaction.request(); + for (const column of columnNames) { + request.input(column, with_id[column]); + } + await request.query(statement); + } else if (mapped.op == 'PATCH') { + const with_id: Record = { ...mapped.data, id: mapped.id }; + + const updateClauses: string[] = []; + + for (const key of Object.keys(mapped.data)) { + if (key == 'id') { + continue; + } + updateClauses.push(`${escapeIdentifier(key)} = @${key}`); + } + + const statement = ` + UPDATE ${table} + SET ${updateClauses.join(', ')} + WHERE id = @id`; + + const request = transaction.request(); + for (const column of Object.keys(with_id)) { + request.input(column, with_id[column]); + } + + await request.query(statement); + } else if (mapped.op == 'DELETE') { + const statement = `DELETE FROM ${table} WHERE id = @id`; + const request = transaction.request(); + request.input('id', mapped.id); + await request.query(statement); + } + } + await transaction.commit(); + } catch (e) { + await transaction.rollback(); + const err = e as Error & { number?: number }; + const num = err.number ?? 0; + if (num === 2627 || num === 2601) { + throw new FatalOperationError('UNIQUE_VIOLATION', err.message); + } else if (num === 547) { + throw new FatalOperationError('FOREIGN_KEY_VIOLATION', err.message); + } + throw new RetryableError(err.message); + } + }, + async createCheckpoint(user_id: string, client_id: string) { + const transaction = pool.transaction(); + try { + await transaction.begin(); + + const statement = ` + MERGE INTO checkpoints AS t + USING (VALUES (@user_id, @client_id, @checkpoint)) AS source (user_id, client_id, checkpoint) + ON t.user_id = source.user_id AND t.client_id = source.client_id + WHEN MATCHED THEN + UPDATE SET checkpoint = t.checkpoint + 1 + WHEN NOT MATCHED THEN + INSERT (user_id, client_id, checkpoint) + VALUES (source.user_id, source.client_id, source.checkpoint) + OUTPUT INSERTED.checkpoint; + `; + const request = transaction.request(); + request.input('user_id', user_id); + request.input('client_id', client_id); + request.input('checkpoint', 1); + const response = await request.query(statement); + + await transaction.commit(); + return response.recordset[0].checkpoint; + } catch (e) { + await transaction.rollback(); + throw e; + } + } + }; + return persister; +}; diff --git a/backend/src/persistance/mysql/mysql-persistance.ts b/backend/src/persistance/mysql/mysql-persistance.ts new file mode 100644 index 0000000..45d5100 --- /dev/null +++ b/backend/src/persistance/mysql/mysql-persistance.ts @@ -0,0 +1,120 @@ +import mysql from 'mysql2/promise'; +import type { Persister, CrudEntry } from '../../types.js'; +import { RetryableError, FatalOperationError } from '../../errors.js'; +import type { RowDataPacket } from 'mysql2/promise'; +import type { EntryMapper } from '../../mapping/types.js'; +import { defaultMapper } from '../../mapping/default.js'; + +function escapeIdentifier(identifier: string): string { + return `\`${identifier.replace(/`/g, '``').replace(/\./g, '`.`')}\``; +} + +export const createMySQLPersister = (uri: string, mapper: EntryMapper = defaultMapper): Persister => { + console.debug('Using MySQL Persister'); + + const pool = mysql.createPool(uri); + + const persister: Persister = { + async createCheckpoint(user_id: string, client_id: string) { + const connection = await pool.getConnection(); + try { + await connection.beginTransaction(); + await connection.query( + ` + INSERT INTO checkpoints + (user_id, client_id, checkpoint) + VALUES (?, ?, 1) + ON DUPLICATE KEY UPDATE + checkpoint = checkpoint + 1; + `, + [user_id, client_id] + ); + const [rows] = await connection.query( + ` + SELECT checkpoint FROM checkpoints WHERE user_id = ? AND client_id = ?; + `, + [user_id, client_id] + ); + + await connection.commit(); + const checkpoint: bigint = rows[0].checkpoint; + return checkpoint; + } catch (ex) { + await connection.rollback(); + throw ex; + } finally { + connection.release(); + } + }, + updateBatch: async (batch: CrudEntry[]) => { + const connection = await pool.getConnection(); + try { + await connection.beginTransaction(); + + for (const op of batch) { + const mapped = mapper(op); + if (mapped === null) continue; + + const table = escapeIdentifier(mapped.table); + + if (mapped.op === 'PUT') { + const with_id = { ...mapped.data, id: mapped.id }; + + const columnsEscaped = Object.keys(with_id).map(escapeIdentifier); + const columnsJoined = columnsEscaped.join(', '); + + const updateClauses: string[] = []; + + for (const key of Object.keys(mapped.data)) { + if (key === 'id') continue; + updateClauses.push(`${escapeIdentifier(key)} = VALUES(${escapeIdentifier(key)})`); + } + + const updateClause = updateClauses.length > 0 ? `ON DUPLICATE KEY UPDATE ${updateClauses.join(', ')}` : ``; + + const statement = ` + INSERT INTO ${table} (${columnsJoined}) + VALUES (${Object.keys(with_id) + .map(() => '?') + .join(', ')}) + ${updateClause}`; + + await connection.execute(statement, Object.values(with_id)); + } else if (mapped.op === 'PATCH') { + const updateClauses: string[] = []; + + for (const key of Object.keys(mapped.data)) { + if (key === 'id') continue; + updateClauses.push(`${escapeIdentifier(key)} = ?`); + } + + const statement = ` + UPDATE ${table} + SET ${updateClauses.join(', ')} + WHERE id = ?`; + + const values = [...Object.values(mapped.data), mapped.id]; + await connection.execute(statement, values); + } else if (mapped.op === 'DELETE') { + const statement = `DELETE FROM ${table} WHERE id = ?`; + await connection.execute(statement, [mapped.id]); + } + } + await connection.commit(); + } catch (e) { + await connection.rollback(); + const err = e as Error & { errno?: number }; + const errno = err.errno ?? 0; + if (errno === 1062) { + throw new FatalOperationError('UNIQUE_VIOLATION', err.message); + } else if (errno === 1452) { + throw new FatalOperationError('FOREIGN_KEY_VIOLATION', err.message); + } + throw new RetryableError(err.message); + } finally { + connection.release(); + } + } + }; + return persister; +}; diff --git a/backend/src/persistance/persister-factories.ts b/backend/src/persistance/persister-factories.ts new file mode 100644 index 0000000..a9cb125 --- /dev/null +++ b/backend/src/persistance/persister-factories.ts @@ -0,0 +1,12 @@ +import { createMongoPersister } from './mongo/mongo-persistance.js'; +import { createMySQLPersister } from './mysql/mysql-persistance.js'; +import { createPostgresPersister } from './postgres/postgres-persistance.js'; +import { createMSSQLPersister } from './mssql/mssql-persistance.js'; +import type { PersisterFactory } from '../types.js'; + +export const factories: Record = { + mongodb: createMongoPersister, + postgres: createPostgresPersister, + mysql: createMySQLPersister, + mssql: createMSSQLPersister +}; diff --git a/backend/src/persistance/postgres/postgres-persistance.ts b/backend/src/persistance/postgres/postgres-persistance.ts new file mode 100644 index 0000000..18f8cb8 --- /dev/null +++ b/backend/src/persistance/postgres/postgres-persistance.ts @@ -0,0 +1,137 @@ +import { URL } from 'url'; +import PG from 'pg'; +import type { Persister, CrudEntry } from '../../types.js'; +import { RetryableError, FatalOperationError } from '../../errors.js'; +import type { EntryMapper } from '../../mapping/types.js'; +import { defaultMapper } from '../../mapping/default.js'; + +const { Pool } = PG; + +function escapeIdentifier(identifier: string): string { + return `"${identifier.replace(/"/g, '""').replace(/\./g, '"."')}"`; +} + +export const createPostgresPersister = (uri: string, mapper: EntryMapper = defaultMapper): Persister => { + console.debug('Using Postgres Persister'); + + const url = new URL(uri); + + const pool = new Pool({ + host: url.hostname, + database: url.pathname.split('/')[1], + user: url.username, + password: url.password, + port: parseInt(url.port) + }); + + pool.on('error', (err, client) => { + console.error('Pool connection failure to postgres:', err, client); + }); + + const persister: Persister = { + updateBatch: async (batch: CrudEntry[]) => { + const client = await pool.connect(); + try { + await client.query('BEGIN'); + + for (const op of batch) { + const mapped = mapper(op); + if (mapped === null) continue; + + const table = escapeIdentifier(mapped.table); + + if (mapped.op == 'PUT') { + const with_id = { ...mapped.data, id: mapped.id }; + + const columnsEscaped = Object.keys(with_id).map(escapeIdentifier); + const columnsJoined = columnsEscaped.join(', '); + + const updateClauses: string[] = []; + + for (const key of Object.keys(mapped.data)) { + if (key == 'id') { + continue; + } + updateClauses.push(`${escapeIdentifier(key)} = EXCLUDED.${escapeIdentifier(key)}`); + } + + const updateClause = updateClauses.length > 0 ? `DO UPDATE SET ${updateClauses.join(', ')}` : `DO NOTHING`; + + const statement = ` + WITH data_row AS ( + SELECT (json_populate_record(null::${table}, $1::json)).* + ) + INSERT INTO ${table} (${columnsJoined}) + SELECT ${columnsJoined} FROM data_row + ON CONFLICT(id) ${updateClause}`; + + await client.query(statement, [JSON.stringify(with_id)]); + } else if (mapped.op == 'PATCH') { + const with_id = { ...mapped.data, id: mapped.id }; + + const updateClauses: string[] = []; + + for (const key of Object.keys(mapped.data)) { + if (key == 'id') { + continue; + } + updateClauses.push(`${escapeIdentifier(key)} = data_row.${escapeIdentifier(key)}`); + } + + const statement = ` + WITH data_row AS ( + SELECT (json_populate_record(null::${table}, $1::json)).* + ) + UPDATE ${table} + SET ${updateClauses.join(', ')} + FROM data_row + WHERE ${table}.id = data_row.id`; + await client.query(statement, [JSON.stringify(with_id)]); + } else if (mapped.op == 'DELETE') { + const statement = ` + WITH data_row AS ( + SELECT (json_populate_record(null::${table}, $1::json)).* + ) + DELETE FROM ${table} + USING data_row + WHERE ${table}.id = data_row.id`; + await client.query(statement, [JSON.stringify({ id: mapped.id })]); + } + } + await client.query('COMMIT'); + } catch (e) { + await client.query('ROLLBACK'); + const err = e as Error & { code?: string }; + const code = err.code ?? ''; + if (code === '23505') { + throw new FatalOperationError('UNIQUE_VIOLATION', err.message); + } else if (code === '23503') { + throw new FatalOperationError('FOREIGN_KEY_VIOLATION', err.message); + } else if (code.startsWith('42')) { + throw new FatalOperationError('SCHEMA_MISMATCH', err.message); + } + throw new RetryableError(err.message); + } finally { + client.release(); + } + }, + async createCheckpoint(user_id: string, client_id: string) { + const response = await pool.query( + ` + INSERT INTO checkpoints(user_id, client_id, checkpoint) + VALUES + ($1, $2, '1') + ON + CONFLICT (user_id, client_id) + DO + UPDATE SET checkpoint = checkpoints.checkpoint + 1 + RETURNING checkpoint; + `, + [user_id, client_id] + ); + const checkpoint: bigint = response.rows[0].checkpoint; + return checkpoint; + } + }; + return persister; +}; diff --git a/backend/src/types.ts b/backend/src/types.ts new file mode 100644 index 0000000..4652450 --- /dev/null +++ b/backend/src/types.ts @@ -0,0 +1,31 @@ +import type { components, operations } from './generated/api.js'; +import type { EntryMapper } from './mapping/types.js'; + +export type CrudEntry = components['schemas']['CrudEntry']; +export type OpType = CrudEntry['op']; + +/** Extract the JSON request body type for a given operation */ +export type OpBody = operations[Op] extends { + requestBody: { content: { 'application/json': infer B } }; +} + ? B + : never; + +/** Extract the JSON 200 response body type for a given operation */ +export type OpResponse = operations[Op] extends { + responses: { 200: { content: { 'application/json': infer R } } }; +} + ? R + : never; + +/** Extract the query parameters type for a given operation */ +export type OpQuery = operations[Op] extends { parameters: { query?: infer Q } } + ? Q + : never; + +export interface Persister { + updateBatch: (batch: CrudEntry[]) => Promise; + createCheckpoint: (user_id: string, client_id: string) => Promise; +} + +export type PersisterFactory = (uri: string, mapper?: EntryMapper) => Persister | Promise; diff --git a/backend/src/utils/generate-key.ts b/backend/src/utils/generate-key.ts new file mode 100644 index 0000000..bcc78cf --- /dev/null +++ b/backend/src/utils/generate-key.ts @@ -0,0 +1,30 @@ +import * as jose from 'jose'; +import * as crypto from 'crypto'; + +export async function generateKeyPair(): Promise<{ privateBase64: string; publicBase64: string }> { + const alg = 'RS256'; + const kid = `powersync-${crypto.randomBytes(5).toString('hex')}`; + + const { publicKey, privateKey } = await jose.generateKeyPair(alg, { + extractable: true + }); + + const privateJwk = { + ...(await jose.exportJWK(privateKey)), + alg, + kid + }; + const publicJwk = { + ...(await jose.exportJWK(publicKey)), + alg, + kid + }; + + const privateBase64 = Buffer.from(JSON.stringify(privateJwk)).toString('base64'); + const publicBase64 = Buffer.from(JSON.stringify(publicJwk)).toString('base64'); + + return { + privateBase64, + publicBase64 + }; +} diff --git a/backend/tsconfig.json b/backend/tsconfig.json new file mode 100644 index 0000000..f575747 --- /dev/null +++ b/backend/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "Node16", + "moduleResolution": "Node16", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "resolveJsonModule": true, + "isolatedModules": true + }, + "include": ["**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/config/powersync.yaml b/config/powersync.yaml new file mode 100644 index 0000000..36729ab --- /dev/null +++ b/config/powersync.yaml @@ -0,0 +1,25 @@ +telemetry: + disable_telemetry_sharing: false + +replication: + connections: + - type: postgresql + uri: !env PS_DATA_SOURCE_URI + sslmode: disable + +storage: + type: mongodb + uri: !env PS_MONGO_URI + +port: !env PS_PORT + +sync_rules: + path: sync_rules.yaml + +client_auth: + jwks_uri: !env PS_JWKS_URL + audience: ["powersync-dev", "powersync"] + +api: + tokens: + - use_a_better_token_in_production diff --git a/config/sync_rules.yaml b/config/sync_rules.yaml new file mode 100644 index 0000000..558aebe --- /dev/null +++ b/config/sync_rules.yaml @@ -0,0 +1,5 @@ +bucket_definitions: + global: + data: + - SELECT * FROM lists + - SELECT * FROM todos diff --git a/custom.md b/custom.md new file mode 100644 index 0000000..012ab7c --- /dev/null +++ b/custom.md @@ -0,0 +1,44 @@ +So the case is: a Postgres composite type like location_address(street, city, state, zip) + gets synced down to SQLite as a TEXT column containing JSON — e.g., {"street":"1000 S +Colorado Blvd.","city":"Denver","state":"CO","zip":80211}. + +On the write path, that value arrives in op_data as a string (because SQLite stored it as + TEXT). The JSON going into json_populate_record would look like: + +{"address": "{\"street\":\"1000 S Colorado Blvd.\",\"city\":\"Denver\",...}"} + +That's a string value for a composite type column — json_populate_record can't cast that. + It needs the value to be a JSON object, not a JSON string. + +This is exactly where the custom mapper plugs in. You'd JSON.parse it in the mapper so that +by the time it hits json_populate_record, the value is a proper object: + +import { defaultMapper, type EntryMapper } from './mapping/index.js'; + +const customMapper: EntryMapper = (entry) => { + const mapped = defaultMapper(entry); +if (!mapped) return null; + + if (mapped.table === 'locations' && mapped.data.address) { + return { + ...mapped, + data: { + ...mapped.data, + address: JSON.parse(mapped.data.address as string) + } + }; + } + + return mapped; + +}; + +const persister = createPostgresPersister(uri, customMapper); + +Now json_populate_record sees: + +{"address": {"street": "1000 S Colorado Blvd.", "city": "Denver", "state": "CO", "zip": +80211}} + +And casts the object to the location_address composite type. Same pattern would apply for + JSONB columns, arrays, or any case where SQLite stores a complex value as TEXT. diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..b16fefb --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,80 @@ +services: + # PostgreSQL - source database + pg-db: + image: postgres:18 + restart: always + environment: + POSTGRES_USER: postgres + POSTGRES_DB: postgres + POSTGRES_PASSWORD: mypassword + PGPORT: "5432" + volumes: + - pg_data:/var/lib/postgresql + - ./init-scripts:/docker-entrypoint-initdb.d + ports: + - "5432:5432" + command: ["postgres", "-c", "wal_level=logical"] + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres -d postgres"] + interval: 5s + timeout: 5s + retries: 5 + + # MongoDB - PowerSync internal storage + mongo: + image: mongo:7.0 + command: --replSet rs0 --bind_ip_all --quiet + restart: unless-stopped + ports: + - "27017:27017" + volumes: + - mongo_storage:/data/db + + # Initializes the MongoDB replica set + mongo-rs-init: + image: mongo:7.0 + depends_on: + - mongo + restart: on-failure + entrypoint: + - bash + - -c + - 'mongosh --host mongo:27017 --eval ''try{rs.status().ok && quit(0)} catch {} rs.initiate({_id: "rs0", version: 1, members: [{ _id: 0, host : "mongo:27017" }]})''' + + # PowerSync service + powersync: + image: journeyapps/powersync-service:latest + restart: unless-stopped + command: ["start", "-r", "unified"] + depends_on: + mongo-rs-init: + condition: service_completed_successfully + pg-db: + condition: service_healthy + volumes: + - ./config:/config + environment: + POWERSYNC_CONFIG_PATH: /config/powersync.yaml + NODE_OPTIONS: --max-old-space-size=1000 + PS_DATA_SOURCE_URI: postgres://postgres:mypassword@pg-db:5432/postgres + PS_MONGO_URI: mongodb://mongo:27017/powersync_demo + # host.docker.internal lets the container reach the backend running on the host + PS_JWKS_URL: http://host.docker.internal:6060/api/auth/keys + PS_PORT: "8080" + healthcheck: + test: + [ + "CMD", + "node", + "-e", + "fetch('http://localhost:8080/probes/liveness').then(r => r.ok ? process.exit(0) : process.exit(1)).catch(() => process.exit(1))" + ] + interval: 5s + timeout: 1s + retries: 15 + ports: + - "8080:8080" + +volumes: + pg_data: + mongo_storage: diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/frontend/.env.template b/frontend/.env.template new file mode 100644 index 0000000..74b491b --- /dev/null +++ b/frontend/.env.template @@ -0,0 +1,5 @@ +# Copy this template: `cp .env.local.template .env.local` +# Edit .env.local and enter your project details. +VITE_BACKEND_URL=http://localhost:6060 +VITE_POWERSYNC_URL=http://localhost:8080 +VITE_CHECKPOINT_MODE=managed diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..11715cf --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,48 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ +dist + +# production +/build +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# ide +.idea +.fleet +.vscode + +# PWA +**/public/workbox-*.js +**/public/sw.js +**/public/swe-worker-* +**/public/worker-*.js +**/public/fallback-*.js diff --git a/frontend/.nvmrc b/frontend/.nvmrc new file mode 100644 index 0000000..c946e1d --- /dev/null +++ b/frontend/.nvmrc @@ -0,0 +1 @@ +v20.9.0 \ No newline at end of file diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 0000000..85bab2c --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,9 @@ +{ + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "jsxBracketSameLine": true, + "useTabs": false, + "printWidth": 120, + "trailingComma": "none" +} diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..3369d32 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,28 @@ +# Use Node.js 20 Docker image as base +FROM node:20 + +ARG VITE_POWERSYNC_URL +ARG VITE_BACKEND_URL +ARG VITE_CHECKPOINT_MODE + + +# Set the working directory inside the container +WORKDIR /app + +# Copy the package.json and package-lock.json files to the container +COPY package*.json ./ +COPY pnpm-lock*.yaml ./ + +RUN npm install -g pnpm@9 + +# Install dependencies +RUN pnpm install --frozen-lockfile + +# Copy the rest of the demo launcher code to the container +COPY / ./ + +# Build TypeScript code +RUN pnpm run build + +# Command to run the application +CMD ["pnpm", "preview", "--host"] \ No newline at end of file diff --git a/frontend/LICENSE b/frontend/LICENSE new file mode 100644 index 0000000..1625c17 --- /dev/null +++ b/frontend/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. \ No newline at end of file diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..c9a42b4 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,7 @@ +# PowerSync Self hosted demo app + +This is a small demonstration for connecting to a self hosted PowerSync instance. Changes made to the Postgres server should be synced to clients. + +## Authentication + +This essentially uses anonymous authentication. A random user ID is generated and stored in local storage. The backend returns a valid token which is not linked to a specific user. All data is synced to all users. diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..ae49e6f --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,53 @@ +{ + "name": "@powersync/react-custom-auth-todolist", + "version": "0.2.3", + "private": true, + "scripts": { + "generate": "openapi-typescript ../openapi.yaml -o src/generated/api.d.ts", + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview", + "start": "pnpm build && pnpm preview" + }, + "dependencies": { + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.5", + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@journeyapps/wa-sqlite": "^1.2.0", + "@mui/icons-material": "^5.15.15", + "@mui/material": "^5.15.12", + "@mui/x-data-grid": "^6.19.6", + "@powersync/react": "^1.5.1", + "@powersync/web": "^1.12.1", + "@supabase/supabase-js": "^2.39.7", + "js-logger": "^1.6.1", + "lodash": "^4.17.21", + "openapi-fetch": "^0.17.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.22.3", + "uuid": "^9.0.1" + }, + "devDependencies": { + "@types/lodash": "^4.14.202", + "@types/node": "^20.11.25", + "@types/react": "^18.2.64", + "@types/react-dom": "^18.2.21", + "@types/uuid": "^9.0.8", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.18", + "babel-loader": "^9.1.3", + "openapi-typescript": "^7.13.0", + "typescript": "^5.4.2", + "vite": "^5.1.5", + "vite-plugin-pwa": "^0.19.2", + "vite-plugin-top-level-await": "^1.4.1", + "vite-plugin-wasm": "^3.3.0" + }, + "pnpm": { + "overrides": { + "uuid": "^9.0.0" + } + }, + "packageManager": "pnpm@9.12.3+sha512.cce0f9de9c5a7c95bef944169cc5dfe8741abfb145078c0d508b868056848a87c81e626246cb60967cbd7fd29a6c062ef73ff840d96b3c86c40ac92cf4a813ee" +} diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml new file mode 100644 index 0000000..f58ca93 --- /dev/null +++ b/frontend/pnpm-lock.yaml @@ -0,0 +1,5761 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +overrides: + uuid: ^9.0.0 + +importers: + + .: + dependencies: + '@emotion/react': + specifier: ^11.11.4 + version: 11.13.3(@types/react@18.3.7)(react@18.3.1) + '@emotion/styled': + specifier: ^11.11.5 + version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1) + '@esbuild-plugins/node-globals-polyfill': + specifier: ^0.2.3 + version: 0.2.3(esbuild@0.21.5) + '@journeyapps/wa-sqlite': + specifier: ^1.2.0 + version: 1.2.0 + '@mui/icons-material': + specifier: ^5.15.15 + version: 5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.7)(react@18.3.1) + '@mui/material': + specifier: ^5.15.12 + version: 5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/x-data-grid': + specifier: ^6.19.6 + version: 6.20.4(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@powersync/react': + specifier: ^1.5.1 + version: 1.5.1(@powersync/common@1.21.0)(react@18.3.1) + '@powersync/web': + specifier: ^1.12.1 + version: 1.12.3(@journeyapps/wa-sqlite@1.2.0)(@powersync/common@1.21.0) + '@supabase/supabase-js': + specifier: ^2.39.7 + version: 2.45.4 + js-logger: + specifier: ^1.6.1 + version: 1.6.1 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + openapi-fetch: + specifier: ^0.17.0 + version: 0.17.0 + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) + react-router-dom: + specifier: ^6.22.3 + version: 6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + uuid: + specifier: ^9.0.0 + version: 9.0.1 + devDependencies: + '@types/lodash': + specifier: ^4.14.202 + version: 4.17.7 + '@types/node': + specifier: ^20.11.25 + version: 20.16.5 + '@types/react': + specifier: ^18.2.64 + version: 18.3.7 + '@types/react-dom': + specifier: ^18.2.21 + version: 18.3.0 + '@types/uuid': + specifier: ^9.0.8 + version: 9.0.8 + '@vitejs/plugin-react': + specifier: ^4.2.1 + version: 4.3.1(vite@5.4.6(@types/node@20.16.5)(terser@5.33.0)) + autoprefixer: + specifier: ^10.4.18 + version: 10.4.20(postcss@8.4.47) + babel-loader: + specifier: ^9.1.3 + version: 9.2.1(@babel/core@7.25.2)(webpack@5.94.0(esbuild@0.21.5)) + openapi-typescript: + specifier: ^7.13.0 + version: 7.13.0(typescript@5.6.2) + typescript: + specifier: ^5.4.2 + version: 5.6.2 + vite: + specifier: ^5.1.5 + version: 5.4.6(@types/node@20.16.5)(terser@5.33.0) + vite-plugin-pwa: + specifier: ^0.19.2 + version: 0.19.8(vite@5.4.6(@types/node@20.16.5)(terser@5.33.0))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0) + vite-plugin-top-level-await: + specifier: ^1.4.1 + version: 1.4.4(rollup@2.79.1)(vite@5.4.6(@types/node@20.16.5)(terser@5.33.0)) + vite-plugin-wasm: + specifier: ^3.3.0 + version: 3.3.0(vite@5.4.6(@types/node@20.16.5)(terser@5.33.0)) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@apideck/better-ajv-errors@0.3.6': + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.25.4': + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.25.2': + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.25.6': + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.24.7': + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.2': + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.25.4': + resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.25.2': + resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.2': + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.24.7': + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.25.0': + resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.25.0': + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.25.0': + resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.25.6': + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3': + resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0': + resolution: {integrity: sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0': + resolution: {integrity: sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': + resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0': + resolution: {integrity: sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-dynamic-import@7.8.3': + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-export-namespace-from@7.8.3': + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.25.6': + resolution: {integrity: sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.25.6': + resolution: {integrity: sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.24.7': + resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.25.4': + resolution: {integrity: sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.24.7': + resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.24.7': + resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.25.0': + resolution: {integrity: sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.25.4': + resolution: {integrity: sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.24.7': + resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.25.4': + resolution: {integrity: sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.24.7': + resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.24.8': + resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.24.7': + resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.24.7': + resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0': + resolution: {integrity: sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.24.7': + resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.24.7': + resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.24.7': + resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.24.7': + resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.25.1': + resolution: {integrity: sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.24.7': + resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.25.2': + resolution: {integrity: sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.24.7': + resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.24.7': + resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.24.7': + resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.24.8': + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.25.0': + resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.24.7': + resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': + resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.24.7': + resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': + resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.24.7': + resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.24.7': + resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.24.7': + resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.24.7': + resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.24.8': + resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.24.7': + resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.25.4': + resolution: {integrity: sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.24.7': + resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.24.7': + resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-self@7.24.7': + resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.24.7': + resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.24.7': + resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-reserved-words@7.24.7': + resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.24.7': + resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.24.7': + resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.24.7': + resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.24.7': + resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.24.8': + resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.24.7': + resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.24.7': + resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.24.7': + resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.25.4': + resolution: {integrity: sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.25.4': + resolution: {integrity: sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/regjsgen@0.8.0': + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.6': + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + engines: {node: '>=6.9.0'} + + '@emotion/babel-plugin@11.12.0': + resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} + + '@emotion/cache@11.13.1': + resolution: {integrity: sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/is-prop-valid@1.3.0': + resolution: {integrity: sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.13.3': + resolution: {integrity: sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.1': + resolution: {integrity: sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/styled@11.13.0': + resolution: {integrity: sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + + '@emotion/use-insertion-effect-with-fallbacks@1.1.0': + resolution: {integrity: sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.0': + resolution: {integrity: sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + + '@esbuild-plugins/node-globals-polyfill@0.2.3': + resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} + peerDependencies: + esbuild: '*' + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@journeyapps/wa-sqlite@1.2.0': + resolution: {integrity: sha512-CL2oTvpr3y+yUExDCgh/MDi8NIpHwMNQ4ywWvpqp/9iErFWVIiKzDRdKbM+82DLceOY2yQJlV/hjejnOMKkgwg==} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@mui/core-downloads-tracker@5.16.7': + resolution: {integrity: sha512-RtsCt4Geed2/v74sbihWzzRs+HsIQCfclHeORh5Ynu2fS4icIKozcSubwuG7vtzq2uW3fOR1zITSP84TNt2GoQ==} + + '@mui/icons-material@5.16.7': + resolution: {integrity: sha512-UrGwDJCXEszbDI7yV047BYU5A28eGJ79keTCP4cc74WyncuVrnurlmIRxaHL8YK+LI1Kzq+/JM52IAkNnv4u+Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@mui/material': ^5.0.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/material@5.16.7': + resolution: {integrity: sha512-cwwVQxBhK60OIOqZOVLFt55t01zmarKJiJUWbk0+8s/Ix5IaUzAShqlJchxsIQ4mSrWqgcKCCXKtIlG5H+/Jmg==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + + '@mui/private-theming@5.16.6': + resolution: {integrity: sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/styled-engine@5.16.6': + resolution: {integrity: sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + + '@mui/system@5.16.7': + resolution: {integrity: sha512-Jncvs/r/d/itkxh7O7opOunTqbbSSzMTHzZkNLM+FjAOg+cYAZHrPDlYe1ZGKUYORwwb2XexlWnpZp0kZ4AHuA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + + '@mui/types@7.2.16': + resolution: {integrity: sha512-qI8TV3M7ShITEEc8Ih15A2vLzZGLhD+/UPNwck/hcls2gwg7dyRjNGXcQYHKLB5Q7PuTRfrTkAoPa2VV1s67Ag==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/utils@5.16.6': + resolution: {integrity: sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/x-data-grid@6.20.4': + resolution: {integrity: sha512-I0JhinVV4e25hD2dB+R6biPBtpGeFrXf8RwlMPQbr9gUggPmPmNtWKo8Kk2PtBBMlGtdMAgHWe7PqhmucUxU1w==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@mui/material': ^5.4.1 + '@mui/system': ^5.4.1 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@powersync/common@1.21.0': + resolution: {integrity: sha512-G77WGytQb3JwqE9vlxcQZwf8w/tBYGJfU99RqJMrD5Tyb4VrCeOrEcmulmL/M7Q+ZYOjpIhpVwQZB+pNocY0jg==} + + '@powersync/react@1.5.1': + resolution: {integrity: sha512-x/uKsNOoDzUjdXgCMMrJmpZQMTEpddk64XDjW684bFsld3fqL0t5t3ULOpAHsm1vl/hKh77Xa9nthLUCXpKSgw==} + peerDependencies: + '@powersync/common': ^1.21.0 + react: '*' + + '@powersync/web@1.12.3': + resolution: {integrity: sha512-uVGsM/hUQhsM3TRfnw0/MqgCIZIw+fslkIiAnWQdrXcNwlha4dGAQL2EuTc8sBuEzdGrJTtXqtdcH0wUo5XZ0A==} + hasBin: true + peerDependencies: + '@journeyapps/wa-sqlite': ^1.2.0 + '@powersync/common': ^1.22.2 + + '@redocly/ajv@8.11.2': + resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} + + '@redocly/config@0.22.0': + resolution: {integrity: sha512-gAy93Ddo01Z3bHuVdPWfCwzgfaYgMdaZPcfL7JZ7hWJoK9V0lXDbigTWkhiPFAaLWzbOJ+kbUQG1+XwIm0KRGQ==} + + '@redocly/openapi-core@1.34.11': + resolution: {integrity: sha512-V09ayfnb5GyysmvARbt+voFZAjGcf7hSYxOYxSkCc4fbH/DTfq5YWoec8cflvmHHqyIFbqvmGKmYFzqhr9zxDg==} + engines: {node: '>=18.17.0', npm: '>=9.5.0'} + + '@remix-run/router@1.19.2': + resolution: {integrity: sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==} + engines: {node: '>=14.0.0'} + + '@rollup/plugin-babel@5.3.1': + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + + '@rollup/plugin-node-resolve@15.2.3': + resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-replace@2.4.2': + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + + '@rollup/plugin-terser@0.4.4': + resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-virtual@3.0.2': + resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.21.3': + resolution: {integrity: sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.21.3': + resolution: {integrity: sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.21.3': + resolution: {integrity: sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.21.3': + resolution: {integrity: sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.21.3': + resolution: {integrity: sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.21.3': + resolution: {integrity: sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.21.3': + resolution: {integrity: sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.21.3': + resolution: {integrity: sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': + resolution: {integrity: sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.21.3': + resolution: {integrity: sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.21.3': + resolution: {integrity: sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.21.3': + resolution: {integrity: sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.21.3': + resolution: {integrity: sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.21.3': + resolution: {integrity: sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.21.3': + resolution: {integrity: sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.21.3': + resolution: {integrity: sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==} + cpu: [x64] + os: [win32] + + '@supabase/auth-js@2.65.0': + resolution: {integrity: sha512-+wboHfZufAE2Y612OsKeVP4rVOeGZzzMLD/Ac3HrTQkkY4qXNjI6Af9gtmxwccE5nFvTiF114FEbIQ1hRq5uUw==} + + '@supabase/functions-js@2.4.1': + resolution: {integrity: sha512-8sZ2ibwHlf+WkHDUZJUXqqmPvWQ3UHN0W30behOJngVh/qHHekhJLCFbh0AjkE9/FqqXtf9eoVvmYgfCLk5tNA==} + + '@supabase/node-fetch@2.6.15': + resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} + engines: {node: 4.x || >=6.0.0} + + '@supabase/postgrest-js@1.16.1': + resolution: {integrity: sha512-EOSEZFm5pPuCPGCmLF1VOCS78DfkSz600PBuvBND/IZmMciJ1pmsS3ss6TkB6UkuvTybYiBh7gKOYyxoEO3USA==} + + '@supabase/realtime-js@2.10.2': + resolution: {integrity: sha512-qyCQaNg90HmJstsvr2aJNxK2zgoKh9ZZA8oqb7UT2LCh3mj9zpa3Iwu167AuyNxsxrUE8eEJ2yH6wLCij4EApA==} + + '@supabase/storage-js@2.7.0': + resolution: {integrity: sha512-iZenEdO6Mx9iTR6T7wC7sk6KKsoDPLq8rdu5VRy7+JiT1i8fnqfcOr6mfF2Eaqky9VQzhP8zZKQYjzozB65Rig==} + + '@supabase/supabase-js@2.45.4': + resolution: {integrity: sha512-E5p8/zOLaQ3a462MZnmnz03CrduA5ySH9hZyL03Y+QZLIOO4/Gs8Rdy4ZCKDHsN7x0xdanVEWWFN3pJFQr9/hg==} + + '@surma/rollup-plugin-off-main-thread@2.2.3': + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + + '@swc/core-darwin-arm64@1.7.26': + resolution: {integrity: sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.7.26': + resolution: {integrity: sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.7.26': + resolution: {integrity: sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.7.26': + resolution: {integrity: sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.7.26': + resolution: {integrity: sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.7.26': + resolution: {integrity: sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.7.26': + resolution: {integrity: sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.7.26': + resolution: {integrity: sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.7.26': + resolution: {integrity: sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.7.26': + resolution: {integrity: sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.7.26': + resolution: {integrity: sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/types@0.1.12': + resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/lodash@4.17.7': + resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} + + '@types/node@20.16.5': + resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/phoenix@1.6.5': + resolution: {integrity: sha512-xegpDuR+z0UqG9fwHqNoy3rI7JDlvaPh2TY47Fl80oq6g+hXT+c/LEuE43X48clZ6lOfANl5WrPur9fYO1RJ/w==} + + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + + '@types/react-dom@18.3.0': + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + + '@types/react-transition-group@4.4.11': + resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} + + '@types/react@18.3.7': + resolution: {integrity: sha512-KUnDCJF5+AiZd8owLIeVHqmW9yM4sqmDVf2JRJiBMFkGvkoZ4/WyV2lL4zVsoinmRS/W3FeEdZLEWFRofnT2FQ==} + + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + + '@types/ws@8.5.12': + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + + '@vitejs/plugin-react@4.3.1': + resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + + '@webassemblyjs/ast@1.12.1': + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + + '@webassemblyjs/helper-buffer@1.12.1': + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + + '@webassemblyjs/helper-wasm-section@1.12.1': + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + + '@webassemblyjs/wasm-edit@1.12.1': + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + + '@webassemblyjs/wasm-gen@1.12.1': + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + + '@webassemblyjs/wasm-opt@1.12.1': + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + + '@webassemblyjs/wasm-parser@1.12.1': + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + + '@webassemblyjs/wast-printer@1.12.1': + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + async-mutex@0.4.1: + resolution: {integrity: sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + babel-loader@9.2.1: + resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + '@babel/core': ^7.12.0 + webpack: '>=5' + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + babel-plugin-polyfill-corejs2@0.4.11: + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.2: + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bson@6.8.0: + resolution: {integrity: sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==} + engines: {node: '>=16.20.1'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + caniuse-lite@1.0.30001667: + resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + + comlink@4.4.1: + resolution: {integrity: sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + core-js-compat@3.38.1: + resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.25: + resolution: {integrity: sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g==} + + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-cache-dir@4.0.0: + resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} + engines: {node: '>=14.16'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} + engines: {node: '>=18'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + js-levenshtein@1.1.6: + resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} + engines: {node: '>=0.10.0'} + + js-logger@1.6.1: + resolution: {integrity: sha512-yTgMCPXVjhmg28CuUH8CKjU+cIKL/G+zTu4Fn4lQxs8mRFH/03QTNvEFngcxfg/gRDiQAOoyCKmMTOm9ayOzXA==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} + engines: {node: '>=10'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + openapi-fetch@0.17.0: + resolution: {integrity: sha512-PsbZR1wAPcG91eEthKhN+Zn92FMHxv+/faECIwjXdxfTODGSGegYv0sc1Olz+HYPvKOuoXfp+0pA2XVt2cI0Ig==} + + openapi-typescript-helpers@0.1.0: + resolution: {integrity: sha512-OKTGPthhivLw/fHz6c3OPtg72vi86qaMlqbJuVJ23qOvQ+53uw1n7HdmkJFibloF7QEjDrDkzJiOJuockM/ljw==} + + openapi-typescript@7.13.0: + resolution: {integrity: sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ==} + hasBin: true + peerDependencies: + typescript: ^5.x + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pkg-dir@7.0.0: + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + + react-router-dom@6.26.2: + resolution: {integrity: sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + react-router@6.26.2: + resolution: {integrity: sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + + regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + reselect@4.1.8: + resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + + rollup@4.21.3: + resolution: {integrity: sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + smob@1.5.0: + resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + + strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + + terser-webpack-plugin@5.3.10: + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.33.0: + resolution: {integrity: sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==} + engines: {node: '>=10'} + hasBin: true + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + engines: {node: '>=14.17'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js-replace@1.0.1: + resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + vite-plugin-pwa@0.19.8: + resolution: {integrity: sha512-e1oK0dfhzhDhY3VBuML6c0h8Xfx6EkOVYqolj7g+u8eRfdauZe5RLteCIA/c5gH0CBQ0CNFAuv/AFTx4Z7IXTw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@vite-pwa/assets-generator': ^0.2.4 + vite: ^3.1.0 || ^4.0.0 || ^5.0.0 + workbox-build: ^7.0.0 + workbox-window: ^7.0.0 + peerDependenciesMeta: + '@vite-pwa/assets-generator': + optional: true + + vite-plugin-top-level-await@1.4.4: + resolution: {integrity: sha512-QyxQbvcMkgt+kDb12m2P8Ed35Sp6nXP+l8ptGrnHV9zgYDUpraO0CPdlqLSeBqvY2DToR52nutDG7mIHuysdiw==} + peerDependencies: + vite: '>=2.8' + + vite-plugin-wasm@3.3.0: + resolution: {integrity: sha512-tVhz6w+W9MVsOCHzxo6SSMSswCeIw4HTrXEi6qL3IRzATl83jl09JVO1djBqPSwfjgnpVHNLYcaMbaDX5WB/pg==} + peerDependencies: + vite: ^2 || ^3 || ^4 || ^5 + + vite@5.4.6: + resolution: {integrity: sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.94.0: + resolution: {integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + workbox-background-sync@7.1.0: + resolution: {integrity: sha512-rMbgrzueVWDFcEq1610YyDW71z0oAXLfdRHRQcKw4SGihkfOK0JUEvqWHFwA6rJ+6TClnMIn7KQI5PNN1XQXwQ==} + + workbox-broadcast-update@7.1.0: + resolution: {integrity: sha512-O36hIfhjej/c5ar95pO67k1GQw0/bw5tKP7CERNgK+JdxBANQhDmIuOXZTNvwb2IHBx9hj2kxvcDyRIh5nzOgQ==} + + workbox-build@7.1.1: + resolution: {integrity: sha512-WdkVdC70VMpf5NBCtNbiwdSZeKVuhTEd5PV3mAwpTQCGAB5XbOny1P9egEgNdetv4srAMmMKjvBk4RD58LpooA==} + engines: {node: '>=16.0.0'} + + workbox-cacheable-response@7.1.0: + resolution: {integrity: sha512-iwsLBll8Hvua3xCuBB9h92+/e0wdsmSVgR2ZlvcfjepZWwhd3osumQB3x9o7flj+FehtWM2VHbZn8UJeBXXo6Q==} + + workbox-core@7.1.0: + resolution: {integrity: sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q==} + + workbox-expiration@7.1.0: + resolution: {integrity: sha512-m5DcMY+A63rJlPTbbBNtpJ20i3enkyOtSgYfv/l8h+D6YbbNiA0zKEkCUaMsdDlxggla1oOfRkyqTvl5Ni5KQQ==} + + workbox-google-analytics@7.1.0: + resolution: {integrity: sha512-FvE53kBQHfVTcZyczeBVRexhh7JTkyQ8HAvbVY6mXd2n2A7Oyz/9fIwnY406ZcDhvE4NFfKGjW56N4gBiqkrew==} + + workbox-navigation-preload@7.1.0: + resolution: {integrity: sha512-4wyAbo0vNI/X0uWNJhCMKxnPanNyhybsReMGN9QUpaePLTiDpKxPqFxl4oUmBNddPwIXug01eTSLVIFXimRG/A==} + + workbox-precaching@7.1.0: + resolution: {integrity: sha512-LyxzQts+UEpgtmfnolo0hHdNjoB7EoRWcF7EDslt+lQGd0lW4iTvvSe3v5JiIckQSB5KTW5xiCqjFviRKPj1zA==} + + workbox-range-requests@7.1.0: + resolution: {integrity: sha512-m7+O4EHolNs5yb/79CrnwPR/g/PRzMFYEdo01LqwixVnc/sbzNSvKz0d04OE3aMRel1CwAAZQheRsqGDwATgPQ==} + + workbox-recipes@7.1.0: + resolution: {integrity: sha512-NRrk4ycFN9BHXJB6WrKiRX3W3w75YNrNrzSX9cEZgFB5ubeGoO8s/SDmOYVrFYp9HMw6sh1Pm3eAY/1gVS8YLg==} + + workbox-routing@7.1.0: + resolution: {integrity: sha512-oOYk+kLriUY2QyHkIilxUlVcFqwduLJB7oRZIENbqPGeBP/3TWHYNNdmGNhz1dvKuw7aqvJ7CQxn27/jprlTdg==} + + workbox-strategies@7.1.0: + resolution: {integrity: sha512-/UracPiGhUNehGjRm/tLUQ+9PtWmCbRufWtV0tNrALuf+HZ4F7cmObSEK+E4/Bx1p8Syx2tM+pkIrvtyetdlew==} + + workbox-streams@7.1.0: + resolution: {integrity: sha512-WyHAVxRXBMfysM8ORwiZnI98wvGWTVAq/lOyBjf00pXFvG0mNaVz4Ji+u+fKa/mf1i2SnTfikoYKto4ihHeS6w==} + + workbox-sw@7.1.0: + resolution: {integrity: sha512-Hml/9+/njUXBglv3dtZ9WBKHI235AQJyLBV1G7EFmh4/mUdSQuXui80RtjDeVRrXnm/6QWgRUEHG3/YBVbxtsA==} + + workbox-window@7.1.0: + resolution: {integrity: sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': + dependencies: + ajv: 8.17.1 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.25.4': {} + + '@babel/core@7.25.2': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + convert-source-map: 2.0.0 + debug: 4.3.7(supports-color@10.2.2) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.25.6': + dependencies: + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-annotate-as-pure@7.24.7': + dependencies: + '@babel/types': 7.25.6 + + '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-compilation-targets@7.25.2': + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/traverse': 7.25.6 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + regexpu-core: 5.3.2 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + debug: 4.3.7(supports-color@10.2.2) + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.24.8': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.24.7': + dependencies: + '@babel/types': 7.25.6 + + '@babel/helper-plugin-utils@7.24.8': {} + + '@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-wrap-function': 7.25.0 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/helper-validator-identifier@7.28.5': {} + + '@babel/helper-validator-option@7.24.8': {} + + '@babel/helper-wrap-function@7.25.0': + dependencies: + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.25.6': + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 + + '@babel/parser@7.25.6': + dependencies: + '@babel/types': 7.25.6 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-assertions@7.25.6(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-attributes@7.25.6(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-async-generator-functions@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-class-properties@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/traverse': 7.25.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/template': 7.25.0 + + '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + + '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + + '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.25.1(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + + '@babel/plugin-transform-literals@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + + '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + + '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + + '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) + + '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + + '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-private-methods@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-spread@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-sets-regex@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/preset-env@7.25.4(@babel/core@7.25.2)': + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.3(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-assertions': 7.25.6(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-async-generator-functions': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-class-properties': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-classes': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.25.2) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-modules-systemjs': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-sets-regex': 7.25.4(@babel/core@7.25.2) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) + core-js-compat: 3.38.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/types': 7.25.6 + esutils: 2.0.3 + + '@babel/regjsgen@0.8.0': {} + + '@babel/runtime@7.25.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + + '@babel/traverse@7.25.6': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.7(supports-color@10.2.2) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.25.6': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@emotion/babel-plugin@11.12.0': + dependencies: + '@babel/helper-module-imports': 7.24.7 + '@babel/runtime': 7.25.6 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.1 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.13.1': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.0 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/is-prop-valid@1.3.0': + dependencies: + '@emotion/memoize': 0.9.0 + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@emotion/babel-plugin': 11.12.0 + '@emotion/cache': 11.13.1 + '@emotion/serialize': 1.3.1 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) + '@emotion/utils': 1.4.0 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.7 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.1': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.0 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@emotion/babel-plugin': 11.12.0 + '@emotion/is-prop-valid': 1.3.0 + '@emotion/react': 11.13.3(@types/react@18.3.7)(react@18.3.1) + '@emotion/serialize': 1.3.1 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) + '@emotion/utils': 1.4.0 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.7 + transitivePeerDependencies: + - supports-color + + '@emotion/unitless@0.10.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@emotion/utils@1.4.0': {} + + '@emotion/weak-memoize@0.4.0': {} + + '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.21.5)': + dependencies: + esbuild: 0.21.5 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@journeyapps/wa-sqlite@1.2.0': {} + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@mui/core-downloads-tracker@5.16.7': {} + + '@mui/icons-material@5.16.7(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.7)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.7 + + '@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@mui/core-downloads-tracker': 5.16.7 + '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1) + '@mui/types': 7.2.16(@types/react@18.3.7) + '@mui/utils': 5.16.6(@types/react@18.3.7)(react@18.3.1) + '@popperjs/core': 2.11.8 + '@types/react-transition-group': 4.4.11 + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-is: 18.3.1 + react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + optionalDependencies: + '@emotion/react': 11.13.3(@types/react@18.3.7)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1) + '@types/react': 18.3.7 + + '@mui/private-theming@5.16.6(@types/react@18.3.7)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@mui/utils': 5.16.6(@types/react@18.3.7)(react@18.3.1) + prop-types: 15.8.1 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.7 + + '@mui/styled-engine@5.16.6(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@emotion/cache': 11.13.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.3.1 + optionalDependencies: + '@emotion/react': 11.13.3(@types/react@18.3.7)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1) + + '@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@mui/private-theming': 5.16.6(@types/react@18.3.7)(react@18.3.1) + '@mui/styled-engine': 5.16.6(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(react@18.3.1) + '@mui/types': 7.2.16(@types/react@18.3.7) + '@mui/utils': 5.16.6(@types/react@18.3.7)(react@18.3.1) + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.3.1 + optionalDependencies: + '@emotion/react': 11.13.3(@types/react@18.3.7)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1) + '@types/react': 18.3.7 + + '@mui/types@7.2.16(@types/react@18.3.7)': + optionalDependencies: + '@types/react': 18.3.7 + + '@mui/utils@5.16.6(@types/react@18.3.7)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@mui/types': 7.2.16(@types/react@18.3.7) + '@types/prop-types': 15.7.13 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.3.1 + react-is: 18.3.1 + optionalDependencies: + '@types/react': 18.3.7 + + '@mui/x-data-grid@6.20.4(@mui/material@5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mui/system@5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.6 + '@mui/material': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mui/system': 5.16.7(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1))(@types/react@18.3.7)(react@18.3.1) + '@mui/utils': 5.16.6(@types/react@18.3.7)(react@18.3.1) + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + reselect: 4.1.8 + transitivePeerDependencies: + - '@types/react' + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@popperjs/core@2.11.8': {} + + '@powersync/common@1.21.0': + dependencies: + js-logger: 1.6.1 + + '@powersync/react@1.5.1(@powersync/common@1.21.0)(react@18.3.1)': + dependencies: + '@powersync/common': 1.21.0 + react: 18.3.1 + + '@powersync/web@1.12.3(@journeyapps/wa-sqlite@1.2.0)(@powersync/common@1.21.0)': + dependencies: + '@journeyapps/wa-sqlite': 1.2.0 + '@powersync/common': 1.21.0 + async-mutex: 0.4.1 + bson: 6.8.0 + comlink: 4.4.1 + commander: 12.1.0 + js-logger: 1.6.1 + + '@redocly/ajv@8.11.2': + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js-replace: 1.0.1 + + '@redocly/config@0.22.0': {} + + '@redocly/openapi-core@1.34.11(supports-color@10.2.2)': + dependencies: + '@redocly/ajv': 8.11.2 + '@redocly/config': 0.22.0 + colorette: 1.4.0 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + js-levenshtein: 1.1.6 + js-yaml: 4.1.1 + minimatch: 5.1.9 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - supports-color + + '@remix-run/router@1.19.2': {} + + '@rollup/plugin-babel@5.3.1(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@2.79.1)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + optionalDependencies: + '@types/babel__core': 7.20.5 + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-node-resolve@15.2.3(rollup@2.79.1)': + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@2.79.1) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.8 + optionalDependencies: + rollup: 2.79.1 + + '@rollup/plugin-replace@2.4.2(rollup@2.79.1)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + magic-string: 0.25.9 + rollup: 2.79.1 + + '@rollup/plugin-terser@0.4.4(rollup@2.79.1)': + dependencies: + serialize-javascript: 6.0.2 + smob: 1.5.0 + terser: 5.33.0 + optionalDependencies: + rollup: 2.79.1 + + '@rollup/plugin-virtual@3.0.2(rollup@2.79.1)': + optionalDependencies: + rollup: 2.79.1 + + '@rollup/pluginutils@3.1.0(rollup@2.79.1)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + + '@rollup/pluginutils@5.1.0(rollup@2.79.1)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 2.79.1 + + '@rollup/rollup-android-arm-eabi@4.21.3': + optional: true + + '@rollup/rollup-android-arm64@4.21.3': + optional: true + + '@rollup/rollup-darwin-arm64@4.21.3': + optional: true + + '@rollup/rollup-darwin-x64@4.21.3': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.21.3': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.21.3': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.21.3': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.21.3': + optional: true + + '@rollup/rollup-linux-x64-musl@4.21.3': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.21.3': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.21.3': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.21.3': + optional: true + + '@supabase/auth-js@2.65.0': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/functions-js@2.4.1': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/node-fetch@2.6.15': + dependencies: + whatwg-url: 5.0.0 + + '@supabase/postgrest-js@1.16.1': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/realtime-js@2.10.2': + dependencies: + '@supabase/node-fetch': 2.6.15 + '@types/phoenix': 1.6.5 + '@types/ws': 8.5.12 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@supabase/storage-js@2.7.0': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/supabase-js@2.45.4': + dependencies: + '@supabase/auth-js': 2.65.0 + '@supabase/functions-js': 2.4.1 + '@supabase/node-fetch': 2.6.15 + '@supabase/postgrest-js': 1.16.1 + '@supabase/realtime-js': 2.10.2 + '@supabase/storage-js': 2.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@surma/rollup-plugin-off-main-thread@2.2.3': + dependencies: + ejs: 3.1.10 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.11 + + '@swc/core-darwin-arm64@1.7.26': + optional: true + + '@swc/core-darwin-x64@1.7.26': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.7.26': + optional: true + + '@swc/core-linux-arm64-gnu@1.7.26': + optional: true + + '@swc/core-linux-arm64-musl@1.7.26': + optional: true + + '@swc/core-linux-x64-gnu@1.7.26': + optional: true + + '@swc/core-linux-x64-musl@1.7.26': + optional: true + + '@swc/core-win32-arm64-msvc@1.7.26': + optional: true + + '@swc/core-win32-ia32-msvc@1.7.26': + optional: true + + '@swc/core-win32-x64-msvc@1.7.26': + optional: true + + '@swc/core@1.7.26': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.12 + optionalDependencies: + '@swc/core-darwin-arm64': 1.7.26 + '@swc/core-darwin-x64': 1.7.26 + '@swc/core-linux-arm-gnueabihf': 1.7.26 + '@swc/core-linux-arm64-gnu': 1.7.26 + '@swc/core-linux-arm64-musl': 1.7.26 + '@swc/core-linux-x64-gnu': 1.7.26 + '@swc/core-linux-x64-musl': 1.7.26 + '@swc/core-win32-arm64-msvc': 1.7.26 + '@swc/core-win32-ia32-msvc': 1.7.26 + '@swc/core-win32-x64-msvc': 1.7.26 + + '@swc/counter@0.1.3': {} + + '@swc/types@0.1.12': + dependencies: + '@swc/counter': 0.1.3 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.25.6 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.25.6 + + '@types/estree@0.0.39': {} + + '@types/estree@1.0.5': {} + + '@types/json-schema@7.0.15': {} + + '@types/lodash@4.17.7': {} + + '@types/node@20.16.5': + dependencies: + undici-types: 6.19.8 + + '@types/parse-json@4.0.2': {} + + '@types/phoenix@1.6.5': {} + + '@types/prop-types@15.7.13': {} + + '@types/react-dom@18.3.0': + dependencies: + '@types/react': 18.3.7 + + '@types/react-transition-group@4.4.11': + dependencies: + '@types/react': 18.3.7 + + '@types/react@18.3.7': + dependencies: + '@types/prop-types': 15.7.13 + csstype: 3.1.3 + + '@types/resolve@1.20.2': {} + + '@types/trusted-types@2.0.7': {} + + '@types/uuid@9.0.8': {} + + '@types/ws@8.5.12': + dependencies: + '@types/node': 20.16.5 + + '@vitejs/plugin-react@4.3.1(vite@5.4.6(@types/node@20.16.5)(terser@5.33.0))': + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.4.6(@types/node@20.16.5)(terser@5.33.0) + transitivePeerDependencies: + - supports-color + + '@webassemblyjs/ast@1.12.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} + + '@webassemblyjs/helper-api-error@1.11.6': {} + + '@webassemblyjs/helper-buffer@1.12.1': {} + + '@webassemblyjs/helper-numbers@1.11.6': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} + + '@webassemblyjs/helper-wasm-section@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 + + '@webassemblyjs/ieee754@1.11.6': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.11.6': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.11.6': {} + + '@webassemblyjs/wasm-edit@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 + + '@webassemblyjs/wasm-gen@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + + '@webassemblyjs/wasm-opt@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + + '@webassemblyjs/wasm-parser@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + + '@webassemblyjs/wast-printer@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + acorn-import-attributes@1.9.5(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + agent-base@7.1.4: {} + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-colors@4.1.3: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + async-mutex@0.4.1: + dependencies: + tslib: 2.7.0 + + async@3.2.6: {} + + at-least-node@1.0.0: {} + + autoprefixer@10.4.20(postcss@8.4.47): + dependencies: + browserslist: 4.23.3 + caniuse-lite: 1.0.30001667 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.0 + postcss: 8.4.47 + postcss-value-parser: 4.2.0 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.94.0(esbuild@0.21.5)): + dependencies: + '@babel/core': 7.25.2 + find-cache-dir: 4.0.0 + schema-utils: 4.2.0 + webpack: 5.94.0(esbuild@0.21.5) + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.25.6 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2): + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + core-js-compat: 3.38.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + balanced-match@1.0.2: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.23.3: + dependencies: + caniuse-lite: 1.0.30001667 + electron-to-chromium: 1.5.25 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) + + bson@6.8.0: {} + + buffer-from@1.1.2: {} + + builtin-modules@3.3.0: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001667: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + change-case@5.4.4: {} + + chrome-trace-event@1.0.4: {} + + clsx@2.1.1: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colorette@1.4.0: {} + + comlink@4.4.1: {} + + commander@12.1.0: {} + + commander@2.20.3: {} + + common-path-prefix@3.0.0: {} + + common-tags@1.8.2: {} + + concat-map@0.0.1: {} + + convert-source-map@1.9.0: {} + + convert-source-map@2.0.0: {} + + core-js-compat@3.38.1: + dependencies: + browserslist: 4.23.3 + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + crypto-random-string@2.0.0: {} + + csstype@3.1.3: {} + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + debug@4.3.7(supports-color@10.2.2): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 + + deepmerge@4.3.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.25.6 + csstype: 3.1.3 + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.25: {} + + enhanced-resolve@5.17.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-module-lexer@1.5.4: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + estree-walker@1.0.1: {} + + estree-walker@2.0.2: {} + + esutils@2.0.3: {} + + events@3.3.0: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-uri@3.0.1: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-cache-dir@4.0.0: + dependencies: + common-path-prefix: 3.0.0 + pkg-dir: 7.0.0 + + find-root@1.1.0: {} + + find-up@6.3.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + fraction.js@4.3.7: {} + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + gensync@1.0.0-beta.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-own-enumerable-property-symbols@3.0.2: {} + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@11.12.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + has-bigints@1.0.2: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + https-proxy-agent@7.0.6(supports-color@10.2.2): + dependencies: + agent-base: 7.1.4 + debug: 4.3.7(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + idb@7.1.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + index-to-position@1.2.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + is-arrayish@0.2.1: {} + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + + is-callable@1.2.7: {} + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-module@1.0.0: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-obj@1.0.1: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-regexp@1.0.0: {} + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-stream@2.0.1: {} + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + + isarray@2.0.5: {} + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 20.16.5 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + js-levenshtein@1.1.6: {} + + js-logger@1.6.1: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + jsesc@0.5.0: {} + + jsesc@2.5.2: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-schema@0.4.0: {} + + json5@2.2.3: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonpointer@5.0.1: {} + + leven@3.1.0: {} + + lines-and-columns@1.2.4: {} + + loader-runner@4.3.0: {} + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.debounce@4.0.8: {} + + lodash.sortby@4.7.0: {} + + lodash@4.17.21: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + magic-string@0.25.9: + dependencies: + sourcemap-codec: 1.4.8 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@5.1.9: + dependencies: + brace-expansion: 2.0.1 + + ms@2.1.3: {} + + nanoid@3.3.7: {} + + neo-async@2.6.2: {} + + node-releases@2.0.18: {} + + normalize-range@0.1.2: {} + + object-assign@4.1.1: {} + + object-inspect@1.13.2: {} + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + openapi-fetch@0.17.0: + dependencies: + openapi-typescript-helpers: 0.1.0 + + openapi-typescript-helpers@0.1.0: {} + + openapi-typescript@7.13.0(typescript@5.6.2): + dependencies: + '@redocly/openapi-core': 1.34.11(supports-color@10.2.2) + ansi-colors: 4.1.3 + change-case: 5.4.4 + parse-json: 8.3.0 + supports-color: 10.2.2 + typescript: 5.6.2 + yargs-parser: 21.1.1 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.1.1 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.24.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.29.0 + index-to-position: 1.2.0 + type-fest: 4.41.0 + + path-exists@5.0.0: {} + + path-is-absolute@1.0.1: {} + + path-parse@1.0.7: {} + + path-type@4.0.0: {} + + picocolors@1.1.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + pkg-dir@7.0.0: + dependencies: + find-up: 6.3.0 + + pluralize@8.0.0: {} + + possible-typed-array-names@1.0.0: {} + + postcss-value-parser@4.2.0: {} + + postcss@8.4.47: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.0 + source-map-js: 1.2.1 + + pretty-bytes@5.6.0: {} + + pretty-bytes@6.1.1: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-is@16.13.1: {} + + react-is@18.3.1: {} + + react-refresh@0.14.2: {} + + react-router-dom@6.26.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@remix-run/router': 1.19.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.26.2(react@18.3.1) + + react-router@6.26.2(react@18.3.1): + dependencies: + '@remix-run/router': 1.19.2 + react: 18.3.1 + + react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.6 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regenerator-runtime@0.14.1: {} + + regenerator-transform@0.15.2: + dependencies: + '@babel/runtime': 7.25.6 + + regexp.prototype.flags@1.5.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + regexpu-core@5.3.2: + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsparser@0.9.1: + dependencies: + jsesc: 0.5.0 + + require-from-string@2.0.2: {} + + reselect@4.1.8: {} + + resolve-from@4.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rollup@2.79.1: + optionalDependencies: + fsevents: 2.3.3 + + rollup@4.21.3: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.21.3 + '@rollup/rollup-android-arm64': 4.21.3 + '@rollup/rollup-darwin-arm64': 4.21.3 + '@rollup/rollup-darwin-x64': 4.21.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.3 + '@rollup/rollup-linux-arm-musleabihf': 4.21.3 + '@rollup/rollup-linux-arm64-gnu': 4.21.3 + '@rollup/rollup-linux-arm64-musl': 4.21.3 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.3 + '@rollup/rollup-linux-riscv64-gnu': 4.21.3 + '@rollup/rollup-linux-s390x-gnu': 4.21.3 + '@rollup/rollup-linux-x64-gnu': 4.21.3 + '@rollup/rollup-linux-x64-musl': 4.21.3 + '@rollup/rollup-win32-arm64-msvc': 4.21.3 + '@rollup/rollup-win32-ia32-msvc': 4.21.3 + '@rollup/rollup-win32-x64-msvc': 4.21.3 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + schema-utils@4.2.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + + semver@6.3.1: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + smob@1.5.0: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.5.7: {} + + source-map@0.6.1: {} + + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + sourcemap-codec@1.4.8: {} + + string.prototype.matchall@4.0.11: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + + strip-comments@2.0.1: {} + + stylis@4.2.0: {} + + supports-color@10.2.2: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + tapable@2.2.1: {} + + temp-dir@2.0.0: {} + + tempy@0.6.0: + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + + terser-webpack-plugin@5.3.10(esbuild@0.21.5)(webpack@5.94.0(esbuild@0.21.5)): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.33.0 + webpack: 5.94.0(esbuild@0.21.5) + optionalDependencies: + esbuild: 0.21.5 + + terser@5.33.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 + commander: 2.20.3 + source-map-support: 0.5.21 + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + + tslib@2.7.0: {} + + type-fest@0.16.0: {} + + type-fest@4.41.0: {} + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + + typescript@5.6.2: {} + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + undici-types@6.19.8: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.2.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + + unique-string@2.0.0: + dependencies: + crypto-random-string: 2.0.0 + + universalify@2.0.1: {} + + upath@1.2.0: {} + + update-browserslist-db@1.1.0(browserslist@4.23.3): + dependencies: + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.1.0 + + uri-js-replace@1.0.1: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + uuid@9.0.1: {} + + vite-plugin-pwa@0.19.8(vite@5.4.6(@types/node@20.16.5)(terser@5.33.0))(workbox-build@7.1.1(@types/babel__core@7.20.5))(workbox-window@7.1.0): + dependencies: + debug: 4.3.7(supports-color@10.2.2) + fast-glob: 3.3.2 + pretty-bytes: 6.1.1 + vite: 5.4.6(@types/node@20.16.5)(terser@5.33.0) + workbox-build: 7.1.1(@types/babel__core@7.20.5) + workbox-window: 7.1.0 + transitivePeerDependencies: + - supports-color + + vite-plugin-top-level-await@1.4.4(rollup@2.79.1)(vite@5.4.6(@types/node@20.16.5)(terser@5.33.0)): + dependencies: + '@rollup/plugin-virtual': 3.0.2(rollup@2.79.1) + '@swc/core': 1.7.26 + uuid: 9.0.1 + vite: 5.4.6(@types/node@20.16.5)(terser@5.33.0) + transitivePeerDependencies: + - '@swc/helpers' + - rollup + + vite-plugin-wasm@3.3.0(vite@5.4.6(@types/node@20.16.5)(terser@5.33.0)): + dependencies: + vite: 5.4.6(@types/node@20.16.5)(terser@5.33.0) + + vite@5.4.6(@types/node@20.16.5)(terser@5.33.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.21.3 + optionalDependencies: + '@types/node': 20.16.5 + fsevents: 2.3.3 + terser: 5.33.0 + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + webidl-conversions@3.0.1: {} + + webidl-conversions@4.0.2: {} + + webpack-sources@3.2.3: {} + + webpack@5.94.0(esbuild@0.21.5): + dependencies: + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.12.1 + acorn-import-attributes: 1.9.5(acorn@8.12.1) + browserslist: 4.23.3 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(esbuild@0.21.5)(webpack@5.94.0(esbuild@0.21.5)) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + workbox-background-sync@7.1.0: + dependencies: + idb: 7.1.1 + workbox-core: 7.1.0 + + workbox-broadcast-update@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-build@7.1.1(@types/babel__core@7.20.5): + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) + '@babel/core': 7.25.2 + '@babel/preset-env': 7.25.4(@babel/core@7.25.2) + '@babel/runtime': 7.25.6 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@2.79.1) + '@rollup/plugin-node-resolve': 15.2.3(rollup@2.79.1) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) + '@rollup/plugin-terser': 0.4.4(rollup@2.79.1) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.17.1 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 7.1.0 + workbox-broadcast-update: 7.1.0 + workbox-cacheable-response: 7.1.0 + workbox-core: 7.1.0 + workbox-expiration: 7.1.0 + workbox-google-analytics: 7.1.0 + workbox-navigation-preload: 7.1.0 + workbox-precaching: 7.1.0 + workbox-range-requests: 7.1.0 + workbox-recipes: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + workbox-streams: 7.1.0 + workbox-sw: 7.1.0 + workbox-window: 7.1.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + + workbox-cacheable-response@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-core@7.1.0: {} + + workbox-expiration@7.1.0: + dependencies: + idb: 7.1.1 + workbox-core: 7.1.0 + + workbox-google-analytics@7.1.0: + dependencies: + workbox-background-sync: 7.1.0 + workbox-core: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + + workbox-navigation-preload@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-precaching@7.1.0: + dependencies: + workbox-core: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + + workbox-range-requests@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-recipes@7.1.0: + dependencies: + workbox-cacheable-response: 7.1.0 + workbox-core: 7.1.0 + workbox-expiration: 7.1.0 + workbox-precaching: 7.1.0 + workbox-routing: 7.1.0 + workbox-strategies: 7.1.0 + + workbox-routing@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-strategies@7.1.0: + dependencies: + workbox-core: 7.1.0 + + workbox-streams@7.1.0: + dependencies: + workbox-core: 7.1.0 + workbox-routing: 7.1.0 + + workbox-sw@7.1.0: {} + + workbox-window@7.1.0: + dependencies: + '@types/trusted-types': 2.0.7 + workbox-core: 7.1.0 + + wrappy@1.0.2: {} + + ws@8.18.0: {} + + yallist@3.1.1: {} + + yaml-ast-parser@0.0.43: {} + + yaml@1.10.2: {} + + yargs-parser@21.1.1: {} + + yocto-queue@1.1.1: {} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..918ca54eefddfbddd927a9b0558126afd2fc433f GIT binary patch literal 1576 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

tEs4H$a=ZS)m{ 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 Y!RBn|z+;l5Lg2&pwBxDjlRk0(1K`z}W&i*H literal 0 HcmV?d00001 diff --git a/frontend/public/icons/icon-384x384.png b/frontend/public/icons/icon-384x384.png new file mode 100644 index 0000000000000000000000000000000000000000..af8be4dc69bf0e8c23086265359891438a794add GIT binary patch literal 74557 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 setShowPrompt(false)} + aria-labelledby="alert-dialog-title" + aria-describedby="alert-dialog-description" + PaperProps={{ + component: 'form', + onSubmit: async (event: React.FormEvent) => { + event.preventDefault(); + await createNewTodo(nameInputRef.current!.value); + setShowPrompt(false); + } + }}> + {'Create Todo Item'} + + Enter a description for a new todo item + + + + + + + + + + ); +}; + +export default function TodoEditPage() { + return ( + + }> + + + + ); +} + +namespace S { + export const FloatingActionButton = styled(Fab)` + position: absolute; + bottom: 20px; + right: 20px; + `; +} diff --git a/frontend/src/app/views/todo-lists/page.tsx b/frontend/src/app/views/todo-lists/page.tsx new file mode 100644 index 0000000..f418000 --- /dev/null +++ b/frontend/src/app/views/todo-lists/page.tsx @@ -0,0 +1,89 @@ +import { usePowerSync } from '@powersync/react'; +import AddIcon from '@mui/icons-material/Add'; +import { + Box, + Button, + Dialog, + DialogActions, + DialogContent, + DialogContentText, + DialogTitle, + TextField, + styled +} from '@mui/material'; +import Fab from '@mui/material/Fab'; +import React from 'react'; +import { NavigationPage } from '@/components/navigation/NavigationPage'; +import { TodoListsWidget } from '@/components/widgets/TodoListsWidget'; +import { LISTS_TABLE } from '@/library/powersync/AppSchema'; +import { useConnector } from '@/components/providers/SystemProvider'; + +export default function TodoListsPage() { + const powerSync = usePowerSync(); + const connector = useConnector(); + + const [showPrompt, setShowPrompt] = React.useState(false); + const nameInputRef = React.createRef(); + + const createNewList = async (name: string) => { + const userID = connector?.userId; + if (!userID) { + throw new Error(`Could not create new lists, no userID found`); + } + + const res = await powerSync.execute( + `INSERT INTO ${LISTS_TABLE} (id, created_at, name, owner_id) VALUES (uuid(), datetime(), ?, ?) RETURNING *`, + [name, userID] + ); + + const resultRecord = res.rows?.item(0); + if (!resultRecord) { + throw new Error('Could not create list'); + } + }; + + return ( + + + setShowPrompt(true)}> + + + + + + {/* TODO use a dialog service in future, this is just a simple example app */} + setShowPrompt(false)} + PaperProps={{ + component: 'form', + onSubmit: async (event: React.FormEvent) => { + event.preventDefault(); + await createNewList(nameInputRef.current!.value); + setShowPrompt(false); + } + }} + aria-labelledby="alert-dialog-title" + aria-describedby="alert-dialog-description"> + {'Create Todo List'} + + Enter a name for a new todo list + + + + + + + + + + ); +} + +namespace S { + export const FloatingActionButton = styled(Fab)` + position: absolute; + bottom: 20px; + right: 20px; + `; +} diff --git a/frontend/src/components/navigation/NavigationPage.tsx b/frontend/src/components/navigation/NavigationPage.tsx new file mode 100644 index 0000000..ac0cc30 --- /dev/null +++ b/frontend/src/components/navigation/NavigationPage.tsx @@ -0,0 +1,24 @@ +import React from 'react'; +import { useNavigationPanel } from './NavigationPanelContext'; +import { Box, styled } from '@mui/material'; + +/** + * Wraps a component with automatic navigation panel title management + */ +export const NavigationPage: React.FC> = ({ title, children }) => { + const navigationPanel = useNavigationPanel(); + + React.useEffect(() => { + navigationPanel.setTitle(title); + + return () => navigationPanel.setTitle(''); + }, [title, navigationPanel]); + + return {children}; +}; + +namespace S { + export const Container = styled(Box)` + margin: 10px; + `; +} diff --git a/frontend/src/components/navigation/NavigationPanelContext.tsx b/frontend/src/components/navigation/NavigationPanelContext.tsx new file mode 100644 index 0000000..4745475 --- /dev/null +++ b/frontend/src/components/navigation/NavigationPanelContext.tsx @@ -0,0 +1,21 @@ +import React from 'react'; + +export type NavigationPanelController = { + setTitle: (title: string) => void; + title: string; +}; + +export const NavigationPanelContext = React.createContext({ + setTitle: () => { + throw new Error(`No NavigationPanelContext has been provided`); + }, + title: '' +}); + +export const NavigationPanelContextProvider = ({ children }: { children: React.ReactNode }) => { + const [title, setTitle] = React.useState(''); + + return {children}; +}; + +export const useNavigationPanel = () => React.useContext(NavigationPanelContext); diff --git a/frontend/src/components/providers/SystemProvider.tsx b/frontend/src/components/providers/SystemProvider.tsx new file mode 100644 index 0000000..d0706e0 --- /dev/null +++ b/frontend/src/components/providers/SystemProvider.tsx @@ -0,0 +1,51 @@ +import { NavigationPanelContextProvider } from '@/components/navigation/NavigationPanelContext'; +import { AppSchema } from '@/library/powersync/AppSchema'; +import { DemoConnector } from '@/library/powersync/DemoConnector'; +import { CircularProgress } from '@mui/material'; +import { PowerSyncContext } from '@powersync/react'; +import { PowerSyncDatabase } from '@powersync/web'; +import Logger from 'js-logger'; +import React, { Suspense } from 'react'; + +export const db = new PowerSyncDatabase({ + database: { + dbFilename: 'example.db' + }, + schema: AppSchema, + logger: Logger +}); + +// Make db accessible on the console for debugging +(window as any).db = db; + +const ConnectorContext = React.createContext(null); +export const useConnector = () => React.useContext(ConnectorContext); + +export const SystemProvider = ({ children }: { children: React.ReactNode }) => { + const [connector] = React.useState(new DemoConnector()); + const [powerSync] = React.useState(db); + + React.useEffect(() => { + // Linting thinks this is a hook due to it's name + Logger.useDefaults(); // eslint-disable-line + Logger.setLevel(Logger.DEBUG); + + // For console testing purposes + (window as any)._powersync = powerSync; + + powerSync.init(); + powerSync.connect(connector); + }, [powerSync, connector]); + + return ( + }> + + + {children} + + + + ); +}; + +export default SystemProvider; diff --git a/frontend/src/components/providers/ThemeProviderContainer.tsx b/frontend/src/components/providers/ThemeProviderContainer.tsx new file mode 100644 index 0000000..9b9c1d6 --- /dev/null +++ b/frontend/src/components/providers/ThemeProviderContainer.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { createTheme, ThemeProvider } from '@mui/material/styles'; + +export const ThemeProviderContainer: React.FC> = ({ children }) => { + const theme = React.useMemo(() => { + return createTheme({ + palette: { + mode: 'dark', + primary: { + main: '#c44eff' + } + }, + typography: { + fontFamily: 'Rubik, sans-serif' + } + }); + }, []); + + return {children}; +}; diff --git a/frontend/src/components/widgets/ListItemWidget.tsx b/frontend/src/components/widgets/ListItemWidget.tsx new file mode 100644 index 0000000..e498ce6 --- /dev/null +++ b/frontend/src/components/widgets/ListItemWidget.tsx @@ -0,0 +1,72 @@ +import React from 'react'; +import { + ListItem, + IconButton, + ListItemAvatar, + Avatar, + ListItemText, + Box, + Paper, + styled, + ListItemButton +} from '@mui/material'; + +import DeleteIcon from '@mui/icons-material/DeleteOutline'; +import RightIcon from '@mui/icons-material/ArrowRightAlt'; +import ListIcon from '@mui/icons-material/ListAltOutlined'; + +export type ListItemWidgetProps = { + title: string; + description: string; + selected?: boolean; + onDelete: () => void; + onPress: () => void; +}; + +export const ListItemWidget: React.FC = (props) => { + return ( + + + { + props.onDelete(); + }}> + + + { + props.onPress(); + }}> + + + + }> + { + props.onPress(); + }} + selected={props.selected}> + + + + + + + + + + ); +}; + +export namespace S { + export const MainPaper = styled(Paper)` + margin-bottom: 10px; + `; +} diff --git a/frontend/src/components/widgets/TodoItemWidget.tsx b/frontend/src/components/widgets/TodoItemWidget.tsx new file mode 100644 index 0000000..c4fbcfb --- /dev/null +++ b/frontend/src/components/widgets/TodoItemWidget.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import { ListItem, IconButton, ListItemAvatar, ListItemText, Box, styled, Paper, ListItemButton } from '@mui/material'; + +import DeleteIcon from '@mui/icons-material/DeleteOutline'; +import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank'; +import CheckBoxIcon from '@mui/icons-material/CheckBox'; + +export type TodoItemWidgetProps = { + description: string | null; + isComplete: boolean; + onDelete: () => void; + toggleCompletion: () => void; +}; + +export const TodoItemWidget: React.FC = (props) => { + return ( + + + { + props.onDelete(); + }}> + + + + }> + { + props.toggleCompletion(); + }}> + + + {props.isComplete ? : } + + + + + + + ); +}; + +namespace S { + export const MainPaper = styled(Paper)` + margin-bottom: 10px; + `; +} diff --git a/frontend/src/components/widgets/TodoListsWidget.tsx b/frontend/src/components/widgets/TodoListsWidget.tsx new file mode 100644 index 0000000..1089ab8 --- /dev/null +++ b/frontend/src/components/widgets/TodoListsWidget.tsx @@ -0,0 +1,57 @@ +import { TODO_LISTS_ROUTE } from '@/app/router'; +import { LISTS_TABLE, ListRecord, TODOS_TABLE } from '@/library/powersync/AppSchema'; +import { List } from '@mui/material'; +import { usePowerSync, useQuery } from '@powersync/react'; +import { useNavigate } from 'react-router-dom'; +import { ListItemWidget } from './ListItemWidget'; + +export type TodoListsWidgetProps = { + selectedId?: string; +}; + +const description = (total: number, completed: number = 0) => { + return `${total - completed} pending, ${completed} completed`; +}; + +export function TodoListsWidget(props: TodoListsWidgetProps) { + const powerSync = usePowerSync(); + const navigate = useNavigate(); + + const { data: listRecords } = useQuery(` + SELECT + ${LISTS_TABLE}.*, COUNT(${TODOS_TABLE}.id) AS total_tasks, SUM(CASE WHEN ${TODOS_TABLE}.completed = true THEN 1 ELSE 0 END) as completed_tasks + FROM + ${LISTS_TABLE} + LEFT JOIN ${TODOS_TABLE} + ON ${LISTS_TABLE}.id = ${TODOS_TABLE}.list_id + GROUP BY + ${LISTS_TABLE}.id; + `); + + console.log('listRecords', listRecords); + const deleteList = async (id: string) => { + await powerSync.writeTransaction(async (tx) => { + // Delete associated todos + await tx.execute(`DELETE FROM ${TODOS_TABLE} WHERE list_id = ?`, [id]); + // Delete list record + await tx.execute(`DELETE FROM ${LISTS_TABLE} WHERE id = ?`, [id]); + }); + }; + + return ( + + {listRecords.map((r) => ( + deleteList(r.id)} + onPress={() => { + navigate(TODO_LISTS_ROUTE + '/' + r.id); + }} + /> + ))} + + ); +} diff --git a/frontend/src/generated/api.d.ts b/frontend/src/generated/api.d.ts new file mode 100644 index 0000000..8c65b95 --- /dev/null +++ b/frontend/src/generated/api.d.ts @@ -0,0 +1,270 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/api/auth/token": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get a JWT access token */ + get: operations["getAuthToken"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/auth/keys": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** JWKS endpoint for PowerSync JWT validation */ + get: operations["getAuthKeys"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/data": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Apply a transaction of CRUD operations */ + post: operations["postCrudTransaction"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/data/checkpoint": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Get a custom write checkpoint */ + put: operations["putCheckpoint"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + TokenResponse: { + /** @description Signed JWT access token */ + token: string; + /** @description PowerSync service URL */ + powersync_url: string; + }; + CrudTransaction: { + crud: components["schemas"]["CrudEntry"][]; + /** + * Format: int64 + * @description Groups changes from the same transaction; null if no explicit transaction + */ + transaction_id?: number; + }; + CrudEntry: { + /** + * Format: int64 + * @description Auto-incrementing client-side id + */ + client_id: number; + /** @description ID of the changed row */ + id: string; + /** + * @description Type of change + * @enum {string} + */ + op: "PUT" | "PATCH" | "DELETE"; + /** @description Table that contained the change */ + table: string; + /** + * Format: int64 + * @description Auto-incrementing transaction id + */ + transaction_id?: number; + /** @description Data associated with the change */ + op_data?: { + [key: string]: unknown; + }; + /** @description Previous values for UPDATE/DELETE (when trackPreviousValues is enabled) */ + previous_values?: { + [key: string]: unknown; + }; + /** @description Client-side metadata (when trackMetadata is enabled) */ + metadata?: string; + }; + TransactionResponse: { + /** + * @description success: entire transaction persisted, safe to complete. retryable_error: transient failure, transaction rolled back, + * client should retry. + * fatal_error: transaction rolled back due to a non-recoverable + * issue — see failed_operation for details. + * @enum {string} + */ + status: "success" | "retryable_error" | "fatal_error"; + /** @description Suggested retry delay in ms. Only meaningful for retryable_error. */ + retry_after_ms?: number; + /** @description Present when status is fatal_error. Identifies what caused the rollback. */ + failed_operation?: components["schemas"]["FailedOperation"]; + /** @description Human-readable summary for logging/debugging. */ + message?: string; + }; + FailedOperation: { + /** @description Machine-readable classification, e.g. CONFLICT, SCHEMA_MISMATCH, VALIDATION_ERROR, UNIQUE_VIOLATION, FOREIGN_KEY_VIOLATION. */ + error_code: string; + /** @description Human-readable error detail. */ + message?: string; + }; + CheckpointRequest: { + user_id: string; + client_id: string; + }; + CheckpointResponse: { + checkpoint: string; + }; + JwksResponse: { + keys: { + [key: string]: unknown; + }[]; + }; + MessageResponse: { + message: string; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + getAuthToken: { + parameters: { + query?: { + /** @description Subject of the JWT. A random UUID is typically passed by the client. */ + user_id?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description JWT token and PowerSync URL */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TokenResponse"]; + }; + }; + }; + }; + getAuthKeys: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description JSON Web Key Set */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["JwksResponse"]; + }; + }; + }; + }; + postCrudTransaction: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CrudTransaction"]; + }; + }; + responses: { + /** @description Transaction result. Always returns 200 — the outcome is determined by the status field in the response body. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TransactionResponse"]; + }; + }; + }; + }; + putCheckpoint: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CheckpointRequest"]; + }; + }; + responses: { + /** @description Checkpoint value */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CheckpointResponse"]; + }; + }; + /** @description Invalid body */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponse"]; + }; + }; + }; + }; +} diff --git a/frontend/src/index.html b/frontend/src/index.html new file mode 100644 index 0000000..de7a97c --- /dev/null +++ b/frontend/src/index.html @@ -0,0 +1,11 @@ + + + + + + + + +
+ + diff --git a/frontend/src/library/powersync/AppSchema.ts b/frontend/src/library/powersync/AppSchema.ts new file mode 100644 index 0000000..b2d12eb --- /dev/null +++ b/frontend/src/library/powersync/AppSchema.ts @@ -0,0 +1,35 @@ +import { column, Schema, Table } from '@powersync/web'; + +export const LISTS_TABLE = 'lists'; +export const TODOS_TABLE = 'todos'; + +const todos = new Table( + { + list_id: column.text, + created_at: column.text, + completed_at: column.text, + description: column.text, + created_by: column.text, + completed_by: column.text, + completed: column.integer + }, + { indexes: { list: ['list_id'] } } +); + +const lists = new Table({ + created_at: column.text, + name: column.text, + owner_id: column.text +}); + +export const AppSchema = new Schema({ + todos, + lists +}); + +export type Database = (typeof AppSchema)['types']; +export type TodoRecord = Database['todos']; +// OR: +// export type Todo = RowType; + +export type ListRecord = Database['lists']; diff --git a/frontend/src/library/powersync/DemoConnector.ts b/frontend/src/library/powersync/DemoConnector.ts new file mode 100644 index 0000000..ccbe2a6 --- /dev/null +++ b/frontend/src/library/powersync/DemoConnector.ts @@ -0,0 +1,80 @@ +import { v4 as uuid } from 'uuid'; + +import { AbstractPowerSyncDatabase, PowerSyncBackendConnector } from '@powersync/web'; +import { WriteAPIClient } from './WriteAPIClient'; +import { createOpenAPIClient, type OpenAPIClient } from './OpenAPITransport'; + +export type DemoConfig = { + backendUrl: string; + powersyncUrl: string; +}; + +const USER_ID_STORAGE_KEY = 'ps_user_id'; + +export class DemoConnector implements PowerSyncBackendConnector { + readonly config: DemoConfig; + readonly userId: string; + readonly apiClient: OpenAPIClient; + + private _clientId: string | null; + private _writeClient: WriteAPIClient | null; + + constructor() { + let userId = localStorage.getItem(USER_ID_STORAGE_KEY); + if (!userId) { + userId = uuid(); + localStorage.setItem(USER_ID_STORAGE_KEY, userId); + } + this.userId = userId; + this._clientId = null; + this._writeClient = null; + + this.config = { + backendUrl: import.meta.env.VITE_BACKEND_URL, + powersyncUrl: import.meta.env.VITE_POWERSYNC_URL + }; + + this.apiClient = createOpenAPIClient(this.config.backendUrl); + } + + async fetchCredentials() { + const { token } = await this.apiClient.fetchToken(this.userId); + + return { + endpoint: this.config.powersyncUrl, + token + }; + } + + private async getWriteClient(database: AbstractPowerSyncDatabase): Promise { + if (!this._writeClient) { + this._writeClient = new WriteAPIClient({ + transport: this.apiClient.transport, + userId: this.userId, + clientId: this._clientId!, + useCustomCheckpoints: import.meta.env.VITE_CHECKPOINT_MODE === 'custom' + }); + } + return this._writeClient; + } + + async uploadData(database: AbstractPowerSyncDatabase): Promise { + const transaction = await database.getNextCrudTransaction(); + if (!transaction) return; + + this._clientId = await database.getClientId(); + const writeClient = await this.getWriteClient(database); + const result = await writeClient.processTransaction(transaction); + + switch (result.status) { + case 'success': + await transaction.complete(result.checkpoint); + break; + case 'fatal_error': + console.error('Fatal error:', result.failedOperation?.error_code, result.message); + break; + case 'retryable_error': + throw new Error(result.message ?? 'Retryable error'); + } + } +} diff --git a/frontend/src/library/powersync/OpenAPITransport.ts b/frontend/src/library/powersync/OpenAPITransport.ts new file mode 100644 index 0000000..43b8a4b --- /dev/null +++ b/frontend/src/library/powersync/OpenAPITransport.ts @@ -0,0 +1,36 @@ +import createClient from 'openapi-fetch'; +import type { paths } from '../../generated/api'; +import type { WriteAPITransport } from './WriteAPIClient'; + +export interface OpenAPIClient { + transport: WriteAPITransport; + fetchToken(user_id: string): Promise<{ token: string; powersync_url: string }>; +} + +export function createOpenAPIClient(baseUrl: string): OpenAPIClient { + const client = createClient({ baseUrl }); + + return { + transport: { + async postTransaction(body) { + const { data } = await client.POST('/api/data', { body }); + if (!data) throw new Error('No response from /api/data'); + return data; + }, + async putCheckpoint(user_id, client_id) { + const { data, error } = await client.PUT('/api/data/checkpoint', { + body: { user_id, client_id } + }); + if (error) throw new Error(`Failed to get checkpoint: ${error.message}`); + return data; + } + }, + async fetchToken(user_id: string) { + const { data, response } = await client.GET('/api/auth/token', { + params: { query: { user_id } } + }); + if (!data) throw new Error(`Received ${response.status} from /api/auth/token`); + return data; + } + }; +} diff --git a/frontend/src/library/powersync/WriteAPIClient.ts b/frontend/src/library/powersync/WriteAPIClient.ts new file mode 100644 index 0000000..9271b0b --- /dev/null +++ b/frontend/src/library/powersync/WriteAPIClient.ts @@ -0,0 +1,117 @@ +import type { CrudEntry as SDKCrudEntry, CrudTransaction } from '@powersync/web'; + +export interface CrudTransaction_API { + crud: CrudEntry_API[]; + transaction_id?: number; +} + +export interface CrudEntry_API { + client_id: number; + id: string; + op: 'PUT' | 'PATCH' | 'DELETE'; + table: string; + transaction_id?: number; + op_data?: Record; +} + +export interface TransactionResponse { + status: 'success' | 'retryable_error' | 'fatal_error'; + retry_after_ms?: number; + failed_operation?: { error_code: string; message?: string }; + message?: string; +} + +export interface CheckpointResponse { + checkpoint: string; +} + +export interface WriteAPITransport { + postTransaction(body: CrudTransaction_API): Promise; + putCheckpoint(user_id: string, client_id: string): Promise; +} + +export interface TransactionResult { + status: 'success' | 'retryable_error' | 'fatal_error'; + checkpoint?: string; + message?: string; + failedOperation?: { error_code: string; message?: string }; +} + +export interface WriteAPIClientOptions { + transport: WriteAPITransport; + userId: string; + clientId: string; + useCustomCheckpoints?: boolean; +} + +export interface IWriteAPIClient { + processTransaction(transaction: CrudTransaction): Promise; + create(table: string, id: string, data: Record): Promise; + update(table: string, id: string, data: Record): Promise; + delete(table: string, id: string): Promise; +} + +export class WriteAPIClient implements IWriteAPIClient { + private nextClientId = Date.now(); + + constructor(private options: WriteAPIClientOptions) {} + + async processTransaction(transaction: CrudTransaction): Promise { + const crud: CrudEntry_API[] = transaction.crud.map((op: SDKCrudEntry) => ({ + client_id: op.clientId, + id: op.id, + op: op.op as 'PUT' | 'PATCH' | 'DELETE', + table: op.table, + ...(op.transactionId != null && { transaction_id: op.transactionId }), + ...(op.opData != null && { op_data: op.opData }) + })); + + const body: CrudTransaction_API = { + crud, + ...(transaction.transactionId != null && { transaction_id: transaction.transactionId }) + }; + + const response = await this.options.transport.postTransaction(body); + + const result: TransactionResult = { + status: response.status, + message: response.message, + failedOperation: response.failed_operation + }; + + if (response.status === 'success' && this.options.useCustomCheckpoints) { + const cp = await this.options.transport.putCheckpoint(this.options.userId, this.options.clientId); + result.checkpoint = cp.checkpoint; + } + + return result; + } + + create(table: string, id: string, data: Record): Promise { + return this.sendSingle({ op: 'PUT', table, id, op_data: data }); + } + + update(table: string, id: string, data: Record): Promise { + return this.sendSingle({ op: 'PATCH', table, id, op_data: data }); + } + + delete(table: string, id: string): Promise { + return this.sendSingle({ op: 'DELETE', table, id }); + } + + private async sendSingle( + entry: Pick + ): Promise { + const body: CrudTransaction_API = { + crud: [{ client_id: this.nextClientId++, ...entry }] + }; + + const response = await this.options.transport.postTransaction(body); + + return { + status: response.status, + message: response.message, + failedOperation: response.failed_operation + }; + } +} diff --git a/frontend/src/library/powersync/vite-env.d.ts b/frontend/src/library/powersync/vite-env.d.ts new file mode 100644 index 0000000..779ffbc --- /dev/null +++ b/frontend/src/library/powersync/vite-env.d.ts @@ -0,0 +1,11 @@ +/// + +interface ImportMetaEnv { + readonly VITE_BACKEND_URL: string; + readonly VITE_POWERSYNC_URL: string; + readonly VITE_CHECKPOINT_MODE: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..f81e62f --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "es6", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules"], + "references": [] +} diff --git a/frontend/vite.config.mts b/frontend/vite.config.mts new file mode 100644 index 0000000..2c9fcd4 --- /dev/null +++ b/frontend/vite.config.mts @@ -0,0 +1,84 @@ +import { fileURLToPath, URL } from 'url'; +import topLevelAwait from 'vite-plugin-top-level-await'; +import wasm from 'vite-plugin-wasm'; + +import react from '@vitejs/plugin-react'; +import { createRequire } from 'node:module'; +import { defineConfig } from 'vite'; +import { VitePWA } from 'vite-plugin-pwa'; +const require = createRequire(import.meta.url); // Needed since the config file is also an ES module + +// https://vitejs.dev/config/ +export default defineConfig({ + root: 'src', + build: { + outDir: '../dist', + rollupOptions: { + input: 'src/index.html' + }, + emptyOutDir: true + }, + define: { + process: {} + }, + resolve: { + alias: [ + { + find: '@', + replacement: fileURLToPath(new URL('./src', import.meta.url)) + } + ] + }, + publicDir: '../public', + envDir: '..', // Use this dir for env vars, not 'src'. + optimizeDeps: { + // Don't optimize these packages as they contain web workers and WASM files. + // https://github.com/vitejs/vite/issues/11672#issuecomment-1415820673 + exclude: ['@journeyapps/wa-sqlite', '@powersync/web'] + // include: ['@powersync/web > js-logger'] + }, + plugins: [ + wasm(), + topLevelAwait(), + react(), + VitePWA({ + registerType: 'autoUpdate', + includeAssets: ['powersync-logo.svg', 'supabase-logo.png', 'favicon.ico'], + manifest: { + theme_color: '#c44eff', + background_color: '#c44eff', + display: 'standalone', + scope: '/', + start_url: '/', + name: 'PowerSync Self Hosted Demo', + short_name: 'PowerSync Self Hosted', + icons: [ + { + src: '/icons/icon-192x192.png', + sizes: '192x192', + type: 'image/png' + }, + { + src: '/icons/icon-256x256.png', + sizes: '256x256', + type: 'image/png' + }, + { + src: '/icons/icon-384x384.png', + sizes: '384x384', + type: 'image/png' + }, + { + src: '/icons/icon-512x512.png', + sizes: '512x512', + type: 'image/png' + } + ] + } + }) + ], + worker: { + format: 'es', + plugins: () => [wasm(), topLevelAwait()] + } +}); diff --git a/init-scripts/setup.sql b/init-scripts/setup.sql new file mode 100644 index 0000000..730e18f --- /dev/null +++ b/init-scripts/setup.sql @@ -0,0 +1,32 @@ +-- TODO change this if changing the DB connection name +\connect postgres; + +-- Create tables +create table public.lists ( + id uuid not null default gen_random_uuid (), + created_at timestamp with time zone not null default now(), + name text not null, + owner_id uuid not null, + constraint lists_pkey primary key (id) + ); + +create table public.todos ( + id uuid not null default gen_random_uuid (), + created_at timestamp with time zone not null default now(), + completed_at timestamp with time zone null, + description text not null, + completed boolean not null default false, + created_by uuid null, + completed_by uuid null, + list_id uuid not null, + photo_id uuid null, + constraint todos_pkey primary key (id) + ); + +-- Creates some initial data to be synced +INSERT INTO lists (id, name, owner_id) VALUES ('75f89104-d95a-4f16-8309-5363f1bb377a', 'Getting Started', gen_random_uuid() ); +INSERT INTO todos(description, list_id, completed) VALUES ('Run services locally', '75f89104-d95a-4f16-8309-5363f1bb377a', true); +INSERT INTO todos (description, list_id, completed) VALUES ('Create a todo here. Query the todos table via a Postgres connection. Your todo should be synced', '75f89104-d95a-4f16-8309-5363f1bb377a', false); + +-- Create publication for PowerSync +create publication powersync for table lists, todos; diff --git a/openapi.yaml b/openapi.yaml new file mode 100644 index 0000000..2044347 --- /dev/null +++ b/openapi.yaml @@ -0,0 +1,236 @@ +openapi: 3.0.3 +info: + title: PowerSync Backend API + description: Contract between the demo app connector and the backend. + version: 1.0.0 + +servers: + - url: http://localhost:6060 + description: Local development + +paths: + /api/auth/token: + get: + operationId: getAuthToken + summary: Get a JWT access token + parameters: + - name: user_id + in: query + required: false + schema: + type: string + default: "UserID " + description: Subject of the JWT. A random UUID is typically passed by the client. + responses: + "200": + description: JWT token and PowerSync URL + content: + application/json: + schema: + $ref: "#/components/schemas/TokenResponse" + + /api/auth/keys: + get: + operationId: getAuthKeys + summary: JWKS endpoint for PowerSync JWT validation + responses: + "200": + description: JSON Web Key Set + content: + application/json: + schema: + $ref: "#/components/schemas/JwksResponse" + + /api/data: + post: + operationId: postCrudTransaction + summary: Apply a transaction of CRUD operations + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CrudTransaction" + responses: + "200": + description: > + Transaction result. Always returns 200 — the outcome + is determined by the status field in the response body. + content: + application/json: + schema: + $ref: "#/components/schemas/TransactionResponse" + + /api/data/checkpoint: + put: + operationId: putCheckpoint + summary: Get a custom write checkpoint + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/CheckpointRequest" + responses: + "200": + description: Checkpoint value + content: + application/json: + schema: + $ref: "#/components/schemas/CheckpointResponse" + "400": + description: Invalid body + content: + application/json: + schema: + $ref: "#/components/schemas/MessageResponse" + +components: + schemas: + TokenResponse: + type: object + required: + - token + - powersync_url + properties: + token: + type: string + description: Signed JWT access token + powersync_url: + type: string + description: PowerSync service URL + + CrudTransaction: + type: object + required: + - crud + properties: + crud: + type: array + items: + $ref: "#/components/schemas/CrudEntry" + transaction_id: + type: integer + format: int64 + description: Groups changes from the same transaction; null if no explicit transaction + + CrudEntry: + type: object + required: + - client_id + - id + - op + - table + properties: + client_id: + type: integer + format: int64 + description: Auto-incrementing client-side id + id: + type: string + description: ID of the changed row + op: + type: string + enum: + - PUT + - PATCH + - DELETE + description: Type of change + table: + type: string + description: Table that contained the change + transaction_id: + type: integer + format: int64 + description: Auto-incrementing transaction id + op_data: + type: object + additionalProperties: true + description: Data associated with the change + previous_values: + type: object + additionalProperties: true + description: Previous values for UPDATE/DELETE (when trackPreviousValues is enabled) + metadata: + type: string + description: Client-side metadata (when trackMetadata is enabled) + + TransactionResponse: + type: object + required: [status] + properties: + status: + type: string + enum: [success, retryable_error, fatal_error] + description: > + success: entire transaction persisted, safe to complete. + retryable_error: transient failure, transaction rolled back, + client should retry. + fatal_error: transaction rolled back due to a non-recoverable + issue — see failed_operation for details. + retry_after_ms: + type: integer + description: > + Suggested retry delay in ms. Only meaningful for + retryable_error. + failed_operation: + description: > + Present when status is fatal_error. Identifies what + caused the rollback. + allOf: + - $ref: "#/components/schemas/FailedOperation" + message: + type: string + description: Human-readable summary for logging/debugging. + + FailedOperation: + type: object + required: [error_code] + properties: + error_code: + type: string + description: > + Machine-readable classification, e.g. CONFLICT, + SCHEMA_MISMATCH, VALIDATION_ERROR, UNIQUE_VIOLATION, + FOREIGN_KEY_VIOLATION. + message: + type: string + description: Human-readable error detail. + + CheckpointRequest: + type: object + required: + - user_id + - client_id + properties: + user_id: + type: string + client_id: + type: string + + CheckpointResponse: + type: object + required: + - checkpoint + properties: + checkpoint: + type: string + + JwksResponse: + type: object + required: + - keys + properties: + keys: + type: array + items: + type: object + additionalProperties: true + + MessageResponse: + type: object + required: + - message + properties: + message: + type: string diff --git a/plan.md b/plan.md new file mode 100644 index 0000000..2791d63 --- /dev/null +++ b/plan.md @@ -0,0 +1,145 @@ +Next Prototyping Steps for Write API + +Context + +The tracer bullet is in place: JS web client -> JS/Express backend -> Postgres, with an OpenAPI spec, 4 database +persisters (Postgres, MySQL, MSSQL, MongoDB), a demo todo app frontend, and typed client/server code generated from the +spec. The happy path works end-to-end for simple CRUD operations. + +The question: what should be prototyped next? + +--- + +Prototyping List + +1. Auto Type Mapper (SQLite <-> Source DB) + +The proposal identifies type mapping as a major pain point and support issue. Currently, json_populate_record in the +Postgres persister does implicit casting, but there's no explicit, configurable mapping layer. Prototype: + +- A mapper interface that translates SQLite's 3 types (INTEGER, REAL, TEXT) to the source DB's type system +- A default "1-1" mapper for Postgres (e.g., TEXT -> TEXT, INTEGER -> INTEGER/BIGINT, REAL -> DOUBLE PRECISION) +- Column-level type override configuration (e.g., "this TEXT column is actually a TIMESTAMP", "this TEXT column is + actually JSONB") +- Test with the existing todo app schema to validate the flow + +The MongoDB persister already has a rudimentary version of this (mongo-schema.ts with type converters), which could inform +the general interface. + +2. Custom Type Mapper / Schema Introspection + +Building on #1, prototype the ability to introspect the source DB schema and auto-derive the mapping: + +- Query information_schema.columns (Postgres) to get target column types +- Auto-generate a mapping config from source DB schema + PowerSync SQLite schema +- Handle the common custom types: JSON/JSONB, arrays, enums, timestamps, booleans, UUIDs + +3. Fatal Error Handling on the Client (Dead-Letter / Skip Behavior) + +Currently DemoConnector.ts:99-100 logs fatal errors but does nothing — the transaction is neither completed nor skipped, +which means the queue stalls. Prototype: + +- What should the client do when it gets a fatal_error response? Options: skip the transaction (call complete), move to a + local dead-letter table, surface to the user via a callback/event +- A client-side error callback/hook mechanism so the app can react to fatal errors +- Whether previous_values (already in the spec) should be used to enable client-side conflict resolution + +4. Server-Side Dead-Letter Queue + +The proposal calls for a DLQ with exposed hooks for developers. Prototype: + +- A dead_letter table schema (original operation, error code, timestamp, metadata) +- Persisting failed operations to the DLQ instead of just returning the error +- An API endpoint to list/inspect/retry/discard dead-letter entries +- Add to the OpenAPI spec + +5. Auth on the Write Endpoint + +The /api/data endpoint currently has no authentication. The proposal notes that auth is needed but the connector isn't +responsible for it. Prototype: + +- JWT validation middleware on /api/data (verify the same tokens issued by /api/auth/token) +- Extract user_id from the token instead of trusting the client +- Consider how this interacts with the checkpoint endpoint (which currently takes user_id in the body) + +6. Batch/Multi-Transaction Upload + +The DemoConnector only uses getNextCrudTransaction() (one transaction at a time). The proposal discusses batches. +Prototype: + +- Update the OpenAPI spec to support an array of transactions (or use getCrudBatch) +- Update the client connector to send multiple transactions in one request +- Update the backend to process them (all-or-nothing vs. per-transaction rollback semantics) +- Measure performance difference vs. single-transaction uploads + +7. Client-Side Upload Library Extraction + +The proposal envisions @powersync/upload as a reusable client library. Prototype: + +- Extract the upload logic from DemoConnector.ts into a standalone module +- Define the interface: what does the user configure (backend URL, auth, error handlers) vs. what's automatic +- Make the DemoConnector a thin wrapper around this library +- Consider what the "zero config" experience looks like + +8. Server-Side Router/Handler Extraction + +The proposal envisions @powersync/backend-router, @powersync/backend-translator-_, @powersync/backend-persister-_. +Prototype: + +- Define the boundaries between router, translator (mapper), and persister +- Extract the Express route handler into a framework-agnostic module +- Make the persister pluggable without the factory pattern requiring all drivers to be installed +- Consider: is the router/translator/persister split the right decomposition, or is translator+persister better as one + unit? + +9. Response Protocol Refinement + +The existing TODO calls this out. Prototype: + +- Per-operation status in the response (currently the response is per-transaction, but what if 1 of 10 operations fails?) +- Whether retry_after_ms should have a default/recommended value +- Whether the response should echo back client_id of the failed operation for client-side correlation +- Partial success semantics: if the transaction rolls back, should the response indicate which operation caused it + (currently it does via failed_operation, but only for fatal errors) + +10. OpenAPI Codegen for Another Language + +The proposal's big bet is that a standard protocol enables cross-language interop. Prototype: + +- Generate a client stub for one other language (Kotlin or Dart, as these are key PowerSync client platforms) +- Generate server scaffolding for one other language (Python or Go, as common backend choices) +- Evaluate the quality of generated code — is it usable out of the box or does it need heavy customization? +- Document the codegen workflow + +11. Large Payload / Streaming + +The proposal flags this as potentially low-priority but worth understanding. Prototype: + +- Determine realistic payload size limits (how big can a transaction get in practice?) +- If needed, prototype chunked upload (client sends parts, server assembles) +- This would inform the REST vs. WebSocket vs. gRPC decision + +12. MongoDB Persister Completion + +The MongoDB persister has explicit TODOs for batch operations and transactions. Prototype: + +- Use MongoDB bulk write operations instead of looping +- Wrap in a MongoDB transaction (replica set is already configured in docker-compose) +- Generalize the schema/type conversion beyond the hardcoded todo schema + +--- + +Suggested Priority Order + +High value, foundational (do these first — they inform everything else): + +1. Fatal error handling on the client (#3) — the current stall behavior is a showstopper +2. Auth on the write endpoint (#5) — security baseline +3. Auto type mapper (#1) — core DX improvement, the main reason users struggle + +High value, builds on foundations: 4. Response protocol refinement (#9) — nail the protocol before generating code for other languages 5. Server-side DLQ (#4) — pairs with #3 6. Client-side library extraction (#7) — needed before spreading to other client platforms + +Validation / spread-out: 7. Codegen for another language (#10) — validates the protocol is language-agnostic 8. Server-side extraction (#8) — needed before spreading to other server platforms 9. Batch upload (#6) — performance optimization + +Lower priority / research: 10. Schema introspection (#2) — nice DX but not blocking 11. Large payloads (#11) — validate whether this is a real problem 12. MongoDB completion (#12) — important but straightforward +╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ From 1d8a8b0aedabfb3c542835894b8a5aadea3ced55 Mon Sep 17 00:00:00 2001 From: Christiaan Landman Date: Mon, 4 May 2026 15:42:39 +0200 Subject: [PATCH 2/3] Added diagram. --- README.md | 2 + diagram.png | Bin 0 -> 231338 bytes .../demo-connector-data-flow.excalidraw | 1180 +++++++++++++++++ 3 files changed, 1182 insertions(+) create mode 100644 diagram.png create mode 100644 docs/diagrams/demo-connector-data-flow.excalidraw diff --git a/README.md b/README.md index 9103cd0..597db39 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # PowerSync Write API Demo +![Architecture diagram](./diagram.png) + ## Project Layout ``` diff --git a/diagram.png b/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..85d9a6a312f264d65bc55a1e5c0303c2d30fce46 GIT binary patch literal 231338 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�V`;P&`Q$oH<*|ruGdd9*-T6xHq589;K?o z8ZSw}5mpylduWQ@u2DLuCPTb>XxQemOVjH?gjJ&peAm^eSGg7^Fp^9fiXLNS;wARh z945w>0R71>bs;T=1D#i0yoGES0mpXa(54qzF^i(*Ep>f&t_oCb)XQgNW1o-oP%lt- z!fN2~?xOTULOpMfIfC|!6`Tye-Z&tN77q^|+LnCSTvar`EBBDAP%f%3z&rPXy3U^o zQ!M8#&g*^d1;Q{0;^hixr1GBh+Lp_FtS+gld<_|1K3f= z(g@#O9n2$gZwwcS6z5aacC}KE_ev87E5057bIa7+X{#s4Wy0@)%g2FZo&r0=vhKHe4#DY7nb=Ko8QtLA*U!71g!m#d$#R94SbBVt>iW{;r;m~9sY597({jjVn2G= z)Y7*h+H{&AZ}7e)s2?-+$r=;O6Nl-pkVLtz@S#q(-gwq;rgU(B>i_w+&l!WG*2S56nfNQaxH`Bh5UO z)!kR}d`8OgUl4lz7l;lo7&X=H9gcr)ox-i1ui{2fAoBFLzGw*yT?pl=(P&swPu8at zF>XWV-V7(|bzY^j>iP7fTkEfOT=(SE;E;r}FOH*0Pip*cTdf4}D+BfDB(shN6kU6=iN z)(Pf|FlHzyCBJlbR(5JezRKI*v`{upqveVKQ9atZ5fd^}OazD9m@sp#jcyALUfsgR zvfa=7=m`~4T$-?lJlrT`oJE^#ABkVE)%5;WZmplw>yC6+>3X#|`GHU!=64e}@-YjIM{G70yet!0
iLL0 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%0D;8zXL1K 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/demo-connector-data-flow.excalidraw b/docs/diagrams/demo-connector-data-flow.excalidraw new file mode 100644 index 0000000..cfd3ae8 --- /dev/null +++ b/docs/diagrams/demo-connector-data-flow.excalidraw @@ -0,0 +1,1180 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "lane-frontend", + "type": "rectangle", + "x": 40, + "y": 80, + "width": 440, + "height": 720, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "#e7f5ff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1001, + "version": 1, + "versionNonce": 1001, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false + }, + { + "id": "lane-backend", + "type": "rectangle", + "x": 520, + "y": 80, + "width": 440, + "height": 1020, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ebfbee", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1002, + "version": 1, + "versionNonce": 1002, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false + }, + { + "id": "lane-postgres", + "type": "rectangle", + "x": 1000, + "y": 80, + "width": 380, + "height": 1020, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "#fff9db", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1003, + "version": 1, + "versionNonce": 1003, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false + }, + { + "id": "title-frontend", + "type": "text", + "x": 180, + "y": 100, + "width": 160, + "height": 36, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1011, + "version": 1, + "versionNonce": 1011, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 24, + "fontFamily": 1, + "text": "Frontend", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Frontend", + "lineHeight": 1.25, + "baseline": 22 + }, + { + "id": "title-backend", + "type": "text", + "x": 660, + "y": 100, + "width": 160, + "height": 36, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1012, + "version": 1, + "versionNonce": 1012, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 24, + "fontFamily": 1, + "text": "Backend", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Backend", + "lineHeight": 1.25, + "baseline": 22 + }, + { + "id": "title-postgres", + "type": "text", + "x": 1110, + "y": 100, + "width": 160, + "height": 36, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1013, + "version": 1, + "versionNonce": 1013, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 24, + "fontFamily": 1, + "text": "Postgres", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Postgres", + "lineHeight": 1.25, + "baseline": 22 + }, + { + "id": "box-uploaddata", + "type": "rectangle", + "x": 80, + "y": 200, + "width": 360, + "height": 130, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "seed": 2001, + "version": 1, + "versionNonce": 2001, + "isDeleted": false, + "boundElements": [ + { "id": "text-uploaddata", "type": "text" }, + { "id": "arrow-1-2", "type": "arrow" }, + { "id": "arrow-error", "type": "arrow" } + ], + "updated": 1730000000000, + "link": null, + "locked": false + }, + { + "id": "text-uploaddata", + "type": "text", + "x": 90, + "y": 215, + "width": 340, + "height": 100, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 3001, + "version": 1, + "versionNonce": 3001, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "DemoConnector.uploadData(db)\n\npulls next CrudTransaction\nfrom PowerSync\n\nDemoConnector.ts:61", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "box-uploaddata", + "originalText": "DemoConnector.uploadData(db)\n\npulls next CrudTransaction\nfrom PowerSync\n\nDemoConnector.ts:61", + "lineHeight": 1.25, + "baseline": 12 + }, + { + "id": "box-processtxn", + "type": "rectangle", + "x": 80, + "y": 370, + "width": 360, + "height": 130, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "seed": 2002, + "version": 1, + "versionNonce": 2002, + "isDeleted": false, + "boundElements": [ + { "id": "text-processtxn", "type": "text" }, + { "id": "arrow-1-2", "type": "arrow" }, + { "id": "arrow-2-3", "type": "arrow" } + ], + "updated": 1730000000000, + "link": null, + "locked": false + }, + { + "id": "text-processtxn", + "type": "text", + "x": 90, + "y": 385, + "width": 340, + "height": 100, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 3002, + "version": 1, + "versionNonce": 3002, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "WriteAPIClient.processTransaction(txn)\n\nmaps CrudTransaction →\nCrudTransaction_API\n\nWriteAPIClient.ts:59", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "box-processtxn", + "originalText": "WriteAPIClient.processTransaction(txn)\n\nmaps CrudTransaction →\nCrudTransaction_API\n\nWriteAPIClient.ts:59", + "lineHeight": 1.25, + "baseline": 12 + }, + { + "id": "box-posttxn", + "type": "rectangle", + "x": 80, + "y": 540, + "width": 360, + "height": 130, + "angle": 0, + "strokeColor": "#1971c2", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "seed": 2003, + "version": 1, + "versionNonce": 2003, + "isDeleted": false, + "boundElements": [ + { "id": "text-posttxn", "type": "text" }, + { "id": "arrow-2-3", "type": "arrow" }, + { "id": "arrow-3-4", "type": "arrow" } + ], + "updated": 1730000000000, + "link": null, + "locked": false + }, + { + "id": "text-posttxn", + "type": "text", + "x": 90, + "y": 560, + "width": 340, + "height": 90, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 3003, + "version": 1, + "versionNonce": 3003, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "OpenAPITransport.postTransaction(body)\n\nopenapi-fetch · JSON POST\n\nOpenAPITransport.ts:15", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "box-posttxn", + "originalText": "OpenAPITransport.postTransaction(body)\n\nopenapi-fetch · JSON POST\n\nOpenAPITransport.ts:15", + "lineHeight": 1.25, + "baseline": 12 + }, + { + "id": "box-middleware", + "type": "rectangle", + "x": 560, + "y": 540, + "width": 360, + "height": 130, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "seed": 2004, + "version": 1, + "versionNonce": 2004, + "isDeleted": false, + "boundElements": [ + { "id": "text-middleware", "type": "text" }, + { "id": "arrow-3-4", "type": "arrow" }, + { "id": "arrow-4-5", "type": "arrow" } + ], + "updated": 1730000000000, + "link": null, + "locked": false + }, + { + "id": "text-middleware", + "type": "text", + "x": 570, + "y": 555, + "width": 340, + "height": 100, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 3004, + "version": 1, + "versionNonce": 3004, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "Express middleware\n\nexpress.json → logging →\nCORS → OpenAPI validate\n\nbackend/app.ts", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "box-middleware", + "originalText": "Express middleware\n\nexpress.json → logging →\nCORS → OpenAPI validate\n\nbackend/app.ts", + "lineHeight": 1.25, + "baseline": 12 + }, + { + "id": "box-handler", + "type": "rectangle", + "x": 560, + "y": 710, + "width": 360, + "height": 130, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "seed": 2005, + "version": 1, + "versionNonce": 2005, + "isDeleted": false, + "boundElements": [ + { "id": "text-handler", "type": "text" }, + { "id": "arrow-4-5", "type": "arrow" }, + { "id": "arrow-5-6", "type": "arrow" }, + { "id": "arrow-error", "type": "arrow" } + ], + "updated": 1730000000000, + "link": null, + "locked": false + }, + { + "id": "text-handler", + "type": "text", + "x": 570, + "y": 725, + "width": 340, + "height": 100, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 3005, + "version": 1, + "versionNonce": 3005, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "POST /api/data handler\n\ncalls updateBatch(req.body.crud)\nmaps thrown errors → response\n\nbackend/src/api/data.ts:22", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "box-handler", + "originalText": "POST /api/data handler\n\ncalls updateBatch(req.body.crud)\nmaps thrown errors → response\n\nbackend/src/api/data.ts:22", + "lineHeight": 1.25, + "baseline": 12 + }, + { + "id": "box-updatebatch", + "type": "rectangle", + "x": 560, + "y": 880, + "width": 360, + "height": 170, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "seed": 2006, + "version": 1, + "versionNonce": 2006, + "isDeleted": false, + "boundElements": [ + { "id": "text-updatebatch", "type": "text" }, + { "id": "arrow-5-6", "type": "arrow" }, + { "id": "arrow-6-7", "type": "arrow" } + ], + "updated": 1730000000000, + "link": null, + "locked": false + }, + { + "id": "text-updatebatch", + "type": "text", + "x": 570, + "y": 895, + "width": 340, + "height": 140, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 3006, + "version": 1, + "versionNonce": 3006, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 14, + "fontFamily": 1, + "text": "PostgresPersister.updateBatch(batch)\n\nBEGIN → for each CrudEntry:\n defaultMapper(op)\n INSERT ON CONFLICT / UPDATE / DELETE\nCOMMIT / ROLLBACK on error\n\npostgres-persistance.ts:32", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "box-updatebatch", + "originalText": "PostgresPersister.updateBatch(batch)\n\nBEGIN → for each CrudEntry:\n defaultMapper(op)\n INSERT ON CONFLICT / UPDATE / DELETE\nCOMMIT / ROLLBACK on error\n\npostgres-persistance.ts:32", + "lineHeight": 1.25, + "baseline": 12 + }, + { + "id": "box-postgres-db", + "type": "rectangle", + "x": 1040, + "y": 880, + "width": 300, + "height": 200, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "#fff3bf", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "seed": 2007, + "version": 1, + "versionNonce": 2007, + "isDeleted": false, + "boundElements": [ + { "id": "arrow-6-7", "type": "arrow" } + ], + "updated": 1730000000000, + "link": null, + "locked": false + }, + { + "id": "text-pg-header", + "type": "text", + "x": 1080, + "y": 895, + "width": 220, + "height": 24, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 3010, + "version": 1, + "versionNonce": 3010, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Postgres tables", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "Postgres tables", + "lineHeight": 1.25, + "baseline": 14 + }, + { + "id": "box-table-lists", + "type": "rectangle", + "x": 1060, + "y": 940, + "width": 260, + "height": 55, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "seed": 2008, + "version": 1, + "versionNonce": 2008, + "isDeleted": false, + "boundElements": [ + { "id": "text-table-lists", "type": "text" } + ], + "updated": 1730000000000, + "link": null, + "locked": false + }, + { + "id": "text-table-lists", + "type": "text", + "x": 1070, + "y": 955, + "width": 240, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 3008, + "version": 1, + "versionNonce": 3008, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "public.lists", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "box-table-lists", + "originalText": "public.lists", + "lineHeight": 1.25, + "baseline": 14 + }, + { + "id": "box-table-todos", + "type": "rectangle", + "x": 1060, + "y": 1010, + "width": 260, + "height": 55, + "angle": 0, + "strokeColor": "#e67700", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 3 }, + "seed": 2009, + "version": 1, + "versionNonce": 2009, + "isDeleted": false, + "boundElements": [ + { "id": "text-table-todos", "type": "text" } + ], + "updated": 1730000000000, + "link": null, + "locked": false + }, + { + "id": "text-table-todos", + "type": "text", + "x": 1070, + "y": 1025, + "width": 240, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 3009, + "version": 1, + "versionNonce": 3009, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "public.todos", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "box-table-todos", + "originalText": "public.todos", + "lineHeight": 1.25, + "baseline": 14 + }, + { + "id": "text-schema-source", + "type": "text", + "x": 1010, + "y": 1080, + "width": 360, + "height": 18, + "angle": 0, + "strokeColor": "#868e96", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 3020, + "version": 1, + "versionNonce": 3020, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 12, + "fontFamily": 1, + "text": "schema: init-scripts/setup.sql", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "schema: init-scripts/setup.sql", + "lineHeight": 1.25, + "baseline": 10 + }, + { + "id": "arrow-1-2", + "type": "arrow", + "x": 260, + "y": 330, + "width": 0, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 2 }, + "seed": 4001, + "version": 1, + "versionNonce": 4001, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "points": [[0, 0], [0, 40]], + "lastCommittedPoint": null, + "startBinding": { "elementId": "box-uploaddata", "focus": 0, "gap": 4 }, + "endBinding": { "elementId": "box-processtxn", "focus": 0, "gap": 4 }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "arrow-2-3", + "type": "arrow", + "x": 260, + "y": 500, + "width": 0, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 2 }, + "seed": 4002, + "version": 1, + "versionNonce": 4002, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "points": [[0, 0], [0, 40]], + "lastCommittedPoint": null, + "startBinding": { "elementId": "box-processtxn", "focus": 0, "gap": 4 }, + "endBinding": { "elementId": "box-posttxn", "focus": 0, "gap": 4 }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "arrow-3-4", + "type": "arrow", + "x": 440, + "y": 605, + "width": 120, + "height": 0, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 2 }, + "seed": 4003, + "version": 1, + "versionNonce": 4003, + "isDeleted": false, + "boundElements": [ + { "id": "label-arrow-3-4", "type": "text" } + ], + "updated": 1730000000000, + "link": null, + "locked": false, + "points": [[0, 0], [120, 0]], + "lastCommittedPoint": null, + "startBinding": { "elementId": "box-posttxn", "focus": 0, "gap": 4 }, + "endBinding": { "elementId": "box-middleware", "focus": 0, "gap": 4 }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "label-arrow-3-4", + "type": "text", + "x": 460, + "y": 580, + "width": 80, + "height": 32, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 5003, + "version": 1, + "versionNonce": 5003, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 12, + "fontFamily": 1, + "text": "POST /api/data\n{ crud: CrudEntry_API[] }", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "arrow-3-4", + "originalText": "POST /api/data\n{ crud: CrudEntry_API[] }", + "lineHeight": 1.25, + "baseline": 10 + }, + { + "id": "arrow-4-5", + "type": "arrow", + "x": 740, + "y": 670, + "width": 0, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 2 }, + "seed": 4004, + "version": 1, + "versionNonce": 4004, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "points": [[0, 0], [0, 40]], + "lastCommittedPoint": null, + "startBinding": { "elementId": "box-middleware", "focus": 0, "gap": 4 }, + "endBinding": { "elementId": "box-handler", "focus": 0, "gap": 4 }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "arrow-5-6", + "type": "arrow", + "x": 740, + "y": 840, + "width": 0, + "height": 40, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 2 }, + "seed": 4005, + "version": 1, + "versionNonce": 4005, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "points": [[0, 0], [0, 40]], + "lastCommittedPoint": null, + "startBinding": { "elementId": "box-handler", "focus": 0, "gap": 4 }, + "endBinding": { "elementId": "box-updatebatch", "focus": 0, "gap": 4 }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "arrow-6-7", + "type": "arrow", + "x": 920, + "y": 965, + "width": 120, + "height": 0, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 2 }, + "seed": 4006, + "version": 1, + "versionNonce": 4006, + "isDeleted": false, + "boundElements": [ + { "id": "label-arrow-6-7", "type": "text" } + ], + "updated": 1730000000000, + "link": null, + "locked": false, + "points": [[0, 0], [120, 0]], + "lastCommittedPoint": null, + "startBinding": { "elementId": "box-updatebatch", "focus": 0, "gap": 4 }, + "endBinding": { "elementId": "box-postgres-db", "focus": 0, "gap": 4 }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "label-arrow-6-7", + "type": "text", + "x": 940, + "y": 940, + "width": 80, + "height": 32, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 5006, + "version": 1, + "versionNonce": 5006, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 12, + "fontFamily": 1, + "text": "pg Pool · raw SQL\n(BEGIN / COMMIT)", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "arrow-6-7", + "originalText": "pg Pool · raw SQL\n(BEGIN / COMMIT)", + "lineHeight": 1.25, + "baseline": 10 + }, + { + "id": "arrow-error", + "type": "arrow", + "x": 560, + "y": 775, + "width": 120, + "height": 510, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "dashed", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { "type": 2 }, + "seed": 4007, + "version": 1, + "versionNonce": 4007, + "isDeleted": false, + "boundElements": [ + { "id": "label-arrow-error", "type": "text" } + ], + "updated": 1730000000000, + "link": null, + "locked": false, + "points": [[0, 0], [-70, 0], [-70, -510], [-120, -510]], + "lastCommittedPoint": null, + "startBinding": { "elementId": "box-handler", "focus": 0, "gap": 4 }, + "endBinding": { "elementId": "box-uploaddata", "focus": 0, "gap": 4 }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "label-arrow-error", + "type": "text", + "x": 500, + "y": 510, + "width": 220, + "height": 32, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#ffffff", + "fillStyle": "solid", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 5007, + "version": 1, + "versionNonce": 5007, + "isDeleted": false, + "boundElements": [], + "updated": 1730000000000, + "link": null, + "locked": false, + "fontSize": 12, + "fontFamily": 1, + "text": "RetryableError → retry\nFatalOperationError → discard", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "arrow-error", + "originalText": "RetryableError → retry\nFatalOperationError → discard", + "lineHeight": 1.25, + "baseline": 10 + } + ], + "appState": { + "viewBackgroundColor": "#ffffff", + "gridSize": null + }, + "files": {} +} From 0661b06e5cc50e81662ddf89e366cae4723a1cc8 Mon Sep 17 00:00:00 2001 From: Christiaan Landman Date: Thu, 14 May 2026 14:30:56 +0200 Subject: [PATCH 3/3] Removed auth entries from openapi spec. --- backend/app.ts | 3 +- backend/src/api/auth.ts | 19 +- backend/src/generated/api.ts | 406 +++++++----------- frontend/src/generated/api.d.ts | 88 ---- .../src/library/powersync/DemoConnector.ts | 9 +- .../src/library/powersync/OpenAPITransport.ts | 8 - openapi.yaml | 56 --- 7 files changed, 181 insertions(+), 408 deletions(-) diff --git a/backend/app.ts b/backend/app.ts index 48d174b..f620a5c 100644 --- a/backend/app.ts +++ b/backend/app.ts @@ -26,7 +26,8 @@ app.use( OpenApiValidator.middleware({ apiSpec: path.join(__dirname, '..', 'openapi.yaml'), validateRequests: true, - validateResponses: false + validateResponses: false, + ignorePaths: /^\/api\/auth(\/|$)/ }) ); diff --git a/backend/src/api/auth.ts b/backend/src/api/auth.ts index 8aff924..76431de 100644 --- a/backend/src/api/auth.ts +++ b/backend/src/api/auth.ts @@ -2,9 +2,17 @@ import express, { type Request, type Response } from 'express'; import { SignJWT, importJWK, type JWK, type KeyLike } from 'jose'; import config from '../../config.js'; import { generateKeyPair } from '../utils/generate-key.js'; -import type { OpQuery, OpResponse } from '../types.js'; const router = express.Router(); +interface TokenResponse { + token: string; + powersync_url: string; +} + +interface JwksResponse { + keys: JWK[]; +} + interface ImportedKeys { privateKey: { alg: string; kid: string; key: KeyLike } | null; publicKey: JWK | null; @@ -56,10 +64,7 @@ async function ensureKeys(): Promise { */ router.get( '/token', - async ( - req: Request<{}, OpResponse<'getAuthToken'>, never, OpQuery<'getAuthToken'>>, - res: Response> - ) => { + async (req: Request<{}, TokenResponse, never, { user_id?: string }>, res: Response) => { const user_id = req.query.user_id ?? 'UserID '; const token = await generateToken(user_id, {}); @@ -73,10 +78,10 @@ router.get( /** * This is the JWKS endpoint PowerSync uses to handle authentication */ -router.get('/keys', async (_req: Request, res: Response>) => { +router.get('/keys', async (_req: Request, res: Response) => { await ensureKeys(); res.send({ - keys: [{ ...keys.publicKey }] + keys: [{ ...keys.publicKey! }] }); }); diff --git a/backend/src/generated/api.ts b/backend/src/generated/api.ts index 6610359..da4341b 100644 --- a/backend/src/generated/api.ts +++ b/backend/src/generated/api.ts @@ -4,267 +4,179 @@ */ export interface paths { - '/api/auth/token': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get a JWT access token */ - get: operations['getAuthToken']; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/auth/keys': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** JWKS endpoint for PowerSync JWT validation */ - get: operations['getAuthKeys']; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/data': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Apply a transaction of CRUD operations */ - post: operations['postCrudTransaction']; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/data/checkpoint': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + "/api/data": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Apply a transaction of CRUD operations */ + post: operations["postCrudTransaction"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/data/checkpoint": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Get a custom write checkpoint */ + put: operations["putCheckpoint"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; }; - get?: never; - /** Get a custom write checkpoint */ - put: operations['putCheckpoint']; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; } export type webhooks = Record; export interface components { - schemas: { - TokenResponse: { - /** @description Signed JWT access token */ - token: string; - /** @description PowerSync service URL */ - powersync_url: string; - }; - CrudTransaction: { - crud: components['schemas']['CrudEntry'][]; - /** - * Format: int64 - * @description Groups changes from the same transaction; null if no explicit transaction - */ - transaction_id?: number; - }; - CrudEntry: { - /** - * Format: int64 - * @description Auto-incrementing client-side id - */ - client_id: number; - /** @description ID of the changed row */ - id: string; - /** - * @description Type of change - * @enum {string} - */ - op: 'PUT' | 'PATCH' | 'DELETE'; - /** @description Table that contained the change */ - table: string; - /** - * Format: int64 - * @description Auto-incrementing transaction id - */ - transaction_id?: number; - /** @description Data associated with the change */ - op_data?: { - [key: string]: unknown; - }; - /** @description Previous values for UPDATE/DELETE (when trackPreviousValues is enabled) */ - previous_values?: { - [key: string]: unknown; - }; - /** @description Client-side metadata (when trackMetadata is enabled) */ - metadata?: string; - }; - TransactionResponse: { - /** - * @description success: entire transaction persisted, safe to complete. retryable_error: transient failure, transaction rolled back, - * client should retry. - * fatal_error: transaction rolled back due to a non-recoverable - * issue — see failed_operation for details. - * @enum {string} - */ - status: 'success' | 'retryable_error' | 'fatal_error'; - /** @description Suggested retry delay in ms. Only meaningful for retryable_error. */ - retry_after_ms?: number; - /** @description Present when status is fatal_error. Identifies what caused the rollback. */ - failed_operation?: components['schemas']['FailedOperation']; - /** @description Human-readable summary for logging/debugging. */ - message?: string; - }; - FailedOperation: { - /** @description Machine-readable classification, e.g. CONFLICT, SCHEMA_MISMATCH, VALIDATION_ERROR, UNIQUE_VIOLATION, FOREIGN_KEY_VIOLATION. */ - error_code: string; - /** @description Human-readable error detail. */ - message?: string; - }; - CheckpointRequest: { - user_id: string; - client_id: string; - }; - CheckpointResponse: { - checkpoint: string; - }; - JwksResponse: { - keys: { - [key: string]: unknown; - }[]; - }; - MessageResponse: { - message: string; - }; - }; - responses: never; - parameters: never; - requestBodies: never; - headers: never; - pathItems: never; -} -export type $defs = Record; -export interface operations { - getAuthToken: { - parameters: { - query?: { - /** @description Subject of the JWT. A random UUID is typically passed by the client. */ - user_id?: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description JWT token and PowerSync URL */ - 200: { - headers: { - [name: string]: unknown; + schemas: { + CrudTransaction: { + crud: components["schemas"]["CrudEntry"][]; + /** + * Format: int64 + * @description Groups changes from the same transaction; null if no explicit transaction + */ + transaction_id?: number; }; - content: { - 'application/json': components['schemas']['TokenResponse']; + CrudEntry: { + /** + * Format: int64 + * @description Auto-incrementing client-side id + */ + client_id: number; + /** @description ID of the changed row */ + id: string; + /** + * @description Type of change + * @enum {string} + */ + op: "PUT" | "PATCH" | "DELETE"; + /** @description Table that contained the change */ + table: string; + /** + * Format: int64 + * @description Auto-incrementing transaction id + */ + transaction_id?: number; + /** @description Data associated with the change */ + op_data?: { + [key: string]: unknown; + }; + /** @description Previous values for UPDATE/DELETE (when trackPreviousValues is enabled) */ + previous_values?: { + [key: string]: unknown; + }; + /** @description Client-side metadata (when trackMetadata is enabled) */ + metadata?: string; }; - }; - }; - }; - getAuthKeys: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description JSON Web Key Set */ - 200: { - headers: { - [name: string]: unknown; + TransactionResponse: { + /** + * @description success: entire transaction persisted, safe to complete. retryable_error: transient failure, transaction rolled back, + * client should retry. + * fatal_error: transaction rolled back due to a non-recoverable + * issue — see failed_operation for details. + * @enum {string} + */ + status: "success" | "retryable_error" | "fatal_error"; + /** @description Suggested retry delay in ms. Only meaningful for retryable_error. */ + retry_after_ms?: number; + /** @description Present when status is fatal_error. Identifies what caused the rollback. */ + failed_operation?: components["schemas"]["FailedOperation"]; + /** @description Human-readable summary for logging/debugging. */ + message?: string; }; - content: { - 'application/json': components['schemas']['JwksResponse']; + FailedOperation: { + /** @description Machine-readable classification, e.g. CONFLICT, SCHEMA_MISMATCH, VALIDATION_ERROR, UNIQUE_VIOLATION, FOREIGN_KEY_VIOLATION. */ + error_code: string; + /** @description Human-readable error detail. */ + message?: string; }; - }; - }; - }; - postCrudTransaction: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - 'application/json': components['schemas']['CrudTransaction']; - }; - }; - responses: { - /** @description Transaction result. Always returns 200 — the outcome is determined by the status field in the response body. */ - 200: { - headers: { - [name: string]: unknown; + CheckpointRequest: { + user_id: string; + client_id: string; }; - content: { - 'application/json': components['schemas']['TransactionResponse']; + CheckpointResponse: { + checkpoint: string; + }; + MessageResponse: { + message: string; }; - }; - }; - }; - putCheckpoint: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - 'application/json': components['schemas']['CheckpointRequest']; - }; }; - responses: { - /** @description Checkpoint value */ - 200: { - headers: { - [name: string]: unknown; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + postCrudTransaction: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CrudTransaction"]; + }; }; - content: { - 'application/json': components['schemas']['CheckpointResponse']; + responses: { + /** @description Transaction result. Always returns 200 — the outcome is determined by the status field in the response body. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TransactionResponse"]; + }; + }; + }; + }; + putCheckpoint: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; }; - }; - /** @description Invalid body */ - 400: { - headers: { - [name: string]: unknown; + requestBody: { + content: { + "application/json": components["schemas"]["CheckpointRequest"]; + }; }; - content: { - 'application/json': components['schemas']['MessageResponse']; + responses: { + /** @description Checkpoint value */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CheckpointResponse"]; + }; + }; + /** @description Invalid body */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponse"]; + }; + }; }; - }; }; - }; } diff --git a/frontend/src/generated/api.d.ts b/frontend/src/generated/api.d.ts index 8c65b95..da4341b 100644 --- a/frontend/src/generated/api.d.ts +++ b/frontend/src/generated/api.d.ts @@ -4,40 +4,6 @@ */ export interface paths { - "/api/auth/token": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get a JWT access token */ - get: operations["getAuthToken"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/auth/keys": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** JWKS endpoint for PowerSync JWT validation */ - get: operations["getAuthKeys"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; "/api/data": { parameters: { query?: never; @@ -76,12 +42,6 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { - TokenResponse: { - /** @description Signed JWT access token */ - token: string; - /** @description PowerSync service URL */ - powersync_url: string; - }; CrudTransaction: { crud: components["schemas"]["CrudEntry"][]; /** @@ -150,11 +110,6 @@ export interface components { CheckpointResponse: { checkpoint: string; }; - JwksResponse: { - keys: { - [key: string]: unknown; - }[]; - }; MessageResponse: { message: string; }; @@ -167,49 +122,6 @@ export interface components { } export type $defs = Record; export interface operations { - getAuthToken: { - parameters: { - query?: { - /** @description Subject of the JWT. A random UUID is typically passed by the client. */ - user_id?: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description JWT token and PowerSync URL */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["TokenResponse"]; - }; - }; - }; - }; - getAuthKeys: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description JSON Web Key Set */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["JwksResponse"]; - }; - }; - }; - }; postCrudTransaction: { parameters: { query?: never; diff --git a/frontend/src/library/powersync/DemoConnector.ts b/frontend/src/library/powersync/DemoConnector.ts index ccbe2a6..e4dc3e8 100644 --- a/frontend/src/library/powersync/DemoConnector.ts +++ b/frontend/src/library/powersync/DemoConnector.ts @@ -38,7 +38,14 @@ export class DemoConnector implements PowerSyncBackendConnector { } async fetchCredentials() { - const { token } = await this.apiClient.fetchToken(this.userId); + const tokenEndpoint = 'api/auth/token'; + const res = await fetch(`${this.config.backendUrl}/${tokenEndpoint}?user_id=${this.userId}`); + + if (!res.ok) { + throw new Error(`Received ${res.status} from ${tokenEndpoint}: ${await res.text()}`); + } + + const { token } = await res.json(); return { endpoint: this.config.powersyncUrl, diff --git a/frontend/src/library/powersync/OpenAPITransport.ts b/frontend/src/library/powersync/OpenAPITransport.ts index 43b8a4b..4908814 100644 --- a/frontend/src/library/powersync/OpenAPITransport.ts +++ b/frontend/src/library/powersync/OpenAPITransport.ts @@ -4,7 +4,6 @@ import type { WriteAPITransport } from './WriteAPIClient'; export interface OpenAPIClient { transport: WriteAPITransport; - fetchToken(user_id: string): Promise<{ token: string; powersync_url: string }>; } export function createOpenAPIClient(baseUrl: string): OpenAPIClient { @@ -24,13 +23,6 @@ export function createOpenAPIClient(baseUrl: string): OpenAPIClient { if (error) throw new Error(`Failed to get checkpoint: ${error.message}`); return data; } - }, - async fetchToken(user_id: string) { - const { data, response } = await client.GET('/api/auth/token', { - params: { query: { user_id } } - }); - if (!data) throw new Error(`Received ${response.status} from /api/auth/token`); - return data; } }; } diff --git a/openapi.yaml b/openapi.yaml index 2044347..ef6bc53 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -9,38 +9,6 @@ servers: description: Local development paths: - /api/auth/token: - get: - operationId: getAuthToken - summary: Get a JWT access token - parameters: - - name: user_id - in: query - required: false - schema: - type: string - default: "UserID " - description: Subject of the JWT. A random UUID is typically passed by the client. - responses: - "200": - description: JWT token and PowerSync URL - content: - application/json: - schema: - $ref: "#/components/schemas/TokenResponse" - - /api/auth/keys: - get: - operationId: getAuthKeys - summary: JWKS endpoint for PowerSync JWT validation - responses: - "200": - description: JSON Web Key Set - content: - application/json: - schema: - $ref: "#/components/schemas/JwksResponse" - /api/data: post: operationId: postCrudTransaction @@ -87,19 +55,6 @@ paths: components: schemas: - TokenResponse: - type: object - required: - - token - - powersync_url - properties: - token: - type: string - description: Signed JWT access token - powersync_url: - type: string - description: PowerSync service URL - CrudTransaction: type: object required: @@ -216,17 +171,6 @@ components: checkpoint: type: string - JwksResponse: - type: object - required: - - keys - properties: - keys: - type: array - items: - type: object - additionalProperties: true - MessageResponse: type: object required:

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 p=RP7R+o276y=7e#g0~ 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/frontend/public/icons/icon.png b/frontend/public/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c254b17c691c79f0515dad398a83b1944e8d6ff1 GIT binary patch literal 76918 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 literal 0 HcmV?d00001 diff --git a/frontend/public/powersync-logo.svg b/frontend/public/powersync-logo.svg new file mode 100644 index 0000000..7e08a97 --- /dev/null +++ b/frontend/public/powersync-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/supabase-logo.png b/frontend/public/supabase-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ff8c18e18f13fc62e2dab81ef4f4a0dcb6394600 GIT binary patch literal 46427 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 literal 0 HcmV?d00001 diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css new file mode 100644 index 0000000..5ceb260 --- /dev/null +++ b/frontend/src/app/globals.css @@ -0,0 +1,12 @@ +:root { + --foreground-rgb: 255, 255, 255; + --background-start-rgb: 0, 0, 0; + --background-end-rgb: 0, 0, 0; +} + +body { + color: rgb(var(--foreground-rgb)); + min-height: 100vh; + margin: 0; + background: linear-gradient(to bottom, transparent, rgb(var(--background-end-rgb))) rgb(var(--background-start-rgb)); +} diff --git a/frontend/src/app/index.tsx b/frontend/src/app/index.tsx new file mode 100644 index 0000000..49a9ccd --- /dev/null +++ b/frontend/src/app/index.tsx @@ -0,0 +1,18 @@ +import { createRoot } from 'react-dom/client'; +import { RouterProvider } from 'react-router-dom'; +import { SystemProvider } from '../components/providers/SystemProvider'; +import { ThemeProviderContainer } from '../components/providers/ThemeProviderContainer'; +import { router } from './router'; + +const root = createRoot(document.getElementById('app')!); +root.render(); + +export function App() { + return ( + + + + + + ); +} diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx new file mode 100644 index 0000000..fb8fec3 --- /dev/null +++ b/frontend/src/app/page.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { CircularProgress, Grid, styled } from '@mui/material'; +import { useNavigate } from 'react-router-dom'; +import { TODO_LISTS_ROUTE } from './router'; + +export default function EntryPage() { + const navigate = useNavigate(); + + React.useEffect(() => { + navigate(TODO_LISTS_ROUTE); + }, []); + + return ( + + + + + + ); +} + +namespace S { + export const CenteredGrid = styled(Grid)` + display: flex; + justify-content: center; + align-items: center; + `; + + export const MainGrid = styled(CenteredGrid)` + min-height: 100vh; + `; +} diff --git a/frontend/src/app/router.tsx b/frontend/src/app/router.tsx new file mode 100644 index 0000000..4803324 --- /dev/null +++ b/frontend/src/app/router.tsx @@ -0,0 +1,43 @@ +import { Outlet, createBrowserRouter } from 'react-router-dom'; +import EntryPage from './page'; +import TodoEditPage from './views/todo-lists/edit/page'; +import TodoListsPage from './views/todo-lists/page'; +import ViewsLayout from './views/layout'; +import SQLConsolePage from './views/sql-console/page'; + +export const TODO_LISTS_ROUTE = '/views/todo-lists'; +export const TODO_EDIT_ROUTE = '/views/todo-lists/:id'; +export const SQL_CONSOLE_ROUTE = '/sql-console'; + +/** + * Navigate to this route after authentication + */ +export const DEFAULT_ENTRY_ROUTE = '/views/todo-lists'; + +export const router = createBrowserRouter([ + { + path: '/', + element: + }, + { + element: ( + + + + ), + children: [ + { + path: TODO_LISTS_ROUTE, + element: + }, + { + path: TODO_EDIT_ROUTE, + element: + }, + { + path: SQL_CONSOLE_ROUTE, + element: + } + ] + } +]); diff --git a/frontend/src/app/views/layout.tsx b/frontend/src/app/views/layout.tsx new file mode 100644 index 0000000..d66ad56 --- /dev/null +++ b/frontend/src/app/views/layout.tsx @@ -0,0 +1,125 @@ +import ChecklistRtlIcon from '@mui/icons-material/ChecklistRtl'; +import MenuIcon from '@mui/icons-material/Menu'; +import NorthIcon from '@mui/icons-material/North'; +import SignalWifiOffIcon from '@mui/icons-material/SignalWifiOff'; +import SouthIcon from '@mui/icons-material/South'; +import TerminalIcon from '@mui/icons-material/Terminal'; +import WifiIcon from '@mui/icons-material/Wifi'; +import { + AppBar, + Box, + Divider, + Drawer, + IconButton, + List, + ListItem, + ListItemButton, + ListItemIcon, + ListItemText, + Toolbar, + Typography, + styled +} from '@mui/material'; +import React from 'react'; + +import { useNavigationPanel } from '@/components/navigation/NavigationPanelContext'; +import { usePowerSync } from '@powersync/react'; +import { useNavigate } from 'react-router-dom'; +import { SQL_CONSOLE_ROUTE, TODO_LISTS_ROUTE } from '@/app/router'; + +export default function ViewsLayout({ children }: { children: React.ReactNode }) { + const powerSync = usePowerSync(); + const navigate = useNavigate(); + + const [syncStatus, setSyncStatus] = React.useState(powerSync.currentStatus); + const [openDrawer, setOpenDrawer] = React.useState(false); + const { title } = useNavigationPanel(); + + const NAVIGATION_ITEMS = React.useMemo( + () => [ + { + path: SQL_CONSOLE_ROUTE, + title: 'SQL Console', + icon: () => + }, + { + path: TODO_LISTS_ROUTE, + title: 'TODO Lists', + icon: () => + } + ], + [powerSync] + ); + + React.useEffect(() => { + const l = powerSync.registerListener({ + statusChanged: (status) => { + setSyncStatus(status); + } + }); + return () => l?.(); + }, [powerSync]); + + return ( + + + + setOpenDrawer(!openDrawer)}> + + + + {title} + + + + {syncStatus?.connected ? : } + + + setOpenDrawer(false)}> + + + + {NAVIGATION_ITEMS.map((item) => ( + + { + navigate(item.path); + setOpenDrawer(false); + }}> + {item.icon()} + + + + ))} + + + {children} + + ); +} + +namespace S { + export const MainBox = styled(Box)` + flex-grow: 1; + `; + + export const TopBar = styled(AppBar)` + margin-bottom: 20px; + `; + + export const PowerSyncLogo = styled('img')` + max-width: 250px; + max-height: 250px; + object-fit: contain; + padding: 20px; + `; +} diff --git a/frontend/src/app/views/sql-console/page.tsx b/frontend/src/app/views/sql-console/page.tsx new file mode 100644 index 0000000..a97f710 --- /dev/null +++ b/frontend/src/app/views/sql-console/page.tsx @@ -0,0 +1,105 @@ +import { NavigationPage } from '@/components/navigation/NavigationPage'; +import { Box, Button, Grid, TextField, styled } from '@mui/material'; +import { DataGrid } from '@mui/x-data-grid'; +import { useQuery } from '@powersync/react'; +import React from 'react'; + +export type LoginFormParams = { + email: string; + password: string; +}; + +const DEFAULT_QUERY = 'SELECT * FROM lists'; + +export default function SQLConsolePage() { + const inputRef = React.useRef(); + const [query, setQuery] = React.useState(DEFAULT_QUERY); + const { data: querySQLResult } = useQuery(query); + + const queryDataGridResult = React.useMemo(() => { + const firstItem = querySQLResult?.[0]; + + return { + columns: firstItem + ? Object.keys(firstItem).map((field) => ({ + field, + flex: 1 + })) + : [], + rows: querySQLResult + }; + }, [querySQLResult]); + + return ( + + + + + { + const inputValue = inputRef.current?.value; + if (e.key == 'Enter' && inputValue) { + setQuery(inputValue); + } + }} + /> + + + + + + + {queryDataGridResult ? ( + + {queryDataGridResult.columns ? ( + ({ ...r, id: r.id ?? index })) ?? []} + columns={queryDataGridResult.columns} + initialState={{ + pagination: { + paginationModel: { + pageSize: 20 + } + } + }} + pageSizeOptions={[20]} + disableRowSelectionOnClick + /> + ) : null} + + ) : null} + + + ); +} + +namespace S { + export const MainContainer = styled(Box)` + padding: 20px; + `; + + export const QueryResultContainer = styled(Box)` + margin-top: 40px; + `; + + export const CenteredGrid = styled(Grid)` + display: flex; + justify-content: center; + align-items: center; + `; +} diff --git a/frontend/src/app/views/todo-lists/edit/page.tsx b/frontend/src/app/views/todo-lists/edit/page.tsx new file mode 100644 index 0000000..a1a7244 --- /dev/null +++ b/frontend/src/app/views/todo-lists/edit/page.tsx @@ -0,0 +1,165 @@ +import { NavigationPage } from '@/components/navigation/NavigationPage'; +import { useConnector } from '@/components/providers/SystemProvider'; +import { TodoItemWidget } from '@/components/widgets/TodoItemWidget'; +import { LISTS_TABLE, TODOS_TABLE, TodoRecord } from '@/library/powersync/AppSchema'; +import AddIcon from '@mui/icons-material/Add'; +import { + Box, + Button, + CircularProgress, + Dialog, + DialogActions, + DialogContent, + DialogContentText, + DialogTitle, + List, + TextField, + Typography, + styled +} from '@mui/material'; +import Fab from '@mui/material/Fab'; +import { usePowerSync, useQuery } from '@powersync/react'; +import React, { Suspense } from 'react'; +import { useParams } from 'react-router-dom'; + +/** + * useSearchParams causes the entire element to fall back to client side rendering + * This is exposed as a separate React component in order to suspend its render + * and allow the root page to render on the server. + */ +const TodoEditSection = () => { + const powerSync = usePowerSync(); + const connector = useConnector(); + const { id: listID } = useParams(); + + const { data: [listRecord] } = useQuery<{ name: string }>( + `SELECT name FROM ${LISTS_TABLE} WHERE id = ? ORDER BY created_at`, + [listID] + ); + + const { data: todos } = useQuery( + `SELECT * FROM ${TODOS_TABLE} WHERE list_id=? ORDER BY created_at, id`, + [listID] + ); + + const [showPrompt, setShowPrompt] = React.useState(false); + const nameInputRef = React.createRef(); + + const toggleCompletion = async (record: TodoRecord, completed: boolean) => { + const updatedRecord = { ...record, completed: completed }; + if (completed) { + const userID = connector?.userId; + if (!userID) { + throw new Error(`Could not get user ID.`); + } + updatedRecord.completed_at = new Date().toISOString(); + updatedRecord.completed_by = userID; + } else { + updatedRecord.completed_at = null; + updatedRecord.completed_by = null; + } + await powerSync.execute( + `UPDATE ${TODOS_TABLE} + SET completed = ?, + completed_at = ?, + completed_by = ? + WHERE id = ?`, + [completed, updatedRecord.completed_at, updatedRecord.completed_by, record.id] + ); + }; + + const createNewTodo = async (description: string) => { + const userID = connector?.userId; + if (!userID) { + throw new Error(`Could not get user ID.`); + } + + await powerSync.execute( + `INSERT INTO + ${TODOS_TABLE} + (id, created_at, created_by, description, list_id, completed) + VALUES + (uuid(), datetime(), ?, ?, ?, ?)`, + [userID, description, listID!, false] + ); + }; + + const deleteTodo = async (id: string) => { + await powerSync.writeTransaction(async (tx) => { + await tx.execute(`DELETE FROM ${TODOS_TABLE} WHERE id = ?`, [id]); + }); + }; + + if (!listRecord) { + return ( + + No matching List found, please navigate back... + + ); + } + + return ( + + + setShowPrompt(true)}> + + + + + {todos.map((r) => ( + deleteTodo(r.id)} + isComplete={r.completed == 1} + toggleCompletion={() => toggleCompletion(r, !r.completed)} + /> + ))} + + + {/* TODO use a dialog service in future, this is just a simple example app */} +