├── .env ├── .gitignore ├── README.md ├── next.config.js ├── package.json ├── playwright.config.ts ├── pnpm-lock.yaml ├── prisma ├── migrations │ ├── 20210304121245_ │ │ └── migration.sql │ ├── 20241206100315_prisma-update │ │ └── migration.sql │ └── migration_lock.toml └── schema.prisma ├── public └── favicon.ico ├── src ├── components │ └── footer.tsx ├── pages │ ├── [filter].tsx │ ├── _app.tsx │ └── api │ │ └── trpc │ │ └── [trpc].ts ├── server │ ├── context.ts │ ├── prisma.ts │ ├── routers │ │ ├── _app.ts │ │ └── todo.ts │ ├── ssg-init.ts │ └── trpc.ts └── utils │ ├── trpc.ts │ └── use-click-outside.tsx ├── test └── playwright.test.ts ├── tsconfig.json └── vercel.json /.env: -------------------------------------------------------------------------------- 1 | # Environment variables declared in this file are automatically made available to Prisma. 2 | # See the documentation for more detail: https://pris.ly/d/prisma-schema#using-environment-variables 3 | 4 | # Prisma supports the native connection string format for PostgreSQL, MySQL and SQLite. 5 | # See the documentation for all the connection string options: https://pris.ly/d/connection-strings 6 | 7 | DATABASE_URL="postgresql://postgres:@localhost:5432/todo?schema=public" 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | next-env.d.ts 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env.local 30 | .env.development.local 31 | .env.test.local 32 | .env.production.local 33 | 34 | # vercel 35 | .vercel 36 | 37 | *.db 38 | *.db-journal 39 | prisma/_sqlite/migrations 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## TodoMVC 2 | 3 | - [TodoMVC](https://todomvc.com/) implemented with tRPC + [Prisma](https://prisma.io) 4 | - Live at [todomvc.trpc.io](https://todomvc.trpc.io) 5 | 6 | ### Setup 7 | 8 | ```bash 9 | pnpm create next-app --example https://github.com/trpc/trpc --example-path examples/next-prisma-todomvc trpc-todo 10 | cd trpc-todo 11 | pnpm 12 | pnpm dev 13 | ``` 14 | 15 | ### Useful commands 16 | 17 | ```bash 18 | pnpm dx # runs prisma studio + next 19 | ``` 20 | 21 | --- 22 | 23 | Created by [@alexdotjs](https://twitter.com/alexdotjs). 24 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import("next").NextConfig} */ 2 | const config = { 3 | async redirects() { 4 | return [ 5 | { 6 | source: '/', 7 | destination: '/all', 8 | permanent: false, 9 | }, 10 | ]; 11 | }, 12 | 13 | /** We run eslint as a separate task in CI */ 14 | eslint: { 15 | ignoreDuringBuilds: !!process.env.CI, 16 | }, 17 | }; 18 | 19 | module.exports = config; 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "examples-trpc-next-prisma-todomvc", 3 | "private": true, 4 | "scripts": { 5 | "generate": "prisma generate", 6 | "prisma-studio": "prisma studio", 7 | "dx:next": "run-s migrate-dev && next dev", 8 | "dx:prisma-studio": "pnpm prisma-studio", 9 | "dx": "run-p dx:* --print-label", 10 | "dev": "pnpm dx:next", 11 | "prebuild": "run-s generate migrate", 12 | "build": "next build", 13 | "lint": "eslint --cache src", 14 | "start": "next start", 15 | "studio": "prisma studio", 16 | "migrate-dev": "prisma migrate dev", 17 | "migrate": "prisma migrate deploy", 18 | "test": "playwright test", 19 | "test-dev": "start-server-and-test dev http://127.0.0.1:3000 test", 20 | "test-start": "start-server-and-test start http://127.0.0.1:3000 test", 21 | "postinstall": "prisma generate" 22 | }, 23 | "dependencies": { 24 | "@prisma/client": "^6.7.0", 25 | "@tanstack/react-query": "^5.80.3", 26 | "@trpc/client": "canary", 27 | "@trpc/next": "canary", 28 | "@trpc/react-query": "canary", 29 | "@trpc/server": "canary", 30 | "clsx": "^2.0.0", 31 | "next": "^15.3.1", 32 | "react": "^19.1.0", 33 | "react-dom": "^19.1.0", 34 | "superjson": "^1.12.4", 35 | "todomvc-app-css": "^2.3.0", 36 | "todomvc-common": "^1.0.5", 37 | "zod": "^3.25.51" 38 | }, 39 | "devDependencies": { 40 | "@playwright/test": "^1.50.1", 41 | "@tanstack/react-query-devtools": "^5.80.3", 42 | "@types/node": "^22.13.5", 43 | "@types/react": "^19.1.0", 44 | "eslint": "^9.26.0", 45 | "npm-run-all": "^4.1.5", 46 | "prisma": "^6.7.0", 47 | "start-server-and-test": "^1.12.0", 48 | "typescript": "^5.8.2" 49 | }, 50 | "publishConfig": { 51 | "access": "restricted" 52 | }, 53 | "version": "11.4.1" 54 | } 55 | -------------------------------------------------------------------------------- /playwright.config.ts: -------------------------------------------------------------------------------- 1 | import { devices, PlaywrightTestConfig } from '@playwright/test'; 2 | 3 | const baseUrl = process.env.PLAYWRIGHT_TEST_BASE_URL || 'http://localhost:3000'; 4 | console.log(`ℹ️ Using base URL "${baseUrl}"`); 5 | 6 | const opts = { 7 | // launch headless on CI, in browser locally 8 | headless: !!process.env.CI || !!process.env.PLAYWRIGHT_HEADLESS, 9 | // collectCoverage: !!process.env.PLAYWRIGHT_HEADLESS 10 | }; 11 | const config: PlaywrightTestConfig = { 12 | testDir: './test', 13 | use: { 14 | ...devices['Desktop Chrome'], 15 | baseURL: baseUrl, 16 | headless: opts.headless, 17 | }, 18 | retries: process.env.CI ? 3 : 0, 19 | }; 20 | 21 | export default config; 22 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@prisma/client': 12 | specifier: ^6.7.0 13 | version: 6.9.0(prisma@6.9.0(typescript@5.8.3))(typescript@5.8.3) 14 | '@tanstack/react-query': 15 | specifier: ^5.80.3 16 | version: 5.80.7(react@19.1.0) 17 | '@trpc/client': 18 | specifier: canary 19 | version: 11.3.2-canary.4(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(typescript@5.8.3) 20 | '@trpc/next': 21 | specifier: canary 22 | version: 11.3.2-canary.4(@tanstack/react-query@5.80.7(react@19.1.0))(@trpc/client@11.3.2-canary.4(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/react-query@11.3.2-canary.4(@tanstack/react-query@5.80.7(react@19.1.0))(@trpc/client@11.3.2-canary.4(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3))(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(next@15.3.3(@playwright/test@1.53.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) 23 | '@trpc/react-query': 24 | specifier: canary 25 | version: 11.3.2-canary.4(@tanstack/react-query@5.80.7(react@19.1.0))(@trpc/client@11.3.2-canary.4(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) 26 | '@trpc/server': 27 | specifier: canary 28 | version: 11.3.2-canary.4(typescript@5.8.3) 29 | clsx: 30 | specifier: ^2.0.0 31 | version: 2.1.1 32 | next: 33 | specifier: ^15.3.1 34 | version: 15.3.3(@playwright/test@1.53.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) 35 | react: 36 | specifier: ^19.1.0 37 | version: 19.1.0 38 | react-dom: 39 | specifier: ^19.1.0 40 | version: 19.1.0(react@19.1.0) 41 | superjson: 42 | specifier: ^1.12.4 43 | version: 1.13.3 44 | todomvc-app-css: 45 | specifier: ^2.3.0 46 | version: 2.4.3 47 | todomvc-common: 48 | specifier: ^1.0.5 49 | version: 1.0.5 50 | zod: 51 | specifier: ^3.25.51 52 | version: 3.25.64 53 | devDependencies: 54 | '@playwright/test': 55 | specifier: ^1.50.1 56 | version: 1.53.0 57 | '@tanstack/react-query-devtools': 58 | specifier: ^5.80.3 59 | version: 5.80.7(@tanstack/react-query@5.80.7(react@19.1.0))(react@19.1.0) 60 | '@types/node': 61 | specifier: ^22.13.5 62 | version: 22.15.31 63 | '@types/react': 64 | specifier: ^19.1.0 65 | version: 19.1.8 66 | eslint: 67 | specifier: ^9.26.0 68 | version: 9.28.0(jiti@2.4.2) 69 | npm-run-all: 70 | specifier: ^4.1.5 71 | version: 4.1.5 72 | prisma: 73 | specifier: ^6.7.0 74 | version: 6.9.0(typescript@5.8.3) 75 | start-server-and-test: 76 | specifier: ^1.12.0 77 | version: 1.15.5 78 | typescript: 79 | specifier: ^5.8.2 80 | version: 5.8.3 81 | 82 | packages: 83 | 84 | '@emnapi/runtime@1.4.3': 85 | resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} 86 | 87 | '@eslint-community/eslint-utils@4.7.0': 88 | resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} 89 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 90 | peerDependencies: 91 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 92 | 93 | '@eslint-community/regexpp@4.12.1': 94 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 95 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 96 | 97 | '@eslint/config-array@0.20.1': 98 | resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} 99 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 100 | 101 | '@eslint/config-helpers@0.2.3': 102 | resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==} 103 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 104 | 105 | '@eslint/core@0.14.0': 106 | resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} 107 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 108 | 109 | '@eslint/core@0.15.0': 110 | resolution: {integrity: sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==} 111 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 112 | 113 | '@eslint/eslintrc@3.3.1': 114 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 115 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 116 | 117 | '@eslint/js@9.28.0': 118 | resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==} 119 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 120 | 121 | '@eslint/object-schema@2.1.6': 122 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 123 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 124 | 125 | '@eslint/plugin-kit@0.3.2': 126 | resolution: {integrity: sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==} 127 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 128 | 129 | '@hapi/hoek@9.3.0': 130 | resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} 131 | 132 | '@hapi/topo@5.1.0': 133 | resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} 134 | 135 | '@humanfs/core@0.19.1': 136 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 137 | engines: {node: '>=18.18.0'} 138 | 139 | '@humanfs/node@0.16.6': 140 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 141 | engines: {node: '>=18.18.0'} 142 | 143 | '@humanwhocodes/module-importer@1.0.1': 144 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 145 | engines: {node: '>=12.22'} 146 | 147 | '@humanwhocodes/retry@0.3.1': 148 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 149 | engines: {node: '>=18.18'} 150 | 151 | '@humanwhocodes/retry@0.4.3': 152 | resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} 153 | engines: {node: '>=18.18'} 154 | 155 | '@img/sharp-darwin-arm64@0.34.2': 156 | resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==} 157 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 158 | cpu: [arm64] 159 | os: [darwin] 160 | 161 | '@img/sharp-darwin-x64@0.34.2': 162 | resolution: {integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==} 163 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 164 | cpu: [x64] 165 | os: [darwin] 166 | 167 | '@img/sharp-libvips-darwin-arm64@1.1.0': 168 | resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} 169 | cpu: [arm64] 170 | os: [darwin] 171 | 172 | '@img/sharp-libvips-darwin-x64@1.1.0': 173 | resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} 174 | cpu: [x64] 175 | os: [darwin] 176 | 177 | '@img/sharp-libvips-linux-arm64@1.1.0': 178 | resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} 179 | cpu: [arm64] 180 | os: [linux] 181 | 182 | '@img/sharp-libvips-linux-arm@1.1.0': 183 | resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} 184 | cpu: [arm] 185 | os: [linux] 186 | 187 | '@img/sharp-libvips-linux-ppc64@1.1.0': 188 | resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} 189 | cpu: [ppc64] 190 | os: [linux] 191 | 192 | '@img/sharp-libvips-linux-s390x@1.1.0': 193 | resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} 194 | cpu: [s390x] 195 | os: [linux] 196 | 197 | '@img/sharp-libvips-linux-x64@1.1.0': 198 | resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} 199 | cpu: [x64] 200 | os: [linux] 201 | 202 | '@img/sharp-libvips-linuxmusl-arm64@1.1.0': 203 | resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} 204 | cpu: [arm64] 205 | os: [linux] 206 | 207 | '@img/sharp-libvips-linuxmusl-x64@1.1.0': 208 | resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} 209 | cpu: [x64] 210 | os: [linux] 211 | 212 | '@img/sharp-linux-arm64@0.34.2': 213 | resolution: {integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==} 214 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 215 | cpu: [arm64] 216 | os: [linux] 217 | 218 | '@img/sharp-linux-arm@0.34.2': 219 | resolution: {integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==} 220 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 221 | cpu: [arm] 222 | os: [linux] 223 | 224 | '@img/sharp-linux-s390x@0.34.2': 225 | resolution: {integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==} 226 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 227 | cpu: [s390x] 228 | os: [linux] 229 | 230 | '@img/sharp-linux-x64@0.34.2': 231 | resolution: {integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==} 232 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 233 | cpu: [x64] 234 | os: [linux] 235 | 236 | '@img/sharp-linuxmusl-arm64@0.34.2': 237 | resolution: {integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==} 238 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 239 | cpu: [arm64] 240 | os: [linux] 241 | 242 | '@img/sharp-linuxmusl-x64@0.34.2': 243 | resolution: {integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==} 244 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 245 | cpu: [x64] 246 | os: [linux] 247 | 248 | '@img/sharp-wasm32@0.34.2': 249 | resolution: {integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==} 250 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 251 | cpu: [wasm32] 252 | 253 | '@img/sharp-win32-arm64@0.34.2': 254 | resolution: {integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==} 255 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 256 | cpu: [arm64] 257 | os: [win32] 258 | 259 | '@img/sharp-win32-ia32@0.34.2': 260 | resolution: {integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==} 261 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 262 | cpu: [ia32] 263 | os: [win32] 264 | 265 | '@img/sharp-win32-x64@0.34.2': 266 | resolution: {integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==} 267 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 268 | cpu: [x64] 269 | os: [win32] 270 | 271 | '@next/env@15.3.3': 272 | resolution: {integrity: sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==} 273 | 274 | '@next/swc-darwin-arm64@15.3.3': 275 | resolution: {integrity: sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==} 276 | engines: {node: '>= 10'} 277 | cpu: [arm64] 278 | os: [darwin] 279 | 280 | '@next/swc-darwin-x64@15.3.3': 281 | resolution: {integrity: sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==} 282 | engines: {node: '>= 10'} 283 | cpu: [x64] 284 | os: [darwin] 285 | 286 | '@next/swc-linux-arm64-gnu@15.3.3': 287 | resolution: {integrity: sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==} 288 | engines: {node: '>= 10'} 289 | cpu: [arm64] 290 | os: [linux] 291 | 292 | '@next/swc-linux-arm64-musl@15.3.3': 293 | resolution: {integrity: sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==} 294 | engines: {node: '>= 10'} 295 | cpu: [arm64] 296 | os: [linux] 297 | 298 | '@next/swc-linux-x64-gnu@15.3.3': 299 | resolution: {integrity: sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==} 300 | engines: {node: '>= 10'} 301 | cpu: [x64] 302 | os: [linux] 303 | 304 | '@next/swc-linux-x64-musl@15.3.3': 305 | resolution: {integrity: sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==} 306 | engines: {node: '>= 10'} 307 | cpu: [x64] 308 | os: [linux] 309 | 310 | '@next/swc-win32-arm64-msvc@15.3.3': 311 | resolution: {integrity: sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==} 312 | engines: {node: '>= 10'} 313 | cpu: [arm64] 314 | os: [win32] 315 | 316 | '@next/swc-win32-x64-msvc@15.3.3': 317 | resolution: {integrity: sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==} 318 | engines: {node: '>= 10'} 319 | cpu: [x64] 320 | os: [win32] 321 | 322 | '@playwright/test@1.53.0': 323 | resolution: {integrity: sha512-15hjKreZDcp7t6TL/7jkAo6Df5STZN09jGiv5dbP9A6vMVncXRqE7/B2SncsyOwrkZRBH2i6/TPOL8BVmm3c7w==} 324 | engines: {node: '>=18'} 325 | hasBin: true 326 | 327 | '@prisma/client@6.9.0': 328 | resolution: {integrity: sha512-Gg7j1hwy3SgF1KHrh0PZsYvAaykeR0PaxusnLXydehS96voYCGt1U5zVR31NIouYc63hWzidcrir1a7AIyCsNQ==} 329 | engines: {node: '>=18.18'} 330 | peerDependencies: 331 | prisma: '*' 332 | typescript: '>=5.1.0' 333 | peerDependenciesMeta: 334 | prisma: 335 | optional: true 336 | typescript: 337 | optional: true 338 | 339 | '@prisma/config@6.9.0': 340 | resolution: {integrity: sha512-Wcfk8/lN3WRJd5w4jmNQkUwhUw0eksaU/+BlAJwPQKW10k0h0LC9PD/6TQFmqKVbHQL0vG2z266r0S1MPzzhbA==} 341 | 342 | '@prisma/debug@6.9.0': 343 | resolution: {integrity: sha512-bFeur/qi/Q+Mqk4JdQ3R38upSYPebv5aOyD1RKywVD+rAMLtRkmTFn28ZuTtVOnZHEdtxnNOCH+bPIeSGz1+Fg==} 344 | 345 | '@prisma/engines-version@6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e': 346 | resolution: {integrity: sha512-Qp9gMoBHgqhKlrvumZWujmuD7q4DV/gooEyPCLtbkc13EZdSz2RsGUJ5mHb3RJgAbk+dm6XenqG7obJEhXcJ6Q==} 347 | 348 | '@prisma/engines@6.9.0': 349 | resolution: {integrity: sha512-im0X0bwDLA0244CDf8fuvnLuCQcBBdAGgr+ByvGfQY9wWl6EA+kRGwVk8ZIpG65rnlOwtaWIr/ZcEU5pNVvq9g==} 350 | 351 | '@prisma/fetch-engine@6.9.0': 352 | resolution: {integrity: sha512-PMKhJdl4fOdeE3J3NkcWZ+tf3W6rx3ht/rLU8w4SXFRcLhd5+3VcqY4Kslpdm8osca4ej3gTfB3+cSk5pGxgFg==} 353 | 354 | '@prisma/get-platform@6.9.0': 355 | resolution: {integrity: sha512-/B4n+5V1LI/1JQcHp+sUpyRT1bBgZVPHbsC4lt4/19Xp4jvNIVcq5KYNtQDk5e/ukTSjo9PZVAxxy9ieFtlpTQ==} 356 | 357 | '@sideway/address@4.1.5': 358 | resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} 359 | 360 | '@sideway/formula@3.0.1': 361 | resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} 362 | 363 | '@sideway/pinpoint@2.0.0': 364 | resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} 365 | 366 | '@swc/counter@0.1.3': 367 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} 368 | 369 | '@swc/helpers@0.5.15': 370 | resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} 371 | 372 | '@tanstack/query-core@5.80.7': 373 | resolution: {integrity: sha512-s09l5zeUKC8q7DCCCIkVSns8zZrK4ZDT6ryEjxNBFi68G4z2EBobBS7rdOY3r6W1WbUDpc1fe5oY+YO/+2UVUg==} 374 | 375 | '@tanstack/query-devtools@5.80.0': 376 | resolution: {integrity: sha512-D6gH4asyjaoXrCOt5vG5Og/YSj0D/TxwNQgtLJIgWbhbWCC/emu2E92EFoVHh4ppVWg1qT2gKHvKyQBEFZhCuA==} 377 | 378 | '@tanstack/react-query-devtools@5.80.7': 379 | resolution: {integrity: sha512-7Dz/19fVo0i+jgLVBabV5vfGOlLyN5L1w8w1/ogFhe6ItNNsNA+ZgNTbtiKpbR3CcX2WDRRTInz1uMSmHzTsoQ==} 380 | peerDependencies: 381 | '@tanstack/react-query': ^5.80.7 382 | react: ^18 || ^19 383 | 384 | '@tanstack/react-query@5.80.7': 385 | resolution: {integrity: sha512-u2F0VK6+anItoEvB3+rfvTO9GEh2vb00Je05OwlUe/A0lkJBgW1HckiY3f9YZa+jx6IOe4dHPh10dyp9aY3iRQ==} 386 | peerDependencies: 387 | react: ^18 || ^19 388 | 389 | '@trpc/client@11.3.2-canary.4': 390 | resolution: {integrity: sha512-2JDSt/fq1hX9iYc5YiLQQxrrVqHwMhmbNQ0KkSrclecjQujkCQYTCu9a9R6BBPeEXAJCJV2iCr48AHfcKc2e2A==} 391 | peerDependencies: 392 | '@trpc/server': 11.3.2-canary.4+e70e78413 393 | typescript: '>=5.7.2' 394 | 395 | '@trpc/next@11.3.2-canary.4': 396 | resolution: {integrity: sha512-AVlaC9EPucHfA3xUyv8/lL9ShSWW60XBnTTE6oT/DIU+czsJUWZipkXExxNOq9qn2jHN2KTffTYKQoLF+Cyn1A==} 397 | peerDependencies: 398 | '@tanstack/react-query': ^5.59.15 399 | '@trpc/client': 11.3.2-canary.4+e70e78413 400 | '@trpc/react-query': 11.3.2-canary.4+e70e78413 401 | '@trpc/server': 11.3.2-canary.4+e70e78413 402 | next: '*' 403 | react: '>=16.8.0' 404 | react-dom: '>=16.8.0' 405 | typescript: '>=5.7.2' 406 | peerDependenciesMeta: 407 | '@tanstack/react-query': 408 | optional: true 409 | '@trpc/react-query': 410 | optional: true 411 | 412 | '@trpc/react-query@11.3.2-canary.4': 413 | resolution: {integrity: sha512-mAnyLevXSiha95xGbJFW4lhh2wJXKv+l4bmyIdQyACmjYSIGPRlroODZyaoPSnM7UZBSmLg53kkTshppW6XKXg==} 414 | peerDependencies: 415 | '@tanstack/react-query': ^5.80.3 416 | '@trpc/client': 11.3.2-canary.4+e70e78413 417 | '@trpc/server': 11.3.2-canary.4+e70e78413 418 | react: '>=18.2.0' 419 | react-dom: '>=18.2.0' 420 | typescript: '>=5.7.2' 421 | 422 | '@trpc/server@11.3.2-canary.4': 423 | resolution: {integrity: sha512-QlLuHopfOBIsf+AQ0X6lo6vIHjJEIl+As7RubgTSuZ9ZLnWkzxjR1TdpLnmYG6N3zCEJ0XpE7AFdFOcnkK2L5w==} 424 | peerDependencies: 425 | typescript: '>=5.7.2' 426 | 427 | '@types/estree@1.0.8': 428 | resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 429 | 430 | '@types/json-schema@7.0.15': 431 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 432 | 433 | '@types/node@22.15.31': 434 | resolution: {integrity: sha512-jnVe5ULKl6tijxUhvQeNbQG/84fHfg+yMak02cT8QVhBx/F05rAVxCGBYYTh2EKz22D6JF5ktXuNwdx7b9iEGw==} 435 | 436 | '@types/react@19.1.8': 437 | resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} 438 | 439 | acorn-jsx@5.3.2: 440 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 441 | peerDependencies: 442 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 443 | 444 | acorn@8.15.0: 445 | resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 446 | engines: {node: '>=0.4.0'} 447 | hasBin: true 448 | 449 | ajv@6.12.6: 450 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 451 | 452 | ansi-styles@3.2.1: 453 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 454 | engines: {node: '>=4'} 455 | 456 | ansi-styles@4.3.0: 457 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 458 | engines: {node: '>=8'} 459 | 460 | arg@5.0.2: 461 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 462 | 463 | argparse@2.0.1: 464 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 465 | 466 | array-buffer-byte-length@1.0.2: 467 | resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} 468 | engines: {node: '>= 0.4'} 469 | 470 | arraybuffer.prototype.slice@1.0.4: 471 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} 472 | engines: {node: '>= 0.4'} 473 | 474 | async-function@1.0.0: 475 | resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} 476 | engines: {node: '>= 0.4'} 477 | 478 | asynckit@0.4.0: 479 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 480 | 481 | available-typed-arrays@1.0.7: 482 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 483 | engines: {node: '>= 0.4'} 484 | 485 | axios@0.27.2: 486 | resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} 487 | 488 | balanced-match@1.0.2: 489 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 490 | 491 | bluebird@3.7.2: 492 | resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} 493 | 494 | brace-expansion@1.1.12: 495 | resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} 496 | 497 | busboy@1.6.0: 498 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 499 | engines: {node: '>=10.16.0'} 500 | 501 | call-bind-apply-helpers@1.0.2: 502 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 503 | engines: {node: '>= 0.4'} 504 | 505 | call-bind@1.0.8: 506 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} 507 | engines: {node: '>= 0.4'} 508 | 509 | call-bound@1.0.4: 510 | resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 511 | engines: {node: '>= 0.4'} 512 | 513 | callsites@3.1.0: 514 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 515 | engines: {node: '>=6'} 516 | 517 | caniuse-lite@1.0.30001723: 518 | resolution: {integrity: sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==} 519 | 520 | chalk@2.4.2: 521 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 522 | engines: {node: '>=4'} 523 | 524 | chalk@4.1.2: 525 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 526 | engines: {node: '>=10'} 527 | 528 | check-more-types@2.24.0: 529 | resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} 530 | engines: {node: '>= 0.8.0'} 531 | 532 | client-only@0.0.1: 533 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 534 | 535 | clsx@2.1.1: 536 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 537 | engines: {node: '>=6'} 538 | 539 | color-convert@1.9.3: 540 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 541 | 542 | color-convert@2.0.1: 543 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 544 | engines: {node: '>=7.0.0'} 545 | 546 | color-name@1.1.3: 547 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 548 | 549 | color-name@1.1.4: 550 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 551 | 552 | color-string@1.9.1: 553 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 554 | 555 | color@4.2.3: 556 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} 557 | engines: {node: '>=12.5.0'} 558 | 559 | combined-stream@1.0.8: 560 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 561 | engines: {node: '>= 0.8'} 562 | 563 | concat-map@0.0.1: 564 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 565 | 566 | copy-anything@3.0.5: 567 | resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} 568 | engines: {node: '>=12.13'} 569 | 570 | cross-spawn@6.0.6: 571 | resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} 572 | engines: {node: '>=4.8'} 573 | 574 | cross-spawn@7.0.6: 575 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 576 | engines: {node: '>= 8'} 577 | 578 | csstype@3.1.3: 579 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 580 | 581 | data-view-buffer@1.0.2: 582 | resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} 583 | engines: {node: '>= 0.4'} 584 | 585 | data-view-byte-length@1.0.2: 586 | resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} 587 | engines: {node: '>= 0.4'} 588 | 589 | data-view-byte-offset@1.0.1: 590 | resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} 591 | engines: {node: '>= 0.4'} 592 | 593 | debug@4.3.4: 594 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 595 | engines: {node: '>=6.0'} 596 | peerDependencies: 597 | supports-color: '*' 598 | peerDependenciesMeta: 599 | supports-color: 600 | optional: true 601 | 602 | debug@4.4.1: 603 | resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} 604 | engines: {node: '>=6.0'} 605 | peerDependencies: 606 | supports-color: '*' 607 | peerDependenciesMeta: 608 | supports-color: 609 | optional: true 610 | 611 | deep-is@0.1.4: 612 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 613 | 614 | define-data-property@1.1.4: 615 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 616 | engines: {node: '>= 0.4'} 617 | 618 | define-properties@1.2.1: 619 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 620 | engines: {node: '>= 0.4'} 621 | 622 | delayed-stream@1.0.0: 623 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 624 | engines: {node: '>=0.4.0'} 625 | 626 | detect-libc@2.0.4: 627 | resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} 628 | engines: {node: '>=8'} 629 | 630 | dunder-proto@1.0.1: 631 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 632 | engines: {node: '>= 0.4'} 633 | 634 | duplexer@0.1.2: 635 | resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} 636 | 637 | error-ex@1.3.2: 638 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 639 | 640 | es-abstract@1.24.0: 641 | resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} 642 | engines: {node: '>= 0.4'} 643 | 644 | es-define-property@1.0.1: 645 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 646 | engines: {node: '>= 0.4'} 647 | 648 | es-errors@1.3.0: 649 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 650 | engines: {node: '>= 0.4'} 651 | 652 | es-object-atoms@1.1.1: 653 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 654 | engines: {node: '>= 0.4'} 655 | 656 | es-set-tostringtag@2.1.0: 657 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 658 | engines: {node: '>= 0.4'} 659 | 660 | es-to-primitive@1.3.0: 661 | resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} 662 | engines: {node: '>= 0.4'} 663 | 664 | escape-string-regexp@1.0.5: 665 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 666 | engines: {node: '>=0.8.0'} 667 | 668 | escape-string-regexp@4.0.0: 669 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 670 | engines: {node: '>=10'} 671 | 672 | eslint-scope@8.4.0: 673 | resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} 674 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 675 | 676 | eslint-visitor-keys@3.4.3: 677 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 678 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 679 | 680 | eslint-visitor-keys@4.2.1: 681 | resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} 682 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 683 | 684 | eslint@9.28.0: 685 | resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==} 686 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 687 | hasBin: true 688 | peerDependencies: 689 | jiti: '*' 690 | peerDependenciesMeta: 691 | jiti: 692 | optional: true 693 | 694 | espree@10.4.0: 695 | resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} 696 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 697 | 698 | esquery@1.6.0: 699 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 700 | engines: {node: '>=0.10'} 701 | 702 | esrecurse@4.3.0: 703 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 704 | engines: {node: '>=4.0'} 705 | 706 | estraverse@5.3.0: 707 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 708 | engines: {node: '>=4.0'} 709 | 710 | esutils@2.0.3: 711 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 712 | engines: {node: '>=0.10.0'} 713 | 714 | event-stream@3.3.4: 715 | resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} 716 | 717 | execa@5.1.1: 718 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 719 | engines: {node: '>=10'} 720 | 721 | fast-deep-equal@3.1.3: 722 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 723 | 724 | fast-json-stable-stringify@2.1.0: 725 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 726 | 727 | fast-levenshtein@2.0.6: 728 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 729 | 730 | file-entry-cache@8.0.0: 731 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 732 | engines: {node: '>=16.0.0'} 733 | 734 | find-up@5.0.0: 735 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 736 | engines: {node: '>=10'} 737 | 738 | flat-cache@4.0.1: 739 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 740 | engines: {node: '>=16'} 741 | 742 | flatted@3.3.3: 743 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 744 | 745 | follow-redirects@1.15.9: 746 | resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} 747 | engines: {node: '>=4.0'} 748 | peerDependencies: 749 | debug: '*' 750 | peerDependenciesMeta: 751 | debug: 752 | optional: true 753 | 754 | for-each@0.3.5: 755 | resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} 756 | engines: {node: '>= 0.4'} 757 | 758 | form-data@4.0.3: 759 | resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==} 760 | engines: {node: '>= 6'} 761 | 762 | from@0.1.7: 763 | resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} 764 | 765 | fsevents@2.3.2: 766 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 767 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 768 | os: [darwin] 769 | 770 | function-bind@1.1.2: 771 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 772 | 773 | function.prototype.name@1.1.8: 774 | resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} 775 | engines: {node: '>= 0.4'} 776 | 777 | functions-have-names@1.2.3: 778 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 779 | 780 | get-intrinsic@1.3.0: 781 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 782 | engines: {node: '>= 0.4'} 783 | 784 | get-proto@1.0.1: 785 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 786 | engines: {node: '>= 0.4'} 787 | 788 | get-stream@6.0.1: 789 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 790 | engines: {node: '>=10'} 791 | 792 | get-symbol-description@1.1.0: 793 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} 794 | engines: {node: '>= 0.4'} 795 | 796 | glob-parent@6.0.2: 797 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 798 | engines: {node: '>=10.13.0'} 799 | 800 | globals@14.0.0: 801 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 802 | engines: {node: '>=18'} 803 | 804 | globalthis@1.0.4: 805 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 806 | engines: {node: '>= 0.4'} 807 | 808 | gopd@1.2.0: 809 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 810 | engines: {node: '>= 0.4'} 811 | 812 | graceful-fs@4.2.11: 813 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 814 | 815 | has-bigints@1.1.0: 816 | resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} 817 | engines: {node: '>= 0.4'} 818 | 819 | has-flag@3.0.0: 820 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 821 | engines: {node: '>=4'} 822 | 823 | has-flag@4.0.0: 824 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 825 | engines: {node: '>=8'} 826 | 827 | has-property-descriptors@1.0.2: 828 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 829 | 830 | has-proto@1.2.0: 831 | resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} 832 | engines: {node: '>= 0.4'} 833 | 834 | has-symbols@1.1.0: 835 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 836 | engines: {node: '>= 0.4'} 837 | 838 | has-tostringtag@1.0.2: 839 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 840 | engines: {node: '>= 0.4'} 841 | 842 | hasown@2.0.2: 843 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 844 | engines: {node: '>= 0.4'} 845 | 846 | hosted-git-info@2.8.9: 847 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 848 | 849 | human-signals@2.1.0: 850 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 851 | engines: {node: '>=10.17.0'} 852 | 853 | ignore@5.3.2: 854 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 855 | engines: {node: '>= 4'} 856 | 857 | import-fresh@3.3.1: 858 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 859 | engines: {node: '>=6'} 860 | 861 | imurmurhash@0.1.4: 862 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 863 | engines: {node: '>=0.8.19'} 864 | 865 | internal-slot@1.1.0: 866 | resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} 867 | engines: {node: '>= 0.4'} 868 | 869 | is-array-buffer@3.0.5: 870 | resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} 871 | engines: {node: '>= 0.4'} 872 | 873 | is-arrayish@0.2.1: 874 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 875 | 876 | is-arrayish@0.3.2: 877 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 878 | 879 | is-async-function@2.1.1: 880 | resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} 881 | engines: {node: '>= 0.4'} 882 | 883 | is-bigint@1.1.0: 884 | resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} 885 | engines: {node: '>= 0.4'} 886 | 887 | is-boolean-object@1.2.2: 888 | resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} 889 | engines: {node: '>= 0.4'} 890 | 891 | is-callable@1.2.7: 892 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 893 | engines: {node: '>= 0.4'} 894 | 895 | is-core-module@2.16.1: 896 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 897 | engines: {node: '>= 0.4'} 898 | 899 | is-data-view@1.0.2: 900 | resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} 901 | engines: {node: '>= 0.4'} 902 | 903 | is-date-object@1.1.0: 904 | resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} 905 | engines: {node: '>= 0.4'} 906 | 907 | is-extglob@2.1.1: 908 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 909 | engines: {node: '>=0.10.0'} 910 | 911 | is-finalizationregistry@1.1.1: 912 | resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 913 | engines: {node: '>= 0.4'} 914 | 915 | is-generator-function@1.1.0: 916 | resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} 917 | engines: {node: '>= 0.4'} 918 | 919 | is-glob@4.0.3: 920 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 921 | engines: {node: '>=0.10.0'} 922 | 923 | is-map@2.0.3: 924 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 925 | engines: {node: '>= 0.4'} 926 | 927 | is-negative-zero@2.0.3: 928 | resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 929 | engines: {node: '>= 0.4'} 930 | 931 | is-number-object@1.1.1: 932 | resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} 933 | engines: {node: '>= 0.4'} 934 | 935 | is-regex@1.2.1: 936 | resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} 937 | engines: {node: '>= 0.4'} 938 | 939 | is-set@2.0.3: 940 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 941 | engines: {node: '>= 0.4'} 942 | 943 | is-shared-array-buffer@1.0.4: 944 | resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} 945 | engines: {node: '>= 0.4'} 946 | 947 | is-stream@2.0.1: 948 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 949 | engines: {node: '>=8'} 950 | 951 | is-string@1.1.1: 952 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} 953 | engines: {node: '>= 0.4'} 954 | 955 | is-symbol@1.1.1: 956 | resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} 957 | engines: {node: '>= 0.4'} 958 | 959 | is-typed-array@1.1.15: 960 | resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} 961 | engines: {node: '>= 0.4'} 962 | 963 | is-weakmap@2.0.2: 964 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 965 | engines: {node: '>= 0.4'} 966 | 967 | is-weakref@1.1.1: 968 | resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} 969 | engines: {node: '>= 0.4'} 970 | 971 | is-weakset@2.0.4: 972 | resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} 973 | engines: {node: '>= 0.4'} 974 | 975 | is-what@4.1.16: 976 | resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 977 | engines: {node: '>=12.13'} 978 | 979 | isarray@2.0.5: 980 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 981 | 982 | isexe@2.0.0: 983 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 984 | 985 | jiti@2.4.2: 986 | resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} 987 | hasBin: true 988 | 989 | joi@17.13.3: 990 | resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} 991 | 992 | js-yaml@4.1.0: 993 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 994 | hasBin: true 995 | 996 | json-buffer@3.0.1: 997 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 998 | 999 | json-parse-better-errors@1.0.2: 1000 | resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} 1001 | 1002 | json-schema-traverse@0.4.1: 1003 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1004 | 1005 | json-stable-stringify-without-jsonify@1.0.1: 1006 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1007 | 1008 | keyv@4.5.4: 1009 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1010 | 1011 | lazy-ass@1.6.0: 1012 | resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} 1013 | engines: {node: '> 0.8'} 1014 | 1015 | levn@0.4.1: 1016 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1017 | engines: {node: '>= 0.8.0'} 1018 | 1019 | load-json-file@4.0.0: 1020 | resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} 1021 | engines: {node: '>=4'} 1022 | 1023 | locate-path@6.0.0: 1024 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1025 | engines: {node: '>=10'} 1026 | 1027 | lodash.merge@4.6.2: 1028 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1029 | 1030 | lodash@4.17.21: 1031 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1032 | 1033 | map-stream@0.1.0: 1034 | resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} 1035 | 1036 | math-intrinsics@1.1.0: 1037 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1038 | engines: {node: '>= 0.4'} 1039 | 1040 | memorystream@0.3.1: 1041 | resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} 1042 | engines: {node: '>= 0.10.0'} 1043 | 1044 | merge-stream@2.0.0: 1045 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1046 | 1047 | mime-db@1.52.0: 1048 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1049 | engines: {node: '>= 0.6'} 1050 | 1051 | mime-types@2.1.35: 1052 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1053 | engines: {node: '>= 0.6'} 1054 | 1055 | mimic-fn@2.1.0: 1056 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1057 | engines: {node: '>=6'} 1058 | 1059 | minimatch@3.1.2: 1060 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1061 | 1062 | minimist@1.2.8: 1063 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1064 | 1065 | ms@2.1.2: 1066 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1067 | 1068 | ms@2.1.3: 1069 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1070 | 1071 | nanoid@3.3.11: 1072 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1073 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1074 | hasBin: true 1075 | 1076 | natural-compare@1.4.0: 1077 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1078 | 1079 | next@15.3.3: 1080 | resolution: {integrity: sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==} 1081 | engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} 1082 | hasBin: true 1083 | peerDependencies: 1084 | '@opentelemetry/api': ^1.1.0 1085 | '@playwright/test': ^1.41.2 1086 | babel-plugin-react-compiler: '*' 1087 | react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 1088 | react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 1089 | sass: ^1.3.0 1090 | peerDependenciesMeta: 1091 | '@opentelemetry/api': 1092 | optional: true 1093 | '@playwright/test': 1094 | optional: true 1095 | babel-plugin-react-compiler: 1096 | optional: true 1097 | sass: 1098 | optional: true 1099 | 1100 | nice-try@1.0.5: 1101 | resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} 1102 | 1103 | normalize-package-data@2.5.0: 1104 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1105 | 1106 | npm-run-all@4.1.5: 1107 | resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} 1108 | engines: {node: '>= 4'} 1109 | hasBin: true 1110 | 1111 | npm-run-path@4.0.1: 1112 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1113 | engines: {node: '>=8'} 1114 | 1115 | object-inspect@1.13.4: 1116 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 1117 | engines: {node: '>= 0.4'} 1118 | 1119 | object-keys@1.1.1: 1120 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1121 | engines: {node: '>= 0.4'} 1122 | 1123 | object.assign@4.1.7: 1124 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} 1125 | engines: {node: '>= 0.4'} 1126 | 1127 | onetime@5.1.2: 1128 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1129 | engines: {node: '>=6'} 1130 | 1131 | optionator@0.9.4: 1132 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1133 | engines: {node: '>= 0.8.0'} 1134 | 1135 | own-keys@1.0.1: 1136 | resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} 1137 | engines: {node: '>= 0.4'} 1138 | 1139 | p-limit@3.1.0: 1140 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1141 | engines: {node: '>=10'} 1142 | 1143 | p-locate@5.0.0: 1144 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1145 | engines: {node: '>=10'} 1146 | 1147 | parent-module@1.0.1: 1148 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1149 | engines: {node: '>=6'} 1150 | 1151 | parse-json@4.0.0: 1152 | resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} 1153 | engines: {node: '>=4'} 1154 | 1155 | path-exists@4.0.0: 1156 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1157 | engines: {node: '>=8'} 1158 | 1159 | path-key@2.0.1: 1160 | resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} 1161 | engines: {node: '>=4'} 1162 | 1163 | path-key@3.1.1: 1164 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1165 | engines: {node: '>=8'} 1166 | 1167 | path-parse@1.0.7: 1168 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1169 | 1170 | path-type@3.0.0: 1171 | resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} 1172 | engines: {node: '>=4'} 1173 | 1174 | pause-stream@0.0.11: 1175 | resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} 1176 | 1177 | picocolors@1.1.1: 1178 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1179 | 1180 | pidtree@0.3.1: 1181 | resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} 1182 | engines: {node: '>=0.10'} 1183 | hasBin: true 1184 | 1185 | pify@3.0.0: 1186 | resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} 1187 | engines: {node: '>=4'} 1188 | 1189 | playwright-core@1.53.0: 1190 | resolution: {integrity: sha512-mGLg8m0pm4+mmtB7M89Xw/GSqoNC+twivl8ITteqvAndachozYe2ZA7srU6uleV1vEdAHYqjq+SV8SNxRRFYBw==} 1191 | engines: {node: '>=18'} 1192 | hasBin: true 1193 | 1194 | playwright@1.53.0: 1195 | resolution: {integrity: sha512-ghGNnIEYZC4E+YtclRn4/p6oYbdPiASELBIYkBXfaTVKreQUYbMUYQDwS12a8F0/HtIjr/CkGjtwABeFPGcS4Q==} 1196 | engines: {node: '>=18'} 1197 | hasBin: true 1198 | 1199 | possible-typed-array-names@1.1.0: 1200 | resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} 1201 | engines: {node: '>= 0.4'} 1202 | 1203 | postcss@8.4.31: 1204 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 1205 | engines: {node: ^10 || ^12 || >=14} 1206 | 1207 | prelude-ls@1.2.1: 1208 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1209 | engines: {node: '>= 0.8.0'} 1210 | 1211 | prisma@6.9.0: 1212 | resolution: {integrity: sha512-resJAwMyZREC/I40LF6FZ6rZTnlrlrYrb63oW37Gq+U+9xHwbyMSPJjKtM7VZf3gTO86t/Oyz+YeSXr3CmAY1Q==} 1213 | engines: {node: '>=18.18'} 1214 | hasBin: true 1215 | peerDependencies: 1216 | typescript: '>=5.1.0' 1217 | peerDependenciesMeta: 1218 | typescript: 1219 | optional: true 1220 | 1221 | ps-tree@1.2.0: 1222 | resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} 1223 | engines: {node: '>= 0.10'} 1224 | hasBin: true 1225 | 1226 | punycode@2.3.1: 1227 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1228 | engines: {node: '>=6'} 1229 | 1230 | react-dom@19.1.0: 1231 | resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} 1232 | peerDependencies: 1233 | react: ^19.1.0 1234 | 1235 | react@19.1.0: 1236 | resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} 1237 | engines: {node: '>=0.10.0'} 1238 | 1239 | read-pkg@3.0.0: 1240 | resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} 1241 | engines: {node: '>=4'} 1242 | 1243 | reflect.getprototypeof@1.0.10: 1244 | resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} 1245 | engines: {node: '>= 0.4'} 1246 | 1247 | regexp.prototype.flags@1.5.4: 1248 | resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} 1249 | engines: {node: '>= 0.4'} 1250 | 1251 | resolve-from@4.0.0: 1252 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1253 | engines: {node: '>=4'} 1254 | 1255 | resolve@1.22.10: 1256 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1257 | engines: {node: '>= 0.4'} 1258 | hasBin: true 1259 | 1260 | rxjs@7.8.2: 1261 | resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} 1262 | 1263 | safe-array-concat@1.1.3: 1264 | resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} 1265 | engines: {node: '>=0.4'} 1266 | 1267 | safe-push-apply@1.0.0: 1268 | resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} 1269 | engines: {node: '>= 0.4'} 1270 | 1271 | safe-regex-test@1.1.0: 1272 | resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} 1273 | engines: {node: '>= 0.4'} 1274 | 1275 | scheduler@0.26.0: 1276 | resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} 1277 | 1278 | semver@5.7.2: 1279 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1280 | hasBin: true 1281 | 1282 | semver@7.7.2: 1283 | resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} 1284 | engines: {node: '>=10'} 1285 | hasBin: true 1286 | 1287 | set-function-length@1.2.2: 1288 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1289 | engines: {node: '>= 0.4'} 1290 | 1291 | set-function-name@2.0.2: 1292 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1293 | engines: {node: '>= 0.4'} 1294 | 1295 | set-proto@1.0.0: 1296 | resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} 1297 | engines: {node: '>= 0.4'} 1298 | 1299 | sharp@0.34.2: 1300 | resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==} 1301 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1302 | 1303 | shebang-command@1.2.0: 1304 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 1305 | engines: {node: '>=0.10.0'} 1306 | 1307 | shebang-command@2.0.0: 1308 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1309 | engines: {node: '>=8'} 1310 | 1311 | shebang-regex@1.0.0: 1312 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 1313 | engines: {node: '>=0.10.0'} 1314 | 1315 | shebang-regex@3.0.0: 1316 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1317 | engines: {node: '>=8'} 1318 | 1319 | shell-quote@1.8.3: 1320 | resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} 1321 | engines: {node: '>= 0.4'} 1322 | 1323 | side-channel-list@1.0.0: 1324 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1325 | engines: {node: '>= 0.4'} 1326 | 1327 | side-channel-map@1.0.1: 1328 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1329 | engines: {node: '>= 0.4'} 1330 | 1331 | side-channel-weakmap@1.0.2: 1332 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1333 | engines: {node: '>= 0.4'} 1334 | 1335 | side-channel@1.1.0: 1336 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1337 | engines: {node: '>= 0.4'} 1338 | 1339 | signal-exit@3.0.7: 1340 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1341 | 1342 | simple-swizzle@0.2.2: 1343 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 1344 | 1345 | source-map-js@1.2.1: 1346 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1347 | engines: {node: '>=0.10.0'} 1348 | 1349 | spdx-correct@3.2.0: 1350 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 1351 | 1352 | spdx-exceptions@2.5.0: 1353 | resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} 1354 | 1355 | spdx-expression-parse@3.0.1: 1356 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1357 | 1358 | spdx-license-ids@3.0.21: 1359 | resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} 1360 | 1361 | split@0.3.3: 1362 | resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} 1363 | 1364 | start-server-and-test@1.15.5: 1365 | resolution: {integrity: sha512-o3EmkX0++GV+qsvIJ/OKWm3w91fD8uS/bPQVPrh/7loaxkpXSuAIHdnmN/P/regQK9eNAK76aBJcHt+OSTk+nA==} 1366 | engines: {node: '>=6'} 1367 | deprecated: this package has been deprecated 1368 | hasBin: true 1369 | 1370 | stop-iteration-iterator@1.1.0: 1371 | resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} 1372 | engines: {node: '>= 0.4'} 1373 | 1374 | stream-combiner@0.0.4: 1375 | resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} 1376 | 1377 | streamsearch@1.1.0: 1378 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 1379 | engines: {node: '>=10.0.0'} 1380 | 1381 | string.prototype.padend@3.1.6: 1382 | resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} 1383 | engines: {node: '>= 0.4'} 1384 | 1385 | string.prototype.trim@1.2.10: 1386 | resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} 1387 | engines: {node: '>= 0.4'} 1388 | 1389 | string.prototype.trimend@1.0.9: 1390 | resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} 1391 | engines: {node: '>= 0.4'} 1392 | 1393 | string.prototype.trimstart@1.0.8: 1394 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1395 | engines: {node: '>= 0.4'} 1396 | 1397 | strip-bom@3.0.0: 1398 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1399 | engines: {node: '>=4'} 1400 | 1401 | strip-final-newline@2.0.0: 1402 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1403 | engines: {node: '>=6'} 1404 | 1405 | strip-json-comments@3.1.1: 1406 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1407 | engines: {node: '>=8'} 1408 | 1409 | styled-jsx@5.1.6: 1410 | resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} 1411 | engines: {node: '>= 12.0.0'} 1412 | peerDependencies: 1413 | '@babel/core': '*' 1414 | babel-plugin-macros: '*' 1415 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' 1416 | peerDependenciesMeta: 1417 | '@babel/core': 1418 | optional: true 1419 | babel-plugin-macros: 1420 | optional: true 1421 | 1422 | superjson@1.13.3: 1423 | resolution: {integrity: sha512-mJiVjfd2vokfDxsQPOwJ/PtanO87LhpYY88ubI5dUB1Ab58Txbyje3+jpm+/83R/fevaq/107NNhtYBLuoTrFg==} 1424 | engines: {node: '>=10'} 1425 | 1426 | supports-color@5.5.0: 1427 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1428 | engines: {node: '>=4'} 1429 | 1430 | supports-color@7.2.0: 1431 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1432 | engines: {node: '>=8'} 1433 | 1434 | supports-preserve-symlinks-flag@1.0.0: 1435 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1436 | engines: {node: '>= 0.4'} 1437 | 1438 | through@2.3.8: 1439 | resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} 1440 | 1441 | todomvc-app-css@2.4.3: 1442 | resolution: {integrity: sha512-mSnWZaKBWj9aQcFRsGguY/a8O8NR8GmecD48yU1rzwNemgZa/INLpIsxxMiToFGVth+uEKBrQ7IhWkaXZxwq5Q==} 1443 | engines: {node: '>=4'} 1444 | 1445 | todomvc-common@1.0.5: 1446 | resolution: {integrity: sha512-D8kEJmxVMQIWwztEdH+WeiAfXRbbSCpgXq4NkYi+gduJ2tr8CNq7sYLfJvjpQ10KD9QxJwig57rvMbV2QAESwQ==} 1447 | 1448 | tslib@2.8.1: 1449 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1450 | 1451 | type-check@0.4.0: 1452 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1453 | engines: {node: '>= 0.8.0'} 1454 | 1455 | typed-array-buffer@1.0.3: 1456 | resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} 1457 | engines: {node: '>= 0.4'} 1458 | 1459 | typed-array-byte-length@1.0.3: 1460 | resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} 1461 | engines: {node: '>= 0.4'} 1462 | 1463 | typed-array-byte-offset@1.0.4: 1464 | resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} 1465 | engines: {node: '>= 0.4'} 1466 | 1467 | typed-array-length@1.0.7: 1468 | resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 1469 | engines: {node: '>= 0.4'} 1470 | 1471 | typescript@5.8.3: 1472 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 1473 | engines: {node: '>=14.17'} 1474 | hasBin: true 1475 | 1476 | unbox-primitive@1.1.0: 1477 | resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} 1478 | engines: {node: '>= 0.4'} 1479 | 1480 | undici-types@6.21.0: 1481 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 1482 | 1483 | uri-js@4.4.1: 1484 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1485 | 1486 | validate-npm-package-license@3.0.4: 1487 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1488 | 1489 | wait-on@7.0.1: 1490 | resolution: {integrity: sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==} 1491 | engines: {node: '>=12.0.0'} 1492 | hasBin: true 1493 | 1494 | which-boxed-primitive@1.1.1: 1495 | resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} 1496 | engines: {node: '>= 0.4'} 1497 | 1498 | which-builtin-type@1.2.1: 1499 | resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} 1500 | engines: {node: '>= 0.4'} 1501 | 1502 | which-collection@1.0.2: 1503 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1504 | engines: {node: '>= 0.4'} 1505 | 1506 | which-typed-array@1.1.19: 1507 | resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} 1508 | engines: {node: '>= 0.4'} 1509 | 1510 | which@1.3.1: 1511 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 1512 | hasBin: true 1513 | 1514 | which@2.0.2: 1515 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1516 | engines: {node: '>= 8'} 1517 | hasBin: true 1518 | 1519 | word-wrap@1.2.5: 1520 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1521 | engines: {node: '>=0.10.0'} 1522 | 1523 | yocto-queue@0.1.0: 1524 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1525 | engines: {node: '>=10'} 1526 | 1527 | zod@3.25.64: 1528 | resolution: {integrity: sha512-hbP9FpSZf7pkS7hRVUrOjhwKJNyampPgtXKc3AN6DsWtoHsg2Sb4SQaS4Tcay380zSwd2VPo9G9180emBACp5g==} 1529 | 1530 | snapshots: 1531 | 1532 | '@emnapi/runtime@1.4.3': 1533 | dependencies: 1534 | tslib: 2.8.1 1535 | optional: true 1536 | 1537 | '@eslint-community/eslint-utils@4.7.0(eslint@9.28.0(jiti@2.4.2))': 1538 | dependencies: 1539 | eslint: 9.28.0(jiti@2.4.2) 1540 | eslint-visitor-keys: 3.4.3 1541 | 1542 | '@eslint-community/regexpp@4.12.1': {} 1543 | 1544 | '@eslint/config-array@0.20.1': 1545 | dependencies: 1546 | '@eslint/object-schema': 2.1.6 1547 | debug: 4.4.1 1548 | minimatch: 3.1.2 1549 | transitivePeerDependencies: 1550 | - supports-color 1551 | 1552 | '@eslint/config-helpers@0.2.3': {} 1553 | 1554 | '@eslint/core@0.14.0': 1555 | dependencies: 1556 | '@types/json-schema': 7.0.15 1557 | 1558 | '@eslint/core@0.15.0': 1559 | dependencies: 1560 | '@types/json-schema': 7.0.15 1561 | 1562 | '@eslint/eslintrc@3.3.1': 1563 | dependencies: 1564 | ajv: 6.12.6 1565 | debug: 4.4.1 1566 | espree: 10.4.0 1567 | globals: 14.0.0 1568 | ignore: 5.3.2 1569 | import-fresh: 3.3.1 1570 | js-yaml: 4.1.0 1571 | minimatch: 3.1.2 1572 | strip-json-comments: 3.1.1 1573 | transitivePeerDependencies: 1574 | - supports-color 1575 | 1576 | '@eslint/js@9.28.0': {} 1577 | 1578 | '@eslint/object-schema@2.1.6': {} 1579 | 1580 | '@eslint/plugin-kit@0.3.2': 1581 | dependencies: 1582 | '@eslint/core': 0.15.0 1583 | levn: 0.4.1 1584 | 1585 | '@hapi/hoek@9.3.0': {} 1586 | 1587 | '@hapi/topo@5.1.0': 1588 | dependencies: 1589 | '@hapi/hoek': 9.3.0 1590 | 1591 | '@humanfs/core@0.19.1': {} 1592 | 1593 | '@humanfs/node@0.16.6': 1594 | dependencies: 1595 | '@humanfs/core': 0.19.1 1596 | '@humanwhocodes/retry': 0.3.1 1597 | 1598 | '@humanwhocodes/module-importer@1.0.1': {} 1599 | 1600 | '@humanwhocodes/retry@0.3.1': {} 1601 | 1602 | '@humanwhocodes/retry@0.4.3': {} 1603 | 1604 | '@img/sharp-darwin-arm64@0.34.2': 1605 | optionalDependencies: 1606 | '@img/sharp-libvips-darwin-arm64': 1.1.0 1607 | optional: true 1608 | 1609 | '@img/sharp-darwin-x64@0.34.2': 1610 | optionalDependencies: 1611 | '@img/sharp-libvips-darwin-x64': 1.1.0 1612 | optional: true 1613 | 1614 | '@img/sharp-libvips-darwin-arm64@1.1.0': 1615 | optional: true 1616 | 1617 | '@img/sharp-libvips-darwin-x64@1.1.0': 1618 | optional: true 1619 | 1620 | '@img/sharp-libvips-linux-arm64@1.1.0': 1621 | optional: true 1622 | 1623 | '@img/sharp-libvips-linux-arm@1.1.0': 1624 | optional: true 1625 | 1626 | '@img/sharp-libvips-linux-ppc64@1.1.0': 1627 | optional: true 1628 | 1629 | '@img/sharp-libvips-linux-s390x@1.1.0': 1630 | optional: true 1631 | 1632 | '@img/sharp-libvips-linux-x64@1.1.0': 1633 | optional: true 1634 | 1635 | '@img/sharp-libvips-linuxmusl-arm64@1.1.0': 1636 | optional: true 1637 | 1638 | '@img/sharp-libvips-linuxmusl-x64@1.1.0': 1639 | optional: true 1640 | 1641 | '@img/sharp-linux-arm64@0.34.2': 1642 | optionalDependencies: 1643 | '@img/sharp-libvips-linux-arm64': 1.1.0 1644 | optional: true 1645 | 1646 | '@img/sharp-linux-arm@0.34.2': 1647 | optionalDependencies: 1648 | '@img/sharp-libvips-linux-arm': 1.1.0 1649 | optional: true 1650 | 1651 | '@img/sharp-linux-s390x@0.34.2': 1652 | optionalDependencies: 1653 | '@img/sharp-libvips-linux-s390x': 1.1.0 1654 | optional: true 1655 | 1656 | '@img/sharp-linux-x64@0.34.2': 1657 | optionalDependencies: 1658 | '@img/sharp-libvips-linux-x64': 1.1.0 1659 | optional: true 1660 | 1661 | '@img/sharp-linuxmusl-arm64@0.34.2': 1662 | optionalDependencies: 1663 | '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 1664 | optional: true 1665 | 1666 | '@img/sharp-linuxmusl-x64@0.34.2': 1667 | optionalDependencies: 1668 | '@img/sharp-libvips-linuxmusl-x64': 1.1.0 1669 | optional: true 1670 | 1671 | '@img/sharp-wasm32@0.34.2': 1672 | dependencies: 1673 | '@emnapi/runtime': 1.4.3 1674 | optional: true 1675 | 1676 | '@img/sharp-win32-arm64@0.34.2': 1677 | optional: true 1678 | 1679 | '@img/sharp-win32-ia32@0.34.2': 1680 | optional: true 1681 | 1682 | '@img/sharp-win32-x64@0.34.2': 1683 | optional: true 1684 | 1685 | '@next/env@15.3.3': {} 1686 | 1687 | '@next/swc-darwin-arm64@15.3.3': 1688 | optional: true 1689 | 1690 | '@next/swc-darwin-x64@15.3.3': 1691 | optional: true 1692 | 1693 | '@next/swc-linux-arm64-gnu@15.3.3': 1694 | optional: true 1695 | 1696 | '@next/swc-linux-arm64-musl@15.3.3': 1697 | optional: true 1698 | 1699 | '@next/swc-linux-x64-gnu@15.3.3': 1700 | optional: true 1701 | 1702 | '@next/swc-linux-x64-musl@15.3.3': 1703 | optional: true 1704 | 1705 | '@next/swc-win32-arm64-msvc@15.3.3': 1706 | optional: true 1707 | 1708 | '@next/swc-win32-x64-msvc@15.3.3': 1709 | optional: true 1710 | 1711 | '@playwright/test@1.53.0': 1712 | dependencies: 1713 | playwright: 1.53.0 1714 | 1715 | '@prisma/client@6.9.0(prisma@6.9.0(typescript@5.8.3))(typescript@5.8.3)': 1716 | optionalDependencies: 1717 | prisma: 6.9.0(typescript@5.8.3) 1718 | typescript: 5.8.3 1719 | 1720 | '@prisma/config@6.9.0': 1721 | dependencies: 1722 | jiti: 2.4.2 1723 | 1724 | '@prisma/debug@6.9.0': {} 1725 | 1726 | '@prisma/engines-version@6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e': {} 1727 | 1728 | '@prisma/engines@6.9.0': 1729 | dependencies: 1730 | '@prisma/debug': 6.9.0 1731 | '@prisma/engines-version': 6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e 1732 | '@prisma/fetch-engine': 6.9.0 1733 | '@prisma/get-platform': 6.9.0 1734 | 1735 | '@prisma/fetch-engine@6.9.0': 1736 | dependencies: 1737 | '@prisma/debug': 6.9.0 1738 | '@prisma/engines-version': 6.9.0-10.81e4af48011447c3cc503a190e86995b66d2a28e 1739 | '@prisma/get-platform': 6.9.0 1740 | 1741 | '@prisma/get-platform@6.9.0': 1742 | dependencies: 1743 | '@prisma/debug': 6.9.0 1744 | 1745 | '@sideway/address@4.1.5': 1746 | dependencies: 1747 | '@hapi/hoek': 9.3.0 1748 | 1749 | '@sideway/formula@3.0.1': {} 1750 | 1751 | '@sideway/pinpoint@2.0.0': {} 1752 | 1753 | '@swc/counter@0.1.3': {} 1754 | 1755 | '@swc/helpers@0.5.15': 1756 | dependencies: 1757 | tslib: 2.8.1 1758 | 1759 | '@tanstack/query-core@5.80.7': {} 1760 | 1761 | '@tanstack/query-devtools@5.80.0': {} 1762 | 1763 | '@tanstack/react-query-devtools@5.80.7(@tanstack/react-query@5.80.7(react@19.1.0))(react@19.1.0)': 1764 | dependencies: 1765 | '@tanstack/query-devtools': 5.80.0 1766 | '@tanstack/react-query': 5.80.7(react@19.1.0) 1767 | react: 19.1.0 1768 | 1769 | '@tanstack/react-query@5.80.7(react@19.1.0)': 1770 | dependencies: 1771 | '@tanstack/query-core': 5.80.7 1772 | react: 19.1.0 1773 | 1774 | '@trpc/client@11.3.2-canary.4(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(typescript@5.8.3)': 1775 | dependencies: 1776 | '@trpc/server': 11.3.2-canary.4(typescript@5.8.3) 1777 | typescript: 5.8.3 1778 | 1779 | '@trpc/next@11.3.2-canary.4(@tanstack/react-query@5.80.7(react@19.1.0))(@trpc/client@11.3.2-canary.4(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/react-query@11.3.2-canary.4(@tanstack/react-query@5.80.7(react@19.1.0))(@trpc/client@11.3.2-canary.4(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3))(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(next@15.3.3(@playwright/test@1.53.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': 1780 | dependencies: 1781 | '@trpc/client': 11.3.2-canary.4(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(typescript@5.8.3) 1782 | '@trpc/server': 11.3.2-canary.4(typescript@5.8.3) 1783 | next: 15.3.3(@playwright/test@1.53.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) 1784 | react: 19.1.0 1785 | react-dom: 19.1.0(react@19.1.0) 1786 | typescript: 5.8.3 1787 | optionalDependencies: 1788 | '@tanstack/react-query': 5.80.7(react@19.1.0) 1789 | '@trpc/react-query': 11.3.2-canary.4(@tanstack/react-query@5.80.7(react@19.1.0))(@trpc/client@11.3.2-canary.4(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) 1790 | 1791 | '@trpc/react-query@11.3.2-canary.4(@tanstack/react-query@5.80.7(react@19.1.0))(@trpc/client@11.3.2-canary.4(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': 1792 | dependencies: 1793 | '@tanstack/react-query': 5.80.7(react@19.1.0) 1794 | '@trpc/client': 11.3.2-canary.4(@trpc/server@11.3.2-canary.4(typescript@5.8.3))(typescript@5.8.3) 1795 | '@trpc/server': 11.3.2-canary.4(typescript@5.8.3) 1796 | react: 19.1.0 1797 | react-dom: 19.1.0(react@19.1.0) 1798 | typescript: 5.8.3 1799 | 1800 | '@trpc/server@11.3.2-canary.4(typescript@5.8.3)': 1801 | dependencies: 1802 | typescript: 5.8.3 1803 | 1804 | '@types/estree@1.0.8': {} 1805 | 1806 | '@types/json-schema@7.0.15': {} 1807 | 1808 | '@types/node@22.15.31': 1809 | dependencies: 1810 | undici-types: 6.21.0 1811 | 1812 | '@types/react@19.1.8': 1813 | dependencies: 1814 | csstype: 3.1.3 1815 | 1816 | acorn-jsx@5.3.2(acorn@8.15.0): 1817 | dependencies: 1818 | acorn: 8.15.0 1819 | 1820 | acorn@8.15.0: {} 1821 | 1822 | ajv@6.12.6: 1823 | dependencies: 1824 | fast-deep-equal: 3.1.3 1825 | fast-json-stable-stringify: 2.1.0 1826 | json-schema-traverse: 0.4.1 1827 | uri-js: 4.4.1 1828 | 1829 | ansi-styles@3.2.1: 1830 | dependencies: 1831 | color-convert: 1.9.3 1832 | 1833 | ansi-styles@4.3.0: 1834 | dependencies: 1835 | color-convert: 2.0.1 1836 | 1837 | arg@5.0.2: {} 1838 | 1839 | argparse@2.0.1: {} 1840 | 1841 | array-buffer-byte-length@1.0.2: 1842 | dependencies: 1843 | call-bound: 1.0.4 1844 | is-array-buffer: 3.0.5 1845 | 1846 | arraybuffer.prototype.slice@1.0.4: 1847 | dependencies: 1848 | array-buffer-byte-length: 1.0.2 1849 | call-bind: 1.0.8 1850 | define-properties: 1.2.1 1851 | es-abstract: 1.24.0 1852 | es-errors: 1.3.0 1853 | get-intrinsic: 1.3.0 1854 | is-array-buffer: 3.0.5 1855 | 1856 | async-function@1.0.0: {} 1857 | 1858 | asynckit@0.4.0: {} 1859 | 1860 | available-typed-arrays@1.0.7: 1861 | dependencies: 1862 | possible-typed-array-names: 1.1.0 1863 | 1864 | axios@0.27.2(debug@4.3.4): 1865 | dependencies: 1866 | follow-redirects: 1.15.9(debug@4.3.4) 1867 | form-data: 4.0.3 1868 | transitivePeerDependencies: 1869 | - debug 1870 | 1871 | balanced-match@1.0.2: {} 1872 | 1873 | bluebird@3.7.2: {} 1874 | 1875 | brace-expansion@1.1.12: 1876 | dependencies: 1877 | balanced-match: 1.0.2 1878 | concat-map: 0.0.1 1879 | 1880 | busboy@1.6.0: 1881 | dependencies: 1882 | streamsearch: 1.1.0 1883 | 1884 | call-bind-apply-helpers@1.0.2: 1885 | dependencies: 1886 | es-errors: 1.3.0 1887 | function-bind: 1.1.2 1888 | 1889 | call-bind@1.0.8: 1890 | dependencies: 1891 | call-bind-apply-helpers: 1.0.2 1892 | es-define-property: 1.0.1 1893 | get-intrinsic: 1.3.0 1894 | set-function-length: 1.2.2 1895 | 1896 | call-bound@1.0.4: 1897 | dependencies: 1898 | call-bind-apply-helpers: 1.0.2 1899 | get-intrinsic: 1.3.0 1900 | 1901 | callsites@3.1.0: {} 1902 | 1903 | caniuse-lite@1.0.30001723: {} 1904 | 1905 | chalk@2.4.2: 1906 | dependencies: 1907 | ansi-styles: 3.2.1 1908 | escape-string-regexp: 1.0.5 1909 | supports-color: 5.5.0 1910 | 1911 | chalk@4.1.2: 1912 | dependencies: 1913 | ansi-styles: 4.3.0 1914 | supports-color: 7.2.0 1915 | 1916 | check-more-types@2.24.0: {} 1917 | 1918 | client-only@0.0.1: {} 1919 | 1920 | clsx@2.1.1: {} 1921 | 1922 | color-convert@1.9.3: 1923 | dependencies: 1924 | color-name: 1.1.3 1925 | 1926 | color-convert@2.0.1: 1927 | dependencies: 1928 | color-name: 1.1.4 1929 | 1930 | color-name@1.1.3: {} 1931 | 1932 | color-name@1.1.4: {} 1933 | 1934 | color-string@1.9.1: 1935 | dependencies: 1936 | color-name: 1.1.4 1937 | simple-swizzle: 0.2.2 1938 | optional: true 1939 | 1940 | color@4.2.3: 1941 | dependencies: 1942 | color-convert: 2.0.1 1943 | color-string: 1.9.1 1944 | optional: true 1945 | 1946 | combined-stream@1.0.8: 1947 | dependencies: 1948 | delayed-stream: 1.0.0 1949 | 1950 | concat-map@0.0.1: {} 1951 | 1952 | copy-anything@3.0.5: 1953 | dependencies: 1954 | is-what: 4.1.16 1955 | 1956 | cross-spawn@6.0.6: 1957 | dependencies: 1958 | nice-try: 1.0.5 1959 | path-key: 2.0.1 1960 | semver: 5.7.2 1961 | shebang-command: 1.2.0 1962 | which: 1.3.1 1963 | 1964 | cross-spawn@7.0.6: 1965 | dependencies: 1966 | path-key: 3.1.1 1967 | shebang-command: 2.0.0 1968 | which: 2.0.2 1969 | 1970 | csstype@3.1.3: {} 1971 | 1972 | data-view-buffer@1.0.2: 1973 | dependencies: 1974 | call-bound: 1.0.4 1975 | es-errors: 1.3.0 1976 | is-data-view: 1.0.2 1977 | 1978 | data-view-byte-length@1.0.2: 1979 | dependencies: 1980 | call-bound: 1.0.4 1981 | es-errors: 1.3.0 1982 | is-data-view: 1.0.2 1983 | 1984 | data-view-byte-offset@1.0.1: 1985 | dependencies: 1986 | call-bound: 1.0.4 1987 | es-errors: 1.3.0 1988 | is-data-view: 1.0.2 1989 | 1990 | debug@4.3.4: 1991 | dependencies: 1992 | ms: 2.1.2 1993 | 1994 | debug@4.4.1: 1995 | dependencies: 1996 | ms: 2.1.3 1997 | 1998 | deep-is@0.1.4: {} 1999 | 2000 | define-data-property@1.1.4: 2001 | dependencies: 2002 | es-define-property: 1.0.1 2003 | es-errors: 1.3.0 2004 | gopd: 1.2.0 2005 | 2006 | define-properties@1.2.1: 2007 | dependencies: 2008 | define-data-property: 1.1.4 2009 | has-property-descriptors: 1.0.2 2010 | object-keys: 1.1.1 2011 | 2012 | delayed-stream@1.0.0: {} 2013 | 2014 | detect-libc@2.0.4: 2015 | optional: true 2016 | 2017 | dunder-proto@1.0.1: 2018 | dependencies: 2019 | call-bind-apply-helpers: 1.0.2 2020 | es-errors: 1.3.0 2021 | gopd: 1.2.0 2022 | 2023 | duplexer@0.1.2: {} 2024 | 2025 | error-ex@1.3.2: 2026 | dependencies: 2027 | is-arrayish: 0.2.1 2028 | 2029 | es-abstract@1.24.0: 2030 | dependencies: 2031 | array-buffer-byte-length: 1.0.2 2032 | arraybuffer.prototype.slice: 1.0.4 2033 | available-typed-arrays: 1.0.7 2034 | call-bind: 1.0.8 2035 | call-bound: 1.0.4 2036 | data-view-buffer: 1.0.2 2037 | data-view-byte-length: 1.0.2 2038 | data-view-byte-offset: 1.0.1 2039 | es-define-property: 1.0.1 2040 | es-errors: 1.3.0 2041 | es-object-atoms: 1.1.1 2042 | es-set-tostringtag: 2.1.0 2043 | es-to-primitive: 1.3.0 2044 | function.prototype.name: 1.1.8 2045 | get-intrinsic: 1.3.0 2046 | get-proto: 1.0.1 2047 | get-symbol-description: 1.1.0 2048 | globalthis: 1.0.4 2049 | gopd: 1.2.0 2050 | has-property-descriptors: 1.0.2 2051 | has-proto: 1.2.0 2052 | has-symbols: 1.1.0 2053 | hasown: 2.0.2 2054 | internal-slot: 1.1.0 2055 | is-array-buffer: 3.0.5 2056 | is-callable: 1.2.7 2057 | is-data-view: 1.0.2 2058 | is-negative-zero: 2.0.3 2059 | is-regex: 1.2.1 2060 | is-set: 2.0.3 2061 | is-shared-array-buffer: 1.0.4 2062 | is-string: 1.1.1 2063 | is-typed-array: 1.1.15 2064 | is-weakref: 1.1.1 2065 | math-intrinsics: 1.1.0 2066 | object-inspect: 1.13.4 2067 | object-keys: 1.1.1 2068 | object.assign: 4.1.7 2069 | own-keys: 1.0.1 2070 | regexp.prototype.flags: 1.5.4 2071 | safe-array-concat: 1.1.3 2072 | safe-push-apply: 1.0.0 2073 | safe-regex-test: 1.1.0 2074 | set-proto: 1.0.0 2075 | stop-iteration-iterator: 1.1.0 2076 | string.prototype.trim: 1.2.10 2077 | string.prototype.trimend: 1.0.9 2078 | string.prototype.trimstart: 1.0.8 2079 | typed-array-buffer: 1.0.3 2080 | typed-array-byte-length: 1.0.3 2081 | typed-array-byte-offset: 1.0.4 2082 | typed-array-length: 1.0.7 2083 | unbox-primitive: 1.1.0 2084 | which-typed-array: 1.1.19 2085 | 2086 | es-define-property@1.0.1: {} 2087 | 2088 | es-errors@1.3.0: {} 2089 | 2090 | es-object-atoms@1.1.1: 2091 | dependencies: 2092 | es-errors: 1.3.0 2093 | 2094 | es-set-tostringtag@2.1.0: 2095 | dependencies: 2096 | es-errors: 1.3.0 2097 | get-intrinsic: 1.3.0 2098 | has-tostringtag: 1.0.2 2099 | hasown: 2.0.2 2100 | 2101 | es-to-primitive@1.3.0: 2102 | dependencies: 2103 | is-callable: 1.2.7 2104 | is-date-object: 1.1.0 2105 | is-symbol: 1.1.1 2106 | 2107 | escape-string-regexp@1.0.5: {} 2108 | 2109 | escape-string-regexp@4.0.0: {} 2110 | 2111 | eslint-scope@8.4.0: 2112 | dependencies: 2113 | esrecurse: 4.3.0 2114 | estraverse: 5.3.0 2115 | 2116 | eslint-visitor-keys@3.4.3: {} 2117 | 2118 | eslint-visitor-keys@4.2.1: {} 2119 | 2120 | eslint@9.28.0(jiti@2.4.2): 2121 | dependencies: 2122 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0(jiti@2.4.2)) 2123 | '@eslint-community/regexpp': 4.12.1 2124 | '@eslint/config-array': 0.20.1 2125 | '@eslint/config-helpers': 0.2.3 2126 | '@eslint/core': 0.14.0 2127 | '@eslint/eslintrc': 3.3.1 2128 | '@eslint/js': 9.28.0 2129 | '@eslint/plugin-kit': 0.3.2 2130 | '@humanfs/node': 0.16.6 2131 | '@humanwhocodes/module-importer': 1.0.1 2132 | '@humanwhocodes/retry': 0.4.3 2133 | '@types/estree': 1.0.8 2134 | '@types/json-schema': 7.0.15 2135 | ajv: 6.12.6 2136 | chalk: 4.1.2 2137 | cross-spawn: 7.0.6 2138 | debug: 4.4.1 2139 | escape-string-regexp: 4.0.0 2140 | eslint-scope: 8.4.0 2141 | eslint-visitor-keys: 4.2.1 2142 | espree: 10.4.0 2143 | esquery: 1.6.0 2144 | esutils: 2.0.3 2145 | fast-deep-equal: 3.1.3 2146 | file-entry-cache: 8.0.0 2147 | find-up: 5.0.0 2148 | glob-parent: 6.0.2 2149 | ignore: 5.3.2 2150 | imurmurhash: 0.1.4 2151 | is-glob: 4.0.3 2152 | json-stable-stringify-without-jsonify: 1.0.1 2153 | lodash.merge: 4.6.2 2154 | minimatch: 3.1.2 2155 | natural-compare: 1.4.0 2156 | optionator: 0.9.4 2157 | optionalDependencies: 2158 | jiti: 2.4.2 2159 | transitivePeerDependencies: 2160 | - supports-color 2161 | 2162 | espree@10.4.0: 2163 | dependencies: 2164 | acorn: 8.15.0 2165 | acorn-jsx: 5.3.2(acorn@8.15.0) 2166 | eslint-visitor-keys: 4.2.1 2167 | 2168 | esquery@1.6.0: 2169 | dependencies: 2170 | estraverse: 5.3.0 2171 | 2172 | esrecurse@4.3.0: 2173 | dependencies: 2174 | estraverse: 5.3.0 2175 | 2176 | estraverse@5.3.0: {} 2177 | 2178 | esutils@2.0.3: {} 2179 | 2180 | event-stream@3.3.4: 2181 | dependencies: 2182 | duplexer: 0.1.2 2183 | from: 0.1.7 2184 | map-stream: 0.1.0 2185 | pause-stream: 0.0.11 2186 | split: 0.3.3 2187 | stream-combiner: 0.0.4 2188 | through: 2.3.8 2189 | 2190 | execa@5.1.1: 2191 | dependencies: 2192 | cross-spawn: 7.0.6 2193 | get-stream: 6.0.1 2194 | human-signals: 2.1.0 2195 | is-stream: 2.0.1 2196 | merge-stream: 2.0.0 2197 | npm-run-path: 4.0.1 2198 | onetime: 5.1.2 2199 | signal-exit: 3.0.7 2200 | strip-final-newline: 2.0.0 2201 | 2202 | fast-deep-equal@3.1.3: {} 2203 | 2204 | fast-json-stable-stringify@2.1.0: {} 2205 | 2206 | fast-levenshtein@2.0.6: {} 2207 | 2208 | file-entry-cache@8.0.0: 2209 | dependencies: 2210 | flat-cache: 4.0.1 2211 | 2212 | find-up@5.0.0: 2213 | dependencies: 2214 | locate-path: 6.0.0 2215 | path-exists: 4.0.0 2216 | 2217 | flat-cache@4.0.1: 2218 | dependencies: 2219 | flatted: 3.3.3 2220 | keyv: 4.5.4 2221 | 2222 | flatted@3.3.3: {} 2223 | 2224 | follow-redirects@1.15.9(debug@4.3.4): 2225 | optionalDependencies: 2226 | debug: 4.3.4 2227 | 2228 | for-each@0.3.5: 2229 | dependencies: 2230 | is-callable: 1.2.7 2231 | 2232 | form-data@4.0.3: 2233 | dependencies: 2234 | asynckit: 0.4.0 2235 | combined-stream: 1.0.8 2236 | es-set-tostringtag: 2.1.0 2237 | hasown: 2.0.2 2238 | mime-types: 2.1.35 2239 | 2240 | from@0.1.7: {} 2241 | 2242 | fsevents@2.3.2: 2243 | optional: true 2244 | 2245 | function-bind@1.1.2: {} 2246 | 2247 | function.prototype.name@1.1.8: 2248 | dependencies: 2249 | call-bind: 1.0.8 2250 | call-bound: 1.0.4 2251 | define-properties: 1.2.1 2252 | functions-have-names: 1.2.3 2253 | hasown: 2.0.2 2254 | is-callable: 1.2.7 2255 | 2256 | functions-have-names@1.2.3: {} 2257 | 2258 | get-intrinsic@1.3.0: 2259 | dependencies: 2260 | call-bind-apply-helpers: 1.0.2 2261 | es-define-property: 1.0.1 2262 | es-errors: 1.3.0 2263 | es-object-atoms: 1.1.1 2264 | function-bind: 1.1.2 2265 | get-proto: 1.0.1 2266 | gopd: 1.2.0 2267 | has-symbols: 1.1.0 2268 | hasown: 2.0.2 2269 | math-intrinsics: 1.1.0 2270 | 2271 | get-proto@1.0.1: 2272 | dependencies: 2273 | dunder-proto: 1.0.1 2274 | es-object-atoms: 1.1.1 2275 | 2276 | get-stream@6.0.1: {} 2277 | 2278 | get-symbol-description@1.1.0: 2279 | dependencies: 2280 | call-bound: 1.0.4 2281 | es-errors: 1.3.0 2282 | get-intrinsic: 1.3.0 2283 | 2284 | glob-parent@6.0.2: 2285 | dependencies: 2286 | is-glob: 4.0.3 2287 | 2288 | globals@14.0.0: {} 2289 | 2290 | globalthis@1.0.4: 2291 | dependencies: 2292 | define-properties: 1.2.1 2293 | gopd: 1.2.0 2294 | 2295 | gopd@1.2.0: {} 2296 | 2297 | graceful-fs@4.2.11: {} 2298 | 2299 | has-bigints@1.1.0: {} 2300 | 2301 | has-flag@3.0.0: {} 2302 | 2303 | has-flag@4.0.0: {} 2304 | 2305 | has-property-descriptors@1.0.2: 2306 | dependencies: 2307 | es-define-property: 1.0.1 2308 | 2309 | has-proto@1.2.0: 2310 | dependencies: 2311 | dunder-proto: 1.0.1 2312 | 2313 | has-symbols@1.1.0: {} 2314 | 2315 | has-tostringtag@1.0.2: 2316 | dependencies: 2317 | has-symbols: 1.1.0 2318 | 2319 | hasown@2.0.2: 2320 | dependencies: 2321 | function-bind: 1.1.2 2322 | 2323 | hosted-git-info@2.8.9: {} 2324 | 2325 | human-signals@2.1.0: {} 2326 | 2327 | ignore@5.3.2: {} 2328 | 2329 | import-fresh@3.3.1: 2330 | dependencies: 2331 | parent-module: 1.0.1 2332 | resolve-from: 4.0.0 2333 | 2334 | imurmurhash@0.1.4: {} 2335 | 2336 | internal-slot@1.1.0: 2337 | dependencies: 2338 | es-errors: 1.3.0 2339 | hasown: 2.0.2 2340 | side-channel: 1.1.0 2341 | 2342 | is-array-buffer@3.0.5: 2343 | dependencies: 2344 | call-bind: 1.0.8 2345 | call-bound: 1.0.4 2346 | get-intrinsic: 1.3.0 2347 | 2348 | is-arrayish@0.2.1: {} 2349 | 2350 | is-arrayish@0.3.2: 2351 | optional: true 2352 | 2353 | is-async-function@2.1.1: 2354 | dependencies: 2355 | async-function: 1.0.0 2356 | call-bound: 1.0.4 2357 | get-proto: 1.0.1 2358 | has-tostringtag: 1.0.2 2359 | safe-regex-test: 1.1.0 2360 | 2361 | is-bigint@1.1.0: 2362 | dependencies: 2363 | has-bigints: 1.1.0 2364 | 2365 | is-boolean-object@1.2.2: 2366 | dependencies: 2367 | call-bound: 1.0.4 2368 | has-tostringtag: 1.0.2 2369 | 2370 | is-callable@1.2.7: {} 2371 | 2372 | is-core-module@2.16.1: 2373 | dependencies: 2374 | hasown: 2.0.2 2375 | 2376 | is-data-view@1.0.2: 2377 | dependencies: 2378 | call-bound: 1.0.4 2379 | get-intrinsic: 1.3.0 2380 | is-typed-array: 1.1.15 2381 | 2382 | is-date-object@1.1.0: 2383 | dependencies: 2384 | call-bound: 1.0.4 2385 | has-tostringtag: 1.0.2 2386 | 2387 | is-extglob@2.1.1: {} 2388 | 2389 | is-finalizationregistry@1.1.1: 2390 | dependencies: 2391 | call-bound: 1.0.4 2392 | 2393 | is-generator-function@1.1.0: 2394 | dependencies: 2395 | call-bound: 1.0.4 2396 | get-proto: 1.0.1 2397 | has-tostringtag: 1.0.2 2398 | safe-regex-test: 1.1.0 2399 | 2400 | is-glob@4.0.3: 2401 | dependencies: 2402 | is-extglob: 2.1.1 2403 | 2404 | is-map@2.0.3: {} 2405 | 2406 | is-negative-zero@2.0.3: {} 2407 | 2408 | is-number-object@1.1.1: 2409 | dependencies: 2410 | call-bound: 1.0.4 2411 | has-tostringtag: 1.0.2 2412 | 2413 | is-regex@1.2.1: 2414 | dependencies: 2415 | call-bound: 1.0.4 2416 | gopd: 1.2.0 2417 | has-tostringtag: 1.0.2 2418 | hasown: 2.0.2 2419 | 2420 | is-set@2.0.3: {} 2421 | 2422 | is-shared-array-buffer@1.0.4: 2423 | dependencies: 2424 | call-bound: 1.0.4 2425 | 2426 | is-stream@2.0.1: {} 2427 | 2428 | is-string@1.1.1: 2429 | dependencies: 2430 | call-bound: 1.0.4 2431 | has-tostringtag: 1.0.2 2432 | 2433 | is-symbol@1.1.1: 2434 | dependencies: 2435 | call-bound: 1.0.4 2436 | has-symbols: 1.1.0 2437 | safe-regex-test: 1.1.0 2438 | 2439 | is-typed-array@1.1.15: 2440 | dependencies: 2441 | which-typed-array: 1.1.19 2442 | 2443 | is-weakmap@2.0.2: {} 2444 | 2445 | is-weakref@1.1.1: 2446 | dependencies: 2447 | call-bound: 1.0.4 2448 | 2449 | is-weakset@2.0.4: 2450 | dependencies: 2451 | call-bound: 1.0.4 2452 | get-intrinsic: 1.3.0 2453 | 2454 | is-what@4.1.16: {} 2455 | 2456 | isarray@2.0.5: {} 2457 | 2458 | isexe@2.0.0: {} 2459 | 2460 | jiti@2.4.2: {} 2461 | 2462 | joi@17.13.3: 2463 | dependencies: 2464 | '@hapi/hoek': 9.3.0 2465 | '@hapi/topo': 5.1.0 2466 | '@sideway/address': 4.1.5 2467 | '@sideway/formula': 3.0.1 2468 | '@sideway/pinpoint': 2.0.0 2469 | 2470 | js-yaml@4.1.0: 2471 | dependencies: 2472 | argparse: 2.0.1 2473 | 2474 | json-buffer@3.0.1: {} 2475 | 2476 | json-parse-better-errors@1.0.2: {} 2477 | 2478 | json-schema-traverse@0.4.1: {} 2479 | 2480 | json-stable-stringify-without-jsonify@1.0.1: {} 2481 | 2482 | keyv@4.5.4: 2483 | dependencies: 2484 | json-buffer: 3.0.1 2485 | 2486 | lazy-ass@1.6.0: {} 2487 | 2488 | levn@0.4.1: 2489 | dependencies: 2490 | prelude-ls: 1.2.1 2491 | type-check: 0.4.0 2492 | 2493 | load-json-file@4.0.0: 2494 | dependencies: 2495 | graceful-fs: 4.2.11 2496 | parse-json: 4.0.0 2497 | pify: 3.0.0 2498 | strip-bom: 3.0.0 2499 | 2500 | locate-path@6.0.0: 2501 | dependencies: 2502 | p-locate: 5.0.0 2503 | 2504 | lodash.merge@4.6.2: {} 2505 | 2506 | lodash@4.17.21: {} 2507 | 2508 | map-stream@0.1.0: {} 2509 | 2510 | math-intrinsics@1.1.0: {} 2511 | 2512 | memorystream@0.3.1: {} 2513 | 2514 | merge-stream@2.0.0: {} 2515 | 2516 | mime-db@1.52.0: {} 2517 | 2518 | mime-types@2.1.35: 2519 | dependencies: 2520 | mime-db: 1.52.0 2521 | 2522 | mimic-fn@2.1.0: {} 2523 | 2524 | minimatch@3.1.2: 2525 | dependencies: 2526 | brace-expansion: 1.1.12 2527 | 2528 | minimist@1.2.8: {} 2529 | 2530 | ms@2.1.2: {} 2531 | 2532 | ms@2.1.3: {} 2533 | 2534 | nanoid@3.3.11: {} 2535 | 2536 | natural-compare@1.4.0: {} 2537 | 2538 | next@15.3.3(@playwright/test@1.53.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): 2539 | dependencies: 2540 | '@next/env': 15.3.3 2541 | '@swc/counter': 0.1.3 2542 | '@swc/helpers': 0.5.15 2543 | busboy: 1.6.0 2544 | caniuse-lite: 1.0.30001723 2545 | postcss: 8.4.31 2546 | react: 19.1.0 2547 | react-dom: 19.1.0(react@19.1.0) 2548 | styled-jsx: 5.1.6(react@19.1.0) 2549 | optionalDependencies: 2550 | '@next/swc-darwin-arm64': 15.3.3 2551 | '@next/swc-darwin-x64': 15.3.3 2552 | '@next/swc-linux-arm64-gnu': 15.3.3 2553 | '@next/swc-linux-arm64-musl': 15.3.3 2554 | '@next/swc-linux-x64-gnu': 15.3.3 2555 | '@next/swc-linux-x64-musl': 15.3.3 2556 | '@next/swc-win32-arm64-msvc': 15.3.3 2557 | '@next/swc-win32-x64-msvc': 15.3.3 2558 | '@playwright/test': 1.53.0 2559 | sharp: 0.34.2 2560 | transitivePeerDependencies: 2561 | - '@babel/core' 2562 | - babel-plugin-macros 2563 | 2564 | nice-try@1.0.5: {} 2565 | 2566 | normalize-package-data@2.5.0: 2567 | dependencies: 2568 | hosted-git-info: 2.8.9 2569 | resolve: 1.22.10 2570 | semver: 5.7.2 2571 | validate-npm-package-license: 3.0.4 2572 | 2573 | npm-run-all@4.1.5: 2574 | dependencies: 2575 | ansi-styles: 3.2.1 2576 | chalk: 2.4.2 2577 | cross-spawn: 6.0.6 2578 | memorystream: 0.3.1 2579 | minimatch: 3.1.2 2580 | pidtree: 0.3.1 2581 | read-pkg: 3.0.0 2582 | shell-quote: 1.8.3 2583 | string.prototype.padend: 3.1.6 2584 | 2585 | npm-run-path@4.0.1: 2586 | dependencies: 2587 | path-key: 3.1.1 2588 | 2589 | object-inspect@1.13.4: {} 2590 | 2591 | object-keys@1.1.1: {} 2592 | 2593 | object.assign@4.1.7: 2594 | dependencies: 2595 | call-bind: 1.0.8 2596 | call-bound: 1.0.4 2597 | define-properties: 1.2.1 2598 | es-object-atoms: 1.1.1 2599 | has-symbols: 1.1.0 2600 | object-keys: 1.1.1 2601 | 2602 | onetime@5.1.2: 2603 | dependencies: 2604 | mimic-fn: 2.1.0 2605 | 2606 | optionator@0.9.4: 2607 | dependencies: 2608 | deep-is: 0.1.4 2609 | fast-levenshtein: 2.0.6 2610 | levn: 0.4.1 2611 | prelude-ls: 1.2.1 2612 | type-check: 0.4.0 2613 | word-wrap: 1.2.5 2614 | 2615 | own-keys@1.0.1: 2616 | dependencies: 2617 | get-intrinsic: 1.3.0 2618 | object-keys: 1.1.1 2619 | safe-push-apply: 1.0.0 2620 | 2621 | p-limit@3.1.0: 2622 | dependencies: 2623 | yocto-queue: 0.1.0 2624 | 2625 | p-locate@5.0.0: 2626 | dependencies: 2627 | p-limit: 3.1.0 2628 | 2629 | parent-module@1.0.1: 2630 | dependencies: 2631 | callsites: 3.1.0 2632 | 2633 | parse-json@4.0.0: 2634 | dependencies: 2635 | error-ex: 1.3.2 2636 | json-parse-better-errors: 1.0.2 2637 | 2638 | path-exists@4.0.0: {} 2639 | 2640 | path-key@2.0.1: {} 2641 | 2642 | path-key@3.1.1: {} 2643 | 2644 | path-parse@1.0.7: {} 2645 | 2646 | path-type@3.0.0: 2647 | dependencies: 2648 | pify: 3.0.0 2649 | 2650 | pause-stream@0.0.11: 2651 | dependencies: 2652 | through: 2.3.8 2653 | 2654 | picocolors@1.1.1: {} 2655 | 2656 | pidtree@0.3.1: {} 2657 | 2658 | pify@3.0.0: {} 2659 | 2660 | playwright-core@1.53.0: {} 2661 | 2662 | playwright@1.53.0: 2663 | dependencies: 2664 | playwright-core: 1.53.0 2665 | optionalDependencies: 2666 | fsevents: 2.3.2 2667 | 2668 | possible-typed-array-names@1.1.0: {} 2669 | 2670 | postcss@8.4.31: 2671 | dependencies: 2672 | nanoid: 3.3.11 2673 | picocolors: 1.1.1 2674 | source-map-js: 1.2.1 2675 | 2676 | prelude-ls@1.2.1: {} 2677 | 2678 | prisma@6.9.0(typescript@5.8.3): 2679 | dependencies: 2680 | '@prisma/config': 6.9.0 2681 | '@prisma/engines': 6.9.0 2682 | optionalDependencies: 2683 | typescript: 5.8.3 2684 | 2685 | ps-tree@1.2.0: 2686 | dependencies: 2687 | event-stream: 3.3.4 2688 | 2689 | punycode@2.3.1: {} 2690 | 2691 | react-dom@19.1.0(react@19.1.0): 2692 | dependencies: 2693 | react: 19.1.0 2694 | scheduler: 0.26.0 2695 | 2696 | react@19.1.0: {} 2697 | 2698 | read-pkg@3.0.0: 2699 | dependencies: 2700 | load-json-file: 4.0.0 2701 | normalize-package-data: 2.5.0 2702 | path-type: 3.0.0 2703 | 2704 | reflect.getprototypeof@1.0.10: 2705 | dependencies: 2706 | call-bind: 1.0.8 2707 | define-properties: 1.2.1 2708 | es-abstract: 1.24.0 2709 | es-errors: 1.3.0 2710 | es-object-atoms: 1.1.1 2711 | get-intrinsic: 1.3.0 2712 | get-proto: 1.0.1 2713 | which-builtin-type: 1.2.1 2714 | 2715 | regexp.prototype.flags@1.5.4: 2716 | dependencies: 2717 | call-bind: 1.0.8 2718 | define-properties: 1.2.1 2719 | es-errors: 1.3.0 2720 | get-proto: 1.0.1 2721 | gopd: 1.2.0 2722 | set-function-name: 2.0.2 2723 | 2724 | resolve-from@4.0.0: {} 2725 | 2726 | resolve@1.22.10: 2727 | dependencies: 2728 | is-core-module: 2.16.1 2729 | path-parse: 1.0.7 2730 | supports-preserve-symlinks-flag: 1.0.0 2731 | 2732 | rxjs@7.8.2: 2733 | dependencies: 2734 | tslib: 2.8.1 2735 | 2736 | safe-array-concat@1.1.3: 2737 | dependencies: 2738 | call-bind: 1.0.8 2739 | call-bound: 1.0.4 2740 | get-intrinsic: 1.3.0 2741 | has-symbols: 1.1.0 2742 | isarray: 2.0.5 2743 | 2744 | safe-push-apply@1.0.0: 2745 | dependencies: 2746 | es-errors: 1.3.0 2747 | isarray: 2.0.5 2748 | 2749 | safe-regex-test@1.1.0: 2750 | dependencies: 2751 | call-bound: 1.0.4 2752 | es-errors: 1.3.0 2753 | is-regex: 1.2.1 2754 | 2755 | scheduler@0.26.0: {} 2756 | 2757 | semver@5.7.2: {} 2758 | 2759 | semver@7.7.2: 2760 | optional: true 2761 | 2762 | set-function-length@1.2.2: 2763 | dependencies: 2764 | define-data-property: 1.1.4 2765 | es-errors: 1.3.0 2766 | function-bind: 1.1.2 2767 | get-intrinsic: 1.3.0 2768 | gopd: 1.2.0 2769 | has-property-descriptors: 1.0.2 2770 | 2771 | set-function-name@2.0.2: 2772 | dependencies: 2773 | define-data-property: 1.1.4 2774 | es-errors: 1.3.0 2775 | functions-have-names: 1.2.3 2776 | has-property-descriptors: 1.0.2 2777 | 2778 | set-proto@1.0.0: 2779 | dependencies: 2780 | dunder-proto: 1.0.1 2781 | es-errors: 1.3.0 2782 | es-object-atoms: 1.1.1 2783 | 2784 | sharp@0.34.2: 2785 | dependencies: 2786 | color: 4.2.3 2787 | detect-libc: 2.0.4 2788 | semver: 7.7.2 2789 | optionalDependencies: 2790 | '@img/sharp-darwin-arm64': 0.34.2 2791 | '@img/sharp-darwin-x64': 0.34.2 2792 | '@img/sharp-libvips-darwin-arm64': 1.1.0 2793 | '@img/sharp-libvips-darwin-x64': 1.1.0 2794 | '@img/sharp-libvips-linux-arm': 1.1.0 2795 | '@img/sharp-libvips-linux-arm64': 1.1.0 2796 | '@img/sharp-libvips-linux-ppc64': 1.1.0 2797 | '@img/sharp-libvips-linux-s390x': 1.1.0 2798 | '@img/sharp-libvips-linux-x64': 1.1.0 2799 | '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 2800 | '@img/sharp-libvips-linuxmusl-x64': 1.1.0 2801 | '@img/sharp-linux-arm': 0.34.2 2802 | '@img/sharp-linux-arm64': 0.34.2 2803 | '@img/sharp-linux-s390x': 0.34.2 2804 | '@img/sharp-linux-x64': 0.34.2 2805 | '@img/sharp-linuxmusl-arm64': 0.34.2 2806 | '@img/sharp-linuxmusl-x64': 0.34.2 2807 | '@img/sharp-wasm32': 0.34.2 2808 | '@img/sharp-win32-arm64': 0.34.2 2809 | '@img/sharp-win32-ia32': 0.34.2 2810 | '@img/sharp-win32-x64': 0.34.2 2811 | optional: true 2812 | 2813 | shebang-command@1.2.0: 2814 | dependencies: 2815 | shebang-regex: 1.0.0 2816 | 2817 | shebang-command@2.0.0: 2818 | dependencies: 2819 | shebang-regex: 3.0.0 2820 | 2821 | shebang-regex@1.0.0: {} 2822 | 2823 | shebang-regex@3.0.0: {} 2824 | 2825 | shell-quote@1.8.3: {} 2826 | 2827 | side-channel-list@1.0.0: 2828 | dependencies: 2829 | es-errors: 1.3.0 2830 | object-inspect: 1.13.4 2831 | 2832 | side-channel-map@1.0.1: 2833 | dependencies: 2834 | call-bound: 1.0.4 2835 | es-errors: 1.3.0 2836 | get-intrinsic: 1.3.0 2837 | object-inspect: 1.13.4 2838 | 2839 | side-channel-weakmap@1.0.2: 2840 | dependencies: 2841 | call-bound: 1.0.4 2842 | es-errors: 1.3.0 2843 | get-intrinsic: 1.3.0 2844 | object-inspect: 1.13.4 2845 | side-channel-map: 1.0.1 2846 | 2847 | side-channel@1.1.0: 2848 | dependencies: 2849 | es-errors: 1.3.0 2850 | object-inspect: 1.13.4 2851 | side-channel-list: 1.0.0 2852 | side-channel-map: 1.0.1 2853 | side-channel-weakmap: 1.0.2 2854 | 2855 | signal-exit@3.0.7: {} 2856 | 2857 | simple-swizzle@0.2.2: 2858 | dependencies: 2859 | is-arrayish: 0.3.2 2860 | optional: true 2861 | 2862 | source-map-js@1.2.1: {} 2863 | 2864 | spdx-correct@3.2.0: 2865 | dependencies: 2866 | spdx-expression-parse: 3.0.1 2867 | spdx-license-ids: 3.0.21 2868 | 2869 | spdx-exceptions@2.5.0: {} 2870 | 2871 | spdx-expression-parse@3.0.1: 2872 | dependencies: 2873 | spdx-exceptions: 2.5.0 2874 | spdx-license-ids: 3.0.21 2875 | 2876 | spdx-license-ids@3.0.21: {} 2877 | 2878 | split@0.3.3: 2879 | dependencies: 2880 | through: 2.3.8 2881 | 2882 | start-server-and-test@1.15.5: 2883 | dependencies: 2884 | arg: 5.0.2 2885 | bluebird: 3.7.2 2886 | check-more-types: 2.24.0 2887 | debug: 4.3.4 2888 | execa: 5.1.1 2889 | lazy-ass: 1.6.0 2890 | ps-tree: 1.2.0 2891 | wait-on: 7.0.1(debug@4.3.4) 2892 | transitivePeerDependencies: 2893 | - supports-color 2894 | 2895 | stop-iteration-iterator@1.1.0: 2896 | dependencies: 2897 | es-errors: 1.3.0 2898 | internal-slot: 1.1.0 2899 | 2900 | stream-combiner@0.0.4: 2901 | dependencies: 2902 | duplexer: 0.1.2 2903 | 2904 | streamsearch@1.1.0: {} 2905 | 2906 | string.prototype.padend@3.1.6: 2907 | dependencies: 2908 | call-bind: 1.0.8 2909 | define-properties: 1.2.1 2910 | es-abstract: 1.24.0 2911 | es-object-atoms: 1.1.1 2912 | 2913 | string.prototype.trim@1.2.10: 2914 | dependencies: 2915 | call-bind: 1.0.8 2916 | call-bound: 1.0.4 2917 | define-data-property: 1.1.4 2918 | define-properties: 1.2.1 2919 | es-abstract: 1.24.0 2920 | es-object-atoms: 1.1.1 2921 | has-property-descriptors: 1.0.2 2922 | 2923 | string.prototype.trimend@1.0.9: 2924 | dependencies: 2925 | call-bind: 1.0.8 2926 | call-bound: 1.0.4 2927 | define-properties: 1.2.1 2928 | es-object-atoms: 1.1.1 2929 | 2930 | string.prototype.trimstart@1.0.8: 2931 | dependencies: 2932 | call-bind: 1.0.8 2933 | define-properties: 1.2.1 2934 | es-object-atoms: 1.1.1 2935 | 2936 | strip-bom@3.0.0: {} 2937 | 2938 | strip-final-newline@2.0.0: {} 2939 | 2940 | strip-json-comments@3.1.1: {} 2941 | 2942 | styled-jsx@5.1.6(react@19.1.0): 2943 | dependencies: 2944 | client-only: 0.0.1 2945 | react: 19.1.0 2946 | 2947 | superjson@1.13.3: 2948 | dependencies: 2949 | copy-anything: 3.0.5 2950 | 2951 | supports-color@5.5.0: 2952 | dependencies: 2953 | has-flag: 3.0.0 2954 | 2955 | supports-color@7.2.0: 2956 | dependencies: 2957 | has-flag: 4.0.0 2958 | 2959 | supports-preserve-symlinks-flag@1.0.0: {} 2960 | 2961 | through@2.3.8: {} 2962 | 2963 | todomvc-app-css@2.4.3: {} 2964 | 2965 | todomvc-common@1.0.5: {} 2966 | 2967 | tslib@2.8.1: {} 2968 | 2969 | type-check@0.4.0: 2970 | dependencies: 2971 | prelude-ls: 1.2.1 2972 | 2973 | typed-array-buffer@1.0.3: 2974 | dependencies: 2975 | call-bound: 1.0.4 2976 | es-errors: 1.3.0 2977 | is-typed-array: 1.1.15 2978 | 2979 | typed-array-byte-length@1.0.3: 2980 | dependencies: 2981 | call-bind: 1.0.8 2982 | for-each: 0.3.5 2983 | gopd: 1.2.0 2984 | has-proto: 1.2.0 2985 | is-typed-array: 1.1.15 2986 | 2987 | typed-array-byte-offset@1.0.4: 2988 | dependencies: 2989 | available-typed-arrays: 1.0.7 2990 | call-bind: 1.0.8 2991 | for-each: 0.3.5 2992 | gopd: 1.2.0 2993 | has-proto: 1.2.0 2994 | is-typed-array: 1.1.15 2995 | reflect.getprototypeof: 1.0.10 2996 | 2997 | typed-array-length@1.0.7: 2998 | dependencies: 2999 | call-bind: 1.0.8 3000 | for-each: 0.3.5 3001 | gopd: 1.2.0 3002 | is-typed-array: 1.1.15 3003 | possible-typed-array-names: 1.1.0 3004 | reflect.getprototypeof: 1.0.10 3005 | 3006 | typescript@5.8.3: {} 3007 | 3008 | unbox-primitive@1.1.0: 3009 | dependencies: 3010 | call-bound: 1.0.4 3011 | has-bigints: 1.1.0 3012 | has-symbols: 1.1.0 3013 | which-boxed-primitive: 1.1.1 3014 | 3015 | undici-types@6.21.0: {} 3016 | 3017 | uri-js@4.4.1: 3018 | dependencies: 3019 | punycode: 2.3.1 3020 | 3021 | validate-npm-package-license@3.0.4: 3022 | dependencies: 3023 | spdx-correct: 3.2.0 3024 | spdx-expression-parse: 3.0.1 3025 | 3026 | wait-on@7.0.1(debug@4.3.4): 3027 | dependencies: 3028 | axios: 0.27.2(debug@4.3.4) 3029 | joi: 17.13.3 3030 | lodash: 4.17.21 3031 | minimist: 1.2.8 3032 | rxjs: 7.8.2 3033 | transitivePeerDependencies: 3034 | - debug 3035 | 3036 | which-boxed-primitive@1.1.1: 3037 | dependencies: 3038 | is-bigint: 1.1.0 3039 | is-boolean-object: 1.2.2 3040 | is-number-object: 1.1.1 3041 | is-string: 1.1.1 3042 | is-symbol: 1.1.1 3043 | 3044 | which-builtin-type@1.2.1: 3045 | dependencies: 3046 | call-bound: 1.0.4 3047 | function.prototype.name: 1.1.8 3048 | has-tostringtag: 1.0.2 3049 | is-async-function: 2.1.1 3050 | is-date-object: 1.1.0 3051 | is-finalizationregistry: 1.1.1 3052 | is-generator-function: 1.1.0 3053 | is-regex: 1.2.1 3054 | is-weakref: 1.1.1 3055 | isarray: 2.0.5 3056 | which-boxed-primitive: 1.1.1 3057 | which-collection: 1.0.2 3058 | which-typed-array: 1.1.19 3059 | 3060 | which-collection@1.0.2: 3061 | dependencies: 3062 | is-map: 2.0.3 3063 | is-set: 2.0.3 3064 | is-weakmap: 2.0.2 3065 | is-weakset: 2.0.4 3066 | 3067 | which-typed-array@1.1.19: 3068 | dependencies: 3069 | available-typed-arrays: 1.0.7 3070 | call-bind: 1.0.8 3071 | call-bound: 1.0.4 3072 | for-each: 0.3.5 3073 | get-proto: 1.0.1 3074 | gopd: 1.2.0 3075 | has-tostringtag: 1.0.2 3076 | 3077 | which@1.3.1: 3078 | dependencies: 3079 | isexe: 2.0.0 3080 | 3081 | which@2.0.2: 3082 | dependencies: 3083 | isexe: 2.0.0 3084 | 3085 | word-wrap@1.2.5: {} 3086 | 3087 | yocto-queue@0.1.0: {} 3088 | 3089 | zod@3.25.64: {} 3090 | -------------------------------------------------------------------------------- /prisma/migrations/20210304121245_/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE "Task" ( 3 | "id" TEXT NOT NULL, 4 | "text" TEXT NOT NULL, 5 | "completed" BOOLEAN NOT NULL DEFAULT false, 6 | "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, 7 | 8 | PRIMARY KEY ("id") 9 | ); 10 | 11 | -- CreateIndex 12 | CREATE UNIQUE INDEX "Task.createdAt_unique" ON "Task"("createdAt"); 13 | -------------------------------------------------------------------------------- /prisma/migrations/20241206100315_prisma-update/migration.sql: -------------------------------------------------------------------------------- 1 | -- RenameIndex 2 | ALTER INDEX "Task.createdAt_unique" RENAME TO "Task_createdAt_key"; 3 | -------------------------------------------------------------------------------- /prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | # It should be added in your version-control system (i.e. Git) 3 | provider = "postgresql" -------------------------------------------------------------------------------- /prisma/schema.prisma: -------------------------------------------------------------------------------- 1 | // This is your Prisma schema file, 2 | // learn more about it in the docs: https://pris.ly/d/prisma-schema 3 | 4 | datasource db { 5 | provider = "postgres" 6 | url = env("DATABASE_URL") 7 | } 8 | 9 | generator client { 10 | provider = "prisma-client-js" 11 | } 12 | 13 | model Task { 14 | id String @id @default(uuid()) 15 | text String 16 | completed Boolean @default(value: false) 17 | 18 | createdAt DateTime @unique @default(now()) 19 | // updatedAt DateTime @unique @default(now()) 20 | } 21 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/trpc/examples-next-prisma-todomvc/c27b498279acaac72f1d27fa36c8d894d664b068/public/favicon.ico -------------------------------------------------------------------------------- /src/components/footer.tsx: -------------------------------------------------------------------------------- 1 | import Link from 'next/link'; 2 | 3 | export function InfoFooter(props: { filter: string }) { 4 | return ( 5 | 42 | ); 43 | } 44 | 45 | function PoweredByVercel() { 46 | return ( 47 | 53 | 54 | 58 | 59 | 60 | 61 | ); 62 | } 63 | 64 | function TRPCLogo() { 65 | return ( 66 | 73 | 74 | 80 | 81 | ); 82 | } 83 | -------------------------------------------------------------------------------- /src/pages/[filter].tsx: -------------------------------------------------------------------------------- 1 | import { useIsMutating } from '@tanstack/react-query'; 2 | import type { inferProcedureOutput } from '@trpc/server'; 3 | import clsx from 'clsx'; 4 | import type { 5 | GetStaticPaths, 6 | GetStaticPropsContext, 7 | InferGetStaticPropsType, 8 | } from 'next'; 9 | import Head from 'next/head'; 10 | import Link from 'next/link'; 11 | import { useEffect, useRef, useState } from 'react'; 12 | import 'todomvc-app-css/index.css'; 13 | import 'todomvc-common/base.css'; 14 | import { InfoFooter } from '../components/footer'; 15 | import type { AppRouter } from '../server/routers/_app'; 16 | import { ssgInit } from '../server/ssg-init'; 17 | import { trpc } from '../utils/trpc'; 18 | import { useClickOutside } from '../utils/use-click-outside'; 19 | 20 | type Task = inferProcedureOutput[number]; 21 | 22 | function ListItem(props: { task: Task }) { 23 | const { task } = props; 24 | 25 | const [editing, setEditing] = useState(false); 26 | const wrapperRef = useRef(null); 27 | const inputRef = useRef(null); 28 | 29 | const utils = trpc.useUtils(); 30 | const [text, setText] = useState(task.text); 31 | 32 | useEffect(() => { 33 | setText(task.text); 34 | }, [task.text]); 35 | 36 | const editTask = trpc.todo.edit.useMutation({ 37 | async onMutate({ id, data }) { 38 | await utils.todo.all.cancel(); 39 | const allTasks = utils.todo.all.getData(); 40 | if (!allTasks) { 41 | return; 42 | } 43 | utils.todo.all.setData( 44 | undefined, 45 | allTasks.map((t) => 46 | t.id === id 47 | ? { 48 | ...t, 49 | ...data, 50 | } 51 | : t, 52 | ), 53 | ); 54 | }, 55 | }); 56 | const deleteTask = trpc.todo.delete.useMutation({ 57 | async onMutate() { 58 | await utils.todo.all.cancel(); 59 | const allTasks = utils.todo.all.getData(); 60 | if (!allTasks) { 61 | return; 62 | } 63 | utils.todo.all.setData( 64 | undefined, 65 | allTasks.filter((t) => t.id != task.id), 66 | ); 67 | }, 68 | }); 69 | 70 | useClickOutside({ 71 | ref: wrapperRef, 72 | enabled: editing, 73 | callback() { 74 | editTask.mutate({ 75 | id: task.id, 76 | data: { text }, 77 | }); 78 | setEditing(false); 79 | }, 80 | }); 81 | 82 | return ( 83 |
  • 88 |
    89 | { 94 | const checked = e.currentTarget.checked; 95 | editTask.mutate({ 96 | id: task.id, 97 | data: { completed: checked }, 98 | }); 99 | }} 100 | autoFocus={editing} 101 | /> 102 | 110 |
    117 | { 122 | const newText = e.currentTarget.value; 123 | setText(newText); 124 | }} 125 | onKeyPress={(e) => { 126 | if (e.key === 'Enter') { 127 | editTask.mutate({ 128 | id: task.id, 129 | data: { text }, 130 | }); 131 | setEditing(false); 132 | } 133 | }} 134 | /> 135 |
  • 136 | ); 137 | } 138 | 139 | type PageProps = InferGetStaticPropsType; 140 | export default function TodosPage(props: PageProps) { 141 | /* 142 | * This data will be hydrated from the `prefetch` in `getStaticProps`. This means that the page 143 | * will be rendered with the data from the server and there'll be no client loading state 👍 144 | */ 145 | const allTasks = trpc.todo.all.useQuery(undefined, { 146 | staleTime: 3000, 147 | }); 148 | 149 | const utils = trpc.useUtils(); 150 | const addTask = trpc.todo.add.useMutation({ 151 | async onMutate({ text }) { 152 | /** 153 | * Optimistically update the data 154 | * with the newly added task 155 | */ 156 | await utils.todo.all.cancel(); 157 | const tasks = allTasks.data ?? []; 158 | utils.todo.all.setData(undefined, [ 159 | ...tasks, 160 | { 161 | id: `${Math.random()}`, 162 | completed: false, 163 | text, 164 | createdAt: new Date(), 165 | }, 166 | ]); 167 | }, 168 | }); 169 | 170 | const clearCompleted = trpc.todo.clearCompleted.useMutation({ 171 | async onMutate() { 172 | await utils.todo.all.cancel(); 173 | const tasks = allTasks.data ?? []; 174 | utils.todo.all.setData( 175 | undefined, 176 | tasks.filter((t) => !t.completed), 177 | ); 178 | }, 179 | }); 180 | 181 | const toggleAll = trpc.todo.toggleAll.useMutation({ 182 | async onMutate({ completed }) { 183 | await utils.todo.all.cancel(); 184 | const tasks = allTasks.data ?? []; 185 | utils.todo.all.setData( 186 | undefined, 187 | tasks.map((t) => ({ 188 | ...t, 189 | completed, 190 | })), 191 | ); 192 | }, 193 | }); 194 | 195 | const number = useIsMutating(); 196 | useEffect(() => { 197 | // invalidate queries when mutations have settled 198 | // doing this here rather than in `onSettled()` 199 | // to avoid race conditions if you're clicking fast 200 | if (number === 0) { 201 | void utils.todo.all.invalidate(); 202 | } 203 | }, [number, utils]); 204 | 205 | const tasksLeft = allTasks.data?.filter((t) => !t.completed).length ?? 0; 206 | const tasksCompleted = allTasks.data?.filter((t) => t.completed).length ?? 0; 207 | 208 | return ( 209 | <> 210 | 211 | Todos 212 | 213 | 214 | 215 |
    216 |
    217 |

    todos

    218 | 219 | { 224 | const text = e.currentTarget.value.trim(); 225 | if (e.key === 'Enter' && text) { 226 | addTask.mutate({ text }); 227 | e.currentTarget.value = ''; 228 | } 229 | }} 230 | /> 231 |
    232 | 233 |
    234 | { 240 | toggleAll.mutate({ completed: e.currentTarget.checked }); 241 | }} 242 | /> 243 | 244 |
      245 | {allTasks.data 246 | ?.filter(({ completed }) => 247 | props.filter === 'completed' 248 | ? completed 249 | : props.filter === 'active' 250 | ? !completed 251 | : true, 252 | ) 253 | .map((task) => )} 254 |
    255 |
    256 | 257 |
    258 | 259 | {tasksLeft} 260 | {tasksLeft == 1 ? 'task left' : 'tasks left'} 261 | 262 | 263 |
      264 | {filters.map((filter) => ( 265 |
    • 266 | 270 | {filter[0].toUpperCase() + filter.slice(1)} 271 | 272 |
    • 273 | ))} 274 |
    275 | 276 | {tasksCompleted > 0 && ( 277 | 285 | )} 286 |
    287 |
    288 | 289 | 290 | 291 | ); 292 | } 293 | 294 | const filters = ['all', 'active', 'completed'] as const; 295 | export const getStaticPaths: GetStaticPaths = async () => { 296 | const paths = filters.map((filter) => ({ 297 | params: { filter }, 298 | })); 299 | 300 | return { 301 | paths, 302 | fallback: false, 303 | }; 304 | }; 305 | 306 | export const getStaticProps = async (context: GetStaticPropsContext) => { 307 | const ssg = await ssgInit(context); 308 | 309 | await ssg.todo.all.prefetch(); 310 | 311 | return { 312 | props: { 313 | trpcState: ssg.dehydrate(), 314 | filter: (context.params?.filter as string) ?? 'all', 315 | }, 316 | revalidate: 1, 317 | }; 318 | }; 319 | -------------------------------------------------------------------------------- /src/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; 2 | import type { AppProps } from 'next/app'; 3 | import { trpc } from '../utils/trpc'; 4 | 5 | const MyApp = ({ Component, pageProps }: AppProps) => { 6 | return ( 7 | <> 8 | 9 | 10 | 11 | ); 12 | }; 13 | 14 | export default trpc.withTRPC(MyApp); 15 | -------------------------------------------------------------------------------- /src/pages/api/trpc/[trpc].ts: -------------------------------------------------------------------------------- 1 | import { createNextApiHandler } from '@trpc/server/adapters/next'; 2 | import { createTRPCContext } from '../../../server/context'; 3 | import { appRouter } from '../../../server/routers/_app'; 4 | 5 | export default createNextApiHandler({ 6 | router: appRouter, 7 | createContext: createTRPCContext, 8 | onError({ error }) { 9 | if (error.code === 'INTERNAL_SERVER_ERROR') { 10 | // send to bug reporting 11 | console.error('Something went wrong', error); 12 | } 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /src/server/context.ts: -------------------------------------------------------------------------------- 1 | import type { CreateNextContextOptions } from '@trpc/server/adapters/next'; 2 | import { prisma } from './prisma'; 3 | 4 | /** 5 | * Defines your inner context shape. 6 | * Add fields here that the inner context brings. 7 | */ 8 | export interface CreateInnerContextOptions 9 | extends Partial {} 10 | 11 | /** 12 | * Inner context. Will always be available in your procedures, in contrast to the outer context. 13 | * 14 | * Also useful for: 15 | * - testing, so you don't have to mock Next.js' `req`/`res` 16 | * - tRPC's `createSSGHelpers` where we don't have `req`/`res` 17 | * 18 | * @see https://trpc.io/docs/v11/context#inner-and-outer-context 19 | */ 20 | export async function createInnerTRPCContext(opts?: CreateInnerContextOptions) { 21 | return { 22 | prisma, 23 | task: prisma.task, 24 | ...opts, 25 | }; 26 | } 27 | 28 | /** 29 | * Outer context. Used in the routers and will e.g. bring `req` & `res` to the context as "not `undefined`". 30 | * 31 | * @see https://trpc.io/docs/v11/context#inner-and-outer-context 32 | */ 33 | export const createTRPCContext = async (opts?: CreateNextContextOptions) => { 34 | const innerContext = await createInnerTRPCContext({ 35 | req: opts?.req, 36 | }); 37 | 38 | return { 39 | ...innerContext, 40 | req: opts?.req, 41 | }; 42 | }; 43 | -------------------------------------------------------------------------------- /src/server/prisma.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @see https://prisma.io/docs/support/help-articles/nextjs-prisma-client-dev-practices 3 | */ 4 | import { PrismaClient } from '@prisma/client'; 5 | 6 | const globalForPrisma = global as unknown as { prisma: PrismaClient }; 7 | 8 | export const prisma = globalForPrisma.prisma || new PrismaClient(); 9 | 10 | if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma; 11 | -------------------------------------------------------------------------------- /src/server/routers/_app.ts: -------------------------------------------------------------------------------- 1 | import { baseProcedure, router } from '../trpc'; 2 | import { todoRouter } from './todo'; 3 | 4 | export const appRouter = router({ 5 | todo: todoRouter, 6 | }); 7 | 8 | export type AppRouter = typeof appRouter; 9 | -------------------------------------------------------------------------------- /src/server/routers/todo.ts: -------------------------------------------------------------------------------- 1 | import { z } from 'zod'; 2 | import { baseProcedure, router } from '../trpc'; 3 | 4 | export const todoRouter = router({ 5 | all: baseProcedure.query(({ ctx }) => { 6 | return ctx.task.findMany({ 7 | orderBy: { 8 | createdAt: 'asc', 9 | }, 10 | }); 11 | }), 12 | add: baseProcedure 13 | .input( 14 | z.object({ 15 | id: z.string().optional(), 16 | text: z.string().min(1), 17 | }), 18 | ) 19 | .mutation(async ({ ctx, input }) => { 20 | const todo = await ctx.task.create({ 21 | data: input, 22 | }); 23 | return todo; 24 | }), 25 | edit: baseProcedure 26 | .input( 27 | z.object({ 28 | id: z.string().uuid(), 29 | data: z.object({ 30 | completed: z.boolean().optional(), 31 | text: z.string().min(1).optional(), 32 | }), 33 | }), 34 | ) 35 | .mutation(async ({ ctx, input }) => { 36 | const { id, data } = input; 37 | const todo = await ctx.task.update({ 38 | where: { id }, 39 | data, 40 | }); 41 | return todo; 42 | }), 43 | toggleAll: baseProcedure 44 | .input(z.object({ completed: z.boolean() })) 45 | .mutation(async ({ ctx, input }) => { 46 | await ctx.task.updateMany({ 47 | data: { completed: input.completed }, 48 | }); 49 | }), 50 | delete: baseProcedure 51 | .input(z.string().uuid()) 52 | .mutation(async ({ ctx, input: id }) => { 53 | await ctx.task.delete({ where: { id } }); 54 | return id; 55 | }), 56 | clearCompleted: baseProcedure.mutation(async ({ ctx }) => { 57 | await ctx.task.deleteMany({ where: { completed: true } }); 58 | 59 | return ctx.task.findMany(); 60 | }), 61 | }); 62 | -------------------------------------------------------------------------------- /src/server/ssg-init.ts: -------------------------------------------------------------------------------- 1 | import { createServerSideHelpers } from '@trpc/react-query/server'; 2 | import type { GetStaticPropsContext } from 'next'; 3 | import SuperJSON from 'superjson'; 4 | import { createInnerTRPCContext } from './context'; 5 | import type { AppRouter } from './routers/_app'; 6 | import { appRouter } from './routers/_app'; 7 | 8 | export async function ssgInit( 9 | opts: GetStaticPropsContext, 10 | ) { 11 | // Using an external TRPC app 12 | // const client = createTRPCClient({ 13 | // links: [ 14 | // httpBatchLink({ 15 | // url: 'http://localhost:3000/api/trpc', 16 | // }), 17 | // ], 18 | // transformer: SuperJSON, 19 | // }); 20 | 21 | // const ssg = createServerSideHelpers({ 22 | // client, 23 | // }) 24 | 25 | const ssg = createServerSideHelpers({ 26 | router: appRouter, 27 | ctx: await createInnerTRPCContext({}), 28 | transformer: SuperJSON, 29 | }); 30 | 31 | return ssg; 32 | } 33 | -------------------------------------------------------------------------------- /src/server/trpc.ts: -------------------------------------------------------------------------------- 1 | import { initTRPC } from '@trpc/server'; 2 | import superjson from 'superjson'; 3 | import type { createInnerTRPCContext } from './context'; 4 | 5 | const t = initTRPC.context().create({ 6 | transformer: superjson, 7 | }); 8 | 9 | export const router = t.router; 10 | export const baseProcedure = t.procedure; 11 | -------------------------------------------------------------------------------- /src/utils/trpc.ts: -------------------------------------------------------------------------------- 1 | import { httpBatchLink, loggerLink } from '@trpc/client'; 2 | import { createTRPCNext } from '@trpc/next'; 3 | import type { inferProcedureInput, inferProcedureOutput } from '@trpc/server'; 4 | // ℹ️ Type-only import: 5 | // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html#type-only-imports-and-export 6 | import superjson from 'superjson'; 7 | import type { AppRouter } from '../server/routers/_app'; 8 | 9 | function getBaseUrl() { 10 | if (typeof window !== 'undefined') { 11 | return ''; 12 | } 13 | // reference for vercel.com 14 | if (process.env.VERCEL_URL) { 15 | return `https://${process.env.VERCEL_URL}`; 16 | } 17 | 18 | // // reference for render.com 19 | if (process.env.RENDER_INTERNAL_HOSTNAME) { 20 | return `http://${process.env.RENDER_INTERNAL_HOSTNAME}:${process.env.PORT}`; 21 | } 22 | 23 | // assume localhost 24 | return `http://localhost:${process.env.PORT ?? 3000}`; 25 | } 26 | 27 | /** 28 | * A set of strongly-typed React hooks from your `AppRouter` type signature with `createReactQueryHooks`. 29 | * @see https://trpc.io/docs/v11/react#3-create-trpc-hooks 30 | */ 31 | export const trpc = createTRPCNext({ 32 | transformer: superjson, 33 | config() { 34 | /** 35 | * If you want to use SSR, you need to use the server's full URL 36 | * @see https://trpc.io/docs/v11/ssr 37 | */ 38 | return { 39 | /** 40 | * @see https://trpc.io/docs/v11/client/links 41 | */ 42 | links: [ 43 | // adds pretty logs to your console in development and logs errors in production 44 | loggerLink({ 45 | enabled: (opts) => 46 | process.env.NODE_ENV === 'development' || 47 | (opts.direction === 'down' && opts.result instanceof Error), 48 | }), 49 | httpBatchLink({ 50 | url: `${getBaseUrl()}/api/trpc`, 51 | /** 52 | * @see https://trpc.io/docs/v11/data-transformers 53 | */ 54 | transformer: superjson, 55 | }), 56 | ], 57 | /** 58 | * @see https://tanstack.com/query/v5/docs/reference/QueryClient 59 | */ 60 | // queryClientConfig: { defaultOptions: { queries: { staleTime: 60 } } }, 61 | }; 62 | }, 63 | /** 64 | * @see https://trpc.io/docs/v11/ssr 65 | */ 66 | ssr: false, 67 | }); 68 | -------------------------------------------------------------------------------- /src/utils/use-click-outside.tsx: -------------------------------------------------------------------------------- 1 | import type { RefObject } from 'react'; 2 | import { useEffect, useRef } from 'react'; 3 | 4 | /** 5 | * Hook for checking when the user clicks outside the passed ref 6 | */ 7 | export function useClickOutside({ 8 | ref, 9 | callback, 10 | enabled, 11 | }: { 12 | ref: RefObject; 13 | callback: () => void; 14 | enabled: boolean; 15 | }) { 16 | const callbackRef = useRef(callback); 17 | callbackRef.current = callback; 18 | useEffect(() => { 19 | if (!enabled) { 20 | return; 21 | } 22 | /** 23 | * Alert if clicked on outside of element 24 | */ 25 | function handleClickOutside(event: MouseEvent) { 26 | if (ref.current && !ref.current.contains(event.target)) { 27 | callbackRef.current(); 28 | } 29 | } 30 | // Bind the event listener 31 | document.addEventListener('mousedown', handleClickOutside); 32 | return () => { 33 | // Unbind the event listener on clean up 34 | document.removeEventListener('mousedown', handleClickOutside); 35 | }; 36 | }, [ref, enabled]); 37 | } 38 | -------------------------------------------------------------------------------- /test/playwright.test.ts: -------------------------------------------------------------------------------- 1 | import { test } from '@playwright/test'; 2 | 3 | test.setTimeout(35e3); 4 | 5 | test('add todo', async ({ page }) => { 6 | await page.goto('/'); 7 | 8 | const nonce = Math.random() 9 | .toString(36) 10 | .replace(/[^a-z]+/g, '') 11 | .slice(0, 6); 12 | await page.type('.new-todo', nonce); 13 | await page.keyboard.press('Enter'); 14 | await page.waitForResponse('**/trpc/**'); 15 | await page.waitForSelector(`text=${nonce}`); 16 | }); 17 | 18 | export {}; 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Base Options: */ 4 | "skipLibCheck": true, 5 | "target": "es2022", 6 | "allowJs": true, 7 | "moduleDetection": "force", 8 | "isolatedModules": true, 9 | 10 | /* Strictness */ 11 | "strict": true, 12 | "checkJs": true, 13 | "allowImportingTsExtensions": true, 14 | 15 | /* Bundled projects */ 16 | "lib": ["dom", "dom.iterable", "ES2022"], 17 | "noEmit": true, 18 | "module": "Preserve", 19 | "moduleResolution": "bundler", 20 | "jsx": "preserve", 21 | "plugins": [{ "name": "next" }], 22 | "incremental": true, 23 | 24 | /* Path aliases */ 25 | "paths": { 26 | "~/*": ["./src/*"] 27 | } 28 | }, 29 | "include": [ 30 | "next-env.d.ts", 31 | "**/*.ts", 32 | "**/*.tsx", 33 | "*.js", 34 | ".next/types/**/*.ts" 35 | ], 36 | "exclude": ["node_modules"] 37 | } 38 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "github": { 3 | "silent": true 4 | } 5 | } 6 | --------------------------------------------------------------------------------