commit
34a18af2f4
32 changed files with 323 additions and 751 deletions
11
package.json
11
package.json
|
@ -14,7 +14,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ably-labs/react-hooks": "^2.1.1",
|
"@ably-labs/react-hooks": "^2.1.1",
|
||||||
"@clerk/nextjs": "^4.23.2",
|
"@clerk/nextjs": "^4.23.3",
|
||||||
"@neondatabase/serverless": "^0.6.0",
|
"@neondatabase/serverless": "^0.6.0",
|
||||||
"@paralleldrive/cuid2": "^2.2.2",
|
"@paralleldrive/cuid2": "^2.2.2",
|
||||||
"@react-email/components": "^0.0.7",
|
"@react-email/components": "^0.0.7",
|
||||||
|
@ -37,7 +37,6 @@
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
"react-email": "^1.9.4",
|
"react-email": "^1.9.4",
|
||||||
"react-icons": "^4.10.1",
|
"react-icons": "^4.10.1",
|
||||||
"resend": "^1.0.0",
|
|
||||||
"sharp": "^0.32.5",
|
"sharp": "^0.32.5",
|
||||||
"superjson": "1.13.1",
|
"superjson": "1.13.1",
|
||||||
"zod": "^3.22.2"
|
"zod": "^3.22.2"
|
||||||
|
@ -49,15 +48,15 @@
|
||||||
"@types/react": "^18.2.21",
|
"@types/react": "^18.2.21",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.4.1",
|
"@typescript-eslint/eslint-plugin": "^6.4.1",
|
||||||
"@typescript-eslint/parser": "^6.4.1",
|
"@typescript-eslint/parser": "^6.4.1",
|
||||||
|
"bufferutil": "^4.0.7",
|
||||||
"daisyui": "^3.6.3",
|
"daisyui": "^3.6.3",
|
||||||
"drizzle-kit": "^0.19.13",
|
"drizzle-kit": "^0.19.13",
|
||||||
"eslint": "^8.48.0",
|
"eslint": "^8.48.0",
|
||||||
"eslint-config-next": "^13.4.19",
|
"eslint-config-next": "^13.4.19",
|
||||||
"pg": "^8.11.3",
|
"pg": "^8.11.3",
|
||||||
"tailwindcss": "^3.3.3",
|
"tailwindcss": "^3.3.3",
|
||||||
"typescript": "^5.2.2"
|
"typescript": "^5.2.2",
|
||||||
},
|
"utf-8-validate": "5.0.2",
|
||||||
"ct3aMetadata": {
|
"ws": "^8.13.0"
|
||||||
"initVersion": "7.5.9"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
410
pnpm-lock.yaml
generated
410
pnpm-lock.yaml
generated
|
@ -7,10 +7,10 @@ settings:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@ably-labs/react-hooks':
|
'@ably-labs/react-hooks':
|
||||||
specifier: ^2.1.1
|
specifier: ^2.1.1
|
||||||
version: 2.1.1(react-dom@18.2.0)(react@18.2.0)
|
version: 2.1.1(bufferutil@4.0.7)(react-dom@18.2.0)(react@18.2.0)(utf-8-validate@5.0.2)
|
||||||
'@clerk/nextjs':
|
'@clerk/nextjs':
|
||||||
specifier: ^4.23.2
|
specifier: ^4.23.3
|
||||||
version: 4.23.2(next@13.4.19)(react-dom@18.2.0)(react@18.2.0)
|
version: 4.23.3(next@13.4.19)(react-dom@18.2.0)(react@18.2.0)
|
||||||
'@neondatabase/serverless':
|
'@neondatabase/serverless':
|
||||||
specifier: ^0.6.0
|
specifier: ^0.6.0
|
||||||
version: 0.6.0
|
version: 0.6.0
|
||||||
|
@ -77,9 +77,6 @@ dependencies:
|
||||||
react-icons:
|
react-icons:
|
||||||
specifier: ^4.10.1
|
specifier: ^4.10.1
|
||||||
version: 4.10.1(react@18.2.0)
|
version: 4.10.1(react@18.2.0)
|
||||||
resend:
|
|
||||||
specifier: ^1.0.0
|
|
||||||
version: 1.0.0
|
|
||||||
sharp:
|
sharp:
|
||||||
specifier: ^0.32.5
|
specifier: ^0.32.5
|
||||||
version: 0.32.5
|
version: 0.32.5
|
||||||
|
@ -109,6 +106,9 @@ devDependencies:
|
||||||
'@typescript-eslint/parser':
|
'@typescript-eslint/parser':
|
||||||
specifier: ^6.4.1
|
specifier: ^6.4.1
|
||||||
version: 6.4.1(eslint@8.48.0)(typescript@5.2.2)
|
version: 6.4.1(eslint@8.48.0)(typescript@5.2.2)
|
||||||
|
bufferutil:
|
||||||
|
specifier: ^4.0.7
|
||||||
|
version: 4.0.7
|
||||||
daisyui:
|
daisyui:
|
||||||
specifier: ^3.6.3
|
specifier: ^3.6.3
|
||||||
version: 3.6.3
|
version: 3.6.3
|
||||||
|
@ -130,6 +130,12 @@ devDependencies:
|
||||||
typescript:
|
typescript:
|
||||||
specifier: ^5.2.2
|
specifier: ^5.2.2
|
||||||
version: 5.2.2
|
version: 5.2.2
|
||||||
|
utf-8-validate:
|
||||||
|
specifier: 5.0.2
|
||||||
|
version: 5.0.2
|
||||||
|
ws:
|
||||||
|
specifier: ^8.13.0
|
||||||
|
version: 8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.2)
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
|
@ -138,13 +144,13 @@ packages:
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@ably-labs/react-hooks@2.1.1(react-dom@18.2.0)(react@18.2.0):
|
/@ably-labs/react-hooks@2.1.1(bufferutil@4.0.7)(react-dom@18.2.0)(react@18.2.0)(utf-8-validate@5.0.2):
|
||||||
resolution: {integrity: sha512-Bunqu9GDFInZLpFMfWhUboU1g4W5UXzDfeAqI9ueNIF3p9KIMS7LfgjKBfXsC0DtAWkBgCjL22PvNToiHP92Ig==}
|
resolution: {integrity: sha512-Bunqu9GDFInZLpFMfWhUboU1g4W5UXzDfeAqI9ueNIF3p9KIMS7LfgjKBfXsC0DtAWkBgCjL22PvNToiHP92Ig==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: '>=18.1.0'
|
react: '>=18.1.0'
|
||||||
react-dom: '>=18.1.0'
|
react-dom: '>=18.1.0'
|
||||||
dependencies:
|
dependencies:
|
||||||
ably: 1.2.43
|
ably: 1.2.43(bufferutil@4.0.7)(utf-8-validate@5.0.2)
|
||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
react-dom: 18.2.0(react@18.2.0)
|
react-dom: 18.2.0(react@18.2.0)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
|
@ -191,11 +197,11 @@ packages:
|
||||||
dependencies:
|
dependencies:
|
||||||
regenerator-runtime: 0.14.0
|
regenerator-runtime: 0.14.0
|
||||||
|
|
||||||
/@clerk/backend@0.27.0:
|
/@clerk/backend@0.28.0:
|
||||||
resolution: {integrity: sha512-Sj541JrpqAn1A/UwdyDBxFV3stq2A/Pe/8HdPTG3Cct6briPyavfi46O5s1+L3BSvUcKUY+UbM0+8VsoCNFi4w==}
|
resolution: {integrity: sha512-2HbpJljKhz6642cyIcL3NE/QUQM1Ty4Vm7h9Pc/PsmuINfb6DI2HaP29INb6bt8GiY9xbrJcGOkMfBS9iHCTMQ==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@clerk/types': 3.49.0
|
'@clerk/types': 3.50.0
|
||||||
'@peculiar/webcrypto': 1.4.1
|
'@peculiar/webcrypto': 1.4.1
|
||||||
'@types/node': 16.18.6
|
'@types/node': 16.18.6
|
||||||
cookie: 0.5.0
|
cookie: 0.5.0
|
||||||
|
@ -205,24 +211,24 @@ packages:
|
||||||
tslib: 2.4.1
|
tslib: 2.4.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@clerk/clerk-react@4.23.2(react@18.2.0):
|
/@clerk/clerk-react@4.24.0(react@18.2.0):
|
||||||
resolution: {integrity: sha512-6MJa8ecr22qHhTfdkMMIJGctMBqj01fLJ4vmfZvr22tIkwkPXoeYJd5XcFKuSoO2dXc1eHD/F9i/HdCqGm68gw==}
|
resolution: {integrity: sha512-D2NtrMrDuoLvgTn0jtZEpmCn13heMkmdy30HzoOxmNOmHiVuQ16L/eZyCO1HH1DH2pcJnpXIuC0OdQg26DDK6g==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: '>=16'
|
react: '>=16'
|
||||||
dependencies:
|
dependencies:
|
||||||
'@clerk/shared': 0.21.0(react@18.2.0)
|
'@clerk/shared': 0.22.0(react@18.2.0)
|
||||||
'@clerk/types': 3.49.0
|
'@clerk/types': 3.50.0
|
||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
tslib: 2.4.1
|
tslib: 2.4.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@clerk/clerk-sdk-node@4.12.2:
|
/@clerk/clerk-sdk-node@4.12.3:
|
||||||
resolution: {integrity: sha512-7xYPsLSeGO5XoP0No/9m2dsCMezwtmiYGKOwWzt41ZzJNFlU0rfqYF3VOZEsbtQlc3ZXeU+67ItjoJYrf3kT6A==}
|
resolution: {integrity: sha512-IchaYk1tfT+bJz6LeC+WGJlFB0y1HNQbxnPKfsZMojZgWe68cK1TDF/n5w+4FKjUiRj2vNbewDoVUZhKZrRPnw==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@clerk/backend': 0.27.0
|
'@clerk/backend': 0.28.0
|
||||||
'@clerk/types': 3.49.0
|
'@clerk/types': 3.50.0
|
||||||
'@types/cookies': 0.7.7
|
'@types/cookies': 0.7.7
|
||||||
'@types/express': 4.17.14
|
'@types/express': 4.17.14
|
||||||
'@types/node-fetch': 2.6.2
|
'@types/node-fetch': 2.6.2
|
||||||
|
@ -231,18 +237,18 @@ packages:
|
||||||
tslib: 2.4.1
|
tslib: 2.4.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@clerk/nextjs@4.23.2(next@13.4.19)(react-dom@18.2.0)(react@18.2.0):
|
/@clerk/nextjs@4.23.3(next@13.4.19)(react-dom@18.2.0)(react@18.2.0):
|
||||||
resolution: {integrity: sha512-99bSVu9r1E9MxybO/6mmPAufSKq4KU7SFeMVkylX7UF8sy5t/LE9cLHyc+9jitcCGgZNai9Om4sj1WIgkNOP8w==}
|
resolution: {integrity: sha512-q8CWhPnqzG6KHII0thghQGhR/kZhEISupr0AuJDSrp7X0dpeFo0BdaBDOwD6MLe5c1wzJSr3yXGnyaxf3yj8FA==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
next: '>=10'
|
next: '>=10'
|
||||||
react: ^17.0.2 || ^18.0.0-0
|
react: ^17.0.2 || ^18.0.0-0
|
||||||
react-dom: ^17.0.2 || ^18.0.0-0
|
react-dom: ^17.0.2 || ^18.0.0-0
|
||||||
dependencies:
|
dependencies:
|
||||||
'@clerk/backend': 0.27.0
|
'@clerk/backend': 0.28.0
|
||||||
'@clerk/clerk-react': 4.23.2(react@18.2.0)
|
'@clerk/clerk-react': 4.24.0(react@18.2.0)
|
||||||
'@clerk/clerk-sdk-node': 4.12.2
|
'@clerk/clerk-sdk-node': 4.12.3
|
||||||
'@clerk/types': 3.49.0
|
'@clerk/types': 3.50.0
|
||||||
next: 13.4.19(react-dom@18.2.0)(react@18.2.0)
|
next: 13.4.19(react-dom@18.2.0)(react@18.2.0)
|
||||||
path-to-regexp: 6.2.1
|
path-to-regexp: 6.2.1
|
||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
|
@ -250,19 +256,19 @@ packages:
|
||||||
tslib: 2.4.1
|
tslib: 2.4.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@clerk/shared@0.21.0(react@18.2.0):
|
/@clerk/shared@0.22.0(react@18.2.0):
|
||||||
resolution: {integrity: sha512-tkV2OAddFMPBHDjcMbtNNrV3NQD+hGKf2hn3TKv1mRJNZ2oR5Bfk8r0bkaqwoqxX8ndkbHLCa9gwR8SWO7GGow==}
|
resolution: {integrity: sha512-AHPypu9gZ3v44PRqiMA56c+YNLc2IzLaPUyiYFYU+xeH/R+wqzGp7OxZoZr/kmzgA8taiVl/bjixWgpuZwzI3A==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: '>=16'
|
react: '>=16'
|
||||||
dependencies:
|
dependencies:
|
||||||
glob-to-regexp: 0.4.1
|
glob-to-regexp: 0.4.1
|
||||||
js-cookie: 3.0.1
|
js-cookie: 3.0.1
|
||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
swr: 1.3.0(react@18.2.0)
|
swr: 2.2.0(react@18.2.0)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@clerk/types@3.49.0:
|
/@clerk/types@3.50.0:
|
||||||
resolution: {integrity: sha512-vAx5R/iYfsgIaIDMiDr6ZKQnAneAmRrUVYz6KCtPG6/hnEAnRYhwXpEUi89e5G0BFmuUfSxe/N/Anfc1PNteXQ==}
|
resolution: {integrity: sha512-3TWalDWPTFToXC/W07QUIBN96TA+4dR3YLBvwr9U2Z4RVG9in9HW4CTC6aHTnJ2kVtTcgDkXjDKeVKS1GjPCcA==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
dependencies:
|
dependencies:
|
||||||
csstype: 3.1.1
|
csstype: 3.1.1
|
||||||
|
@ -280,17 +286,17 @@ packages:
|
||||||
resolution: {integrity: sha512-ps5qF0tMxWRVu+V5gvCRrQNqlY92aTnIKdq27gm9LZMSdaKYZt6AVvSK1dlUMzs6Rt0Jm80b+eWct6xShBKhIw==}
|
resolution: {integrity: sha512-ps5qF0tMxWRVu+V5gvCRrQNqlY92aTnIKdq27gm9LZMSdaKYZt6AVvSK1dlUMzs6Rt0Jm80b+eWct6xShBKhIw==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@esbuild-kit/core-utils@3.1.0:
|
/@esbuild-kit/core-utils@3.2.2:
|
||||||
resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==}
|
resolution: {integrity: sha512-Ub6LaRaAgF80dTSzUdXpFLM1pVDdmEVB9qb5iAzSpyDlX/mfJTFGOnZ516O05p5uWWteNviMKi4PAyEuRxI5gA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild: 0.17.19
|
esbuild: 0.18.20
|
||||||
source-map-support: 0.5.21
|
source-map-support: 0.5.21
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@esbuild-kit/esm-loader@2.5.5:
|
/@esbuild-kit/esm-loader@2.5.5:
|
||||||
resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==}
|
resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@esbuild-kit/core-utils': 3.1.0
|
'@esbuild-kit/core-utils': 3.2.2
|
||||||
get-tsconfig: 4.7.0
|
get-tsconfig: 4.7.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
@ -303,15 +309,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/android-arm64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [android]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/android-arm64@0.18.20:
|
/@esbuild/android-arm64@0.18.20:
|
||||||
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
|
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -330,15 +327,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/android-arm@0.17.19:
|
|
||||||
resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm]
|
|
||||||
os: [android]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/android-arm@0.18.20:
|
/@esbuild/android-arm@0.18.20:
|
||||||
resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
|
resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -357,15 +345,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/android-x64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [android]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/android-x64@0.18.20:
|
/@esbuild/android-x64@0.18.20:
|
||||||
resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
|
resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -384,15 +363,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/darwin-arm64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [darwin]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/darwin-arm64@0.18.20:
|
/@esbuild/darwin-arm64@0.18.20:
|
||||||
resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
|
resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -411,15 +381,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/darwin-x64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [darwin]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/darwin-x64@0.18.20:
|
/@esbuild/darwin-x64@0.18.20:
|
||||||
resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
|
resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -438,15 +399,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/freebsd-arm64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [freebsd]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/freebsd-arm64@0.18.20:
|
/@esbuild/freebsd-arm64@0.18.20:
|
||||||
resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
|
resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -465,15 +417,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/freebsd-x64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [freebsd]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/freebsd-x64@0.18.20:
|
/@esbuild/freebsd-x64@0.18.20:
|
||||||
resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
|
resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -492,15 +435,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-arm64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/linux-arm64@0.18.20:
|
/@esbuild/linux-arm64@0.18.20:
|
||||||
resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
|
resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -519,15 +453,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-arm@0.17.19:
|
|
||||||
resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/linux-arm@0.18.20:
|
/@esbuild/linux-arm@0.18.20:
|
||||||
resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
|
resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -546,15 +471,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-ia32@0.17.19:
|
|
||||||
resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [ia32]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/linux-ia32@0.18.20:
|
/@esbuild/linux-ia32@0.18.20:
|
||||||
resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
|
resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -573,15 +489,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-loong64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [loong64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/linux-loong64@0.18.20:
|
/@esbuild/linux-loong64@0.18.20:
|
||||||
resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
|
resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -600,15 +507,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-mips64el@0.17.19:
|
|
||||||
resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [mips64el]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/linux-mips64el@0.18.20:
|
/@esbuild/linux-mips64el@0.18.20:
|
||||||
resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
|
resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -627,15 +525,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-ppc64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [ppc64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/linux-ppc64@0.18.20:
|
/@esbuild/linux-ppc64@0.18.20:
|
||||||
resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
|
resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -654,15 +543,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-riscv64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [riscv64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/linux-riscv64@0.18.20:
|
/@esbuild/linux-riscv64@0.18.20:
|
||||||
resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
|
resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -681,15 +561,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-s390x@0.17.19:
|
|
||||||
resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [s390x]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/linux-s390x@0.18.20:
|
/@esbuild/linux-s390x@0.18.20:
|
||||||
resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
|
resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -708,15 +579,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/linux-x64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [linux]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/linux-x64@0.18.20:
|
/@esbuild/linux-x64@0.18.20:
|
||||||
resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
|
resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -735,15 +597,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/netbsd-x64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [netbsd]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/netbsd-x64@0.18.20:
|
/@esbuild/netbsd-x64@0.18.20:
|
||||||
resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
|
resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -762,15 +615,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/openbsd-x64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [openbsd]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/openbsd-x64@0.18.20:
|
/@esbuild/openbsd-x64@0.18.20:
|
||||||
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
|
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -789,15 +633,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/sunos-x64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [sunos]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/sunos-x64@0.18.20:
|
/@esbuild/sunos-x64@0.18.20:
|
||||||
resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
|
resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -816,15 +651,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/win32-arm64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [arm64]
|
|
||||||
os: [win32]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/win32-arm64@0.18.20:
|
/@esbuild/win32-arm64@0.18.20:
|
||||||
resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
|
resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -843,15 +669,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/win32-ia32@0.17.19:
|
|
||||||
resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [ia32]
|
|
||||||
os: [win32]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/win32-ia32@0.18.20:
|
/@esbuild/win32-ia32@0.18.20:
|
||||||
resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
|
resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -870,15 +687,6 @@ packages:
|
||||||
dev: false
|
dev: false
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/@esbuild/win32-x64@0.17.19:
|
|
||||||
resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
cpu: [x64]
|
|
||||||
os: [win32]
|
|
||||||
requiresBuild: true
|
|
||||||
dev: true
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
/@esbuild/win32-x64@0.18.20:
|
/@esbuild/win32-x64@0.18.20:
|
||||||
resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
|
resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -1716,8 +1524,8 @@ packages:
|
||||||
resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
|
resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/semver@7.5.0:
|
/@types/semver@7.5.1:
|
||||||
resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==}
|
resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/send@0.17.1:
|
/@types/send@0.17.1:
|
||||||
|
@ -1847,7 +1655,7 @@ packages:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0)
|
'@eslint-community/eslint-utils': 4.4.0(eslint@8.48.0)
|
||||||
'@types/json-schema': 7.0.12
|
'@types/json-schema': 7.0.12
|
||||||
'@types/semver': 7.5.0
|
'@types/semver': 7.5.1
|
||||||
'@typescript-eslint/scope-manager': 6.4.1
|
'@typescript-eslint/scope-manager': 6.4.1
|
||||||
'@typescript-eslint/types': 6.4.1
|
'@typescript-eslint/types': 6.4.1
|
||||||
'@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2)
|
'@typescript-eslint/typescript-estree': 6.4.1(typescript@5.2.2)
|
||||||
|
@ -1899,13 +1707,13 @@ packages:
|
||||||
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
|
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/ably@1.2.43:
|
/ably@1.2.43(bufferutil@4.0.7)(utf-8-validate@5.0.2):
|
||||||
resolution: {integrity: sha512-HZ99Nd98KzYToNUD4+ysHp4+vMp1NmYTi59yqGpejHo/VffTgg0pereoib0nRRAHYUhGUGys5HGwR5yHYESWDA==}
|
resolution: {integrity: sha512-HZ99Nd98KzYToNUD4+ysHp4+vMp1NmYTi59yqGpejHo/VffTgg0pereoib0nRRAHYUhGUGys5HGwR5yHYESWDA==}
|
||||||
engines: {node: '>=5.10.x'}
|
engines: {node: '>=5.10.x'}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@ably/msgpack-js': 0.4.0
|
'@ably/msgpack-js': 0.4.0
|
||||||
got: 11.8.6
|
got: 11.8.6
|
||||||
ws: 5.2.3
|
ws: 5.2.3(bufferutil@4.0.7)(utf-8-validate@5.0.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- bufferutil
|
- bufferutil
|
||||||
- utf-8-validate
|
- utf-8-validate
|
||||||
|
@ -2242,6 +2050,13 @@ packages:
|
||||||
engines: {node: '>=0.2.0'}
|
engines: {node: '>=0.2.0'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/bufferutil@4.0.7:
|
||||||
|
resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==}
|
||||||
|
engines: {node: '>=6.14.2'}
|
||||||
|
requiresBuild: true
|
||||||
|
dependencies:
|
||||||
|
node-gyp-build: 4.6.1
|
||||||
|
|
||||||
/busboy@1.6.0:
|
/busboy@1.6.0:
|
||||||
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
|
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
|
||||||
engines: {node: '>=10.16.0'}
|
engines: {node: '>=10.16.0'}
|
||||||
|
@ -3044,36 +2859,6 @@ packages:
|
||||||
'@esbuild/win32-x64': 0.16.4
|
'@esbuild/win32-x64': 0.16.4
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/esbuild@0.17.19:
|
|
||||||
resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==}
|
|
||||||
engines: {node: '>=12'}
|
|
||||||
hasBin: true
|
|
||||||
requiresBuild: true
|
|
||||||
optionalDependencies:
|
|
||||||
'@esbuild/android-arm': 0.17.19
|
|
||||||
'@esbuild/android-arm64': 0.17.19
|
|
||||||
'@esbuild/android-x64': 0.17.19
|
|
||||||
'@esbuild/darwin-arm64': 0.17.19
|
|
||||||
'@esbuild/darwin-x64': 0.17.19
|
|
||||||
'@esbuild/freebsd-arm64': 0.17.19
|
|
||||||
'@esbuild/freebsd-x64': 0.17.19
|
|
||||||
'@esbuild/linux-arm': 0.17.19
|
|
||||||
'@esbuild/linux-arm64': 0.17.19
|
|
||||||
'@esbuild/linux-ia32': 0.17.19
|
|
||||||
'@esbuild/linux-loong64': 0.17.19
|
|
||||||
'@esbuild/linux-mips64el': 0.17.19
|
|
||||||
'@esbuild/linux-ppc64': 0.17.19
|
|
||||||
'@esbuild/linux-riscv64': 0.17.19
|
|
||||||
'@esbuild/linux-s390x': 0.17.19
|
|
||||||
'@esbuild/linux-x64': 0.17.19
|
|
||||||
'@esbuild/netbsd-x64': 0.17.19
|
|
||||||
'@esbuild/openbsd-x64': 0.17.19
|
|
||||||
'@esbuild/sunos-x64': 0.17.19
|
|
||||||
'@esbuild/win32-arm64': 0.17.19
|
|
||||||
'@esbuild/win32-ia32': 0.17.19
|
|
||||||
'@esbuild/win32-x64': 0.17.19
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/esbuild@0.18.20:
|
/esbuild@0.18.20:
|
||||||
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
|
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -3233,7 +3018,7 @@ packages:
|
||||||
minimatch: 3.1.2
|
minimatch: 3.1.2
|
||||||
object.fromentries: 2.0.6
|
object.fromentries: 2.0.6
|
||||||
object.groupby: 1.0.0
|
object.groupby: 1.0.0
|
||||||
object.values: 1.1.6
|
object.values: 1.1.7
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
tsconfig-paths: 3.14.2
|
tsconfig-paths: 3.14.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
|
@ -3262,7 +3047,7 @@ packages:
|
||||||
jsx-ast-utils: 3.3.5
|
jsx-ast-utils: 3.3.5
|
||||||
language-tags: 1.0.5
|
language-tags: 1.0.5
|
||||||
minimatch: 3.1.2
|
minimatch: 3.1.2
|
||||||
object.entries: 1.1.6
|
object.entries: 1.1.7
|
||||||
object.fromentries: 2.0.6
|
object.fromentries: 2.0.6
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
dev: true
|
dev: true
|
||||||
|
@ -3291,10 +3076,10 @@ packages:
|
||||||
estraverse: 5.3.0
|
estraverse: 5.3.0
|
||||||
jsx-ast-utils: 3.3.5
|
jsx-ast-utils: 3.3.5
|
||||||
minimatch: 3.1.2
|
minimatch: 3.1.2
|
||||||
object.entries: 1.1.6
|
object.entries: 1.1.7
|
||||||
object.fromentries: 2.0.6
|
object.fromentries: 2.0.6
|
||||||
object.hasown: 1.1.2
|
object.hasown: 1.1.2
|
||||||
object.values: 1.1.6
|
object.values: 1.1.7
|
||||||
prop-types: 15.8.1
|
prop-types: 15.8.1
|
||||||
resolve: 2.0.0-next.4
|
resolve: 2.0.0-next.4
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
|
@ -4285,7 +4070,7 @@ packages:
|
||||||
array-includes: 3.1.6
|
array-includes: 3.1.6
|
||||||
array.prototype.flat: 1.3.1
|
array.prototype.flat: 1.3.1
|
||||||
object.assign: 4.1.4
|
object.assign: 4.1.4
|
||||||
object.values: 1.1.6
|
object.values: 1.1.7
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/keyv@4.5.3:
|
/keyv@4.5.3:
|
||||||
|
@ -4599,18 +4384,6 @@ packages:
|
||||||
resolution: {integrity: sha512-VzW+TAk2wE4X9maiKMlT+GsPU4OMmR1U9CrHSmd3DFLn2IcZ9VJ6M6BBugGfYUnPCLSYxXdZy17M0BEJyhUTwg==}
|
resolution: {integrity: sha512-VzW+TAk2wE4X9maiKMlT+GsPU4OMmR1U9CrHSmd3DFLn2IcZ9VJ6M6BBugGfYUnPCLSYxXdZy17M0BEJyhUTwg==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/node-fetch@2.6.12:
|
|
||||||
resolution: {integrity: sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==}
|
|
||||||
engines: {node: 4.x || >=6.0.0}
|
|
||||||
peerDependencies:
|
|
||||||
encoding: ^0.1.0
|
|
||||||
peerDependenciesMeta:
|
|
||||||
encoding:
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
|
||||||
whatwg-url: 5.0.0
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/node-fetch@2.7.0:
|
/node-fetch@2.7.0:
|
||||||
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
|
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
|
||||||
engines: {node: 4.x || >=6.0.0}
|
engines: {node: 4.x || >=6.0.0}
|
||||||
|
@ -4623,6 +4396,14 @@ packages:
|
||||||
whatwg-url: 5.0.0
|
whatwg-url: 5.0.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/node-gyp-build@3.7.0:
|
||||||
|
resolution: {integrity: sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
|
/node-gyp-build@4.6.1:
|
||||||
|
resolution: {integrity: sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
/node-releases@2.0.13:
|
/node-releases@2.0.13:
|
||||||
resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
|
resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
@ -4692,8 +4473,8 @@ packages:
|
||||||
object-keys: 1.1.1
|
object-keys: 1.1.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/object.entries@1.1.6:
|
/object.entries@1.1.7:
|
||||||
resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==}
|
resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
dependencies:
|
dependencies:
|
||||||
call-bind: 1.0.2
|
call-bind: 1.0.2
|
||||||
|
@ -4726,8 +4507,8 @@ packages:
|
||||||
es-abstract: 1.22.1
|
es-abstract: 1.22.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/object.values@1.1.6:
|
/object.values@1.1.7:
|
||||||
resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==}
|
resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
dependencies:
|
dependencies:
|
||||||
call-bind: 1.0.2
|
call-bind: 1.0.2
|
||||||
|
@ -5029,7 +4810,7 @@ packages:
|
||||||
dependencies:
|
dependencies:
|
||||||
lilconfig: 2.1.0
|
lilconfig: 2.1.0
|
||||||
postcss: 8.4.28
|
postcss: 8.4.28
|
||||||
yaml: 2.3.1
|
yaml: 2.3.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/postcss-nested@6.0.0(postcss@8.4.21):
|
/postcss-nested@6.0.0(postcss@8.4.21):
|
||||||
|
@ -5359,17 +5140,6 @@ packages:
|
||||||
functions-have-names: 1.2.3
|
functions-have-names: 1.2.3
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/resend@1.0.0:
|
|
||||||
resolution: {integrity: sha512-8LEE4gncmcm8bsvxvahZFpFk5hxUrKdagqWoX/MRXVU2YZ9coYxqZDeDYXG9pexz1A694bjE1hiQbBAA+bHAow==}
|
|
||||||
engines: {node: '>=16'}
|
|
||||||
dependencies:
|
|
||||||
'@react-email/render': 0.0.7
|
|
||||||
node-fetch: 2.6.12
|
|
||||||
type-fest: 3.13.0
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- encoding
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/resolve-alpn@1.2.1:
|
/resolve-alpn@1.2.1:
|
||||||
resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
|
resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
|
||||||
dev: false
|
dev: false
|
||||||
|
@ -5793,12 +5563,13 @@ packages:
|
||||||
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
|
|
||||||
/swr@1.3.0(react@18.2.0):
|
/swr@2.2.0(react@18.2.0):
|
||||||
resolution: {integrity: sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==}
|
resolution: {integrity: sha512-AjqHOv2lAhkuUdIiBu9xbuettzAzWXmCEcLONNKJRba87WAefz8Ca9d6ds/SzrPc235n1IxWYdhJ2zF3MNUaoQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: ^16.11.0 || ^17.0.0 || ^18.0.0
|
react: ^16.11.0 || ^17.0.0 || ^18.0.0
|
||||||
dependencies:
|
dependencies:
|
||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
|
use-sync-external-store: 1.2.0(react@18.2.0)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/tailwindcss@3.2.7(postcss@8.4.21):
|
/tailwindcss@3.2.7(postcss@8.4.21):
|
||||||
|
@ -6043,11 +5814,6 @@ packages:
|
||||||
engines: {node: '>=12.20'}
|
engines: {node: '>=12.20'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/type-fest@3.13.0:
|
|
||||||
resolution: {integrity: sha512-Gur3yQGM9qiLNs0KPP7LPgeRbio2QTt4xXouobMCarR0/wyW3F+F/+OWwshg3NG0Adon7uQfSZBpB46NfhoF1A==}
|
|
||||||
engines: {node: '>=14.16'}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/type@1.2.0:
|
/type@1.2.0:
|
||||||
resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==}
|
resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==}
|
||||||
dev: true
|
dev: true
|
||||||
|
@ -6163,6 +5929,12 @@ packages:
|
||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/utf-8-validate@5.0.2:
|
||||||
|
resolution: {integrity: sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw==}
|
||||||
|
requiresBuild: true
|
||||||
|
dependencies:
|
||||||
|
node-gyp-build: 3.7.0
|
||||||
|
|
||||||
/util-deprecate@1.0.2:
|
/util-deprecate@1.0.2:
|
||||||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||||
|
|
||||||
|
@ -6279,7 +6051,7 @@ packages:
|
||||||
/wrappy@1.0.2:
|
/wrappy@1.0.2:
|
||||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||||
|
|
||||||
/ws@5.2.3:
|
/ws@5.2.3(bufferutil@4.0.7)(utf-8-validate@5.0.2):
|
||||||
resolution: {integrity: sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==}
|
resolution: {integrity: sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
bufferutil: ^4.0.1
|
bufferutil: ^4.0.1
|
||||||
|
@ -6291,8 +6063,26 @@ packages:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
async-limiter: 1.0.1
|
async-limiter: 1.0.1
|
||||||
|
bufferutil: 4.0.7
|
||||||
|
utf-8-validate: 5.0.2
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/ws@8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.2):
|
||||||
|
resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==}
|
||||||
|
engines: {node: '>=10.0.0'}
|
||||||
|
peerDependencies:
|
||||||
|
bufferutil: ^4.0.1
|
||||||
|
utf-8-validate: '>=5.0.2'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
bufferutil:
|
||||||
|
optional: true
|
||||||
|
utf-8-validate:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
bufferutil: 4.0.7
|
||||||
|
utf-8-validate: 5.0.2
|
||||||
|
dev: true
|
||||||
|
|
||||||
/xtend@4.0.2:
|
/xtend@4.0.2:
|
||||||
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
|
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
|
||||||
engines: {node: '>=0.4'}
|
engines: {node: '>=0.4'}
|
||||||
|
@ -6305,8 +6095,8 @@ packages:
|
||||||
engines: {node: '>= 6'}
|
engines: {node: '>= 6'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/yaml@2.3.1:
|
/yaml@2.3.2:
|
||||||
resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==}
|
resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==}
|
||||||
engines: {node: '>= 14'}
|
engines: {node: '>= 14'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
import { GiTechnoHeart } from "react-icons/gi";
|
import { GiTechnoHeart } from "react-icons/gi";
|
||||||
import packagejson from "../../package.json";
|
import packagejson from "../../../package.json";
|
||||||
|
|
||||||
const Footer = () => {
|
const Footer = () => {
|
||||||
return (
|
return (
|
|
@ -1,7 +1,9 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
import { UserButton, useUser } from "@clerk/nextjs";
|
import { UserButton, useUser } from "@clerk/nextjs";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useRouter } from "next/router";
|
import { useRouter, usePathname } from "next/navigation";
|
||||||
import { env } from "~/env.mjs";
|
import { env } from "~/env.mjs";
|
||||||
|
|
||||||
interface NavbarProps {
|
interface NavbarProps {
|
||||||
|
@ -11,9 +13,10 @@ interface NavbarProps {
|
||||||
const Navbar = ({ title }: NavbarProps) => {
|
const Navbar = ({ title }: NavbarProps) => {
|
||||||
const { isLoaded, isSignedIn } = useUser();
|
const { isLoaded, isSignedIn } = useUser();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
const pathname = usePathname();
|
||||||
|
|
||||||
const navigationMenu = () => {
|
const navigationMenu = () => {
|
||||||
if (router.pathname !== "/dashboard" && isSignedIn) {
|
if (pathname !== "/dashboard" && isSignedIn) {
|
||||||
return (
|
return (
|
||||||
<Link className="btn btn-secondary btn-outline mx-2" href="/dashboard">
|
<Link className="btn btn-secondary btn-outline mx-2" href="/dashboard">
|
||||||
Dashboard
|
Dashboard
|
|
@ -1,10 +1,14 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { configureAbly, useChannel } from "@ably-labs/react-hooks";
|
import { configureAbly, useChannel } from "@ably-labs/react-hooks";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import { IoEnterOutline, IoTrashBinOutline } from "react-icons/io5";
|
import { IoEnterOutline, IoTrashBinOutline } from "react-icons/io5";
|
||||||
import { env } from "~/env.mjs";
|
import { env } from "~/env.mjs";
|
||||||
import { api } from "~/utils/api";
|
|
||||||
import { useUser } from "@clerk/nextjs";
|
import { useUser } from "@clerk/nextjs";
|
||||||
|
import { trpc } from "../_trpc/client";
|
||||||
|
|
||||||
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
const RoomList = () => {
|
const RoomList = () => {
|
||||||
const { isSignedIn, user } = useUser();
|
const { isSignedIn, user } = useUser();
|
||||||
|
@ -25,11 +29,11 @@ const RoomList = () => {
|
||||||
const [roomName, setRoomName] = useState<string>("");
|
const [roomName, setRoomName] = useState<string>("");
|
||||||
|
|
||||||
const { data: roomsFromDb, refetch: refetchRoomsFromDb } =
|
const { data: roomsFromDb, refetch: refetchRoomsFromDb } =
|
||||||
api.room.getAll.useQuery(undefined, {
|
trpc.room.getAll.useQuery(undefined, {
|
||||||
enabled: isSignedIn,
|
enabled: isSignedIn,
|
||||||
});
|
});
|
||||||
|
|
||||||
const createRoom = api.room.create.useMutation({});
|
const createRoom = trpc.room.create.useMutation({});
|
||||||
|
|
||||||
const createRoomHandler = () => {
|
const createRoomHandler = () => {
|
||||||
createRoom.mutate({ name: roomName });
|
createRoom.mutate({ name: roomName });
|
||||||
|
@ -39,7 +43,7 @@ const RoomList = () => {
|
||||||
false;
|
false;
|
||||||
};
|
};
|
||||||
|
|
||||||
const deleteRoom = api.room.delete.useMutation({});
|
const deleteRoom = trpc.room.delete.useMutation({});
|
||||||
|
|
||||||
const deleteRoomHandler = (roomId: string) => {
|
const deleteRoomHandler = (roomId: string) => {
|
||||||
if (isSignedIn) {
|
if (isSignedIn) {
|
27
src/app/_trpc/Provider.tsx
Normal file
27
src/app/_trpc/Provider.tsx
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
|
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
||||||
|
import { httpLink } from "@trpc/client";
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import superjson from "superjson";
|
||||||
|
|
||||||
|
import { trpc } from "./client";
|
||||||
|
|
||||||
|
export default function Provider({ children }: { children: React.ReactNode }) {
|
||||||
|
const [queryClient] = useState(() => new QueryClient({}));
|
||||||
|
const [trpcClient] = useState(() =>
|
||||||
|
trpc.createClient({
|
||||||
|
links: [
|
||||||
|
httpLink({
|
||||||
|
url: "/api/trpc",
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
transformer: superjson,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
return (
|
||||||
|
<trpc.Provider client={trpcClient} queryClient={queryClient}>
|
||||||
|
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
|
||||||
|
</trpc.Provider>
|
||||||
|
);
|
||||||
|
}
|
5
src/app/_trpc/client.ts
Normal file
5
src/app/_trpc/client.ts
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
import { createTRPCReact } from "@trpc/react-query";
|
||||||
|
|
||||||
|
import { type AppRouter } from "~/server/trpc";
|
||||||
|
|
||||||
|
export const trpc = createTRPCReact<AppRouter>({});
|
|
@ -1,13 +1,13 @@
|
||||||
import { NextResponse } from "next/server";
|
import { NextResponse } from "next/server";
|
||||||
|
|
||||||
export const config = {
|
export const runtime = "edge";
|
||||||
runtime: "edge",
|
export const preferredRegion = ["pdx1"];
|
||||||
regions: ["pdx1"],
|
|
||||||
};
|
|
||||||
|
|
||||||
export default function handler() {
|
function handler() {
|
||||||
return NextResponse.json(
|
return NextResponse.json(
|
||||||
{ message: "Private Pong!" },
|
{ message: "Private Pong!" },
|
||||||
{ status: 200, statusText: "SUCCESS" }
|
{ status: 200, statusText: "SUCCESS" }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export { handler as GET };
|
|
@ -1,13 +1,13 @@
|
||||||
import { NextResponse } from "next/server";
|
import { NextResponse } from "next/server";
|
||||||
|
|
||||||
export const config = {
|
export const runtime = "edge";
|
||||||
runtime: "edge",
|
export const preferredRegion = ["pdx1"];
|
||||||
regions: ["pdx1"],
|
|
||||||
};
|
|
||||||
|
|
||||||
export default function handler() {
|
function handler() {
|
||||||
return NextResponse.json(
|
return NextResponse.json(
|
||||||
{ message: "Public Pong!" },
|
{ message: "Public Pong!" },
|
||||||
{ status: 200, statusText: "SUCCESS" }
|
{ status: 200, statusText: "SUCCESS" }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export { handler as GET };
|
20
src/app/api/trpc/[trpc]/route.ts
Normal file
20
src/app/api/trpc/[trpc]/route.ts
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
|
||||||
|
|
||||||
|
import { appRouter } from "~/server/trpc";
|
||||||
|
import { createTRPCContext } from "~/server/trpc/trpc";
|
||||||
|
|
||||||
|
export const runtime = "edge";
|
||||||
|
export const preferredRegion = ["pdx1"];
|
||||||
|
|
||||||
|
const handler = (req: Request) =>
|
||||||
|
fetchRequestHandler({
|
||||||
|
endpoint: "/api/trpc",
|
||||||
|
req,
|
||||||
|
router: appRouter,
|
||||||
|
createContext: createTRPCContext,
|
||||||
|
batching: {
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export { handler as GET, handler as POST };
|
|
@ -9,12 +9,10 @@ import {
|
||||||
WebhookEvents,
|
WebhookEvents,
|
||||||
} from "~/utils/types";
|
} from "~/utils/types";
|
||||||
|
|
||||||
export const config = {
|
export const runtime = "edge";
|
||||||
runtime: "edge",
|
export const preferredRegion = ["pdx1"];
|
||||||
regions: ["pdx1"],
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function handler(req: NextRequest) {
|
async function handler(req: NextRequest) {
|
||||||
try {
|
try {
|
||||||
const eventBody = (await req.json()) as WebhookEventBody;
|
const eventBody = (await req.json()) as WebhookEventBody;
|
||||||
const { data, type } = WebhookEventBodySchema.parse(eventBody);
|
const { data, type } = WebhookEventBodySchema.parse(eventBody);
|
||||||
|
@ -22,11 +20,7 @@ export default async function handler(req: NextRequest) {
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case WebhookEvents.USER_CREATED:
|
case WebhookEvents.USER_CREATED:
|
||||||
success = await onUserCreatedHandler(
|
success = await onUserCreatedHandler(data.id);
|
||||||
data.id,
|
|
||||||
data.email_addresses?.map((email) => email.email_address) || [],
|
|
||||||
`${data.first_name} ${data.last_name}`
|
|
||||||
);
|
|
||||||
if (success) {
|
if (success) {
|
||||||
return NextResponse.json(
|
return NextResponse.json(
|
||||||
{ result: "USER CREATED" },
|
{ result: "USER CREATED" },
|
||||||
|
@ -61,3 +55,5 @@ export default async function handler(req: NextRequest) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export { handler as POST };
|
|
@ -1,7 +1,9 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
import type { NextPage } from "next";
|
import type { NextPage } from "next";
|
||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
|
|
||||||
import RoomList from "~/components/RoomList";
|
import RoomList from "~/app/_components/RoomList";
|
||||||
|
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
29
src/app/layout.tsx
Normal file
29
src/app/layout.tsx
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
import { ClerkProvider } from "@clerk/nextjs";
|
||||||
|
import Footer from "~/app/_components/Footer";
|
||||||
|
import Navbar from "~/app/_components/Navbar";
|
||||||
|
import "~/styles/globals.css";
|
||||||
|
import Provider from "./_trpc/Provider";
|
||||||
|
|
||||||
|
export const metadata = {
|
||||||
|
title: "Next.js 13 with Clerk",
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function RootLayout({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<ClerkProvider>
|
||||||
|
<html lang="en" className="h-[100%] w-[100%] fixed overflow-y-auto">
|
||||||
|
<body className="block h-[100%]">
|
||||||
|
<Navbar title="Sprint Padawan" />
|
||||||
|
<div className="flex flex-row items-center justify-center min-h-[calc(100%-114px)]">
|
||||||
|
<Provider>{children}</Provider>
|
||||||
|
</div>
|
||||||
|
<Footer />
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</ClerkProvider>
|
||||||
|
);
|
||||||
|
}
|
|
@ -1,10 +1,12 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
import { type NextPage } from "next";
|
import { type NextPage } from "next";
|
||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { EventTypes } from "~/utils/types";
|
import { EventTypes } from "~/utils/types";
|
||||||
|
|
||||||
import { useRouter } from "next/router";
|
import { useParams } from "next/navigation";
|
||||||
import {
|
import {
|
||||||
IoCheckmarkCircleOutline,
|
IoCheckmarkCircleOutline,
|
||||||
IoCopyOutline,
|
IoCopyOutline,
|
||||||
|
@ -16,7 +18,6 @@ import {
|
||||||
IoSaveOutline,
|
IoSaveOutline,
|
||||||
} from "react-icons/io5";
|
} from "react-icons/io5";
|
||||||
import { GiStarFormation } from "react-icons/gi";
|
import { GiStarFormation } from "react-icons/gi";
|
||||||
import { api } from "~/utils/api";
|
|
||||||
import { configureAbly, useChannel, usePresence } from "@ably-labs/react-hooks";
|
import { configureAbly, useChannel, usePresence } from "@ably-labs/react-hooks";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { FaShieldAlt } from "react-icons/fa";
|
import { FaShieldAlt } from "react-icons/fa";
|
||||||
|
@ -25,6 +26,9 @@ import { env } from "~/env.mjs";
|
||||||
import { downloadCSV, isAdmin, isVIP } from "~/utils/helpers";
|
import { downloadCSV, isAdmin, isVIP } from "~/utils/helpers";
|
||||||
import type { PresenceItem } from "~/utils/types";
|
import type { PresenceItem } from "~/utils/types";
|
||||||
import { useUser } from "@clerk/nextjs";
|
import { useUser } from "@clerk/nextjs";
|
||||||
|
import { trpc } from "~/app/_trpc/client";
|
||||||
|
|
||||||
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
const Room: NextPage = () => {
|
const Room: NextPage = () => {
|
||||||
const { isSignedIn } = useUser();
|
const { isSignedIn } = useUser();
|
||||||
|
@ -52,21 +56,21 @@ export default Room;
|
||||||
|
|
||||||
const RoomBody = ({}) => {
|
const RoomBody = ({}) => {
|
||||||
const { isSignedIn, user } = useUser();
|
const { isSignedIn, user } = useUser();
|
||||||
const { query } = useRouter();
|
const params = useParams();
|
||||||
const roomId = query.id as string;
|
const roomId = params?.id as string;
|
||||||
|
|
||||||
const [storyNameText, setStoryNameText] = useState<string>("");
|
const [storyNameText, setStoryNameText] = useState<string>("");
|
||||||
const [roomScale, setRoomScale] = useState<string>("");
|
const [roomScale, setRoomScale] = useState<string>("");
|
||||||
const [copied, setCopied] = useState<boolean>(false);
|
const [copied, setCopied] = useState<boolean>(false);
|
||||||
|
|
||||||
const { data: roomFromDb, refetch: refetchRoomFromDb } =
|
const { data: roomFromDb, refetch: refetchRoomFromDb } =
|
||||||
api.room.get.useQuery({ id: roomId });
|
trpc.room.get.useQuery({ id: roomId });
|
||||||
|
|
||||||
const { data: votesFromDb, refetch: refetchVotesFromDb } =
|
const { data: votesFromDb, refetch: refetchVotesFromDb } =
|
||||||
api.vote.getAllByRoomId.useQuery({ roomId });
|
trpc.vote.getAllByRoomId.useQuery({ roomId });
|
||||||
|
|
||||||
const setVoteInDb = api.vote.set.useMutation({});
|
const setVoteInDb = trpc.vote.set.useMutation({});
|
||||||
const setRoomInDb = api.room.set.useMutation({});
|
const setRoomInDb = trpc.room.set.useMutation({});
|
||||||
|
|
||||||
configureAbly({
|
configureAbly({
|
||||||
key: env.NEXT_PUBLIC_ABLY_PUBLIC_KEY,
|
key: env.NEXT_PUBLIC_ABLY_PUBLIC_KEY,
|
|
@ -1,5 +1,9 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
import { SignIn } from "@clerk/nextjs";
|
import { SignIn } from "@clerk/nextjs";
|
||||||
|
|
||||||
|
export const dynamic = "force-static";
|
||||||
|
|
||||||
const SignInPage = () => (
|
const SignInPage = () => (
|
||||||
<div style={styles}>
|
<div style={styles}>
|
||||||
<SignIn path="/sign-in" routing="path" signUpUrl="/sign-up" />
|
<SignIn path="/sign-in" routing="path" signUpUrl="/sign-up" />
|
|
@ -1,5 +1,9 @@
|
||||||
|
"use client";
|
||||||
|
|
||||||
import { SignUp } from "@clerk/nextjs";
|
import { SignUp } from "@clerk/nextjs";
|
||||||
|
|
||||||
|
export const dynamic = "force-static";
|
||||||
|
|
||||||
const SignUpPage = () => (
|
const SignUpPage = () => (
|
||||||
<div style={styles}>
|
<div style={styles}>
|
||||||
<SignUp path="/sign-up" routing="path" signInUrl="/sign-in" />
|
<SignUp path="/sign-up" routing="path" signInUrl="/sign-in" />
|
|
@ -1,51 +0,0 @@
|
||||||
import {
|
|
||||||
Body,
|
|
||||||
Container,
|
|
||||||
Head,
|
|
||||||
Heading,
|
|
||||||
Hr,
|
|
||||||
Html,
|
|
||||||
Img,
|
|
||||||
Preview,
|
|
||||||
Section,
|
|
||||||
Text,
|
|
||||||
} from "@react-email/components";
|
|
||||||
import * as React from "react";
|
|
||||||
|
|
||||||
interface WelcomeTemplateProps {
|
|
||||||
name: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const baseUrl = process.env.VERCEL_URL
|
|
||||||
? `https://${process.env.VERCEL_URL}`
|
|
||||||
: "http://localhost:3000";
|
|
||||||
|
|
||||||
export const Welcome = ({ name }: WelcomeTemplateProps) => (
|
|
||||||
<Html>
|
|
||||||
<Head />
|
|
||||||
<Preview>🎉 Welcome to Sprint Padawan! 🎉</Preview>
|
|
||||||
<Body>
|
|
||||||
<Container>
|
|
||||||
<Section>
|
|
||||||
<Img
|
|
||||||
src={`${baseUrl}/logo.webp`}
|
|
||||||
width="40"
|
|
||||||
height="37"
|
|
||||||
alt={`Sprint Padawan Logo`}
|
|
||||||
/>
|
|
||||||
</Section>
|
|
||||||
<Heading>
|
|
||||||
🎉 Welcome to Sprint Padawan, <strong>{name}</strong>! 🎉
|
|
||||||
</Heading>
|
|
||||||
<Text>Hello {name},</Text>
|
|
||||||
<Text>Thank you for signing up for Sprint Padawan!</Text>
|
|
||||||
<Text>
|
|
||||||
If at any point you encounter issues, please let me know at
|
|
||||||
support@sprintpadawan.dev.
|
|
||||||
</Text>
|
|
||||||
<Hr />
|
|
||||||
<Text>— Atridad Lahiji</Text>
|
|
||||||
</Container>
|
|
||||||
</Body>
|
|
||||||
</Html>
|
|
||||||
);
|
|
|
@ -1,24 +0,0 @@
|
||||||
import { type AppType } from "next/app";
|
|
||||||
import { ClerkProvider } from "@clerk/nextjs";
|
|
||||||
|
|
||||||
import { api } from "~/utils/api";
|
|
||||||
|
|
||||||
import Footer from "~/components/Footer";
|
|
||||||
import Navbar from "~/components/Navbar";
|
|
||||||
import "~/styles/globals.css";
|
|
||||||
|
|
||||||
const MyApp: AppType = ({ Component, pageProps }) => {
|
|
||||||
return (
|
|
||||||
<ClerkProvider {...pageProps}>
|
|
||||||
<div className="block h-[100%]">
|
|
||||||
<Navbar title="Sprint Padawan" />
|
|
||||||
<div className="flex flex-row items-center justify-center min-h-[calc(100%-114px)]">
|
|
||||||
<Component {...pageProps} />
|
|
||||||
</div>
|
|
||||||
<Footer />
|
|
||||||
</div>
|
|
||||||
</ClerkProvider>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default api.withTRPC(MyApp);
|
|
|
@ -1,62 +0,0 @@
|
||||||
import { Head, Html, Main, NextScript } from "next/document";
|
|
||||||
|
|
||||||
export default function Document() {
|
|
||||||
return (
|
|
||||||
<Html>
|
|
||||||
<Head>
|
|
||||||
<meta name="application-name" content="Sprint Padawan" />
|
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
||||||
<meta name="apple-mobile-web-app-title" content="Sprint Padawan" />
|
|
||||||
<meta name="description" content="Plan. Sprint. Repeat." />
|
|
||||||
<meta name="format-detection" content="telephone=no" />
|
|
||||||
<meta name="mobile-web-app-capable" content="yes" />
|
|
||||||
<meta name="msapplication-config" content="/icons/browserconfig.xml" />
|
|
||||||
<meta name="msapplication-TileColor" content="#1F2937" />
|
|
||||||
<meta name="msapplication-tap-highlight" content="no" />
|
|
||||||
<meta name="theme-color" content="#1F2937" />
|
|
||||||
|
|
||||||
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
|
||||||
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="32x32"
|
|
||||||
href="/favicon-32x32.png"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="icon"
|
|
||||||
type="image/png"
|
|
||||||
sizes="16x16"
|
|
||||||
href="/favicon-16x16.png"
|
|
||||||
/>
|
|
||||||
<link rel="manifest" href="/manifest.json" />
|
|
||||||
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5" />
|
|
||||||
<link rel="shortcut icon" href="/favicon.ico" />
|
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary" />
|
|
||||||
<meta name="twitter:url" content="https://sprintpadawan.dev" />
|
|
||||||
<meta name="twitter:title" content="Sprint Padawan" />
|
|
||||||
<meta name="twitter:description" content="Plan. Sprint. Repeat." />
|
|
||||||
<meta
|
|
||||||
name="twitter:image"
|
|
||||||
content="https://sprintpadawan.dev/android-chrome-192x192.png"
|
|
||||||
/>
|
|
||||||
<meta name="twitter:creator" content="@atridadl" />
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:title" content="Sprint Padawan" />
|
|
||||||
<meta property="og:description" content="Plan. Sprint. Repeat." />
|
|
||||||
<meta property="og:site_name" content="Sprint Padawan" />
|
|
||||||
<meta property="og:url" content="https://sprintpadawan.dev" />
|
|
||||||
<meta
|
|
||||||
property="og:image"
|
|
||||||
content="https://sprintpadawan.dev/icons/apple-touch-icon.png"
|
|
||||||
/>
|
|
||||||
</Head>
|
|
||||||
<body>
|
|
||||||
<Main />
|
|
||||||
<NextScript />
|
|
||||||
</body>
|
|
||||||
</Html>
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
import { appRouter } from "~/server/api/root";
|
|
||||||
import { createTRPCContext } from "~/server/api/trpc";
|
|
||||||
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
|
|
||||||
import type { NextRequest } from "next/server";
|
|
||||||
|
|
||||||
export const config = {
|
|
||||||
runtime: "edge",
|
|
||||||
regions: ["pdx1"],
|
|
||||||
unstable_allowDynamic: ["/node_modules/ably/**"],
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function handler(req: NextRequest) {
|
|
||||||
return fetchRequestHandler({
|
|
||||||
endpoint: "/api/trpc",
|
|
||||||
router: appRouter,
|
|
||||||
req,
|
|
||||||
createContext: createTRPCContext,
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
import { appRouter } from "~/server/api/root";
|
|
||||||
import { createTRPCContext } from "~/server/api/trpc";
|
|
||||||
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
|
|
||||||
import type { NextRequest } from "next/server";
|
|
||||||
|
|
||||||
export const config = {
|
|
||||||
runtime: "edge",
|
|
||||||
regions: ["pdx1"],
|
|
||||||
unstable_allowDynamic: ["/node_modules/ably/**"],
|
|
||||||
};
|
|
||||||
|
|
||||||
export default async function handler(req: NextRequest) {
|
|
||||||
return fetchRequestHandler({
|
|
||||||
endpoint: "/api/trpc",
|
|
||||||
router: appRouter,
|
|
||||||
req,
|
|
||||||
createContext: createTRPCContext,
|
|
||||||
});
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
import { roomRouter } from "~/server/api/routers/room";
|
|
||||||
import { createTRPCRouter } from "~/server/api/trpc";
|
|
||||||
import { voteRouter } from "./routers/vote";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is the primary router for your server.
|
|
||||||
*
|
|
||||||
* All routers added in /api/routers should be manually added here.
|
|
||||||
*/
|
|
||||||
export const appRouter = createTRPCRouter({
|
|
||||||
room: roomRouter,
|
|
||||||
vote: voteRouter,
|
|
||||||
});
|
|
||||||
|
|
||||||
// export type definition of API
|
|
||||||
export type AppRouter = typeof appRouter;
|
|
|
@ -1,104 +0,0 @@
|
||||||
/**
|
|
||||||
* YOU PROBABLY DON'T NEED TO EDIT THIS FILE, UNLESS:
|
|
||||||
* 1. You want to modify request context (see Part 1)
|
|
||||||
* 2. You want to create a new middleware or type of procedure (see Part 3)
|
|
||||||
*
|
|
||||||
* tl;dr - this is where all the tRPC server stuff is created and plugged in.
|
|
||||||
* The pieces you will need to use are documented accordingly near the end
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1. CONTEXT
|
|
||||||
*
|
|
||||||
* This section defines the "contexts" that are available in the backend API
|
|
||||||
*
|
|
||||||
* These allow you to access things like the database, the session, etc, when
|
|
||||||
* processing a request
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
import { type FetchCreateContextFnOptions } from "@trpc/server/adapters/fetch";
|
|
||||||
import { getAuth } from "@clerk/nextjs/server";
|
|
||||||
import type {
|
|
||||||
SignedInAuthObject,
|
|
||||||
SignedOutAuthObject,
|
|
||||||
} from "@clerk/nextjs/api";
|
|
||||||
|
|
||||||
import { db } from "../db";
|
|
||||||
|
|
||||||
interface AuthContext {
|
|
||||||
auth: SignedInAuthObject | SignedOutAuthObject;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* This helper generates the "internals" for a tRPC context. If you need to use
|
|
||||||
* it, you can export it from here
|
|
||||||
*
|
|
||||||
* Examples of things you may need it for:
|
|
||||||
* - testing, so we dont have to mock Next.js' req/res
|
|
||||||
* - trpc's `createSSGHelpers` where we don't have req/res
|
|
||||||
* @see https://create.t3.gg/en/usage/trpc#-servertrpccontextts
|
|
||||||
*/
|
|
||||||
|
|
||||||
const createInnerTRPCContext = ({ auth }: AuthContext) => {
|
|
||||||
return {
|
|
||||||
auth,
|
|
||||||
db,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
export const createTRPCContext = ({ req }: FetchCreateContextFnOptions) => {
|
|
||||||
return createInnerTRPCContext({ auth: getAuth(req as NextRequest) });
|
|
||||||
};
|
|
||||||
|
|
||||||
export type Context = inferAsyncReturnType<typeof createTRPCContext>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 2. INITIALIZATION
|
|
||||||
*
|
|
||||||
* This is where the trpc api is initialized, connecting the context and
|
|
||||||
* transformer
|
|
||||||
*/
|
|
||||||
import { type inferAsyncReturnType, initTRPC, TRPCError } from "@trpc/server";
|
|
||||||
import superjson from "superjson";
|
|
||||||
import type { NextRequest } from "next/server";
|
|
||||||
|
|
||||||
const t = initTRPC.context<typeof createTRPCContext>().create({
|
|
||||||
transformer: superjson,
|
|
||||||
errorFormatter({ shape }) {
|
|
||||||
return shape;
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
// check if the user is signed in, otherwise through a UNAUTHORIZED CODE
|
|
||||||
const isAuthed = t.middleware(({ next, ctx }) => {
|
|
||||||
if (!ctx.auth.userId) {
|
|
||||||
throw new TRPCError({ code: "UNAUTHORIZED" });
|
|
||||||
}
|
|
||||||
|
|
||||||
return next({
|
|
||||||
ctx: {
|
|
||||||
auth: ctx.auth,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
/**
|
|
||||||
* 3. ROUTER & PROCEDURE (THE IMPORTANT BIT)
|
|
||||||
*
|
|
||||||
* These are the pieces you use to build your tRPC API. You should import these
|
|
||||||
* a lot in the /src/server/api/routers folder
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is how you create new routers and subrouters in your tRPC API
|
|
||||||
* @see https://trpc.io/docs/router
|
|
||||||
*/
|
|
||||||
export const createTRPCRouter = t.router;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Public (unauthed) procedure
|
|
||||||
*
|
|
||||||
* This is the base piece you use to build new queries and mutations on your
|
|
||||||
* tRPC API. It does not guarantee that a user querying is authorized, but you
|
|
||||||
* can still access user session data if they are logged in
|
|
||||||
*/
|
|
||||||
export const publicProcedure = t.procedure;
|
|
||||||
export const protectedProcedure = t.procedure.use(isAuthed);
|
|
10
src/server/trpc/index.ts
Normal file
10
src/server/trpc/index.ts
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
import { createTRPCRouter } from "./trpc";
|
||||||
|
import { roomRouter } from "./routers/room";
|
||||||
|
import { voteRouter } from "./routers/vote";
|
||||||
|
|
||||||
|
export const appRouter = createTRPCRouter({
|
||||||
|
room: roomRouter,
|
||||||
|
vote: voteRouter,
|
||||||
|
});
|
||||||
|
|
||||||
|
export type AppRouter = typeof appRouter;
|
|
@ -1,6 +1,6 @@
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { publishToChannel } from "~/server/ably";
|
import { publishToChannel } from "~/server/ably";
|
||||||
import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc";
|
import { createTRPCRouter, protectedProcedure } from "~/server/trpc/trpc";
|
||||||
|
|
||||||
import { fetchCache, invalidateCache, setCache } from "~/server/redis";
|
import { fetchCache, invalidateCache, setCache } from "~/server/redis";
|
||||||
import { logs, rooms, votes } from "~/server/schema";
|
import { logs, rooms, votes } from "~/server/schema";
|
|
@ -1,7 +1,7 @@
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { publishToChannel } from "~/server/ably";
|
import { publishToChannel } from "~/server/ably";
|
||||||
|
|
||||||
import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc";
|
import { createTRPCRouter, protectedProcedure } from "~/server/trpc/trpc";
|
||||||
import { fetchCache, invalidateCache, setCache } from "~/server/redis";
|
import { fetchCache, invalidateCache, setCache } from "~/server/redis";
|
||||||
import { EventTypes } from "~/utils/types";
|
import { EventTypes } from "~/utils/types";
|
||||||
import { eq } from "drizzle-orm";
|
import { eq } from "drizzle-orm";
|
50
src/server/trpc/trpc.ts
Normal file
50
src/server/trpc/trpc.ts
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
import type {
|
||||||
|
SignedInAuthObject,
|
||||||
|
SignedOutAuthObject,
|
||||||
|
} from "@clerk/nextjs/api";
|
||||||
|
import { getAuth } from "@clerk/nextjs/server";
|
||||||
|
import { TRPCError, type inferAsyncReturnType, initTRPC } from "@trpc/server";
|
||||||
|
import { db } from "../db";
|
||||||
|
import { FetchCreateContextFnOptions } from "@trpc/server/adapters/fetch";
|
||||||
|
import { NextRequest } from "next/server";
|
||||||
|
import superjson from "superjson";
|
||||||
|
|
||||||
|
interface AuthContext {
|
||||||
|
auth: SignedInAuthObject | SignedOutAuthObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
const createInnerTRPCContext = ({ auth }: AuthContext) => {
|
||||||
|
return {
|
||||||
|
auth,
|
||||||
|
db,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export const createTRPCContext = ({ req }: FetchCreateContextFnOptions) => {
|
||||||
|
return createInnerTRPCContext({ auth: getAuth(req as NextRequest) });
|
||||||
|
};
|
||||||
|
|
||||||
|
export type Context = inferAsyncReturnType<typeof createTRPCContext>;
|
||||||
|
|
||||||
|
const t = initTRPC.context<typeof createTRPCContext>().create({
|
||||||
|
transformer: superjson,
|
||||||
|
errorFormatter({ shape }) {
|
||||||
|
return shape;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
// check if the user is signed in, otherwise through a UNAUTHORIZED CODE
|
||||||
|
const isAuthed = t.middleware(({ next, ctx }) => {
|
||||||
|
if (!ctx.auth.userId) {
|
||||||
|
throw new TRPCError({ code: "UNAUTHORIZED" });
|
||||||
|
}
|
||||||
|
|
||||||
|
return next({
|
||||||
|
ctx: {
|
||||||
|
auth: ctx.auth,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
export const createTRPCRouter = t.router;
|
||||||
|
export const publicProcedure = t.procedure;
|
||||||
|
export const protectedProcedure = t.procedure.use(isAuthed);
|
|
@ -2,10 +2,6 @@ import { eq } from "drizzle-orm";
|
||||||
import { db } from "./db";
|
import { db } from "./db";
|
||||||
import { rooms } from "./schema";
|
import { rooms } from "./schema";
|
||||||
import { env } from "~/env.mjs";
|
import { env } from "~/env.mjs";
|
||||||
import { Welcome } from "~/components/templates/Welcome";
|
|
||||||
import { Resend } from "resend";
|
|
||||||
|
|
||||||
const resend = new Resend(env.RESEND_API_KEY);
|
|
||||||
|
|
||||||
export const onUserDeletedHandler = async (userId: string) => {
|
export const onUserDeletedHandler = async (userId: string) => {
|
||||||
try {
|
try {
|
||||||
|
@ -17,11 +13,7 @@ export const onUserDeletedHandler = async (userId: string) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const onUserCreatedHandler = async (
|
export const onUserCreatedHandler = async (userId: string) => {
|
||||||
userId: string,
|
|
||||||
userEmails: string[],
|
|
||||||
userName?: string
|
|
||||||
) => {
|
|
||||||
const userUpdateResponse = await fetch(
|
const userUpdateResponse = await fetch(
|
||||||
`https://api.clerk.com/v1/users/${userId}/metadata`,
|
`https://api.clerk.com/v1/users/${userId}/metadata`,
|
||||||
{
|
{
|
||||||
|
@ -41,16 +33,5 @@ export const onUserCreatedHandler = async (
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
if (userUpdateResponse.ok) {
|
|
||||||
userEmails.forEach((userEmail) => {
|
|
||||||
void resend.sendEmail({
|
|
||||||
from: "no-reply@sprintpadawan.dev",
|
|
||||||
to: userEmail,
|
|
||||||
subject: "🎉 Welcome to Sprint Padawan! 🎉",
|
|
||||||
react: Welcome({ name: userName ? userEmail : userEmail }),
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return userUpdateResponse.ok;
|
return userUpdateResponse.ok;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,12 +1,3 @@
|
||||||
@tailwind base;
|
@tailwind base;
|
||||||
@tailwind components;
|
@tailwind components;
|
||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
|
|
||||||
html,
|
|
||||||
container,
|
|
||||||
body #__next {
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
overflow-y: auto;
|
|
||||||
position: fixed;
|
|
||||||
}
|
|
|
@ -1,68 +0,0 @@
|
||||||
/**
|
|
||||||
* This is the client-side entrypoint for your tRPC API. It is used to create the `api` object which
|
|
||||||
* contains the Next.js App-wrapper, as well as your type-safe React Query hooks.
|
|
||||||
*
|
|
||||||
* We also create a few inference helpers for input and output types.
|
|
||||||
*/
|
|
||||||
import { httpBatchLink, loggerLink } from "@trpc/client";
|
|
||||||
import { createTRPCNext } from "@trpc/next";
|
|
||||||
import { type inferRouterInputs, type inferRouterOutputs } from "@trpc/server";
|
|
||||||
import superjson from "superjson";
|
|
||||||
|
|
||||||
import { type AppRouter } from "~/server/api/root";
|
|
||||||
|
|
||||||
const getBaseUrl = () => {
|
|
||||||
if (typeof window !== "undefined") return ""; // browser should use relative url
|
|
||||||
if (process.env.VERCEL_URL) return `https://${process.env.VERCEL_URL}`; // SSR should use vercel url
|
|
||||||
return `http://localhost:${process.env.PORT ?? 3000}`; // dev SSR should use localhost
|
|
||||||
};
|
|
||||||
|
|
||||||
/** A set of type-safe react-query hooks for your tRPC API. */
|
|
||||||
export const api = createTRPCNext<AppRouter>({
|
|
||||||
config() {
|
|
||||||
return {
|
|
||||||
/**
|
|
||||||
* Transformer used for data de-serialization from the server.
|
|
||||||
*
|
|
||||||
* @see https://trpc.io/docs/data-transformers
|
|
||||||
*/
|
|
||||||
transformer: superjson,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Links used to determine request flow from client to server.
|
|
||||||
*
|
|
||||||
* @see https://trpc.io/docs/links
|
|
||||||
*/
|
|
||||||
links: [
|
|
||||||
loggerLink({
|
|
||||||
enabled: (opts) =>
|
|
||||||
process.env.NODE_ENV === "development" ||
|
|
||||||
(opts.direction === "down" && opts.result instanceof Error),
|
|
||||||
}),
|
|
||||||
httpBatchLink({
|
|
||||||
url: `${getBaseUrl()}/api/trpc`,
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
};
|
|
||||||
},
|
|
||||||
/**
|
|
||||||
* Whether tRPC should await queries when server rendering pages.
|
|
||||||
*
|
|
||||||
* @see https://trpc.io/docs/nextjs#ssr-boolean-default-false
|
|
||||||
*/
|
|
||||||
ssr: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inference helper for inputs.
|
|
||||||
*
|
|
||||||
* @example type HelloInput = RouterInputs['example']['hello']
|
|
||||||
*/
|
|
||||||
export type RouterInputs = inferRouterInputs<AppRouter>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inference helper for outputs.
|
|
||||||
*
|
|
||||||
* @example type HelloOutput = RouterOutputs['example']['hello']
|
|
||||||
*/
|
|
||||||
export type RouterOutputs = inferRouterOutputs<AppRouter>;
|
|
|
@ -1,7 +1,11 @@
|
||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "es2017",
|
"target": "es2017",
|
||||||
"lib": ["dom", "dom.iterable", "esnext"],
|
"lib": [
|
||||||
|
"dom",
|
||||||
|
"dom.iterable",
|
||||||
|
"esnext"
|
||||||
|
],
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"checkJs": true,
|
"checkJs": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
|
@ -18,8 +22,15 @@
|
||||||
"noUncheckedIndexedAccess": true,
|
"noUncheckedIndexedAccess": true,
|
||||||
"baseUrl": ".",
|
"baseUrl": ".",
|
||||||
"paths": {
|
"paths": {
|
||||||
"~/*": ["./src/*"]
|
"~/*": [
|
||||||
}
|
"./src/*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"plugins": [
|
||||||
|
{
|
||||||
|
"name": "next"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
".eslintrc.cjs",
|
".eslintrc.cjs",
|
||||||
|
@ -27,7 +38,10 @@
|
||||||
"**/*.ts",
|
"**/*.ts",
|
||||||
"**/*.tsx",
|
"**/*.tsx",
|
||||||
"**/*.cjs",
|
"**/*.cjs",
|
||||||
"**/*.mjs"
|
"**/*.mjs",
|
||||||
|
".next/types/**/*.ts"
|
||||||
],
|
],
|
||||||
"exclude": ["node_modules"]
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue