Merge pull request #4523 from supabase/master

Prod deploy to studio
This commit is contained in:
Inian authored and GitHub committed 2021-12-17 14:06:52 +05:30
commit d42ff86675
49 files changed
+14725 -532

No files matched your search

+2
View File
@@ -146,3 +146,5 @@ To debug code, and to see changes in real time, it is often useful to have a loc
```sh
http://localhost:8082/
```
For more information on Supabase Studio, see the [Supabase Studio readme](./studio/README.md).
+4
View File
@@ -13,4 +13,8 @@ services:
- 5555:8080
db:
volumes:
- /var/lib/postgresql/data
- ./dev/data.sql:/docker-entrypoint-initdb.d/data.sql
storage:
volumes:
- /var/lib/storage
+1 -1
View File
@@ -154,5 +154,5 @@ services:
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- /var/lib/postgresql/data
- ./volumes/db/data:/var/lib/postgresql/data
- ./volumes/db/init:/docker-entrypoint-initdb.d
+1 -1
View File
@@ -14,7 +14,7 @@
"@supabase/supabase-js": "^1.11.15",
"@supabase/ui": "^0.26.1",
"@tailwindcss/typography": "^0.4.0",
"next": "10.2.2",
"next": "11.1.3",
"react": "17.0.2",
"react-dom": "17.0.2"
},
+142 -92
View File
@@ -9,11 +9,21 @@
dependencies:
"@babel/highlight" "^7.10.4"
"@babel/helper-plugin-utils@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"
integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==
"@babel/helper-validator-identifier@^7.14.0":
version "7.14.0"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288"
integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==
"@babel/helper-validator-identifier@^7.14.9":
version "7.15.7"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389"
integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==
"@babel/highlight@^7.10.4":
version "7.14.0"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf"
@@ -23,20 +33,26 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
"@babel/runtime@7.12.5":
version "7.12.5"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e"
integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==
"@babel/plugin-syntax-jsx@7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201"
integrity sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/runtime@7.15.3":
version "7.15.3"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b"
integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/types@7.8.3":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c"
integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==
"@babel/types@7.15.0":
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd"
integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==
dependencies:
esutils "^2.0.2"
lodash "^4.17.13"
"@babel/helper-validator-identifier" "^7.14.9"
to-fast-properties "^2.0.0"
"@fullhuman/postcss-purgecss@^3.1.3":
@@ -76,20 +92,25 @@
resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-1.0.1.tgz#66d25f6441920bd5c2146ea27fd33995885452dd"
integrity sha512-uikw2gKCmqnvjVxitecWfFLMOKyL9BTFcU4VM3hHj9OMwpkCr5Ke+MRMyY2/aQVmsYs4VTq7NCFX05MYwAHi3g==
"@next/env@10.2.2":
version "10.2.2"
resolved "https://registry.yarnpkg.com/@next/env/-/env-10.2.2.tgz#cb61f6c29f349815108184c2f1926ada65458e28"
integrity sha512-m0xOpl4F9z7R7Yt2OtJoo6ZUsFPdx+kuvZeoctH7T6lO66DmZL3W6MQDxso/ArkH8VOlDPZgeQVVBPf+I7wflA==
"@napi-rs/triples@^1.0.3":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@napi-rs/triples/-/triples-1.1.0.tgz#88c35b72e79a20b79bb4c9b3e2817241a1c9f4f9"
integrity sha512-XQr74QaLeMiqhStEhLn1im9EOMnkypp7MZOwQhGzqp2Weu5eQJbpPxWxixxlYRKWPOmJjsk6qYfYH9kq43yc2w==
"@next/polyfill-module@10.2.2":
version "10.2.2"
resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.2.2.tgz#48d108dd562ed021dd23510c0ffe96badf5f9c04"
integrity sha512-0t5Hw1Dr18TWP65qAnakRa8+jza6SAFOz0b2v67s5AVquAwXXlclR4SfUy3ahrRtjCqlbLEE/oFIzCGbyMYfVA==
"@next/env@11.1.3":
version "11.1.3"
resolved "https://registry.yarnpkg.com/@next/env/-/env-11.1.3.tgz#dc698e00259242012955e43a40788fcf21ba9e37"
integrity sha512-5+vaeooJuWmICSlmVaAC8KG3O8hwKasACVfkHj58xQuCB5SW0TKW3hWxgxkBuefMBn1nM0yEVPKokXCsYjBtng==
"@next/react-dev-overlay@10.2.2":
version "10.2.2"
resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-10.2.2.tgz#88fb5013d3df70bd37b854234c41d884e108a149"
integrity sha512-uPslFPWvvZ8AdadGdK2/834UnJy6F+7071/ere6QpN88Ngzqx9lDIhjslEeFLRtpyBst4s1YUdbm69btVPdE5w==
"@next/polyfill-module@11.1.3":
version "11.1.3"
resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-11.1.3.tgz#95163973fe19f1827da32703d1fcb8198fb2c79a"
integrity sha512-7yr9cr4a0SrBoVE8psxXWK1wTFc8UzsY8Wc2cWGL7qA0hgtqACHaXC47M1ByJB410hFZenGrpE+KFaT1unQMyw==
"@next/react-dev-overlay@11.1.3":
version "11.1.3"
resolved "https://registry.yarnpkg.com/@next/react-dev-overlay/-/react-dev-overlay-11.1.3.tgz#5d08336931e48ebdb07d82b566223d0ee5941d2a"
integrity sha512-zIwtMliSUR+IKl917ToFNB+0fD7bI5kYMdjHU/UEKpfIXAZPnXRHHISCvPDsczlr+bRsbjlUFW1CsNiuFedeuQ==
dependencies:
"@babel/code-frame" "7.12.11"
anser "1.4.9"
@@ -103,10 +124,37 @@
stacktrace-parser "0.1.10"
strip-ansi "6.0.0"
"@next/react-refresh-utils@10.2.2":
version "10.2.2"
resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-10.2.2.tgz#69dd150e3656aebe63fc828916105f1472810488"
integrity sha512-OL7r0iz+SiE9SMWcxZocUtEAHv0/TlBWxIE3KjjO1vWSU1r0gMrE2l2RxHfMLIPsl6CjAkcPxoaXlosFsJ2S5w==
"@next/react-refresh-utils@11.1.3":
version "11.1.3"
resolved "https://registry.yarnpkg.com/@next/react-refresh-utils/-/react-refresh-utils-11.1.3.tgz#fc2c1a4f2403db1a0179d31caa0a4cc811b8ab58"
integrity sha512-144kD8q2nChw67V3AJJlPQ6NUJVFczyn10bhTynn9o2rY5DEnkzuBipcyMuQl2DqfxMkV7sn+yOCOYbrLCk9zg==
"@next/swc-darwin-arm64@11.1.3":
version "11.1.3"
resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-11.1.3.tgz#062eb7871048fdb313304e42ace5f91402dbc39f"
integrity sha512-TwP4krjhs+uU9pesDYCShEXZrLSbJr78p12e7XnLBBaNf20SgWLlVmQUT9gX9KbWan5V0sUbJfmcS8MRNHgYuA==
"@next/swc-darwin-x64@11.1.3":
version "11.1.3"
resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-11.1.3.tgz#8bd515768d02e4c1e0cd80d33f3f29456ee890ee"
integrity sha512-ZSWmkg/PxccHFNUSeBdrfaH8KwSkoeUtewXKvuYYt7Ph0yRsbqSyNIvhUezDua96lApiXXq6EL2d1THfeWomvw==
"@next/swc-linux-x64-gnu@11.1.3":
version "11.1.3"
resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-11.1.3.tgz#40030577e6ee272afb0080b45468bea73208f46d"
integrity sha512-PrTBN0iZudAuj4jSbtXcdBdmfpaDCPIneG4Oms4zcs93KwMgLhivYW082Mvlgx9QVEiRm7+RkFpIVtG/i7JitA==
"@next/swc-win32-x64-msvc@11.1.3":
version "11.1.3"
resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-11.1.3.tgz#2951cbc127f6ea57032a241fb94439cddb5d2482"
integrity sha512-mRwbscVjRoHk+tDY7XbkT5d9FCwujFIQJpGp0XNb1i5OHCSDO8WW/C9cLEWS4LxKRbIZlTLYg1MTXqLQkvva8w==
"@node-rs/helper@1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@node-rs/helper/-/helper-1.2.1.tgz#e079b05f21ff4329d82c4e1f71c0290e4ecdc70c"
integrity sha512-R5wEmm8nbuQU0YGGmYVjEc0OHtYsuXdpRG+Ut/3wZ9XAvQWyThN08bTh2cBJgoZxHQUPtvRfeQuxcAgLuiBISg==
dependencies:
"@napi-rs/triples" "^1.0.3"
"@nodelib/fs.scandir@2.1.4":
version "2.1.4"
@@ -129,18 +177,6 @@
"@nodelib/fs.scandir" "2.1.4"
fastq "^1.6.0"
"@opentelemetry/api@0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-0.14.0.tgz#4e17d8d2f1da72b19374efa7b6526aa001267cae"
integrity sha512-L7RMuZr5LzMmZiQSQDy9O1jo0q+DaLy6XpYJfIGfYSfoJA5qzYwUP3sP1uMIQ549DvxAgM3ng85EaPTM/hUHwQ==
dependencies:
"@opentelemetry/context-base" "^0.14.0"
"@opentelemetry/context-base@^0.14.0":
version "0.14.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/context-base/-/context-base-0.14.0.tgz#c67fc20a4d891447ca1a855d7d70fa79a3533001"
integrity sha512-sDOAZcYwynHFTbLo6n8kIbLiVF3a3BLkrmehJUyEbT9F+Smbi47kLGS2gG2g0fjBLR/Lr1InPD7kXL7FaTqEkw==
"@supabase/gotrue-js@^1.15.1":
version "1.15.4"
resolved "https://registry.yarnpkg.com/@supabase/gotrue-js/-/gotrue-js-1.15.4.tgz#a21ec6aaac18af7b50242d0d358297960a144c52"
@@ -329,11 +365,6 @@ available-typed-arrays@^1.0.2:
dependencies:
array.prototype.filter "^1.0.0"
babel-plugin-syntax-jsx@6.18.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@@ -718,19 +749,19 @@ cssesc@^3.0.0:
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
cssnano-preset-simple@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-2.0.0.tgz#b55e72cb970713f425560a0e141b0335249e2f96"
integrity sha512-HkufSLkaBJbKBFx/7aj5HmCK9Ni/JedRQm0mT2qBzMG/dEuJOLnMt2lK6K1rwOOyV4j9aSY+knbW9WoS7BYpzg==
cssnano-preset-simple@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cssnano-preset-simple/-/cssnano-preset-simple-3.0.0.tgz#e95d0012699ca2c741306e9a3b8eeb495a348dbe"
integrity sha512-vxQPeoMRqUT3c/9f0vWeVa2nKQIHFpogtoBvFdW4GQ3IvEJ6uauCP6p3Y5zQDLFcI7/+40FTgX12o7XUL0Ko+w==
dependencies:
caniuse-lite "^1.0.30001202"
cssnano-simple@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-2.0.0.tgz#930d9dcd8ba105c5a62ce719cb00854da58b5c05"
integrity sha512-0G3TXaFxlh/szPEG/o3VcmCwl0N3E60XNb9YZZijew5eIs6fLjJuOPxQd9yEBaX2p/YfJtt49i4vYi38iH6/6w==
cssnano-simple@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cssnano-simple/-/cssnano-simple-3.0.0.tgz#a4b8ccdef4c7084af97e19bc5b93b4ecf211e90f"
integrity sha512-oU3ueli5Dtwgh0DyeohcIEE00QVfbPR3HzyXdAl89SfnQG3y0/qcpfLVW+jPIh3/rgMZGwuW96rejZGaYE9eUg==
dependencies:
cssnano-preset-simple "^2.0.0"
cssnano-preset-simple "^3.0.0"
d@1, d@^1.0.1:
version "1.0.1"
@@ -922,11 +953,6 @@ escape-string-regexp@^1.0.5:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
esutils@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
etag@1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
@@ -1188,6 +1214,13 @@ ieee754@^1.1.4:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
image-size@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.0.tgz#58b31fe4743b1cec0a0ac26f5c914d3c5b2f0750"
integrity sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==
dependencies:
queue "6.0.2"
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -1438,7 +1471,7 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
lodash@^4.17.13, lodash@^4.17.20, lodash@^4.17.21:
lodash@^4.17.20, lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -1524,7 +1557,7 @@ ms@2.0.0:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
nanoid@^3.1.22, nanoid@^3.1.23:
nanoid@^3.1.23:
version "3.1.23"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81"
integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==
@@ -1541,18 +1574,18 @@ next-tick@~1.0.0:
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
next@10.2.2:
version "10.2.2"
resolved "https://registry.yarnpkg.com/next/-/next-10.2.2.tgz#aadcc526e420282b4a735b0595041195d748a91d"
integrity sha512-HPGSLrflWPvf3zEZSIk/uj0CZ+YYrpZwZS0PFAgXbEwb894iRuAPzglagqlzcCh7lg12RBEaKNIxhrVa5xgjtQ==
next@11.1.3:
version "11.1.3"
resolved "https://registry.yarnpkg.com/next/-/next-11.1.3.tgz#0226b283cb9890e446aea759db8a867de2b279ef"
integrity sha512-ud/gKmnKQ8wtHC+pd1ZiqPRa7DdgulPkAk94MbpsspfNliwZkYs9SIYWhlLSyg+c661LzdUI2nZshvrtggSYWA==
dependencies:
"@babel/runtime" "7.12.5"
"@babel/runtime" "7.15.3"
"@hapi/accept" "5.0.2"
"@next/env" "10.2.2"
"@next/polyfill-module" "10.2.2"
"@next/react-dev-overlay" "10.2.2"
"@next/react-refresh-utils" "10.2.2"
"@opentelemetry/api" "0.14.0"
"@next/env" "11.1.3"
"@next/polyfill-module" "11.1.3"
"@next/react-dev-overlay" "11.1.3"
"@next/react-refresh-utils" "11.1.3"
"@node-rs/helper" "1.2.1"
assert "2.0.0"
ast-types "0.13.2"
browserify-zlib "0.2.0"
@@ -1563,13 +1596,14 @@ next@10.2.2:
chokidar "3.5.1"
constants-browserify "1.0.0"
crypto-browserify "3.12.0"
cssnano-simple "2.0.0"
cssnano-simple "3.0.0"
domain-browser "4.19.0"
encoding "0.1.13"
etag "1.8.1"
find-cache-dir "3.3.1"
get-orientation "1.1.2"
https-browserify "1.0.0"
image-size "1.0.0"
jest-worker "27.0.0-next.5"
native-url "0.3.4"
node-fetch "2.6.1"
@@ -1579,23 +1613,27 @@ next@10.2.2:
p-limit "3.1.0"
path-browserify "1.0.1"
pnp-webpack-plugin "1.6.4"
postcss "8.2.13"
postcss "8.2.15"
process "0.11.10"
prop-types "15.7.2"
querystring-es3 "0.2.1"
raw-body "2.4.1"
react-is "16.13.1"
react-is "17.0.2"
react-refresh "0.8.3"
stream-browserify "3.0.0"
stream-http "3.1.1"
string_decoder "1.3.0"
styled-jsx "3.3.2"
styled-jsx "4.0.1"
timers-browserify "2.0.12"
tty-browserify "0.0.1"
use-subscription "1.5.1"
util "0.12.3"
util "0.12.4"
vm-browserify "1.1.2"
watchpack "2.1.1"
optionalDependencies:
"@next/swc-darwin-arm64" "11.1.3"
"@next/swc-darwin-x64" "11.1.3"
"@next/swc-linux-x64-gnu" "11.1.3"
"@next/swc-win32-x64-msvc" "11.1.3"
node-emoji@^1.8.1:
version "1.10.0"
@@ -1870,13 +1908,13 @@ postcss-value-parser@^4.1.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
postcss@8.2.13:
version "8.2.13"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.13.tgz#dbe043e26e3c068e45113b1ed6375d2d37e2129f"
integrity sha512-FCE5xLH+hjbzRdpbRb1IMCvPv9yZx2QnDarBEYSN0N0HYk+TcXsEhwdFcFb+SRWOKzKGErhIEbBK2ogyLdTtfQ==
postcss@8.2.15:
version "8.2.15"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.15.tgz#9e66ccf07292817d226fc315cbbf9bc148fbca65"
integrity sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==
dependencies:
colorette "^1.2.2"
nanoid "^3.1.22"
nanoid "^3.1.23"
source-map "^0.6.1"
postcss@^6.0.9:
@@ -1917,7 +1955,7 @@ process@0.11.10, process@^0.11.10:
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
prop-types@15.7.2, prop-types@^15.7.2:
prop-types@^15.7.2:
version "15.7.2"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
@@ -1983,6 +2021,13 @@ queue-microtask@^1.2.2:
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
queue@6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65"
integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==
dependencies:
inherits "~2.0.3"
quick-lru@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
@@ -2022,7 +2067,12 @@ react-dom@17.0.2:
object-assign "^4.1.1"
scheduler "^0.20.2"
react-is@16.13.1, react-is@^16.8.1:
react-is@17.0.2:
version "17.0.2"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
react-is@^16.8.1:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -2288,13 +2338,13 @@ strip-ansi@6.0.0:
dependencies:
ansi-regex "^5.0.0"
styled-jsx@3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-3.3.2.tgz#2474601a26670a6049fb4d3f94bd91695b3ce018"
integrity sha512-daAkGd5mqhbBhLd6jYAjYBa9LpxYCzsgo/f6qzPdFxVB8yoGbhxvzQgkC0pfmCVvW3JuAEBn0UzFLBfkHVZG1g==
styled-jsx@4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-4.0.1.tgz#ae3f716eacc0792f7050389de88add6d5245b9e9"
integrity sha512-Gcb49/dRB1k8B4hdK8vhW27Rlb2zujCk1fISrizCcToIs+55B4vmUM0N9Gi4nnVfFZWe55jRdWpAqH1ldAKWvQ==
dependencies:
"@babel/types" "7.8.3"
babel-plugin-syntax-jsx "6.18.0"
"@babel/plugin-syntax-jsx" "7.14.5"
"@babel/types" "7.15.0"
convert-source-map "1.7.0"
loader-utils "1.2.3"
source-map "0.7.3"
@@ -2493,10 +2543,10 @@ util@0.10.3:
dependencies:
inherits "2.0.1"
util@0.12.3, util@^0.12.0:
version "0.12.3"
resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888"
integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==
util@0.12.4, util@^0.12.0:
version "0.12.4"
resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253"
integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==
dependencies:
inherits "^2.0.3"
is-arguments "^1.0.4"
+34 -5
View File
@@ -2,15 +2,32 @@ import Image from 'next/image'
import Link from 'next/link'
import Head from 'next/head'
import { observer } from 'mobx-react-lite'
import { Button, Typography } from '@supabase/ui'
import { Button, IconGitHub, Typography } from '@supabase/ui'
import { API_URL } from 'lib/constants'
import { useStore } from 'hooks'
import { auth, GOTRUE_ENABLED } from 'lib/gotrue'
const Landing = () => {
const { ui } = useStore()
const { theme } = ui
async function handleGithubSignIn() {
try {
const { error } = await auth.signIn(
{
provider: 'github',
},
{
redirectTo: process.env.NEXT_PUBLIC_SITE_URL,
}
)
if (error) throw error
} catch (error) {
console.error(error)
}
}
return (
<div className="z-10 relative h-screen flex flex-col">
<Head>
@@ -38,7 +55,13 @@ const Landing = () => {
type="success"
className="ml-8 font-medium hover:text-gray-300 focus:outline-none focus:text-gray-300 transition duration-150 ease-in-out"
>
<Link href={`${API_URL}/login`}>Sign In</Link>
{GOTRUE_ENABLED ? (
<Button onClick={handleGithubSignIn} icon={<IconGitHub />}>
Sign In With Github
</Button>
) : (
<Link href={`${API_URL}/login`}>Sign In</Link>
)}
</Typography.Text>
</div>
</nav>
@@ -55,9 +78,15 @@ const Landing = () => {
</p>
</Typography.Text>
<div className="mt-5 sm:mt-8 sm:flex sm:justify-center space-x-3">
<Link href={`${API_URL}/login`}>
<Button size="large">Sign In</Button>
</Link>
{GOTRUE_ENABLED ? (
<Button onClick={handleGithubSignIn} size="large" icon={<IconGitHub />}>
Sign In With Github
</Button>
) : (
<Link href={`${API_URL}/login`}>
<Button size="large">Sign In</Button>
</Link>
)}
<Link href="https://supabase.com/docs">
<Button size="large" type="default">
Docs
@@ -46,7 +46,7 @@ const ProjectUsage: FC<Props> = ({ project }) => {
<PanelHeader
icon={<IconDatabase size="small" />}
title="Database"
href={`/project/${ref}/editor/table`}
href={`/project/${ref}/editor`}
/>
<ChartHandler
startDate={startDate}
@@ -49,13 +49,13 @@ const DrilldownPane: FC<Props> = ({ pane, jsonData, activeKey, onSelectKey = ()
<div
key={key}
className={`
${key === activeKey ? 'bg-gray-400' : ''}
${key === activeKey ? 'bg-gray-100 dark:bg-gray-400' : ''}
group flex items-center justify-between
cursor-pointer py-2 px-5 hover:bg-gray-500
cursor-pointer py-2 px-5 hover:bg-gray-100 dark:hover:bg-gray-500
`}
onClick={() => onSelectKey(key, pane)}
>
<Typography.Text small className="font-mono !text-blue-300">
<Typography.Text small className="font-mono !text-blue-700 dark:!text-blue-300">
{key}
</Typography.Text>
<div className={`${key === activeKey ? 'block' : 'hidden'} group-hover:block`}>
@@ -67,13 +67,13 @@ const DrilldownPane: FC<Props> = ({ pane, jsonData, activeKey, onSelectKey = ()
))}
{keysWithoutChildren.map((key: string) => (
<div key={key} className="py-2 px-5 flex space-x-2">
<Typography.Text small className="font-mono !text-blue-300">
<Typography.Text small className="font-mono !text-blue-700 dark:!text-blue-300">
{key}:
</Typography.Text>
<Typography.Text
small
className={`font-mono break-all ${
typeof jsonData[key] !== 'string' ? '!text-green-400' : '!text-yellow-500'
typeof jsonData[key] !== 'string' ? '!text-green-700 dark:!text-green-400' : '!text-yellow-700 dark:!text-yellow-500'
}`}
>
{isNull(jsonData[key])
@@ -5,6 +5,7 @@ import { observer } from 'mobx-react-lite'
import { API_URL, IS_PLATFORM } from 'lib/constants'
import { useStore } from 'hooks'
import WithSidebar from './WithSidebar'
import { auth, GOTRUE_ENABLED } from 'lib/gotrue'
/**
* layout for dashboard homepage, account and org settings
@@ -19,6 +20,22 @@ const AccountLayout = ({ children, title, breadcrumbs }: any) => {
const { app, ui } = useStore()
const onClickLogout = async () => {
await auth.signOut()
router.reload()
}
let baseLogoutLink = {
icon: '/icons/feather/power.svg',
label: 'Logout',
href: `${API_URL}/logout`,
key: `${API_URL}/logout`,
}
let logoutLink = GOTRUE_ENABLED
? { ...baseLogoutLink, href: undefined, onClick: onClickLogout }
: baseLogoutLink
const organizationsLinks = app.organizations
.list()
.map((x: any) => ({
@@ -36,7 +53,6 @@ const AccountLayout = ({ children, title, breadcrumbs }: any) => {
isActive: router.pathname == '/',
label: 'All projects',
href: '/',
as: `/`,
},
],
},
@@ -60,12 +76,7 @@ const AccountLayout = ({ children, title, breadcrumbs }: any) => {
href: `/account/me`,
key: `/account/me`,
},
{
icon: '/img/power.svg',
label: 'Logout',
href: `${API_URL}/logout`,
key: `${API_URL}/logout`,
},
logoutLink,
],
},
]
@@ -1,6 +1,7 @@
import Link from 'next/link'
import { CSSProperties, FC, ReactNode } from 'react'
import { Menu, Typography, IconArrowUpRight, Badge } from '@supabase/ui'
import { isUndefined } from 'lodash'
import LayoutHeader from '../ProjectLayout/LayoutHeader'
interface Props {
@@ -142,7 +143,24 @@ const LinksWithoutHeaders: FC<any> = ({ links, subitems, subitemsParentKey }) =>
)
}
const SidebarItem: FC<any> = ({ id, label, as, href, isActive, isSubitem, onClick, external }) => {
const SidebarItem: FC<any> = ({ id, label, href, isActive, isSubitem, onClick, external }) => {
if (isUndefined(href)) {
return (
<Menu.Item
rounded
key={id}
style={{
marginLeft: isSubitem && '.5rem',
}}
active={isActive ? true : false}
onClick={onClick || (() => {})}
icon={external && <IconArrowUpRight size={'tiny'} />}
>
{isSubitem ? <Typography.Text small>{label}</Typography.Text> : label}
</Menu.Item>
)
}
return (
<Link href={href || ''}>
<a className="block" target={external ? '_blank' : '_self'}>
+42 -15
View File
@@ -4,6 +4,8 @@ import { readOnly } from './supabaseClient'
import { SupaResponse, User } from 'types'
import { auth0 } from './auth0'
import { flattenNamespaceOnUser } from './apiHelpers'
import { config } from 'process'
import { getAuth0Id, getAuthUser, getIdentity, GOTRUE_ENABLED } from 'lib/gotrue'
/**
* Use this method on api routes to check if user is authenticated and having required permissions.
@@ -32,7 +34,7 @@ export async function apiAuthenticate(
try {
// Check that they are logged in
// If no error throw from getAccessToken. That's good, we can continue
await auth0.getAccessToken(req, res)
if (!(GOTRUE_ENABLED)) await auth0.getAccessToken(req, res)
const user = await fetchUser(req, res)
if (!user) {
@@ -53,16 +55,41 @@ export async function apiAuthenticate(
* user with only id prop or detail object. It depends on requireUserDetail config
*/
async function fetchUser(req: NextApiRequest, res: NextApiResponse): Promise<any> {
const session = auth0.getSession(req, res)
let user_id_supabase = null
let user_id_auth0 = null
let gotrue_id = null
let email = null
if (GOTRUE_ENABLED) {
const token = req.headers.authorization
if (!token) {
return res.status(401).end('Unauthorized: missing access token')
}
let { user: gotrue_user, error: authError } = await getAuthUser(token)
if (authError) {
throw authError
}
if (gotrue_user !== null) {
gotrue_id = gotrue_user?.id
email = gotrue_user.email
if (!session) {
return null
let { identity, error } = getIdentity(gotrue_user)
if (error) throw error
if (identity?.provider !== undefined) {
user_id_auth0 = getAuth0Id(identity?.provider, identity?.id)
}
}
} else {
const session = auth0.getSession(req, res)
if (!session) {
return null
}
const { user: auth0_user } = session
const flattened = flattenNamespaceOnUser('https://supabase.io', auth0_user)
user_id_supabase = flattened.user_id_supabase
user_id_auth0 = flattened.user_id_auth0
email = flattened.email
}
const { user: auth0_user } = session
const flattened = flattenNamespaceOnUser('https://supabase.io', auth0_user)
const { user_id_supabase, user_id_auth0, email } = flattened
if (user_id_supabase) {
return {
id: user_id_supabase,
@@ -70,15 +97,15 @@ async function fetchUser(req: NextApiRequest, res: NextApiResponse): Promise<any
}
}
const { data } = await readOnly
.from('users')
.select(
`
const query = readOnly.from('users').select(
`
id, auth0_id, primary_email, username, first_name, last_name, mobile, is_alpha_user
`
)
.eq('auth0_id', user_id_auth0)
.single()
)
const { data } = GOTRUE_ENABLED
? await query.eq('gotrue_id', gotrue_id).single()
: await await query.eq('auth0_id', user_id_auth0).single()
return data
}
+51
View File
@@ -1,3 +1,5 @@
import { GOTRUE_ENABLED } from 'lib/gotrue'
import { tryParseJson } from 'lib/helpers'
import { SupaResponse } from 'types/base'
export function handleError<T>(e: any, requestId: string): SupaResponse<T> {
@@ -65,3 +67,52 @@ export async function handleResponseError<T = unknown>(
return { error } as unknown as SupaResponse<T>
}
}
export function getAccessToken() {
// ignore if server-side
if (typeof window === 'undefined') return ''
const tokenData = window?.localStorage['supabase.auth.token']
if (!tokenData) {
// try to get from url fragment
const access_token = getParameterByName('access_token')
if (access_token) return access_token
else return undefined
}
const tokenObj = tryParseJson(tokenData)
if (tokenObj === false) {
return ''
}
return tokenObj.currentSession.access_token
}
// get param from URL fragment
function getParameterByName(name: string, url?: string) {
// ignore if server-side
if (typeof window === 'undefined') return ''
if (!url) url = window?.location?.href || ''
// eslint-disable-next-line no-useless-escape
name = name.replace(/[\[\]]/g, '\\$&')
const regex = new RegExp('[?&#]' + name + '(=([^&#]*)|&|#|$)'),
results = regex.exec(url)
if (!results) return null
if (!results[2]) return ''
return decodeURIComponent(results[2].replace(/\+/g, ' '))
}
export function constructHeaders(requestId: string, optionHeaders?: { [prop: string]: any }) {
let headers: { [prop: string]: any } = {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-Request-Id': requestId,
...optionHeaders,
}
if (GOTRUE_ENABLED) {
const accessToken = getAccessToken()
if (accessToken) headers.Authorization = `Bearer ${accessToken}`
}
return headers
}
+4 -8
View File
@@ -1,4 +1,4 @@
import { handleError, handleResponse, handleResponseError } from './base'
import { handleError, handleResponse, handleResponseError, constructHeaders } from './base'
import { uuidv4 } from '../../helpers'
import { SupaResponse } from 'types/base'
@@ -8,19 +8,15 @@ export async function delete_<T = any>(
options?: { [prop: string]: any }
): Promise<SupaResponse<T>> {
const requestId = uuidv4()
const { headers, ...otherOptions } = options ?? {}
try {
const { headers: optionHeaders, ...otherOptions } = options ?? {}
const headers = constructHeaders(requestId, optionHeaders)
const response = await fetch(url, {
method: 'DELETE',
body: JSON.stringify(data),
credentials: 'include',
referrerPolicy: 'no-referrer-when-downgrade',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-Request-Id': requestId,
...headers,
},
headers,
...otherOptions,
})
+4 -8
View File
@@ -1,4 +1,4 @@
import { handleError, handleResponse, handleResponseError } from './base'
import { handleError, handleResponse, handleResponseError, constructHeaders } from './base'
import { uuidv4 } from '../../helpers'
import { SupaResponse } from 'types/base'
@@ -8,17 +8,13 @@ export async function get<T = any>(
): Promise<SupaResponse<T>> {
const requestId = uuidv4()
try {
const { headers, ...otherOptions } = options ?? {}
const { headers: optionHeaders, ...otherOptions } = options ?? {}
const headers = constructHeaders(requestId, optionHeaders)
const response = await fetch(url, {
method: 'GET',
credentials: 'include',
referrerPolicy: 'no-referrer-when-downgrade',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-Request-Id': requestId,
...headers,
},
headers,
...otherOptions,
})
if (!response.ok) return handleResponseError(response, requestId)
+4 -8
View File
@@ -1,4 +1,4 @@
import { handleError, handleResponse, handleResponseError } from './base'
import { constructHeaders, handleError, handleResponse, handleResponseError } from './base'
import { uuidv4 } from '../../helpers'
import { SupaResponse } from 'types/base'
@@ -9,18 +9,14 @@ export async function patch<T = any>(
): Promise<SupaResponse<T>> {
const requestId = uuidv4()
try {
const { headers, ...otherOptions } = options ?? {}
const { headers: optionHeaders, ...otherOptions } = options ?? {}
const headers = constructHeaders(requestId, optionHeaders)
const response = await fetch(url, {
method: 'PATCH',
body: JSON.stringify(data),
credentials: 'include',
referrerPolicy: 'no-referrer-when-downgrade',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-Request-Id': requestId,
...headers,
},
headers,
...otherOptions,
})
+4 -8
View File
@@ -1,4 +1,4 @@
import { handleError, handleResponse, handleResponseError } from './base'
import { handleError, handleResponse, handleResponseError, constructHeaders } from './base'
import { uuidv4 } from 'lib/helpers'
import { SupaResponse } from 'types/base'
@@ -9,18 +9,14 @@ export async function post<T = any>(
): Promise<SupaResponse<T>> {
const requestId = uuidv4()
try {
const { headers, ...otherOptions } = options ?? {}
const { headers: optionHeaders, ...otherOptions } = options ?? {}
const headers = constructHeaders(requestId, optionHeaders)
const response = await fetch(url, {
method: 'POST',
body: JSON.stringify(data),
credentials: 'include',
referrerPolicy: 'no-referrer-when-downgrade',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'X-Request-Id': requestId,
...headers,
},
headers,
...otherOptions,
})
if (!response.ok) return handleResponseError(response, requestId)
+36
View File
@@ -0,0 +1,36 @@
import { GoTrueClient, User } from '@supabase/gotrue-js'
export const GOTRUE_ENABLED = (process.env.NEXT_PUBLIC_GOTRUE_ENABLED === 'true') || false
export const GOTRUE_URL = process.env.NEXT_PUBLIC_GOTRUE_URL || 'http://localhost:8000/auth/v1'
export const auth = new GoTrueClient({
url: GOTRUE_URL,
autoRefreshToken: true,
})
export const getAuthUser = async (token: String): Promise<any> => {
try {
const { data: user, error } = await auth.api.getUser(token.replace('Bearer ', ''))
if (error) throw error
return { user, error: null }
} catch (err) {
console.log(err)
return { user: null, error: err }
}
}
export const getAuth0Id = (provider: String, providerId: String): String => {
return `${provider}|${providerId}`
}
export const getIdentity = (gotrueUser: User) => {
try {
if (gotrueUser !== undefined && gotrueUser.identities !== undefined) {
return { identity: gotrueUser.identities[0], error: null }
}
throw 'Missing identity'
} catch (err) {
return { identity: null, error: err }
}
}
+2 -2
View File
@@ -45,8 +45,8 @@ export const timeout = (ms: number) => {
export const getURL = () => {
const url =
process?.env?.SITE_URL && process.env.SITE_URL !== ''
? process.env.SITE_URL
process?.env?.NEXT_PUBLIC_SITE_URL && process.env.NEXT_PUBLIC_SITE_URL !== ''
? process.env.NEXT_PUBLIC_SITE_URL
: process?.env?.VERCEL_URL && process.env.VERCEL_URL !== ''
? process.env.VERCEL_URL
: 'https://app.supabase.io'
+13755 -102
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -20,7 +20,7 @@
"@supabase/grid": "^2.3.9",
"@supabase/postgres-meta": "^0.26.1",
"@supabase/react-data-grid": "^7.1.0-beta.7",
"@supabase/supabase-js": "^1.27.0",
"@supabase/supabase-js": "^1.28.0",
"@supabase/ui": "^0.35.0",
"ajv": "^8.6.3",
"analytics-node": "^3.5.0",
+1 -1
View File
@@ -20,7 +20,7 @@ const Error404: NextPage = ({}) => {
}, [])
return (
<div className="w-full h-screen relative flex flex-col items-center justify-center mx-auto relative">
<div className="w-full h-screen relative flex flex-col items-center justify-center mx-auto">
<div className="absolute top-0 w-full max-w-7xl mx-auto pt-6 px-8 sm:px-6 lg:px-8">
<nav className="relative flex items-center justify-between sm:h-10">
<div className="flex items-center flex-grow flex-shrink-0 lg:flex-grow-0">
+2 -1
View File
@@ -17,9 +17,10 @@ export default class ProjectStore extends PostgresMetaInterface<Project> {
initialDataArray(value: Project[]) {
const finalValue = value.map((project: any) => {
const kpsVersion =
project.services?.length > 0
project?.services?.length > 0
? project?.services[0]?.infrastructure[0]?.app_versions?.version
: undefined
return { ...project, kpsVersion }
})
super.initialDataArray(finalValue)
+1
View File
@@ -56,6 +56,7 @@ Build a basic Todo List with Supabase and your favorite frontend framework:
- Supabase in 6 minutes [Video](https://www.youtube.com/watch?v=c8DNV9yl0mg)
- Let's build SupaAuth - Build an Authentication System using Supabase, Next.js and Typescript [6-part Blog Series](https://aalam.in/blog/supabase-auth-intro-setup-next)
- In-depth self-hosting guide using Nginx [Blog](https://dev.to/chronsyn/self-hosting-with-supabase-1aii)
- Build an Email and Social Auth for Next JS with Supabase, Tailwind CSS 3.0 and TypeScript [Blog](https://creativedesignsguru.com/next-js-supabase-auth/)
### Example apps
+14 -12
View File
@@ -31,15 +31,17 @@ This command will create a `supabase` folder which holds all the configuration f
supabase start
```
This command uses Docker Compose to start all the open source [services](/docs/#how-it-works) of Supabase. This command will take a while to run, there are a lot of services to build.
This command uses Docker to start all the open source [services](/docs/#how-it-works) of Supabase. This command will take a while to run, there are a lot of services to build.
Once this is running, you will see an output that contains your local Supabase credentials:
```txt
Started local development setup.
API URL: http://localhost:54321
DB URL: postgresql://postgres:postgres@localhost:5432/postgres
anon key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiJ9.ZopqoUt20nEV9cklpv9e3yw3PVyZLmKs5qLD6nGL1SI
API URL: http://localhost:54321
DB URL: postgresql://postgres:postgres@localhost:54322/postgres
Studio URL: http://localhost:54323
anon key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiJ9.ZopqoUt20nEV9cklpv9e3yw3PVyZLmKs5qLD6nGL1SI
service_role key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIn0.M2d2z4SFn5C7HlJlaSLfrzuYim9nbY_XI40uWFN3hEE
```
@@ -55,7 +57,7 @@ values={[
```sh
# Default URL:
postgresql://postgres:postgres@localhost:5432/postgres
postgresql://postgres:postgres@localhost:54322/postgres
```
The local Postgres instance can be accessed through [`psql`](https://www.postgresql.org/docs/current/app-psql.html)
@@ -64,7 +66,7 @@ or any other Postgres client, such as [pgadmin](https://www.pgadmin.org/).
For example:
```bash
psql 'postgresql://postgres:postgres@localhost:5432/postgres'
psql 'postgresql://postgres:postgres@localhost:54322/postgres'
```
</TabItem>
@@ -81,13 +83,13 @@ You can learn more about these JWT headers in our [Resources](/docs/learn/auth-d
```sh
curl 'http://localhost:54321/rest/v1/' \
-H "apikey: SUPABASE_KEY" \
-H "Authorization: Bearer SUPABASE_KEY"
-H "apikey: <anon key>" \
-H "Authorization: Bearer <anon key>"
http://localhost:54321/v1/rest/v1/ # REST (PostgREST)
http://localhost:54321/v1/realtime/v1/ # Realtime
http://localhost:54321/v1/storage/v1/ # Storage
http://localhost:54321/v1/auth/v1/ # Auth (GoTrue)
http://localhost:54321/rest/v1/ # REST (PostgREST)
http://localhost:54321/realtime/v1/ # Realtime
http://localhost:54321/storage/v1/ # Storage
http://localhost:54321/auth/v1/ # Auth (GoTrue)
```
</TabItem>
+164 -52
View File
@@ -2,17 +2,13 @@ openref: 0.1
info:
id: reference/cli
title: Getting started
title: About
description: |
The Supabase CLI can be found in our [CLI](https://github.com/supabase/cli) repository.
The CLI is still under heavy development, but it will contain all the functionality for working with Supabase projects and the Supabase platform.
- [x] Running Supabase locally
- [x] Self-hosting
- [ ] Managing database migrations (in progress)
- [ ] Pushing your local changes to production
- [x] Managing database migrations
- [x] Pushing your local changes to production
- [ ] Manage your Supabase Account
- [ ] Manage your Supabase Projects
- [ ] Generating types directly from your database schema
@@ -20,78 +16,194 @@ info:
## Installing the CLI
```bash
npm install supabase -g
```
Installation instructions can be found [here](https://github.com/supabase/cli#install-the-cli).
There may be additional steps that you need to follow to setup the CLI. Located [here](https://supabase.com/docs/guides/local-development).
## Support
Report issues to our [issue tracker](https://github.com/supabase/cli/issues).
definition: spec/combined.json
libraries:
- name: 'sh'
id: 'sh'
version: '0.0.1'
- name: "sh"
id: "sh"
version: "0.0.1"
docs:
path: reference/cli/
sidebar:
- name: 'About'
- name: "About"
items:
- index
- supabase init
- name: 'Local Development'
- name: "Command reference"
items:
- supabase help
- supabase init
- supabase start
- supabase stop
- supabase eject
- supabase db branch list
- supabase db branch create
- supabase db branch delete
- supabase db switch
- supabase db changes
- supabase db commit
- supabase db reset
- supabase db remote set
- supabase db remote commit
- supabase db push
- supabase migration new
- name: "Config reference"
items:
- Config reference
pages:
supabase init:
supabase help:
description: |
```bash
supabase init
```
Help provides help for any command in the application.
Simply type supabase help [path to command] for full details.
Usage:
supabase help [command]
```
This command will create a .supabase folder which holds all the configurations for developing your project locally. You don't need to check this into version control.
supabase init:
description: |
```
Initialize a project to use Supabase CLI.
After you run `supabase init` you will be guided through a series of questions, and if everything goes well, you will see an output similar to this:
```txt
✔ Port for Supabase URL: · 8000
✔ Port for PostgreSQL database: · 5432
✔ Project initialized.
Supabase URL: http://localhost:8000
Supabase Key: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJzdXBhYmFzZSIsImlhdCI6MTYwMzk2ODgzNCwiZXhwIjoyNTUwNjUzNjM0LCJhdWQiOiIiLCJzdWIiOiIiLCJSb2xlIjoicG9zdGdyZXMifQ.magCcozTMKNrl76Tj2dsM7XTl_YH0v0ilajzAvIlw3U
Database URL: postgres://postgres:postgres@localhost:5432/postgres
Run supabase start to start the local emulator.
Usage:
supabase init
```
supabase start:
description: |
```bash
supabase start
```
Start the Supabase local development setup.
Usage:
supabase start
```
This command uses Docker Compose to start all the open source [services](/docs/#how-it-works) of Supabase. This command will take a while to run, there are a lot of services to build.
Once this is running, you will see the health services in Docker Dashboard:
![Docker Supabase](/img/docker-supabase.png)
supabase stop:
supabase db branch list:
description: |
```bash
supabase stop
```
List branches.
Usage:
supabase db branch list
```
When you are finished with Supabase, run `supabase stop` to stop the Docker services.
supabase eject:
supabase db branch create:
description: |
```bash
supabase eject
```
Create a branch.
Usage:
supabase db branch create <branch name>
```
Run in any folder to create a `docker` folder with a `docker-compose.yml`. This is useful for self-hosting or adding custom configuration.
supabase db branch delete:
description: |
```
Delete a branch.
See our [Self Hosting](/docs/guides/hosting/overview) docs for more details.
Usage:
supabase db branch delete <branch name>
```
supabase db switch:
description: |
```
Switch branches.
Usage:
supabase db switch <branch name>
```
supabase db changes:
description: |
```
Diffs the local database with current migrations, then print the diff to standard output.
Usage:
supabase db changes
```
supabase db commit:
description: |
```
Diffs the local database with current migrations, writing it as a new migration.
Usage:
supabase db commit <migration name>
```
supabase db reset:
description: |
```
Resets the local database to reflect current migrations. Any changes on the local database that is not committed will be lost.
Usage:
supabase db reset
```
supabase db remote set:
description: |
```
Set the remote database to push migrations to.
Usage:
supabase db remote set <remote database url>
```
supabase db remote commit:
description: |
```
Commit changes on the remote database since the last pushed migration.
Usage:
supabase db remote commit
```
supabase db push:
description: |
```
Push new migrations to the remote database.
Usage:
supabase db push
```
supabase migration new:
description: |
```
Create an empty migration.
Usage:
supabase migration new <migration name>
```
Config reference:
description: |
The config file resides in `supabase/config.json` after you run `supabase init`.
#### `projectId` (required)
A string used to distinguish different Supabase projects on the same host. Defaults to the working directory name when running `supabase init`.
#### `ports.api` (required)
Host port used for the API URL. Defaults to `54321`.
#### `ports.db` (required)
Host port used for the DB URL. Defaults to `54322`.
#### `ports.studio` (required)
Host port used for Supabase Studio. Defaults to `54323`.
#### `ports.inbucket` (optional)
Host port used for the web interface of Inbucket email testing server. When not specified, emails are automatically confirmed. When specified, emails are not sent to the recipient, but rather monitored and accessible via the web interface.
#### `dbVersion` (required)
Server version number used for the database. This needs to match the server version number of the remote database you intend to link to with `supabase db remote set`. You can retrieve it by running `SHOW server_version_num`.
+2 -2
View File
@@ -280,8 +280,8 @@ pages:
})
```
By default the API server points to the `public` schema. You can enable others database schemas within the Dashboard.
Go to `Settings > API > Schema` and add the schema which you want to expose to on the API.
By default the API server points to the `public` schema. You can enable other database schemas within the Dashboard.
Go to `Settings > API > Schema` and add the schema which you want to expose to the API.
Note: each client connection can only access a single schema, so the code above can access the `other_schema` schema but cannot access the `public` schema.
- name: Custom `fetch` implementation
+9 -14
View File
@@ -6,23 +6,21 @@ This is a single repository for two different websites. Our documents were creat
Install the [Vercel CLI](https://vercel.com/cli).
You will need to run the marketing website and docs website separately.
You will need to run the marketing website and docs website separately. To learn how to run both websites, see the [Development Guide](../DEVELOPERS.md) for more information.
```
# tab 1
make dev
```sh
# step 1
cd supabase
# tab 2
# step 2
cd www
# step 3
npm install
npm run dev
# tab 3
cd web/spec
make
npm install
npm run gen:supabase
npm run start
# visit website
http://localhost:3000
```
In production, this setup is deployed as two different vercel websites (`docs` and `www`)
@@ -31,6 +29,3 @@ In production, this setup is deployed as two different vercel websites (`docs` a
- Referencing resources in nested folders may not work for `web` (eg `/web/static/folder/nestedfolder/asset`) may not work.
- Possibly need to prepend all images/assets in docs site with baseUrl.
<!-- // we need to check this -->
<!-- - Don't use `Link` since that adds `/new` to the links. Use plain `a` tags when possible. -->
@@ -0,0 +1,119 @@
---
title: 'Supabase Beta November 2021: Launch Week Recap'
description: We wrapped up November with Supabase's third Launch Week. Here's all the awesome stuff that got shipped ...
author: ant_wilson
author_url: https://github.com/awalias
author_image_url: https://github.com/awalias.png
authorURL: https://github.com/awalias
image: 2021-nov/release-nov-2021.jpg
thumb: 2021-nov/release-nov-2021-cover.jpg
tags:
- release-notes
date: '2021-12-15'
toc_depth: 3
---
We wrapped up November with Supabase's third Launch Week. It also happens to be 12 months since we moved from alpha to beta.
Here's all the awesome stuff that got shipped during Launch Week...
## Supabase Studio
We [open sourced the Dashboard](/blog/2021/11/30/supabase-studio) - it's now included in Self-Hosting, and the community are now able to contribute,
which is going to help us move even faster! Expect many more updates to the dashboard over the coming weeks and months! [Read the code for yourself.](https://github.com/supabase/supabase/tree/master/studio)
![Supabase Studio](/images/blog/2021-nov/studio.jpg)
## We acquired Logflare
We were early Logflare users, and found it to be one of the most impressive products we'd ever used. So impressive in fact, that we wanted to offer it's capabilities to our entire user base.
You'll now find fully searchable Supabase API and database logs within the dashboard, and we're also in the process of open sourcing the codebase. [Read more about the acquisition](/blog/2021/12/02/supabase-acquires-logflare).
![We acquired Logflare](/images/blog/2021-nov/logflare.png)
## Realtime Row Level Security
[Security rules now work for Realtime](/blog/2021/12/01/realtime-row-level-security-in-postgresql).
All of your row level security policies now work with the realtime API, so you can limit streams and subscriptions on a per user basis (or any configuration you want!).
![Realtime Row Level Security](/images/blog/2021-nov/realtime.png)
## GraphQL is coming to Supabase
We heard you! And built a Postgres extension for [querying your database with GraphQL](/blog/2021/12/03/pg-graphql).
This means that each GraphQL request is resolved by a single SQL statement and hits the theoretical minimum achievable network IO overhead of any GraphQL to SQL resolver.
![GraphQL is coming to Supabase](/images/blog/2021-nov/graphql.png)
## Supabase now runs on PostgreSQL 14
One of the most exciting things to happen in databases this year was the release of PG 14.
Which is now the default database used on our hosted platform. Read more here about [why we're so excited about it](/blog/2021/11/28/whats-new-in-postgres-14).
![Supabase now runs on PostgreSQL 14](/images/blog/2021-nov/pg14.png)
## PostgREST 9.0
PostgREST is the tool we use to introspect your schema and make your database available over a RESTful API.
We also sponsor and help maintain this amazing open source project. Version 9.0 was just released and has also been rolled out to all new and existing Supabase projects on our hosted platform.
[Check out the blog post](/blog/2021/11/28/postgrest-9) by Steve Chavez, the maintainer of PostgREST.
![PostgREST 9.0 ](/images/blog/2021-nov/postgrest9.png)
## Building a SaaS?
We have [a course for that](https://egghead.io/courses/build-a-saas-product-with-next-js-supabase-and-stripe-61f2bc20).
You'll learn how to combine Next.js, Stripe, and Supabase to launch your business in no time at all.
It's honestly mind blowing how quickly you can get products out the door with this stack. Oh and it's free.
![Building a SaaS? ](/images/blog/2021-nov/course.jpg)
## New Storage CDN
Serving your files in no time - Get eye wateringly fast load times for your media files. [Read all about the benefits](/blog/2021/12/03/launch-week-three-friday-five-more-things#supabase-cdn).
![New Storage CDN](/images/blog/2021-nov/too_damn_high.png)
## How we Launch
We "open sourced" our launch methodology - Learn about how we plan, execute, and retrospect launch weeks internally. [Read the post](/blog/2021/11/26/supabase-how-we-launch).
supabase monthly growth
![How we Launch](/images/blog/2021-nov/supabase-universe.jpg)
## Community
### Highlights
- Community Day [blog](/blog/2021/11/29/community-day#new-tutorials-and-integration-guides)
- The SupaSquad has been busy [blog](/blog/2021/11/29/community-day#supasquad-updates)
- 10 startups on what they're building with Supabase [video](https://www.youtube.com/watch?v=QAm1x7KaLq4&list=PL5S4mPUpp4OuzQN-a_FY3OZQuYo4NmXvb&t=3s)
- New official integration guides [blog](https://supabase.com/blog/2021/11/29/community-day#new-tutorials-and-integration-guides)
- Add Supabase in Teta [video](https://www.youtube.com/watch?v=lt-Vebxk-Mk)
- Auth flow with Remix and Supabase [video](https://www.youtube.com/watch?v=-KiH8feOHSc)
- Discovering Supabase [video](https://www.youtube.com/watch?v=WToGeMIdoSY)
- Next.js with Magic Links [blog](https://dev.to/dailydevtips1/authenticating-nextjs-with-supabase-auth-magic-links-363e)
- Next.js + Auth0 + Supabase [blog](https://auth0.com/blog/using-nextjs-and-auth0-with-supabase/)
### TikTok
Supabase is [now on TikTok](https://www.tiktok.com/@supabase.com?) - Watch us ship to some questionable beats.
![GitHub](/images/blog/2021-nov/tiktok.png)
### GitHub
We hit 25K stars!! [github.com/supabase/supabase](http://github.com/supabase/supabase)
![GitHub](/images/blog/2021-nov/stars.png)
## Get started
- Start using Supabase today: **[app.supabase.io](https://app.supabase.io/)**
- Make sure to **[star us on GitHub](https://github.com/supabase/supabase)**
- Follow us **[on Twitter](https://twitter.com/supabase)**
- Subscribe to our **[YouTube channel](https://www.youtube.com/channel/UCNTVzV1InxHV-YR0fSajqPQ)**
- Become a **[sponsor](https://github.com/sponsors/supabase)**
@@ -0,0 +1,122 @@
---
title: 'Holiday Hackdays Winners 2021'
description: Celebrating many amazing projects submitted to our Holiday Hackdays Hackathon.
author: thor_schaeff
author_url: https://github.com/thorwebdev
author_image_url: https://github.com/thorwebdev.png
authorURL: https://github.com/thorwebdev
image: hackathon-winners/holiday-hackdays/holiday-hackdays-winners-og.png
thumb: hackathon-winners/holiday-hackdays/holiday-hackdays-winners-og.png
tags:
- community
- hackathon
date: '2021-12-17'
toc_depth: 2
---
To cool down from [our latest launch week](/blog/2021/12/15/beta-november-2021-launch-week-recap) we (virtually) [sat down with y'all](https://youtu.be/TijBVcV4jXw) and started hacking, and once again we absolutely loved your hackathon submissions and are excited to send some extremely limited swag your way!
As always, it was challenging to pick the winners from all the great submissions! You can see all the amazing projects submitted on [madewithsupabase.com](https://www.madewithsupabase.com/holiday-hackdays). And now, without further ado, let's look at some of our favourites in more detail:
## Best Overall Project
### Winner
[Swappy.one](https://github.com/zernonia/swappy-one) - by [@zernonia](https://twitter.com/zernonia)
Zernonia is one of our [SupaSquad](https://supabase.com/docs/handbook/supasquad) members and continuously blows our minds with his creativity for the open-source projects he creates. For example, he's also the mastermind behind [madewithsupabase.com](https://www.madewithsupabase.com/), one of our favourite resources to see what y'all are building.
Now he can add a gold tee to his collection, and we're starting to run out of swag ideas to show our appreciation! (Send us some ideas on [Twitter](https://twitter.com/supabase)!)
[![Swappy.one](https://www.madewithsupabase.com/api/resize?link=Swappy.one-rsx33-Frame%2030.png&w=1000)](https://github.com/zernonia/swappy-one)
### Runner Up
[Chivel](https://github.com/lalit2005/chivel) - by [@lalitcodes](https://twitter.com/lalitcodes) and [@ChapagainAshik](https://twitter.com/ChapagainAshik)
Chivel is a tool to quickly generate a landing page for your YouTube channel. For example check out this snazzy page that they've generated for the Supabase channel: [supabase.chivel.tk](https://supabase.chivel.tk/)!
A great idea that deserves some silver tees!
[![Chivel](https://www.madewithsupabase.com/api/resize?link=Chivel-a03sx-ogimage.png&w=1000)](https://github.com/lalit2005/chivel)
## Best Realtime Project
### Winner
[rtPoll](https://github.com/emilioschepis/rtpoll) - by [@emilioschepis](https://twitter.com/emilioschepis) & brother Federico.
Brothers Emilio and Federico built a platform to quickly create polls and share them around. Seeing poll results is great, but you know what's even better? Exactly, seeing poll results in realtime!
[![rtPoll](https://madewithsupabase.com/api/resize?link=RT%20Poll%20-%20Realtime%20Polls-bpl8s-rtpoll-rt.png&w=1000)](https://github.com/emilioschepis/rtpoll)
### Runner Up
[e2ee-chat](https://github.com/arnu515/supabase-e2ee-chat) - by [@arnu5152](https://twitter.com/arnu5152)
A chat app is a fairly obvious use case for realtime syncing, but this project caught our eye because the chat is end-to-end encrypted!
[![e2ee-chat](https://www.madewithsupabase.com/api/resize?link=End-to-end%20encrypted%20chat-eap1qg-Screenshot%20from%202021-12-12%2014-32-08.png&w=1000)](https://github.com/arnu515/supabase-e2ee-chat)
## Best Christmas Themed
### Winner
[Santa Banter](https://github.com/Keoooo/santa-banter) - by [@AndyKeogh](https://twitter.com/AndyKeogh)
Not only do we love a good rhyme, but we also love Christmas themed jokes, so Andy's Santa Banter checks all the boxes. Head over there now to submit your best jokes!
[![Santa Banter](https://madewithsupabase.com/api/resize?link=Santa%20Banter%20-dc8wef-Screenshot%202021-12-07%20at%2009.59.08.png&w=1000)](https://github.com/Keoooo/santa-banter)
### Runner Up
[Holiday Sweater](https://github.com/Morel-Tech/ugly_sweater_app) - by [@mtwichel](https://twitter.com/mtwichel)
Ugly sweaters are an integral part of the Christmas Holidays. With Marcus' awesome Flutter app you can now vote on your favourite sweaters from around the globe!
[![Holiday Sweater](https://madewithsupabase.com/api/resize?link=Holiday%20Sweater%20Contest-pjm3r-Screen%20Shot%202021-12-12%20at%2010.52.24%20PM.png&w=1000)](https://github.com/Morel-Tech/ugly_sweater_app)
## Most Visually Pleasing
### Winner
[the get list](https://github.com/glowdex/wishlist) - by [@glowdexapp](https://github.com/glowdexapp)
This visually stunning website allows you to create a wishlist to share with your friends so they don't need to wreck their brains for gift ideas. Here, have a look at what I want this Christmas: [thegetlist.co/list/thorwebdev](https://www.thegetlist.co/list/thorwebdev).
[![the get list](https://www.madewithsupabase.com/api/resize?link=thegetlist.png&w=1000)](https://github.com/glowdex/wishlist)
### Runner Up
[card creator](https://github.com/maggie-j-liu/card-creator) - by [maggie-j-liu](https://github.com/maggie-j-liu), [Arash](https://github.com/arashnrim), [@eiilla11](https://twitter.com/eiilla11), and [@_pranavnt](https://twitter.com/_pranavnt)
This team of high school hackers just keeps knocking it out of the park again. In our [Hacktoberfest Hackathon](https://supabase.com/blog/2021/10/14/hacktoberfest-hackathon-winners-2021#most-spookyfun) they already made it onto the podium. This time around they built this stunning greeting card platform that lets you send well wishes to your friends around the globe in no time. We love it!
[![card creator](https://madewithsupabase.com/api/resize?link=Card%20Creator-vs9hc-Screen%20Shot%202021-12-12%20at%2011.12.23%20PM.png&w=1000)](https://youtu.be/Yx4N2bONA44)
## The Prizes
As is now tradition with Supabase Hackathons, the winners will receive an extremely limited edition gold medal shirt.
![Gold Tshirt](/images/blog/hackathon-winners/holiday-hackdays/holiday-hackdays-winners-shirt.png)
And the runner uppers will receive the same shirt but in silver. These shirts are limited to winners of the hackathon and will never be produced again. Keep them safe like your favourite NFTs!
## Hang out with us and the community
If you want to join the community and build with us, find other people using Supabase, or if you just want to chill and watch people build, come and join us in Discord!
[Join our Discord](https://discord.supabase.com)
![Discord Hangout](/images/blog/hackathon/community.png)
### Get Started Guides
If you're inspired to build, check out some of the latest resources:
- [Build a SaaS product with Next.js, Supabase and Stripe](https://egghead.io/courses/build-a-saas-product-with-next-js-supabase-and-stripe-61f2bc20)
- [Supabase & Sveltekit - Build Twitter in 75 minutes](https://youtu.be/mPQyckogDYc)
- [Supabase Auth With Next.Js 12 Middleware](https://jitsu.com/blog/supabase-nextjs-middleware#what-were-going-to-build)
- [Vue 3 & Supabase | Workout Tracker App](https://www.youtube.com/watch?v=3tF0fGkd4ho)
- [Use Supabase Auth with Vue.js 3](https://vueschool.io/articles/vuejs-tutorials/use-supabase-auth-with-vue-js-3/)
- [Dynamic Jamstack with Stencil and Supabase](https://ionicframework.com/blog/dynamic-jamstack-with-stencil-and-supabase)
+1 -3
View File
@@ -24,9 +24,7 @@ const BlogListItem = ({ blog }: Props) => {
<Image
layout="fill"
src={
!blog.thumb
? `https://images.unsplash.com/photo-1569982175971-d92b01cf8694?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1`
: `/images/blog/${blog.thumb}`
!blog.thumb ? `/images/blog/blog-placeholder.png` : `/images/blog/${blog.thumb}`
}
objectFit="cover"
className="transform duration-100 ease-in scale-100 group-hover:scale-105"
+17 -10
View File
@@ -2,6 +2,7 @@ import { useRouter } from 'next/router'
import FooterLinks from 'data/Footer.json'
import SectionContainer from '../Layouts/SectionContainer'
import DarkModeToggle from '../DarkModeToggle'
import Link from 'next/link'
type Props = {
darkMode: boolean
@@ -23,15 +24,19 @@ const Footer = (props: Props) => {
<SectionContainer>
<div className="xl:grid xl:grid-cols-3 xl:gap-8">
<div className="space-y-8 xl:col-span-1">
<img
className="w-40"
src={
darkMode
? `${basePath}/brand-assets/supabase-logo-wordmark--dark.svg`
: `${basePath}/brand-assets/supabase-logo-wordmark--light.svg`
}
alt="Supabase"
/>
<Link href="#" as="/">
<a>
<img
className="w-40"
src={
darkMode
? `${basePath}/brand-assets/supabase-logo-wordmark--dark.svg`
: `${basePath}/brand-assets/supabase-logo-wordmark--light.svg`
}
alt="Supabase"
/>
</a>
</Link>
<div className="flex space-x-6">
<a href="https://twitter.com/supabase" className="text-gray-300 hover:text-gray-400">
<span className="sr-only">Twitter</span>
@@ -97,7 +102,9 @@ const Footer = (props: Props) => {
</div>
</div>
<div className="mt-32 border-t dark:border-dark pt-8 flex justify-between">
<p className="text-base text-gray-400 dark:text-dark-400">&copy; Supabase Inc</p>
<p className="mb-0 self-center text-base text-gray-400 dark:text-dark-400">
&copy; Supabase Inc
</p>
<DarkModeToggle darkMode={darkMode} updateTheme={updateTheme} />
</div>
</SectionContainer>
+7 -9
View File
@@ -3,15 +3,13 @@ import Link from 'next/link'
function TextLink({ url, label }: any) {
return (
<a href={url}>
<a className="block text-sm text-gray-400 dark:text-gray-400 mt-3">
<div className="flex items-center">
<span>{label}</span>
<span className="ml-2">
<IconArrowRight size="tiny" />
</span>
</div>
</a>
<a href={url} className="block text-sm text-gray-400 dark:text-gray-400 mt-3">
<div className="flex items-center">
<span>{label}</span>
<span className="ml-2">
<IconArrowRight size="tiny" />
</span>
</div>
</a>
)
}
+136 -163
View File
@@ -1868,9 +1868,9 @@
"integrity": "sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA=="
},
"node_modules/@next/env": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.4.tgz",
"integrity": "sha512-QtZ6X5c6Zqa7oWs5csEmZ7xy+gLdtRKKg02SOT5l0Ziea4P5IU8mSOCyNC4fZmXewcRVjpbY+yGqAAP7hJUfOA=="
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.7.tgz",
"integrity": "sha512-TNDqBV37wd95SiNdZsSUq8gnnrTwr+aN9wqy4Zxrxw4bC/jCHNsbK94DxjkG99VL30VCRXXDBTA1/Wa2jIpF9Q=="
},
"node_modules/@next/mdx": {
"version": "10.2.3",
@@ -1882,14 +1882,14 @@
}
},
"node_modules/@next/polyfill-module": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-12.0.4.tgz",
"integrity": "sha512-mk9yCDNpfXINTJKFTZNgwYs7eqRFpc5D/49O/fKB59blihyKl1GY1sZ0l7a2bn5l1X/WuaZzcIfqnrwkneqeaQ=="
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-12.0.7.tgz",
"integrity": "sha512-sA8LAMMlmcspIZw/jeQuJTyA3uGrqOhTBaQE+G9u6DPohqrBFRkaz7RzzJeqXkUXw600occsIBknSjyVd1R67A=="
},
"node_modules/@next/react-dev-overlay": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-12.0.4.tgz",
"integrity": "sha512-9O0lXyzv5goFSmDwq9Hp8JE+DcObvd+bTXvmGSSvYR91AlIoVlH8/PwATx8Rf5YEuqggn/XKR1hn2kBYcbcGnA==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-12.0.7.tgz",
"integrity": "sha512-dSQLgpZ5uzyittFtIHlJCLAbc0LlMFbRBSYuGsIlrtGyjYN+WMcnz8lK48VLxNPFGuB/hEzkWV4TW5Zu75+Fzg==",
"dependencies": {
"@babel/code-frame": "7.12.11",
"anser": "1.4.9",
@@ -1998,9 +1998,9 @@
}
},
"node_modules/@next/react-refresh-utils": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-12.0.4.tgz",
"integrity": "sha512-kNUDmpBaJ+8Lb8CtKNynRFF9oijCjUKKru6Ont+JKhti9//5dNFFIcuo607bJSH86un06OEK0TZUt5XWVlbkjw==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-12.0.7.tgz",
"integrity": "sha512-Pglj1t+7RxH0txEqVcD8ZxrJgqLDmKvQDqxKq3ZPRWxMv7LTl7FVT2Pnb36QFeBwCvMVl67jxsADKsW0idz8sA==",
"peerDependencies": {
"react-refresh": "0.8.3",
"webpack": "^4 || ^5"
@@ -2012,9 +2012,9 @@
}
},
"node_modules/@next/swc-android-arm64": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.4.tgz",
"integrity": "sha512-6mXumia8ZPcy7bYu9kjItfWxrE6SFaJyqQDaFy9G9WrU9x3M1R1Yok8B2X1mboM8itD0tq+t3R/ebQEkkmevUw==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.7.tgz",
"integrity": "sha512-yViT7EEc7JqxncRT+ZTeTsrAYXLlcefo0Y0eAfYmmalGD2605L4FWAVrJi4WnrSLji7l+veczw1WBmNeHICKKA==",
"cpu": [
"arm64"
],
@@ -2027,9 +2027,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.4.tgz",
"integrity": "sha512-7WMen1qhF5JmjKD9S5IEgEoaPJOXyIZj/Nsqa8ZSWxdF5oogp3uYYbKb/rvMYoKzpIbjyoLH/OCM5lm5IFM4iw==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.7.tgz",
"integrity": "sha512-vhAyW2rDEUcQesRVaj0z1hSoz7QhDzzGd0V1/5/5i9YJOfOtyrPsVJ82tlf7BfXl6/Ep+eKNfWVIb5/Jv89EKg==",
"cpu": [
"arm64"
],
@@ -2042,9 +2042,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.4.tgz",
"integrity": "sha512-PVgefMWjxP6CU1HQs39+Bfpjcue6qErJfvJ/+n2zimjLzyeQAmD6LM9f1lDSttW2LjKjasoxR5qkRNLVlqzlaA==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.7.tgz",
"integrity": "sha512-km+6Rx6TvbraoQ1f0MXa69ol/x0RxzucFGa2OgZaYJERas0spy0iwW8hpASsGcf597D8VRW1x+R2C7ZdjVBSTw==",
"cpu": [
"x64"
],
@@ -2057,9 +2057,9 @@
}
},
"node_modules/@next/swc-linux-arm-gnueabihf": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.4.tgz",
"integrity": "sha512-8xGQu3sJiIdriKiCux3jDJ9pwivELEg7z2zfW0CqmQMbKNB7qP9lc0pq6CxshtKyXRMczNWRMtQ3Cjwep+UvNg==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.7.tgz",
"integrity": "sha512-d0zWr877YqZ2cf/DQy6obouaR39r0FPebcXj2nws9AC99m68CO2xVpWv9jT7mFvpY+T40HJisLH80jSZ2iQ9sA==",
"cpu": [
"arm"
],
@@ -2072,9 +2072,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.4.tgz",
"integrity": "sha512-HhEWcBkqGr3E7SYLtN9VnYUGamAWaLcXawHN33Em0WP7gzXrBqz0iIJNH7uEzHDS6980EqU/rrkLyhCHrYSZgQ==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.7.tgz",
"integrity": "sha512-fdobh5u6gG13Gd5LkHhJ+W8tF9hbaFolRW99FhzArMe5/nMKlLdBymOxvitE3K4gSFQxbXJA6TbU0Vv0e59Kww==",
"cpu": [
"arm64"
],
@@ -2087,9 +2087,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.4.tgz",
"integrity": "sha512-oZyQ9wjtE7OX9RlnovP7izNx2AR/RzTuYWU4Ttim8ssABsipQSxSlfRaeb+Qi6jTc6k+lrPhjRfaZ+fGv/m2Ag==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.7.tgz",
"integrity": "sha512-vx0c5Q3oIScFNT/4jI9rCe0yPzKuCqWOkiO/OOV0ixSI2gLhbrwDIcdkm79fKVn3i8JOJunxE4zDoFeR/g8xqQ==",
"cpu": [
"arm64"
],
@@ -2102,9 +2102,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.4.tgz",
"integrity": "sha512-aBuf78QzL93T59Lk9kEGfHcA+9SzYIH7dGon1nqVxtAd2iqicKYNVaVcb38VKeiIBXMSUHXTdu6Ee053ZCOmSw==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.7.tgz",
"integrity": "sha512-9ITyp6s6uGVKNx3C/GP7GrYycbcwTADG7TdIXzXUxOOZORrdB1GNg3w/EL3Am4VMPPEpO6v1RfKo2IKZpVKfTA==",
"cpu": [
"x64"
],
@@ -2117,9 +2117,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.4.tgz",
"integrity": "sha512-yDgqUqL4H8M3Y0hv30ZyL9UvjnK4iXmD4I6iJz+XIHSRdA/VUiyKKoL7okf9hxr0mSxBtagbZ5A3qEoW/VliUQ==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.7.tgz",
"integrity": "sha512-C+k+cygbIZXYfc+Hx2fNPUBEg7jzio+mniP5ywZevuTXW14zodIfQ3ZMoMJR8EpOVvYpjWFk2uAjiwqgx8vo/g==",
"cpu": [
"x64"
],
@@ -2132,9 +2132,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.4.tgz",
"integrity": "sha512-evDUrEYsUo+PMHsedaymfZO98VwV9wNFzuWVCyKgqg6SD1ZRpzbpqYQY7aINIuqZVdIWZElBE6EM+oxaj7PuWQ==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.7.tgz",
"integrity": "sha512-7jTRjOKkDVnb5s7VoHT7eX+eyT/5BQJ/ljP2G56riAgKGqPL63/V7FXemLhhLT67D+OjoP8DRA2E2ne6IPHk4w==",
"cpu": [
"arm64"
],
@@ -2147,9 +2147,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.4.tgz",
"integrity": "sha512-Lbmz0xlo8vW4EDWyzCfy3nGfqt7skqwxaERwe+vDVTBZ56mvJ5dsdyjqK24sxu4FFkWR7SaU4eNlHwZR+A3kTg==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.7.tgz",
"integrity": "sha512-2u5pGDsk7H6gGxob2ATIojzlwKzgYsrijo7RRpXOiPePVqwPWg6/pmhaJzLdpfjaBgRg1NFmwSp/7Ump9X8Ijg==",
"cpu": [
"ia32"
],
@@ -2162,9 +2162,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.4.tgz",
"integrity": "sha512-f+7WNIJOno5QEelrmob+3vN5EZJb3KCkOrnvUsQ0+LCCD0dIPIhCjeHAh3BGj9msGu8ijnXvD7JxVxE5V26cnQ==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.7.tgz",
"integrity": "sha512-frEWtbf+q8Oz4e2UqKJrNssk6DZ6/NLCQXn5/ORWE9dPAfe9XS6aK5FRZ6DuEPmmKd5gOoRkKJFFz5nYd+TeyQ==",
"cpu": [
"x64"
],
@@ -6590,17 +6590,17 @@
"peer": true
},
"node_modules/next": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/next/-/next-12.0.4.tgz",
"integrity": "sha512-1pvjcSZBm5OLoGmDhp4JwKwIE798WbqUNLuyU7w6a2jUkdWaxOYtkE/ROXQTi2pXHj7+6rm68AvhxROLX2NHQg==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/next/-/next-12.0.7.tgz",
"integrity": "sha512-sKO8GJJYfuk9c+q+zHSNumvff+wP7ufmOlwT6BuzwiYfFJ61VTTkfTcDLSJ+95ErQJiC54uS4Yg5JEE8H6jXRA==",
"dependencies": {
"@babel/runtime": "7.15.4",
"@hapi/accept": "5.0.2",
"@napi-rs/triples": "1.0.3",
"@next/env": "12.0.4",
"@next/polyfill-module": "12.0.4",
"@next/react-dev-overlay": "12.0.4",
"@next/react-refresh-utils": "12.0.4",
"@next/env": "12.0.7",
"@next/polyfill-module": "12.0.7",
"@next/react-dev-overlay": "12.0.7",
"@next/react-refresh-utils": "12.0.7",
"acorn": "8.5.0",
"assert": "2.0.0",
"browserify-zlib": "0.2.0",
@@ -6642,7 +6642,7 @@
"use-subscription": "1.5.1",
"util": "0.12.4",
"vm-browserify": "1.1.2",
"watchpack": "2.1.1"
"watchpack": "2.3.0"
},
"bin": {
"next": "dist/bin/next"
@@ -6651,23 +6651,23 @@
"node": ">=12.22.0"
},
"optionalDependencies": {
"@next/swc-android-arm64": "12.0.4",
"@next/swc-darwin-arm64": "12.0.4",
"@next/swc-darwin-x64": "12.0.4",
"@next/swc-linux-arm-gnueabihf": "12.0.4",
"@next/swc-linux-arm64-gnu": "12.0.4",
"@next/swc-linux-arm64-musl": "12.0.4",
"@next/swc-linux-x64-gnu": "12.0.4",
"@next/swc-linux-x64-musl": "12.0.4",
"@next/swc-win32-arm64-msvc": "12.0.4",
"@next/swc-win32-ia32-msvc": "12.0.4",
"@next/swc-win32-x64-msvc": "12.0.4"
"@next/swc-android-arm64": "12.0.7",
"@next/swc-darwin-arm64": "12.0.7",
"@next/swc-darwin-x64": "12.0.7",
"@next/swc-linux-arm-gnueabihf": "12.0.7",
"@next/swc-linux-arm64-gnu": "12.0.7",
"@next/swc-linux-arm64-musl": "12.0.7",
"@next/swc-linux-x64-gnu": "12.0.7",
"@next/swc-linux-x64-musl": "12.0.7",
"@next/swc-win32-arm64-msvc": "12.0.7",
"@next/swc-win32-ia32-msvc": "12.0.7",
"@next/swc-win32-x64-msvc": "12.0.7"
},
"peerDependencies": {
"fibers": ">= 3.1.0",
"node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0",
"react": "^17.0.2 || ^18.0.0",
"react-dom": "^17.0.2 || ^18.0.0",
"react": "^17.0.2 || ^18.0.0-0",
"react-dom": "^17.0.2 || ^18.0.0-0",
"sass": "^1.3.0"
},
"peerDependenciesMeta": {
@@ -11025,9 +11025,9 @@
"integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
},
"node_modules/watchpack": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
"integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz",
"integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==",
"dependencies": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
@@ -11108,20 +11108,6 @@
"node": ">=10.13.0"
}
},
"node_modules/webpack/node_modules/watchpack": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz",
"integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==",
"devOptional": true,
"peer": true,
"dependencies": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/websocket": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz",
@@ -12488,9 +12474,9 @@
"integrity": "sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA=="
},
"@next/env": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.4.tgz",
"integrity": "sha512-QtZ6X5c6Zqa7oWs5csEmZ7xy+gLdtRKKg02SOT5l0Ziea4P5IU8mSOCyNC4fZmXewcRVjpbY+yGqAAP7hJUfOA=="
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.7.tgz",
"integrity": "sha512-TNDqBV37wd95SiNdZsSUq8gnnrTwr+aN9wqy4Zxrxw4bC/jCHNsbK94DxjkG99VL30VCRXXDBTA1/Wa2jIpF9Q=="
},
"@next/mdx": {
"version": "10.2.3",
@@ -12499,14 +12485,14 @@
"requires": {}
},
"@next/polyfill-module": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-12.0.4.tgz",
"integrity": "sha512-mk9yCDNpfXINTJKFTZNgwYs7eqRFpc5D/49O/fKB59blihyKl1GY1sZ0l7a2bn5l1X/WuaZzcIfqnrwkneqeaQ=="
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-12.0.7.tgz",
"integrity": "sha512-sA8LAMMlmcspIZw/jeQuJTyA3uGrqOhTBaQE+G9u6DPohqrBFRkaz7RzzJeqXkUXw600occsIBknSjyVd1R67A=="
},
"@next/react-dev-overlay": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-12.0.4.tgz",
"integrity": "sha512-9O0lXyzv5goFSmDwq9Hp8JE+DcObvd+bTXvmGSSvYR91AlIoVlH8/PwATx8Rf5YEuqggn/XKR1hn2kBYcbcGnA==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-12.0.7.tgz",
"integrity": "sha512-dSQLgpZ5uzyittFtIHlJCLAbc0LlMFbRBSYuGsIlrtGyjYN+WMcnz8lK48VLxNPFGuB/hEzkWV4TW5Zu75+Fzg==",
"requires": {
"@babel/code-frame": "7.12.11",
"anser": "1.4.9",
@@ -12583,75 +12569,75 @@
}
},
"@next/react-refresh-utils": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-12.0.4.tgz",
"integrity": "sha512-kNUDmpBaJ+8Lb8CtKNynRFF9oijCjUKKru6Ont+JKhti9//5dNFFIcuo607bJSH86un06OEK0TZUt5XWVlbkjw==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-12.0.7.tgz",
"integrity": "sha512-Pglj1t+7RxH0txEqVcD8ZxrJgqLDmKvQDqxKq3ZPRWxMv7LTl7FVT2Pnb36QFeBwCvMVl67jxsADKsW0idz8sA==",
"requires": {}
},
"@next/swc-android-arm64": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.4.tgz",
"integrity": "sha512-6mXumia8ZPcy7bYu9kjItfWxrE6SFaJyqQDaFy9G9WrU9x3M1R1Yok8B2X1mboM8itD0tq+t3R/ebQEkkmevUw==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.7.tgz",
"integrity": "sha512-yViT7EEc7JqxncRT+ZTeTsrAYXLlcefo0Y0eAfYmmalGD2605L4FWAVrJi4WnrSLji7l+veczw1WBmNeHICKKA==",
"optional": true
},
"@next/swc-darwin-arm64": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.4.tgz",
"integrity": "sha512-7WMen1qhF5JmjKD9S5IEgEoaPJOXyIZj/Nsqa8ZSWxdF5oogp3uYYbKb/rvMYoKzpIbjyoLH/OCM5lm5IFM4iw==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.7.tgz",
"integrity": "sha512-vhAyW2rDEUcQesRVaj0z1hSoz7QhDzzGd0V1/5/5i9YJOfOtyrPsVJ82tlf7BfXl6/Ep+eKNfWVIb5/Jv89EKg==",
"optional": true
},
"@next/swc-darwin-x64": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.4.tgz",
"integrity": "sha512-PVgefMWjxP6CU1HQs39+Bfpjcue6qErJfvJ/+n2zimjLzyeQAmD6LM9f1lDSttW2LjKjasoxR5qkRNLVlqzlaA==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.7.tgz",
"integrity": "sha512-km+6Rx6TvbraoQ1f0MXa69ol/x0RxzucFGa2OgZaYJERas0spy0iwW8hpASsGcf597D8VRW1x+R2C7ZdjVBSTw==",
"optional": true
},
"@next/swc-linux-arm-gnueabihf": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.4.tgz",
"integrity": "sha512-8xGQu3sJiIdriKiCux3jDJ9pwivELEg7z2zfW0CqmQMbKNB7qP9lc0pq6CxshtKyXRMczNWRMtQ3Cjwep+UvNg==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.7.tgz",
"integrity": "sha512-d0zWr877YqZ2cf/DQy6obouaR39r0FPebcXj2nws9AC99m68CO2xVpWv9jT7mFvpY+T40HJisLH80jSZ2iQ9sA==",
"optional": true
},
"@next/swc-linux-arm64-gnu": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.4.tgz",
"integrity": "sha512-HhEWcBkqGr3E7SYLtN9VnYUGamAWaLcXawHN33Em0WP7gzXrBqz0iIJNH7uEzHDS6980EqU/rrkLyhCHrYSZgQ==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.7.tgz",
"integrity": "sha512-fdobh5u6gG13Gd5LkHhJ+W8tF9hbaFolRW99FhzArMe5/nMKlLdBymOxvitE3K4gSFQxbXJA6TbU0Vv0e59Kww==",
"optional": true
},
"@next/swc-linux-arm64-musl": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.4.tgz",
"integrity": "sha512-oZyQ9wjtE7OX9RlnovP7izNx2AR/RzTuYWU4Ttim8ssABsipQSxSlfRaeb+Qi6jTc6k+lrPhjRfaZ+fGv/m2Ag==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.7.tgz",
"integrity": "sha512-vx0c5Q3oIScFNT/4jI9rCe0yPzKuCqWOkiO/OOV0ixSI2gLhbrwDIcdkm79fKVn3i8JOJunxE4zDoFeR/g8xqQ==",
"optional": true
},
"@next/swc-linux-x64-gnu": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.4.tgz",
"integrity": "sha512-aBuf78QzL93T59Lk9kEGfHcA+9SzYIH7dGon1nqVxtAd2iqicKYNVaVcb38VKeiIBXMSUHXTdu6Ee053ZCOmSw==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.7.tgz",
"integrity": "sha512-9ITyp6s6uGVKNx3C/GP7GrYycbcwTADG7TdIXzXUxOOZORrdB1GNg3w/EL3Am4VMPPEpO6v1RfKo2IKZpVKfTA==",
"optional": true
},
"@next/swc-linux-x64-musl": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.4.tgz",
"integrity": "sha512-yDgqUqL4H8M3Y0hv30ZyL9UvjnK4iXmD4I6iJz+XIHSRdA/VUiyKKoL7okf9hxr0mSxBtagbZ5A3qEoW/VliUQ==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.7.tgz",
"integrity": "sha512-C+k+cygbIZXYfc+Hx2fNPUBEg7jzio+mniP5ywZevuTXW14zodIfQ3ZMoMJR8EpOVvYpjWFk2uAjiwqgx8vo/g==",
"optional": true
},
"@next/swc-win32-arm64-msvc": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.4.tgz",
"integrity": "sha512-evDUrEYsUo+PMHsedaymfZO98VwV9wNFzuWVCyKgqg6SD1ZRpzbpqYQY7aINIuqZVdIWZElBE6EM+oxaj7PuWQ==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.7.tgz",
"integrity": "sha512-7jTRjOKkDVnb5s7VoHT7eX+eyT/5BQJ/ljP2G56riAgKGqPL63/V7FXemLhhLT67D+OjoP8DRA2E2ne6IPHk4w==",
"optional": true
},
"@next/swc-win32-ia32-msvc": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.4.tgz",
"integrity": "sha512-Lbmz0xlo8vW4EDWyzCfy3nGfqt7skqwxaERwe+vDVTBZ56mvJ5dsdyjqK24sxu4FFkWR7SaU4eNlHwZR+A3kTg==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.7.tgz",
"integrity": "sha512-2u5pGDsk7H6gGxob2ATIojzlwKzgYsrijo7RRpXOiPePVqwPWg6/pmhaJzLdpfjaBgRg1NFmwSp/7Ump9X8Ijg==",
"optional": true
},
"@next/swc-win32-x64-msvc": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.4.tgz",
"integrity": "sha512-f+7WNIJOno5QEelrmob+3vN5EZJb3KCkOrnvUsQ0+LCCD0dIPIhCjeHAh3BGj9msGu8ijnXvD7JxVxE5V26cnQ==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.7.tgz",
"integrity": "sha512-frEWtbf+q8Oz4e2UqKJrNssk6DZ6/NLCQXn5/ORWE9dPAfe9XS6aK5FRZ6DuEPmmKd5gOoRkKJFFz5nYd+TeyQ==",
"optional": true
},
"@nodelib/fs.scandir": {
@@ -16036,28 +16022,28 @@
"peer": true
},
"next": {
"version": "12.0.4",
"resolved": "https://registry.npmjs.org/next/-/next-12.0.4.tgz",
"integrity": "sha512-1pvjcSZBm5OLoGmDhp4JwKwIE798WbqUNLuyU7w6a2jUkdWaxOYtkE/ROXQTi2pXHj7+6rm68AvhxROLX2NHQg==",
"version": "12.0.7",
"resolved": "https://registry.npmjs.org/next/-/next-12.0.7.tgz",
"integrity": "sha512-sKO8GJJYfuk9c+q+zHSNumvff+wP7ufmOlwT6BuzwiYfFJ61VTTkfTcDLSJ+95ErQJiC54uS4Yg5JEE8H6jXRA==",
"requires": {
"@babel/runtime": "7.15.4",
"@hapi/accept": "5.0.2",
"@napi-rs/triples": "1.0.3",
"@next/env": "12.0.4",
"@next/polyfill-module": "12.0.4",
"@next/react-dev-overlay": "12.0.4",
"@next/react-refresh-utils": "12.0.4",
"@next/swc-android-arm64": "12.0.4",
"@next/swc-darwin-arm64": "12.0.4",
"@next/swc-darwin-x64": "12.0.4",
"@next/swc-linux-arm-gnueabihf": "12.0.4",
"@next/swc-linux-arm64-gnu": "12.0.4",
"@next/swc-linux-arm64-musl": "12.0.4",
"@next/swc-linux-x64-gnu": "12.0.4",
"@next/swc-linux-x64-musl": "12.0.4",
"@next/swc-win32-arm64-msvc": "12.0.4",
"@next/swc-win32-ia32-msvc": "12.0.4",
"@next/swc-win32-x64-msvc": "12.0.4",
"@next/env": "12.0.7",
"@next/polyfill-module": "12.0.7",
"@next/react-dev-overlay": "12.0.7",
"@next/react-refresh-utils": "12.0.7",
"@next/swc-android-arm64": "12.0.7",
"@next/swc-darwin-arm64": "12.0.7",
"@next/swc-darwin-x64": "12.0.7",
"@next/swc-linux-arm-gnueabihf": "12.0.7",
"@next/swc-linux-arm64-gnu": "12.0.7",
"@next/swc-linux-arm64-musl": "12.0.7",
"@next/swc-linux-x64-gnu": "12.0.7",
"@next/swc-linux-x64-musl": "12.0.7",
"@next/swc-win32-arm64-msvc": "12.0.7",
"@next/swc-win32-ia32-msvc": "12.0.7",
"@next/swc-win32-x64-msvc": "12.0.7",
"acorn": "8.5.0",
"assert": "2.0.0",
"browserify-zlib": "0.2.0",
@@ -16099,7 +16085,7 @@
"use-subscription": "1.5.1",
"util": "0.12.4",
"vm-browserify": "1.1.2",
"watchpack": "2.1.1"
"watchpack": "2.3.0"
},
"dependencies": {
"browserslist": {
@@ -19386,9 +19372,9 @@
"integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
},
"watchpack": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
"integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==",
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.0.tgz",
"integrity": "sha512-MnN0Q1OsvB/GGHETrFeZPQaOelWh/7O+EiFlj8sM9GPjtQkis7k01aAxrg/18kTfoIVcLL+haEVFlXDaSRwKRw==",
"requires": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
@@ -19435,19 +19421,6 @@
"terser-webpack-plugin": "^5.1.3",
"watchpack": "^2.2.0",
"webpack-sources": "^3.2.2"
},
"dependencies": {
"watchpack": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz",
"integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==",
"devOptional": true,
"peer": true,
"requires": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
}
}
}
},
"webpack-sources": {
Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 645 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 792 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 832 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 928 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB