├── .env.example ├── .gitignore ├── README.md ├── biome.json ├── bruno └── api.json ├── build.ts ├── drizzle.config.ts ├── package.json ├── pnpm-lock.yaml ├── src ├── app.spec.ts ├── app.ts ├── config │ └── env.ts ├── libs │ ├── database │ │ ├── db.ts │ │ ├── migrate.ts │ │ └── schema.ts │ └── supabase │ │ └── client.ts ├── middlewares │ ├── auth.middleware.ts │ ├── error.middleware.ts │ ├── swagger.middleware.ts │ └── zodValidator.middleware.ts ├── routes │ ├── auth.routes.ts │ └── iam.routes.ts └── server.ts ├── tsconfig.json └── vitest.config.ts /.env.example: -------------------------------------------------------------------------------- 1 | # Database 2 | DATABASE_URL="" 3 | # Supabase 4 | SUPABASE_URL="" 5 | SUPABASE_SERVICE_ROLE="" 6 | # Sentry 7 | SENTRY_DSN="" 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | # local env files 4 | .env*.local 5 | .env 6 | 7 | # GCP 8 | gcp-key.json 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HonosJS + Supabase Auth 2 | 3 | ## Built With 4 | - Node.js 5 | - PNPM 6 | - TypeScript 7 | - Supabase 8 | - Drizzle 9 | - Zod 10 | - Vitest 11 | - Biome 12 | - Sentry 13 | 14 | ## Getting Started 15 | 16 | ## Installation 17 | 18 | Run: 19 | `pnpm install` 20 | 21 | After install all packages, copy the `.env.example` file and rename it to `.env`. Fill in the necessary environment variables. 22 | 23 | ## Supabase 24 | Create a project in Supabase and put your envs into `.env`: 25 | 26 | - DATABASE_URL 27 | - SUPABASE_URL 28 | - SUPABASE_SERVICE_ROLE 29 | 30 | ## Sentry 31 | Create a project in Sentry and put your envs into `.env`: 32 | 33 | - SENTRY_DSN 34 | 35 | 36 | ## Database Setup 37 | Run the migration script to set up the database. This can be done by running the migrate script in src/libs/database/migrate.ts. 38 | 39 | ### start 40 | The server will start and listen on the port specified in your .env file. 41 | 42 | ## Testing 43 | To run the tests, use the test script in the package.json file: 44 | 45 | 46 | ## Contributing 47 | Provide instructions on how to contribute to your project. 48 | 49 | -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.4.1/schema.json", 3 | "organizeImports": { 4 | "enabled": true 5 | }, 6 | "linter": { 7 | "enabled": true, 8 | "rules": { 9 | "recommended": true, 10 | "complexity": { 11 | "noForEach": "off" 12 | } 13 | } 14 | }, 15 | "formatter": { 16 | "enabled": true, 17 | "formatWithErrors": true, 18 | "indentStyle": "tab", 19 | "indentWidth": 2, 20 | "lineWidth": 120, 21 | "lineEnding": "lf", 22 | "ignore": [] 23 | }, 24 | "files": { 25 | "ignore": ["dist/*.js"] 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /bruno/api.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api", 3 | "version": "1", 4 | "items": [ 5 | { 6 | "type": "http", 7 | "name": "iam", 8 | "seq": 1, 9 | "request": { 10 | "url": "http://localhost:3000/api/iam", 11 | "method": "GET", 12 | "headers": [], 13 | "body": { 14 | "mode": "json", 15 | "json": "{\n \"email\":\"test@gmail.com\",\n \"password\": \"Test123!\"\n}", 16 | "formUrlEncoded": [], 17 | "multipartForm": [] 18 | }, 19 | "auth": { 20 | "mode": "none", 21 | "basic": { 22 | "username": "", 23 | "password": "" 24 | }, 25 | "bearer": { 26 | "token": "" 27 | } 28 | }, 29 | "script": {}, 30 | "vars": {}, 31 | "assertions": [], 32 | "tests": "", 33 | "query": [] 34 | } 35 | }, 36 | { 37 | "type": "folder", 38 | "name": "AUTH", 39 | "items": [ 40 | { 41 | "type": "http", 42 | "name": "sign-in", 43 | "seq": 1, 44 | "request": { 45 | "url": "http://localhost:3000/api/auth/sign-in", 46 | "method": "POST", 47 | "headers": [], 48 | "body": { 49 | "mode": "json", 50 | "json": "{\n \"email\":\"test@gmail.com@gmail.com\",\n \"password\": \"Test123!\"\n}", 51 | "formUrlEncoded": [], 52 | "multipartForm": [] 53 | }, 54 | "auth": { 55 | "mode": "none", 56 | "basic": { 57 | "username": "", 58 | "password": "" 59 | }, 60 | "bearer": { 61 | "token": "" 62 | } 63 | }, 64 | "script": {}, 65 | "vars": {}, 66 | "assertions": [], 67 | "tests": "", 68 | "query": [] 69 | } 70 | }, 71 | { 72 | "type": "http", 73 | "name": "sign-up", 74 | "seq": 2, 75 | "request": { 76 | "url": "http://localhost:3000/api/auth/sign-up", 77 | "method": "POST", 78 | "headers": [], 79 | "body": { 80 | "mode": "json", 81 | "json": "{\n \"email\":\"test@gmail.com\",\n \"password\": \"Test123!\"\n}", 82 | "formUrlEncoded": [], 83 | "multipartForm": [] 84 | }, 85 | "auth": { 86 | "mode": "none", 87 | "basic": { 88 | "username": "", 89 | "password": "" 90 | }, 91 | "bearer": { 92 | "token": "" 93 | } 94 | }, 95 | "script": {}, 96 | "vars": {}, 97 | "assertions": [], 98 | "tests": "", 99 | "query": [] 100 | } 101 | } 102 | ] 103 | } 104 | ], 105 | "environments": [ 106 | { 107 | "variables": [], 108 | "name": "local" 109 | } 110 | ] 111 | } 112 | -------------------------------------------------------------------------------- /build.ts: -------------------------------------------------------------------------------- 1 | import { build } from "esbuild"; 2 | import type { BuildOptions } from "esbuild"; 3 | 4 | const options = { 5 | bundle: true, 6 | entryPoints: ["./src/server.ts"], 7 | banner: { 8 | js: "#!/usr/bin/env node", 9 | }, 10 | platform: "node", 11 | outfile: "./dist/index.js", 12 | minify: true, 13 | format: "esm", 14 | logLevel: "info", 15 | } satisfies BuildOptions; 16 | 17 | const buildApp = async () => { 18 | try { 19 | await build(options); 20 | } catch (error) { 21 | console.log(error); 22 | process.exit(1); 23 | } 24 | }; 25 | 26 | await buildApp(); 27 | -------------------------------------------------------------------------------- /drizzle.config.ts: -------------------------------------------------------------------------------- 1 | import { env } from "@/config/env"; 2 | import type { Config } from "drizzle-kit"; 3 | 4 | export default { 5 | schema: "./src/libs/database/schema.ts", 6 | out: "./drizzle", 7 | dialect: "postgresql", 8 | dbCredentials: { 9 | url: env.DATABASE_URL, 10 | }, 11 | } satisfies Config; 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Honojs + Supabase", 3 | "version": "0.1.4", 4 | "private": true, 5 | "type": "module", 6 | "author": { 7 | "name": "Carlos Ricardo De Oliveira Ziegler", 8 | "url": "https://github.com/CarlosZiegler" 9 | }, 10 | "repository": { 11 | "type": "git" 12 | }, 13 | "scripts": { 14 | "lint": "pnpm dlx @biomejs/biome format ./src --write", 15 | "dev": "tsx watch src/server.ts", 16 | "build": "tsx ./build.ts", 17 | "start": "node ./dist/index.js", 18 | "db:generate": "drizzle-kit generate", 19 | "db:migrate": "tsx src/libs/database/migrate.ts", 20 | "db:drop": "drizzle-kit drop", 21 | "db:pull": "drizzle-kit introspect", 22 | "db:studio": "drizzle-kit studio", 23 | "db:check": "drizzle-kit check", 24 | "test": "vitest run", 25 | "test:watch": "vitest --watch", 26 | "test:coverage": "vitest run --coverage", 27 | "test:ui": "vitest --ui" 28 | }, 29 | "dependencies": { 30 | "@hono/node-server": "^1.11.1", 31 | "@hono/sentry": "^1.1.0", 32 | "@hono/swagger-ui": "^0.2.2", 33 | "@hono/zod-validator": "^0.2.1", 34 | "@supabase/supabase-js": "^2.43.1", 35 | "dotenv": "^16.4.5", 36 | "drizzle-orm": "^0.30.10", 37 | "hono": "^4.3.6", 38 | "pg": "^8.11.5", 39 | "postgres": "^3.4.4", 40 | "zod": "^3.23.8", 41 | "zod-validation-error": "^3.3.0" 42 | }, 43 | "devDependencies": { 44 | "@biomejs/biome": "1.7.3", 45 | "@types/node": "^20.12.11", 46 | "@vitest/ui": "^1.6.0", 47 | "drizzle-kit": "^0.21.1", 48 | "esbuild": "^0.21.2", 49 | "npm-run-all": "^4.1.5", 50 | "tsx": "^4.10.2", 51 | "typescript": "^5.4.5", 52 | "vite-tsconfig-paths": "^4.3.2", 53 | "vitest": "^1.6.0" 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@hono/node-server': 12 | specifier: ^1.11.1 13 | version: 1.11.1 14 | '@hono/sentry': 15 | specifier: ^1.1.0 16 | version: 1.1.0(hono@4.3.6) 17 | '@hono/swagger-ui': 18 | specifier: ^0.2.2 19 | version: 0.2.2(hono@4.3.6) 20 | '@hono/zod-validator': 21 | specifier: ^0.2.1 22 | version: 0.2.1(hono@4.3.6)(zod@3.23.8) 23 | '@supabase/supabase-js': 24 | specifier: ^2.43.1 25 | version: 2.43.1 26 | dotenv: 27 | specifier: ^16.4.5 28 | version: 16.4.5 29 | drizzle-orm: 30 | specifier: ^0.30.10 31 | version: 0.30.10(pg@8.11.5)(postgres@3.4.4) 32 | hono: 33 | specifier: ^4.3.6 34 | version: 4.3.6 35 | pg: 36 | specifier: ^8.11.5 37 | version: 8.11.5 38 | postgres: 39 | specifier: ^3.4.4 40 | version: 3.4.4 41 | zod: 42 | specifier: ^3.23.8 43 | version: 3.23.8 44 | zod-validation-error: 45 | specifier: ^3.3.0 46 | version: 3.3.0(zod@3.23.8) 47 | devDependencies: 48 | '@biomejs/biome': 49 | specifier: 1.7.3 50 | version: 1.7.3 51 | '@types/node': 52 | specifier: ^20.12.11 53 | version: 20.12.11 54 | '@vitest/ui': 55 | specifier: ^1.6.0 56 | version: 1.6.0(vitest@1.6.0) 57 | drizzle-kit: 58 | specifier: ^0.21.1 59 | version: 0.21.1 60 | esbuild: 61 | specifier: ^0.21.2 62 | version: 0.21.2 63 | npm-run-all: 64 | specifier: ^4.1.5 65 | version: 4.1.5 66 | tsx: 67 | specifier: ^4.10.2 68 | version: 4.10.2 69 | typescript: 70 | specifier: ^5.4.5 71 | version: 5.4.5 72 | vite-tsconfig-paths: 73 | specifier: ^4.3.2 74 | version: 4.3.2(typescript@5.4.5)(vite@5.0.11(@types/node@20.12.11)) 75 | vitest: 76 | specifier: ^1.6.0 77 | version: 1.6.0(@types/node@20.12.11)(@vitest/ui@1.6.0) 78 | 79 | packages: 80 | 81 | '@biomejs/biome@1.7.3': 82 | resolution: {integrity: sha512-ogFQI+fpXftr+tiahA6bIXwZ7CSikygASdqMtH07J2cUzrpjyTMVc9Y97v23c7/tL1xCZhM+W9k4hYIBm7Q6cQ==} 83 | engines: {node: '>=14.21.3'} 84 | hasBin: true 85 | 86 | '@biomejs/cli-darwin-arm64@1.7.3': 87 | resolution: {integrity: sha512-eDvLQWmGRqrPIRY7AIrkPHkQ3visEItJKkPYSHCscSDdGvKzYjmBJwG1Gu8+QC5ed6R7eiU63LEC0APFBobmfQ==} 88 | engines: {node: '>=14.21.3'} 89 | cpu: [arm64] 90 | os: [darwin] 91 | 92 | '@biomejs/cli-darwin-x64@1.7.3': 93 | resolution: {integrity: sha512-JXCaIseKRER7dIURsVlAJacnm8SG5I0RpxZ4ya3dudASYUc68WGl4+FEN03ABY3KMIq7hcK1tzsJiWlmXyosZg==} 94 | engines: {node: '>=14.21.3'} 95 | cpu: [x64] 96 | os: [darwin] 97 | 98 | '@biomejs/cli-linux-arm64-musl@1.7.3': 99 | resolution: {integrity: sha512-c8AlO45PNFZ1BYcwaKzdt46kYbuP6xPGuGQ6h4j3XiEDpyseRRUy/h+6gxj07XovmyxKnSX9GSZ6nVbZvcVUAw==} 100 | engines: {node: '>=14.21.3'} 101 | cpu: [arm64] 102 | os: [linux] 103 | 104 | '@biomejs/cli-linux-arm64@1.7.3': 105 | resolution: {integrity: sha512-phNTBpo7joDFastnmZsFjYcDYobLTx4qR4oPvc9tJ486Bd1SfEVPHEvJdNJrMwUQK56T+TRClOQd/8X1nnjA9w==} 106 | engines: {node: '>=14.21.3'} 107 | cpu: [arm64] 108 | os: [linux] 109 | 110 | '@biomejs/cli-linux-x64-musl@1.7.3': 111 | resolution: {integrity: sha512-UdEHKtYGWEX3eDmVWvQeT+z05T9/Sdt2+F/7zmMOFQ7boANeX8pcO6EkJPK3wxMudrApsNEKT26rzqK6sZRTRA==} 112 | engines: {node: '>=14.21.3'} 113 | cpu: [x64] 114 | os: [linux] 115 | 116 | '@biomejs/cli-linux-x64@1.7.3': 117 | resolution: {integrity: sha512-vnedYcd5p4keT3iD48oSKjOIRPYcjSNNbd8MO1bKo9ajg3GwQXZLAH+0Cvlr+eMsO67/HddWmscSQwTFrC/uPA==} 118 | engines: {node: '>=14.21.3'} 119 | cpu: [x64] 120 | os: [linux] 121 | 122 | '@biomejs/cli-win32-arm64@1.7.3': 123 | resolution: {integrity: sha512-unNCDqUKjujYkkSxs7gFIfdasttbDC4+z0kYmcqzRk6yWVoQBL4dNLcCbdnJS+qvVDNdI9rHp2NwpQ0WAdla4Q==} 124 | engines: {node: '>=14.21.3'} 125 | cpu: [arm64] 126 | os: [win32] 127 | 128 | '@biomejs/cli-win32-x64@1.7.3': 129 | resolution: {integrity: sha512-ZmByhbrnmz/UUFYB622CECwhKIPjJLLPr5zr3edhu04LzbfcOrz16VYeNq5dpO1ADG70FORhAJkaIGdaVBG00w==} 130 | engines: {node: '>=14.21.3'} 131 | cpu: [x64] 132 | os: [win32] 133 | 134 | '@esbuild-kit/core-utils@3.3.2': 135 | resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} 136 | 137 | '@esbuild-kit/esm-loader@2.6.5': 138 | resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} 139 | 140 | '@esbuild/aix-ppc64@0.19.11': 141 | resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} 142 | engines: {node: '>=12'} 143 | cpu: [ppc64] 144 | os: [aix] 145 | 146 | '@esbuild/aix-ppc64@0.20.2': 147 | resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} 148 | engines: {node: '>=12'} 149 | cpu: [ppc64] 150 | os: [aix] 151 | 152 | '@esbuild/aix-ppc64@0.21.2': 153 | resolution: {integrity: sha512-/c7hocx0pm14bHQlqUVKmxwdT/e5/KkyoY1W8F9lk/8CkE037STDDz8PXUP/LE6faj2HqchvDs9GcShxFhI78Q==} 154 | engines: {node: '>=12'} 155 | cpu: [ppc64] 156 | os: [aix] 157 | 158 | '@esbuild/android-arm64@0.18.20': 159 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} 160 | engines: {node: '>=12'} 161 | cpu: [arm64] 162 | os: [android] 163 | 164 | '@esbuild/android-arm64@0.19.11': 165 | resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} 166 | engines: {node: '>=12'} 167 | cpu: [arm64] 168 | os: [android] 169 | 170 | '@esbuild/android-arm64@0.20.2': 171 | resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} 172 | engines: {node: '>=12'} 173 | cpu: [arm64] 174 | os: [android] 175 | 176 | '@esbuild/android-arm64@0.21.2': 177 | resolution: {integrity: sha512-SGZKngoTWVUriO5bDjI4WDGsNx2VKZoXcds+ita/kVYB+8IkSCKDRDaK+5yu0b5S0eq6B3S7fpiEvpsa2ammlQ==} 178 | engines: {node: '>=12'} 179 | cpu: [arm64] 180 | os: [android] 181 | 182 | '@esbuild/android-arm@0.18.20': 183 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} 184 | engines: {node: '>=12'} 185 | cpu: [arm] 186 | os: [android] 187 | 188 | '@esbuild/android-arm@0.19.11': 189 | resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} 190 | engines: {node: '>=12'} 191 | cpu: [arm] 192 | os: [android] 193 | 194 | '@esbuild/android-arm@0.20.2': 195 | resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} 196 | engines: {node: '>=12'} 197 | cpu: [arm] 198 | os: [android] 199 | 200 | '@esbuild/android-arm@0.21.2': 201 | resolution: {integrity: sha512-G1ve3b4FeyJeyCjB4MX1CiWyTaIJwT9wAYE+8+IRA53YoN/reC/Bf2GDRXAzDTnh69Fpl+1uIKg76DiB3U6vwQ==} 202 | engines: {node: '>=12'} 203 | cpu: [arm] 204 | os: [android] 205 | 206 | '@esbuild/android-x64@0.18.20': 207 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} 208 | engines: {node: '>=12'} 209 | cpu: [x64] 210 | os: [android] 211 | 212 | '@esbuild/android-x64@0.19.11': 213 | resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} 214 | engines: {node: '>=12'} 215 | cpu: [x64] 216 | os: [android] 217 | 218 | '@esbuild/android-x64@0.20.2': 219 | resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} 220 | engines: {node: '>=12'} 221 | cpu: [x64] 222 | os: [android] 223 | 224 | '@esbuild/android-x64@0.21.2': 225 | resolution: {integrity: sha512-1wzzNoj2QtNkAYwIcWJ66UTRA80+RTQ/kuPMtEuP0X6dp5Ar23Dn566q3aV61h4EYrrgGlOgl/HdcqN/2S/2vg==} 226 | engines: {node: '>=12'} 227 | cpu: [x64] 228 | os: [android] 229 | 230 | '@esbuild/darwin-arm64@0.18.20': 231 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} 232 | engines: {node: '>=12'} 233 | cpu: [arm64] 234 | os: [darwin] 235 | 236 | '@esbuild/darwin-arm64@0.19.11': 237 | resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} 238 | engines: {node: '>=12'} 239 | cpu: [arm64] 240 | os: [darwin] 241 | 242 | '@esbuild/darwin-arm64@0.20.2': 243 | resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} 244 | engines: {node: '>=12'} 245 | cpu: [arm64] 246 | os: [darwin] 247 | 248 | '@esbuild/darwin-arm64@0.21.2': 249 | resolution: {integrity: sha512-ZyMkPWc5eTROcLOA10lEqdDSTc6ds6nuh3DeHgKip/XJrYjZDfnkCVSty8svWdy+SC1f77ULtVeIqymTzaB6/Q==} 250 | engines: {node: '>=12'} 251 | cpu: [arm64] 252 | os: [darwin] 253 | 254 | '@esbuild/darwin-x64@0.18.20': 255 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} 256 | engines: {node: '>=12'} 257 | cpu: [x64] 258 | os: [darwin] 259 | 260 | '@esbuild/darwin-x64@0.19.11': 261 | resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} 262 | engines: {node: '>=12'} 263 | cpu: [x64] 264 | os: [darwin] 265 | 266 | '@esbuild/darwin-x64@0.20.2': 267 | resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} 268 | engines: {node: '>=12'} 269 | cpu: [x64] 270 | os: [darwin] 271 | 272 | '@esbuild/darwin-x64@0.21.2': 273 | resolution: {integrity: sha512-K4ZdVq1zP9v51h/cKVna7im7G0zGTKKB6bP2yJiSmHjjOykbd8DdhrSi8V978sF69rkwrn8zCyL2t6I3ei6j9A==} 274 | engines: {node: '>=12'} 275 | cpu: [x64] 276 | os: [darwin] 277 | 278 | '@esbuild/freebsd-arm64@0.18.20': 279 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} 280 | engines: {node: '>=12'} 281 | cpu: [arm64] 282 | os: [freebsd] 283 | 284 | '@esbuild/freebsd-arm64@0.19.11': 285 | resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} 286 | engines: {node: '>=12'} 287 | cpu: [arm64] 288 | os: [freebsd] 289 | 290 | '@esbuild/freebsd-arm64@0.20.2': 291 | resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} 292 | engines: {node: '>=12'} 293 | cpu: [arm64] 294 | os: [freebsd] 295 | 296 | '@esbuild/freebsd-arm64@0.21.2': 297 | resolution: {integrity: sha512-4kbOGdpA61CXqadD+Gb/Pw3YXamQGiz9mal/h93rFVSjr5cgMnmJd/gbfPRm+3BMifvnaOfS1gNWaIDxkE2A3A==} 298 | engines: {node: '>=12'} 299 | cpu: [arm64] 300 | os: [freebsd] 301 | 302 | '@esbuild/freebsd-x64@0.18.20': 303 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} 304 | engines: {node: '>=12'} 305 | cpu: [x64] 306 | os: [freebsd] 307 | 308 | '@esbuild/freebsd-x64@0.19.11': 309 | resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} 310 | engines: {node: '>=12'} 311 | cpu: [x64] 312 | os: [freebsd] 313 | 314 | '@esbuild/freebsd-x64@0.20.2': 315 | resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} 316 | engines: {node: '>=12'} 317 | cpu: [x64] 318 | os: [freebsd] 319 | 320 | '@esbuild/freebsd-x64@0.21.2': 321 | resolution: {integrity: sha512-ShS+R09nuHzDBfPeMUliKZX27Wrmr8UFp93aFf/S8p+++x5BZ+D344CLKXxmY6qzgTL3mILSImPCNJOzD6+RRg==} 322 | engines: {node: '>=12'} 323 | cpu: [x64] 324 | os: [freebsd] 325 | 326 | '@esbuild/linux-arm64@0.18.20': 327 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} 328 | engines: {node: '>=12'} 329 | cpu: [arm64] 330 | os: [linux] 331 | 332 | '@esbuild/linux-arm64@0.19.11': 333 | resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} 334 | engines: {node: '>=12'} 335 | cpu: [arm64] 336 | os: [linux] 337 | 338 | '@esbuild/linux-arm64@0.20.2': 339 | resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} 340 | engines: {node: '>=12'} 341 | cpu: [arm64] 342 | os: [linux] 343 | 344 | '@esbuild/linux-arm64@0.21.2': 345 | resolution: {integrity: sha512-Hdu8BL+AmO+eCDvvT6kz/fPQhvuHL8YK4ExKZfANWsNe1kFGOHw7VJvS/FKSLFqheXmB3rTF3xFQIgUWPYsGnA==} 346 | engines: {node: '>=12'} 347 | cpu: [arm64] 348 | os: [linux] 349 | 350 | '@esbuild/linux-arm@0.18.20': 351 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} 352 | engines: {node: '>=12'} 353 | cpu: [arm] 354 | os: [linux] 355 | 356 | '@esbuild/linux-arm@0.19.11': 357 | resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} 358 | engines: {node: '>=12'} 359 | cpu: [arm] 360 | os: [linux] 361 | 362 | '@esbuild/linux-arm@0.20.2': 363 | resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} 364 | engines: {node: '>=12'} 365 | cpu: [arm] 366 | os: [linux] 367 | 368 | '@esbuild/linux-arm@0.21.2': 369 | resolution: {integrity: sha512-nnGXjOAv+7cM3LYRx4tJsYdgy8dGDGkAzF06oIDGppWbUkUKN9SmgQA8H0KukpU0Pjrj9XmgbWqMVSX/U7eeTA==} 370 | engines: {node: '>=12'} 371 | cpu: [arm] 372 | os: [linux] 373 | 374 | '@esbuild/linux-ia32@0.18.20': 375 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} 376 | engines: {node: '>=12'} 377 | cpu: [ia32] 378 | os: [linux] 379 | 380 | '@esbuild/linux-ia32@0.19.11': 381 | resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} 382 | engines: {node: '>=12'} 383 | cpu: [ia32] 384 | os: [linux] 385 | 386 | '@esbuild/linux-ia32@0.20.2': 387 | resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} 388 | engines: {node: '>=12'} 389 | cpu: [ia32] 390 | os: [linux] 391 | 392 | '@esbuild/linux-ia32@0.21.2': 393 | resolution: {integrity: sha512-m73BOCW2V9lcj7RtEMi+gBfHC6n3+VHpwQXP5offtQMPLDkpVolYn1YGXxOZ9hp4h3UPRKuezL7WkBsw+3EB3Q==} 394 | engines: {node: '>=12'} 395 | cpu: [ia32] 396 | os: [linux] 397 | 398 | '@esbuild/linux-loong64@0.18.20': 399 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} 400 | engines: {node: '>=12'} 401 | cpu: [loong64] 402 | os: [linux] 403 | 404 | '@esbuild/linux-loong64@0.19.11': 405 | resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} 406 | engines: {node: '>=12'} 407 | cpu: [loong64] 408 | os: [linux] 409 | 410 | '@esbuild/linux-loong64@0.20.2': 411 | resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} 412 | engines: {node: '>=12'} 413 | cpu: [loong64] 414 | os: [linux] 415 | 416 | '@esbuild/linux-loong64@0.21.2': 417 | resolution: {integrity: sha512-84eYHwwWHq3myIY/6ikALMcnwkf6Qo7NIq++xH0x+cJuUNpdwh8mlpUtRY+JiGUc60yu7ElWBbVHGWTABTclGw==} 418 | engines: {node: '>=12'} 419 | cpu: [loong64] 420 | os: [linux] 421 | 422 | '@esbuild/linux-mips64el@0.18.20': 423 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} 424 | engines: {node: '>=12'} 425 | cpu: [mips64el] 426 | os: [linux] 427 | 428 | '@esbuild/linux-mips64el@0.19.11': 429 | resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} 430 | engines: {node: '>=12'} 431 | cpu: [mips64el] 432 | os: [linux] 433 | 434 | '@esbuild/linux-mips64el@0.20.2': 435 | resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} 436 | engines: {node: '>=12'} 437 | cpu: [mips64el] 438 | os: [linux] 439 | 440 | '@esbuild/linux-mips64el@0.21.2': 441 | resolution: {integrity: sha512-9siSZngT0/ZKG+AH+/agwKF29LdCxw4ODi/PiE0F52B2rtLozlDP92umf8G2GPoVV611LN4pZ+nSTckebOscUA==} 442 | engines: {node: '>=12'} 443 | cpu: [mips64el] 444 | os: [linux] 445 | 446 | '@esbuild/linux-ppc64@0.18.20': 447 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} 448 | engines: {node: '>=12'} 449 | cpu: [ppc64] 450 | os: [linux] 451 | 452 | '@esbuild/linux-ppc64@0.19.11': 453 | resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} 454 | engines: {node: '>=12'} 455 | cpu: [ppc64] 456 | os: [linux] 457 | 458 | '@esbuild/linux-ppc64@0.20.2': 459 | resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} 460 | engines: {node: '>=12'} 461 | cpu: [ppc64] 462 | os: [linux] 463 | 464 | '@esbuild/linux-ppc64@0.21.2': 465 | resolution: {integrity: sha512-y0T4aV2CA+ic04ULya1A/8M2RDpDSK2ckgTj6jzHKFJvCq0jQg8afQQIn4EM0G8u2neyOiNHgSF9YKPfuqKOVw==} 466 | engines: {node: '>=12'} 467 | cpu: [ppc64] 468 | os: [linux] 469 | 470 | '@esbuild/linux-riscv64@0.18.20': 471 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} 472 | engines: {node: '>=12'} 473 | cpu: [riscv64] 474 | os: [linux] 475 | 476 | '@esbuild/linux-riscv64@0.19.11': 477 | resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} 478 | engines: {node: '>=12'} 479 | cpu: [riscv64] 480 | os: [linux] 481 | 482 | '@esbuild/linux-riscv64@0.20.2': 483 | resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} 484 | engines: {node: '>=12'} 485 | cpu: [riscv64] 486 | os: [linux] 487 | 488 | '@esbuild/linux-riscv64@0.21.2': 489 | resolution: {integrity: sha512-x5ssCdXmZC86L2Li1qQPF/VaC4VP20u/Zm8jlAu9IiVOVi79YsSz6cpPDYZl1rfKSHYCJW9XBfFCo66S5gVPSA==} 490 | engines: {node: '>=12'} 491 | cpu: [riscv64] 492 | os: [linux] 493 | 494 | '@esbuild/linux-s390x@0.18.20': 495 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} 496 | engines: {node: '>=12'} 497 | cpu: [s390x] 498 | os: [linux] 499 | 500 | '@esbuild/linux-s390x@0.19.11': 501 | resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} 502 | engines: {node: '>=12'} 503 | cpu: [s390x] 504 | os: [linux] 505 | 506 | '@esbuild/linux-s390x@0.20.2': 507 | resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} 508 | engines: {node: '>=12'} 509 | cpu: [s390x] 510 | os: [linux] 511 | 512 | '@esbuild/linux-s390x@0.21.2': 513 | resolution: {integrity: sha512-NP7fTpGSFWdXyvp8iAFU04uFh9ARoplFVM/m+8lTRpaYG+2ytHPZWyscSsMM6cvObSIK2KoPHXiZD4l99WaxbQ==} 514 | engines: {node: '>=12'} 515 | cpu: [s390x] 516 | os: [linux] 517 | 518 | '@esbuild/linux-x64@0.18.20': 519 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} 520 | engines: {node: '>=12'} 521 | cpu: [x64] 522 | os: [linux] 523 | 524 | '@esbuild/linux-x64@0.19.11': 525 | resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} 526 | engines: {node: '>=12'} 527 | cpu: [x64] 528 | os: [linux] 529 | 530 | '@esbuild/linux-x64@0.20.2': 531 | resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} 532 | engines: {node: '>=12'} 533 | cpu: [x64] 534 | os: [linux] 535 | 536 | '@esbuild/linux-x64@0.21.2': 537 | resolution: {integrity: sha512-giZ/uOxWDKda44ZuyfKbykeXznfuVNkTgXOUOPJIjbayJV6FRpQ4zxUy9JMBPLaK9IJcdWtaoeQrYBMh3Rr4vQ==} 538 | engines: {node: '>=12'} 539 | cpu: [x64] 540 | os: [linux] 541 | 542 | '@esbuild/netbsd-x64@0.18.20': 543 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} 544 | engines: {node: '>=12'} 545 | cpu: [x64] 546 | os: [netbsd] 547 | 548 | '@esbuild/netbsd-x64@0.19.11': 549 | resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} 550 | engines: {node: '>=12'} 551 | cpu: [x64] 552 | os: [netbsd] 553 | 554 | '@esbuild/netbsd-x64@0.20.2': 555 | resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} 556 | engines: {node: '>=12'} 557 | cpu: [x64] 558 | os: [netbsd] 559 | 560 | '@esbuild/netbsd-x64@0.21.2': 561 | resolution: {integrity: sha512-IeFMfGFSQfIj1d4XU+6lkbFzMR+mFELUUVYrZ+jvWzG4NGvs6o53ReEHLHpYkjRbdEjJy2W3lTekTxrFHW7YJg==} 562 | engines: {node: '>=12'} 563 | cpu: [x64] 564 | os: [netbsd] 565 | 566 | '@esbuild/openbsd-x64@0.18.20': 567 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} 568 | engines: {node: '>=12'} 569 | cpu: [x64] 570 | os: [openbsd] 571 | 572 | '@esbuild/openbsd-x64@0.19.11': 573 | resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} 574 | engines: {node: '>=12'} 575 | cpu: [x64] 576 | os: [openbsd] 577 | 578 | '@esbuild/openbsd-x64@0.20.2': 579 | resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} 580 | engines: {node: '>=12'} 581 | cpu: [x64] 582 | os: [openbsd] 583 | 584 | '@esbuild/openbsd-x64@0.21.2': 585 | resolution: {integrity: sha512-48QhWD6WxcebNNaE4FCwgvQVUnAycuTd+BdvA/oZu+/MmbpU8pY2dMEYlYzj5uNHWIG5jvdDmFXu0naQeOWUoA==} 586 | engines: {node: '>=12'} 587 | cpu: [x64] 588 | os: [openbsd] 589 | 590 | '@esbuild/sunos-x64@0.18.20': 591 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} 592 | engines: {node: '>=12'} 593 | cpu: [x64] 594 | os: [sunos] 595 | 596 | '@esbuild/sunos-x64@0.19.11': 597 | resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} 598 | engines: {node: '>=12'} 599 | cpu: [x64] 600 | os: [sunos] 601 | 602 | '@esbuild/sunos-x64@0.20.2': 603 | resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} 604 | engines: {node: '>=12'} 605 | cpu: [x64] 606 | os: [sunos] 607 | 608 | '@esbuild/sunos-x64@0.21.2': 609 | resolution: {integrity: sha512-90r3nTBLgdIgD4FCVV9+cR6Hq2Dzs319icVsln+NTmTVwffWcCqXGml8rAoocHuJ85kZK36DCteii96ba/PX8g==} 610 | engines: {node: '>=12'} 611 | cpu: [x64] 612 | os: [sunos] 613 | 614 | '@esbuild/win32-arm64@0.18.20': 615 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} 616 | engines: {node: '>=12'} 617 | cpu: [arm64] 618 | os: [win32] 619 | 620 | '@esbuild/win32-arm64@0.19.11': 621 | resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} 622 | engines: {node: '>=12'} 623 | cpu: [arm64] 624 | os: [win32] 625 | 626 | '@esbuild/win32-arm64@0.20.2': 627 | resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} 628 | engines: {node: '>=12'} 629 | cpu: [arm64] 630 | os: [win32] 631 | 632 | '@esbuild/win32-arm64@0.21.2': 633 | resolution: {integrity: sha512-sNndlsBT8OeE/MZDSGpRDJlWuhjuUz/dn80nH0EP4ZzDUYvMDVa7G87DVpweBrn4xdJYyXS/y4CQNrf7R2ODXg==} 634 | engines: {node: '>=12'} 635 | cpu: [arm64] 636 | os: [win32] 637 | 638 | '@esbuild/win32-ia32@0.18.20': 639 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} 640 | engines: {node: '>=12'} 641 | cpu: [ia32] 642 | os: [win32] 643 | 644 | '@esbuild/win32-ia32@0.19.11': 645 | resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} 646 | engines: {node: '>=12'} 647 | cpu: [ia32] 648 | os: [win32] 649 | 650 | '@esbuild/win32-ia32@0.20.2': 651 | resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} 652 | engines: {node: '>=12'} 653 | cpu: [ia32] 654 | os: [win32] 655 | 656 | '@esbuild/win32-ia32@0.21.2': 657 | resolution: {integrity: sha512-Ti2QChGNFzWhUNNVuU4w21YkYTErsNh3h+CzvlEhzgRbwsJ7TrWQqRzW3bllLKKvTppuF3DJ3XP1GEg11AfrEQ==} 658 | engines: {node: '>=12'} 659 | cpu: [ia32] 660 | os: [win32] 661 | 662 | '@esbuild/win32-x64@0.18.20': 663 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} 664 | engines: {node: '>=12'} 665 | cpu: [x64] 666 | os: [win32] 667 | 668 | '@esbuild/win32-x64@0.19.11': 669 | resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} 670 | engines: {node: '>=12'} 671 | cpu: [x64] 672 | os: [win32] 673 | 674 | '@esbuild/win32-x64@0.20.2': 675 | resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} 676 | engines: {node: '>=12'} 677 | cpu: [x64] 678 | os: [win32] 679 | 680 | '@esbuild/win32-x64@0.21.2': 681 | resolution: {integrity: sha512-VEfTCZicoZnZ6sGkjFPGRFFJuL2fZn2bLhsekZl1CJslflp2cJS/VoKs1jMk+3pDfsGW6CfQVUckP707HwbXeQ==} 682 | engines: {node: '>=12'} 683 | cpu: [x64] 684 | os: [win32] 685 | 686 | '@hono/node-server@1.11.1': 687 | resolution: {integrity: sha512-GW1Iomhmm1o4Z+X57xGby8A35Cu9UZLL7pSMdqDBkD99U5cywff8F+8hLk5aBTzNubnsFAvWQ/fZjNwPsEn9lA==} 688 | engines: {node: '>=18.14.1'} 689 | 690 | '@hono/sentry@1.1.0': 691 | resolution: {integrity: sha512-sg0hyn3VhQi2IQtHQgHxdyUWgvy+LMdjne0iVkFf0gW2KM3/uZyvMxdTZBlzOPeMq50q6CIEZrxtZJ8TZt8Vcw==} 692 | peerDependencies: 693 | hono: '>=3.*' 694 | 695 | '@hono/swagger-ui@0.2.2': 696 | resolution: {integrity: sha512-Bco6XdKkTP7yIVWXpquLQayvjwzDmsmsESjF7VcrU/ZPTYafGvvpHf7Z6PHTWyp+JpdYORZXlyZ75T3At2KfAA==} 697 | peerDependencies: 698 | hono: '*' 699 | 700 | '@hono/zod-validator@0.2.1': 701 | resolution: {integrity: sha512-HFoxln7Q6JsE64qz2WBS28SD33UB2alp3aRKmcWnNLDzEL1BLsWfbdX6e1HIiUprHYTIXf5y7ax8eYidKUwyaA==} 702 | peerDependencies: 703 | hono: '>=3.9.0' 704 | zod: ^3.19.1 705 | 706 | '@jest/schemas@29.6.3': 707 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 708 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 709 | 710 | '@jridgewell/sourcemap-codec@1.4.15': 711 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 712 | 713 | '@nodelib/fs.scandir@2.1.5': 714 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 715 | engines: {node: '>= 8'} 716 | 717 | '@nodelib/fs.stat@2.0.5': 718 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 719 | engines: {node: '>= 8'} 720 | 721 | '@nodelib/fs.walk@1.2.8': 722 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 723 | engines: {node: '>= 8'} 724 | 725 | '@polka/url@1.0.0-next.24': 726 | resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} 727 | 728 | '@rollup/rollup-android-arm-eabi@4.9.4': 729 | resolution: {integrity: sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA==} 730 | cpu: [arm] 731 | os: [android] 732 | 733 | '@rollup/rollup-android-arm64@4.9.4': 734 | resolution: {integrity: sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA==} 735 | cpu: [arm64] 736 | os: [android] 737 | 738 | '@rollup/rollup-darwin-arm64@4.9.4': 739 | resolution: {integrity: sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA==} 740 | cpu: [arm64] 741 | os: [darwin] 742 | 743 | '@rollup/rollup-darwin-x64@4.9.4': 744 | resolution: {integrity: sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA==} 745 | cpu: [x64] 746 | os: [darwin] 747 | 748 | '@rollup/rollup-linux-arm-gnueabihf@4.9.4': 749 | resolution: {integrity: sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw==} 750 | cpu: [arm] 751 | os: [linux] 752 | 753 | '@rollup/rollup-linux-arm64-gnu@4.9.4': 754 | resolution: {integrity: sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg==} 755 | cpu: [arm64] 756 | os: [linux] 757 | 758 | '@rollup/rollup-linux-arm64-musl@4.9.4': 759 | resolution: {integrity: sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A==} 760 | cpu: [arm64] 761 | os: [linux] 762 | 763 | '@rollup/rollup-linux-riscv64-gnu@4.9.4': 764 | resolution: {integrity: sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A==} 765 | cpu: [riscv64] 766 | os: [linux] 767 | 768 | '@rollup/rollup-linux-x64-gnu@4.9.4': 769 | resolution: {integrity: sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw==} 770 | cpu: [x64] 771 | os: [linux] 772 | 773 | '@rollup/rollup-linux-x64-musl@4.9.4': 774 | resolution: {integrity: sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ==} 775 | cpu: [x64] 776 | os: [linux] 777 | 778 | '@rollup/rollup-win32-arm64-msvc@4.9.4': 779 | resolution: {integrity: sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ==} 780 | cpu: [arm64] 781 | os: [win32] 782 | 783 | '@rollup/rollup-win32-ia32-msvc@4.9.4': 784 | resolution: {integrity: sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ==} 785 | cpu: [ia32] 786 | os: [win32] 787 | 788 | '@rollup/rollup-win32-x64-msvc@4.9.4': 789 | resolution: {integrity: sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw==} 790 | cpu: [x64] 791 | os: [win32] 792 | 793 | '@sentry/core@7.112.2': 794 | resolution: {integrity: sha512-gHPCcJobbMkk0VR18J65WYQTt3ED4qC6X9lHKp27Ddt63E+MDGkG6lvYBU1LS8cV7CdyBGC1XXDCfor61GvLsA==} 795 | engines: {node: '>=8'} 796 | 797 | '@sentry/integrations@7.112.2': 798 | resolution: {integrity: sha512-ioC2yyU6DqtLkdmWnm87oNvdn2+9oKctJeA4t+jkS6JaJ10DcezjCwiLscX4rhB9aWJV3IWF7Op0O6K3w0t2Hg==} 799 | engines: {node: '>=8'} 800 | 801 | '@sentry/types@7.112.2': 802 | resolution: {integrity: sha512-kCMLt7yhY5OkWE9MeowlTNmox9pqDxcpvqguMo4BDNZM5+v9SEb1AauAdR78E1a1V8TyCzjBD7JDfXWhvpYBcQ==} 803 | engines: {node: '>=8'} 804 | 805 | '@sentry/utils@7.112.2': 806 | resolution: {integrity: sha512-OjLh0hx0t1EcL4ZIjf+4svlmmP+tHUDGcr5qpFWH78tjmkPW4+cqPuZCZfHSuWcDdeiaXi8TnYoVRqDcJKK/eQ==} 807 | engines: {node: '>=8'} 808 | 809 | '@sinclair/typebox@0.27.8': 810 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 811 | 812 | '@supabase/auth-js@2.64.2': 813 | resolution: {integrity: sha512-s+lkHEdGiczDrzXJ1YWt2y3bxRi+qIUnXcgkpLSrId7yjBeaXBFygNjTaoZLG02KNcYwbuZ9qkEIqmj2hF7svw==} 814 | 815 | '@supabase/functions-js@2.3.1': 816 | resolution: {integrity: sha512-QyzNle/rVzlOi4BbVqxLSH828VdGY1RElqGFAj+XeVypj6+PVtMlD21G8SDnsPQDtlqqTtoGRgdMlQZih5hTuw==} 817 | 818 | '@supabase/node-fetch@2.6.15': 819 | resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} 820 | engines: {node: 4.x || >=6.0.0} 821 | 822 | '@supabase/postgrest-js@1.15.2': 823 | resolution: {integrity: sha512-9/7pUmXExvGuEK1yZhVYXPZnLEkDTwxgMQHXLrN5BwPZZm4iUCL1YEyep/Z2lIZah8d8M433mVAUEGsihUj5KQ==} 824 | 825 | '@supabase/realtime-js@2.9.5': 826 | resolution: {integrity: sha512-TEHlGwNGGmKPdeMtca1lFTYCedrhTAv3nZVoSjrKQ+wkMmaERuCe57zkC5KSWFzLYkb5FVHW8Hrr+PX1DDwplQ==} 827 | 828 | '@supabase/storage-js@2.5.5': 829 | resolution: {integrity: sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w==} 830 | 831 | '@supabase/supabase-js@2.43.1': 832 | resolution: {integrity: sha512-A+RV50mWNtyKo6M0u4G6AOqEifQD+MoOjZcpRkPMPpEAFgMsc2dt3kBlBlR/MgZizWQgUKhsvrwKk0efc8g6Ug==} 833 | 834 | '@types/estree@1.0.5': 835 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 836 | 837 | '@types/node@20.12.11': 838 | resolution: {integrity: sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==} 839 | 840 | '@types/phoenix@1.6.4': 841 | resolution: {integrity: sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==} 842 | 843 | '@types/ws@8.5.10': 844 | resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} 845 | 846 | '@vitest/expect@1.6.0': 847 | resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} 848 | 849 | '@vitest/runner@1.6.0': 850 | resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} 851 | 852 | '@vitest/snapshot@1.6.0': 853 | resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} 854 | 855 | '@vitest/spy@1.6.0': 856 | resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} 857 | 858 | '@vitest/ui@1.6.0': 859 | resolution: {integrity: sha512-k3Lyo+ONLOgylctiGovRKy7V4+dIN2yxstX3eY5cWFXH6WP+ooVX79YSyi0GagdTQzLmT43BF27T0s6dOIPBXA==} 860 | peerDependencies: 861 | vitest: 1.6.0 862 | 863 | '@vitest/utils@1.6.0': 864 | resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} 865 | 866 | acorn-walk@8.3.2: 867 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} 868 | engines: {node: '>=0.4.0'} 869 | 870 | acorn@8.11.3: 871 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 872 | engines: {node: '>=0.4.0'} 873 | hasBin: true 874 | 875 | ansi-styles@3.2.1: 876 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 877 | engines: {node: '>=4'} 878 | 879 | ansi-styles@5.2.0: 880 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 881 | engines: {node: '>=10'} 882 | 883 | array-buffer-byte-length@1.0.0: 884 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 885 | 886 | arraybuffer.prototype.slice@1.0.2: 887 | resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} 888 | engines: {node: '>= 0.4'} 889 | 890 | assertion-error@1.1.0: 891 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 892 | 893 | available-typed-arrays@1.0.5: 894 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 895 | engines: {node: '>= 0.4'} 896 | 897 | balanced-match@1.0.2: 898 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 899 | 900 | brace-expansion@1.1.11: 901 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 902 | 903 | brace-expansion@2.0.1: 904 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 905 | 906 | braces@3.0.2: 907 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 908 | engines: {node: '>=8'} 909 | 910 | buffer-from@1.1.2: 911 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 912 | 913 | cac@6.7.14: 914 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 915 | engines: {node: '>=8'} 916 | 917 | call-bind@1.0.5: 918 | resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} 919 | 920 | chai@4.4.0: 921 | resolution: {integrity: sha512-x9cHNq1uvkCdU+5xTkNh5WtgD4e4yDFCsp9jVc7N7qVeKeftv3gO/ZrviX5d+3ZfxdYnZXZYujjRInu1RogU6A==} 922 | engines: {node: '>=4'} 923 | 924 | chalk@2.4.2: 925 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 926 | engines: {node: '>=4'} 927 | 928 | check-error@1.0.3: 929 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 930 | 931 | cli-color@2.0.3: 932 | resolution: {integrity: sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==} 933 | engines: {node: '>=0.10'} 934 | 935 | color-convert@1.9.3: 936 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 937 | 938 | color-name@1.1.3: 939 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 940 | 941 | commander@9.5.0: 942 | resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} 943 | engines: {node: ^12.20.0 || >=14} 944 | 945 | concat-map@0.0.1: 946 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 947 | 948 | cross-spawn@6.0.5: 949 | resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} 950 | engines: {node: '>=4.8'} 951 | 952 | cross-spawn@7.0.3: 953 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 954 | engines: {node: '>= 8'} 955 | 956 | d@1.0.1: 957 | resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} 958 | 959 | debug@4.3.4: 960 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 961 | engines: {node: '>=6.0'} 962 | peerDependencies: 963 | supports-color: '*' 964 | peerDependenciesMeta: 965 | supports-color: 966 | optional: true 967 | 968 | deep-eql@4.1.3: 969 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 970 | engines: {node: '>=6'} 971 | 972 | define-data-property@1.1.1: 973 | resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} 974 | engines: {node: '>= 0.4'} 975 | 976 | define-properties@1.2.1: 977 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 978 | engines: {node: '>= 0.4'} 979 | 980 | diff-sequences@29.6.3: 981 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 982 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 983 | 984 | difflib@0.2.4: 985 | resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} 986 | 987 | dotenv@16.4.5: 988 | resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} 989 | engines: {node: '>=12'} 990 | 991 | dreamopt@0.8.0: 992 | resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==} 993 | engines: {node: '>=0.4.0'} 994 | 995 | drizzle-kit@0.21.1: 996 | resolution: {integrity: sha512-Sp7OnCdROiE2ebMuHsAfrnRoHVGYCvErQxUh7/0l6R1caHssZu9oZu/hW9rLU19xnTK4/y3iSe3sL0Cc530wCg==} 997 | hasBin: true 998 | 999 | drizzle-orm@0.30.10: 1000 | resolution: {integrity: sha512-IRy/QmMWw9lAQHpwbUh1b8fcn27S/a9zMIzqea1WNOxK9/4EB8gIo+FZWLiPXzl2n9ixGSv8BhsLZiOppWEwBw==} 1001 | peerDependencies: 1002 | '@aws-sdk/client-rds-data': '>=3' 1003 | '@cloudflare/workers-types': '>=3' 1004 | '@electric-sql/pglite': '>=0.1.1' 1005 | '@libsql/client': '*' 1006 | '@neondatabase/serverless': '>=0.1' 1007 | '@op-engineering/op-sqlite': '>=2' 1008 | '@opentelemetry/api': ^1.4.1 1009 | '@planetscale/database': '>=1' 1010 | '@types/better-sqlite3': '*' 1011 | '@types/pg': '*' 1012 | '@types/react': '>=18' 1013 | '@types/sql.js': '*' 1014 | '@vercel/postgres': '>=0.8.0' 1015 | '@xata.io/client': '*' 1016 | better-sqlite3: '>=7' 1017 | bun-types: '*' 1018 | expo-sqlite: '>=13.2.0' 1019 | knex: '*' 1020 | kysely: '*' 1021 | mysql2: '>=2' 1022 | pg: '>=8' 1023 | postgres: '>=3' 1024 | react: '>=18' 1025 | sql.js: '>=1' 1026 | sqlite3: '>=5' 1027 | peerDependenciesMeta: 1028 | '@aws-sdk/client-rds-data': 1029 | optional: true 1030 | '@cloudflare/workers-types': 1031 | optional: true 1032 | '@electric-sql/pglite': 1033 | optional: true 1034 | '@libsql/client': 1035 | optional: true 1036 | '@neondatabase/serverless': 1037 | optional: true 1038 | '@op-engineering/op-sqlite': 1039 | optional: true 1040 | '@opentelemetry/api': 1041 | optional: true 1042 | '@planetscale/database': 1043 | optional: true 1044 | '@types/better-sqlite3': 1045 | optional: true 1046 | '@types/pg': 1047 | optional: true 1048 | '@types/react': 1049 | optional: true 1050 | '@types/sql.js': 1051 | optional: true 1052 | '@vercel/postgres': 1053 | optional: true 1054 | '@xata.io/client': 1055 | optional: true 1056 | better-sqlite3: 1057 | optional: true 1058 | bun-types: 1059 | optional: true 1060 | expo-sqlite: 1061 | optional: true 1062 | knex: 1063 | optional: true 1064 | kysely: 1065 | optional: true 1066 | mysql2: 1067 | optional: true 1068 | pg: 1069 | optional: true 1070 | postgres: 1071 | optional: true 1072 | react: 1073 | optional: true 1074 | sql.js: 1075 | optional: true 1076 | sqlite3: 1077 | optional: true 1078 | 1079 | env-paths@3.0.0: 1080 | resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} 1081 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1082 | 1083 | error-ex@1.3.2: 1084 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1085 | 1086 | es-abstract@1.22.3: 1087 | resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} 1088 | engines: {node: '>= 0.4'} 1089 | 1090 | es-set-tostringtag@2.0.2: 1091 | resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} 1092 | engines: {node: '>= 0.4'} 1093 | 1094 | es-to-primitive@1.2.1: 1095 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1096 | engines: {node: '>= 0.4'} 1097 | 1098 | es5-ext@0.10.62: 1099 | resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} 1100 | engines: {node: '>=0.10'} 1101 | 1102 | es6-iterator@2.0.3: 1103 | resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} 1104 | 1105 | es6-symbol@3.1.3: 1106 | resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} 1107 | 1108 | es6-weak-map@2.0.3: 1109 | resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} 1110 | 1111 | esbuild-register@3.5.0: 1112 | resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} 1113 | peerDependencies: 1114 | esbuild: '>=0.12 <1' 1115 | 1116 | esbuild@0.18.20: 1117 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} 1118 | engines: {node: '>=12'} 1119 | hasBin: true 1120 | 1121 | esbuild@0.19.11: 1122 | resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} 1123 | engines: {node: '>=12'} 1124 | hasBin: true 1125 | 1126 | esbuild@0.20.2: 1127 | resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} 1128 | engines: {node: '>=12'} 1129 | hasBin: true 1130 | 1131 | esbuild@0.21.2: 1132 | resolution: {integrity: sha512-LmHPAa5h4tSxz+g/D8IHY6wCjtIiFx8I7/Q0Aq+NmvtoYvyMnJU0KQJcqB6QH30X9x/W4CemgUtPgQDZFca5SA==} 1133 | engines: {node: '>=12'} 1134 | hasBin: true 1135 | 1136 | escape-string-regexp@1.0.5: 1137 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1138 | engines: {node: '>=0.8.0'} 1139 | 1140 | estree-walker@3.0.3: 1141 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 1142 | 1143 | event-emitter@0.3.5: 1144 | resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} 1145 | 1146 | execa@8.0.1: 1147 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 1148 | engines: {node: '>=16.17'} 1149 | 1150 | ext@1.7.0: 1151 | resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} 1152 | 1153 | fast-glob@3.3.2: 1154 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1155 | engines: {node: '>=8.6.0'} 1156 | 1157 | fastq@1.16.0: 1158 | resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} 1159 | 1160 | fflate@0.8.1: 1161 | resolution: {integrity: sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==} 1162 | 1163 | fill-range@7.0.1: 1164 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1165 | engines: {node: '>=8'} 1166 | 1167 | flatted@3.2.9: 1168 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 1169 | 1170 | for-each@0.3.3: 1171 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1172 | 1173 | fs.realpath@1.0.0: 1174 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1175 | 1176 | fsevents@2.3.3: 1177 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1178 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1179 | os: [darwin] 1180 | 1181 | function-bind@1.1.2: 1182 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1183 | 1184 | function.prototype.name@1.1.6: 1185 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 1186 | engines: {node: '>= 0.4'} 1187 | 1188 | functions-have-names@1.2.3: 1189 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1190 | 1191 | get-func-name@2.0.2: 1192 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 1193 | 1194 | get-intrinsic@1.2.2: 1195 | resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} 1196 | 1197 | get-stream@8.0.1: 1198 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 1199 | engines: {node: '>=16'} 1200 | 1201 | get-symbol-description@1.0.0: 1202 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1203 | engines: {node: '>= 0.4'} 1204 | 1205 | get-tsconfig@4.7.2: 1206 | resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} 1207 | 1208 | get-tsconfig@4.7.5: 1209 | resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} 1210 | 1211 | glob-parent@5.1.2: 1212 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1213 | engines: {node: '>= 6'} 1214 | 1215 | glob@8.1.0: 1216 | resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} 1217 | engines: {node: '>=12'} 1218 | 1219 | globalthis@1.0.3: 1220 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1221 | engines: {node: '>= 0.4'} 1222 | 1223 | globrex@0.1.2: 1224 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 1225 | 1226 | gopd@1.0.1: 1227 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1228 | 1229 | graceful-fs@4.2.11: 1230 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1231 | 1232 | hanji@0.0.5: 1233 | resolution: {integrity: sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==} 1234 | 1235 | has-bigints@1.0.2: 1236 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1237 | 1238 | has-flag@3.0.0: 1239 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1240 | engines: {node: '>=4'} 1241 | 1242 | has-property-descriptors@1.0.1: 1243 | resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} 1244 | 1245 | has-proto@1.0.1: 1246 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1247 | engines: {node: '>= 0.4'} 1248 | 1249 | has-symbols@1.0.3: 1250 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1251 | engines: {node: '>= 0.4'} 1252 | 1253 | has-tostringtag@1.0.0: 1254 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1255 | engines: {node: '>= 0.4'} 1256 | 1257 | hasown@2.0.0: 1258 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 1259 | engines: {node: '>= 0.4'} 1260 | 1261 | heap@0.2.7: 1262 | resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} 1263 | 1264 | hono@4.3.6: 1265 | resolution: {integrity: sha512-2IqXwrxWF4tG2AR7b5tMYn+KEnWK8UvdC/NUSbOKWj/Kj11OJqel58FxyiXLK5CcKLiL8aGtTe4lkBKXyaHMBQ==} 1266 | engines: {node: '>=16.0.0'} 1267 | 1268 | hosted-git-info@2.8.9: 1269 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 1270 | 1271 | human-signals@5.0.0: 1272 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 1273 | engines: {node: '>=16.17.0'} 1274 | 1275 | immediate@3.0.6: 1276 | resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} 1277 | 1278 | inflight@1.0.6: 1279 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1280 | 1281 | inherits@2.0.4: 1282 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1283 | 1284 | internal-slot@1.0.6: 1285 | resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} 1286 | engines: {node: '>= 0.4'} 1287 | 1288 | is-array-buffer@3.0.2: 1289 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 1290 | 1291 | is-arrayish@0.2.1: 1292 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1293 | 1294 | is-bigint@1.0.4: 1295 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1296 | 1297 | is-boolean-object@1.1.2: 1298 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1299 | engines: {node: '>= 0.4'} 1300 | 1301 | is-callable@1.2.7: 1302 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1303 | engines: {node: '>= 0.4'} 1304 | 1305 | is-core-module@2.13.1: 1306 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1307 | 1308 | is-date-object@1.0.5: 1309 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1310 | engines: {node: '>= 0.4'} 1311 | 1312 | is-extglob@2.1.1: 1313 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1314 | engines: {node: '>=0.10.0'} 1315 | 1316 | is-glob@4.0.3: 1317 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1318 | engines: {node: '>=0.10.0'} 1319 | 1320 | is-negative-zero@2.0.2: 1321 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1322 | engines: {node: '>= 0.4'} 1323 | 1324 | is-number-object@1.0.7: 1325 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1326 | engines: {node: '>= 0.4'} 1327 | 1328 | is-number@7.0.0: 1329 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1330 | engines: {node: '>=0.12.0'} 1331 | 1332 | is-promise@2.2.2: 1333 | resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} 1334 | 1335 | is-regex@1.1.4: 1336 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1337 | engines: {node: '>= 0.4'} 1338 | 1339 | is-shared-array-buffer@1.0.2: 1340 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1341 | 1342 | is-stream@3.0.0: 1343 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1344 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1345 | 1346 | is-string@1.0.7: 1347 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1348 | engines: {node: '>= 0.4'} 1349 | 1350 | is-symbol@1.0.4: 1351 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1352 | engines: {node: '>= 0.4'} 1353 | 1354 | is-typed-array@1.1.12: 1355 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} 1356 | engines: {node: '>= 0.4'} 1357 | 1358 | is-weakref@1.0.2: 1359 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1360 | 1361 | isarray@2.0.5: 1362 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1363 | 1364 | isexe@2.0.0: 1365 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1366 | 1367 | js-tokens@9.0.0: 1368 | resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} 1369 | 1370 | json-diff@0.9.0: 1371 | resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} 1372 | hasBin: true 1373 | 1374 | json-parse-better-errors@1.0.2: 1375 | resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} 1376 | 1377 | jsonc-parser@3.2.0: 1378 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} 1379 | 1380 | lie@3.1.1: 1381 | resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} 1382 | 1383 | load-json-file@4.0.0: 1384 | resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} 1385 | engines: {node: '>=4'} 1386 | 1387 | local-pkg@0.5.0: 1388 | resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} 1389 | engines: {node: '>=14'} 1390 | 1391 | localforage@1.10.0: 1392 | resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} 1393 | 1394 | lodash.throttle@4.1.1: 1395 | resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} 1396 | 1397 | loupe@2.3.7: 1398 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 1399 | 1400 | lru-queue@0.1.0: 1401 | resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} 1402 | 1403 | magic-string@0.30.5: 1404 | resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} 1405 | engines: {node: '>=12'} 1406 | 1407 | memoizee@0.4.15: 1408 | resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} 1409 | 1410 | memorystream@0.3.1: 1411 | resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} 1412 | engines: {node: '>= 0.10.0'} 1413 | 1414 | merge-stream@2.0.0: 1415 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1416 | 1417 | merge2@1.4.1: 1418 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1419 | engines: {node: '>= 8'} 1420 | 1421 | micromatch@4.0.5: 1422 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1423 | engines: {node: '>=8.6'} 1424 | 1425 | mimic-fn@4.0.0: 1426 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1427 | engines: {node: '>=12'} 1428 | 1429 | minimatch@3.1.2: 1430 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1431 | 1432 | minimatch@5.1.6: 1433 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 1434 | engines: {node: '>=10'} 1435 | 1436 | mlly@1.4.2: 1437 | resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} 1438 | 1439 | mrmime@2.0.0: 1440 | resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} 1441 | engines: {node: '>=10'} 1442 | 1443 | ms@2.1.2: 1444 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1445 | 1446 | nanoid@3.3.7: 1447 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1448 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1449 | hasBin: true 1450 | 1451 | next-tick@1.1.0: 1452 | resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} 1453 | 1454 | nice-try@1.0.5: 1455 | resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} 1456 | 1457 | normalize-package-data@2.5.0: 1458 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1459 | 1460 | npm-run-all@4.1.5: 1461 | resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} 1462 | engines: {node: '>= 4'} 1463 | hasBin: true 1464 | 1465 | npm-run-path@5.2.0: 1466 | resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} 1467 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1468 | 1469 | object-inspect@1.13.1: 1470 | resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} 1471 | 1472 | object-keys@1.1.1: 1473 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1474 | engines: {node: '>= 0.4'} 1475 | 1476 | object.assign@4.1.5: 1477 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 1478 | engines: {node: '>= 0.4'} 1479 | 1480 | once@1.4.0: 1481 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1482 | 1483 | onetime@6.0.0: 1484 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1485 | engines: {node: '>=12'} 1486 | 1487 | p-limit@5.0.0: 1488 | resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} 1489 | engines: {node: '>=18'} 1490 | 1491 | parse-json@4.0.0: 1492 | resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} 1493 | engines: {node: '>=4'} 1494 | 1495 | path-key@2.0.1: 1496 | resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} 1497 | engines: {node: '>=4'} 1498 | 1499 | path-key@3.1.1: 1500 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1501 | engines: {node: '>=8'} 1502 | 1503 | path-key@4.0.0: 1504 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1505 | engines: {node: '>=12'} 1506 | 1507 | path-parse@1.0.7: 1508 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1509 | 1510 | path-type@3.0.0: 1511 | resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} 1512 | engines: {node: '>=4'} 1513 | 1514 | pathe@1.1.1: 1515 | resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} 1516 | 1517 | pathval@1.1.1: 1518 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 1519 | 1520 | pg-cloudflare@1.1.1: 1521 | resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} 1522 | 1523 | pg-connection-string@2.6.4: 1524 | resolution: {integrity: sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==} 1525 | 1526 | pg-int8@1.0.1: 1527 | resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} 1528 | engines: {node: '>=4.0.0'} 1529 | 1530 | pg-pool@3.6.2: 1531 | resolution: {integrity: sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==} 1532 | peerDependencies: 1533 | pg: '>=8.0' 1534 | 1535 | pg-protocol@1.6.1: 1536 | resolution: {integrity: sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==} 1537 | 1538 | pg-types@2.2.0: 1539 | resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} 1540 | engines: {node: '>=4'} 1541 | 1542 | pg@8.11.5: 1543 | resolution: {integrity: sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw==} 1544 | engines: {node: '>= 8.0.0'} 1545 | peerDependencies: 1546 | pg-native: '>=3.0.1' 1547 | peerDependenciesMeta: 1548 | pg-native: 1549 | optional: true 1550 | 1551 | pgpass@1.0.5: 1552 | resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} 1553 | 1554 | picocolors@1.0.0: 1555 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1556 | 1557 | picomatch@2.3.1: 1558 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1559 | engines: {node: '>=8.6'} 1560 | 1561 | pidtree@0.3.1: 1562 | resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} 1563 | engines: {node: '>=0.10'} 1564 | hasBin: true 1565 | 1566 | pify@3.0.0: 1567 | resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} 1568 | engines: {node: '>=4'} 1569 | 1570 | pkg-types@1.0.3: 1571 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} 1572 | 1573 | postcss@8.4.33: 1574 | resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} 1575 | engines: {node: ^10 || ^12 || >=14} 1576 | 1577 | postgres-array@2.0.0: 1578 | resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} 1579 | engines: {node: '>=4'} 1580 | 1581 | postgres-bytea@1.0.0: 1582 | resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} 1583 | engines: {node: '>=0.10.0'} 1584 | 1585 | postgres-date@1.0.7: 1586 | resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} 1587 | engines: {node: '>=0.10.0'} 1588 | 1589 | postgres-interval@1.2.0: 1590 | resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} 1591 | engines: {node: '>=0.10.0'} 1592 | 1593 | postgres@3.4.4: 1594 | resolution: {integrity: sha512-IbyN+9KslkqcXa8AO9fxpk97PA4pzewvpi2B3Dwy9u4zpV32QicaEdgmF3eSQUzdRk7ttDHQejNgAEr4XoeH4A==} 1595 | engines: {node: '>=12'} 1596 | 1597 | pretty-format@29.7.0: 1598 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1599 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1600 | 1601 | queue-microtask@1.2.3: 1602 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1603 | 1604 | react-is@18.2.0: 1605 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 1606 | 1607 | read-pkg@3.0.0: 1608 | resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} 1609 | engines: {node: '>=4'} 1610 | 1611 | regexp.prototype.flags@1.5.1: 1612 | resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} 1613 | engines: {node: '>= 0.4'} 1614 | 1615 | resolve-pkg-maps@1.0.0: 1616 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1617 | 1618 | resolve@1.22.8: 1619 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1620 | hasBin: true 1621 | 1622 | reusify@1.0.4: 1623 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1624 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1625 | 1626 | rollup@4.9.4: 1627 | resolution: {integrity: sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g==} 1628 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1629 | hasBin: true 1630 | 1631 | run-parallel@1.2.0: 1632 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1633 | 1634 | safe-array-concat@1.0.1: 1635 | resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} 1636 | engines: {node: '>=0.4'} 1637 | 1638 | safe-regex-test@1.0.0: 1639 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 1640 | 1641 | semver@5.7.2: 1642 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1643 | hasBin: true 1644 | 1645 | set-function-length@1.1.1: 1646 | resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} 1647 | engines: {node: '>= 0.4'} 1648 | 1649 | set-function-name@2.0.1: 1650 | resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} 1651 | engines: {node: '>= 0.4'} 1652 | 1653 | shebang-command@1.2.0: 1654 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 1655 | engines: {node: '>=0.10.0'} 1656 | 1657 | shebang-command@2.0.0: 1658 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1659 | engines: {node: '>=8'} 1660 | 1661 | shebang-regex@1.0.0: 1662 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 1663 | engines: {node: '>=0.10.0'} 1664 | 1665 | shebang-regex@3.0.0: 1666 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1667 | engines: {node: '>=8'} 1668 | 1669 | shell-quote@1.8.1: 1670 | resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} 1671 | 1672 | side-channel@1.0.4: 1673 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 1674 | 1675 | siginfo@2.0.0: 1676 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1677 | 1678 | signal-exit@4.1.0: 1679 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1680 | engines: {node: '>=14'} 1681 | 1682 | sirv@2.0.4: 1683 | resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} 1684 | engines: {node: '>= 10'} 1685 | 1686 | sisteransi@1.0.5: 1687 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1688 | 1689 | source-map-js@1.0.2: 1690 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1691 | engines: {node: '>=0.10.0'} 1692 | 1693 | source-map-support@0.5.21: 1694 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1695 | 1696 | source-map@0.6.1: 1697 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1698 | engines: {node: '>=0.10.0'} 1699 | 1700 | spdx-correct@3.2.0: 1701 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 1702 | 1703 | spdx-exceptions@2.3.0: 1704 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} 1705 | 1706 | spdx-expression-parse@3.0.1: 1707 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1708 | 1709 | spdx-license-ids@3.0.16: 1710 | resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} 1711 | 1712 | split2@4.2.0: 1713 | resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 1714 | engines: {node: '>= 10.x'} 1715 | 1716 | stackback@0.0.2: 1717 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1718 | 1719 | std-env@3.7.0: 1720 | resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} 1721 | 1722 | string.prototype.padend@3.1.5: 1723 | resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} 1724 | engines: {node: '>= 0.4'} 1725 | 1726 | string.prototype.trim@1.2.8: 1727 | resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} 1728 | engines: {node: '>= 0.4'} 1729 | 1730 | string.prototype.trimend@1.0.7: 1731 | resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} 1732 | 1733 | string.prototype.trimstart@1.0.7: 1734 | resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} 1735 | 1736 | strip-bom@3.0.0: 1737 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1738 | engines: {node: '>=4'} 1739 | 1740 | strip-final-newline@3.0.0: 1741 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 1742 | engines: {node: '>=12'} 1743 | 1744 | strip-literal@2.1.0: 1745 | resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} 1746 | 1747 | supports-color@5.5.0: 1748 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1749 | engines: {node: '>=4'} 1750 | 1751 | supports-preserve-symlinks-flag@1.0.0: 1752 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1753 | engines: {node: '>= 0.4'} 1754 | 1755 | timers-ext@0.1.7: 1756 | resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} 1757 | 1758 | tinybench@2.5.1: 1759 | resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} 1760 | 1761 | tinypool@0.8.4: 1762 | resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} 1763 | engines: {node: '>=14.0.0'} 1764 | 1765 | tinyspy@2.2.0: 1766 | resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} 1767 | engines: {node: '>=14.0.0'} 1768 | 1769 | to-regex-range@5.0.1: 1770 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1771 | engines: {node: '>=8.0'} 1772 | 1773 | totalist@3.0.1: 1774 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 1775 | engines: {node: '>=6'} 1776 | 1777 | toucan-js@3.4.0: 1778 | resolution: {integrity: sha512-ifqPB5QIBC07gDGhWyMpSFp6Z6cjRLsjxhQ3wZmE6YGDntJZNCage77AIyrVihQLQM6/6T8TQumEJDuWlBw56w==} 1779 | 1780 | tr46@0.0.3: 1781 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1782 | 1783 | tsconfck@3.0.3: 1784 | resolution: {integrity: sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==} 1785 | engines: {node: ^18 || >=20} 1786 | hasBin: true 1787 | peerDependencies: 1788 | typescript: ^5.0.0 1789 | peerDependenciesMeta: 1790 | typescript: 1791 | optional: true 1792 | 1793 | tsx@4.10.2: 1794 | resolution: {integrity: sha512-gOfACgv1ElsIjvt7Fp0rMJKGnMGjox0JfGOfX3kmZCV/yZumaNqtHGKBXt1KgaYS9KjDOmqGeI8gHk/W7kWVZg==} 1795 | engines: {node: '>=18.0.0'} 1796 | hasBin: true 1797 | 1798 | type-detect@4.0.8: 1799 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1800 | engines: {node: '>=4'} 1801 | 1802 | type@1.2.0: 1803 | resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} 1804 | 1805 | type@2.7.2: 1806 | resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} 1807 | 1808 | typed-array-buffer@1.0.0: 1809 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} 1810 | engines: {node: '>= 0.4'} 1811 | 1812 | typed-array-byte-length@1.0.0: 1813 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} 1814 | engines: {node: '>= 0.4'} 1815 | 1816 | typed-array-byte-offset@1.0.0: 1817 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} 1818 | engines: {node: '>= 0.4'} 1819 | 1820 | typed-array-length@1.0.4: 1821 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 1822 | 1823 | typescript@5.4.5: 1824 | resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} 1825 | engines: {node: '>=14.17'} 1826 | hasBin: true 1827 | 1828 | ufo@1.3.2: 1829 | resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} 1830 | 1831 | unbox-primitive@1.0.2: 1832 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1833 | 1834 | undici-types@5.26.5: 1835 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 1836 | 1837 | validate-npm-package-license@3.0.4: 1838 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1839 | 1840 | vite-node@1.6.0: 1841 | resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} 1842 | engines: {node: ^18.0.0 || >=20.0.0} 1843 | hasBin: true 1844 | 1845 | vite-tsconfig-paths@4.3.2: 1846 | resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} 1847 | peerDependencies: 1848 | vite: '*' 1849 | peerDependenciesMeta: 1850 | vite: 1851 | optional: true 1852 | 1853 | vite@5.0.11: 1854 | resolution: {integrity: sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==} 1855 | engines: {node: ^18.0.0 || >=20.0.0} 1856 | hasBin: true 1857 | peerDependencies: 1858 | '@types/node': ^18.0.0 || >=20.0.0 1859 | less: '*' 1860 | lightningcss: ^1.21.0 1861 | sass: '*' 1862 | stylus: '*' 1863 | sugarss: '*' 1864 | terser: ^5.4.0 1865 | peerDependenciesMeta: 1866 | '@types/node': 1867 | optional: true 1868 | less: 1869 | optional: true 1870 | lightningcss: 1871 | optional: true 1872 | sass: 1873 | optional: true 1874 | stylus: 1875 | optional: true 1876 | sugarss: 1877 | optional: true 1878 | terser: 1879 | optional: true 1880 | 1881 | vitest@1.6.0: 1882 | resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} 1883 | engines: {node: ^18.0.0 || >=20.0.0} 1884 | hasBin: true 1885 | peerDependencies: 1886 | '@edge-runtime/vm': '*' 1887 | '@types/node': ^18.0.0 || >=20.0.0 1888 | '@vitest/browser': 1.6.0 1889 | '@vitest/ui': 1.6.0 1890 | happy-dom: '*' 1891 | jsdom: '*' 1892 | peerDependenciesMeta: 1893 | '@edge-runtime/vm': 1894 | optional: true 1895 | '@types/node': 1896 | optional: true 1897 | '@vitest/browser': 1898 | optional: true 1899 | '@vitest/ui': 1900 | optional: true 1901 | happy-dom: 1902 | optional: true 1903 | jsdom: 1904 | optional: true 1905 | 1906 | webidl-conversions@3.0.1: 1907 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1908 | 1909 | whatwg-url@5.0.0: 1910 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1911 | 1912 | which-boxed-primitive@1.0.2: 1913 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 1914 | 1915 | which-typed-array@1.1.13: 1916 | resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} 1917 | engines: {node: '>= 0.4'} 1918 | 1919 | which@1.3.1: 1920 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 1921 | hasBin: true 1922 | 1923 | which@2.0.2: 1924 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1925 | engines: {node: '>= 8'} 1926 | hasBin: true 1927 | 1928 | why-is-node-running@2.2.2: 1929 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 1930 | engines: {node: '>=8'} 1931 | hasBin: true 1932 | 1933 | wordwrap@1.0.0: 1934 | resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} 1935 | 1936 | wrappy@1.0.2: 1937 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1938 | 1939 | ws@8.16.0: 1940 | resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} 1941 | engines: {node: '>=10.0.0'} 1942 | peerDependencies: 1943 | bufferutil: ^4.0.1 1944 | utf-8-validate: '>=5.0.2' 1945 | peerDependenciesMeta: 1946 | bufferutil: 1947 | optional: true 1948 | utf-8-validate: 1949 | optional: true 1950 | 1951 | xtend@4.0.2: 1952 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 1953 | engines: {node: '>=0.4'} 1954 | 1955 | yocto-queue@1.0.0: 1956 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 1957 | engines: {node: '>=12.20'} 1958 | 1959 | zod-validation-error@3.3.0: 1960 | resolution: {integrity: sha512-Syib9oumw1NTqEv4LT0e6U83Td9aVRk9iTXPUQr1otyV1PuXQKOvOwhMNqZIq5hluzHP2pMgnOmHEo7kPdI2mw==} 1961 | engines: {node: '>=18.0.0'} 1962 | peerDependencies: 1963 | zod: ^3.18.0 1964 | 1965 | zod@3.23.8: 1966 | resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} 1967 | 1968 | snapshots: 1969 | 1970 | '@biomejs/biome@1.7.3': 1971 | optionalDependencies: 1972 | '@biomejs/cli-darwin-arm64': 1.7.3 1973 | '@biomejs/cli-darwin-x64': 1.7.3 1974 | '@biomejs/cli-linux-arm64': 1.7.3 1975 | '@biomejs/cli-linux-arm64-musl': 1.7.3 1976 | '@biomejs/cli-linux-x64': 1.7.3 1977 | '@biomejs/cli-linux-x64-musl': 1.7.3 1978 | '@biomejs/cli-win32-arm64': 1.7.3 1979 | '@biomejs/cli-win32-x64': 1.7.3 1980 | 1981 | '@biomejs/cli-darwin-arm64@1.7.3': 1982 | optional: true 1983 | 1984 | '@biomejs/cli-darwin-x64@1.7.3': 1985 | optional: true 1986 | 1987 | '@biomejs/cli-linux-arm64-musl@1.7.3': 1988 | optional: true 1989 | 1990 | '@biomejs/cli-linux-arm64@1.7.3': 1991 | optional: true 1992 | 1993 | '@biomejs/cli-linux-x64-musl@1.7.3': 1994 | optional: true 1995 | 1996 | '@biomejs/cli-linux-x64@1.7.3': 1997 | optional: true 1998 | 1999 | '@biomejs/cli-win32-arm64@1.7.3': 2000 | optional: true 2001 | 2002 | '@biomejs/cli-win32-x64@1.7.3': 2003 | optional: true 2004 | 2005 | '@esbuild-kit/core-utils@3.3.2': 2006 | dependencies: 2007 | esbuild: 0.18.20 2008 | source-map-support: 0.5.21 2009 | 2010 | '@esbuild-kit/esm-loader@2.6.5': 2011 | dependencies: 2012 | '@esbuild-kit/core-utils': 3.3.2 2013 | get-tsconfig: 4.7.2 2014 | 2015 | '@esbuild/aix-ppc64@0.19.11': 2016 | optional: true 2017 | 2018 | '@esbuild/aix-ppc64@0.20.2': 2019 | optional: true 2020 | 2021 | '@esbuild/aix-ppc64@0.21.2': 2022 | optional: true 2023 | 2024 | '@esbuild/android-arm64@0.18.20': 2025 | optional: true 2026 | 2027 | '@esbuild/android-arm64@0.19.11': 2028 | optional: true 2029 | 2030 | '@esbuild/android-arm64@0.20.2': 2031 | optional: true 2032 | 2033 | '@esbuild/android-arm64@0.21.2': 2034 | optional: true 2035 | 2036 | '@esbuild/android-arm@0.18.20': 2037 | optional: true 2038 | 2039 | '@esbuild/android-arm@0.19.11': 2040 | optional: true 2041 | 2042 | '@esbuild/android-arm@0.20.2': 2043 | optional: true 2044 | 2045 | '@esbuild/android-arm@0.21.2': 2046 | optional: true 2047 | 2048 | '@esbuild/android-x64@0.18.20': 2049 | optional: true 2050 | 2051 | '@esbuild/android-x64@0.19.11': 2052 | optional: true 2053 | 2054 | '@esbuild/android-x64@0.20.2': 2055 | optional: true 2056 | 2057 | '@esbuild/android-x64@0.21.2': 2058 | optional: true 2059 | 2060 | '@esbuild/darwin-arm64@0.18.20': 2061 | optional: true 2062 | 2063 | '@esbuild/darwin-arm64@0.19.11': 2064 | optional: true 2065 | 2066 | '@esbuild/darwin-arm64@0.20.2': 2067 | optional: true 2068 | 2069 | '@esbuild/darwin-arm64@0.21.2': 2070 | optional: true 2071 | 2072 | '@esbuild/darwin-x64@0.18.20': 2073 | optional: true 2074 | 2075 | '@esbuild/darwin-x64@0.19.11': 2076 | optional: true 2077 | 2078 | '@esbuild/darwin-x64@0.20.2': 2079 | optional: true 2080 | 2081 | '@esbuild/darwin-x64@0.21.2': 2082 | optional: true 2083 | 2084 | '@esbuild/freebsd-arm64@0.18.20': 2085 | optional: true 2086 | 2087 | '@esbuild/freebsd-arm64@0.19.11': 2088 | optional: true 2089 | 2090 | '@esbuild/freebsd-arm64@0.20.2': 2091 | optional: true 2092 | 2093 | '@esbuild/freebsd-arm64@0.21.2': 2094 | optional: true 2095 | 2096 | '@esbuild/freebsd-x64@0.18.20': 2097 | optional: true 2098 | 2099 | '@esbuild/freebsd-x64@0.19.11': 2100 | optional: true 2101 | 2102 | '@esbuild/freebsd-x64@0.20.2': 2103 | optional: true 2104 | 2105 | '@esbuild/freebsd-x64@0.21.2': 2106 | optional: true 2107 | 2108 | '@esbuild/linux-arm64@0.18.20': 2109 | optional: true 2110 | 2111 | '@esbuild/linux-arm64@0.19.11': 2112 | optional: true 2113 | 2114 | '@esbuild/linux-arm64@0.20.2': 2115 | optional: true 2116 | 2117 | '@esbuild/linux-arm64@0.21.2': 2118 | optional: true 2119 | 2120 | '@esbuild/linux-arm@0.18.20': 2121 | optional: true 2122 | 2123 | '@esbuild/linux-arm@0.19.11': 2124 | optional: true 2125 | 2126 | '@esbuild/linux-arm@0.20.2': 2127 | optional: true 2128 | 2129 | '@esbuild/linux-arm@0.21.2': 2130 | optional: true 2131 | 2132 | '@esbuild/linux-ia32@0.18.20': 2133 | optional: true 2134 | 2135 | '@esbuild/linux-ia32@0.19.11': 2136 | optional: true 2137 | 2138 | '@esbuild/linux-ia32@0.20.2': 2139 | optional: true 2140 | 2141 | '@esbuild/linux-ia32@0.21.2': 2142 | optional: true 2143 | 2144 | '@esbuild/linux-loong64@0.18.20': 2145 | optional: true 2146 | 2147 | '@esbuild/linux-loong64@0.19.11': 2148 | optional: true 2149 | 2150 | '@esbuild/linux-loong64@0.20.2': 2151 | optional: true 2152 | 2153 | '@esbuild/linux-loong64@0.21.2': 2154 | optional: true 2155 | 2156 | '@esbuild/linux-mips64el@0.18.20': 2157 | optional: true 2158 | 2159 | '@esbuild/linux-mips64el@0.19.11': 2160 | optional: true 2161 | 2162 | '@esbuild/linux-mips64el@0.20.2': 2163 | optional: true 2164 | 2165 | '@esbuild/linux-mips64el@0.21.2': 2166 | optional: true 2167 | 2168 | '@esbuild/linux-ppc64@0.18.20': 2169 | optional: true 2170 | 2171 | '@esbuild/linux-ppc64@0.19.11': 2172 | optional: true 2173 | 2174 | '@esbuild/linux-ppc64@0.20.2': 2175 | optional: true 2176 | 2177 | '@esbuild/linux-ppc64@0.21.2': 2178 | optional: true 2179 | 2180 | '@esbuild/linux-riscv64@0.18.20': 2181 | optional: true 2182 | 2183 | '@esbuild/linux-riscv64@0.19.11': 2184 | optional: true 2185 | 2186 | '@esbuild/linux-riscv64@0.20.2': 2187 | optional: true 2188 | 2189 | '@esbuild/linux-riscv64@0.21.2': 2190 | optional: true 2191 | 2192 | '@esbuild/linux-s390x@0.18.20': 2193 | optional: true 2194 | 2195 | '@esbuild/linux-s390x@0.19.11': 2196 | optional: true 2197 | 2198 | '@esbuild/linux-s390x@0.20.2': 2199 | optional: true 2200 | 2201 | '@esbuild/linux-s390x@0.21.2': 2202 | optional: true 2203 | 2204 | '@esbuild/linux-x64@0.18.20': 2205 | optional: true 2206 | 2207 | '@esbuild/linux-x64@0.19.11': 2208 | optional: true 2209 | 2210 | '@esbuild/linux-x64@0.20.2': 2211 | optional: true 2212 | 2213 | '@esbuild/linux-x64@0.21.2': 2214 | optional: true 2215 | 2216 | '@esbuild/netbsd-x64@0.18.20': 2217 | optional: true 2218 | 2219 | '@esbuild/netbsd-x64@0.19.11': 2220 | optional: true 2221 | 2222 | '@esbuild/netbsd-x64@0.20.2': 2223 | optional: true 2224 | 2225 | '@esbuild/netbsd-x64@0.21.2': 2226 | optional: true 2227 | 2228 | '@esbuild/openbsd-x64@0.18.20': 2229 | optional: true 2230 | 2231 | '@esbuild/openbsd-x64@0.19.11': 2232 | optional: true 2233 | 2234 | '@esbuild/openbsd-x64@0.20.2': 2235 | optional: true 2236 | 2237 | '@esbuild/openbsd-x64@0.21.2': 2238 | optional: true 2239 | 2240 | '@esbuild/sunos-x64@0.18.20': 2241 | optional: true 2242 | 2243 | '@esbuild/sunos-x64@0.19.11': 2244 | optional: true 2245 | 2246 | '@esbuild/sunos-x64@0.20.2': 2247 | optional: true 2248 | 2249 | '@esbuild/sunos-x64@0.21.2': 2250 | optional: true 2251 | 2252 | '@esbuild/win32-arm64@0.18.20': 2253 | optional: true 2254 | 2255 | '@esbuild/win32-arm64@0.19.11': 2256 | optional: true 2257 | 2258 | '@esbuild/win32-arm64@0.20.2': 2259 | optional: true 2260 | 2261 | '@esbuild/win32-arm64@0.21.2': 2262 | optional: true 2263 | 2264 | '@esbuild/win32-ia32@0.18.20': 2265 | optional: true 2266 | 2267 | '@esbuild/win32-ia32@0.19.11': 2268 | optional: true 2269 | 2270 | '@esbuild/win32-ia32@0.20.2': 2271 | optional: true 2272 | 2273 | '@esbuild/win32-ia32@0.21.2': 2274 | optional: true 2275 | 2276 | '@esbuild/win32-x64@0.18.20': 2277 | optional: true 2278 | 2279 | '@esbuild/win32-x64@0.19.11': 2280 | optional: true 2281 | 2282 | '@esbuild/win32-x64@0.20.2': 2283 | optional: true 2284 | 2285 | '@esbuild/win32-x64@0.21.2': 2286 | optional: true 2287 | 2288 | '@hono/node-server@1.11.1': {} 2289 | 2290 | '@hono/sentry@1.1.0(hono@4.3.6)': 2291 | dependencies: 2292 | hono: 4.3.6 2293 | toucan-js: 3.4.0 2294 | 2295 | '@hono/swagger-ui@0.2.2(hono@4.3.6)': 2296 | dependencies: 2297 | hono: 4.3.6 2298 | 2299 | '@hono/zod-validator@0.2.1(hono@4.3.6)(zod@3.23.8)': 2300 | dependencies: 2301 | hono: 4.3.6 2302 | zod: 3.23.8 2303 | 2304 | '@jest/schemas@29.6.3': 2305 | dependencies: 2306 | '@sinclair/typebox': 0.27.8 2307 | 2308 | '@jridgewell/sourcemap-codec@1.4.15': {} 2309 | 2310 | '@nodelib/fs.scandir@2.1.5': 2311 | dependencies: 2312 | '@nodelib/fs.stat': 2.0.5 2313 | run-parallel: 1.2.0 2314 | 2315 | '@nodelib/fs.stat@2.0.5': {} 2316 | 2317 | '@nodelib/fs.walk@1.2.8': 2318 | dependencies: 2319 | '@nodelib/fs.scandir': 2.1.5 2320 | fastq: 1.16.0 2321 | 2322 | '@polka/url@1.0.0-next.24': {} 2323 | 2324 | '@rollup/rollup-android-arm-eabi@4.9.4': 2325 | optional: true 2326 | 2327 | '@rollup/rollup-android-arm64@4.9.4': 2328 | optional: true 2329 | 2330 | '@rollup/rollup-darwin-arm64@4.9.4': 2331 | optional: true 2332 | 2333 | '@rollup/rollup-darwin-x64@4.9.4': 2334 | optional: true 2335 | 2336 | '@rollup/rollup-linux-arm-gnueabihf@4.9.4': 2337 | optional: true 2338 | 2339 | '@rollup/rollup-linux-arm64-gnu@4.9.4': 2340 | optional: true 2341 | 2342 | '@rollup/rollup-linux-arm64-musl@4.9.4': 2343 | optional: true 2344 | 2345 | '@rollup/rollup-linux-riscv64-gnu@4.9.4': 2346 | optional: true 2347 | 2348 | '@rollup/rollup-linux-x64-gnu@4.9.4': 2349 | optional: true 2350 | 2351 | '@rollup/rollup-linux-x64-musl@4.9.4': 2352 | optional: true 2353 | 2354 | '@rollup/rollup-win32-arm64-msvc@4.9.4': 2355 | optional: true 2356 | 2357 | '@rollup/rollup-win32-ia32-msvc@4.9.4': 2358 | optional: true 2359 | 2360 | '@rollup/rollup-win32-x64-msvc@4.9.4': 2361 | optional: true 2362 | 2363 | '@sentry/core@7.112.2': 2364 | dependencies: 2365 | '@sentry/types': 7.112.2 2366 | '@sentry/utils': 7.112.2 2367 | 2368 | '@sentry/integrations@7.112.2': 2369 | dependencies: 2370 | '@sentry/core': 7.112.2 2371 | '@sentry/types': 7.112.2 2372 | '@sentry/utils': 7.112.2 2373 | localforage: 1.10.0 2374 | 2375 | '@sentry/types@7.112.2': {} 2376 | 2377 | '@sentry/utils@7.112.2': 2378 | dependencies: 2379 | '@sentry/types': 7.112.2 2380 | 2381 | '@sinclair/typebox@0.27.8': {} 2382 | 2383 | '@supabase/auth-js@2.64.2': 2384 | dependencies: 2385 | '@supabase/node-fetch': 2.6.15 2386 | 2387 | '@supabase/functions-js@2.3.1': 2388 | dependencies: 2389 | '@supabase/node-fetch': 2.6.15 2390 | 2391 | '@supabase/node-fetch@2.6.15': 2392 | dependencies: 2393 | whatwg-url: 5.0.0 2394 | 2395 | '@supabase/postgrest-js@1.15.2': 2396 | dependencies: 2397 | '@supabase/node-fetch': 2.6.15 2398 | 2399 | '@supabase/realtime-js@2.9.5': 2400 | dependencies: 2401 | '@supabase/node-fetch': 2.6.15 2402 | '@types/phoenix': 1.6.4 2403 | '@types/ws': 8.5.10 2404 | ws: 8.16.0 2405 | transitivePeerDependencies: 2406 | - bufferutil 2407 | - utf-8-validate 2408 | 2409 | '@supabase/storage-js@2.5.5': 2410 | dependencies: 2411 | '@supabase/node-fetch': 2.6.15 2412 | 2413 | '@supabase/supabase-js@2.43.1': 2414 | dependencies: 2415 | '@supabase/auth-js': 2.64.2 2416 | '@supabase/functions-js': 2.3.1 2417 | '@supabase/node-fetch': 2.6.15 2418 | '@supabase/postgrest-js': 1.15.2 2419 | '@supabase/realtime-js': 2.9.5 2420 | '@supabase/storage-js': 2.5.5 2421 | transitivePeerDependencies: 2422 | - bufferutil 2423 | - utf-8-validate 2424 | 2425 | '@types/estree@1.0.5': {} 2426 | 2427 | '@types/node@20.12.11': 2428 | dependencies: 2429 | undici-types: 5.26.5 2430 | 2431 | '@types/phoenix@1.6.4': {} 2432 | 2433 | '@types/ws@8.5.10': 2434 | dependencies: 2435 | '@types/node': 20.12.11 2436 | 2437 | '@vitest/expect@1.6.0': 2438 | dependencies: 2439 | '@vitest/spy': 1.6.0 2440 | '@vitest/utils': 1.6.0 2441 | chai: 4.4.0 2442 | 2443 | '@vitest/runner@1.6.0': 2444 | dependencies: 2445 | '@vitest/utils': 1.6.0 2446 | p-limit: 5.0.0 2447 | pathe: 1.1.1 2448 | 2449 | '@vitest/snapshot@1.6.0': 2450 | dependencies: 2451 | magic-string: 0.30.5 2452 | pathe: 1.1.1 2453 | pretty-format: 29.7.0 2454 | 2455 | '@vitest/spy@1.6.0': 2456 | dependencies: 2457 | tinyspy: 2.2.0 2458 | 2459 | '@vitest/ui@1.6.0(vitest@1.6.0)': 2460 | dependencies: 2461 | '@vitest/utils': 1.6.0 2462 | fast-glob: 3.3.2 2463 | fflate: 0.8.1 2464 | flatted: 3.2.9 2465 | pathe: 1.1.1 2466 | picocolors: 1.0.0 2467 | sirv: 2.0.4 2468 | vitest: 1.6.0(@types/node@20.12.11)(@vitest/ui@1.6.0) 2469 | 2470 | '@vitest/utils@1.6.0': 2471 | dependencies: 2472 | diff-sequences: 29.6.3 2473 | estree-walker: 3.0.3 2474 | loupe: 2.3.7 2475 | pretty-format: 29.7.0 2476 | 2477 | acorn-walk@8.3.2: {} 2478 | 2479 | acorn@8.11.3: {} 2480 | 2481 | ansi-styles@3.2.1: 2482 | dependencies: 2483 | color-convert: 1.9.3 2484 | 2485 | ansi-styles@5.2.0: {} 2486 | 2487 | array-buffer-byte-length@1.0.0: 2488 | dependencies: 2489 | call-bind: 1.0.5 2490 | is-array-buffer: 3.0.2 2491 | 2492 | arraybuffer.prototype.slice@1.0.2: 2493 | dependencies: 2494 | array-buffer-byte-length: 1.0.0 2495 | call-bind: 1.0.5 2496 | define-properties: 1.2.1 2497 | es-abstract: 1.22.3 2498 | get-intrinsic: 1.2.2 2499 | is-array-buffer: 3.0.2 2500 | is-shared-array-buffer: 1.0.2 2501 | 2502 | assertion-error@1.1.0: {} 2503 | 2504 | available-typed-arrays@1.0.5: {} 2505 | 2506 | balanced-match@1.0.2: {} 2507 | 2508 | brace-expansion@1.1.11: 2509 | dependencies: 2510 | balanced-match: 1.0.2 2511 | concat-map: 0.0.1 2512 | 2513 | brace-expansion@2.0.1: 2514 | dependencies: 2515 | balanced-match: 1.0.2 2516 | 2517 | braces@3.0.2: 2518 | dependencies: 2519 | fill-range: 7.0.1 2520 | 2521 | buffer-from@1.1.2: {} 2522 | 2523 | cac@6.7.14: {} 2524 | 2525 | call-bind@1.0.5: 2526 | dependencies: 2527 | function-bind: 1.1.2 2528 | get-intrinsic: 1.2.2 2529 | set-function-length: 1.1.1 2530 | 2531 | chai@4.4.0: 2532 | dependencies: 2533 | assertion-error: 1.1.0 2534 | check-error: 1.0.3 2535 | deep-eql: 4.1.3 2536 | get-func-name: 2.0.2 2537 | loupe: 2.3.7 2538 | pathval: 1.1.1 2539 | type-detect: 4.0.8 2540 | 2541 | chalk@2.4.2: 2542 | dependencies: 2543 | ansi-styles: 3.2.1 2544 | escape-string-regexp: 1.0.5 2545 | supports-color: 5.5.0 2546 | 2547 | check-error@1.0.3: 2548 | dependencies: 2549 | get-func-name: 2.0.2 2550 | 2551 | cli-color@2.0.3: 2552 | dependencies: 2553 | d: 1.0.1 2554 | es5-ext: 0.10.62 2555 | es6-iterator: 2.0.3 2556 | memoizee: 0.4.15 2557 | timers-ext: 0.1.7 2558 | 2559 | color-convert@1.9.3: 2560 | dependencies: 2561 | color-name: 1.1.3 2562 | 2563 | color-name@1.1.3: {} 2564 | 2565 | commander@9.5.0: {} 2566 | 2567 | concat-map@0.0.1: {} 2568 | 2569 | cross-spawn@6.0.5: 2570 | dependencies: 2571 | nice-try: 1.0.5 2572 | path-key: 2.0.1 2573 | semver: 5.7.2 2574 | shebang-command: 1.2.0 2575 | which: 1.3.1 2576 | 2577 | cross-spawn@7.0.3: 2578 | dependencies: 2579 | path-key: 3.1.1 2580 | shebang-command: 2.0.0 2581 | which: 2.0.2 2582 | 2583 | d@1.0.1: 2584 | dependencies: 2585 | es5-ext: 0.10.62 2586 | type: 1.2.0 2587 | 2588 | debug@4.3.4: 2589 | dependencies: 2590 | ms: 2.1.2 2591 | 2592 | deep-eql@4.1.3: 2593 | dependencies: 2594 | type-detect: 4.0.8 2595 | 2596 | define-data-property@1.1.1: 2597 | dependencies: 2598 | get-intrinsic: 1.2.2 2599 | gopd: 1.0.1 2600 | has-property-descriptors: 1.0.1 2601 | 2602 | define-properties@1.2.1: 2603 | dependencies: 2604 | define-data-property: 1.1.1 2605 | has-property-descriptors: 1.0.1 2606 | object-keys: 1.1.1 2607 | 2608 | diff-sequences@29.6.3: {} 2609 | 2610 | difflib@0.2.4: 2611 | dependencies: 2612 | heap: 0.2.7 2613 | 2614 | dotenv@16.4.5: {} 2615 | 2616 | dreamopt@0.8.0: 2617 | dependencies: 2618 | wordwrap: 1.0.0 2619 | 2620 | drizzle-kit@0.21.1: 2621 | dependencies: 2622 | '@esbuild-kit/esm-loader': 2.6.5 2623 | commander: 9.5.0 2624 | env-paths: 3.0.0 2625 | esbuild: 0.19.11 2626 | esbuild-register: 3.5.0(esbuild@0.19.11) 2627 | glob: 8.1.0 2628 | hanji: 0.0.5 2629 | json-diff: 0.9.0 2630 | zod: 3.23.8 2631 | transitivePeerDependencies: 2632 | - supports-color 2633 | 2634 | drizzle-orm@0.30.10(pg@8.11.5)(postgres@3.4.4): 2635 | optionalDependencies: 2636 | pg: 8.11.5 2637 | postgres: 3.4.4 2638 | 2639 | env-paths@3.0.0: {} 2640 | 2641 | error-ex@1.3.2: 2642 | dependencies: 2643 | is-arrayish: 0.2.1 2644 | 2645 | es-abstract@1.22.3: 2646 | dependencies: 2647 | array-buffer-byte-length: 1.0.0 2648 | arraybuffer.prototype.slice: 1.0.2 2649 | available-typed-arrays: 1.0.5 2650 | call-bind: 1.0.5 2651 | es-set-tostringtag: 2.0.2 2652 | es-to-primitive: 1.2.1 2653 | function.prototype.name: 1.1.6 2654 | get-intrinsic: 1.2.2 2655 | get-symbol-description: 1.0.0 2656 | globalthis: 1.0.3 2657 | gopd: 1.0.1 2658 | has-property-descriptors: 1.0.1 2659 | has-proto: 1.0.1 2660 | has-symbols: 1.0.3 2661 | hasown: 2.0.0 2662 | internal-slot: 1.0.6 2663 | is-array-buffer: 3.0.2 2664 | is-callable: 1.2.7 2665 | is-negative-zero: 2.0.2 2666 | is-regex: 1.1.4 2667 | is-shared-array-buffer: 1.0.2 2668 | is-string: 1.0.7 2669 | is-typed-array: 1.1.12 2670 | is-weakref: 1.0.2 2671 | object-inspect: 1.13.1 2672 | object-keys: 1.1.1 2673 | object.assign: 4.1.5 2674 | regexp.prototype.flags: 1.5.1 2675 | safe-array-concat: 1.0.1 2676 | safe-regex-test: 1.0.0 2677 | string.prototype.trim: 1.2.8 2678 | string.prototype.trimend: 1.0.7 2679 | string.prototype.trimstart: 1.0.7 2680 | typed-array-buffer: 1.0.0 2681 | typed-array-byte-length: 1.0.0 2682 | typed-array-byte-offset: 1.0.0 2683 | typed-array-length: 1.0.4 2684 | unbox-primitive: 1.0.2 2685 | which-typed-array: 1.1.13 2686 | 2687 | es-set-tostringtag@2.0.2: 2688 | dependencies: 2689 | get-intrinsic: 1.2.2 2690 | has-tostringtag: 1.0.0 2691 | hasown: 2.0.0 2692 | 2693 | es-to-primitive@1.2.1: 2694 | dependencies: 2695 | is-callable: 1.2.7 2696 | is-date-object: 1.0.5 2697 | is-symbol: 1.0.4 2698 | 2699 | es5-ext@0.10.62: 2700 | dependencies: 2701 | es6-iterator: 2.0.3 2702 | es6-symbol: 3.1.3 2703 | next-tick: 1.1.0 2704 | 2705 | es6-iterator@2.0.3: 2706 | dependencies: 2707 | d: 1.0.1 2708 | es5-ext: 0.10.62 2709 | es6-symbol: 3.1.3 2710 | 2711 | es6-symbol@3.1.3: 2712 | dependencies: 2713 | d: 1.0.1 2714 | ext: 1.7.0 2715 | 2716 | es6-weak-map@2.0.3: 2717 | dependencies: 2718 | d: 1.0.1 2719 | es5-ext: 0.10.62 2720 | es6-iterator: 2.0.3 2721 | es6-symbol: 3.1.3 2722 | 2723 | esbuild-register@3.5.0(esbuild@0.19.11): 2724 | dependencies: 2725 | debug: 4.3.4 2726 | esbuild: 0.19.11 2727 | transitivePeerDependencies: 2728 | - supports-color 2729 | 2730 | esbuild@0.18.20: 2731 | optionalDependencies: 2732 | '@esbuild/android-arm': 0.18.20 2733 | '@esbuild/android-arm64': 0.18.20 2734 | '@esbuild/android-x64': 0.18.20 2735 | '@esbuild/darwin-arm64': 0.18.20 2736 | '@esbuild/darwin-x64': 0.18.20 2737 | '@esbuild/freebsd-arm64': 0.18.20 2738 | '@esbuild/freebsd-x64': 0.18.20 2739 | '@esbuild/linux-arm': 0.18.20 2740 | '@esbuild/linux-arm64': 0.18.20 2741 | '@esbuild/linux-ia32': 0.18.20 2742 | '@esbuild/linux-loong64': 0.18.20 2743 | '@esbuild/linux-mips64el': 0.18.20 2744 | '@esbuild/linux-ppc64': 0.18.20 2745 | '@esbuild/linux-riscv64': 0.18.20 2746 | '@esbuild/linux-s390x': 0.18.20 2747 | '@esbuild/linux-x64': 0.18.20 2748 | '@esbuild/netbsd-x64': 0.18.20 2749 | '@esbuild/openbsd-x64': 0.18.20 2750 | '@esbuild/sunos-x64': 0.18.20 2751 | '@esbuild/win32-arm64': 0.18.20 2752 | '@esbuild/win32-ia32': 0.18.20 2753 | '@esbuild/win32-x64': 0.18.20 2754 | 2755 | esbuild@0.19.11: 2756 | optionalDependencies: 2757 | '@esbuild/aix-ppc64': 0.19.11 2758 | '@esbuild/android-arm': 0.19.11 2759 | '@esbuild/android-arm64': 0.19.11 2760 | '@esbuild/android-x64': 0.19.11 2761 | '@esbuild/darwin-arm64': 0.19.11 2762 | '@esbuild/darwin-x64': 0.19.11 2763 | '@esbuild/freebsd-arm64': 0.19.11 2764 | '@esbuild/freebsd-x64': 0.19.11 2765 | '@esbuild/linux-arm': 0.19.11 2766 | '@esbuild/linux-arm64': 0.19.11 2767 | '@esbuild/linux-ia32': 0.19.11 2768 | '@esbuild/linux-loong64': 0.19.11 2769 | '@esbuild/linux-mips64el': 0.19.11 2770 | '@esbuild/linux-ppc64': 0.19.11 2771 | '@esbuild/linux-riscv64': 0.19.11 2772 | '@esbuild/linux-s390x': 0.19.11 2773 | '@esbuild/linux-x64': 0.19.11 2774 | '@esbuild/netbsd-x64': 0.19.11 2775 | '@esbuild/openbsd-x64': 0.19.11 2776 | '@esbuild/sunos-x64': 0.19.11 2777 | '@esbuild/win32-arm64': 0.19.11 2778 | '@esbuild/win32-ia32': 0.19.11 2779 | '@esbuild/win32-x64': 0.19.11 2780 | 2781 | esbuild@0.20.2: 2782 | optionalDependencies: 2783 | '@esbuild/aix-ppc64': 0.20.2 2784 | '@esbuild/android-arm': 0.20.2 2785 | '@esbuild/android-arm64': 0.20.2 2786 | '@esbuild/android-x64': 0.20.2 2787 | '@esbuild/darwin-arm64': 0.20.2 2788 | '@esbuild/darwin-x64': 0.20.2 2789 | '@esbuild/freebsd-arm64': 0.20.2 2790 | '@esbuild/freebsd-x64': 0.20.2 2791 | '@esbuild/linux-arm': 0.20.2 2792 | '@esbuild/linux-arm64': 0.20.2 2793 | '@esbuild/linux-ia32': 0.20.2 2794 | '@esbuild/linux-loong64': 0.20.2 2795 | '@esbuild/linux-mips64el': 0.20.2 2796 | '@esbuild/linux-ppc64': 0.20.2 2797 | '@esbuild/linux-riscv64': 0.20.2 2798 | '@esbuild/linux-s390x': 0.20.2 2799 | '@esbuild/linux-x64': 0.20.2 2800 | '@esbuild/netbsd-x64': 0.20.2 2801 | '@esbuild/openbsd-x64': 0.20.2 2802 | '@esbuild/sunos-x64': 0.20.2 2803 | '@esbuild/win32-arm64': 0.20.2 2804 | '@esbuild/win32-ia32': 0.20.2 2805 | '@esbuild/win32-x64': 0.20.2 2806 | 2807 | esbuild@0.21.2: 2808 | optionalDependencies: 2809 | '@esbuild/aix-ppc64': 0.21.2 2810 | '@esbuild/android-arm': 0.21.2 2811 | '@esbuild/android-arm64': 0.21.2 2812 | '@esbuild/android-x64': 0.21.2 2813 | '@esbuild/darwin-arm64': 0.21.2 2814 | '@esbuild/darwin-x64': 0.21.2 2815 | '@esbuild/freebsd-arm64': 0.21.2 2816 | '@esbuild/freebsd-x64': 0.21.2 2817 | '@esbuild/linux-arm': 0.21.2 2818 | '@esbuild/linux-arm64': 0.21.2 2819 | '@esbuild/linux-ia32': 0.21.2 2820 | '@esbuild/linux-loong64': 0.21.2 2821 | '@esbuild/linux-mips64el': 0.21.2 2822 | '@esbuild/linux-ppc64': 0.21.2 2823 | '@esbuild/linux-riscv64': 0.21.2 2824 | '@esbuild/linux-s390x': 0.21.2 2825 | '@esbuild/linux-x64': 0.21.2 2826 | '@esbuild/netbsd-x64': 0.21.2 2827 | '@esbuild/openbsd-x64': 0.21.2 2828 | '@esbuild/sunos-x64': 0.21.2 2829 | '@esbuild/win32-arm64': 0.21.2 2830 | '@esbuild/win32-ia32': 0.21.2 2831 | '@esbuild/win32-x64': 0.21.2 2832 | 2833 | escape-string-regexp@1.0.5: {} 2834 | 2835 | estree-walker@3.0.3: 2836 | dependencies: 2837 | '@types/estree': 1.0.5 2838 | 2839 | event-emitter@0.3.5: 2840 | dependencies: 2841 | d: 1.0.1 2842 | es5-ext: 0.10.62 2843 | 2844 | execa@8.0.1: 2845 | dependencies: 2846 | cross-spawn: 7.0.3 2847 | get-stream: 8.0.1 2848 | human-signals: 5.0.0 2849 | is-stream: 3.0.0 2850 | merge-stream: 2.0.0 2851 | npm-run-path: 5.2.0 2852 | onetime: 6.0.0 2853 | signal-exit: 4.1.0 2854 | strip-final-newline: 3.0.0 2855 | 2856 | ext@1.7.0: 2857 | dependencies: 2858 | type: 2.7.2 2859 | 2860 | fast-glob@3.3.2: 2861 | dependencies: 2862 | '@nodelib/fs.stat': 2.0.5 2863 | '@nodelib/fs.walk': 1.2.8 2864 | glob-parent: 5.1.2 2865 | merge2: 1.4.1 2866 | micromatch: 4.0.5 2867 | 2868 | fastq@1.16.0: 2869 | dependencies: 2870 | reusify: 1.0.4 2871 | 2872 | fflate@0.8.1: {} 2873 | 2874 | fill-range@7.0.1: 2875 | dependencies: 2876 | to-regex-range: 5.0.1 2877 | 2878 | flatted@3.2.9: {} 2879 | 2880 | for-each@0.3.3: 2881 | dependencies: 2882 | is-callable: 1.2.7 2883 | 2884 | fs.realpath@1.0.0: {} 2885 | 2886 | fsevents@2.3.3: 2887 | optional: true 2888 | 2889 | function-bind@1.1.2: {} 2890 | 2891 | function.prototype.name@1.1.6: 2892 | dependencies: 2893 | call-bind: 1.0.5 2894 | define-properties: 1.2.1 2895 | es-abstract: 1.22.3 2896 | functions-have-names: 1.2.3 2897 | 2898 | functions-have-names@1.2.3: {} 2899 | 2900 | get-func-name@2.0.2: {} 2901 | 2902 | get-intrinsic@1.2.2: 2903 | dependencies: 2904 | function-bind: 1.1.2 2905 | has-proto: 1.0.1 2906 | has-symbols: 1.0.3 2907 | hasown: 2.0.0 2908 | 2909 | get-stream@8.0.1: {} 2910 | 2911 | get-symbol-description@1.0.0: 2912 | dependencies: 2913 | call-bind: 1.0.5 2914 | get-intrinsic: 1.2.2 2915 | 2916 | get-tsconfig@4.7.2: 2917 | dependencies: 2918 | resolve-pkg-maps: 1.0.0 2919 | 2920 | get-tsconfig@4.7.5: 2921 | dependencies: 2922 | resolve-pkg-maps: 1.0.0 2923 | 2924 | glob-parent@5.1.2: 2925 | dependencies: 2926 | is-glob: 4.0.3 2927 | 2928 | glob@8.1.0: 2929 | dependencies: 2930 | fs.realpath: 1.0.0 2931 | inflight: 1.0.6 2932 | inherits: 2.0.4 2933 | minimatch: 5.1.6 2934 | once: 1.4.0 2935 | 2936 | globalthis@1.0.3: 2937 | dependencies: 2938 | define-properties: 1.2.1 2939 | 2940 | globrex@0.1.2: {} 2941 | 2942 | gopd@1.0.1: 2943 | dependencies: 2944 | get-intrinsic: 1.2.2 2945 | 2946 | graceful-fs@4.2.11: {} 2947 | 2948 | hanji@0.0.5: 2949 | dependencies: 2950 | lodash.throttle: 4.1.1 2951 | sisteransi: 1.0.5 2952 | 2953 | has-bigints@1.0.2: {} 2954 | 2955 | has-flag@3.0.0: {} 2956 | 2957 | has-property-descriptors@1.0.1: 2958 | dependencies: 2959 | get-intrinsic: 1.2.2 2960 | 2961 | has-proto@1.0.1: {} 2962 | 2963 | has-symbols@1.0.3: {} 2964 | 2965 | has-tostringtag@1.0.0: 2966 | dependencies: 2967 | has-symbols: 1.0.3 2968 | 2969 | hasown@2.0.0: 2970 | dependencies: 2971 | function-bind: 1.1.2 2972 | 2973 | heap@0.2.7: {} 2974 | 2975 | hono@4.3.6: {} 2976 | 2977 | hosted-git-info@2.8.9: {} 2978 | 2979 | human-signals@5.0.0: {} 2980 | 2981 | immediate@3.0.6: {} 2982 | 2983 | inflight@1.0.6: 2984 | dependencies: 2985 | once: 1.4.0 2986 | wrappy: 1.0.2 2987 | 2988 | inherits@2.0.4: {} 2989 | 2990 | internal-slot@1.0.6: 2991 | dependencies: 2992 | get-intrinsic: 1.2.2 2993 | hasown: 2.0.0 2994 | side-channel: 1.0.4 2995 | 2996 | is-array-buffer@3.0.2: 2997 | dependencies: 2998 | call-bind: 1.0.5 2999 | get-intrinsic: 1.2.2 3000 | is-typed-array: 1.1.12 3001 | 3002 | is-arrayish@0.2.1: {} 3003 | 3004 | is-bigint@1.0.4: 3005 | dependencies: 3006 | has-bigints: 1.0.2 3007 | 3008 | is-boolean-object@1.1.2: 3009 | dependencies: 3010 | call-bind: 1.0.5 3011 | has-tostringtag: 1.0.0 3012 | 3013 | is-callable@1.2.7: {} 3014 | 3015 | is-core-module@2.13.1: 3016 | dependencies: 3017 | hasown: 2.0.0 3018 | 3019 | is-date-object@1.0.5: 3020 | dependencies: 3021 | has-tostringtag: 1.0.0 3022 | 3023 | is-extglob@2.1.1: {} 3024 | 3025 | is-glob@4.0.3: 3026 | dependencies: 3027 | is-extglob: 2.1.1 3028 | 3029 | is-negative-zero@2.0.2: {} 3030 | 3031 | is-number-object@1.0.7: 3032 | dependencies: 3033 | has-tostringtag: 1.0.0 3034 | 3035 | is-number@7.0.0: {} 3036 | 3037 | is-promise@2.2.2: {} 3038 | 3039 | is-regex@1.1.4: 3040 | dependencies: 3041 | call-bind: 1.0.5 3042 | has-tostringtag: 1.0.0 3043 | 3044 | is-shared-array-buffer@1.0.2: 3045 | dependencies: 3046 | call-bind: 1.0.5 3047 | 3048 | is-stream@3.0.0: {} 3049 | 3050 | is-string@1.0.7: 3051 | dependencies: 3052 | has-tostringtag: 1.0.0 3053 | 3054 | is-symbol@1.0.4: 3055 | dependencies: 3056 | has-symbols: 1.0.3 3057 | 3058 | is-typed-array@1.1.12: 3059 | dependencies: 3060 | which-typed-array: 1.1.13 3061 | 3062 | is-weakref@1.0.2: 3063 | dependencies: 3064 | call-bind: 1.0.5 3065 | 3066 | isarray@2.0.5: {} 3067 | 3068 | isexe@2.0.0: {} 3069 | 3070 | js-tokens@9.0.0: {} 3071 | 3072 | json-diff@0.9.0: 3073 | dependencies: 3074 | cli-color: 2.0.3 3075 | difflib: 0.2.4 3076 | dreamopt: 0.8.0 3077 | 3078 | json-parse-better-errors@1.0.2: {} 3079 | 3080 | jsonc-parser@3.2.0: {} 3081 | 3082 | lie@3.1.1: 3083 | dependencies: 3084 | immediate: 3.0.6 3085 | 3086 | load-json-file@4.0.0: 3087 | dependencies: 3088 | graceful-fs: 4.2.11 3089 | parse-json: 4.0.0 3090 | pify: 3.0.0 3091 | strip-bom: 3.0.0 3092 | 3093 | local-pkg@0.5.0: 3094 | dependencies: 3095 | mlly: 1.4.2 3096 | pkg-types: 1.0.3 3097 | 3098 | localforage@1.10.0: 3099 | dependencies: 3100 | lie: 3.1.1 3101 | 3102 | lodash.throttle@4.1.1: {} 3103 | 3104 | loupe@2.3.7: 3105 | dependencies: 3106 | get-func-name: 2.0.2 3107 | 3108 | lru-queue@0.1.0: 3109 | dependencies: 3110 | es5-ext: 0.10.62 3111 | 3112 | magic-string@0.30.5: 3113 | dependencies: 3114 | '@jridgewell/sourcemap-codec': 1.4.15 3115 | 3116 | memoizee@0.4.15: 3117 | dependencies: 3118 | d: 1.0.1 3119 | es5-ext: 0.10.62 3120 | es6-weak-map: 2.0.3 3121 | event-emitter: 0.3.5 3122 | is-promise: 2.2.2 3123 | lru-queue: 0.1.0 3124 | next-tick: 1.1.0 3125 | timers-ext: 0.1.7 3126 | 3127 | memorystream@0.3.1: {} 3128 | 3129 | merge-stream@2.0.0: {} 3130 | 3131 | merge2@1.4.1: {} 3132 | 3133 | micromatch@4.0.5: 3134 | dependencies: 3135 | braces: 3.0.2 3136 | picomatch: 2.3.1 3137 | 3138 | mimic-fn@4.0.0: {} 3139 | 3140 | minimatch@3.1.2: 3141 | dependencies: 3142 | brace-expansion: 1.1.11 3143 | 3144 | minimatch@5.1.6: 3145 | dependencies: 3146 | brace-expansion: 2.0.1 3147 | 3148 | mlly@1.4.2: 3149 | dependencies: 3150 | acorn: 8.11.3 3151 | pathe: 1.1.1 3152 | pkg-types: 1.0.3 3153 | ufo: 1.3.2 3154 | 3155 | mrmime@2.0.0: {} 3156 | 3157 | ms@2.1.2: {} 3158 | 3159 | nanoid@3.3.7: {} 3160 | 3161 | next-tick@1.1.0: {} 3162 | 3163 | nice-try@1.0.5: {} 3164 | 3165 | normalize-package-data@2.5.0: 3166 | dependencies: 3167 | hosted-git-info: 2.8.9 3168 | resolve: 1.22.8 3169 | semver: 5.7.2 3170 | validate-npm-package-license: 3.0.4 3171 | 3172 | npm-run-all@4.1.5: 3173 | dependencies: 3174 | ansi-styles: 3.2.1 3175 | chalk: 2.4.2 3176 | cross-spawn: 6.0.5 3177 | memorystream: 0.3.1 3178 | minimatch: 3.1.2 3179 | pidtree: 0.3.1 3180 | read-pkg: 3.0.0 3181 | shell-quote: 1.8.1 3182 | string.prototype.padend: 3.1.5 3183 | 3184 | npm-run-path@5.2.0: 3185 | dependencies: 3186 | path-key: 4.0.0 3187 | 3188 | object-inspect@1.13.1: {} 3189 | 3190 | object-keys@1.1.1: {} 3191 | 3192 | object.assign@4.1.5: 3193 | dependencies: 3194 | call-bind: 1.0.5 3195 | define-properties: 1.2.1 3196 | has-symbols: 1.0.3 3197 | object-keys: 1.1.1 3198 | 3199 | once@1.4.0: 3200 | dependencies: 3201 | wrappy: 1.0.2 3202 | 3203 | onetime@6.0.0: 3204 | dependencies: 3205 | mimic-fn: 4.0.0 3206 | 3207 | p-limit@5.0.0: 3208 | dependencies: 3209 | yocto-queue: 1.0.0 3210 | 3211 | parse-json@4.0.0: 3212 | dependencies: 3213 | error-ex: 1.3.2 3214 | json-parse-better-errors: 1.0.2 3215 | 3216 | path-key@2.0.1: {} 3217 | 3218 | path-key@3.1.1: {} 3219 | 3220 | path-key@4.0.0: {} 3221 | 3222 | path-parse@1.0.7: {} 3223 | 3224 | path-type@3.0.0: 3225 | dependencies: 3226 | pify: 3.0.0 3227 | 3228 | pathe@1.1.1: {} 3229 | 3230 | pathval@1.1.1: {} 3231 | 3232 | pg-cloudflare@1.1.1: 3233 | optional: true 3234 | 3235 | pg-connection-string@2.6.4: {} 3236 | 3237 | pg-int8@1.0.1: {} 3238 | 3239 | pg-pool@3.6.2(pg@8.11.5): 3240 | dependencies: 3241 | pg: 8.11.5 3242 | 3243 | pg-protocol@1.6.1: {} 3244 | 3245 | pg-types@2.2.0: 3246 | dependencies: 3247 | pg-int8: 1.0.1 3248 | postgres-array: 2.0.0 3249 | postgres-bytea: 1.0.0 3250 | postgres-date: 1.0.7 3251 | postgres-interval: 1.2.0 3252 | 3253 | pg@8.11.5: 3254 | dependencies: 3255 | pg-connection-string: 2.6.4 3256 | pg-pool: 3.6.2(pg@8.11.5) 3257 | pg-protocol: 1.6.1 3258 | pg-types: 2.2.0 3259 | pgpass: 1.0.5 3260 | optionalDependencies: 3261 | pg-cloudflare: 1.1.1 3262 | 3263 | pgpass@1.0.5: 3264 | dependencies: 3265 | split2: 4.2.0 3266 | 3267 | picocolors@1.0.0: {} 3268 | 3269 | picomatch@2.3.1: {} 3270 | 3271 | pidtree@0.3.1: {} 3272 | 3273 | pify@3.0.0: {} 3274 | 3275 | pkg-types@1.0.3: 3276 | dependencies: 3277 | jsonc-parser: 3.2.0 3278 | mlly: 1.4.2 3279 | pathe: 1.1.1 3280 | 3281 | postcss@8.4.33: 3282 | dependencies: 3283 | nanoid: 3.3.7 3284 | picocolors: 1.0.0 3285 | source-map-js: 1.0.2 3286 | 3287 | postgres-array@2.0.0: {} 3288 | 3289 | postgres-bytea@1.0.0: {} 3290 | 3291 | postgres-date@1.0.7: {} 3292 | 3293 | postgres-interval@1.2.0: 3294 | dependencies: 3295 | xtend: 4.0.2 3296 | 3297 | postgres@3.4.4: {} 3298 | 3299 | pretty-format@29.7.0: 3300 | dependencies: 3301 | '@jest/schemas': 29.6.3 3302 | ansi-styles: 5.2.0 3303 | react-is: 18.2.0 3304 | 3305 | queue-microtask@1.2.3: {} 3306 | 3307 | react-is@18.2.0: {} 3308 | 3309 | read-pkg@3.0.0: 3310 | dependencies: 3311 | load-json-file: 4.0.0 3312 | normalize-package-data: 2.5.0 3313 | path-type: 3.0.0 3314 | 3315 | regexp.prototype.flags@1.5.1: 3316 | dependencies: 3317 | call-bind: 1.0.5 3318 | define-properties: 1.2.1 3319 | set-function-name: 2.0.1 3320 | 3321 | resolve-pkg-maps@1.0.0: {} 3322 | 3323 | resolve@1.22.8: 3324 | dependencies: 3325 | is-core-module: 2.13.1 3326 | path-parse: 1.0.7 3327 | supports-preserve-symlinks-flag: 1.0.0 3328 | 3329 | reusify@1.0.4: {} 3330 | 3331 | rollup@4.9.4: 3332 | dependencies: 3333 | '@types/estree': 1.0.5 3334 | optionalDependencies: 3335 | '@rollup/rollup-android-arm-eabi': 4.9.4 3336 | '@rollup/rollup-android-arm64': 4.9.4 3337 | '@rollup/rollup-darwin-arm64': 4.9.4 3338 | '@rollup/rollup-darwin-x64': 4.9.4 3339 | '@rollup/rollup-linux-arm-gnueabihf': 4.9.4 3340 | '@rollup/rollup-linux-arm64-gnu': 4.9.4 3341 | '@rollup/rollup-linux-arm64-musl': 4.9.4 3342 | '@rollup/rollup-linux-riscv64-gnu': 4.9.4 3343 | '@rollup/rollup-linux-x64-gnu': 4.9.4 3344 | '@rollup/rollup-linux-x64-musl': 4.9.4 3345 | '@rollup/rollup-win32-arm64-msvc': 4.9.4 3346 | '@rollup/rollup-win32-ia32-msvc': 4.9.4 3347 | '@rollup/rollup-win32-x64-msvc': 4.9.4 3348 | fsevents: 2.3.3 3349 | 3350 | run-parallel@1.2.0: 3351 | dependencies: 3352 | queue-microtask: 1.2.3 3353 | 3354 | safe-array-concat@1.0.1: 3355 | dependencies: 3356 | call-bind: 1.0.5 3357 | get-intrinsic: 1.2.2 3358 | has-symbols: 1.0.3 3359 | isarray: 2.0.5 3360 | 3361 | safe-regex-test@1.0.0: 3362 | dependencies: 3363 | call-bind: 1.0.5 3364 | get-intrinsic: 1.2.2 3365 | is-regex: 1.1.4 3366 | 3367 | semver@5.7.2: {} 3368 | 3369 | set-function-length@1.1.1: 3370 | dependencies: 3371 | define-data-property: 1.1.1 3372 | get-intrinsic: 1.2.2 3373 | gopd: 1.0.1 3374 | has-property-descriptors: 1.0.1 3375 | 3376 | set-function-name@2.0.1: 3377 | dependencies: 3378 | define-data-property: 1.1.1 3379 | functions-have-names: 1.2.3 3380 | has-property-descriptors: 1.0.1 3381 | 3382 | shebang-command@1.2.0: 3383 | dependencies: 3384 | shebang-regex: 1.0.0 3385 | 3386 | shebang-command@2.0.0: 3387 | dependencies: 3388 | shebang-regex: 3.0.0 3389 | 3390 | shebang-regex@1.0.0: {} 3391 | 3392 | shebang-regex@3.0.0: {} 3393 | 3394 | shell-quote@1.8.1: {} 3395 | 3396 | side-channel@1.0.4: 3397 | dependencies: 3398 | call-bind: 1.0.5 3399 | get-intrinsic: 1.2.2 3400 | object-inspect: 1.13.1 3401 | 3402 | siginfo@2.0.0: {} 3403 | 3404 | signal-exit@4.1.0: {} 3405 | 3406 | sirv@2.0.4: 3407 | dependencies: 3408 | '@polka/url': 1.0.0-next.24 3409 | mrmime: 2.0.0 3410 | totalist: 3.0.1 3411 | 3412 | sisteransi@1.0.5: {} 3413 | 3414 | source-map-js@1.0.2: {} 3415 | 3416 | source-map-support@0.5.21: 3417 | dependencies: 3418 | buffer-from: 1.1.2 3419 | source-map: 0.6.1 3420 | 3421 | source-map@0.6.1: {} 3422 | 3423 | spdx-correct@3.2.0: 3424 | dependencies: 3425 | spdx-expression-parse: 3.0.1 3426 | spdx-license-ids: 3.0.16 3427 | 3428 | spdx-exceptions@2.3.0: {} 3429 | 3430 | spdx-expression-parse@3.0.1: 3431 | dependencies: 3432 | spdx-exceptions: 2.3.0 3433 | spdx-license-ids: 3.0.16 3434 | 3435 | spdx-license-ids@3.0.16: {} 3436 | 3437 | split2@4.2.0: {} 3438 | 3439 | stackback@0.0.2: {} 3440 | 3441 | std-env@3.7.0: {} 3442 | 3443 | string.prototype.padend@3.1.5: 3444 | dependencies: 3445 | call-bind: 1.0.5 3446 | define-properties: 1.2.1 3447 | es-abstract: 1.22.3 3448 | 3449 | string.prototype.trim@1.2.8: 3450 | dependencies: 3451 | call-bind: 1.0.5 3452 | define-properties: 1.2.1 3453 | es-abstract: 1.22.3 3454 | 3455 | string.prototype.trimend@1.0.7: 3456 | dependencies: 3457 | call-bind: 1.0.5 3458 | define-properties: 1.2.1 3459 | es-abstract: 1.22.3 3460 | 3461 | string.prototype.trimstart@1.0.7: 3462 | dependencies: 3463 | call-bind: 1.0.5 3464 | define-properties: 1.2.1 3465 | es-abstract: 1.22.3 3466 | 3467 | strip-bom@3.0.0: {} 3468 | 3469 | strip-final-newline@3.0.0: {} 3470 | 3471 | strip-literal@2.1.0: 3472 | dependencies: 3473 | js-tokens: 9.0.0 3474 | 3475 | supports-color@5.5.0: 3476 | dependencies: 3477 | has-flag: 3.0.0 3478 | 3479 | supports-preserve-symlinks-flag@1.0.0: {} 3480 | 3481 | timers-ext@0.1.7: 3482 | dependencies: 3483 | es5-ext: 0.10.62 3484 | next-tick: 1.1.0 3485 | 3486 | tinybench@2.5.1: {} 3487 | 3488 | tinypool@0.8.4: {} 3489 | 3490 | tinyspy@2.2.0: {} 3491 | 3492 | to-regex-range@5.0.1: 3493 | dependencies: 3494 | is-number: 7.0.0 3495 | 3496 | totalist@3.0.1: {} 3497 | 3498 | toucan-js@3.4.0: 3499 | dependencies: 3500 | '@sentry/core': 7.112.2 3501 | '@sentry/integrations': 7.112.2 3502 | '@sentry/types': 7.112.2 3503 | '@sentry/utils': 7.112.2 3504 | 3505 | tr46@0.0.3: {} 3506 | 3507 | tsconfck@3.0.3(typescript@5.4.5): 3508 | optionalDependencies: 3509 | typescript: 5.4.5 3510 | 3511 | tsx@4.10.2: 3512 | dependencies: 3513 | esbuild: 0.20.2 3514 | get-tsconfig: 4.7.5 3515 | optionalDependencies: 3516 | fsevents: 2.3.3 3517 | 3518 | type-detect@4.0.8: {} 3519 | 3520 | type@1.2.0: {} 3521 | 3522 | type@2.7.2: {} 3523 | 3524 | typed-array-buffer@1.0.0: 3525 | dependencies: 3526 | call-bind: 1.0.5 3527 | get-intrinsic: 1.2.2 3528 | is-typed-array: 1.1.12 3529 | 3530 | typed-array-byte-length@1.0.0: 3531 | dependencies: 3532 | call-bind: 1.0.5 3533 | for-each: 0.3.3 3534 | has-proto: 1.0.1 3535 | is-typed-array: 1.1.12 3536 | 3537 | typed-array-byte-offset@1.0.0: 3538 | dependencies: 3539 | available-typed-arrays: 1.0.5 3540 | call-bind: 1.0.5 3541 | for-each: 0.3.3 3542 | has-proto: 1.0.1 3543 | is-typed-array: 1.1.12 3544 | 3545 | typed-array-length@1.0.4: 3546 | dependencies: 3547 | call-bind: 1.0.5 3548 | for-each: 0.3.3 3549 | is-typed-array: 1.1.12 3550 | 3551 | typescript@5.4.5: {} 3552 | 3553 | ufo@1.3.2: {} 3554 | 3555 | unbox-primitive@1.0.2: 3556 | dependencies: 3557 | call-bind: 1.0.5 3558 | has-bigints: 1.0.2 3559 | has-symbols: 1.0.3 3560 | which-boxed-primitive: 1.0.2 3561 | 3562 | undici-types@5.26.5: {} 3563 | 3564 | validate-npm-package-license@3.0.4: 3565 | dependencies: 3566 | spdx-correct: 3.2.0 3567 | spdx-expression-parse: 3.0.1 3568 | 3569 | vite-node@1.6.0(@types/node@20.12.11): 3570 | dependencies: 3571 | cac: 6.7.14 3572 | debug: 4.3.4 3573 | pathe: 1.1.1 3574 | picocolors: 1.0.0 3575 | vite: 5.0.11(@types/node@20.12.11) 3576 | transitivePeerDependencies: 3577 | - '@types/node' 3578 | - less 3579 | - lightningcss 3580 | - sass 3581 | - stylus 3582 | - sugarss 3583 | - supports-color 3584 | - terser 3585 | 3586 | vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.0.11(@types/node@20.12.11)): 3587 | dependencies: 3588 | debug: 4.3.4 3589 | globrex: 0.1.2 3590 | tsconfck: 3.0.3(typescript@5.4.5) 3591 | optionalDependencies: 3592 | vite: 5.0.11(@types/node@20.12.11) 3593 | transitivePeerDependencies: 3594 | - supports-color 3595 | - typescript 3596 | 3597 | vite@5.0.11(@types/node@20.12.11): 3598 | dependencies: 3599 | esbuild: 0.19.11 3600 | postcss: 8.4.33 3601 | rollup: 4.9.4 3602 | optionalDependencies: 3603 | '@types/node': 20.12.11 3604 | fsevents: 2.3.3 3605 | 3606 | vitest@1.6.0(@types/node@20.12.11)(@vitest/ui@1.6.0): 3607 | dependencies: 3608 | '@vitest/expect': 1.6.0 3609 | '@vitest/runner': 1.6.0 3610 | '@vitest/snapshot': 1.6.0 3611 | '@vitest/spy': 1.6.0 3612 | '@vitest/utils': 1.6.0 3613 | acorn-walk: 8.3.2 3614 | chai: 4.4.0 3615 | debug: 4.3.4 3616 | execa: 8.0.1 3617 | local-pkg: 0.5.0 3618 | magic-string: 0.30.5 3619 | pathe: 1.1.1 3620 | picocolors: 1.0.0 3621 | std-env: 3.7.0 3622 | strip-literal: 2.1.0 3623 | tinybench: 2.5.1 3624 | tinypool: 0.8.4 3625 | vite: 5.0.11(@types/node@20.12.11) 3626 | vite-node: 1.6.0(@types/node@20.12.11) 3627 | why-is-node-running: 2.2.2 3628 | optionalDependencies: 3629 | '@types/node': 20.12.11 3630 | '@vitest/ui': 1.6.0(vitest@1.6.0) 3631 | transitivePeerDependencies: 3632 | - less 3633 | - lightningcss 3634 | - sass 3635 | - stylus 3636 | - sugarss 3637 | - supports-color 3638 | - terser 3639 | 3640 | webidl-conversions@3.0.1: {} 3641 | 3642 | whatwg-url@5.0.0: 3643 | dependencies: 3644 | tr46: 0.0.3 3645 | webidl-conversions: 3.0.1 3646 | 3647 | which-boxed-primitive@1.0.2: 3648 | dependencies: 3649 | is-bigint: 1.0.4 3650 | is-boolean-object: 1.1.2 3651 | is-number-object: 1.0.7 3652 | is-string: 1.0.7 3653 | is-symbol: 1.0.4 3654 | 3655 | which-typed-array@1.1.13: 3656 | dependencies: 3657 | available-typed-arrays: 1.0.5 3658 | call-bind: 1.0.5 3659 | for-each: 0.3.3 3660 | gopd: 1.0.1 3661 | has-tostringtag: 1.0.0 3662 | 3663 | which@1.3.1: 3664 | dependencies: 3665 | isexe: 2.0.0 3666 | 3667 | which@2.0.2: 3668 | dependencies: 3669 | isexe: 2.0.0 3670 | 3671 | why-is-node-running@2.2.2: 3672 | dependencies: 3673 | siginfo: 2.0.0 3674 | stackback: 0.0.2 3675 | 3676 | wordwrap@1.0.0: {} 3677 | 3678 | wrappy@1.0.2: {} 3679 | 3680 | ws@8.16.0: {} 3681 | 3682 | xtend@4.0.2: {} 3683 | 3684 | yocto-queue@1.0.0: {} 3685 | 3686 | zod-validation-error@3.3.0(zod@3.23.8): 3687 | dependencies: 3688 | zod: 3.23.8 3689 | 3690 | zod@3.23.8: {} 3691 | -------------------------------------------------------------------------------- /src/app.spec.ts: -------------------------------------------------------------------------------- 1 | import { testClient } from "hono/testing"; 2 | import { expect, test } from "vitest"; 3 | import app from "./app"; 4 | 5 | export function sum(a: number, b: number) { 6 | return a + b; 7 | } 8 | 9 | test("adds 1 + 2 to equal 3", () => { 10 | expect(sum(1, 2)).toBe(3); 11 | }); 12 | 13 | it("test", async () => { 14 | const res = await testClient(app).api.iam.test.$get(); 15 | const spectedUser = { 16 | id: "1", 17 | email: "test@gmail.com", 18 | }; 19 | expect(await res.json()).toEqual(spectedUser); 20 | }); 21 | -------------------------------------------------------------------------------- /src/app.ts: -------------------------------------------------------------------------------- 1 | import { sentry } from "@hono/sentry"; 2 | import { Hono } from "hono"; 3 | import { cors } from "hono/cors"; 4 | import { csrf } from "hono/csrf"; 5 | import { logger } from "hono/logger"; 6 | import { prettyJSON } from "hono/pretty-json"; 7 | import { secureHeaders } from "hono/secure-headers"; 8 | import { timing } from "hono/timing"; 9 | import { env } from "./config/env"; 10 | import errorHandler from "./middlewares/error.middleware"; 11 | import swaggerApp from "./middlewares/swagger.middleware"; 12 | import authRoutes from "./routes/auth.routes"; 13 | import iamRoutes from "./routes/iam.routes"; 14 | 15 | const app = new Hono() 16 | .basePath("/api") 17 | // Middlewares 18 | .use("*", logger()) 19 | .use("*", cors()) 20 | .use("*", csrf()) 21 | .use("*", prettyJSON()) 22 | .use("*", secureHeaders()) 23 | .use("*", timing()) 24 | .use("*", sentry({ dsn: env.SENTRY_DSN, tracesSampleRate: 0.2 })) 25 | // Routes 26 | .route("/ui", swaggerApp) 27 | .route("/auth", authRoutes) 28 | .route("/iam", iamRoutes) 29 | .onError(errorHandler); 30 | 31 | // Export the app TYPE 32 | export type AppType = typeof app; 33 | 34 | export default app; 35 | -------------------------------------------------------------------------------- /src/config/env.ts: -------------------------------------------------------------------------------- 1 | import "dotenv/config"; 2 | import { z } from "zod"; 3 | 4 | console.log("🔐 Loading environment variables..."); 5 | 6 | const serverSchema = z.object({ 7 | // Node 8 | NODE_ENV: z.string(), 9 | // Database 10 | DATABASE_URL: z.string().min(1), 11 | 12 | // Supabase 13 | SUPABASE_URL: z.string().min(1), 14 | SUPABASE_SERVICE_ROLE: z.string().min(1), 15 | SENTRY_DSN: z.string().optional(), 16 | }); 17 | 18 | const _serverEnv = serverSchema.safeParse(process.env); 19 | 20 | if (!_serverEnv.success) { 21 | console.error("❌ Invalid environment variables:\n"); 22 | _serverEnv.error.issues.forEach((issue) => { 23 | console.error(issue); 24 | }); 25 | throw new Error("Invalid environment variables"); 26 | } 27 | 28 | const { NODE_ENV, DATABASE_URL, SUPABASE_SERVICE_ROLE, SUPABASE_URL, SENTRY_DSN } = _serverEnv.data; 29 | 30 | export const env = { 31 | NODE_ENV, 32 | DATABASE_URL, 33 | SUPABASE_SERVICE_ROLE, 34 | SUPABASE_URL, 35 | SENTRY_DSN, 36 | }; 37 | console.log("✅ Environment variables loaded"); 38 | -------------------------------------------------------------------------------- /src/libs/database/db.ts: -------------------------------------------------------------------------------- 1 | import { drizzle } from "drizzle-orm/postgres-js"; 2 | import type { PostgresJsDatabase } from "drizzle-orm/postgres-js"; 3 | import postgres from "postgres"; 4 | 5 | import { env } from "../../config/env"; 6 | import * as schema from "./schema"; 7 | 8 | type DBType = PostgresJsDatabase; 9 | 10 | declare global { 11 | // biome-ignore lint/style/noVar: 12 | var db: DBType | undefined; 13 | } 14 | 15 | export const client = postgres(env.DATABASE_URL, { prepare: false }); 16 | const drizzleConfig = { 17 | schema, 18 | driver: "pg", 19 | dbCredentials: { 20 | connectionString: env.DATABASE_URL, 21 | }, 22 | }; 23 | 24 | // biome-ignore lint/suspicious/noRedeclare: 25 | let db: DBType; 26 | if (env.NODE_ENV === "production") { 27 | db = drizzle(client, drizzleConfig); 28 | } else { 29 | if (!global.db) global.db = drizzle(client, drizzleConfig); 30 | 31 | db = global.db; 32 | } 33 | 34 | export { db }; 35 | -------------------------------------------------------------------------------- /src/libs/database/migrate.ts: -------------------------------------------------------------------------------- 1 | import { migrate } from "drizzle-orm/postgres-js/migrator"; 2 | import { db } from "./db"; 3 | 4 | export const migrateDB = async () => { 5 | console.log("migrating db"); 6 | await migrate(db, { migrationsFolder: "drizzle" }); 7 | console.log("db migrated"); 8 | }; 9 | 10 | migrateDB(); 11 | -------------------------------------------------------------------------------- /src/libs/database/schema.ts: -------------------------------------------------------------------------------- 1 | import { sql } from "drizzle-orm"; 2 | import { pgTable, text, timestamp, uuid } from "drizzle-orm/pg-core"; 3 | 4 | export const users = pgTable("users", { 5 | id: uuid("id").primaryKey().notNull(), 6 | email: text("email"), 7 | createdAt: timestamp("created_at", { mode: "string" }).notNull().default(sql`now()`), 8 | updatedAt: timestamp("updated_at", { mode: "string" }).notNull().default(sql`now()`), 9 | }); 10 | -------------------------------------------------------------------------------- /src/libs/supabase/client.ts: -------------------------------------------------------------------------------- 1 | import { env } from "@/config/env"; 2 | import { createClient } from "@supabase/supabase-js"; 3 | 4 | const { SUPABASE_URL, SUPABASE_SERVICE_ROLE } = env; 5 | 6 | export const supabase = createClient(SUPABASE_URL, SUPABASE_SERVICE_ROLE); 7 | -------------------------------------------------------------------------------- /src/middlewares/auth.middleware.ts: -------------------------------------------------------------------------------- 1 | import { supabase } from "@/libs/supabase/client"; 2 | import { type MiddlewareHandler } from "hono"; 3 | import { getCookie } from "hono/cookie"; 4 | import { HTTPException } from "hono/http-exception"; 5 | 6 | const authMiddleware: MiddlewareHandler = async (c, next) => { 7 | const refresh_token = getCookie(c, "refresh_token"); 8 | const access_token = getCookie(c, "access_token"); 9 | const { data, error } = await supabase.auth.getUser(access_token); 10 | 11 | if (data.user) { 12 | c.set("user", { 13 | id: data.user.id, 14 | email: data.user.email, 15 | created_at: data.user.created_at, 16 | updated_at: data.user.updated_at, 17 | }); 18 | } 19 | //TODO: handle error properly 20 | if (error) { 21 | console.error("Error while getting user by access_token ", error); 22 | if (!refresh_token) { 23 | throw new HTTPException(403, { message: "No refresh token" }); 24 | } 25 | 26 | const { data: refreshed, error: refreshError } = await supabase.auth.refreshSession({ 27 | refresh_token, 28 | }); 29 | 30 | if (refreshError) { 31 | console.error("Error while refreshing token", refreshError); 32 | throw new HTTPException(403, { message: " Error while refreshing token" }); 33 | } 34 | 35 | if (refreshed.user) { 36 | c.set("user", { 37 | id: refreshed.user.id, 38 | email: refreshed.user.email, 39 | created_at: refreshed.user.created_at, 40 | updated_at: refreshed.user.updated_at, 41 | }); 42 | } 43 | } 44 | 45 | await next(); 46 | }; 47 | 48 | export default authMiddleware; 49 | -------------------------------------------------------------------------------- /src/middlewares/error.middleware.ts: -------------------------------------------------------------------------------- 1 | import { type ErrorHandler } from "hono"; 2 | import { HTTPException } from "hono/http-exception"; 3 | 4 | const errorHandler: ErrorHandler = (err, c) => { 5 | console.error(`Error on ${c.req.method} ${c.req.url}`); 6 | console.error(err?.message); 7 | console.error(err?.stack); 8 | if (err instanceof HTTPException) { 9 | return err.getResponse(); 10 | } 11 | 12 | return new Response("Internal Error", { 13 | status: 500, 14 | statusText: err?.message || "Internal Error", 15 | }); 16 | }; 17 | 18 | export default errorHandler; 19 | -------------------------------------------------------------------------------- /src/middlewares/swagger.middleware.ts: -------------------------------------------------------------------------------- 1 | import { swaggerUI } from "@hono/swagger-ui"; 2 | import { Hono } from "hono"; 3 | 4 | const swaggerApp = new Hono().get("/", swaggerUI({ url: "/api/doc" })); 5 | 6 | export default swaggerApp; 7 | -------------------------------------------------------------------------------- /src/middlewares/zodValidator.middleware.ts: -------------------------------------------------------------------------------- 1 | import { HTTPException } from "hono/http-exception"; 2 | import { fromZodError } from "zod-validation-error"; 3 | 4 | import type { Context, Env, MiddlewareHandler, TypedResponse, ValidationTargets } from "hono"; 5 | import { validator } from "hono/validator"; 6 | import type { ZodError, ZodSchema, z } from "zod"; 7 | 8 | // biome-ignore lint/complexity/noBannedTypes: 9 | export type Hook = ( 10 | result: { success: true; data: T } | { success: false; error: ZodError; data: T }, 11 | c: Context, 12 | // biome-ignore lint/suspicious/noConfusingVoidType: 13 | ) => Response | Promise | void | Promise | TypedResponse; 14 | 15 | type HasUndefined = undefined extends T ? true : false; 16 | 17 | export const zValidator = < 18 | T extends ZodSchema, 19 | Target extends keyof ValidationTargets, 20 | E extends Env, 21 | P extends string, 22 | I = z.input, 23 | O = z.output, 24 | V extends { 25 | in: HasUndefined extends true ? { [K in Target]?: I } : { [K in Target]: I }; 26 | out: { [K in Target]: O }; 27 | } = { 28 | in: HasUndefined extends true ? { [K in Target]?: I } : { [K in Target]: I }; 29 | out: { [K in Target]: O }; 30 | }, 31 | >( 32 | target: Target, 33 | schema: T, 34 | hook?: Hook, E, P>, 35 | ): MiddlewareHandler => 36 | validator(target, async (value, c) => { 37 | const result = await schema.safeParseAsync(value); 38 | 39 | if (hook) { 40 | const hookResult = hook({ data: value, ...result }, c); 41 | if (hookResult) { 42 | if (hookResult instanceof Response || hookResult instanceof Promise) { 43 | return hookResult; 44 | } 45 | if ("response" in hookResult) { 46 | return hookResult.response; 47 | } 48 | } 49 | } 50 | 51 | if (!result.success) { 52 | const validationError = fromZodError(result.error); 53 | 54 | return c.json( 55 | { 56 | message: validationError.message, 57 | errors: validationError.details, 58 | }, 59 | 400, 60 | ); 61 | } 62 | 63 | const data = result.data as z.infer; 64 | return data; 65 | }); 66 | -------------------------------------------------------------------------------- /src/routes/auth.routes.ts: -------------------------------------------------------------------------------- 1 | import { supabase } from "@/libs/supabase/client"; 2 | import { zValidator } from "@/middlewares/zodValidator.middleware"; 3 | 4 | import { db } from "@/libs/database/db"; 5 | import { users } from "@/libs/database/schema"; 6 | import { Hono } from "hono"; 7 | import { getCookie, setCookie } from "hono/cookie"; 8 | import { HTTPException } from "hono/http-exception"; 9 | import { endTime, startTime } from "hono/timing"; 10 | import { z } from "zod"; 11 | 12 | const authRoutes = new Hono() 13 | .post( 14 | "/sign-up", 15 | zValidator( 16 | "json", 17 | z.object({ 18 | email: z.string(), 19 | password: z.string().min(8), 20 | }), 21 | ), 22 | async (c) => { 23 | const { email, password } = c.req.valid("json"); 24 | 25 | const { data, error } = await supabase.auth.signUp({ 26 | email, 27 | password, 28 | }); 29 | 30 | if (error || !data?.user?.email) { 31 | console.log(error); 32 | throw new Error(error?.message || "Error while signing up", { 33 | cause: error, 34 | }); 35 | } 36 | 37 | const dbUser = { 38 | id: data?.user.id, 39 | email: data?.user.email, 40 | createdAt: data?.user.created_at, 41 | updatedAt: data?.user.updated_at, 42 | }; 43 | 44 | const user = await db.insert(users).values(dbUser).returning(); 45 | 46 | return c.json(user); 47 | }, 48 | ) 49 | .post( 50 | "/sign-in", 51 | zValidator( 52 | "json", 53 | z.object({ 54 | email: z.string(), 55 | password: z.string().min(8), 56 | }), 57 | ), 58 | async (c) => { 59 | const { email, password } = c.req.valid("json"); 60 | 61 | const { data, error } = await supabase.auth.signInWithPassword({ email, password }); 62 | 63 | if (error) { 64 | console.error("Error while signing in", error); 65 | throw new HTTPException(401, { message: error.message }); 66 | } 67 | 68 | setCookie(c, "access_token", data?.session.access_token, { 69 | ...(data?.session.expires_at && { expires: new Date(data.session.expires_at) }), 70 | httpOnly: true, 71 | path: "/", 72 | secure: true, 73 | }); 74 | 75 | setCookie(c, "refresh_token", data?.session.refresh_token, { 76 | ...(data?.session.expires_at && { expires: new Date(data.session.expires_at) }), 77 | httpOnly: true, 78 | path: "/", 79 | secure: true, 80 | }); 81 | 82 | return c.json(data.user); 83 | }, 84 | ) 85 | .post( 86 | "/sign-in-with-provider", 87 | zValidator( 88 | "json", 89 | z.object({ 90 | provider: z.enum(["google", "apple"]), 91 | token: z.string().min(8), 92 | accessToken: z.string().optional(), 93 | }), 94 | ), 95 | async (c) => { 96 | const { token, provider, accessToken } = c.req.valid("json"); 97 | // start a new timer 98 | startTime(c, "supabase.auth.signInWithProvider"); 99 | const { data, error } = await supabase.auth.signInWithIdToken({ 100 | provider, 101 | token, 102 | access_token: accessToken, 103 | }); 104 | // end the timer 105 | endTime(c, "supabase.auth.signInWithProvider"); 106 | 107 | if (error) { 108 | console.error("Error while signing in with Provider ", error); 109 | throw new HTTPException(401, { message: error.message }); 110 | } 111 | 112 | setCookie(c, "access_token", data?.session.access_token, { 113 | ...(data?.session.expires_at && { expires: new Date(data.session.expires_at) }), 114 | httpOnly: true, 115 | path: "/", 116 | secure: true, 117 | }); 118 | 119 | setCookie(c, "refresh_token", data?.session.refresh_token, { 120 | ...(data?.session.expires_at && { expires: new Date(data.session.expires_at) }), 121 | httpOnly: true, 122 | path: "/", 123 | secure: true, 124 | }); 125 | 126 | return c.json(data.user); 127 | }, 128 | ) 129 | .get("/refresh", async (c) => { 130 | const refresh_token = getCookie(c, "refresh_token"); 131 | if (!refresh_token) { 132 | throw new HTTPException(403, { message: "No refresh token" }); 133 | } 134 | 135 | const { data, error } = await supabase.auth.refreshSession({ 136 | refresh_token, 137 | }); 138 | 139 | if (error) { 140 | console.error("Error while refreshing token", error); 141 | throw new HTTPException(403, { message: error.message }); 142 | } 143 | 144 | if (data?.session) { 145 | setCookie(c, "refresh_token", data.session.refresh_token, { 146 | ...(data.session.expires_at && { expires: new Date(data.session.expires_at) }), 147 | // httpOnly: true, 148 | // path: "/", 149 | // secure: true, 150 | }); 151 | } 152 | 153 | return c.json(data.user); 154 | }); 155 | 156 | export default authRoutes; 157 | -------------------------------------------------------------------------------- /src/routes/iam.routes.ts: -------------------------------------------------------------------------------- 1 | import authMiddleware from "@/middlewares/auth.middleware"; 2 | import { Hono } from "hono"; 3 | 4 | type Variables = { 5 | user: { 6 | id: string; 7 | email: string; 8 | created_at: string; 9 | updated_at: string; 10 | }; 11 | }; 12 | 13 | const iamRoutes = new Hono<{ Variables: Variables }>() 14 | .get("/test", async (c) => { 15 | const user = { 16 | id: "1", 17 | email: "test@gmail.com", 18 | }; 19 | 20 | return c.json(user); 21 | }) 22 | .use("*", authMiddleware) 23 | .get("/", async (c) => { 24 | const user = c.get("user"); 25 | 26 | return c.json({ user, allUsers: 0 }); 27 | }); 28 | 29 | export default iamRoutes; 30 | -------------------------------------------------------------------------------- /src/server.ts: -------------------------------------------------------------------------------- 1 | import { serve } from "@hono/node-server"; 2 | 3 | import { showRoutes } from "hono/dev"; 4 | import app from "./app"; 5 | 6 | const port = 3000; 7 | console.log(`Server is running on port - ${port}`); 8 | 9 | serve({ 10 | fetch: app.fetch, 11 | port, 12 | }); 13 | 14 | showRoutes(app); 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | "strict": true, 5 | "jsx": "react-jsx", 6 | "jsxImportSource": "hono/jsx", 7 | 8 | "esModuleInterop": true, 9 | "skipLibCheck": true, 10 | "target": "es2022", 11 | "verbatimModuleSyntax": true, 12 | "allowJs": true, 13 | "resolveJsonModule": true, 14 | "moduleDetection": "force", 15 | /* Strictness */ 16 | "noUncheckedIndexedAccess": true, 17 | /* If NOT transpiling with TypeScript: */ 18 | "moduleResolution": "Bundler", 19 | "module": "ESNext", 20 | "noEmit": true, 21 | /* If your code doesn't run in the DOM: */ 22 | "lib": ["es2022"], 23 | "paths": { 24 | "@/*": ["./src/*"] 25 | }, 26 | "types": [ 27 | "vitest/importMeta", "vitest/globals" 28 | ] 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import tsconfigPaths from 'vite-tsconfig-paths'; 2 | import { defineConfig } from 'vitest/config'; 3 | 4 | export default defineConfig({ 5 | plugins: [tsconfigPaths()], 6 | test: { 7 | globals: true, 8 | environment: 'node', 9 | include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], 10 | }, 11 | }); 12 | --------------------------------------------------------------------------------