diff --git a/.dev.vars.example b/.dev.vars.example new file mode 100644 index 0000000..be8e13e --- /dev/null +++ b/.dev.vars.example @@ -0,0 +1,3 @@ +ENVIRONMENT="dev" +SHARE_PORT=3333 +SHARE_MAX_SIZE_IN_MB=10 diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 02e24bb..0000000 --- a/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -root = true - -[*] -charset = utf-8 -end_of_line = lf -indent_size = 2 -indent_style = space -insert_final_newline = false -max_line_length = 120 -tab_width = 2 - -[.md] -indent_size = 4 -indent_style = tab - diff --git a/.gitignore b/.gitignore index de87a7b..82efdcf 100644 --- a/.gitignore +++ b/.gitignore @@ -167,7 +167,6 @@ dist .pnp.\* # wrangler project - .dev.vars .wrangler diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..af5adff --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +lint-staged \ No newline at end of file diff --git a/.idea/cloudflare-drop.iml b/.idea/cloudflare-drop.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/cloudflare-drop.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/git_toolbox_blame.xml b/.idea/git_toolbox_blame.xml new file mode 100644 index 0000000..7dc1249 --- /dev/null +++ b/.idea/git_toolbox_blame.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..639900d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..227d9ca --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index d843f34..35eb1dd 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,4 +1,6 @@ - + + + \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..44f067a --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +**/.* +dist +node_modules +/data/migrations +*.toml diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..00fbdb1 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "semi": false, + "singleQuote": true +} \ No newline at end of file diff --git a/data/drizzle.config.ts b/data/drizzle.config.ts new file mode 100644 index 0000000..247525e --- /dev/null +++ b/data/drizzle.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'drizzle-kit' + +export default defineConfig({ + schema: './data/schemas/*.schema.ts', + out: './data/migrations', + dialect: 'sqlite', +}) diff --git a/data/migrations/0000_military_gateway.sql b/data/migrations/0000_military_gateway.sql new file mode 100644 index 0000000..3d7055e --- /dev/null +++ b/data/migrations/0000_military_gateway.sql @@ -0,0 +1,8 @@ +CREATE TABLE `tasks` ( + `id` text PRIMARY KEY NOT NULL, + `name` text NOT NULL, + `slug` text NOT NULL, + `description` text, + `completed` integer DEFAULT false, + `due_date` integer +); diff --git a/data/migrations/0001_shocking_risque.sql b/data/migrations/0001_shocking_risque.sql new file mode 100644 index 0000000..aa95c8d --- /dev/null +++ b/data/migrations/0001_shocking_risque.sql @@ -0,0 +1,11 @@ +CREATE TABLE `files` ( + `id` text PRIMARY KEY NOT NULL, + `object_id` text NOT NULL, + `filename` text, + `type` text, + `hash` text NOT NULL, + `code` text NOT NULL, + `due_date` integer NOT NULL +); +--> statement-breakpoint +CREATE UNIQUE INDEX `files_code_unique` ON `files` (`code`); \ No newline at end of file diff --git a/data/migrations/meta/0000_snapshot.json b/data/migrations/meta/0000_snapshot.json new file mode 100644 index 0000000..348e5b3 --- /dev/null +++ b/data/migrations/meta/0000_snapshot.json @@ -0,0 +1,71 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "8478d988-2dea-452f-bade-9bb672920d97", + "prevId": "00000000-0000-0000-0000-000000000000", + "tables": { + "tasks": { + "name": "tasks", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "completed": { + "name": "completed", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "due_date": { + "name": "due_date", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/data/migrations/meta/0001_snapshot.json b/data/migrations/meta/0001_snapshot.json new file mode 100644 index 0000000..67877cf --- /dev/null +++ b/data/migrations/meta/0001_snapshot.json @@ -0,0 +1,138 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "b317b683-3017-4501-b7de-cedbe98e6142", + "prevId": "8478d988-2dea-452f-bade-9bb672920d97", + "tables": { + "files": { + "name": "files", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "object_id": { + "name": "object_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "filename": { + "name": "filename", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "type": { + "name": "type", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "hash": { + "name": "hash", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "code": { + "name": "code", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "due_date": { + "name": "due_date", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "files_code_unique": { + "name": "files_code_unique", + "columns": [ + "code" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "tasks": { + "name": "tasks", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "slug": { + "name": "slug", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "completed": { + "name": "completed", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "default": false + }, + "due_date": { + "name": "due_date", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/data/migrations/meta/_journal.json b/data/migrations/meta/_journal.json new file mode 100644 index 0000000..53549c0 --- /dev/null +++ b/data/migrations/meta/_journal.json @@ -0,0 +1,20 @@ +{ + "version": "7", + "dialect": "sqlite", + "entries": [ + { + "idx": 0, + "version": "6", + "when": 1736300515801, + "tag": "0000_military_gateway", + "breakpoints": true + }, + { + "idx": 1, + "version": "6", + "when": 1737452058197, + "tag": "0001_shocking_risque", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/data/schemas/files.schema.ts b/data/schemas/files.schema.ts new file mode 100644 index 0000000..426956b --- /dev/null +++ b/data/schemas/files.schema.ts @@ -0,0 +1,32 @@ +import { z } from 'zod' +import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core' +import { + createSelectSchema, + createInsertSchema, + createUpdateSchema, +} from 'drizzle-zod' +import { createId } from '@paralleldrive/cuid2' + +export const files = sqliteTable('files', { + id: text('id') + .primaryKey() + .$defaultFn(() => createId()), + objectId: text('object_id').notNull(), // 文件 id + filename: text('filename'), // 文件名 + type: text('type'), // 类型 + hash: text('hash').notNull(), // hash 值 + code: text('code').notNull().unique(), // 分享码 + due_date: integer('due_date', { mode: 'timestamp' }).notNull(), // 过期时间 +}) + +export const fileSelectSchema = createSelectSchema(files) + +export const fileInsertSchema = createInsertSchema(files) + +export const fileUpdateSchema = createUpdateSchema(files) + +export type SelectFileType = z.output + +export type InsertFileType = z.output + +export type UpdateFileType = z.output diff --git a/data/schemas/index.ts b/data/schemas/index.ts new file mode 100644 index 0000000..5a0c4d8 --- /dev/null +++ b/data/schemas/index.ts @@ -0,0 +1,2 @@ +export * from './tasks.schema' +export * from './files.schema' diff --git a/data/schemas/tasks.schema.ts b/data/schemas/tasks.schema.ts new file mode 100644 index 0000000..04bbd5c --- /dev/null +++ b/data/schemas/tasks.schema.ts @@ -0,0 +1,27 @@ +import { z } from 'zod' +import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core' +import { createSelectSchema, createInsertSchema, createUpdateSchema } from 'drizzle-zod' +import { createId } from '@paralleldrive/cuid2' + +export const tasks = sqliteTable('tasks', { + id: text('id') + .primaryKey() + .$defaultFn(() => createId()), + name: text('name').notNull(), + slug: text('slug').notNull(), + description: text('description'), + completed: integer('completed', { mode: 'boolean' }).default(false), + due_date: integer('due_date', { mode: 'timestamp' }), +}) + +export const taskSelectSchema = createSelectSchema(tasks) + +export const taskInsertSchema = createInsertSchema(tasks) + +export const taskUpdateSchema = createUpdateSchema(tasks) + +export type SelectTaskType = z.output + +export type InsertTaskType = z.output + +export type UpdateTaskType = z.output diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..4ee35c8 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,13 @@ +// @ts-check + +import eslint from '@eslint/js' +import tseslint from 'typescript-eslint' +import prettierConfig from 'eslint-config-prettier' + +export default [ + ...tseslint.config(eslint.configs.recommended, tseslint.configs.recommended), + { + ignores: ['**/.*', 'dist'], + }, + prettierConfig, +] diff --git a/index.html b/index.html index 0375a35..fdca544 100644 --- a/index.html +++ b/index.html @@ -1,13 +1,13 @@ - + Vite + Preact + TS - - -
- - + + +
+ + diff --git a/package.json b/package.json index 0d13718..2657022 100644 --- a/package.json +++ b/package.json @@ -1,35 +1,74 @@ { - "name": "cloudflare-workers-openapi", - "version": "0.0.1", - "private": true, - "type": "module", - "scripts": { - "predeploy": "npm run build:web", - "deploy": "wrangler deploy --env staging", + "name": "cloudflare-drop", + "version": "0.0.1", + "private": true, + "type": "module", + "scripts": { + "generate": "drizzle-kit generate --config data/drizzle.config.ts", + "predeploy": "npm run build:web && npm run generate && wrangler d1 migrations apply airdrop --remote", + "deploy": "wrangler deploy --env staging", + "prestart": "cat .dev.vars > .env.local && npm run generate && yes | wrangler d1 migrations apply airdrop --local", "start": "concurrently \"npm run dev:web\" \"npm run dev:app\"", - "dev:app": "wrangler dev", - "dev:web": "vite", - "build:web": "tsc -b ./tsconfig.web.json && vite build", - "cf-typegen": "wrangler types" - }, - "dependencies": { - "chanfana": "^2.0.2", - "hono": "^4.4.7", - "preact": "^10.25.3", - "zod": "^3.23.8" - }, - "devDependencies": { - "@cloudflare/workers-types": "^4.20241230.0", - "@preact/preset-vite": "^2.9.3", - "@types/node": "20.8.3", - "@types/service-worker-mock": "^2.0.1", - "concurrently": "^9.1.2", - "typescript": "~5.6.2", - "vite": "^6.0.5", - "wrangler": "^3.60.3" - }, - "volta": { - "node": "20.18.1", - "pnpm": "9.15.3" - } + "dev:app": "wrangler dev", + "dev:web": "vite", + "build:web": "tsc -b ./tsconfig.web.json && vite build", + "cf-typegen": "wrangler types", + "lint": "prettier . --write && eslint . --fix", + "prepare": "husky" + }, + "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@hono/zod-openapi": "^0.18.3", + "@mui/icons-material": "^6.3.1", + "@mui/lab": "6.0.0-beta.22", + "@mui/material": "^6.3.1", + "@paralleldrive/cuid2": "^2.2.2", + "@toolpad/core": "^0.12.0", + "chanfana": "^2.6.3", + "dayjs": "^1.11.13", + "drizzle-orm": "^0.38.3", + "drizzle-zod": "^0.6.1", + "hono": "^4.4.7", + "mime": "^4.0.6", + "mobx": "^6.13.5", + "mobx-react-lite": "^4.1.0", + "preact": "^10.25.3", + "qrcode-svg": "^1.1.0", + "zod": "^3.24.1" + }, + "devDependencies": { + "@babel/plugin-proposal-decorators": "^7.25.9", + "@cloudflare/workers-types": "^4.20241230.0", + "@eslint/js": "^9.18.0", + "@preact/preset-vite": "^2.9.3", + "@types/node": "20.8.3", + "@types/qrcode-svg": "^1.1.5", + "@types/react-copy-to-clipboard": "^5.0.7", + "@types/service-worker-mock": "^2.0.1", + "autoprefixer": "^10.4.20", + "concurrently": "^9.1.2", + "drizzle-kit": "^0.30.1", + "eslint": "^9.18.0", + "eslint-config-prettier": "^10.0.1", + "husky": "^9.1.7", + "lint-staged": "^15.4.1", + "postcss": "^8.4.49", + "prettier": "3.4.2", + "tailwindcss": "^3.4.17", + "typescript": "^5.7.3", + "typescript-eslint": "^8.21.0", + "vite": "^6.0.5", + "wrangler": "^3.100.0" + }, + "volta": { + "node": "20.18.1", + "pnpm": "9.15.3" + }, + "lint-staged": { + "*": [ + "prettier --write", + "eslint --fix --no-warn-ignored" + ] + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c2f8e2d..a1152b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,1077 +5,4207 @@ settings: excludeLinksFromLockfile: false importers: - .: dependencies: + '@emotion/react': + specifier: ^11.14.0 + version: 11.14.0(@types/react@19.0.4)(react@19.0.0) + '@emotion/styled': + specifier: ^11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0) + '@hono/zod-openapi': + specifier: ^0.18.3 + version: 0.18.3(hono@4.6.16)(zod@3.24.1) + '@mui/icons-material': + specifier: ^6.3.1 + version: 6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.4)(react@19.0.0) + '@mui/lab': + specifier: 6.0.0-beta.22 + version: 6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/material': + specifier: ^6.3.1 + version: 6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@paralleldrive/cuid2': + specifier: ^2.2.2 + version: 2.2.2 + '@toolpad/core': + specifier: ^0.12.0 + version: 0.12.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@mui/icons-material@6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(vite@6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0)) chanfana: - specifier: ^2.0.2 - version: 2.5.2 + specifier: ^2.6.3 + version: 2.6.3 + dayjs: + specifier: ^1.11.13 + version: 1.11.13 + drizzle-orm: + specifier: ^0.38.3 + version: 0.38.3(@cloudflare/workers-types@4.20241230.0)(@types/react@19.0.4)(react@19.0.0) + drizzle-zod: + specifier: ^0.6.1 + version: 0.6.1(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@types/react@19.0.4)(react@19.0.0))(zod@3.24.1) hono: specifier: ^4.4.7 version: 4.6.16 + mime: + specifier: ^4.0.6 + version: 4.0.6 + mobx: + specifier: ^6.13.5 + version: 6.13.5 + mobx-react-lite: + specifier: ^4.1.0 + version: 4.1.0(mobx@6.13.5)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) preact: specifier: ^10.25.3 version: 10.25.4 + qrcode-svg: + specifier: ^1.1.0 + version: 1.1.0 zod: - specifier: ^3.23.8 + specifier: ^3.24.1 version: 3.24.1 devDependencies: + '@babel/plugin-proposal-decorators': + specifier: ^7.25.9 + version: 7.25.9(@babel/core@7.26.0) '@cloudflare/workers-types': specifier: ^4.20241230.0 version: 4.20241230.0 + '@eslint/js': + specifier: ^9.18.0 + version: 9.18.0 '@preact/preset-vite': specifier: ^2.9.3 - version: 2.9.4(@babel/core@7.26.0)(preact@10.25.4)(vite@6.0.7(@types/node@20.8.3)(yaml@2.7.0)) + version: 2.9.4(@babel/core@7.26.0)(preact@10.25.4)(vite@6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0)) '@types/node': specifier: 20.8.3 version: 20.8.3 + '@types/qrcode-svg': + specifier: ^1.1.5 + version: 1.1.5 + '@types/react-copy-to-clipboard': + specifier: ^5.0.7 + version: 5.0.7 '@types/service-worker-mock': specifier: ^2.0.1 version: 2.0.4 + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.49) concurrently: specifier: ^9.1.2 version: 9.1.2 + drizzle-kit: + specifier: ^0.30.1 + version: 0.30.1 + eslint: + specifier: ^9.18.0 + version: 9.18.0(jiti@1.21.7) + eslint-config-prettier: + specifier: ^10.0.1 + version: 10.0.1(eslint@9.18.0(jiti@1.21.7)) + husky: + specifier: ^9.1.7 + version: 9.1.7 + lint-staged: + specifier: ^15.4.1 + version: 15.4.1 + postcss: + specifier: ^8.4.49 + version: 8.4.49 + prettier: + specifier: 3.4.2 + version: 3.4.2 + tailwindcss: + specifier: ^3.4.17 + version: 3.4.17 typescript: - specifier: ~5.6.2 - version: 5.6.3 + specifier: ^5.7.3 + version: 5.7.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) vite: specifier: ^6.0.5 - version: 6.0.7(@types/node@20.8.3)(yaml@2.7.0) + version: 6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0) wrangler: - specifier: ^3.60.3 - version: 3.99.0(@cloudflare/workers-types@4.20241230.0) + specifier: ^3.100.0 + version: 3.100.0(@cloudflare/workers-types@4.20241230.0) packages: + '@alloc/quick-lru@5.2.0': + resolution: + { + integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==, + } + engines: { node: '>=10' } '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==, + } + engines: { node: '>=6.0.0' } '@asteasolutions/zod-to-openapi@7.3.0': - resolution: {integrity: sha512-7tE/r1gXwMIvGnXVUdIqUhCU1RevEFC4Jk6Bussa0fk1ecbnnINkZzj1EOAJyE/M3AI25DnHT/zKQL1/FPFi8Q==} + resolution: + { + integrity: sha512-7tE/r1gXwMIvGnXVUdIqUhCU1RevEFC4Jk6Bussa0fk1ecbnnINkZzj1EOAJyE/M3AI25DnHT/zKQL1/FPFi8Q==, + } peerDependencies: zod: ^3.20.2 '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==, + } + engines: { node: '>=6.9.0' } '@babel/compat-data@7.26.3': - resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==, + } + engines: { node: '>=6.9.0' } '@babel/core@7.26.0': - resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==, + } + engines: { node: '>=6.9.0' } '@babel/generator@7.26.3': - resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==, + } + engines: { node: '>=6.9.0' } + + '@babel/generator@7.26.5': + resolution: + { + integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==, + } + engines: { node: '>=6.9.0' } '@babel/helper-annotate-as-pure@7.25.9': - resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==, + } + engines: { node: '>=6.9.0' } '@babel/helper-compilation-targets@7.25.9': - resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: + { + integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: + { + integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==, + } + engines: { node: '>=6.9.0' } '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==, + } + engines: { node: '>=6.9.0' } '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.25.9': + resolution: + { + integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==, + } + engines: { node: '>=6.9.0' } + '@babel/helper-plugin-utils@7.25.9': - resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==, + } + engines: { node: '>=6.9.0' } + + '@babel/helper-replace-supers@7.26.5': + resolution: + { + integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: + { + integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==, + } + engines: { node: '>=6.9.0' } '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==, + } + engines: { node: '>=6.9.0' } '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==, + } + engines: { node: '>=6.9.0' } '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==, + } + engines: { node: '>=6.9.0' } '@babel/helpers@7.26.0': - resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==, + } + engines: { node: '>=6.9.0' } '@babel/parser@7.26.3': - resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==, + } + engines: { node: '>=6.0.0' } hasBin: true + '@babel/parser@7.26.5': + resolution: + { + integrity: sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==, + } + engines: { node: '>=6.0.0' } + hasBin: true + + '@babel/plugin-proposal-decorators@7.25.9': + resolution: + { + integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-decorators@7.25.9': + resolution: + { + integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.25.9': - resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-react-jsx-development@7.25.9': - resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-self@7.25.9': + resolution: + { + integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==, + } + engines: { node: '>=6.9.0' } + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.25.9': + resolution: + { + integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-transform-react-jsx@7.25.9': - resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/runtime@7.26.0': + resolution: + { + integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==, + } + engines: { node: '>=6.9.0' } + '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==, + } + engines: { node: '>=6.9.0' } '@babel/traverse@7.26.4': - resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==, + } + engines: { node: '>=6.9.0' } + + '@babel/traverse@7.26.5': + resolution: + { + integrity: sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==, + } + engines: { node: '>=6.9.0' } '@babel/types@7.26.3': - resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==, + } + engines: { node: '>=6.9.0' } + + '@babel/types@7.26.5': + resolution: + { + integrity: sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==, + } + engines: { node: '>=6.9.0' } '@cloudflare/kv-asset-handler@0.3.4': - resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==} - engines: {node: '>=16.13'} - - '@cloudflare/workerd-darwin-64@1.20241218.0': - resolution: {integrity: sha512-8rveQoxtUvlmORKqTWgjv2ycM8uqWox0u9evn3zd2iWKdou5sncFwH517ZRLI3rq9P31ZLmCQBZ0gloFsTeY6w==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==, + } + engines: { node: '>=16.13' } + + '@cloudflare/workerd-darwin-64@1.20241230.0': + resolution: + { + integrity: sha512-BZHLg4bbhNQoaY1Uan81O3FV/zcmWueC55juhnaI7NAobiQth9RppadPNpxNAmS9fK2mR5z8xrwMQSQrHmztyQ==, + } + engines: { node: '>=16' } cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20241218.0': - resolution: {integrity: sha512-be59Ad9nmM9lCkhHqmTs/uZ3JVZt8NJ9Z0PY+B0xnc5z6WwmV2lj0RVLtq7xJhQsQJA189zt5rXqDP6J+2mu7Q==} - engines: {node: '>=16'} + '@cloudflare/workerd-darwin-arm64@1.20241230.0': + resolution: + { + integrity: sha512-lllxycj7EzYoJ0VOJh8M3palUgoonVrILnzGrgsworgWlIpgjfXGS7b41tEGCw6AxSxL9prmTIGtfSPUvn/rjg==, + } + engines: { node: '>=16' } cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20241218.0': - resolution: {integrity: sha512-MzpSBcfZXRxrYWxQ4pVDYDrUbkQuM62ssl4ZtHH8J35OAeGsWFAYji6MkS2SpVwVcvacPwJXIF4JSzp4xKImKw==} - engines: {node: '>=16'} + '@cloudflare/workerd-linux-64@1.20241230.0': + resolution: + { + integrity: sha512-Y3mHcW0KghOmWdNZyHYpEOG4Ba/ga8tht5vj1a+WXfagEjMO8Y98XhZUlCaYa9yB7Wh5jVcK5LM2jlO/BLgqpA==, + } + engines: { node: '>=16' } cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20241218.0': - resolution: {integrity: sha512-RIuJjPxpNqvwIs52vQsXeRMttvhIjgg9NLjjFa3jK8Ijnj8c3ZDru9Wqi48lJP07yDFIRr4uDMMqh/y29YQi2A==} - engines: {node: '>=16'} + '@cloudflare/workerd-linux-arm64@1.20241230.0': + resolution: + { + integrity: sha512-IAjhsWPlHzhhkJ6I49sDG6XfMnhPvv0szKGXxTWQK/IWMrbGdHm4RSfNKBSoLQm67jGMIzbmcrX9UIkms27Y1g==, + } + engines: { node: '>=16' } cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20241218.0': - resolution: {integrity: sha512-tO1VjlvK3F6Yb2d1jgEy/QBYl//9Pyv3K0j+lq8Eu7qdfm0IgKwSRgDWLept84/qmNsQfausZ4JdNGxTf9xsxQ==} - engines: {node: '>=16'} + '@cloudflare/workerd-windows-64@1.20241230.0': + resolution: + { + integrity: sha512-y5SPIk9iOb2gz+yWtHxoeMnjPnkYQswiCJ480oHC6zexnJLlKTpcmBCjDH1nWCT4pQi8F25gaH8thgElf4NvXQ==, + } + engines: { node: '>=16' } cpu: [x64] os: [win32] '@cloudflare/workers-types@4.20241230.0': - resolution: {integrity: sha512-dtLD4jY35Lb750cCVyO1i/eIfdZJg2Z0i+B1RYX6BVeRPlgaHx/H18ImKAkYmy0g09Ow8R2jZy3hIxMgXun0WQ==} + resolution: + { + integrity: sha512-dtLD4jY35Lb750cCVyO1i/eIfdZJg2Z0i+B1RYX6BVeRPlgaHx/H18ImKAkYmy0g09Ow8R2jZy3hIxMgXun0WQ==, + } '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, + } + engines: { node: '>=12' } + + '@drizzle-team/brocli@0.10.2': + resolution: + { + integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==, + } + + '@emotion/babel-plugin@11.13.5': + resolution: + { + integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==, + } + + '@emotion/cache@11.14.0': + resolution: + { + integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==, + } + + '@emotion/hash@0.9.2': + resolution: + { + integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==, + } + + '@emotion/is-prop-valid@1.3.1': + resolution: + { + integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==, + } + + '@emotion/memoize@0.9.0': + resolution: + { + integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==, + } + + '@emotion/react@11.14.0': + resolution: + { + integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==, + } + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.3': + resolution: + { + integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==, + } + + '@emotion/sheet@1.4.0': + resolution: + { + integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==, + } + + '@emotion/styled@11.14.0': + resolution: + { + integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==, + } + 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.2.0': + resolution: + { + integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==, + } + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.2': + resolution: + { + integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==, + } + + '@emotion/weak-memoize@0.4.0': + resolution: + { + integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==, + } + + '@esbuild-kit/core-utils@3.3.2': + resolution: + { + integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==, + } + + '@esbuild-kit/esm-loader@2.6.5': + resolution: + { + integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==, + } '@esbuild-plugins/node-globals-polyfill@0.2.3': - resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} + resolution: + { + integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==, + } peerDependencies: esbuild: '*' '@esbuild-plugins/node-modules-polyfill@0.2.2': - resolution: {integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==} + resolution: + { + integrity: sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==, + } peerDependencies: esbuild: '*' + '@esbuild/aix-ppc64@0.19.12': + resolution: + { + integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==, + } + engines: { node: '>=12' } + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.24.2': - resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==, + } + engines: { node: '>=18' } cpu: [ppc64] os: [aix] '@esbuild/android-arm64@0.17.19': - resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==, + } + engines: { node: '>=12' } + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.18.20': + resolution: + { + integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==, + } + engines: { node: '>=12' } + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.19.12': + resolution: + { + integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==, + } + engines: { node: '>=12' } cpu: [arm64] os: [android] '@esbuild/android-arm64@0.24.2': - resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==, + } + engines: { node: '>=18' } cpu: [arm64] os: [android] '@esbuild/android-arm@0.17.19': - resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==, + } + engines: { node: '>=12' } + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.18.20': + resolution: + { + integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==, + } + engines: { node: '>=12' } + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.19.12': + resolution: + { + integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==, + } + engines: { node: '>=12' } cpu: [arm] os: [android] '@esbuild/android-arm@0.24.2': - resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==, + } + engines: { node: '>=18' } cpu: [arm] os: [android] '@esbuild/android-x64@0.17.19': - resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.18.20': + resolution: + { + integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.19.12': + resolution: + { + integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==, + } + engines: { node: '>=12' } cpu: [x64] os: [android] '@esbuild/android-x64@0.24.2': - resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==, + } + engines: { node: '>=18' } cpu: [x64] os: [android] '@esbuild/darwin-arm64@0.17.19': - resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==, + } + engines: { node: '>=12' } + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.18.20': + resolution: + { + integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==, + } + engines: { node: '>=12' } + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.19.12': + resolution: + { + integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==, + } + engines: { node: '>=12' } cpu: [arm64] os: [darwin] '@esbuild/darwin-arm64@0.24.2': - resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==, + } + engines: { node: '>=18' } cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.17.19': - resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.18.20': + resolution: + { + integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.19.12': + resolution: + { + integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==, + } + engines: { node: '>=12' } cpu: [x64] os: [darwin] '@esbuild/darwin-x64@0.24.2': - resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==, + } + engines: { node: '>=18' } cpu: [x64] os: [darwin] '@esbuild/freebsd-arm64@0.17.19': - resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==, + } + engines: { node: '>=12' } + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.18.20': + resolution: + { + integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==, + } + engines: { node: '>=12' } + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.19.12': + resolution: + { + integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==, + } + engines: { node: '>=12' } cpu: [arm64] os: [freebsd] '@esbuild/freebsd-arm64@0.24.2': - resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==, + } + engines: { node: '>=18' } cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.17.19': - resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.18.20': + resolution: + { + integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.19.12': + resolution: + { + integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==, + } + engines: { node: '>=12' } cpu: [x64] os: [freebsd] '@esbuild/freebsd-x64@0.24.2': - resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==, + } + engines: { node: '>=18' } cpu: [x64] os: [freebsd] '@esbuild/linux-arm64@0.17.19': - resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==, + } + engines: { node: '>=12' } + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.18.20': + resolution: + { + integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==, + } + engines: { node: '>=12' } + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.19.12': + resolution: + { + integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==, + } + engines: { node: '>=12' } cpu: [arm64] os: [linux] '@esbuild/linux-arm64@0.24.2': - resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==, + } + engines: { node: '>=18' } cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.17.19': - resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==, + } + engines: { node: '>=12' } + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.18.20': + resolution: + { + integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==, + } + engines: { node: '>=12' } + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.19.12': + resolution: + { + integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==, + } + engines: { node: '>=12' } cpu: [arm] os: [linux] '@esbuild/linux-arm@0.24.2': - resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==, + } + engines: { node: '>=18' } cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.17.19': - resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==, + } + engines: { node: '>=12' } + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.18.20': + resolution: + { + integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==, + } + engines: { node: '>=12' } + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.19.12': + resolution: + { + integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==, + } + engines: { node: '>=12' } cpu: [ia32] os: [linux] '@esbuild/linux-ia32@0.24.2': - resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==, + } + engines: { node: '>=18' } cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.17.19': - resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==, + } + engines: { node: '>=12' } + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.18.20': + resolution: + { + integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==, + } + engines: { node: '>=12' } + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.19.12': + resolution: + { + integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==, + } + engines: { node: '>=12' } cpu: [loong64] os: [linux] '@esbuild/linux-loong64@0.24.2': - resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==, + } + engines: { node: '>=18' } cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.17.19': - resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==, + } + engines: { node: '>=12' } + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.18.20': + resolution: + { + integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==, + } + engines: { node: '>=12' } + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.19.12': + resolution: + { + integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==, + } + engines: { node: '>=12' } cpu: [mips64el] os: [linux] '@esbuild/linux-mips64el@0.24.2': - resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==, + } + engines: { node: '>=18' } cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.17.19': - resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==, + } + engines: { node: '>=12' } + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.18.20': + resolution: + { + integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==, + } + engines: { node: '>=12' } + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.19.12': + resolution: + { + integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==, + } + engines: { node: '>=12' } cpu: [ppc64] os: [linux] '@esbuild/linux-ppc64@0.24.2': - resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==, + } + engines: { node: '>=18' } cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.17.19': - resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==, + } + engines: { node: '>=12' } + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.18.20': + resolution: + { + integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==, + } + engines: { node: '>=12' } + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.19.12': + resolution: + { + integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==, + } + engines: { node: '>=12' } cpu: [riscv64] os: [linux] '@esbuild/linux-riscv64@0.24.2': - resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==, + } + engines: { node: '>=18' } cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.17.19': - resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==, + } + engines: { node: '>=12' } + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.18.20': + resolution: + { + integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==, + } + engines: { node: '>=12' } + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.19.12': + resolution: + { + integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==, + } + engines: { node: '>=12' } cpu: [s390x] os: [linux] '@esbuild/linux-s390x@0.24.2': - resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==, + } + engines: { node: '>=18' } cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.17.19': - resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.18.20': + resolution: + { + integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.19.12': + resolution: + { + integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==, + } + engines: { node: '>=12' } cpu: [x64] os: [linux] '@esbuild/linux-x64@0.24.2': - resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==, + } + engines: { node: '>=18' } cpu: [x64] os: [linux] '@esbuild/netbsd-arm64@0.24.2': - resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==, + } + engines: { node: '>=18' } cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.17.19': - resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.18.20': + resolution: + { + integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.19.12': + resolution: + { + integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==, + } + engines: { node: '>=12' } cpu: [x64] os: [netbsd] '@esbuild/netbsd-x64@0.24.2': - resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==, + } + engines: { node: '>=18' } cpu: [x64] os: [netbsd] '@esbuild/openbsd-arm64@0.24.2': - resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==, + } + engines: { node: '>=18' } cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.17.19': - resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.18.20': + resolution: + { + integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.19.12': + resolution: + { + integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==, + } + engines: { node: '>=12' } cpu: [x64] os: [openbsd] '@esbuild/openbsd-x64@0.24.2': - resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==, + } + engines: { node: '>=18' } cpu: [x64] os: [openbsd] '@esbuild/sunos-x64@0.17.19': - resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.18.20': + resolution: + { + integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.19.12': + resolution: + { + integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==, + } + engines: { node: '>=12' } cpu: [x64] os: [sunos] '@esbuild/sunos-x64@0.24.2': - resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==, + } + engines: { node: '>=18' } cpu: [x64] os: [sunos] '@esbuild/win32-arm64@0.17.19': - resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==, + } + engines: { node: '>=12' } + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.18.20': + resolution: + { + integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==, + } + engines: { node: '>=12' } + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.19.12': + resolution: + { + integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==, + } + engines: { node: '>=12' } cpu: [arm64] os: [win32] '@esbuild/win32-arm64@0.24.2': - resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==, + } + engines: { node: '>=18' } cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.17.19': - resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==, + } + engines: { node: '>=12' } + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.18.20': + resolution: + { + integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==, + } + engines: { node: '>=12' } + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.19.12': + resolution: + { + integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==, + } + engines: { node: '>=12' } cpu: [ia32] os: [win32] '@esbuild/win32-ia32@0.24.2': - resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==, + } + engines: { node: '>=18' } cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.17.19': - resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.18.20': + resolution: + { + integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==, + } + engines: { node: '>=12' } + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.19.12': + resolution: + { + integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==, + } + engines: { node: '>=12' } cpu: [x64] os: [win32] '@esbuild/win32-x64@0.24.2': - resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==, + } + engines: { node: '>=18' } cpu: [x64] os: [win32] + '@eslint-community/eslint-utils@4.4.1': + resolution: + { + integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: + { + integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + + '@eslint/config-array@0.19.1': + resolution: + { + integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/core@0.10.0': + resolution: + { + integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/eslintrc@3.2.0': + resolution: + { + integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/js@9.18.0': + resolution: + { + integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/object-schema@2.1.5': + resolution: + { + integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@eslint/plugin-kit@0.2.5': + resolution: + { + integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==, + } + engines: { node: '>=14' } + + '@floating-ui/core@1.6.9': + resolution: + { + integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==, + } + + '@floating-ui/dom@1.6.13': + resolution: + { + integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==, + } + + '@floating-ui/react-dom@2.1.2': + resolution: + { + integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==, + } + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.9': + resolution: + { + integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==, + } + + '@hono/zod-openapi@0.18.3': + resolution: + { + integrity: sha512-bNlRDODnp7P9Fs13ZPajEOt13G0XwXKfKRHMEFCphQsFiD1Y+twzHaglpNAhNcflzR1DQwHY92ZS06b4LTPbIQ==, + } + engines: { node: '>=16.0.0' } + peerDependencies: + hono: '>=4.3.6' + zod: 3.* + + '@hono/zod-validator@0.4.2': + resolution: + { + integrity: sha512-1rrlBg+EpDPhzOV4hT9pxr5+xDVmKuz6YJl+la7VCwK6ass5ldyKm5fD+umJdV2zhHD6jROoCCv8NbTwyfhT0g==, + } + peerDependencies: + hono: '>=3.9.0' + zod: ^3.19.1 + + '@humanfs/core@0.19.1': + resolution: + { + integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==, + } + engines: { node: '>=18.18.0' } + + '@humanfs/node@0.16.6': + resolution: + { + integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==, + } + engines: { node: '>=18.18.0' } + + '@humanwhocodes/module-importer@1.0.1': + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, + } + engines: { node: '>=12.22' } + + '@humanwhocodes/retry@0.3.1': + resolution: + { + integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==, + } + engines: { node: '>=18.18' } + + '@humanwhocodes/retry@0.4.1': + resolution: + { + integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==, + } + engines: { node: '>=18.18' } + + '@isaacs/cliui@8.0.2': + resolution: + { + integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, + } + engines: { node: '>=12' } '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==, + } + engines: { node: '>=6.0.0' } '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} + 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'} + resolution: + { + integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==, + } + engines: { node: '>=6.0.0' } '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + resolution: + { + integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==, + } '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + resolution: + { + integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==, + } '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + resolution: + { + integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, + } + + '@mui/base@5.0.0-beta.68': + resolution: + { + integrity: sha512-F1JMNeLS9Qhjj3wN86JUQYBtJoXyQvknxlzwNl6eS0ZABo1MiohMONj3/WQzYPSXIKC2bS/ZbyBzdHhi2GnEpA==, + } + engines: { node: '>=14.0.0' } + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/core-downloads-tracker@6.3.1': + resolution: + { + integrity: sha512-2OmnEyoHpj5//dJJpMuxOeLItCCHdf99pjMFfUFdBteCunAK9jW+PwEo4mtdGcLs7P+IgZ+85ypd52eY4AigoQ==, + } + + '@mui/icons-material@6.3.1': + resolution: + { + integrity: sha512-nJmWj1PBlwS3t1PnoqcixIsftE+7xrW3Su7f0yrjPw4tVjYrgkhU0hrRp+OlURfZ3ptdSkoBkalee9Bhf1Erfw==, + } + engines: { node: '>=14.0.0' } + peerDependencies: + '@mui/material': ^6.3.1 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/lab@6.0.0-beta.22': + resolution: + { + integrity: sha512-9nwUfBj+UzoQJOCbqV+JcCSJ74T+gGWrM1FMlXzkahtYUcMN+5Zmh2ArlttW3zv2dZyCzp7K5askcnKF0WzFQg==, + } + engines: { node: '>=14.0.0' } + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@mui/material': ^6.3.1 + '@mui/material-pigment-css': ^6.3.1 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/material-pigment-css': + optional: true + '@types/react': + optional: true + + '@mui/material@6.3.1': + resolution: + { + integrity: sha512-ynG9ayhxgCsHJ/dtDcT1v78/r2GwQyP3E0hPz3GdPRl0uFJz/uUTtI5KFYwadXmbC+Uv3bfB8laZ6+Cpzh03gA==, + } + engines: { node: '>=14.0.0' } + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@mui/material-pigment-css': ^6.3.1 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/material-pigment-css': + optional: true + '@types/react': + optional: true + + '@mui/private-theming@6.3.1': + resolution: + { + integrity: sha512-g0u7hIUkmXmmrmmf5gdDYv9zdAig0KoxhIQn1JN8IVqApzf/AyRhH3uDGx5mSvs8+a1zb4+0W6LC260SyTTtdQ==, + } + engines: { node: '>=14.0.0' } + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/styled-engine@6.3.1': + resolution: + { + integrity: sha512-/7CC0d2fIeiUxN5kCCwYu4AWUDd9cCTxWCyo0v/Rnv6s8uk6hWgJC3VLZBoDENBHf/KjqDZuYJ2CR+7hD6QYww==, + } + engines: { node: '>=14.0.0' } + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + + '@mui/system@6.3.1': + resolution: + { + integrity: sha512-AwqQ3EAIT2np85ki+N15fF0lFXX1iFPqenCzVOSl3QXKy2eifZeGd9dGtt7pGMoFw5dzW4dRGGzRpLAq9rkl7A==, + } + engines: { node: '>=14.0.0' } + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + + '@mui/types@7.2.21': + resolution: + { + integrity: sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww==, + } + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/utils@6.3.1': + resolution: + { + integrity: sha512-sjGjXAngoio6lniQZKJ5zGfjm+LD2wvLwco7FbKe1fu8A7VIFmz2SwkLb+MDPLNX1lE7IscvNNyh1pobtZg2tw==, + } + engines: { node: '>=14.0.0' } + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@noble/hashes@1.7.0': + resolution: + { + integrity: sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==, + } + engines: { node: ^14.21.3 || >=16 } + + '@nodelib/fs.scandir@2.1.5': + resolution: { integrity: sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U= } + engines: { node: '>= 8' } + + '@nodelib/fs.stat@2.0.5': + resolution: { integrity: sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos= } + engines: { node: '>= 8' } + + '@nodelib/fs.walk@1.2.8': + resolution: { integrity: sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po= } + engines: { node: '>= 8' } + + '@paralleldrive/cuid2@2.2.2': + resolution: + { + integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==, + } + + '@pkgjs/parseargs@0.11.0': + resolution: + { + integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, + } + engines: { node: '>=14' } + + '@popperjs/core@2.11.8': + resolution: + { + integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==, + } '@preact/preset-vite@2.9.4': - resolution: {integrity: sha512-PpPnUlKUsbWZ2oBuAkAMnezhIYGsR7xi2EZcPjeTAjF1DhGl00IcPD1ZeXRFKp38i7Hk4kEdFlwpJ1525cAzpg==} + resolution: + { + integrity: sha512-PpPnUlKUsbWZ2oBuAkAMnezhIYGsR7xi2EZcPjeTAjF1DhGl00IcPD1ZeXRFKp38i7Hk4kEdFlwpJ1525cAzpg==, + } peerDependencies: '@babel/core': 7.x vite: 2.x || 3.x || 4.x || 5.x || 6.x '@prefresh/babel-plugin@0.5.1': - resolution: {integrity: sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==} + resolution: + { + integrity: sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==, + } '@prefresh/core@1.5.3': - resolution: {integrity: sha512-nDzxj0tA1/M6APNAWqaxkZ+3sTdPHESa+gol4+Bw7rMc2btWdkLoNH7j9rGhUb8SThC0Vz0VoXtq+U+9azGLHg==} + resolution: + { + integrity: sha512-nDzxj0tA1/M6APNAWqaxkZ+3sTdPHESa+gol4+Bw7rMc2btWdkLoNH7j9rGhUb8SThC0Vz0VoXtq+U+9azGLHg==, + } peerDependencies: preact: ^10.0.0 '@prefresh/utils@1.2.0': - resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==} + resolution: + { + integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==, + } '@prefresh/vite@2.4.6': - resolution: {integrity: sha512-miYbTl2J1YNaQJWyWHJzyIpNh7vKUuXC1qCDRzPeWjhQ+9bxeXkUBGDGd9I1f37R5GQYi1S65AN5oR0BR2WzvQ==} + resolution: + { + integrity: sha512-miYbTl2J1YNaQJWyWHJzyIpNh7vKUuXC1qCDRzPeWjhQ+9bxeXkUBGDGd9I1f37R5GQYi1S65AN5oR0BR2WzvQ==, + } peerDependencies: preact: ^10.4.0 vite: '>=2.0.0' '@rollup/pluginutils@4.2.1': - resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} - engines: {node: '>= 8.0.0'} + resolution: + { + integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==, + } + engines: { node: '>= 8.0.0' } '@rollup/rollup-android-arm-eabi@4.30.0': - resolution: {integrity: sha512-qFcFto9figFLz2g25DxJ1WWL9+c91fTxnGuwhToCl8BaqDsDYMl/kOnBXAyAqkkzAWimYMSWNPWEjt+ADAHuoQ==} + resolution: + { + integrity: sha512-qFcFto9figFLz2g25DxJ1WWL9+c91fTxnGuwhToCl8BaqDsDYMl/kOnBXAyAqkkzAWimYMSWNPWEjt+ADAHuoQ==, + } cpu: [arm] os: [android] '@rollup/rollup-android-arm64@4.30.0': - resolution: {integrity: sha512-vqrQdusvVl7dthqNjWCL043qelBK+gv9v3ZiqdxgaJvmZyIAAXMjeGVSqZynKq69T7062T5VrVTuikKSAAVP6A==} + resolution: + { + integrity: sha512-vqrQdusvVl7dthqNjWCL043qelBK+gv9v3ZiqdxgaJvmZyIAAXMjeGVSqZynKq69T7062T5VrVTuikKSAAVP6A==, + } cpu: [arm64] os: [android] '@rollup/rollup-darwin-arm64@4.30.0': - resolution: {integrity: sha512-617pd92LhdA9+wpixnzsyhVft3szYiN16aNUMzVkf2N+yAk8UXY226Bfp36LvxYTUt7MO/ycqGFjQgJ0wlMaWQ==} + resolution: + { + integrity: sha512-617pd92LhdA9+wpixnzsyhVft3szYiN16aNUMzVkf2N+yAk8UXY226Bfp36LvxYTUt7MO/ycqGFjQgJ0wlMaWQ==, + } cpu: [arm64] os: [darwin] '@rollup/rollup-darwin-x64@4.30.0': - resolution: {integrity: sha512-Y3b4oDoaEhCypg8ajPqigKDcpi5ZZovemQl9Edpem0uNv6UUjXv7iySBpGIUTSs2ovWOzYpfw9EbFJXF/fJHWw==} + resolution: + { + integrity: sha512-Y3b4oDoaEhCypg8ajPqigKDcpi5ZZovemQl9Edpem0uNv6UUjXv7iySBpGIUTSs2ovWOzYpfw9EbFJXF/fJHWw==, + } cpu: [x64] os: [darwin] '@rollup/rollup-freebsd-arm64@4.30.0': - resolution: {integrity: sha512-3REQJ4f90sFIBfa0BUokiCdrV/E4uIjhkWe1bMgCkhFXbf4D8YN6C4zwJL881GM818qVYE9BO3dGwjKhpo2ABA==} + resolution: + { + integrity: sha512-3REQJ4f90sFIBfa0BUokiCdrV/E4uIjhkWe1bMgCkhFXbf4D8YN6C4zwJL881GM818qVYE9BO3dGwjKhpo2ABA==, + } cpu: [arm64] os: [freebsd] '@rollup/rollup-freebsd-x64@4.30.0': - resolution: {integrity: sha512-ZtY3Y8icbe3Cc+uQicsXG5L+CRGUfLZjW6j2gn5ikpltt3Whqjfo5mkyZ86UiuHF9Q3ZsaQeW7YswlHnN+lAcg==} + resolution: + { + integrity: sha512-ZtY3Y8icbe3Cc+uQicsXG5L+CRGUfLZjW6j2gn5ikpltt3Whqjfo5mkyZ86UiuHF9Q3ZsaQeW7YswlHnN+lAcg==, + } cpu: [x64] os: [freebsd] '@rollup/rollup-linux-arm-gnueabihf@4.30.0': - resolution: {integrity: sha512-bsPGGzfiHXMhQGuFGpmo2PyTwcrh2otL6ycSZAFTESviUoBOuxF7iBbAL5IJXc/69peXl5rAtbewBFeASZ9O0g==} + resolution: + { + integrity: sha512-bsPGGzfiHXMhQGuFGpmo2PyTwcrh2otL6ycSZAFTESviUoBOuxF7iBbAL5IJXc/69peXl5rAtbewBFeASZ9O0g==, + } cpu: [arm] os: [linux] libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.30.0': - resolution: {integrity: sha512-kvyIECEhs2DrrdfQf++maCWJIQ974EI4txlz1nNSBaCdtf7i5Xf1AQCEJWOC5rEBisdaMFFnOWNLYt7KpFqy5A==} + resolution: + { + integrity: sha512-kvyIECEhs2DrrdfQf++maCWJIQ974EI4txlz1nNSBaCdtf7i5Xf1AQCEJWOC5rEBisdaMFFnOWNLYt7KpFqy5A==, + } cpu: [arm] os: [linux] libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.30.0': - resolution: {integrity: sha512-CFE7zDNrokaotXu+shwIrmWrFxllg79vciH4E/zeK7NitVuWEaXRzS0mFfFvyhZfn8WfVOG/1E9u8/DFEgK7WQ==} + resolution: + { + integrity: sha512-CFE7zDNrokaotXu+shwIrmWrFxllg79vciH4E/zeK7NitVuWEaXRzS0mFfFvyhZfn8WfVOG/1E9u8/DFEgK7WQ==, + } cpu: [arm64] os: [linux] libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.30.0': - resolution: {integrity: sha512-MctNTBlvMcIBP0t8lV/NXiUwFg9oK5F79CxLU+a3xgrdJjfBLVIEHSAjQ9+ipofN2GKaMLnFFXLltg1HEEPaGQ==} + resolution: + { + integrity: sha512-MctNTBlvMcIBP0t8lV/NXiUwFg9oK5F79CxLU+a3xgrdJjfBLVIEHSAjQ9+ipofN2GKaMLnFFXLltg1HEEPaGQ==, + } cpu: [arm64] os: [linux] libc: [musl] '@rollup/rollup-linux-loongarch64-gnu@4.30.0': - resolution: {integrity: sha512-fBpoYwLEPivL3q368+gwn4qnYnr7GVwM6NnMo8rJ4wb0p/Y5lg88vQRRP077gf+tc25akuqd+1Sxbn9meODhwA==} + resolution: + { + integrity: sha512-fBpoYwLEPivL3q368+gwn4qnYnr7GVwM6NnMo8rJ4wb0p/Y5lg88vQRRP077gf+tc25akuqd+1Sxbn9meODhwA==, + } cpu: [loong64] os: [linux] libc: [glibc] '@rollup/rollup-linux-powerpc64le-gnu@4.30.0': - resolution: {integrity: sha512-1hiHPV6dUaqIMXrIjN+vgJqtfkLpqHS1Xsg0oUfUVD98xGp1wX89PIXgDF2DWra1nxAd8dfE0Dk59MyeKaBVAw==} + resolution: + { + integrity: sha512-1hiHPV6dUaqIMXrIjN+vgJqtfkLpqHS1Xsg0oUfUVD98xGp1wX89PIXgDF2DWra1nxAd8dfE0Dk59MyeKaBVAw==, + } cpu: [ppc64] os: [linux] libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.30.0': - resolution: {integrity: sha512-U0xcC80SMpEbvvLw92emHrNjlS3OXjAM0aVzlWfar6PR0ODWCTQtKeeB+tlAPGfZQXicv1SpWwRz9Hyzq3Jx3g==} + resolution: + { + integrity: sha512-U0xcC80SMpEbvvLw92emHrNjlS3OXjAM0aVzlWfar6PR0ODWCTQtKeeB+tlAPGfZQXicv1SpWwRz9Hyzq3Jx3g==, + } cpu: [riscv64] os: [linux] libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.30.0': - resolution: {integrity: sha512-VU/P/IODrNPasgZDLIFJmMiLGez+BN11DQWfTVlViJVabyF3JaeaJkP6teI8760f18BMGCQOW9gOmuzFaI1pUw==} + resolution: + { + integrity: sha512-VU/P/IODrNPasgZDLIFJmMiLGez+BN11DQWfTVlViJVabyF3JaeaJkP6teI8760f18BMGCQOW9gOmuzFaI1pUw==, + } cpu: [s390x] os: [linux] libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.30.0': - resolution: {integrity: sha512-laQVRvdbKmjXuFA3ZiZj7+U24FcmoPlXEi2OyLfbpY2MW1oxLt9Au8q9eHd0x6Pw/Kw4oe9gwVXWwIf2PVqblg==} + resolution: + { + integrity: sha512-laQVRvdbKmjXuFA3ZiZj7+U24FcmoPlXEi2OyLfbpY2MW1oxLt9Au8q9eHd0x6Pw/Kw4oe9gwVXWwIf2PVqblg==, + } cpu: [x64] os: [linux] libc: [glibc] '@rollup/rollup-linux-x64-musl@4.30.0': - resolution: {integrity: sha512-3wzKzduS7jzxqcOvy/ocU/gMR3/QrHEFLge5CD7Si9fyHuoXcidyYZ6jyx8OPYmCcGm3uKTUl+9jUSAY74Ln5A==} + resolution: + { + integrity: sha512-3wzKzduS7jzxqcOvy/ocU/gMR3/QrHEFLge5CD7Si9fyHuoXcidyYZ6jyx8OPYmCcGm3uKTUl+9jUSAY74Ln5A==, + } cpu: [x64] os: [linux] libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.30.0': - resolution: {integrity: sha512-jROwnI1+wPyuv696rAFHp5+6RFhXGGwgmgSfzE8e4xfit6oLRg7GyMArVUoM3ChS045OwWr9aTnU+2c1UdBMyw==} + resolution: + { + integrity: sha512-jROwnI1+wPyuv696rAFHp5+6RFhXGGwgmgSfzE8e4xfit6oLRg7GyMArVUoM3ChS045OwWr9aTnU+2c1UdBMyw==, + } cpu: [arm64] os: [win32] '@rollup/rollup-win32-ia32-msvc@4.30.0': - resolution: {integrity: sha512-duzweyup5WELhcXx5H1jokpr13i3BV9b48FMiikYAwk/MT1LrMYYk2TzenBd0jj4ivQIt58JWSxc19y4SvLP4g==} + resolution: + { + integrity: sha512-duzweyup5WELhcXx5H1jokpr13i3BV9b48FMiikYAwk/MT1LrMYYk2TzenBd0jj4ivQIt58JWSxc19y4SvLP4g==, + } cpu: [ia32] os: [win32] '@rollup/rollup-win32-x64-msvc@4.30.0': - resolution: {integrity: sha512-DYvxS0M07PvgvavMIybCOBYheyrqlui6ZQBHJs6GqduVzHSZ06TPPvlfvnYstjODHQ8UUXFwt5YE+h0jFI8kwg==} + resolution: + { + integrity: sha512-DYvxS0M07PvgvavMIybCOBYheyrqlui6ZQBHJs6GqduVzHSZ06TPPvlfvnYstjODHQ8UUXFwt5YE+h0jFI8kwg==, + } cpu: [x64] os: [win32] + '@toolpad/core@0.12.0': + resolution: + { + integrity: sha512-2nzy6Y16nIvZspfdeKJqp70ZKTL4l3DVGe4zpjKi60UoRDYhQHTtwcXlTPiKYw/sCXjT8oa7svNaVD2GAI8Hfg==, + } + engines: { node: '>=14.0.0' } + peerDependencies: + '@mui/icons-material': 5 - 6 + '@mui/material': 5 - 6 + next: ^14 || ^15 + react: ^18 || ^19 + react-router: ^7 + peerDependenciesMeta: + next: + optional: true + react-router: + optional: true + + '@toolpad/utils@0.12.0': + resolution: + { + integrity: sha512-tZ5HjlGmHRMTNp0/3qab2IKD+G0AkooO0uH7Qpn3aRvAZB3mmbUje0IfTJc12slVvv2YU57s4sIgG65c0vZfrA==, + } + peerDependencies: + react: ^18.0.0 || ^19.0.0 + + '@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@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + resolution: + { + integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, + } + + '@types/json-schema@7.0.15': + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, + } '@types/node-forge@1.3.11': - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + resolution: + { + integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==, + } '@types/node@20.8.3': - resolution: {integrity: sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw==} + resolution: + { + integrity: sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw==, + } + + '@types/parse-json@4.0.2': + resolution: + { + integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==, + } + + '@types/prop-types@15.7.14': + resolution: + { + integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==, + } + + '@types/qrcode-svg@1.1.5': + resolution: + { + integrity: sha512-GjkD+HB8S1wrIsf3skHDtcYBjzNhTxocMbX+wG166xDkaVOnLiMUla7bLjbwxo6mMvqqWQNP0Dk8nkIeizSmnw==, + } + + '@types/react-copy-to-clipboard@5.0.7': + resolution: + { + integrity: sha512-Gft19D+as4M+9Whq1oglhmK49vqPhcLzk8WfvfLvaYMIPYanyfLy0+CwFucMJfdKoSFyySPmkkWn8/E6voQXjQ==, + } + + '@types/react-transition-group@4.4.12': + resolution: + { + integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==, + } + peerDependencies: + '@types/react': '*' + + '@types/react@19.0.4': + resolution: + { + integrity: sha512-3O4QisJDYr1uTUMZHA2YswiQZRq+Pd8D+GdVFYikTutYsTz+QZgWkAPnP7rx9txoI6EXKcPiluMqWPFV3tT9Wg==, + } '@types/service-worker-mock@2.0.4': - resolution: {integrity: sha512-MEBT2eiqYfhxjqYm/oAf2AvKLbPTPwJJAYrMdheKnGyz1yG9XBRfxCzi93h27qpSvI7jOYfXqFLVMLBXFDqo4A==} + resolution: + { + integrity: sha512-MEBT2eiqYfhxjqYm/oAf2AvKLbPTPwJJAYrMdheKnGyz1yG9XBRfxCzi93h27qpSvI7jOYfXqFLVMLBXFDqo4A==, + } + + '@typescript-eslint/eslint-plugin@8.21.0': + resolution: + { + integrity: sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@8.21.0': + resolution: + { + integrity: sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/scope-manager@8.21.0': + resolution: + { + integrity: sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@typescript-eslint/type-utils@8.21.0': + resolution: + { + integrity: sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/types@8.21.0': + resolution: + { + integrity: sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@typescript-eslint/typescript-estree@8.21.0': + resolution: + { + integrity: sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@8.21.0': + resolution: + { + integrity: sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/visitor-keys@8.21.0': + resolution: + { + integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + '@vitejs/plugin-react@4.3.4': + resolution: + { + integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==, + } + engines: { node: ^14.18.0 || >=16.0.0 } + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 + + acorn-jsx@5.3.2: + resolution: { integrity: sha1-ftW7VZCLOy8bxVxq8WU7rafweTc= } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==, + } + engines: { node: '>=0.4.0' } acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==, + } + engines: { node: '>=0.4.0' } hasBin: true + ajv@6.12.6: + resolution: { integrity: sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ= } + + ansi-escapes@7.0.0: + resolution: + { + integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==, + } + engines: { node: '>=18' } + ansi-regex@5.0.1: - resolution: {integrity: sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ=} - engines: {node: '>=8'} + resolution: { integrity: sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ= } + engines: { node: '>=8' } + + ansi-regex@6.1.0: + resolution: + { + integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==, + } + engines: { node: '>=12' } ansi-styles@4.3.0: - resolution: {integrity: sha1-7dgDYornHATIWuegkG7a00tkiTc=} - engines: {node: '>=8'} + resolution: { integrity: sha1-7dgDYornHATIWuegkG7a00tkiTc= } + engines: { node: '>=8' } + + ansi-styles@6.2.1: + resolution: + { + integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==, + } + engines: { node: '>=12' } + + any-promise@1.3.0: + resolution: { integrity: sha1-q8av7tzqUugJzcA3au0845Y10X8= } + + anymatch@3.1.3: + resolution: + { + integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, + } + engines: { node: '>= 8' } + + arg@5.0.2: + resolution: + { + integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==, + } argparse@2.0.1: - resolution: {integrity: sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg=} + resolution: { integrity: sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg= } as-table@1.0.55: - resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} + resolution: + { + integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==, + } + + autoprefixer@10.4.20: + resolution: + { + integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==, + } + engines: { node: ^10 || ^12 || >=14 } + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + babel-plugin-macros@3.1.0: + resolution: { integrity: sha1-nvbcdN65NLTbNE3Jc+6FHRSMUME= } + engines: { node: '>=10', npm: '>=6' } babel-plugin-transform-hook-names@1.0.2: - resolution: {integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==} + resolution: + { + integrity: sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==, + } peerDependencies: '@babel/core': ^7.12.10 + balanced-match@1.0.2: + resolution: { integrity: sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4= } + + binary-extensions@2.3.0: + resolution: + { + integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==, + } + engines: { node: '>=8' } + blake3-wasm@2.1.5: - resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} + resolution: + { + integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==, + } boolbase@1.0.0: - resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=} + resolution: { integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24= } + + brace-expansion@1.1.11: + resolution: { integrity: sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= } + + brace-expansion@2.0.1: + resolution: { integrity: sha1-HtxFng8MVISG7Pn8mfIiE2S5oK4= } + + braces@3.0.3: + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + } + engines: { node: '>=8' } browserslist@4.24.3: - resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + resolution: + { + integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==, + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true + buffer-from@1.1.2: + resolution: { integrity: sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U= } + + callsites@3.1.0: + resolution: { integrity: sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M= } + engines: { node: '>=6' } + + camelcase-css@2.0.1: + resolution: { integrity: sha1-7pePaUeRTMMMa0R0G27R338EP9U= } + engines: { node: '>= 6' } + caniuse-lite@1.0.30001690: - resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} + resolution: + { + integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==, + } capnp-ts@0.7.0: - resolution: {integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==} + resolution: + { + integrity: sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==, + } chalk@4.1.2: - resolution: {integrity: sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=} - engines: {node: '>=10'} - - chanfana@2.5.2: - resolution: {integrity: sha512-x+4QWt1RtnkgSls4bul83mnOoSaZmmgHUGZ1CEfEpphq7IIQQ/TY1aJVTbTelHCiZdcTBfhDESr2n8Z9IK4ZMg==} + resolution: { integrity: sha1-qsTit3NKdAhnrrFr8CqtVWoeegE= } + engines: { node: '>=10' } + + chalk@5.4.1: + resolution: + { + integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==, + } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + + chanfana@2.6.3: + resolution: + { + integrity: sha512-Wb3Mc+xte4NzCwZsNgP1TmTunkkIZwmkyP2Ph+JfzypE4UYMf1oppNKGUvWuAEAWH9U17V4QMlRxTfWc6uWyrw==, + } + + chokidar@3.6.0: + resolution: + { + integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==, + } + engines: { node: '>= 8.10.0' } chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} + resolution: + { + integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==, + } + engines: { node: '>= 14.16.0' } + + cli-cursor@5.0.0: + resolution: + { + integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==, + } + engines: { node: '>=18' } + + cli-truncate@4.0.0: + resolution: + { + integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==, + } + engines: { node: '>=18' } + + client-only@0.0.1: + resolution: + { + integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, + } + + clipboardy@4.0.0: + resolution: + { + integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==, + } + engines: { node: '>=18' } cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + } + engines: { node: '>=12' } + + clsx@2.1.1: + resolution: + { + integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, + } + engines: { node: '>=6' } color-convert@2.0.1: - resolution: {integrity: sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=} - engines: {node: '>=7.0.0'} + resolution: { integrity: sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= } + engines: { node: '>=7.0.0' } color-name@1.1.4: - resolution: {integrity: sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=} + resolution: { integrity: sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= } - concurrently@9.1.2: - resolution: {integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==} - engines: {node: '>=18'} - hasBin: true + colorette@2.0.20: + resolution: + { + integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, + } - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + commander@12.1.0: + resolution: + { + integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==, + } + engines: { node: '>=18' } - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} + commander@4.1.1: + resolution: { integrity: sha1-n9YCvZNilOnp70aj9NaWQESxgGg= } + engines: { node: '>= 6' } - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + concat-map@0.0.1: + resolution: { integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= } + + concurrently@9.1.2: + resolution: + { + integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==, + } + engines: { node: '>=18' } + hasBin: true + + confbox@0.1.8: + resolution: + { + integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==, + } + + 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==, + } + + cookie@0.7.2: + resolution: + { + integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==, + } + engines: { node: '>= 0.6' } + + cosmiconfig@7.1.0: + resolution: + { + integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==, + } + engines: { node: '>=10' } + + cross-spawn@7.0.6: + resolution: + { + integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, + } + engines: { node: '>= 8' } + + css-select@5.1.0: + resolution: + { + integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==, + } css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==, + } + engines: { node: '>= 6' } + + cssesc@3.0.0: + resolution: { integrity: sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4= } + engines: { node: '>=4' } + hasBin: true + + csstype@3.1.3: + resolution: + { + integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==, + } data-uri-to-buffer@2.0.2: - resolution: {integrity: sha1-0paXPVpIl6Xb4xcW0RghGSHwR3A=} + resolution: { integrity: sha1-0paXPVpIl6Xb4xcW0RghGSHwR3A= } date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + resolution: + { + integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==, + } + + dayjs@1.11.13: + resolution: + { + integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==, + } debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==, + } + engines: { node: '>=6.0' } peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true + deep-is@0.1.4: + resolution: { integrity: sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE= } + defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + resolution: + { + integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==, + } + + didyoumean@1.2.2: + resolution: { integrity: sha1-mJNG/+noObRVXs9WZu3qDT6K0Dc= } + + dlv@1.1.3: + resolution: { integrity: sha1-XBmKihFFNZbnUUlNSYdLx3MvLnk= } + + dom-helpers@5.2.1: + resolution: { integrity: sha1-2UAFNrK/giWtmP4FLgKUUaxA6QI= } dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + resolution: + { + integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==, + } domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + resolution: + { + integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, + } domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==, + } + engines: { node: '>= 4' } domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + resolution: + { + integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==, + } + + drizzle-kit@0.30.1: + resolution: + { + integrity: sha512-HmA/NeewvHywhJ2ENXD3KvOuM/+K2dGLJfxVfIHsGwaqKICJnS+Ke2L6UcSrSrtMJLJaT0Im1Qv4TFXfaZShyw==, + } + hasBin: true + + drizzle-orm@0.38.3: + resolution: + { + integrity: sha512-w41Y+PquMpSff/QDRGdItG0/aWca+/J3Sda9PPGkTxBtjWQvgU1jxlFBXdjog5tYvTu58uvi3PwR1NuCx0KeZg==, + } + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=4' + '@electric-sql/pglite': '>=0.2.0' + '@libsql/client': '>=0.10.0' + '@libsql/client-wasm': '>=0.10.0' + '@neondatabase/serverless': '>=0.10.0' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1' + '@prisma/client': '*' + '@tidbcloud/serverless': '*' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/react': '>=18' + '@types/sql.js': '*' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=14.0.0' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + prisma: '*' + react: '>=18' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@libsql/client-wasm': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@prisma/client': + optional: true + '@tidbcloud/serverless': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/react': + optional: true + '@types/sql.js': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + prisma: + optional: true + react: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + + drizzle-zod@0.6.1: + resolution: + { + integrity: sha512-huEbUgnsuR8tupnmLiyB2F1I2H9dswI3GfM36IbIqx9i0YUeYjRsDpJVyFVeziUvI1ogT9JHRL2Q03cC4QmvxA==, + } + peerDependencies: + drizzle-orm: '>=0.36.0' + zod: '>=3.0.0' + + eastasianwidth@0.2.0: + resolution: { integrity: sha1-aWzi7Aqg5uqTo5f/zySqeEDIJ8s= } electron-to-chromium@1.5.78: - resolution: {integrity: sha512-UmwIt7HRKN1rsJfddG5UG7rCTCTAKoS9JeOy/R0zSenAyaZ8SU3RuXlwcratxhdxGRNpk03iq8O7BA3W7ibLVw==} + resolution: + { + integrity: sha512-UmwIt7HRKN1rsJfddG5UG7rCTCTAKoS9JeOy/R0zSenAyaZ8SU3RuXlwcratxhdxGRNpk03iq8O7BA3W7ibLVw==, + } + + emoji-regex@10.4.0: + resolution: + { + integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==, + } emoji-regex@8.0.0: - resolution: {integrity: sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=} + resolution: { integrity: sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= } + + emoji-regex@9.2.2: + resolution: { integrity: sha1-hAyIA7DYBH9P8M+WMXazLU7z7XI= } entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} + resolution: + { + integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, + } + engines: { node: '>=0.12' } + + environment@1.1.0: + resolution: + { + integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==, + } + engines: { node: '>=18' } + + error-ex@1.3.2: + resolution: { integrity: sha1-tKxAZIEH/c3PriQvQovqihTU8b8= } + + esbuild-register@3.6.0: + resolution: + { + integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==, + } + peerDependencies: + esbuild: '>=0.12 <1' esbuild@0.17.19: - resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==, + } + engines: { node: '>=12' } + hasBin: true + + esbuild@0.18.20: + resolution: + { + integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==, + } + engines: { node: '>=12' } + hasBin: true + + esbuild@0.19.12: + resolution: + { + integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==, + } + engines: { node: '>=12' } hasBin: true esbuild@0.24.2: - resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==, + } + engines: { node: '>=18' } hasBin: true escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: '>=6' } escape-string-regexp@4.0.0: - resolution: {integrity: sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=} - engines: {node: '>=10'} + resolution: { integrity: sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ= } + engines: { node: '>=10' } + + eslint-config-prettier@10.0.1: + resolution: + { + integrity: sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==, + } + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-scope@8.2.0: + resolution: + { + integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + eslint-visitor-keys@3.4.3: + resolution: + { + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + eslint-visitor-keys@4.2.0: + resolution: + { + integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + eslint@9.18.0: + resolution: + { + integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: + { + integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + esquery@1.6.0: + resolution: + { + integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==, + } + engines: { node: '>=0.10' } + + esrecurse@4.3.0: + resolution: { integrity: sha1-eteWTWeauyi+5yzsY3WLHF0smSE= } + engines: { node: '>=4.0' } + + estraverse@5.3.0: + resolution: { integrity: sha1-LupSkHAvJquP5TcDcP+GyWXSESM= } + engines: { node: '>=4.0' } estree-walker@0.6.1: - resolution: {integrity: sha1-UwSRQ/QMbrkYsjZx0f4yGfOhs2I=} + resolution: { integrity: sha1-UwSRQ/QMbrkYsjZx0f4yGfOhs2I= } estree-walker@2.0.2: - resolution: {integrity: sha1-UvAQF4wqTBF6d1fP6UKtt9LaTKw=} + resolution: { integrity: sha1-UvAQF4wqTBF6d1fP6UKtt9LaTKw= } + + esutils@2.0.3: + resolution: { integrity: sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q= } + engines: { node: '>=0.10.0' } + + eventemitter3@5.0.1: + resolution: + { + integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, + } + + execa@8.0.1: + resolution: + { + integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==, + } + engines: { node: '>=16.17' } exit-hook@2.2.1: - resolution: {integrity: sha1-AHstksZCjtorducBajQ1FYaTRZM=} - engines: {node: '>=6'} + resolution: { integrity: sha1-AHstksZCjtorducBajQ1FYaTRZM= } + engines: { node: '>=6' } + + fast-deep-equal@3.1.3: + resolution: { integrity: sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU= } + + fast-glob@3.3.3: + resolution: + { + integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==, + } + engines: { node: '>=8.6.0' } + + fast-json-patch@3.1.1: + resolution: + { + integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==, + } + + fast-json-stable-stringify@2.1.0: + resolution: { integrity: sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM= } + + fast-levenshtein@2.0.6: + resolution: { integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= } + + fastq@1.18.0: + resolution: + { + integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==, + } + + file-entry-cache@8.0.0: + resolution: + { + integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, + } + engines: { node: '>=16.0.0' } + + fill-range@7.1.1: + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + } + engines: { node: '>=8' } + + find-root@1.1.0: + resolution: { integrity: sha1-q8/Iunb3CMQql7PWhbfpRQv7nOQ= } + + find-up@5.0.0: + resolution: { integrity: sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw= } + engines: { node: '>=10' } + + flat-cache@4.0.1: + resolution: + { + integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, + } + engines: { node: '>=16' } + + flatted@3.3.2: + resolution: + { + integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==, + } + + foreground-child@3.3.0: + resolution: + { + integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==, + } + engines: { node: '>=14' } + + fraction.js@4.3.7: + resolution: + { + integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==, + } fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + 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==} + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, + } gensync@1.0.0-beta.2: - resolution: {integrity: sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=} - engines: {node: '>=6.9.0'} + resolution: { integrity: sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA= } + engines: { node: '>=6.9.0' } get-caller-file@2.0.5: - resolution: {integrity: sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=} - engines: {node: 6.* || 8.* || >= 10.*} + resolution: { integrity: sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= } + engines: { node: 6.* || 8.* || >= 10.* } + + get-east-asian-width@1.3.0: + resolution: + { + integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==, + } + engines: { node: '>=18' } get-source@2.0.12: - resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} + resolution: + { + integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==, + } + + get-stream@8.0.1: + resolution: + { + integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==, + } + engines: { node: '>=16' } + + get-tsconfig@4.8.1: + resolution: + { + integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==, + } + + glob-parent@5.1.2: + resolution: { integrity: sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ= } + engines: { node: '>= 6' } + + glob-parent@6.0.2: + resolution: { integrity: sha1-bSN9mQg5UMeSkPJMdkKj3poo+eM= } + engines: { node: '>=10.13.0' } glob-to-regexp@0.4.1: - resolution: {integrity: sha1-x1KXCHyFG5pXi9IX3VmpL1n+VG4=} + resolution: { integrity: sha1-x1KXCHyFG5pXi9IX3VmpL1n+VG4= } + + glob@10.4.5: + resolution: + { + integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==, + } + hasBin: true globals@11.12.0: - resolution: {integrity: sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=} - engines: {node: '>=4'} + resolution: { integrity: sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= } + engines: { node: '>=4' } + + globals@14.0.0: + resolution: + { + integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, + } + engines: { node: '>=18' } + + graphemer@1.4.0: + resolution: + { + integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, + } has-flag@4.0.0: - resolution: {integrity: sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=} - engines: {node: '>=8'} + resolution: { integrity: sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= } + engines: { node: '>=8' } hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, + } + engines: { node: '>= 0.4' } he@1.2.0: - resolution: {integrity: sha1-hK5l+n6vsWX922FWauFLrwVmTw8=} + resolution: { integrity: sha1-hK5l+n6vsWX922FWauFLrwVmTw8= } hasBin: true + hoist-non-react-statics@3.3.2: + resolution: { integrity: sha1-7OCsr3HWLClpwuxZ/v9CpLGoW0U= } + hono@4.6.16: - resolution: {integrity: sha512-iE6xOPwDYlfnZFwk6BfIMMIH4WZm3pPhz6rc1uJM/OPew0pjG5K6p8WTLaMBY1/szF/T0TaEjprMpwn16BA0NQ==} - engines: {node: '>=16.9.0'} + resolution: + { + integrity: sha512-iE6xOPwDYlfnZFwk6BfIMMIH4WZm3pPhz6rc1uJM/OPew0pjG5K6p8WTLaMBY1/szF/T0TaEjprMpwn16BA0NQ==, + } + engines: { node: '>=16.9.0' } + + human-signals@5.0.0: + resolution: + { + integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==, + } + engines: { node: '>=16.17.0' } + + husky@9.1.7: + resolution: + { + integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==, + } + engines: { node: '>=18' } + hasBin: true + + ignore@5.3.2: + resolution: + { + integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, + } + engines: { node: '>= 4' } + + import-fresh@3.3.0: + resolution: { integrity: sha1-NxYsJfy566oublPVtNiM4X2eDCs= } + engines: { node: '>=6' } + + imurmurhash@0.1.4: + resolution: { integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= } + engines: { node: '>=0.8.19' } + + invariant@2.2.4: + resolution: { integrity: sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY= } + + is-arrayish@0.2.1: + resolution: { integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= } + + is-binary-path@2.1.0: + resolution: { integrity: sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= } + engines: { node: '>=8' } is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==, + } + engines: { node: '>= 0.4' } + + is-docker@3.0.0: + resolution: { integrity: sha1-kAk6oxBid9inelkQ265xdH4VogA= } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + hasBin: true + + is-extglob@2.1.1: + resolution: { integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= } + engines: { node: '>=0.10.0' } is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=} - engines: {node: '>=8'} + resolution: { integrity: sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= } + engines: { node: '>=8' } + + is-fullwidth-code-point@4.0.0: + resolution: { integrity: sha1-+uMWfHKedGP4RhzlErCApJJoqog= } + engines: { node: '>=12' } + + is-fullwidth-code-point@5.0.0: + resolution: + { + integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==, + } + engines: { node: '>=18' } + + is-glob@4.0.3: + resolution: { integrity: sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ= } + engines: { node: '>=0.10.0' } + + is-inside-container@1.0.0: + resolution: + { + integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==, + } + engines: { node: '>=14.16' } + hasBin: true + + is-number@7.0.0: + resolution: { integrity: sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= } + engines: { node: '>=0.12.0' } + + is-stream@3.0.0: + resolution: { integrity: sha1-5r/XqmvvafT0cs6btoHj5XtDGaw= } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + is-wsl@3.1.0: + resolution: + { + integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==, + } + engines: { node: '>=16' } + + is64bit@2.0.0: + resolution: + { + integrity: sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==, + } + engines: { node: '>=18' } + + isexe@2.0.0: + resolution: { integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= } itty-time@1.0.6: - resolution: {integrity: sha512-+P8IZaLLBtFv8hCkIjcymZOp4UJ+xW6bSlQsXGqrkmJh7vSiMFSlNne0mCYagEE0N7HDNR5jJBRxwN0oYv61Rw==} + resolution: + { + integrity: sha512-+P8IZaLLBtFv8hCkIjcymZOp4UJ+xW6bSlQsXGqrkmJh7vSiMFSlNne0mCYagEE0N7HDNR5jJBRxwN0oYv61Rw==, + } + + jackspeak@3.4.3: + resolution: + { + integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==, + } + + jiti@1.21.7: + resolution: + { + integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==, + } + hasBin: true js-tokens@4.0.0: - resolution: {integrity: sha1-GSA/tZmR35jjoocFDUZHzerzJJk=} + resolution: { integrity: sha1-GSA/tZmR35jjoocFDUZHzerzJJk= } js-yaml@4.1.0: - resolution: {integrity: sha1-wftl+PUBeQHN0slRhkuhhFihBgI=} + resolution: { integrity: sha1-wftl+PUBeQHN0slRhkuhhFihBgI= } hasBin: true jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, + } + engines: { node: '>=6' } hasBin: true + json-buffer@3.0.1: + resolution: { integrity: sha1-kziAKjDTtmBfvgYT4JQAjKjAWhM= } + + json-parse-even-better-errors@2.3.1: + resolution: { integrity: sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0= } + + json-schema-traverse@0.4.1: + resolution: { integrity: sha1-afaofZUTq4u4/mO9sJecRI5oRmA= } + + json-stable-stringify-without-jsonify@1.0.1: + resolution: { integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= } + json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, + } + engines: { node: '>=6' } hasBin: true + keyv@4.5.4: + resolution: + { + integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, + } + kolorist@1.8.0: - resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + resolution: + { + integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==, + } + + levn@0.4.1: + resolution: { integrity: sha1-rkViwAdHO5MqYgDUAyaN0v/8at4= } + engines: { node: '>= 0.8.0' } + + lilconfig@3.1.3: + resolution: + { + integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==, + } + engines: { node: '>=14' } + + lines-and-columns@1.2.4: + resolution: { integrity: sha1-7KKE910pZQeTCdwK2SVauy68FjI= } + + lint-staged@15.4.1: + resolution: + { + integrity: sha512-P8yJuVRyLrm5KxCtFx+gjI5Bil+wO7wnTl7C3bXhvtTaAFGirzeB24++D0wGoUwxrUKecNiehemgCob9YL39NA==, + } + engines: { node: '>=18.12.0' } + hasBin: true + + listr2@8.2.5: + resolution: + { + integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==, + } + engines: { node: '>=18.0.0' } + + locate-path@6.0.0: + resolution: { integrity: sha1-VTIeswn+u8WcSAHZMackUqaB0oY= } + engines: { node: '>=10' } + + lodash.merge@4.6.2: + resolution: { integrity: sha1-VYqlO0O2YeGSWgr9+japoQhf5Xo= } lodash@4.17.21: - resolution: {integrity: sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=} + resolution: { integrity: sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw= } + + log-update@6.1.0: + resolution: + { + integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==, + } + engines: { node: '>=18' } + + loose-envify@1.4.0: + resolution: { integrity: sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8= } + hasBin: true + + lru-cache@10.4.3: + resolution: + { + integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, + } lru-cache@5.1.1: - resolution: {integrity: sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=} + resolution: { integrity: sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA= } magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + resolution: + { + integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, + } magic-string@0.30.5: - resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==, + } + engines: { node: '>=12' } + + merge-stream@2.0.0: + resolution: { integrity: sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= } + + merge2@1.4.1: + resolution: { integrity: sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= } + engines: { node: '>= 8' } + + micromatch@4.0.8: + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + } + engines: { node: '>=8.6' } mime@3.0.0: - resolution: {integrity: sha1-s3RVDco6DBhEOwyVCmpY8ZMc96c=} - engines: {node: '>=10.0.0'} + resolution: { integrity: sha1-s3RVDco6DBhEOwyVCmpY8ZMc96c= } + engines: { node: '>=10.0.0' } + hasBin: true + + mime@4.0.6: + resolution: + { + integrity: sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==, + } + engines: { node: '>=16' } hasBin: true - miniflare@3.20241218.0: - resolution: {integrity: sha512-spYFDArH0wd+wJSTrzBrWrXJrbyJhRMJa35mat947y1jYhVV8I5V8vnD3LwjfpLr0SaEilojz1OIW7ekmnRe+w==} - engines: {node: '>=16.13'} + mimic-fn@4.0.0: + resolution: { integrity: sha1-YKkFUNXLCyOcymXYk7GlOymHHsw= } + engines: { node: '>=12' } + + mimic-function@5.0.1: + resolution: + { + integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==, + } + engines: { node: '>=18' } + + miniflare@3.20241230.0: + resolution: + { + integrity: sha512-ZtWNoNAIj5Q0Vb3B4SPEKr7DDmVG8a0Stsp/AuRkYXoJniA5hsbKjFNIGhTXGMIHVP5bvDrKJWt/POIDGfpiKg==, + } + engines: { node: '>=16.13' } hasBin: true + minimatch@3.1.2: + resolution: + { + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, + } + + minimatch@9.0.5: + resolution: + { + integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, + } + engines: { node: '>=16 || 14 >=14.17' } + + minipass@7.1.2: + resolution: + { + integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==, + } + engines: { node: '>=16 || 14 >=14.17' } + + mlly@1.7.3: + resolution: + { + integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==, + } + + mobx-react-lite@4.1.0: + resolution: + { + integrity: sha512-QEP10dpHHBeQNv1pks3WnHRCem2Zp636lq54M2nKO2Sarr13pL4u6diQXf65yzXUn0mkk18SyIDCm9UOJYTi1w==, + } + peerDependencies: + mobx: ^6.9.0 + react: ^16.8.0 || ^17 || ^18 || ^19 + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + + mobx@6.13.5: + resolution: + { + integrity: sha512-/HTWzW2s8J1Gqt+WmUj5Y0mddZk+LInejADc79NJadrWla3rHzmRHki/mnEUH1AvOmbNTZ1BRbKxr8DSgfdjMA==, + } + ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } mustache@4.2.0: - resolution: {integrity: sha1-5YkjJNYKEuycKnM1ntylKXK/b2Q=} + resolution: { integrity: sha1-5YkjJNYKEuycKnM1ntylKXK/b2Q= } hasBin: true + mz@2.7.0: + resolution: { integrity: sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI= } + nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + resolution: + { + integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true + natural-compare@1.4.0: + resolution: { integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= } + node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} + resolution: + { + integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==, + } + engines: { node: '>= 6.13.0' } node-html-parser@6.1.13: - resolution: {integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==} + resolution: + { + integrity: sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==, + } node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + resolution: + { + integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==, + } + + normalize-path@3.0.0: + resolution: { integrity: sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= } + engines: { node: '>=0.10.0' } + + normalize-range@0.1.2: + resolution: { integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= } + engines: { node: '>=0.10.0' } + + npm-run-path@5.3.0: + resolution: + { + integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + resolution: + { + integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, + } + + object-assign@4.1.1: + resolution: { integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= } + engines: { node: '>=0.10.0' } + + object-hash@3.0.0: + resolution: + { + integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==, + } + engines: { node: '>= 6' } ohash@1.1.4: - resolution: {integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==} + resolution: + { + integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g==, + } + + onetime@6.0.0: + resolution: { integrity: sha1-fCTBjtH9LpvKS9JoBqM2E8d9NLQ= } + engines: { node: '>=12' } + + onetime@7.0.0: + resolution: + { + integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==, + } + engines: { node: '>=18' } openapi3-ts@4.4.0: - resolution: {integrity: sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==} + resolution: + { + integrity: sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==, + } + + oppa@0.4.0: + resolution: + { + integrity: sha512-DFvM3+F+rB/igo3FRnkDWitjZgBH9qZAn68IacYHsqbZBKwuTA+LdD4zSJiQtgQpWq7M08we5FlGAVHz0yW7PQ==, + } + engines: { node: '>=10' } + + optionator@0.9.4: + resolution: + { + integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, + } + engines: { node: '>= 0.8.0' } + + p-limit@3.1.0: + resolution: { integrity: sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs= } + engines: { node: '>=10' } + + p-locate@5.0.0: + resolution: { integrity: sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ= } + engines: { node: '>=10' } + + package-json-from-dist@1.0.1: + resolution: + { + integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==, + } + + parent-module@1.0.1: + resolution: { integrity: sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI= } + engines: { node: '>=6' } + + parse-json@5.2.0: + resolution: { integrity: sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80= } + engines: { node: '>=8' } + + path-exists@4.0.0: + resolution: { integrity: sha1-UTvb4tO5XXdi6METfvoZXGxhtbM= } + engines: { node: '>=8' } + + path-key@3.1.1: + resolution: { integrity: sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U= } + engines: { node: '>=8' } + + path-key@4.0.0: + resolution: { integrity: sha1-KVWI3DruZBVPh3rbnXgLgcVUvxg= } + engines: { node: '>=12' } path-parse@1.0.7: - resolution: {integrity: sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=} + resolution: { integrity: sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU= } + + path-scurry@1.11.1: + resolution: + { + integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==, + } + engines: { node: '>=16 || 14 >=14.18' } path-to-regexp@6.3.0: - resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + resolution: + { + integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==, + } + + path-type@4.0.0: + resolution: { integrity: sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= } + engines: { node: '>=8' } pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + resolution: + { + integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==, + } picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: '>=8.6' } + + pidtree@0.6.0: + resolution: + { + integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==, + } + engines: { node: '>=0.10' } + hasBin: true + + pify@2.3.0: + resolution: { integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw= } + engines: { node: '>=0.10.0' } + + pirates@4.0.6: + resolution: + { + integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==, + } + engines: { node: '>= 6' } + + pkg-types@1.3.0: + resolution: + { + integrity: sha512-kS7yWjVFCkIw9hqdJBoMxDdzEngmkr5FXeWZZfQ6GoYacjVnsW6l2CcYW/0ThD0vF4LPJgVYnrg4d0uuhwYQbg==, + } + + postcss-import@15.1.0: + resolution: + { + integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==, + } + engines: { node: '>=14.0.0' } + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: + { + integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==, + } + engines: { node: ^12 || ^14 || >= 16 } + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: + { + integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==, + } + engines: { node: '>= 14' } + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: + { + integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==, + } + engines: { node: '>=12.0' } + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: + { + integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==, + } + engines: { node: '>=4' } + + postcss-value-parser@4.2.0: + resolution: + { + integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, + } postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==, + } + engines: { node: ^10 || ^12 || >=14 } preact@10.25.4: - resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} + resolution: + { + integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==, + } + + prelude-ls@1.2.1: + resolution: { integrity: sha1-3rxkidem5rDnYRiIzsiAM30xY5Y= } + engines: { node: '>= 0.8.0' } + + prettier@3.3.3: + resolution: + { + integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==, + } + engines: { node: '>=14' } + hasBin: true + + prettier@3.4.2: + resolution: + { + integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==, + } + engines: { node: '>=14' } + hasBin: true printable-characters@1.0.42: - resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} + resolution: + { + integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==, + } + + 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' } + + qrcode-svg@1.1.0: + resolution: + { + integrity: sha512-XyQCIXux1zEIA3NPb0AeR8UMYvXZzWEhgdBgBjH9gO7M48H9uoHzviNz8pXw3UzrAcxRRRn9gxHewAVK7bn9qw==, + } + hasBin: true + + queue-microtask@1.2.3: + resolution: { integrity: sha1-SSkii7xyTfrEPg77BYyve2z7YkM= } + + react-dom@19.0.0: + resolution: + { + integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==, + } + peerDependencies: + react: ^19.0.0 + + react-is@16.13.1: + resolution: { integrity: sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ= } + + react-is@19.0.0: + resolution: + { + integrity: sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==, + } + + react-refresh@0.14.2: + resolution: + { + integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==, + } + engines: { node: '>=0.10.0' } + + react-transition-group@4.4.5: + resolution: + { + integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==, + } + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@19.0.0: + resolution: + { + integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==, + } + engines: { node: '>=0.10.0' } + + read-cache@1.0.0: + resolution: { integrity: sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= } + + readdirp@3.6.0: + resolution: { integrity: sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc= } + engines: { node: '>=8.10.0' } readdirp@4.0.2: - resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} - engines: {node: '>= 14.16.0'} + resolution: + { + integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==, + } + engines: { node: '>= 14.16.0' } + + regenerator-runtime@0.14.1: + resolution: + { + integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==, + } require-directory@2.1.1: - resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} - engines: {node: '>=0.10.0'} + resolution: { integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= } + engines: { node: '>=0.10.0' } + + resolve-from@4.0.0: + resolution: { integrity: sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY= } + engines: { node: '>=4' } + + resolve-pkg-maps@1.0.0: + resolution: + { + integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, + } resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==, + } + engines: { node: '>= 0.4' } hasBin: true + restore-cursor@5.1.0: + resolution: + { + integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==, + } + engines: { node: '>=18' } + + reusify@1.0.4: + resolution: { integrity: sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= } + engines: { iojs: '>=1.0.0', node: '>=0.10.0' } + + rfdc@1.4.1: + resolution: + { + integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==, + } + rollup-plugin-inject@3.0.2: - resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} + resolution: + { + integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==, + } deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. rollup-plugin-node-polyfills@0.2.1: - resolution: {integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==} + resolution: + { + integrity: sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==, + } rollup-pluginutils@2.8.2: - resolution: {integrity: sha1-cvKvB0i1kjZNvTOJ5gDlqURKNR4=} + resolution: { integrity: sha1-cvKvB0i1kjZNvTOJ5gDlqURKNR4= } rollup@4.30.0: - resolution: {integrity: sha512-sDnr1pcjTgUT69qBksNF1N1anwfbyYG6TBQ22b03bII8EdiUQ7J0TlozVaTMjT/eEJAO49e1ndV7t+UZfL1+vA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} + resolution: + { + integrity: sha512-sDnr1pcjTgUT69qBksNF1N1anwfbyYG6TBQ22b03bII8EdiUQ7J0TlozVaTMjT/eEJAO49e1ndV7t+UZfL1+vA==, + } + engines: { node: '>=18.0.0', npm: '>=8.0.0' } hasBin: true + run-parallel@1.2.0: + resolution: { integrity: sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4= } + rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + resolution: + { + integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==, + } + + scheduler@0.25.0: + resolution: + { + integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==, + } selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==, + } + engines: { node: '>=10' } semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, + } + hasBin: true + + semver@7.6.3: + resolution: + { + integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==, + } + engines: { node: '>=10' } hasBin: true + shebang-command@2.0.0: + resolution: { integrity: sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= } + engines: { node: '>=8' } + + shebang-regex@3.0.0: + resolution: { integrity: sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= } + engines: { node: '>=8' } + shell-quote@1.8.2: - resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==, + } + engines: { node: '>= 0.4' } + + signal-exit@4.1.0: + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + } + engines: { node: '>=14' } + + slice-ansi@5.0.0: + resolution: { integrity: sha1-tzBjxXqpb5zYgWVLFSlNldKFxCo= } + engines: { node: '>=12' } + + slice-ansi@7.1.0: + resolution: + { + integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==, + } + engines: { node: '>=18' } source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, + } + engines: { node: '>=0.10.0' } + + source-map-support@0.5.21: + resolution: { integrity: sha1-BP58f54e0tZiIzwoyys1ufY/bk8= } + + source-map@0.5.7: + resolution: { integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= } + engines: { node: '>=0.10.0' } source-map@0.6.1: - resolution: {integrity: sha1-dHIq8y6WFOnCh6jQu95IteLxomM=} - engines: {node: '>=0.10.0'} + resolution: { integrity: sha1-dHIq8y6WFOnCh6jQu95IteLxomM= } + engines: { node: '>=0.10.0' } source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==, + } + engines: { node: '>= 8' } sourcemap-codec@1.4.8: - resolution: {integrity: sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=} + resolution: { integrity: sha1-6oBL2UhXQC5pktBaOO8a41qatMQ= } stack-trace@1.0.0-pre2: - resolution: {integrity: sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==, + } + engines: { node: '>=16' } stacktracey@2.1.8: - resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} + resolution: + { + integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==, + } stoppable@1.1.0: - resolution: {integrity: sha1-MtpWjoPqSIsI5NfqLDvMnXUBXVs=} - engines: {node: '>=4', npm: '>=6'} + resolution: { integrity: sha1-MtpWjoPqSIsI5NfqLDvMnXUBXVs= } + engines: { node: '>=4', npm: '>=6' } + + string-argv@0.3.2: + resolution: + { + integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==, + } + engines: { node: '>=0.6.19' } string-width@4.2.3: - resolution: {integrity: sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=} - engines: {node: '>=8'} + resolution: { integrity: sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA= } + engines: { node: '>=8' } + + string-width@5.1.2: + resolution: + { + integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, + } + engines: { node: '>=12' } + + string-width@7.2.0: + resolution: + { + integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==, + } + engines: { node: '>=18' } strip-ansi@6.0.1: - resolution: {integrity: sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=} - engines: {node: '>=8'} + resolution: { integrity: sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk= } + engines: { node: '>=8' } + + strip-ansi@7.1.0: + resolution: + { + integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==, + } + engines: { node: '>=12' } + + strip-final-newline@3.0.0: + resolution: { integrity: sha1-UolMMT+/8xiDUoCu1g/3Hr8SuP0= } + engines: { node: '>=12' } + + strip-json-comments@3.1.1: + resolution: { integrity: sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY= } + engines: { node: '>=8' } + + stylis@4.2.0: + resolution: + { + integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==, + } + + sucrase@3.35.0: + resolution: + { + integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==, + } + engines: { node: '>=16 || 14 >=14.17' } + hasBin: true supports-color@7.2.0: - resolution: {integrity: sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=} - engines: {node: '>=8'} + resolution: { integrity: sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= } + engines: { node: '>=8' } supports-color@8.1.1: - resolution: {integrity: sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=} - engines: {node: '>=10'} + resolution: { integrity: sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw= } + engines: { node: '>=10' } supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, + } + engines: { node: '>= 0.4' } + + system-architecture@0.1.0: + resolution: + { + integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==, + } + engines: { node: '>=18' } + + tailwindcss@3.4.17: + resolution: + { + integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==, + } + engines: { node: '>=14.0.0' } + hasBin: true + + thenify-all@1.6.0: + resolution: { integrity: sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= } + engines: { node: '>=0.8' } + + thenify@3.3.1: + resolution: { integrity: sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8= } + + title@4.0.1: + resolution: + { + integrity: sha512-xRnPkJx9nvE5MF6LkB5e8QJjE2FW8269wTu/LQdf7zZqBgPly0QJPf/CWAo7srj5so4yXfoLEdCFgurlpi47zg==, + } + hasBin: true + + to-regex-range@5.0.1: + resolution: { integrity: sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= } + engines: { node: '>=8.0' } tree-kill@1.2.2: - resolution: {integrity: sha1-TKCakJLIi3OnzcXooBtQeweQoMw=} + resolution: { integrity: sha1-TKCakJLIi3OnzcXooBtQeweQoMw= } hasBin: true - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + ts-api-utils@2.0.0: + resolution: + { + integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==, + } + engines: { node: '>=18.12' } + peerDependencies: + typescript: '>=4.8.4' + + ts-interface-checker@0.1.13: + resolution: + { + integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==, + } - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} + tslib@2.8.1: + resolution: + { + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, + } + + type-check@0.4.0: + resolution: { integrity: sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE= } + engines: { node: '>= 0.8.0' } + + typescript-eslint@8.21.0: + resolution: + { + integrity: sha512-txEKYY4XMKwPXxNkN8+AxAdX6iIJAPiJbHE/FpQccs/sxw8Lf26kqwC3cn0xkHlW8kEbLhkhCsjWuMveaY9Rxw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + typescript@5.7.3: + resolution: + { + integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==, + } + engines: { node: '>=14.17' } hasBin: true ufo@1.5.4: - resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + resolution: + { + integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==, + } undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} - engines: {node: '>=14.0'} - - unenv-nightly@2.0.0-20241204-140205-a5d5190: - resolution: {integrity: sha512-jpmAytLeiiW01pl5bhVn9wYJ4vtiLdhGe10oXlJBuQEX8mxjxO8BlEXGHU4vr4yEikjFP1wsomTHt/CLU8kUwg==} + resolution: + { + integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==, + } + engines: { node: '>=14.0' } + + unenv-nightly@2.0.0-20241218-183400-5d6aec3: + resolution: + { + integrity: sha512-7Xpi29CJRbOV1/IrC03DawMJ0hloklDLq/cigSe+J2jkcC+iDres2Cy0r4ltj5f0x7DqsaGaB4/dLuCPPFZnZA==, + } update-browserslist-db@1.1.1: - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + resolution: + { + integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==, + } hasBin: true peerDependencies: browserslist: '>= 4.21.0' + uri-js@4.4.1: + resolution: { integrity: sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34= } + + use-sync-external-store@1.4.0: + resolution: + { + integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==, + } + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + util-deprecate@1.0.2: + resolution: { integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= } + vite@6.0.7: - resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + resolution: + { + integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==, + } + engines: { node: ^18.0.0 || ^20.0.0 || >=22.0.0 } hasBin: true peerDependencies: '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 @@ -1113,28 +4243,66 @@ packages: yaml: optional: true - workerd@1.20241218.0: - resolution: {integrity: sha512-7Z3D4vOVChMz9mWDffE299oQxUWm/pbkeAWx1btVamPcAK/2IuoNBhwflWo3jyuKuxvYuFAdIucgYxc8ICqXiA==} - engines: {node: '>=16'} + which@2.0.2: + resolution: { integrity: sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE= } + engines: { node: '>= 8' } + hasBin: true + + word-wrap@1.2.5: + resolution: + { + integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, + } + engines: { node: '>=0.10.0' } + + workerd@1.20241230.0: + resolution: + { + integrity: sha512-EgixXP0JGXGq6J9lz17TKIZtfNDUvJNG+cl9paPMfZuYWT920fFpBx+K04YmnbQRLnglsivF1GT9pxh1yrlWhg==, + } + engines: { node: '>=16' } hasBin: true - wrangler@3.99.0: - resolution: {integrity: sha512-k0x4rT3G/QCbxcoZY7CHRVlAIS8WMmKdga6lf4d2c3gXFqssh44vwlTDuARA9QANBxKJTcA7JPTJRfUDhd9QBA==} - engines: {node: '>=16.17.0'} + wrangler@3.100.0: + resolution: + { + integrity: sha512-+nsZK374Xnp2BEQQuB/18pnObgsOey0AHVlg75pAdwNaKAmB2aa0/E5rFb7i89DiiwFYoZMz3cARY1UKcm/WQQ==, + } + engines: { node: '>=16.17.0' } hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20241218.0 + '@cloudflare/workers-types': ^4.20241230.0 peerDependenciesMeta: '@cloudflare/workers-types': optional: true wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + } + engines: { node: '>=10' } + + wrap-ansi@8.1.0: + resolution: + { + integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, + } + engines: { node: '>=12' } + + wrap-ansi@9.0.0: + resolution: + { + integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==, + } + engines: { node: '>=18' } ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} + resolution: + { + integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==, + } + engines: { node: '>=10.0.0' } peerDependencies: bufferutil: ^4.0.1 utf-8-validate: '>=5.0.2' @@ -1145,35 +4313,86 @@ packages: optional: true xxhash-wasm@1.1.0: - resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==} + resolution: + { + integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==, + } y18n@5.0.8: - resolution: {integrity: sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=} - engines: {node: '>=10'} + resolution: { integrity: sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU= } + engines: { node: '>=10' } yallist@3.1.1: - resolution: {integrity: sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=} + resolution: { integrity: sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= } + + yaml-diff-patch@2.0.0: + resolution: + { + integrity: sha512-RhfIQPGcKSZhsUmsczXAeg5jNhWXk3tAmhl2kjfZthdyaL0XXXOpvRozUp22HvPStmZsHu8T30/UEfX9oIwGxw==, + } + engines: { node: '>=14' } + hasBin: true + + yaml@1.10.2: + resolution: { integrity: sha1-IwHF/78StGfejaIzOkWeKeeSDks= } + engines: { node: '>= 6' } + + yaml@2.5.1: + resolution: + { + integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==, + } + engines: { node: '>= 14' } + hasBin: true + + yaml@2.6.1: + resolution: + { + integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==, + } + engines: { node: '>= 14' } + hasBin: true yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==, + } + engines: { node: '>= 14' } hasBin: true yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, + } + engines: { node: '>=12' } yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: '>=12' } + + yocto-queue@0.1.0: + resolution: { integrity: sha1-ApTrPe4FAo0x7hpfosVWpqrxChs= } + engines: { node: '>=10' } youch@3.3.4: - resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==} + resolution: + { + integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==, + } zod@3.24.1: - resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} + resolution: + { + integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==, + } snapshots: + '@alloc/quick-lru@5.2.0': {} '@ampproject/remapping@2.3.0': dependencies: @@ -1221,6 +4440,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 + '@babel/generator@7.26.5': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.25.9': dependencies: '@babel/types': 7.26.3 @@ -1233,6 +4460,26 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.26.4 @@ -1249,8 +4496,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.3 + '@babel/helper-plugin-utils@7.25.9': {} + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + '@babel/helper-string-parser@7.25.9': {} '@babel/helper-validator-identifier@7.25.9': {} @@ -1266,6 +4533,24 @@ snapshots: dependencies: '@babel/types': 7.26.3 + '@babel/parser@7.26.5': + dependencies: + '@babel/types': 7.26.5 + + '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -1278,6 +4563,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -1289,6 +4584,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 @@ -1307,28 +4606,45 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.26.5': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.5 + '@babel/parser': 7.26.5 + '@babel/template': 7.25.9 + '@babel/types': 7.26.5 + debug: 4.4.0 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.26.3': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.26.5': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@cloudflare/kv-asset-handler@0.3.4': dependencies: mime: 3.0.0 - '@cloudflare/workerd-darwin-64@1.20241218.0': + '@cloudflare/workerd-darwin-64@1.20241230.0': optional: true - '@cloudflare/workerd-darwin-arm64@1.20241218.0': + '@cloudflare/workerd-darwin-arm64@1.20241230.0': optional: true - '@cloudflare/workerd-linux-64@1.20241218.0': + '@cloudflare/workerd-linux-64@1.20241230.0': optional: true - '@cloudflare/workerd-linux-arm64@1.20241218.0': + '@cloudflare/workerd-linux-arm64@1.20241230.0': optional: true - '@cloudflare/workerd-windows-64@1.20241218.0': + '@cloudflare/workerd-windows-64@1.20241230.0': optional: true '@cloudflare/workers-types@4.20241230.0': {} @@ -1337,112 +4653,306 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)': - dependencies: - esbuild: 0.17.19 + '@drizzle-team/brocli@0.10.2': {} - '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)': + '@emotion/babel-plugin@11.13.5': dependencies: - esbuild: 0.17.19 + '@babel/helper-module-imports': 7.25.9 + '@babel/runtime': 7.26.0 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.3 + 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.14.0': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/is-prop-valid@1.3.1': + dependencies: + '@emotion/memoize': 0.9.0 + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0) + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.4 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.3': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.2 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/babel-plugin': 11.13.5 + '@emotion/is-prop-valid': 1.3.1 + '@emotion/react': 11.14.0(@types/react@19.0.4)(react@19.0.0) + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@19.0.0) + '@emotion/utils': 1.4.2 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.4 + transitivePeerDependencies: + - supports-color + + '@emotion/unitless@0.10.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.0.0)': + dependencies: + react: 19.0.0 + + '@emotion/utils@1.4.2': {} + + '@emotion/weak-memoize@0.4.0': {} + + '@esbuild-kit/core-utils@3.3.2': + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + + '@esbuild-kit/esm-loader@2.6.5': + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.8.1 + + '@esbuild-plugins/node-globals-polyfill@0.2.3(esbuild@0.17.19)': + dependencies: + esbuild: 0.17.19 + + '@esbuild-plugins/node-modules-polyfill@0.2.2(esbuild@0.17.19)': + dependencies: + esbuild: 0.17.19 escape-string-regexp: 4.0.0 rollup-plugin-node-polyfills: 0.2.1 + '@esbuild/aix-ppc64@0.19.12': + optional: true + '@esbuild/aix-ppc64@0.24.2': optional: true '@esbuild/android-arm64@0.17.19': optional: true + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm64@0.19.12': + optional: true + '@esbuild/android-arm64@0.24.2': optional: true '@esbuild/android-arm@0.17.19': optional: true + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-arm@0.19.12': + optional: true + '@esbuild/android-arm@0.24.2': optional: true '@esbuild/android-x64@0.17.19': optional: true + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/android-x64@0.19.12': + optional: true + '@esbuild/android-x64@0.24.2': optional: true '@esbuild/darwin-arm64@0.17.19': optional: true + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.19.12': + optional: true + '@esbuild/darwin-arm64@0.24.2': optional: true '@esbuild/darwin-x64@0.17.19': optional: true + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.19.12': + optional: true + '@esbuild/darwin-x64@0.24.2': optional: true '@esbuild/freebsd-arm64@0.17.19': optional: true + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.19.12': + optional: true + '@esbuild/freebsd-arm64@0.24.2': optional: true '@esbuild/freebsd-x64@0.17.19': optional: true + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.19.12': + optional: true + '@esbuild/freebsd-x64@0.24.2': optional: true '@esbuild/linux-arm64@0.17.19': optional: true + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.19.12': + optional: true + '@esbuild/linux-arm64@0.24.2': optional: true '@esbuild/linux-arm@0.17.19': optional: true + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-arm@0.19.12': + optional: true + '@esbuild/linux-arm@0.24.2': optional: true '@esbuild/linux-ia32@0.17.19': optional: true + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.19.12': + optional: true + '@esbuild/linux-ia32@0.24.2': optional: true '@esbuild/linux-loong64@0.17.19': optional: true + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.19.12': + optional: true + '@esbuild/linux-loong64@0.24.2': optional: true '@esbuild/linux-mips64el@0.17.19': optional: true + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.19.12': + optional: true + '@esbuild/linux-mips64el@0.24.2': optional: true '@esbuild/linux-ppc64@0.17.19': optional: true + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.19.12': + optional: true + '@esbuild/linux-ppc64@0.24.2': optional: true '@esbuild/linux-riscv64@0.17.19': optional: true + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.19.12': + optional: true + '@esbuild/linux-riscv64@0.24.2': optional: true '@esbuild/linux-s390x@0.17.19': optional: true + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.19.12': + optional: true + '@esbuild/linux-s390x@0.24.2': optional: true '@esbuild/linux-x64@0.17.19': optional: true + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/linux-x64@0.19.12': + optional: true + '@esbuild/linux-x64@0.24.2': optional: true @@ -1452,6 +4962,12 @@ snapshots: '@esbuild/netbsd-x64@0.17.19': optional: true + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.19.12': + optional: true + '@esbuild/netbsd-x64@0.24.2': optional: true @@ -1461,35 +4977,158 @@ snapshots: '@esbuild/openbsd-x64@0.17.19': optional: true + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.19.12': + optional: true + '@esbuild/openbsd-x64@0.24.2': optional: true '@esbuild/sunos-x64@0.17.19': optional: true + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.19.12': + optional: true + '@esbuild/sunos-x64@0.24.2': optional: true '@esbuild/win32-arm64@0.17.19': optional: true + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.19.12': + optional: true + '@esbuild/win32-arm64@0.24.2': optional: true '@esbuild/win32-ia32@0.17.19': optional: true + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.19.12': + optional: true + '@esbuild/win32-ia32@0.24.2': optional: true '@esbuild/win32-x64@0.17.19': optional: true + '@esbuild/win32-x64@0.18.20': + optional: true + + '@esbuild/win32-x64@0.19.12': + optional: true + '@esbuild/win32-x64@0.24.2': optional: true + '@eslint-community/eslint-utils@4.4.1(eslint@9.18.0(jiti@1.21.7))': + dependencies: + eslint: 9.18.0(jiti@1.21.7) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.1': + dependencies: + '@eslint/object-schema': 2.1.5 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.2.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.18.0': {} + + '@eslint/object-schema@2.1.5': {} + + '@eslint/plugin-kit@0.2.5': + dependencies: + '@eslint/core': 0.10.0 + levn: 0.4.1 + '@fastify/busboy@2.1.1': {} + '@floating-ui/core@1.6.9': + dependencies: + '@floating-ui/utils': 0.2.9 + + '@floating-ui/dom@1.6.13': + dependencies: + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 + + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@floating-ui/dom': 1.6.13 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + '@floating-ui/utils@0.2.9': {} + + '@hono/zod-openapi@0.18.3(hono@4.6.16)(zod@3.24.1)': + dependencies: + '@asteasolutions/zod-to-openapi': 7.3.0(zod@3.24.1) + '@hono/zod-validator': 0.4.2(hono@4.6.16)(zod@3.24.1) + hono: 4.6.16 + zod: 3.24.1 + + '@hono/zod-validator@0.4.2(hono@4.6.16)(zod@3.24.1)': + dependencies: + hono: 4.6.16 + zod: 3.24.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.1': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -1512,13 +5151,152 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@preact/preset-vite@2.9.4(@babel/core@7.26.0)(preact@10.25.4)(vite@6.0.7(@types/node@20.8.3)(yaml@2.7.0))': + '@mui/base@5.0.0-beta.68(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/types': 7.2.21(@types/react@19.0.4) + '@mui/utils': 6.3.1(@types/react@19.0.4)(react@19.0.0) + '@popperjs/core': 2.11.8 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@types/react': 19.0.4 + + '@mui/core-downloads-tracker@6.3.1': {} + + '@mui/icons-material@6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.4)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.4 + + '@mui/lab@6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/base': 5.0.0-beta.68(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/system': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0) + '@mui/types': 7.2.21(@types/react@19.0.4) + '@mui/utils': 6.3.1(@types/react@19.0.4)(react@19.0.0) + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.4)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0) + '@types/react': 19.0.4 + + '@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/core-downloads-tracker': 6.3.1 + '@mui/system': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0) + '@mui/types': 7.2.21(@types/react@19.0.4) + '@mui/utils': 6.3.1(@types/react@19.0.4)(react@19.0.0) + '@popperjs/core': 2.11.8 + '@types/react-transition-group': 4.4.12(@types/react@19.0.4) + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + react-is: 19.0.0 + react-transition-group: 4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.4)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0) + '@types/react': 19.0.4 + + '@mui/private-theming@6.3.1(@types/react@19.0.4)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/utils': 6.3.1(@types/react@19.0.4)(react@19.0.0) + prop-types: 15.8.1 + react: 19.0.0 + optionalDependencies: + '@types/react': 19.0.4 + + '@mui/styled-engine@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/sheet': 1.4.0 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.0.0 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.4)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0) + + '@mui/system@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/private-theming': 6.3.1(@types/react@19.0.4)(react@19.0.0) + '@mui/styled-engine': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(react@19.0.0) + '@mui/types': 7.2.21(@types/react@19.0.4) + '@mui/utils': 6.3.1(@types/react@19.0.4)(react@19.0.0) + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 19.0.0 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.4)(react@19.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0) + '@types/react': 19.0.4 + + '@mui/types@7.2.21(@types/react@19.0.4)': + optionalDependencies: + '@types/react': 19.0.4 + + '@mui/utils@6.3.1(@types/react@19.0.4)(react@19.0.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/types': 7.2.21(@types/react@19.0.4) + '@types/prop-types': 15.7.14 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 19.0.0 + react-is: 19.0.0 + optionalDependencies: + '@types/react': 19.0.4 + + '@noble/hashes@1.7.0': {} + + '@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.18.0 + + '@paralleldrive/cuid2@2.2.2': + dependencies: + '@noble/hashes': 1.7.0 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@popperjs/core@2.11.8': {} + + '@preact/preset-vite@2.9.4(@babel/core@7.26.0)(preact@10.25.4)(vite@6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0))': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.0) - '@prefresh/vite': 2.4.6(preact@10.25.4)(vite@6.0.7(@types/node@20.8.3)(yaml@2.7.0)) + '@prefresh/vite': 2.4.6(preact@10.25.4)(vite@6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.26.0) debug: 4.4.0 @@ -1527,7 +5305,7 @@ snapshots: node-html-parser: 6.1.13 source-map: 0.7.4 stack-trace: 1.0.0-pre2 - vite: 6.0.7(@types/node@20.8.3)(yaml@2.7.0) + vite: 6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - preact - supports-color @@ -1540,7 +5318,7 @@ snapshots: '@prefresh/utils@1.2.0': {} - '@prefresh/vite@2.4.6(preact@10.25.4)(vite@6.0.7(@types/node@20.8.3)(yaml@2.7.0))': + '@prefresh/vite@2.4.6(preact@10.25.4)(vite@6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.0 '@prefresh/babel-plugin': 0.5.1 @@ -1548,7 +5326,7 @@ snapshots: '@prefresh/utils': 1.2.0 '@rollup/pluginutils': 4.2.1 preact: 10.25.4 - vite: 6.0.7(@types/node@20.8.3)(yaml@2.7.0) + vite: 6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -1614,42 +5392,265 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.30.0': optional: true + '@toolpad/core@0.12.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@mui/icons-material@6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(vite@6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0))': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/icons-material': 6.3.1(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.4)(react@19.0.0) + '@mui/lab': 6.0.0-beta.22(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@mui/material@6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/material': 6.3.1(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react@19.0.0))(@types/react@19.0.4)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@mui/utils': 6.3.1(@types/react@19.0.4)(react@19.0.0) + '@toolpad/utils': 0.12.0(react@19.0.0) + '@vitejs/plugin-react': 4.3.4(vite@6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0)) + client-only: 0.0.1 + invariant: 2.2.4 + path-to-regexp: 6.3.0 + prop-types: 15.8.1 + react: 19.0.0 + transitivePeerDependencies: + - '@emotion/react' + - '@emotion/styled' + - '@mui/material-pigment-css' + - '@types/react' + - react-dom + - supports-color + - vite + + '@toolpad/utils@0.12.0(react@19.0.0)': + dependencies: + invariant: 2.2.4 + prettier: 3.3.3 + react: 19.0.0 + react-is: 19.0.0 + title: 4.0.1 + yaml: 2.5.1 + yaml-diff-patch: 2.0.0 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + '@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.26.5 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.26.5 + '@babel/types': 7.26.5 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.26.5 + '@types/estree@1.0.6': {} + '@types/json-schema@7.0.15': {} + '@types/node-forge@1.3.11': dependencies: '@types/node': 20.8.3 '@types/node@20.8.3': {} + '@types/parse-json@4.0.2': {} + + '@types/prop-types@15.7.14': {} + + '@types/qrcode-svg@1.1.5': {} + + '@types/react-copy-to-clipboard@5.0.7': + dependencies: + '@types/react': 19.0.4 + + '@types/react-transition-group@4.4.12(@types/react@19.0.4)': + dependencies: + '@types/react': 19.0.4 + + '@types/react@19.0.4': + dependencies: + csstype: 3.1.3 + '@types/service-worker-mock@2.0.4': {} + '@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/type-utils': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.21.0 + eslint: 9.18.0(jiti@1.21.7) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.21.0 + debug: 4.4.0 + eslint: 9.18.0(jiti@1.21.7) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.21.0': + dependencies: + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/visitor-keys': 8.21.0 + + '@typescript-eslint/type-utils@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + debug: 4.4.0 + eslint: 9.18.0(jiti@1.21.7) + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.21.0': {} + + '@typescript-eslint/typescript-estree@8.21.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/visitor-keys': 8.21.0 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) + eslint: 9.18.0(jiti@1.21.7) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.21.0': + dependencies: + '@typescript-eslint/types': 8.21.0 + eslint-visitor-keys: 4.2.0 + + '@vitejs/plugin-react@4.3.4(vite@6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0))': + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + acorn-walk@8.3.4: dependencies: acorn: 8.14.0 acorn@8.14.0: {} + 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 + + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + ansi-regex@5.0.1: {} + ansi-regex@6.1.0: {} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@5.0.2: {} + argparse@2.0.1: {} as-table@1.0.55: dependencies: printable-characters: 1.0.42 + autoprefixer@10.4.20(postcss@8.4.49): + dependencies: + browserslist: 4.24.3 + caniuse-lite: 1.0.30001690 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.26.0 + cosmiconfig: 7.1.0 + resolve: 1.22.10 + babel-plugin-transform-hook-names@1.0.2(@babel/core@7.26.0): dependencies: '@babel/core': 7.26.0 + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + blake3-wasm@2.1.5: {} boolbase@1.0.0: {} + 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.24.3: dependencies: caniuse-lite: 1.0.30001690 @@ -1657,6 +5658,12 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.1(browserslist@4.24.3) + buffer-from@1.1.2: {} + + callsites@3.1.0: {} + + camelcase-css@2.0.1: {} + caniuse-lite@1.0.30001690: {} capnp-ts@0.7.0: @@ -1671,29 +5678,70 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chanfana@2.5.2: + chalk@5.4.1: {} + + chanfana@2.6.3: dependencies: '@asteasolutions/zod-to-openapi': 7.3.0(zod@3.24.1) js-yaml: 4.1.0 openapi3-ts: 4.4.0 zod: 3.24.1 + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + chokidar@4.0.3: dependencies: readdirp: 4.0.2 + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + client-only@0.0.1: {} + + clipboardy@4.0.0: + dependencies: + execa: 8.0.1 + is-wsl: 3.1.0 + is64bit: 2.0.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clsx@2.1.1: {} + color-convert@2.0.1: dependencies: color-name: 1.1.4 color-name@1.1.4: {} + colorette@2.0.20: {} + + commander@12.1.0: {} + + commander@4.1.1: {} + + concat-map@0.0.1: {} + concurrently@9.1.2: dependencies: chalk: 4.1.2 @@ -1704,10 +5752,28 @@ snapshots: tree-kill: 1.2.2 yargs: 17.7.2 + confbox@0.1.8: {} + + convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} cookie@0.7.2: {} + 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 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + css-select@5.1.0: dependencies: boolbase: 1.0.0 @@ -1718,16 +5784,33 @@ snapshots: css-what@6.1.0: {} + cssesc@3.0.0: {} + + csstype@3.1.3: {} + data-uri-to-buffer@2.0.2: {} date-fns@4.1.0: {} + dayjs@1.11.13: {} + debug@4.4.0: dependencies: ms: 2.1.3 + deep-is@0.1.4: {} + defu@6.1.4: {} + didyoumean@1.2.2: {} + + dlv@1.1.3: {} + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.26.0 + csstype: 3.1.3 + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -1746,12 +5829,51 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 + drizzle-kit@0.30.1: + dependencies: + '@drizzle-team/brocli': 0.10.2 + '@esbuild-kit/esm-loader': 2.6.5 + esbuild: 0.19.12 + esbuild-register: 3.6.0(esbuild@0.19.12) + transitivePeerDependencies: + - supports-color + + drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@types/react@19.0.4)(react@19.0.0): + optionalDependencies: + '@cloudflare/workers-types': 4.20241230.0 + '@types/react': 19.0.4 + react: 19.0.0 + + drizzle-zod@0.6.1(drizzle-orm@0.38.3(@cloudflare/workers-types@4.20241230.0)(@types/react@19.0.4)(react@19.0.0))(zod@3.24.1): + dependencies: + drizzle-orm: 0.38.3(@cloudflare/workers-types@4.20241230.0)(@types/react@19.0.4)(react@19.0.0) + zod: 3.24.1 + + eastasianwidth@0.2.0: {} + electron-to-chromium@1.5.78: {} + emoji-regex@10.4.0: {} + emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + entities@4.5.0: {} + environment@1.1.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + esbuild-register@3.6.0(esbuild@0.19.12): + dependencies: + debug: 4.4.0 + esbuild: 0.19.12 + transitivePeerDependencies: + - supports-color + esbuild@0.17.19: optionalDependencies: '@esbuild/android-arm': 0.17.19 @@ -1777,6 +5899,57 @@ snapshots: '@esbuild/win32-ia32': 0.17.19 '@esbuild/win32-x64': 0.17.19 + esbuild@0.18.20: + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + + esbuild@0.19.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + esbuild@0.24.2: optionalDependencies: '@esbuild/aix-ppc64': 0.24.2 @@ -1807,13 +5980,148 @@ snapshots: escalade@3.2.0: {} - escape-string-regexp@4.0.0: {} + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@10.0.1(eslint@9.18.0(jiti@1.21.7)): + dependencies: + eslint: 9.18.0(jiti@1.21.7) + + eslint-scope@8.2.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.18.0(jiti@1.21.7): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.10.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.18.0 + '@eslint/plugin-kit': 0.2.5 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.7 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@0.6.1: {} + + estree-walker@2.0.2: {} + + esutils@2.0.3: {} + + eventemitter3@5.0.1: {} + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + exit-hook@2.2.1: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + 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-patch@3.1.1: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.18.0: + dependencies: + reusify: 1.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-root@1.1.0: {} + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.2 + keyv: 4.5.4 - estree-walker@0.6.1: {} + flatted@3.3.2: {} - estree-walker@2.0.2: {} + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 - exit-hook@2.2.1: {} + fraction.js@4.3.7: {} fsevents@2.3.3: optional: true @@ -1824,15 +6132,44 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.3.0: {} + get-source@2.0.12: dependencies: data-uri-to-buffer: 2.0.2 source-map: 0.6.1 + get-stream@8.0.1: {} + + get-tsconfig@4.8.1: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + glob-to-regexp@0.4.1: {} + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + globals@11.12.0: {} + globals@14.0.0: {} + + graphemer@1.4.0: {} + has-flag@4.0.0: {} hasown@2.0.2: @@ -1841,16 +6178,83 @@ snapshots: he@1.2.0: {} + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + hono@4.6.16: {} + human-signals@5.0.0: {} + + husky@9.1.7: {} + + ignore@5.3.2: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + is-core-module@2.16.1: dependencies: hasown: 2.0.2 + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.3.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-number@7.0.0: {} + + is-stream@3.0.0: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + is64bit@2.0.0: + dependencies: + system-architecture: 0.1.0 + + isexe@2.0.0: {} + itty-time@1.0.6: {} + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@1.21.7: {} + js-tokens@4.0.0: {} js-yaml@4.1.0: @@ -1859,12 +6263,77 @@ snapshots: jsesc@3.1.0: {} + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + json5@2.2.3: {} + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + kolorist@1.8.0: {} + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lint-staged@15.4.1: + dependencies: + chalk: 5.4.1 + commander: 12.1.0 + debug: 4.4.0 + execa: 8.0.1 + lilconfig: 3.1.3 + listr2: 8.2.5 + micromatch: 4.0.8 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.6.1 + transitivePeerDependencies: + - supports-color + + listr2@8.2.5: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + lodash@4.17.21: {} + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lru-cache@10.4.3: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -1877,9 +6346,24 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + mime@3.0.0: {} - miniflare@3.20241218.0: + mime@4.0.6: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + miniflare@3.20241230.0: dependencies: '@cspotcode/source-map-support': 0.8.1 acorn: 8.14.0 @@ -1889,7 +6373,7 @@ snapshots: glob-to-regexp: 0.4.1 stoppable: 1.1.0 undici: 5.28.4 - workerd: 1.20241218.0 + workerd: 1.20241230.0 ws: 8.18.0 youch: 3.3.4 zod: 3.24.1 @@ -1898,12 +6382,47 @@ snapshots: - supports-color - utf-8-validate + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.1.2: {} + + mlly@1.7.3: + dependencies: + acorn: 8.14.0 + pathe: 1.1.2 + pkg-types: 1.3.0 + ufo: 1.5.4 + + mobx-react-lite@4.1.0(mobx@6.13.5)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + mobx: 6.13.5 + react: 19.0.0 + use-sync-external-store: 1.4.0(react@19.0.0) + optionalDependencies: + react-dom: 19.0.0(react@19.0.0) + + mobx@6.13.5: {} + ms@2.1.3: {} mustache@4.2.0: {} + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + nanoid@3.3.8: {} + natural-compare@1.4.0: {} + node-forge@1.3.1: {} node-html-parser@6.1.13: @@ -1913,26 +6432,136 @@ snapshots: node-releases@2.0.19: {} + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + nth-check@2.1.1: dependencies: boolbase: 1.0.0 + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + ohash@1.1.4: {} + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + openapi3-ts@4.4.0: dependencies: yaml: 2.7.0 + oppa@0.4.0: + dependencies: + chalk: 4.1.2 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + path-parse@1.0.7: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + path-to-regexp@6.3.0: {} + path-type@4.0.0: {} + pathe@1.1.2: {} picocolors@1.1.1: {} picomatch@2.3.1: {} + pidtree@0.6.0: {} + + pify@2.3.0: {} + + pirates@4.0.6: {} + + pkg-types@1.3.0: + dependencies: + confbox: 0.1.8 + mlly: 1.7.3 + pathe: 1.1.2 + + postcss-import@15.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.4.49): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.49 + + postcss-load-config@4.0.2(postcss@8.4.49): + dependencies: + lilconfig: 3.1.3 + yaml: 2.7.0 + optionalDependencies: + postcss: 8.4.49 + + postcss-nested@6.2.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + postcss@8.4.49: dependencies: nanoid: 3.3.8 @@ -1941,18 +6570,81 @@ snapshots: preact@10.25.4: {} + prelude-ls@1.2.1: {} + + prettier@3.3.3: {} + + prettier@3.4.2: {} + printable-characters@1.0.42: {} + 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: {} + + qrcode-svg@1.1.0: {} + + queue-microtask@1.2.3: {} + + react-dom@19.0.0(react@19.0.0): + dependencies: + react: 19.0.0 + scheduler: 0.25.0 + + react-is@16.13.1: {} + + react-is@19.0.0: {} + + react-refresh@0.14.2: {} + + react-transition-group@4.4.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + '@babel/runtime': 7.26.0 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + + react@19.0.0: {} + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + readdirp@4.0.2: {} + regenerator-runtime@0.14.1: {} + require-directory@2.1.1: {} + resolve-from@4.0.0: {} + + resolve-pkg-maps@1.0.0: {} + resolve@1.22.10: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + reusify@1.0.4: {} + + rfdc@1.4.1: {} + rollup-plugin-inject@3.0.2: dependencies: estree-walker: 0.6.1 @@ -1992,10 +6684,16 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.30.0 fsevents: 2.3.3 + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + rxjs@7.8.1: dependencies: tslib: 2.8.1 + scheduler@0.25.0: {} + selfsigned@2.4.1: dependencies: '@types/node-forge': 1.3.11 @@ -2003,10 +6701,37 @@ snapshots: semver@6.3.1: {} + semver@7.6.3: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + shell-quote@1.8.2: {} + signal-exit@4.1.0: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.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.7.4: {} @@ -2022,16 +6747,50 @@ snapshots: stoppable@1.1.0: {} + string-argv@0.3.2: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-final-newline@3.0.0: {} + + strip-json-comments@3.1.1: {} + + stylis@4.2.0: {} + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -2042,11 +6801,78 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + system-architecture@0.1.0: {} + + tailwindcss@3.4.17: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49) + postcss-nested: 6.2.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + title@4.0.1: + dependencies: + arg: 5.0.2 + chalk: 5.4.1 + clipboardy: 4.0.0 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + tree-kill@1.2.2: {} + ts-api-utils@2.0.0(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + ts-interface-checker@0.1.13: {} + tslib@2.8.1: {} - typescript@5.6.3: {} + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typescript-eslint@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/parser': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.18.0(jiti@1.21.7))(typescript@5.7.3) + eslint: 9.18.0(jiti@1.21.7) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + typescript@5.7.3: {} ufo@1.5.4: {} @@ -2054,9 +6880,10 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 - unenv-nightly@2.0.0-20241204-140205-a5d5190: + unenv-nightly@2.0.0-20241218-183400-5d6aec3: dependencies: defu: 6.1.4 + mlly: 1.7.3 ohash: 1.1.4 pathe: 1.1.2 ufo: 1.5.4 @@ -2067,7 +6894,17 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - vite@6.0.7(@types/node@20.8.3)(yaml@2.7.0): + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-sync-external-store@1.4.0(react@19.0.0): + dependencies: + react: 19.0.0 + + util-deprecate@1.0.2: {} + + vite@6.0.7(@types/node@20.8.3)(jiti@1.21.7)(yaml@2.7.0): dependencies: esbuild: 0.24.2 postcss: 8.4.49 @@ -2075,17 +6912,24 @@ snapshots: optionalDependencies: '@types/node': 20.8.3 fsevents: 2.3.3 + jiti: 1.21.7 yaml: 2.7.0 - workerd@1.20241218.0: + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + workerd@1.20241230.0: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20241218.0 - '@cloudflare/workerd-darwin-arm64': 1.20241218.0 - '@cloudflare/workerd-linux-64': 1.20241218.0 - '@cloudflare/workerd-linux-arm64': 1.20241218.0 - '@cloudflare/workerd-windows-64': 1.20241218.0 + '@cloudflare/workerd-darwin-64': 1.20241230.0 + '@cloudflare/workerd-darwin-arm64': 1.20241230.0 + '@cloudflare/workerd-linux-64': 1.20241230.0 + '@cloudflare/workerd-linux-arm64': 1.20241230.0 + '@cloudflare/workerd-windows-64': 1.20241230.0 - wrangler@3.99.0(@cloudflare/workers-types@4.20241230.0): + wrangler@3.100.0(@cloudflare/workers-types@4.20241230.0): dependencies: '@cloudflare/kv-asset-handler': 0.3.4 '@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19) @@ -2095,14 +6939,14 @@ snapshots: date-fns: 4.1.0 esbuild: 0.17.19 itty-time: 1.0.6 - miniflare: 3.20241218.0 + miniflare: 3.20241230.0 nanoid: 3.3.8 path-to-regexp: 6.3.0 resolve: 1.22.10 selfsigned: 2.4.1 source-map: 0.6.1 - unenv: unenv-nightly@2.0.0-20241204-140205-a5d5190 - workerd: 1.20241218.0 + unenv: unenv-nightly@2.0.0-20241218-183400-5d6aec3 + workerd: 1.20241230.0 xxhash-wasm: 1.1.0 optionalDependencies: '@cloudflare/workers-types': 4.20241230.0 @@ -2118,6 +6962,18 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + ws@8.18.0: {} xxhash-wasm@1.1.0: {} @@ -2126,6 +6982,18 @@ snapshots: yallist@3.1.1: {} + yaml-diff-patch@2.0.0: + dependencies: + fast-json-patch: 3.1.1 + oppa: 0.4.0 + yaml: 2.7.0 + + yaml@1.10.2: {} + + yaml@2.5.1: {} + + yaml@2.6.1: {} + yaml@2.7.0: {} yargs-parser@21.1.1: {} @@ -2140,6 +7008,8 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yocto-queue@0.1.0: {} + youch@3.3.4: dependencies: cookie: 0.7.2 diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..5db72dd --- /dev/null +++ b/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ] +} diff --git a/src/endpoint.ts b/src/endpoint.ts new file mode 100644 index 0000000..22b3f02 --- /dev/null +++ b/src/endpoint.ts @@ -0,0 +1,30 @@ +import { OpenAPIRoute } from 'chanfana' +import { Context } from 'hono' +import { DrizzleD1Database } from 'drizzle-orm/d1' + +export class Endpoint extends OpenAPIRoute { + getDB(c: Context): DrizzleD1Database { + const db = c.get('db') + return db + } + + getKV(c: Context): KVNamespace { + return c.env.file_drops + } + + error(message: string) { + return { + message, + result: false, + data: null, + } + } + + success(data: unknown) { + return { + message: 'ok', + result: true, + data, + } + } +} diff --git a/src/endpoints/taskCreate.ts b/src/endpoints/taskCreate.ts index 798aa82..3c55de1 100644 --- a/src/endpoints/taskCreate.ts +++ b/src/endpoints/taskCreate.ts @@ -1,58 +1,53 @@ -import { Bool, OpenAPIRoute } from "chanfana"; -import { z } from "zod"; -import { Task } from "../types"; +import { Bool } from 'chanfana' +import { z } from 'zod' +import { Context } from 'hono' +import { tasks, taskInsertSchema, taskSelectSchema } from '../../data/schemas' +import { Endpoint } from '../endpoint' -export class TaskCreate extends OpenAPIRoute { - schema = { - tags: ["Tasks"], - summary: "Create a new Task", - request: { - body: { - content: { - "application/json": { - schema: Task, - }, - }, - }, - }, - responses: { - "200": { - description: "Returns the created task", - content: { - "application/json": { - schema: z.object({ - series: z.object({ - success: Bool(), - result: z.object({ - task: Task, - }), - }), - }), - }, - }, - }, - }, - }; +export class TaskCreate extends Endpoint { + schema = { + tags: ['Tasks'], + summary: 'Create a new Task', + request: { + body: { + content: { + 'application/json': { + schema: taskInsertSchema, + }, + }, + }, + }, + responses: { + '200': { + description: 'Returns the created task', + content: { + 'application/json': { + schema: z.object({ + series: z.object({ + success: Bool(), + result: z.object({ + task: taskSelectSchema, + }), + }), + }), + }, + }, + }, + }, + } - async handle(c) { - // Get validated data - const data = await this.getValidatedData(); + async handle(c: Context) { + const data = await this.getValidatedData() - // Retrieve the validated request body - const taskToCreate = data.body; + const taskToCreate = data.body - // Implement your own object insertion here + const db = this.getDB(c) - // return the new task - return { - success: true, - task: { - name: taskToCreate.name, - slug: taskToCreate.slug, - description: taskToCreate.description, - completed: taskToCreate.completed, - due_date: taskToCreate.due_date, - }, - }; - } + const [task] = await db.insert(tasks).values(taskToCreate).returning() + + return { + success: true, + task, + } + } } diff --git a/src/endpoints/taskDelete.ts b/src/endpoints/taskDelete.ts index ed6f691..4453023 100644 --- a/src/endpoints/taskDelete.ts +++ b/src/endpoints/taskDelete.ts @@ -1,56 +1,56 @@ -import { Bool, OpenAPIRoute, Str } from "chanfana"; -import { z } from "zod"; -import { Task } from "../types"; +import { Bool, OpenAPIRoute, Str } from 'chanfana' +import { z } from 'zod' +import { Task } from '../types' export class TaskDelete extends OpenAPIRoute { - schema = { - tags: ["Tasks"], - summary: "Delete a Task", - request: { - params: z.object({ - taskSlug: Str({ description: "Task slug" }), - }), - }, - responses: { - "200": { - description: "Returns if the task was deleted successfully", - content: { - "application/json": { - schema: z.object({ - series: z.object({ - success: Bool(), - result: z.object({ - task: Task, - }), - }), - }), - }, - }, - }, - }, - }; + schema = { + tags: ['Tasks'], + summary: 'Delete a Task', + request: { + params: z.object({ + taskSlug: Str({ description: 'Task slug' }), + }), + }, + responses: { + '200': { + description: 'Returns if the task was deleted successfully', + content: { + 'application/json': { + schema: z.object({ + series: z.object({ + success: Bool(), + result: z.object({ + task: Task, + }), + }), + }), + }, + }, + }, + }, + } - async handle(c) { - // Get validated data - const data = await this.getValidatedData(); + async handle() { + // Get validated data + const data = await this.getValidatedData() - // Retrieve the validated slug - const { taskSlug } = data.params; + // Retrieve the validated slug + const { taskSlug } = data.params - // Implement your own object deletion here + // Implement your own object deletion here - // Return the deleted task for confirmation - return { - result: { - task: { - name: "Build something awesome with Cloudflare Workers", - slug: taskSlug, - description: "Lorem Ipsum", - completed: true, - due_date: "2022-12-24", - }, - }, - success: true, - }; - } + // Return the deleted task for confirmation + return { + result: { + task: { + name: 'Build something awesome with Cloudflare Workers', + slug: taskSlug, + description: 'Lorem Ipsum', + completed: true, + due_date: '2022-12-24', + }, + }, + success: true, + } + } } diff --git a/src/endpoints/taskFetch.ts b/src/endpoints/taskFetch.ts index 07cf324..882e69b 100644 --- a/src/endpoints/taskFetch.ts +++ b/src/endpoints/taskFetch.ts @@ -1,81 +1,81 @@ -import { Bool, OpenAPIRoute, Str } from "chanfana"; -import { z } from "zod"; -import { Task } from "../types"; +import { Bool, OpenAPIRoute, Str } from 'chanfana' +import { z } from 'zod' +import { Task } from '../types' export class TaskFetch extends OpenAPIRoute { - schema = { - tags: ["Tasks"], - summary: "Get a single Task by slug", - request: { - params: z.object({ - taskSlug: Str({ description: "Task slug" }), - }), - }, - responses: { - "200": { - description: "Returns a single task if found", - content: { - "application/json": { - schema: z.object({ - series: z.object({ - success: Bool(), - result: z.object({ - task: Task, - }), - }), - }), - }, - }, - }, - "404": { - description: "Task not found", - content: { - "application/json": { - schema: z.object({ - series: z.object({ - success: Bool(), - error: Str(), - }), - }), - }, - }, - }, - }, - }; + schema = { + tags: ['Tasks'], + summary: 'Get a single Task by slug', + request: { + params: z.object({ + taskSlug: Str({ description: 'Task slug' }), + }), + }, + responses: { + '200': { + description: 'Returns a single task if found', + content: { + 'application/json': { + schema: z.object({ + series: z.object({ + success: Bool(), + result: z.object({ + task: Task, + }), + }), + }), + }, + }, + }, + '404': { + description: 'Task not found', + content: { + 'application/json': { + schema: z.object({ + series: z.object({ + success: Bool(), + error: Str(), + }), + }), + }, + }, + }, + }, + } - async handle(c) { - // Get validated data - const data = await this.getValidatedData(); + async handle() { + // Get validated data + const data = await this.getValidatedData() - // Retrieve the validated slug - const { taskSlug } = data.params; + // Retrieve the validated slug + const { taskSlug } = data.params - // Implement your own object fetch here + // Implement your own object fetch here - const exists = true; + const exists = true - // @ts-ignore: check if the object exists - if (exists === false) { - return Response.json( - { - success: false, - error: "Object not found", - }, - { - status: 404, - }, - ); - } + // @ts-expect-error: check if the object exists + if (exists === false) { + return Response.json( + { + success: false, + error: 'Object not found', + }, + { + status: 404, + }, + ) + } - return { - success: true, - task: { - name: "my task", - slug: taskSlug, - description: "this needs to be done", - completed: false, - due_date: new Date().toISOString().slice(0, 10), - }, - }; - } + return { + success: true, + task: { + name: 'my task', + slug: taskSlug, + description: 'this needs to be done', + completed: false, + due_date: new Date().toISOString().slice(0, 10), + }, + } + } } diff --git a/src/endpoints/taskList.ts b/src/endpoints/taskList.ts index 8f50506..0aeb13a 100644 --- a/src/endpoints/taskList.ts +++ b/src/endpoints/taskList.ts @@ -1,69 +1,69 @@ -import { Bool, Num, OpenAPIRoute } from "chanfana"; -import { z } from "zod"; -import { Task } from "../types"; +import { Bool, Num, OpenAPIRoute } from 'chanfana' +import { z } from 'zod' +import { Task } from '../types' export class TaskList extends OpenAPIRoute { - schema = { - tags: ["Tasks"], - summary: "List Tasks", - request: { - query: z.object({ - page: Num({ - description: "Page number", - default: 0, - }), - isCompleted: Bool({ - description: "Filter by completed flag", - required: false, - }), - }), - }, - responses: { - "200": { - description: "Returns a list of tasks", - content: { - "application/json": { - schema: z.object({ - series: z.object({ - success: Bool(), - result: z.object({ - tasks: Task.array(), - }), - }), - }), - }, - }, - }, - }, - }; + schema = { + tags: ['Tasks'], + summary: 'List Tasks', + request: { + query: z.object({ + page: Num({ + description: 'Page number', + default: 0, + }), + isCompleted: Bool({ + description: 'Filter by completed flag', + required: false, + }), + }), + }, + responses: { + '200': { + description: 'Returns a list of tasks', + content: { + 'application/json': { + schema: z.object({ + series: z.object({ + success: Bool(), + result: z.object({ + tasks: Task.array(), + }), + }), + }), + }, + }, + }, + }, + } - async handle(c) { - // Get validated data - const data = await this.getValidatedData(); + async handle() { + // Get validated data + // const data = await this.getValidatedData(); - // Retrieve the validated parameters - const { page, isCompleted } = data.query; + // Retrieve the validated parameters + // const { page, isCompleted } = data.query; - // Implement your own object list here + // Implement your own object list here - return { - success: true, - tasks: [ - { - name: "Clean my room", - slug: "clean-room", - description: null, - completed: false, - due_date: "2025-01-05", - }, - { - name: "Build something awesome with Cloudflare Workers", - slug: "cloudflare-workers", - description: "Lorem Ipsum", - completed: true, - due_date: "2022-12-24", - }, - ], - }; - } + return { + success: true, + tasks: [ + { + name: 'Clean my room', + slug: 'clean-room', + description: null, + completed: false, + due_date: '2025-01-05', + }, + { + name: 'Build something awesome with Cloudflare Workers', + slug: 'cloudflare-workers', + description: 'Lorem Ipsum', + completed: true, + due_date: '2022-12-24', + }, + ], + } + } } diff --git a/src/files/fileCreate.ts b/src/files/fileCreate.ts new file mode 100644 index 0000000..98a9a8f --- /dev/null +++ b/src/files/fileCreate.ts @@ -0,0 +1,119 @@ +import { Context } from 'hono' +import mine from 'mime' +import { createId, init } from '@paralleldrive/cuid2' +import { Endpoint } from '../endpoint' +import { z } from 'zod' +import dayjs, { ManipulateType } from 'dayjs' + +import { files, InsertFileType } from '../../data/schemas' + +const duration = ['day', 'week', 'month', 'year', 'hour', 'minute'] + +function resolveDuration(str: string): [number, ManipulateType] { + const match = new RegExp(`^(\\d+)(${duration.join('|')})$`).exec(str) + if (!match) { + return [1, 'hour'] + } + return [Number.parseInt(match[1], 10), match[2] as ManipulateType] +} + +async function sha1(data: ArrayBuffer) { + const digest = await crypto.subtle.digest( + { + name: 'SHA-1', + }, + data, + ) + const array = Array.from(new Uint8Array(digest)) + return array.map((b) => b.toString(16).padStart(2, '0')).join('') +} + +export class FileCreate extends Endpoint { + schema = { + responses: { + '200': { + description: 'Returns the file info', + + content: { + 'application/json': { + schema: z.object({ + hash: z.string(), + }), + }, + }, + }, + }, + } + + async handle(c: Context) { + let data: ArrayBuffer | null = null + let filename: string + let type: string | null + let size: number = 0 + const contentType = c.req.header('Content-Type') + if ( + contentType?.startsWith('multipart/form-data') || + contentType?.startsWith('application/x-www-form-urlencoded') + ) { + const formData = await c.req.formData() + const file = formData.get('file') as File + data = await file.arrayBuffer() + filename = file.name + type = file.type ?? mine.getType(filename) ?? 'text/plain' + size = file.size + } else { + const blob = await c.req.blob() + data = await blob.arrayBuffer() + filename = (blob as File)?.name ?? '' + type = blob.type + size = blob.size + } + + if (!data || data.byteLength === 0) { + return this.error('分享内容为空') + } + + const envMax = Number.parseInt(c.env.SHARE_MAX_SIZE_IN_MB, 10) + const max = Number.isNaN(envMax) || envMax <= 0 ? 10 : envMax + + if (size > max * 1024 * 1024) { + return this.error(`文件大于 ${max}M`) + } + + const kv = this.getKV(c) + const key = createId() + await kv.put(key, data) + const hash = await sha1(data) + + const db = this.getDB(c) + // todo 共享码冲突 + const shareCode = init({ + length: 6, + })().toUpperCase() + + const [due, dueType] = resolveDuration(c.env.SHARE_DURATION) + console.log(c.env.SHARE_DURATION, due, dueType) + const dueDate = dayjs().add(due, dueType).toDate() + + const insert: InsertFileType = { + objectId: key, + filename, + type, + hash, + code: shareCode, + due_date: dueDate, + } + + const [record] = await db.insert(files).values(insert).returning({ + hash: files.hash, + code: files.code, + due_date: files.due_date, + }) + + return { + message: 'ok', + result: true, + data: record, + } + } +} diff --git a/src/files/fileFetch.ts b/src/files/fileFetch.ts new file mode 100644 index 0000000..8068698 --- /dev/null +++ b/src/files/fileFetch.ts @@ -0,0 +1,82 @@ +import { z } from 'zod' +import { Context } from 'hono' +import { eq } from 'drizzle-orm' + +import { Endpoint } from '../endpoint' +import { files, fileSelectSchema } from '../../data/schemas' + +export class FileFetch extends Endpoint { + schema = { + request: { + params: z.object({ + objectId: z.string(), + }), + }, + responses: { + '200': { + description: 'Returns a single file if found', + content: { + 'application/json': { + schema: fileSelectSchema, + }, + }, + }, + '404': { + description: 'File not found', + content: { + 'application/json': { + schema: z.object({ + message: z.string(), + }), + }, + }, + }, + }, + } + + async handle(c: Context) { + const data = await this.getValidatedData() + const objectId = data.params.objectId + const db = this.getDB(c) + const [record] = await db + .select() + .from(files) + .where(eq(files.objectId, objectId)) + const kv = this.getKV(c) + if (!record) { + await kv.delete(objectId) + } + if (!record) { + return new Response('Invalid object ID', { + status: 400, + headers: { + 'Content-Type': 'plain/text', + }, + }) + } + const file = await kv.get(objectId, 'arrayBuffer') + + if (!file) { + return new Response('Not found', { + status: 404, + headers: { + 'Content-Type': 'plain/text', + }, + }) + } + + const isText = record.type === 'plain/string' + + return new Response(file, { + status: 200, + headers: new Headers({ + 'Content-Type': isText + ? 'plain/text' + : (record.type ?? 'application/octet-stream'), + 'Content-Disposition': isText + ? 'inline' + : `attachment; filename="${record.filename}"`, + }), + }) + } +} diff --git a/src/files/fileShareCodeFetch.ts b/src/files/fileShareCodeFetch.ts new file mode 100644 index 0000000..07cee94 --- /dev/null +++ b/src/files/fileShareCodeFetch.ts @@ -0,0 +1,63 @@ +import { Endpoint } from '../endpoint' +import { Context } from 'hono' +import { z } from 'zod' +import { files, fileSelectSchema } from '../../data/schemas' +import { eq } from 'drizzle-orm' +import dayjs from 'dayjs' + +export class FileShareCodeFetch extends Endpoint { + schema = { + request: { + params: z.object({ + code: z.string().length(6, 'Invalid code'), + }), + }, + responses: { + '200': { + description: 'Returns a single file if found', + content: { + 'application/json': { + schema: fileSelectSchema, + }, + }, + }, + '404': { + description: 'File not found', + content: { + 'application/json': { + schema: z.object({ + message: z.string(), + }), + }, + }, + }, + }, + } + async handle(c: Context) { + const data = await this.getValidatedData() + const code = data.params.code.toUpperCase() + + const db = this.getDB(c) + const [file] = await db + .select({ + code: files.code, + filename: files.filename, + hash: files.hash, + objectId: files.objectId, + due_date: files.due_date, + type: files.type, + }) + .from(files) + .where(eq(files.code, code)) + if (!file) { + return this.error('分享码无效') + } + + const day = dayjs(file.due_date) + if (day.isBefore(dayjs())) { + return this.error('分享已过期') + } + + return this.success(file) + } +} diff --git a/src/files/index.ts b/src/files/index.ts new file mode 100644 index 0000000..dc0e04b --- /dev/null +++ b/src/files/index.ts @@ -0,0 +1,3 @@ +export * from './fileCreate' +export * from './fileFetch' +export * from './fileShareCodeFetch' diff --git a/src/index.ts b/src/index.ts index fa62e57..7657c85 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,35 +1,66 @@ -import {fromHono} from "chanfana"; -import {Hono} from "hono"; -import {TaskCreate} from "./endpoints/taskCreate"; -import {TaskDelete} from "./endpoints/taskDelete"; -import {TaskFetch} from "./endpoints/taskFetch"; -import {TaskList} from "./endpoints/taskList"; +import { fromHono } from 'chanfana' +import { Hono } from 'hono' +import { dbMiddleware } from './middlewares' +import { TaskCreate } from './endpoints/taskCreate' +import { TaskDelete } from './endpoints/taskDelete' +import { TaskFetch } from './endpoints/taskFetch' +import { TaskList } from './endpoints/taskList' +import { FileCreate, FileFetch, FileShareCodeFetch } from './files' + +import { scheduled } from './scheduled' // Start a Hono app const app = new Hono<{ Bindings: Env -}>(); +}>() + +// DB service +app.use('/api/*', dbMiddleware) +app.use('/files/*', dbMiddleware) // Setup OpenAPI registry const openapi = fromHono(app, { - docs_url: null, -}); + docs_url: '/doc', +}) // Register OpenAPI endpoints -openapi.get("/api/tasks", TaskList); -openapi.post("/api/tasks", TaskCreate); -openapi.get("/api/tasks/:taskSlug", TaskFetch); -openapi.delete("/api/tasks/:taskSlug", TaskDelete); +openapi.get('/api/tasks', TaskList) +openapi.post('/api/tasks', TaskCreate) +openapi.get('/api/tasks/:taskSlug', TaskFetch) +openapi.delete('/api/tasks/:taskSlug', TaskDelete) + +openapi.put('/files', FileCreate) +openapi.get('/files/:objectId', FileFetch) +openapi.get('/files/share/:code', FileShareCodeFetch) + +app.all( + '/api/*', + async () => + new Response('Method Not Allowed', { + status: 405, + }), +) + +app.all( + '/files/*', + async () => + new Response('Method Not Allowed', { + status: 405, + }), +) // Web -app.get("/*", async (c) => { +app.get('/*', async (c) => { if (c.env.ENVIRONMENT === 'dev') { const url = new URL(c.req.raw.url) - url.port = c.env.VITE_PORT + url.port = c.env.SHARE_PORT return fetch(new Request(url, c.req.raw)) } return c.env.ASSETS.fetch(c.req.raw) }) // Export the Hono app -export default app; +export default { + fetch: app.fetch, + scheduled, +} diff --git a/src/middlewares/db.middleware.ts b/src/middlewares/db.middleware.ts new file mode 100644 index 0000000..3d7d130 --- /dev/null +++ b/src/middlewares/db.middleware.ts @@ -0,0 +1,16 @@ +import { createMiddleware } from 'hono/factory' +import { HTTPException } from 'hono/http-exception' +import { Context } from 'hono' +import { drizzle } from 'drizzle-orm/d1' + +export const dbMiddleware = createMiddleware<{ + Variables: { + db?: D1Database + } +}>(async (c: Context, next) => { + if (!c.env.DB) { + throw new HTTPException(400, { message: 'D1 database binding not found' }) + } + c.set('db', drizzle(c.env.DB)) + await next() +}) diff --git a/src/middlewares/index.ts b/src/middlewares/index.ts new file mode 100644 index 0000000..508e3be --- /dev/null +++ b/src/middlewares/index.ts @@ -0,0 +1 @@ +export * from './db.middleware' diff --git a/src/scheduled.ts b/src/scheduled.ts new file mode 100644 index 0000000..9c8e25c --- /dev/null +++ b/src/scheduled.ts @@ -0,0 +1,23 @@ +import { drizzle } from 'drizzle-orm/d1' +import { files } from '../data/schemas' +import { lte } from 'drizzle-orm' + +export async function scheduled(event: ScheduledEvent, env: Env) { + const db = drizzle(env.DB) + const kv = env.file_drops + + const now = new Date() + + const records = await db + .delete(files) + .where(lte(files.due_date, now)) + .returning({ + objectId: files.objectId, + }) + + if (records.length) { + await Promise.all(records.map((d) => kv.delete(d.objectId))) + } + + console.log(`clear before ${now}`) +} diff --git a/src/types.ts b/src/types.ts index f91817f..47f9cda 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,10 +1,10 @@ -import { DateTime, Str } from "chanfana"; -import { z } from "zod"; +import { DateTime, Str } from 'chanfana' +import { z } from 'zod' export const Task = z.object({ - name: Str({ example: "lorem" }), - slug: Str(), - description: Str({ required: false }), - completed: z.boolean().default(false), - due_date: DateTime(), -}); + name: Str({ example: 'lorem' }), + slug: Str(), + description: Str({ required: false }), + completed: z.boolean().default(false), + due_date: DateTime(), +}) diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..8f6d416 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: ['./index.html', './web/**/*.{js,ts,jsx,tsx}'], + theme: { + extend: {}, + }, + corePlugins: { + preflight: false, + }, + plugins: [], +} diff --git a/tsconfig.json b/tsconfig.json index 8510617..0d0105d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,5 +10,9 @@ { "path": "./tsconfig.worker.json" } - ] + ], + "compilerOptions": { + "@data": ["./data"], + "strict": true + } } diff --git a/tsconfig.node.json b/tsconfig.node.json index db0becc..287ba33 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -18,7 +18,10 @@ "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true + "noUncheckedSideEffectImports": true, + "paths": { + "@data/*": ["./data/*"] + } }, "include": ["vite.config.ts"] } diff --git a/tsconfig.web.json b/tsconfig.web.json index 6ddd51b..fc4413a 100644 --- a/tsconfig.web.json +++ b/tsconfig.web.json @@ -8,9 +8,9 @@ "skipLibCheck": true, "paths": { "react": ["./node_modules/preact/compat/"], - "react-dom": ["./node_modules/preact/compat/"] + "react-dom": ["./node_modules/preact/compat/"], + "@data/*": ["./data/*"] }, - /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, @@ -19,7 +19,6 @@ "noEmit": true, "jsx": "react-jsx", "jsxImportSource": "preact", - /* Linting */ "strict": true, "noUnusedLocals": true, @@ -27,5 +26,5 @@ "noFallthroughCasesInSwitch": true, "noUncheckedSideEffectImports": true }, - "include": ["web"] + "include": ["web", "data"] } diff --git a/tsconfig.worker.json b/tsconfig.worker.json index 2212dec..013a674 100644 --- a/tsconfig.worker.json +++ b/tsconfig.worker.json @@ -1,32 +1,32 @@ { - "compilerOptions": { - "allowJs": true, - "allowSyntheticDefaultImports": true, - "baseUrl": "src", - "declaration": true, - "sourceMap": true, - "esModuleInterop": true, - "inlineSourceMap": false, - "lib": ["esnext"], - "listEmittedFiles": false, - "listFiles": false, - "moduleResolution": "node", - "noFallthroughCasesInSwitch": true, - "pretty": true, - "resolveJsonModule": true, - "rootDir": ".", - "skipLibCheck": true, - "strict": false, - "traceResolution": false, - "outDir": "", - "target": "esnext", - "module": "esnext", - "types": [ - "@types/node", - "@types/service-worker-mock", - "@cloudflare/workers-types/2023-07-01" - ] - }, - "exclude": ["node_modules", "dist", "tests"], - "include": ["src", "scripts", "worker-configuration.d.ts"] + "compilerOptions": { + "allowJs": true, + "allowSyntheticDefaultImports": true, + "baseUrl": "src", + "declaration": true, + "sourceMap": true, + "esModuleInterop": true, + "inlineSourceMap": false, + "lib": ["esnext"], + "listEmittedFiles": false, + "listFiles": false, + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "pretty": true, + "resolveJsonModule": true, + "rootDir": ".", + "skipLibCheck": true, + "strict": false, + "strictNullChecks": true, + "traceResolution": false, + "outDir": "", + "target": "esnext", + "module": "esnext", + "types": ["@types/node", "@types/service-worker-mock", "@cloudflare/workers-types/2023-07-01"], + "paths": { + "@data/*": ["./data/*"] + } + }, + "exclude": ["node_modules", "dist", "tests"], + "include": ["src", "scripts", "worker-configuration.d.ts", "data"] } diff --git a/vite.config.ts b/vite.config.ts index b995c32..ff75ca5 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,7 +1,28 @@ -import { defineConfig } from 'vite' +import { defineConfig, loadEnv } from 'vite' import preact from '@preact/preset-vite' // https://vite.dev/config/ -export default defineConfig({ - plugins: [preact()], -}) +export default ({ mode }: { mode: string }) => { + process.env = { ...process.env, ...loadEnv(mode, process.cwd(), 'SHARE_') } + + return defineConfig({ + plugins: [ + preact({ + babel: { + plugins: [ + [ + '@babel/plugin-proposal-decorators', + { + version: '2023-05', + }, + ], + ], + }, + }), + ], + server: { + port: Number(process.env.SHARE_PORT), + }, + envPrefix: 'SHARE_', + }) +} diff --git a/web/App.tsx b/web/App.tsx new file mode 100644 index 0000000..7ad706a --- /dev/null +++ b/web/App.tsx @@ -0,0 +1,259 @@ +import { useState, useRef } from 'preact/hooks' +import { useDialogs } from '@toolpad/core/useDialogs' +import Container from '@mui/material/Container' +import Paper from '@mui/material/Paper' +import Box from '@mui/material/Box' +import InputLabel from '@mui/material/InputLabel' +import Typography from '@mui/material/Typography' +import TabContext from '@mui/lab/TabContext' +import TabList from '@mui/lab/TabList' +import TabPanel from '@mui/lab/TabPanel' +import Tab from '@mui/material/Tab' +import TextField from '@mui/material/TextField' +import { styled } from '@mui/material/styles' +import Button from '@mui/material/Button' +import CloudUploadIcon from '@mui/icons-material/CloudUpload' +import SendIcon from '@mui/icons-material/Send' +import FileIcon from '@mui/icons-material/Description' +import Divider from '@mui/material/Divider' +import Backdrop from '@mui/material/Backdrop' +import CircularProgress from '@mui/material/CircularProgress' + +import { + Code, + Message, + useMessage, + FileDialog, + ShareDialog, +} from './components' +import './app.css' +import { resolveFileByCode, uploadFile } from './api' + +const VisuallyHiddenInput = styled('input')({ + clip: 'rect(0 0 0 0)', + clipPath: 'inset(50%)', + height: 1, + overflow: 'hidden', + position: 'absolute', + bottom: 0, + left: 0, + whiteSpace: 'nowrap', + width: 1, +}) + +const envMax = Number.parseInt(import.meta.env.SHARE_MAX_SIZE_IN_MB, 10) +const MAX_SIZE = Number.isNaN(envMax) || envMax <= 0 ? 10 : envMax + +export function App() { + const [tab, setTab] = useState('text') + const [messageProps, message] = useMessage() + const dialogs = useDialogs() + + const [backdropOpen, setBackdropOpen] = useState(false) + const handleBackdropClose = () => { + setBackdropOpen(false) + } + const handleBackdropOpen = () => { + setBackdropOpen(true) + } + + const handleChangeTab = (_event: unknown, newValue: string) => { + setTab(newValue) + setText('') + } + + const [text, setText] = useState('') + const [file, setFile] = useState(null) + const [code, setCode] = useState('') + + const reset = useRef(() => { + setText('') + setFile(null) + setCode('') + setTab('text') + }) + + const handleResolveFile = useRef(async (code: string) => { + if (!code || code.length !== 6) return + setCode(code) + handleBackdropOpen() + try { + const data = await resolveFileByCode(code) + handleBackdropClose() + if (!data.result || !data.data) { + message.error(data.message) + return + } + // 打开弹窗 + await dialogs + .open(FileDialog, { ...data.data, message }) + .then(reset.current) + } catch (e) { + const data = (e as { message: string }).message || JSON.stringify(e) + message.error(data) + handleBackdropClose() + } + }) + + const handleTextInput = (e: InputEvent) => { + const target: HTMLInputElement = e.target as HTMLInputElement + setText(target.value) + setFile(null) + } + + const handleFileChange = (e: InputEvent) => { + const target: HTMLInputElement = e.target as HTMLInputElement + const file = target?.files?.[0] ?? null + if (file && file.size > MAX_SIZE * 1024 * 1024) { + message.error(`文件大于 ${MAX_SIZE}M`) + ;(e.target as HTMLInputElement).value = '' + return + } + setFile(file) + } + + const handleShare = async () => { + if ((tab === 'text' && !text) || (tab === 'file' && !file)) return + let data: Blob | null = file + if (tab === 'text') { + data = new Blob([text], { + type: 'plain/string', + }) + } + if (!data) return + handleBackdropOpen() + try { + const uploaded = await uploadFile(data) + handleBackdropClose() + if (!uploaded.result || !uploaded.data) { + message.error(uploaded.message) + return + } + await dialogs + .open(ShareDialog, { ...uploaded.data, message }) + .then(reset.current) + } catch (e) { + const data = (e as { message: string }).message || JSON.stringify(e) + message.error(data) + handleBackdropClose() + } + } + + return ( + + + + Cloudflare Drop + + + + + ({ + alignItems: 'center', + [theme.breakpoints.down('sm')]: { + flexDirection: 'column', + alignItems: 'start', + }, + })} + > + + + 分享码: + + + + + + + + + + + + + + + + + + + + + + {file && ( +
+ + + {file.name} + +
+ )} +
+
+
+
+ + + +
+
+ + ({ color: '#fff', zIndex: theme.zIndex.drawer + 1 })} + open={backdropOpen} + > + + +
+ ) +} diff --git a/web/api/index.ts b/web/api/index.ts new file mode 100644 index 0000000..84a351c --- /dev/null +++ b/web/api/index.ts @@ -0,0 +1,23 @@ +export async function resolveFileByCode( + code: string, +): Promise> { + const response = await fetch(`/files/share/${code}`) + return await response.json() +} + +export async function uploadFile( + data: Blob, +): Promise> { + const formData = new FormData() + formData.append('file', data) + const response = await fetch('/files', { + method: 'PUT', + body: formData, + }) + return await response.json() +} + +export async function fetchPlainText(objectId: string): Promise { + const response = await fetch(`/files/${objectId}`) + return response.text() +} diff --git a/web/app.css b/web/app.css index 088ed3a..e69de29 100644 --- a/web/app.css +++ b/web/app.css @@ -1,25 +0,0 @@ -#app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.preact:hover { - filter: drop-shadow(0 0 2em #673ab8aa); -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/web/app.tsx b/web/app.tsx deleted file mode 100644 index 3f5d107..0000000 --- a/web/app.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { useState } from 'preact/hooks' -import preactLogo from './assets/preact.svg' -import viteLogo from '/vite.svg' -import './app.css' - -export function App() { - const [count, setCount] = useState(0) - - return ( - <> - -

