diff --git a/drizzle.config.ts b/drizzle.config.ts index 3d04386..e17d84d 100644 --- a/drizzle.config.ts +++ b/drizzle.config.ts @@ -4,7 +4,7 @@ import "dotenv/config"; export default { schema: "./src/server/schema.ts", out: "./drizzle/generated", - driver: "mysql2", + driver: "pg", breakpoints: true, dbCredentials: { connectionString: process.env.DATABASE_URL!, diff --git a/package.json b/package.json index 7d2f8a5..e4d149d 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "dependencies": { "@ably-labs/react-hooks": "^2.1.1", "@clerk/nextjs": "^4.23.2", + "@neondatabase/serverless": "^0.5.7", "@paralleldrive/cuid2": "^2.2.2", - "@planetscale/database": "^1.10.0", "@react-email/components": "^0.0.7", "@tanstack/react-query": "^4.32.6", "@trpc/client": "10.37.1", @@ -29,17 +29,17 @@ "dotenv": "^16.3.1", "drizzle-orm": "^0.28.2", "json2csv": "6.0.0-alpha.2", - "next": "^13.4.13", + "next": "^13.4.16", "nextjs-cors": "^2.1.2", - "postcss": "^8.4.27", + "postcss": "^8.4.28", "react": "18.2.0", "react-dom": "18.2.0", "react-email": "^1.9.4", "react-icons": "^4.10.1", - "resend": "^0.17.2", - "sharp": "^0.32.4", + "resend": "^1.0.0", + "sharp": "^0.32.5", "superjson": "1.13.1", - "zod": "^3.22.0" + "zod": "^3.22.1" }, "devDependencies": { "@types/eslint": "^8.44.2", @@ -51,7 +51,7 @@ "daisyui": "^3.5.1", "drizzle-kit": "^0.19.12", "eslint": "^8.47.0", - "eslint-config-next": "^13.4.15", + "eslint-config-next": "^13.4.16", "tailwindcss": "^3.3.3", "typescript": "^5.1.6" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ade0add..e10106f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,13 +10,13 @@ dependencies: version: 2.1.1(react-dom@18.2.0)(react@18.2.0) '@clerk/nextjs': specifier: ^4.23.2 - version: 4.23.2(next@13.4.13)(react-dom@18.2.0)(react@18.2.0) + version: 4.23.2(next@13.4.16)(react-dom@18.2.0)(react@18.2.0) + '@neondatabase/serverless': + specifier: ^0.5.7 + version: 0.5.7 '@paralleldrive/cuid2': specifier: ^2.2.2 version: 2.2.2 - '@planetscale/database': - specifier: ^1.10.0 - version: 1.10.0 '@react-email/components': specifier: ^0.0.7 version: 0.0.7 @@ -28,7 +28,7 @@ dependencies: version: 10.37.1(@trpc/server@10.37.1) '@trpc/next': specifier: 10.37.1 - version: 10.37.1(@tanstack/react-query@4.32.6)(@trpc/client@10.37.1)(@trpc/react-query@10.37.1)(@trpc/server@10.37.1)(next@13.4.13)(react-dom@18.2.0)(react@18.2.0) + version: 10.37.1(@tanstack/react-query@4.32.6)(@trpc/client@10.37.1)(@trpc/react-query@10.37.1)(@trpc/server@10.37.1)(next@13.4.16)(react-dom@18.2.0)(react@18.2.0) '@trpc/react-query': specifier: 10.37.1 version: 10.37.1(@tanstack/react-query@4.32.6)(@trpc/client@10.37.1)(@trpc/server@10.37.1)(react-dom@18.2.0)(react@18.2.0) @@ -49,25 +49,25 @@ dependencies: version: 1.2.43 autoprefixer: specifier: ^10.4.15 - version: 10.4.15(postcss@8.4.27) + version: 10.4.15(postcss@8.4.28) dotenv: specifier: ^16.3.1 version: 16.3.1 drizzle-orm: specifier: ^0.28.2 - version: 0.28.2(@planetscale/database@1.10.0) + version: 0.28.2(@neondatabase/serverless@0.5.7) json2csv: specifier: 6.0.0-alpha.2 version: 6.0.0-alpha.2 next: - specifier: ^13.4.13 - version: 13.4.13(react-dom@18.2.0)(react@18.2.0) + specifier: ^13.4.16 + version: 13.4.16(react-dom@18.2.0)(react@18.2.0) nextjs-cors: specifier: ^2.1.2 - version: 2.1.2(next@13.4.13) + version: 2.1.2(next@13.4.16) postcss: - specifier: ^8.4.27 - version: 8.4.27 + specifier: ^8.4.28 + version: 8.4.28 react: specifier: 18.2.0 version: 18.2.0 @@ -81,17 +81,17 @@ dependencies: specifier: ^4.10.1 version: 4.10.1(react@18.2.0) resend: - specifier: ^0.17.2 - version: 0.17.2 + specifier: ^1.0.0 + version: 1.0.0 sharp: - specifier: ^0.32.4 - version: 0.32.4 + specifier: ^0.32.5 + version: 0.32.5 superjson: specifier: 1.13.1 version: 1.13.1 zod: - specifier: ^3.22.0 - version: 3.22.0 + specifier: ^3.22.1 + version: 3.22.1 devDependencies: '@types/eslint': @@ -122,8 +122,8 @@ devDependencies: specifier: ^8.47.0 version: 8.47.0 eslint-config-next: - specifier: ^13.4.15 - version: 13.4.15(eslint@8.47.0)(typescript@5.1.6) + specifier: ^13.4.16 + version: 13.4.16(eslint@8.47.0)(typescript@5.1.6) tailwindcss: specifier: ^3.3.3 version: 3.3.3 @@ -231,7 +231,7 @@ packages: tslib: 2.4.1 dev: false - /@clerk/nextjs@4.23.2(next@13.4.13)(react-dom@18.2.0)(react@18.2.0): + /@clerk/nextjs@4.23.2(next@13.4.16)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-99bSVu9r1E9MxybO/6mmPAufSKq4KU7SFeMVkylX7UF8sy5t/LE9cLHyc+9jitcCGgZNai9Om4sj1WIgkNOP8w==} engines: {node: '>=14'} peerDependencies: @@ -243,7 +243,7 @@ packages: '@clerk/clerk-react': 4.23.2(react@18.2.0) '@clerk/clerk-sdk-node': 4.12.2 '@clerk/types': 3.49.0 - next: 13.4.13(react-dom@18.2.0)(react@18.2.0) + next: 13.4.16(react-dom@18.2.0)(react@18.2.0) path-to-regexp: 6.2.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -995,18 +995,24 @@ packages: read-yaml-file: 1.1.0 dev: false - /@next/env@13.4.13: - resolution: {integrity: sha512-fwz2QgVg08v7ZL7KmbQBLF2PubR/6zQdKBgmHEl3BCyWTEDsAQEijjw2gbFhI1tcKfLdOOJUXntz5vZ4S0Polg==} + /@neondatabase/serverless@0.5.7: + resolution: {integrity: sha512-pIcgFWueCn5WQvtwHxji1EBpo1iGnlnPs/K02qmy7P150oHiohvgH5C4gWMTW52fqiMpPvK9kAdV9D07oJsd7w==} + dependencies: + '@types/pg': 8.6.6 dev: false - /@next/eslint-plugin-next@13.4.15: - resolution: {integrity: sha512-R+cOYbVyJM30d4OaDgRSCbtqsaoHfjnRUUuKxm74rswR82mv0c8En7+SXXsEfIpLCmGNSqOP5zF8aEE5e09VQQ==} + /@next/env@13.4.16: + resolution: {integrity: sha512-pCU0sJBqdfKP9mwDadxvZd+eLz3fZrTlmmDHY12Hdpl3DD0vy8ou5HWKVfG0zZS6tqhL4wnQqRbspdY5nqa7MA==} + dev: false + + /@next/eslint-plugin-next@13.4.16: + resolution: {integrity: sha512-QuFtQl+oSEEQb0HMYBdvBoUaTiMxbY3go/MFkF3zOnfY0t84+IbAX78cw8ZCfr6cA6UcTq3nMIlCrHwDC/moxg==} dependencies: glob: 7.1.7 dev: true - /@next/swc-darwin-arm64@13.4.13: - resolution: {integrity: sha512-ZptVhHjzUuivnXMNCJ6lER33HN7lC+rZ01z+PM10Ows21NHFYMvGhi5iXkGtBDk6VmtzsbqnAjnx4Oz5um0FjA==} + /@next/swc-darwin-arm64@13.4.16: + resolution: {integrity: sha512-Rl6i1uUq0ciRa3VfEpw6GnWAJTSKo9oM2OrkGXPsm7rMxdd2FR5NkKc0C9xzFCI4+QtmBviWBdF2m3ur3Nqstw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -1014,8 +1020,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@13.4.13: - resolution: {integrity: sha512-t9nTiWCLApw8W4G1kqJyYP7y6/7lyal3PftmRturIxAIBlZss9wrtVN8nci50StDHmIlIDxfguYIEGVr9DbFTg==} + /@next/swc-darwin-x64@13.4.16: + resolution: {integrity: sha512-o1vIKYbZORyDmTrPV1hApt9NLyWrS5vr2p5hhLGpOnkBY1cz6DAXjv8Lgan8t6X87+83F0EUDlu7klN8ieZ06A==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -1023,8 +1029,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@13.4.13: - resolution: {integrity: sha512-xEHUqC8eqR5DHe8SOmMnDU1K3ggrJ28uIKltrQAwqFSSSmzjnN/XMocZkcVhuncuxYrpbri0iMQstRyRVdQVWg==} + /@next/swc-linux-arm64-gnu@13.4.16: + resolution: {integrity: sha512-JRyAl8lCfyTng4zoOmE6hNI2f1MFUr7JyTYCHl1RxX42H4a5LMwJhDVQ7a9tmDZ/yj+0hpBn+Aan+d6lA3v0UQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1032,8 +1038,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@13.4.13: - resolution: {integrity: sha512-sNf3MnLAm8rquSSAoeD9nVcdaDeRYOeey4stOWOyWIgbBDtP+C93amSgH/LPTDoUV7gNiU6f+ghepTjTjRgIUQ==} + /@next/swc-linux-arm64-musl@13.4.16: + resolution: {integrity: sha512-9gqVqNzUMWbUDgDiND18xoUqhwSm2gmksqXgCU0qaOKt6oAjWz8cWYjgpPVD0WICKFylEY/gvPEP1fMZDVFZ/g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1041,8 +1047,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@13.4.13: - resolution: {integrity: sha512-WhcRaJJSHyx9OWmKjjz+OWHumiPZWRqmM/09Bt7Up4UqUJFFhGExeztR4trtv3rflvULatu9IH/nTV8fUUgaMA==} + /@next/swc-linux-x64-gnu@13.4.16: + resolution: {integrity: sha512-KcQGwchAKmZVPa8i5PLTxvTs1/rcFnSltfpTm803Tr/BtBV3AxCkHLfhtoyVtVzx/kl/oue8oS+DSmbepQKwhw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1050,8 +1056,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@13.4.13: - resolution: {integrity: sha512-+Y4LLhOWWZQIDKVwr2R17lq2KSN0F1c30QVgGIWfnjjHpH8nrIWHEndhqYU+iFuW8It78CiJjQKTw4f51HD7jA==} + /@next/swc-linux-x64-musl@13.4.16: + resolution: {integrity: sha512-2RbMZNxYnJmW8EPHVBsGZPq5zqWAyBOc/YFxq/jIQ/Yn3RMFZ1dZVCjtIcsiaKmgh7mjA/W0ApbumutHNxRqqQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1059,8 +1065,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@13.4.13: - resolution: {integrity: sha512-rWurdOR20uxjfqd1X9vDAgv0Jb26KjyL8akF9CBeFqX8rVaBAnW/Wf6A2gYEwyYY4Bai3T7p1kro6DFrsvBAAw==} + /@next/swc-win32-arm64-msvc@13.4.16: + resolution: {integrity: sha512-thDcGonELN7edUKzjzlHrdoKkm7y8IAdItQpRvvMxNUXa4d9r0ElofhTZj5emR7AiXft17hpen+QAkcWpqG7Jg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -1068,8 +1074,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@13.4.13: - resolution: {integrity: sha512-E8bSPwRuY5ibJ3CzLQmJEt8qaWrPYuUTwnrwygPUEWoLzD5YRx9SD37oXRdU81TgGwDzCxpl7z5Nqlfk50xAog==} + /@next/swc-win32-ia32-msvc@13.4.16: + resolution: {integrity: sha512-f7SE1Mo4JAchUWl0LQsbtySR9xCa+x55C0taetjUApKtcLR3AgAjASrrP+oE1inmLmw573qRnE1eZN8YJfEBQw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -1077,8 +1083,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@13.4.13: - resolution: {integrity: sha512-4KlyC6jWRubPnppgfYsNTPeWfGCxtWLh5vaOAW/kdzAk9widqho8Qb5S4K2vHmal1tsURi7Onk2MMCV1phvyqA==} + /@next/swc-win32-x64-msvc@13.4.16: + resolution: {integrity: sha512-WamDZm1M/OEM4QLce3lOmD1XdLEl37zYZwlmOLhmF7qYJ2G6oYm9+ejZVv+LakQIsIuXhSpVlOvrxIAHqwRkPQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1269,11 +1275,6 @@ packages: webcrypto-core: 1.7.7 dev: false - /@planetscale/database@1.10.0: - resolution: {integrity: sha512-XMfNRjIPgGTga6g1YpGr7E21CcnHZcHZdyhRUIiZ/AlpD+ts65UF2B3wKjcu7MKMynmmcOGs6R9kAT6D1OTlZQ==} - engines: {node: '>=16'} - dev: false - /@radix-ui/react-compose-refs@1.0.0(react@18.2.0): resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==} peerDependencies: @@ -1514,7 +1515,7 @@ packages: '@trpc/server': 10.37.1 dev: false - /@trpc/next@10.37.1(@tanstack/react-query@4.32.6)(@trpc/client@10.37.1)(@trpc/react-query@10.37.1)(@trpc/server@10.37.1)(next@13.4.13)(react-dom@18.2.0)(react@18.2.0): + /@trpc/next@10.37.1(@tanstack/react-query@4.32.6)(@trpc/client@10.37.1)(@trpc/react-query@10.37.1)(@trpc/server@10.37.1)(next@13.4.16)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-0KEgr09mBfao56lkj7ZBfVOY86d3+bDH1o0zJkDHSH60Dp/hIJ7wLCnZJIhePlZxEwknCQjVeLsTy4Pqlu8NyQ==} peerDependencies: '@tanstack/react-query': ^4.18.0 @@ -1529,7 +1530,7 @@ packages: '@trpc/client': 10.37.1(@trpc/server@10.37.1) '@trpc/react-query': 10.37.1(@tanstack/react-query@4.32.6)(@trpc/client@10.37.1)(@trpc/server@10.37.1)(react-dom@18.2.0)(react@18.2.0) '@trpc/server': 10.37.1 - next: 13.4.13(react-dom@18.2.0)(react@18.2.0) + next: 13.4.16(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-ssr-prepass: 1.5.0(react@18.2.0) @@ -1677,6 +1678,14 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: false + /@types/pg@8.6.6: + resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} + dependencies: + '@types/node': 20.5.0 + pg-protocol: 1.6.0 + pg-types: 2.2.0 + dev: false + /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} dev: true @@ -2083,11 +2092,17 @@ packages: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: false + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + dev: true + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /autoprefixer@10.4.15(postcss@8.4.27): + /autoprefixer@10.4.15(postcss@8.4.28): resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==} engines: {node: ^10 || ^12 || >=14} hasBin: true @@ -2095,11 +2110,11 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.21.10 - caniuse-lite: 1.0.30001520 + caniuse-lite: 1.0.30001521 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.27 + postcss: 8.4.28 postcss-value-parser: 4.2.0 dev: false @@ -2113,16 +2128,6 @@ packages: engines: {node: '>=4'} dev: true - /axios@1.4.0: - resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==} - dependencies: - follow-redirects: 1.15.2 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false - /axobject-query@3.2.1: resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} dependencies: @@ -2206,8 +2211,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001520 - electron-to-chromium: 1.4.490 + caniuse-lite: 1.0.30001521 + electron-to-chromium: 1.4.492 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) dev: false @@ -2293,8 +2298,8 @@ packages: engines: {node: '>=14.16'} dev: true - /caniuse-lite@1.0.30001520: - resolution: {integrity: sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA==} + /caniuse-lite@1.0.30001521: + resolution: {integrity: sha512-fnx1grfpEOvDGH+V17eccmNjucGUnCbP6KL+l5KqBIerp26WK/+RQ7CIDE37KGJjaPyqWXXlFUyKiWmvdNNKmQ==} dev: false /chainsaw@0.1.0: @@ -2539,8 +2544,8 @@ packages: dependencies: colord: 2.9.3 css-selector-tokenizer: 0.8.0 - postcss: 8.4.27 - postcss-js: 4.0.1(postcss@8.4.27) + postcss: 8.4.28 + postcss-js: 4.0.1(postcss@8.4.28) tailwindcss: 3.3.3 transitivePeerDependencies: - ts-node @@ -2751,12 +2756,12 @@ packages: hanji: 0.0.5 json-diff: 0.9.0 minimatch: 7.4.6 - zod: 3.22.0 + zod: 3.22.1 transitivePeerDependencies: - supports-color dev: true - /drizzle-orm@0.28.2(@planetscale/database@1.10.0): + /drizzle-orm@0.28.2(@neondatabase/serverless@0.5.7): resolution: {integrity: sha512-QRyuzvpJr7GE6LpvZ/sg2nAKNg2if1uGGkgFTiXn4auuYId//vVJe6HBsDTktfKfcaDGzIYos+/f+PS5EkBmrg==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' @@ -2818,7 +2823,7 @@ packages: sqlite3: optional: true dependencies: - '@planetscale/database': 1.10.0 + '@neondatabase/serverless': 0.5.7 dev: false /duplexer2@0.1.4: @@ -2838,8 +2843,8 @@ packages: semver: 7.5.4 dev: false - /electron-to-chromium@1.4.490: - resolution: {integrity: sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==} + /electron-to-chromium@1.4.492: + resolution: {integrity: sha512-36K9b/6skMVwAIEsC7GiQ8I8N3soCALVSHqWHzNDtGemAcI9Xu8hP02cywWM0A794rTHm0b0zHPeLJHtgFVamQ==} dev: false /emoji-regex@9.2.2: @@ -2916,6 +2921,21 @@ packages: which-typed-array: 1.1.11 dev: true + /es-iterator-helpers@1.0.12: + resolution: {integrity: sha512-T6Ldv67RYULYtZ1k1omngDTVQSTVNX/ZSjDiwlw0PMokhy8kq2LFElleaEjpvlSaXh9ugJ4zrBgbQ7L+Bjdm3Q==} + dependencies: + asynciterator.prototype: 1.0.0 + es-abstract: 1.22.1 + es-set-tostringtag: 2.0.1 + function-bind: 1.1.1 + globalthis: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + iterator.prototype: 1.1.0 + safe-array-concat: 1.0.0 + dev: true + /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} @@ -3090,8 +3110,8 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-next@13.4.15(eslint@8.47.0)(typescript@5.1.6): - resolution: {integrity: sha512-OSD4YQMSR8KvnTIQErCpFnXjElZEmXP8KgAXU3/8oGfKFa4dexRZtZl8DKs9M0dO5J3HHhD6I2pdHvICEuB5FQ==} + /eslint-config-next@13.4.16(eslint@8.47.0)(typescript@5.1.6): + resolution: {integrity: sha512-Of73d/FiaGf0GLCxxTGdh4rW8bRDvsqypylefkshE/uDDpQr8ifVQsD4UiB99rhegks7nJGkYtUnR3dC7kfFlw==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -3099,7 +3119,7 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 13.4.15 + '@next/eslint-plugin-next': 13.4.16 '@rushstack/eslint-patch': 1.3.3 '@typescript-eslint/parser': 6.4.0(eslint@8.47.0)(typescript@5.1.6) eslint: 8.47.0 @@ -3107,7 +3127,7 @@ packages: eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.0)(eslint@8.47.0) eslint-plugin-import: 2.28.0(@typescript-eslint/parser@6.4.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.47.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.47.0) - eslint-plugin-react: 7.33.1(eslint@8.47.0) + eslint-plugin-react: 7.33.2(eslint@8.47.0) eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.47.0) typescript: 5.1.6 transitivePeerDependencies: @@ -3248,8 +3268,8 @@ packages: eslint: 8.47.0 dev: true - /eslint-plugin-react@7.33.1(eslint@8.47.0): - resolution: {integrity: sha512-L093k0WAMvr6VhNwReB8VgOq5s2LesZmrpPdKz/kZElQDzqS7G7+DnKoqT+w4JwuiGeAhAvHO0fvy0Eyk4ejDA==} + /eslint-plugin-react@7.33.2(eslint@8.47.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -3258,6 +3278,7 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 + es-iterator-helpers: 1.0.12 eslint: 8.47.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 @@ -3498,16 +3519,6 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /follow-redirects@1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -3523,15 +3534,6 @@ packages: mime-types: 2.1.35 dev: false - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - /fraction.js@4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: false @@ -3948,6 +3950,13 @@ packages: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} dev: false + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: @@ -3998,6 +4007,19 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -4009,6 +4031,10 @@ packages: engines: {node: '>=8'} dev: false + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -4047,6 +4073,10 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: @@ -4084,12 +4114,23 @@ packages: engines: {node: '>=10'} dev: false + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 dev: true + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + dev: true + /is-what@4.1.15: resolution: {integrity: sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==} engines: {node: '>=12.13'} @@ -4120,6 +4161,16 @@ packages: - encoding dev: false + /iterator.prototype@1.1.0: + resolution: {integrity: sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==} + dependencies: + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + has-tostringtag: 1.0.0 + reflect.getprototypeof: 1.0.3 + dev: true + /jiti@1.19.1: resolution: {integrity: sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==} hasBin: true @@ -4470,8 +4521,8 @@ packages: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} dev: true - /next@13.4.13(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-A3YVbVDNeXLhWsZ8Nf6IkxmNlmTNz0yVg186NJ97tGZqPDdPzTrHotJ+A1cuJm2XfuWPrKOUZILl5iBQkIf8Jw==} + /next@13.4.16(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-1xaA/5DrfpPu0eV31Iro7JfPeqO8uxQWb1zYNTe+KDKdzqkAGapLcDYHMLNKXKB7lHjZ7LfKUOf9dyuzcibrhA==} engines: {node: '>=16.8.0'} hasBin: true peerDependencies: @@ -4485,10 +4536,10 @@ packages: sass: optional: true dependencies: - '@next/env': 13.4.13 + '@next/env': 13.4.16 '@swc/helpers': 0.5.1 busboy: 1.6.0 - caniuse-lite: 1.0.30001520 + caniuse-lite: 1.0.30001521 postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -4496,27 +4547,27 @@ packages: watchpack: 2.4.0 zod: 3.21.4 optionalDependencies: - '@next/swc-darwin-arm64': 13.4.13 - '@next/swc-darwin-x64': 13.4.13 - '@next/swc-linux-arm64-gnu': 13.4.13 - '@next/swc-linux-arm64-musl': 13.4.13 - '@next/swc-linux-x64-gnu': 13.4.13 - '@next/swc-linux-x64-musl': 13.4.13 - '@next/swc-win32-arm64-msvc': 13.4.13 - '@next/swc-win32-ia32-msvc': 13.4.13 - '@next/swc-win32-x64-msvc': 13.4.13 + '@next/swc-darwin-arm64': 13.4.16 + '@next/swc-darwin-x64': 13.4.16 + '@next/swc-linux-arm64-gnu': 13.4.16 + '@next/swc-linux-arm64-musl': 13.4.16 + '@next/swc-linux-x64-gnu': 13.4.16 + '@next/swc-linux-x64-musl': 13.4.16 + '@next/swc-win32-arm64-msvc': 13.4.16 + '@next/swc-win32-ia32-msvc': 13.4.16 + '@next/swc-win32-x64-msvc': 13.4.16 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros dev: false - /nextjs-cors@2.1.2(next@13.4.13): + /nextjs-cors@2.1.2(next@13.4.16): resolution: {integrity: sha512-2yOVivaaf2ILe4f/qY32hnj3oC77VCOsUQJQfhVMGsXE/YMEWUY2zy78sH9FKUCM7eG42/l3pDofIzMD781XGA==} peerDependencies: next: ^8.1.1-canary.54 || ^9.0.0 || ^10.0.0-0 || ^11.0.0 || ^12.0.0 || ^13.0.0 dependencies: cors: 2.8.5 - next: 13.4.13(react-dom@18.2.0)(react@18.2.0) + next: 13.4.16(react-dom@18.2.0)(react@18.2.0) dev: false /no-case@3.0.4: @@ -4793,6 +4844,26 @@ packages: resolution: {integrity: sha512-YYEs+eauIjDH5nUEGi18EohWE0nV2QbGTqmxQcqgZ/0g+laPCQmuIqq7EBLVi9uim9zMgfJv0QBZEnQ3uHw/Tw==} dev: false + /pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + dev: false + + /pg-protocol@1.6.0: + resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} + dev: false + + /pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + dev: false + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -4837,13 +4908,13 @@ packages: resolve: 1.22.4 dev: false - /postcss-import@15.1.0(postcss@8.4.27): + /postcss-import@15.1.0(postcss@8.4.28): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.27 + postcss: 8.4.28 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.4 @@ -4859,14 +4930,14 @@ packages: postcss: 8.4.21 dev: false - /postcss-js@4.0.1(postcss@8.4.27): + /postcss-js@4.0.1(postcss@8.4.28): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.27 + postcss: 8.4.28 dev: true /postcss-load-config@3.1.4(postcss@8.4.21): @@ -4886,7 +4957,7 @@ packages: yaml: 1.10.2 dev: false - /postcss-load-config@4.0.1(postcss@8.4.27): + /postcss-load-config@4.0.1(postcss@8.4.28): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -4899,7 +4970,7 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.27 + postcss: 8.4.28 yaml: 2.3.1 dev: true @@ -4913,13 +4984,13 @@ packages: postcss-selector-parser: 6.0.13 dev: false - /postcss-nested@6.0.1(postcss@8.4.27): + /postcss-nested@6.0.1(postcss@8.4.28): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.27 + postcss: 8.4.28 postcss-selector-parser: 6.0.13 dev: true @@ -4951,14 +5022,36 @@ packages: source-map-js: 1.0.2 dev: false - /postcss@8.4.27: - resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} + /postcss@8.4.28: + resolution: {integrity: sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 1.0.2 + /postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + dev: false + + /postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + dependencies: + xtend: 4.0.2 + dev: false + /prebuild-install@7.1.1: resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} engines: {node: '>=10'} @@ -5013,10 +5106,6 @@ packages: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} dev: false - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false - /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: @@ -5192,6 +5281,18 @@ packages: resolve: 1.22.4 dev: false + /reflect.getprototypeof@1.0.3: + resolution: {integrity: sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: true + /regenerator-runtime@0.14.0: resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} @@ -5204,14 +5305,15 @@ packages: functions-have-names: 1.2.3 dev: true - /resend@0.17.2: - resolution: {integrity: sha512-lakm76u4MiIDeMF1s2tCmjtksOhwZOs4WcAXkA7aUTvl+63/h+0h6Q6WnkB8RGtj6GakUhQuUkiZshfXgtIrGw==} + /resend@1.0.0: + resolution: {integrity: sha512-8LEE4gncmcm8bsvxvahZFpFk5hxUrKdagqWoX/MRXVU2YZ9coYxqZDeDYXG9pexz1A694bjE1hiQbBAA+bHAow==} + engines: {node: '>=16'} dependencies: '@react-email/render': 0.0.7 - axios: 1.4.0 + node-fetch: 2.6.12 type-fest: 3.13.0 transitivePeerDependencies: - - debug + - encoding dev: false /resolve-alpn@1.2.1: @@ -5340,8 +5442,8 @@ packages: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: false - /sharp@0.32.4: - resolution: {integrity: sha512-exUnZewqVZC6UXqXuQ8fyJJv0M968feBi04jb9GcUHrWtkRoAKnbJt8IfwT4NJs7FskArbJ14JAFGVuooszoGg==} + /sharp@0.32.5: + resolution: {integrity: sha512-0dap3iysgDkNaPOaOL4X/0akdu0ma62GcdC2NBQ+93eqpePdDdr2/LM0sFdDSMmN7yS+odyZtPsb7tx/cYBKnQ==} engines: {node: '>=14.15.0'} requiresBuild: true dependencies: @@ -5694,11 +5796,11 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.27 - postcss-import: 15.1.0(postcss@8.4.27) - postcss-js: 4.0.1(postcss@8.4.27) - postcss-load-config: 4.0.1(postcss@8.4.27) - postcss-nested: 6.0.1(postcss@8.4.27) + postcss: 8.4.28 + postcss-import: 15.1.0(postcss@8.4.28) + postcss-js: 4.0.1(postcss@8.4.28) + postcss-load-config: 4.0.1(postcss@8.4.28) + postcss-nested: 6.0.1(postcss@8.4.28) postcss-selector-parser: 6.0.13 resolve: 1.22.4 sucrase: 3.34.0 @@ -6067,6 +6169,33 @@ packages: is-symbol: 1.0.4 dev: true + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.5 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.11 + dev: true + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: true + /which-typed-array@1.1.11: resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} engines: {node: '>= 0.4'} @@ -6133,5 +6262,5 @@ packages: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} dev: false - /zod@3.22.0: - resolution: {integrity: sha512-y5KZY/ssf5n7hCGDGGtcJO/EBJEm5Pa+QQvFBeyMOtnFYOSflalxIFFvdaYevPhePcmcKC4aTbFkCcXN7D0O8Q==} + /zod@3.22.1: + resolution: {integrity: sha512-+qUhAMl414+Elh+fRNtpU+byrwjDFOS1N7NioLY+tSlcADTx4TkCUua/hxJvxwDXcV4397/nZ420jy4n4+3WUg==} diff --git a/src/pages/api/external/ping.ts b/src/pages/api/external/ping.ts index e0d8100..9125d74 100644 --- a/src/pages/api/external/ping.ts +++ b/src/pages/api/external/ping.ts @@ -1,5 +1,4 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import { db } from "~/server/db"; import { validateRequest } from "~/server/unkey"; export default async function handler( @@ -9,7 +8,6 @@ export default async function handler( const isValid = await validateRequest(req, res); if (isValid) { - await db.query.votes.findFirst(); res.status(200).json({ result: "Pong!" }); } } diff --git a/src/server/api/routers/room.ts b/src/server/api/routers/room.ts index c27709f..6508352 100644 --- a/src/server/api/routers/room.ts +++ b/src/server/api/routers/room.ts @@ -17,16 +17,19 @@ export const roomRouter = createTRPCRouter({ }) ) .mutation(async ({ ctx, input }) => { - const room = await ctx.db.insert(rooms).values({ - id: createId(), - userId: ctx.auth.userId, - roomName: input.name, - storyName: "First Story!", - scale: "0.5,1,2,3,5,8", - visible: false, - }); + const room = await ctx.db + .insert(rooms) + .values({ + id: createId(), + userId: ctx.auth.userId, + roomName: input.name, + storyName: "First Story!", + scale: "0.5,1,2,3,5,8", + visible: false, + }) + .returning(); - const success = room.rowsAffected > 0; + const success = room.length > 0; if (room) { await invalidateCache(`kv_roomcount`); await invalidateCache(`kv_roomlist_${ctx.auth.userId}`); @@ -145,9 +148,10 @@ export const roomRouter = createTRPCRouter({ .filter((item) => item !== "") .toString(), }) - .where(eq(rooms.id, input.roomId)); + .where(eq(rooms.id, input.roomId)) + .returning(); - const success = newRoom.rowsAffected > 0; + const success = newRoom.length > 0; if (success) { await publishToChannel( @@ -166,15 +170,12 @@ export const roomRouter = createTRPCRouter({ .mutation(async ({ ctx, input }) => { const deletedRoom = await ctx.db .delete(rooms) - .where(eq(rooms.id, input.id)); + .where(eq(rooms.id, input.id)) + .returning(); - const success = deletedRoom.rowsAffected > 0; + const success = deletedRoom.length > 0; if (success) { - await ctx.db.delete(votes).where(eq(votes.roomId, input.id)); - - await ctx.db.delete(logs).where(eq(logs.roomId, input.id)); - await invalidateCache(`kv_roomcount`); await invalidateCache(`kv_votecount`); await invalidateCache(`kv_roomlist_${ctx.auth.userId}`); diff --git a/src/server/api/routers/vote.ts b/src/server/api/routers/vote.ts index 28cad1d..f797c62 100644 --- a/src/server/api/routers/vote.ts +++ b/src/server/api/routers/vote.ts @@ -44,19 +44,23 @@ export const voteRouter = createTRPCRouter({ userId: ctx.auth.userId, roomId: input.roomId, }) - .where(eq(votes.userId, ctx.auth.userId)); + .where(eq(votes.userId, ctx.auth.userId)) + .returning(); - let success = updateResult.rowsAffected > 0; + let success = updateResult.length > 0; if (!success) { - const vote = await ctx.db.insert(votes).ignore().values({ - id: createId(), - value: input.value, - userId: ctx.auth.userId, - roomId: input.roomId, - }); + const vote = await ctx.db + .insert(votes) + .values({ + id: createId(), + value: input.value, + userId: ctx.auth.userId, + roomId: input.roomId, + }) + .returning(); - success = vote.rowsAffected > 0; + success = vote.length > 0; } if (success) { diff --git a/src/server/db.ts b/src/server/db.ts index 8055892..34d491a 100644 --- a/src/server/db.ts +++ b/src/server/db.ts @@ -1,11 +1,9 @@ -import { drizzle } from "drizzle-orm/planetscale-serverless"; -import { connect } from "@planetscale/database"; +import { neon, neonConfig } from "@neondatabase/serverless"; +import { drizzle } from "drizzle-orm/neon-http"; import { env } from "~/env.mjs"; import * as schema from "~/server/schema"; -// create the connection -const connection = connect({ - url: env.DATABASE_URL, -}); +neonConfig.fetchConnectionCache = true; -export const db = drizzle(connection, { schema }); +const sql = neon(env.DATABASE_URL); +export const db = drizzle(sql, { schema }); diff --git a/src/server/schema.ts b/src/server/schema.ts index 79023bd..acf58fe 100644 --- a/src/server/schema.ts +++ b/src/server/schema.ts @@ -1,13 +1,13 @@ import { timestamp, - mysqlTable, + pgTable, varchar, boolean, json, -} from "drizzle-orm/mysql-core"; +} from "drizzle-orm/pg-core"; import { relations } from "drizzle-orm"; -export const rooms = mysqlTable("Room", { +export const rooms = pgTable("Room", { id: varchar("id", { length: 255 }).notNull().primaryKey(), created_at: timestamp("created_at").defaultNow(), userId: varchar("userId", { length: 255 }).notNull(), @@ -22,11 +22,13 @@ export const roomsRelations = relations(rooms, ({ many }) => ({ logs: many(logs), })); -export const votes = mysqlTable("Vote", { +export const votes = pgTable("Vote", { id: varchar("id", { length: 255 }).notNull().primaryKey(), created_at: timestamp("created_at").defaultNow(), userId: varchar("userId", { length: 255 }).notNull(), - roomId: varchar("roomId", { length: 255 }).notNull(), + roomId: varchar("roomId", { length: 255 }) + .notNull() + .references(() => rooms.id, { onDelete: "cascade" }), value: varchar("value", { length: 255 }).notNull(), }); @@ -37,11 +39,15 @@ export const votesRelations = relations(votes, ({ one }) => ({ }), })); -export const logs = mysqlTable("Log", { +export const logs = pgTable("Log", { id: varchar("id", { length: 255 }).notNull().primaryKey(), created_at: timestamp("created_at").defaultNow(), - userId: varchar("userId", { length: 255 }).notNull(), - roomId: varchar("roomId", { length: 255 }).notNull(), + userId: varchar("userId", { length: 255 }) + .notNull() + .references(() => rooms.id, { onDelete: "cascade" }), + roomId: varchar("roomId", { length: 255 }) + .notNull() + .references(() => rooms.id, { onDelete: "cascade" }), scale: varchar("scale", { length: 255 }), votes: json("votes"), roomName: varchar("roomName", { length: 255 }), diff --git a/src/server/webhookHelpers.ts b/src/server/webhookHelpers.ts index 981d3c2..ae9ee91 100644 --- a/src/server/webhookHelpers.ts +++ b/src/server/webhookHelpers.ts @@ -10,8 +10,6 @@ export const onUserDeletedHandler = async ( ) => { try { await db.delete(rooms).where(eq(rooms.userId, userId)); - await db.delete(logs).where(eq(logs.userId, userId)); - await db.delete(votes).where(eq(votes.userId, userId)); res.status(200).json({ result: "USER DELETED" }); } catch (error) {