Vite + Preact

-
- -

- Edit src/app.tsx and save to test HMR -

-
-

- Check out{' '} - - create-preact - - , the official Preact + Vite starter -

-

- Click on the Vite and Preact logos to learn more -

- - ) -} diff --git a/web/common.ts b/web/common.ts new file mode 100644 index 0000000..21a156e --- /dev/null +++ b/web/common.ts @@ -0,0 +1,18 @@ +export function copyToClipboard(text: string): Promise { + if (navigator.clipboard) { + return navigator.clipboard.writeText(text) + } + return new Promise((resolve, reject) => { + const textarea = document.createElement('textarea') + textarea.value = text + document.body.appendChild(textarea) + textarea.select() + try { + document.execCommand('copy') + resolve() + } catch (e) { + reject(`Failed to copy text: ${(e as { message: string }).message}`) + } + document.body.removeChild(textarea) + }) +} diff --git a/web/components/BasicDialog.tsx b/web/components/BasicDialog.tsx new file mode 100644 index 0000000..a4f1e76 --- /dev/null +++ b/web/components/BasicDialog.tsx @@ -0,0 +1,72 @@ +import { ComponentChildren } from 'preact' +import { forwardRef, ReactElement, Ref } from 'preact/compat' +import { DialogProps } from '@toolpad/core/useDialogs' +import Dialog from '@mui/material/Dialog' +import DialogTitle from '@mui/material/DialogTitle' +import DialogContent from '@mui/material/DialogContent' +import Slide from '@mui/material/Slide' +import { TransitionProps } from '@mui/material/transitions' +import IconButton from '@mui/material/IconButton' +import CloseIcon from '@mui/icons-material/Close' + +const Transition = forwardRef(function Transition( + props: TransitionProps & { + children: ReactElement + }, + ref: Ref, +) { + // @ts-expect-error preact type + return +}) + +export type BasicDialogProps = Omit & { + title?: string + children: ComponentChildren +} + +export function BasicDialog({ + open, + onClose, + title, + children, +}: BasicDialogProps) { + const handleClose = async (_e: unknown, reason?: string) => { + if (reason === 'backdropClick' || reason === 'escapeKeyDown') { + return + } + await onClose() + } + + return ( + + {title} + ({ + position: 'absolute', + right: 8, + top: 8, + color: theme.palette.grey[500], + })} + > + + + + {children} + + + ) +} diff --git a/web/components/Code.tsx b/web/components/Code.tsx new file mode 100644 index 0000000..be8d4c1 --- /dev/null +++ b/web/components/Code.tsx @@ -0,0 +1,154 @@ +import { useState, useEffect, useRef } from 'preact/hooks' +import TextField from '@mui/material/TextField' +import Box from '@mui/material/Box' + +interface CodeProps { + length: number + value?: string + disabled?: boolean + onChange?: (value: string) => void +} + +function isValidateCode(str: string | string[], length = 6) { + if (!str) return false + if (str.length !== length) return false + return (Array.isArray(str) ? str : str.split('')).every((d) => + /^[a-zA-Z\d]$/.test(d), + ) +} + +export function Code({ length, value, onChange, disabled }: CodeProps) { + const [codes, updateCodes] = useState>( + value ? value.split('') : new Array(length).fill(''), + ) + + useEffect(() => { + if (codes.join('') === value) return + updateCodes((value ?? '').split('')) + }, [value]) + + useEffect(() => { + const code = + new URL(window.location.href).searchParams.get('code')?.toUpperCase() ?? + '' + if (code.length === length && isValidateCode(code, length)) { + updateCodes(code.split('')) + } + }, []) + + useEffect(() => { + if ( + codes.length === length && + codes.every((d) => /^[a-zA-Z\d]$/.test(d)) && + onChange + ) { + onChange(codes.join('')) + } + }, [codes, onChange]) + + const update = (key: string, index: number) => { + if (index < 0 || index >= length) return + const values = [...codes] + values[index] = key + updateCodes(values) + } + + const el = useRef(null) + + const handleAutoFocus = (index: number) => { + if (!el.current) return + const i = Math.max(0, Math.min(index, length - 1)) + const inputs = el.current.querySelectorAll('input') + if (inputs[i]) { + setTimeout(() => { + inputs[i].focus() + }) + } + } + + const handleInput = (e: InputEvent, index: number) => { + if (disabled) return + const target: HTMLInputElement = e.target as HTMLInputElement + const value = target.value.slice(0, 1).toUpperCase() + // + // if (!value) { + // const values = [...codes] + // values[index] = '' + // updateCodes(values) + // if (index > 0) { + // handleAutoFocus(index - 1) + // } + // return + // } + + if (!/^[a-zA-Z\d]$/.test(value)) { + target.value = '' + return + } + target.value = value + + update(value, index) + + if (index < length - 1) { + handleAutoFocus(index + 1) + } + } + + const handleKeyUp = (e: KeyboardEvent, index: number) => { + if (disabled) return + if (e.key === 'Backspace') { + update('', index) + if (index > 0) { + handleAutoFocus(index - 1) + } + } + + if ( + e.key === 'Enter' && + codes.length === length && + codes.every((d) => /^[a-zA-Z\d]$/.test(d)) && + onChange + ) { + onChange(codes.join('')) + } + } + + const handlePaste = (e: ClipboardEvent, index: number) => { + if (disabled) return + e.preventDefault() + const string = e?.clipboardData?.getData('text') ?? '' + const pasted = /(?:提取码:\s*|^)([a-zA-Z0-9]{6})(?=\s|\b|$)/.exec(string) + const paste = pasted?.[1].toUpperCase() + if (!paste) return + const values = [...codes] + for (let i = 0; i < length; i++) { + values[index + i] = paste[i] ?? '' + } + updateCodes(values) + handleAutoFocus(index + paste.length) + } + + return ( + + {new Array(length).fill(1).map((_, index) => ( + 0 && !codes[index - 1]} + sx={{ + '.MuiInputBase-root': { + fontSize: 20, + }, + + '.MuiInputBase-root input': { + paddingBlock: '0.4em', + textAlign: 'center', + }, + }} + onInput={(e) => handleInput(e, index)} + onKeyUp={(e) => handleKeyUp(e, index)} + onPaste={(e) => handlePaste(e, index)} + /> + ))} + + ) +} diff --git a/web/components/FileDialog.tsx b/web/components/FileDialog.tsx new file mode 100644 index 0000000..155ee02 --- /dev/null +++ b/web/components/FileDialog.tsx @@ -0,0 +1,140 @@ +import { useEffect, useState } from 'preact/hooks' +import { DialogProps } from '@toolpad/core/useDialogs' +import Button from '@mui/material/Button' +import Box from '@mui/material/Box' +// import DialogActions from '@mui/material/DialogActions' +import Typography from '@mui/material/Typography' +import TextField from '@mui/material/TextField' +import dayjs from 'dayjs' +import relativeTime from 'dayjs/plugin/relativeTime' +import zh from 'dayjs/locale/zh-cn' + +import { fetchPlainText } from '../api' +import { copyToClipboard } from '../common' +import { BasicDialog } from './BasicDialog' + +dayjs.extend(relativeTime) +dayjs.locale(zh) + +export function FileDialog({ + open, + onClose, + payload, +}: DialogProps< + FileType & { + message: { + error(message: string): void + success(message: string): void + } + } +>) { + const isText = payload.type === 'plain/string' + const [text, updateText] = useState('') + + const handleCopy = (str: string) => { + copyToClipboard(str) + .then(() => { + payload.message.success('复制成功') + }) + .catch(() => { + payload.message.success('复制失败') + }) + } + + useEffect(() => { + if (isText) { + ;(async () => { + const data = await fetchPlainText(payload.objectId) + updateText(data) + })() + } + }, []) + + return ( + + + {isText && ( + + ({ + '& .MuiInputBase-root': { + color: theme.palette.text.primary, + }, + textarea: { + '-webkit-text-fill-color': 'currentColor !important', + }, + })} + /> + + + )} + {!isText && ( + + + + )} + + + 原始分享 SHA1 Hash 值{' '} + + (校验工具) + + {':'} + + handleCopy(payload.hash)} + > + {payload.hash} + + + 预计过期于: + + + {dayjs(payload.due_date).fromNow()} + + + + + ) +} diff --git a/web/components/Message.tsx b/web/components/Message.tsx new file mode 100644 index 0000000..54826b6 --- /dev/null +++ b/web/components/Message.tsx @@ -0,0 +1,83 @@ +import { useState, useRef } from 'preact/hooks' +import Snackbar from '@mui/material/Snackbar' +import Alert from '@mui/material/Alert' + +export interface MessageProps { + open: boolean + duration?: number + type?: 'success' | 'error' + message: string +} + +export function Message({ + open, + duration = 4000, + type = 'success', + message, +}: MessageProps) { + return ( + + + {message} + + + ) +} + +export function useMessage(): [ + MessageProps, + { error(message: string): void; success(message: string): void }, +] { + const [props, updateProps] = useState({ + open: false, + type: 'success', + message: '', + }) + + const timer = useRef(0) + + const error = useRef((message: string) => { + clearTimeout(timer.current) + updateProps({ + type: 'error', + message, + open: true, + }) + timer.current = setTimeout(() => { + updateProps((props) => ({ + ...props, + open: false, + })) + }, 4000) as unknown as number + }) + + const success = useRef((message: string) => { + clearTimeout(timer.current) + updateProps({ + type: 'success', + message, + open: true, + }) + timer.current = setTimeout(() => { + updateProps((props) => ({ + ...props, + open: false, + })) + }, 4000) as unknown as number + }) + + return [ + props, + { + error: error.current, + success: success.current, + }, + ] +} diff --git a/web/components/ShareDialog.tsx b/web/components/ShareDialog.tsx new file mode 100644 index 0000000..9557b22 --- /dev/null +++ b/web/components/ShareDialog.tsx @@ -0,0 +1,134 @@ +import { useRef } from 'preact/hooks' +import { DialogProps } from '@toolpad/core/useDialogs' +import Box from '@mui/material/Box' +// import DialogActions from '@mui/material/DialogActions' +import dayjs from 'dayjs' +import relativeTime from 'dayjs/plugin/relativeTime' +import zh from 'dayjs/locale/zh-cn' +import QrCode from 'qrcode-svg' + +import { copyToClipboard } from '../common' +import { BasicDialog } from './BasicDialog' +import Typography from '@mui/material/Typography' +import TextField from '@mui/material/TextField' +import Button from '@mui/material/Button' + +import { Code } from '../components' + +dayjs.extend(relativeTime) +dayjs.locale(zh) + +export function ShareDialog({ + open, + onClose, + payload, +}: DialogProps< + FileUploadedType & { + message: { + error(message: string): void + success(message: string): void + } + } +>) { + const url = `${window.location.protocol}//${window.location.host}?code=${payload.code}` + const desc = `链接: ${url} 提取码: ${payload.code} SHA1 Hash 值: ${payload.hash}` + const qr = useRef( + new QrCode({ + content: url, + }).svg(), + ) + + const handleCopy = (str: string) => { + copyToClipboard(str) + .then(() => { + payload.message.success('复制成功') + }) + .catch(() => { + payload.message.success('复制失败') + }) + } + + return ( + + + handleCopy(payload.code)} + > + + + + + + ({ + '& .MuiInputBase-root': { + color: theme.palette.text.primary, + }, + textarea: { + '-webkit-text-fill-color': 'currentColor !important', + }, + })} + /> + + + + + + 原始分享 SHA1 Hash 值{' '} + + (校验工具) + + {':'} + + handleCopy(payload.hash)} + > + {payload.hash} + + + 预计过期于: + + + {dayjs(payload.due_date).fromNow()} + + + + + ) +} diff --git a/web/components/index.tsx b/web/components/index.tsx new file mode 100644 index 0000000..aa217e9 --- /dev/null +++ b/web/components/index.tsx @@ -0,0 +1,4 @@ +export * from './Code' +export * from './Message' +export * from './FileDialog' +export * from './ShareDialog' diff --git a/web/index.css b/web/index.css index 6119ad9..3ce3303 100644 --- a/web/index.css +++ b/web/index.css @@ -1,68 +1,16 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; +@tailwind base; +@tailwind components; +@tailwind utilities; +:root { color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; + color: hsl(0, 0%, 100%); + background-color: hsl(220, 35%, 3%); } @media (prefers-color-scheme: light) { :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; + color: hsl(220, 30%, 6%); + background-color: hsl(0, 0%, 99%); } } diff --git a/web/main.tsx b/web/main.tsx index bfb172e..0fdf5c8 100644 --- a/web/main.tsx +++ b/web/main.tsx @@ -1,5 +1,24 @@ import { render } from 'preact' +import { StyledEngineProvider } from '@mui/material/styles' +import CssBaseline from '@mui/material/CssBaseline' +import { DialogsProvider } from '@toolpad/core/useDialogs' + +import AppTheme from './theme/AppTheme' +import { App } from './App' + import './index.css' -import { App } from './app.tsx' -render(, document.getElementById('app')!) +function Main() { + return ( + + + + + + + + + ) +} + +render(
, document.getElementById('app')!) diff --git a/web/theme/AppTheme.tsx b/web/theme/AppTheme.tsx new file mode 100644 index 0000000..ad189ab --- /dev/null +++ b/web/theme/AppTheme.tsx @@ -0,0 +1,33 @@ +import { ThemeProvider, createTheme } from '@mui/material/styles' +import type { ThemeOptions } from '@mui/material/styles' +import { colorSchemes, typography, shadows, shape } from './themePrimitives.ts' + +import { inputsCustomizations } from './customizations' + +interface AppThemeProps { + children: React.ReactNode + /** + * This is for the docs site. You can ignore it or remove it. + */ + mode?: 'light' | 'dark' | 'system' + themeComponents?: ThemeOptions['components'] +} + +export default function AppTheme({ children, mode }: AppThemeProps) { + const theme = createTheme({ + // For more details about CSS variables configuration, see https://mui.com/material-ui/customization/css-theme-variables/configuration/ + cssVariables: true, + colorSchemes, // Recently added in v6 for building light & dark mode app, see https://mui.com/material-ui/customization/palette/#color-schemes + typography, + shadows, + shape, + components: { + ...inputsCustomizations, + }, + }) + return ( + + {children} + + ) +} diff --git a/web/theme/customizations/index.ts b/web/theme/customizations/index.ts new file mode 100644 index 0000000..8d3f97f --- /dev/null +++ b/web/theme/customizations/index.ts @@ -0,0 +1 @@ +export * from './inputs' diff --git a/web/theme/customizations/inputs.tsx b/web/theme/customizations/inputs.tsx new file mode 100644 index 0000000..24b4482 --- /dev/null +++ b/web/theme/customizations/inputs.tsx @@ -0,0 +1,52 @@ +import { Theme, Components } from '@mui/material/styles' + +export const inputsCustomizations: Components = { + MuiFormControl: { + styleOverrides: { + root: ({ theme }) => ({ + [theme.breakpoints.up('sm')]: { + flexDirection: 'row', + }, + + '& .MuiFormHelperText-root': { + position: 'absolute', + bottom: theme.spacing(-2.5), + marginInline: theme.spacing(1), + }, + }), + }, + }, + MuiFormLabel: { + styleOverrides: { + root: ({ theme }) => ({ + typography: theme.typography.caption, + lineHeight: '1.75em', + [theme.breakpoints.up('sm')]: { + flexBasis: 100, + flexShrink: 0, + lineHeight: '3.1em', + }, + }), + }, + }, + MuiOutlinedInput: { + styleOverrides: { + input: ({ theme }) => ({ + paddingInline: theme.spacing(1), + paddingBlock: '0.8em', + height: '1.5em', + }), + + multiline: { + padding: 0, + }, + }, + }, + MuiInputBase: { + styleOverrides: { + multiline: { + padding: 0, + }, + }, + }, +} diff --git a/web/theme/themePrimitives.ts b/web/theme/themePrimitives.ts new file mode 100644 index 0000000..7c13974 --- /dev/null +++ b/web/theme/themePrimitives.ts @@ -0,0 +1,397 @@ +import { createTheme, alpha, PaletteMode, Shadows } from '@mui/material/styles' + +declare module '@mui/material/Paper' { + interface PaperPropsVariantOverrides { + highlighted: true + } +} +declare module '@mui/material/styles/createPalette' { + interface ColorRange { + 50: string + 100: string + 200: string + 300: string + 400: string + 500: string + 600: string + 700: string + 800: string + 900: string + } + + // interface PaletteColor extends ColorRange {} + + interface Palette { + baseShadow: string + } +} + +const defaultTheme = createTheme() + +const customShadows: Shadows = [...defaultTheme.shadows] + +export const brand = { + 50: 'hsl(210, 100%, 95%)', + 100: 'hsl(210, 100%, 92%)', + 200: 'hsl(210, 100%, 80%)', + 300: 'hsl(210, 100%, 65%)', + 400: 'hsl(210, 98%, 48%)', + 500: 'hsl(210, 98%, 42%)', + 600: 'hsl(210, 98%, 55%)', + 700: 'hsl(210, 100%, 35%)', + 800: 'hsl(210, 100%, 16%)', + 900: 'hsl(210, 100%, 21%)', +} + +export const gray = { + 50: 'hsl(220, 35%, 97%)', + 100: 'hsl(220, 30%, 94%)', + 200: 'hsl(220, 20%, 88%)', + 300: 'hsl(220, 20%, 80%)', + 400: 'hsl(220, 20%, 65%)', + 500: 'hsl(220, 20%, 42%)', + 600: 'hsl(220, 20%, 35%)', + 700: 'hsl(220, 20%, 25%)', + 800: 'hsl(220, 30%, 6%)', + 900: 'hsl(220, 35%, 3%)', +} + +export const green = { + 50: 'hsl(120, 80%, 98%)', + 100: 'hsl(120, 75%, 94%)', + 200: 'hsl(120, 75%, 87%)', + 300: 'hsl(120, 61%, 77%)', + 400: 'hsl(120, 44%, 53%)', + 500: 'hsl(120, 59%, 30%)', + 600: 'hsl(120, 70%, 25%)', + 700: 'hsl(120, 75%, 16%)', + 800: 'hsl(120, 84%, 10%)', + 900: 'hsl(120, 87%, 6%)', +} + +export const orange = { + 50: 'hsl(45, 100%, 97%)', + 100: 'hsl(45, 92%, 90%)', + 200: 'hsl(45, 94%, 80%)', + 300: 'hsl(45, 90%, 65%)', + 400: 'hsl(45, 90%, 40%)', + 500: 'hsl(45, 90%, 35%)', + 600: 'hsl(45, 91%, 25%)', + 700: 'hsl(45, 94%, 20%)', + 800: 'hsl(45, 95%, 16%)', + 900: 'hsl(45, 93%, 12%)', +} + +export const red = { + 50: 'hsl(0, 100%, 97%)', + 100: 'hsl(0, 92%, 90%)', + 200: 'hsl(0, 94%, 80%)', + 300: 'hsl(0, 90%, 65%)', + 400: 'hsl(0, 90%, 40%)', + 500: 'hsl(0, 90%, 30%)', + 600: 'hsl(0, 91%, 25%)', + 700: 'hsl(0, 94%, 18%)', + 800: 'hsl(0, 95%, 12%)', + 900: 'hsl(0, 93%, 6%)', +} + +export const getDesignTokens = (mode: PaletteMode) => { + customShadows[1] = + mode === 'dark' + ? 'hsla(220, 30%, 5%, 0.7) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.8) 0px 8px 16px -5px' + : 'hsla(220, 30%, 5%, 0.07) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.07) 0px 8px 16px -5px' + + return { + palette: { + mode, + primary: { + light: brand[200], + main: brand[400], + dark: brand[700], + contrastText: brand[50], + ...(mode === 'dark' && { + contrastText: brand[50], + light: brand[300], + main: brand[400], + dark: brand[700], + }), + }, + info: { + light: brand[100], + main: brand[300], + dark: brand[600], + contrastText: gray[50], + ...(mode === 'dark' && { + contrastText: brand[300], + light: brand[500], + main: brand[700], + dark: brand[900], + }), + }, + warning: { + light: orange[300], + main: orange[400], + dark: orange[800], + ...(mode === 'dark' && { + light: orange[400], + main: orange[500], + dark: orange[700], + }), + }, + error: { + light: red[300], + main: red[400], + dark: red[800], + ...(mode === 'dark' && { + light: red[400], + main: red[500], + dark: red[700], + }), + }, + success: { + light: green[300], + main: green[400], + dark: green[800], + ...(mode === 'dark' && { + light: green[400], + main: green[500], + dark: green[700], + }), + }, + grey: { + ...gray, + }, + divider: mode === 'dark' ? alpha(gray[700], 0.6) : alpha(gray[300], 0.4), + background: { + default: 'hsl(0, 0%, 99%)', + paper: 'hsl(220, 35%, 97%)', + ...(mode === 'dark' && { default: gray[900], paper: 'hsl(220, 30%, 7%)' }), + }, + text: { + primary: gray[800], + secondary: gray[600], + warning: orange[400], + ...(mode === 'dark' && { primary: 'hsl(0, 0%, 100%)', secondary: gray[400] }), + }, + action: { + hover: alpha(gray[200], 0.2), + selected: `${alpha(gray[200], 0.3)}`, + ...(mode === 'dark' && { + hover: alpha(gray[600], 0.2), + selected: alpha(gray[600], 0.3), + }), + }, + }, + typography: { + fontFamily: 'Inter, sans-serif', + h1: { + fontSize: defaultTheme.typography.pxToRem(48), + fontWeight: 600, + lineHeight: 1.2, + letterSpacing: -0.5, + }, + h2: { + fontSize: defaultTheme.typography.pxToRem(36), + fontWeight: 600, + lineHeight: 1.2, + }, + h3: { + fontSize: defaultTheme.typography.pxToRem(30), + lineHeight: 1.2, + }, + h4: { + fontSize: defaultTheme.typography.pxToRem(24), + fontWeight: 600, + lineHeight: 1.5, + }, + h5: { + fontSize: defaultTheme.typography.pxToRem(20), + fontWeight: 600, + }, + h6: { + fontSize: defaultTheme.typography.pxToRem(18), + fontWeight: 600, + }, + subtitle1: { + fontSize: defaultTheme.typography.pxToRem(18), + }, + subtitle2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 500, + }, + body1: { + fontSize: defaultTheme.typography.pxToRem(14), + }, + body2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 400, + }, + caption: { + fontSize: defaultTheme.typography.pxToRem(12), + fontWeight: 400, + }, + }, + shape: { + borderRadius: 8, + }, + shadows: customShadows, + } +} + +export const colorSchemes = { + light: { + palette: { + primary: { + light: brand[200], + main: brand[400], + dark: brand[700], + contrastText: brand[50], + }, + info: { + light: brand[100], + main: brand[300], + dark: brand[600], + contrastText: gray[50], + }, + warning: { + light: orange[300], + main: orange[400], + dark: orange[800], + }, + error: { + light: red[300], + main: red[400], + dark: red[800], + }, + success: { + light: green[300], + main: green[400], + dark: green[800], + }, + grey: { + ...gray, + }, + divider: alpha(gray[300], 0.4), + background: { + default: 'hsl(0, 0%, 99%)', + paper: 'hsl(220, 35%, 97%)', + }, + text: { + primary: gray[800], + secondary: gray[600], + warning: orange[400], + }, + action: { + hover: alpha(gray[200], 0.2), + selected: `${alpha(gray[200], 0.3)}`, + }, + baseShadow: 'hsla(220, 30%, 5%, 0.07) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.07) 0px 8px 16px -5px', + }, + }, + dark: { + palette: { + primary: { + contrastText: brand[50], + light: brand[300], + main: brand[400], + dark: brand[700], + }, + info: { + contrastText: brand[300], + light: brand[500], + main: brand[700], + dark: brand[900], + }, + warning: { + light: orange[400], + main: orange[500], + dark: orange[700], + }, + error: { + light: red[400], + main: red[500], + dark: red[700], + }, + success: { + light: green[400], + main: green[500], + dark: green[700], + }, + grey: { + ...gray, + }, + divider: alpha(gray[700], 0.6), + background: { + default: gray[900], + paper: 'hsl(220, 30%, 7%)', + }, + text: { + primary: 'hsl(0, 0%, 100%)', + secondary: gray[400], + }, + action: { + hover: alpha(gray[600], 0.2), + selected: alpha(gray[600], 0.3), + }, + baseShadow: 'hsla(220, 30%, 5%, 0.7) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.8) 0px 8px 16px -5px', + }, + }, +} + +export const typography = { + fontFamily: 'Inter, sans-serif', + h1: { + fontSize: defaultTheme.typography.pxToRem(48), + fontWeight: 600, + lineHeight: 1.2, + letterSpacing: -0.5, + }, + h2: { + fontSize: defaultTheme.typography.pxToRem(36), + fontWeight: 600, + lineHeight: 1.2, + }, + h3: { + fontSize: defaultTheme.typography.pxToRem(30), + lineHeight: 1.2, + }, + h4: { + fontSize: defaultTheme.typography.pxToRem(24), + fontWeight: 600, + lineHeight: 1.5, + }, + h5: { + fontSize: defaultTheme.typography.pxToRem(20), + fontWeight: 600, + }, + h6: { + fontSize: defaultTheme.typography.pxToRem(18), + fontWeight: 600, + }, + subtitle1: { + fontSize: defaultTheme.typography.pxToRem(18), + }, + subtitle2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 500, + }, + body1: { + fontSize: defaultTheme.typography.pxToRem(14), + }, + body2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 400, + }, + caption: { + fontSize: defaultTheme.typography.pxToRem(12), + fontWeight: 400, + }, +} + +export const shape = { + borderRadius: 4, +} + +// @ts-expect-error: force +const defaultShadows: Shadows = ['none', 'var(--template-palette-baseShadow)', ...defaultTheme.shadows.slice(2)] +export const shadows = defaultShadows diff --git a/web/types.d.ts b/web/types.d.ts new file mode 100644 index 0000000..abb5cca --- /dev/null +++ b/web/types.d.ts @@ -0,0 +1,20 @@ +interface FileType { + code: string + filename: string + hash: string + objectId: string + due_date: number + type: string +} + +interface FileUploadedType { + hash: string + code: string + due_date: number +} + +interface ApiResponseType { + message: string + result: boolean + data: T | null +} diff --git a/worker-configuration.d.ts b/worker-configuration.d.ts index 5ae0b0e..88b0742 100644 --- a/worker-configuration.d.ts +++ b/worker-configuration.d.ts @@ -1,7 +1,11 @@ // Generated by Wrangler by running `wrangler types` interface Env { - ENVIRONMENT: "dev"; - VITE_PORT: string; - ASSETS: Fetcher; + file_drops: KVNamespace + ENVIRONMENT: string + SHARE_PORT: string + SHARE_MAX_SIZE_IN_MB: string + SHARE_DURATION: string + DB: D1Database + ASSETS: Fetcher } diff --git a/wrangler.toml b/wrangler.toml index 54f6727..7c76d31 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -3,6 +3,9 @@ name = "cloudflare-drop" main = "src/index.ts" compatibility_date = "2024-12-30" +[triggers] +crons = ["* * * * *"] # * * * * * = run every minute + # Workers Logs # Docs: https://developers.cloudflare.com/workers/observability/logs/workers-logs/ # Configuration: https://developers.cloudflare.com/workers/observability/logs/workers-logs/#enable-workers-logs @@ -41,10 +44,11 @@ enabled = true # Bind a D1 database. D1 is Cloudflare’s native serverless SQL database. # Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#d1-databases -# [[d1_databases]] -# binding = "MY_DB" -# database_name = "my-database" -# database_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" +[[d1_databases]] +binding = "DB" +database_name = "airdrop" +database_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" +migrations_dir = "data/migrations" # Bind a dispatch namespace. Use Workers for Platforms to deploy serverless functions programmatically on behalf of your customers. # Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#dispatch-namespace-bindings-workers-for-platforms @@ -73,9 +77,9 @@ enabled = true # Bind a KV Namespace. Use KV as persistent storage for small key-value pairs. # Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#kv-namespaces -# [[kv_namespaces]] -# binding = "MY_KV_NAMESPACE" -# id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +[[kv_namespaces]] +binding = "file_drops" +id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # Bind an mTLS certificate. Use to present a client certificate when communicating with another service. # Docs: https://developers.cloudflare.com/workers/wrangler/configuration/#mtls-certificates @@ -115,7 +119,9 @@ enabled = true [env.staging] assets = { directory = "./dist/", binding = "ASSETS", html_handling = "none", not_found_handling = "single-page-application" } workers_dev = true +kv_namespaces = [{ binding = "file_drops", id = "f5d4caf1271543368076af7abf634caf" }] [env.production] route = { pattern = "airdrop.wanq.uk", custom_domain = true } assets = { directory = "./dist/", binding = "ASSETS", html_handling = "none", not_found_handling = "single-page-application" } +kv_namespaces = [{ binding = "file_drops", id = "f5d4caf1271543368076af7abf634caf" }]