From f52eb3512b086091e013a72b87a665660f669c14 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Wed, 2 Nov 2022 14:25:09 +1100 Subject: [PATCH 001/230] feat: adds graphiql page --- package-lock.json | 1326 +++++++++++++----- studio/package.json | 2 + studio/pages/project/[ref]/graphql/index.tsx | 34 + 3 files changed, 1017 insertions(+), 345 deletions(-) create mode 100644 studio/pages/project/[ref]/graphql/index.tsx diff --git a/package-lock.json b/package-lock.json index faa6b32827d..c676116c2ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,7 +55,7 @@ "jsrsasign": "^10.5.26", "lodash": "^4.17.21", "markdown-toc": "^1.2.0", - "next": "12.0.9", + "next": "12.1.0", "next-compose-plugins": "^2.2.1", "next-mdx-remote": "^3.0.8", "next-themes": "0.0.15", @@ -177,176 +177,6 @@ "react": "^16.13.1 || ^17.0.0" } }, - "apps/temp-docs/node_modules/@next/env": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.9.tgz", - "integrity": "sha512-oBlkyDop0Stf7MPIzETGv5r0YT/G/weBrknoPOUTaa5qwOeGjuy6gsOVc/SBtrBkOoBmRpD+fFhQJPvmo1mS+g==" - }, - "apps/temp-docs/node_modules/@next/swc-android-arm64": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.9.tgz", - "integrity": "sha512-aVqgsEn5plmUH2X58sjzhHsH/6majucWTMaaBEs7hHO2+GCwCZc7zaLH4XCBMKPES9Yaja8/pYUbvZQE9DqgFw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "apps/temp-docs/node_modules/@next/swc-darwin-arm64": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.9.tgz", - "integrity": "sha512-uAgRKm4a2nVdyBiPPJokvmDD1saugOvxljz9ld2ih0CCg5S9vBhqaj3kPGCQBj9hSu3q+Lng2CHnQqG3ga1jzA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "apps/temp-docs/node_modules/@next/swc-darwin-x64": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.9.tgz", - "integrity": "sha512-fDOs2lZIyrAdU18IxMA5orBPn9qLbOdu55gXSTNZOhyRJ8ugtbUAejsK7OL0boJy0CCHPAdVRXm01Mwk8tZ9RQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "apps/temp-docs/node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.9.tgz", - "integrity": "sha512-/ni0p9DBvATUML9RQ1ycQuf05uOYKdzA6iI8+eRsARjpGbFVUFbge7XPzlj9g2Q9YWgoN8CSjFGnKRlyky5uHA==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "apps/temp-docs/node_modules/@next/swc-linux-arm64-gnu": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.9.tgz", - "integrity": "sha512-AphxilJDf95rUxJDHgM9Ww1DaYXZWqTvoKwXeej/0SgSvICcRZrLaFDrkojdXz0Rxr4igX2OdYR1S4/Hj1jWOQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "apps/temp-docs/node_modules/@next/swc-linux-arm64-musl": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.9.tgz", - "integrity": "sha512-K5jbvNNzF3mRjWmPdxP5Bg87i7FHivfBj/L0KJlxpkLSC8sffBJDmB6jtMnI7wiPj9J6vmLkbGtSosln78xAlQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "apps/temp-docs/node_modules/@next/swc-linux-x64-gnu": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.9.tgz", - "integrity": "sha512-bJZ9bkMkQzsY+UyWezEZ77GWQ4TzwKeXdayX3U3+aEkL8k5C6eKBXlidWdrhu0teLmaUXIyWerWrLnJzwGXdfw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "apps/temp-docs/node_modules/@next/swc-linux-x64-musl": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.9.tgz", - "integrity": "sha512-SR9p0R+v1T32DTXPVAXZw31pmJAkSDotC6Afy+mfC0xrEL3pp95R8sGXYAAUCEPkQp0MEeUOVy2LrToe92X7hQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "apps/temp-docs/node_modules/@next/swc-win32-arm64-msvc": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.9.tgz", - "integrity": "sha512-mzQ1A8vfHhJrvEy5KJZGZWEByXthyKfWofvFaf+oo/5nJl/0Bz1ODP2ajSmbLG++77Eo2AROgbm9pkW1ucvG2A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "apps/temp-docs/node_modules/@next/swc-win32-ia32-msvc": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.9.tgz", - "integrity": "sha512-MpD2vj1zjo1u3J3wiz3pEKse19Etz+P0GL6XfQkB/9a84vJQ1JWMaWBjmIdivzZv718Il2pRSSx8hymwPfguYQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "apps/temp-docs/node_modules/@next/swc-win32-x64-msvc": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.9.tgz", - "integrity": "sha512-1c/sxp/4Qz4F6rCxiYqAnrmghCOFt5hHZ9Kd+rXFW5Mqev4C4XDOUMHdBH55HgnJZqngYhOE0r/XNkCtsIojig==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "apps/temp-docs/node_modules/@radix-ui/primitive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", @@ -812,55 +642,6 @@ "dev": true, "license": "MIT" }, - "apps/temp-docs/node_modules/next": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/next/-/next-12.0.9.tgz", - "integrity": "sha512-omfYqoR/DvbdOIJ6SS1unKJ4mGIxUPs0RPa7wr/Mft22OCKgJhuG+aI9KFYi5ZJBwoFQk1vqaMKpWz5qr+dN0Q==", - "dependencies": { - "@next/env": "12.0.9", - "caniuse-lite": "^1.0.30001283", - "postcss": "8.4.5", - "styled-jsx": "5.0.0", - "use-subscription": "1.5.1" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=12.22.0" - }, - "optionalDependencies": { - "@next/swc-android-arm64": "12.0.9", - "@next/swc-darwin-arm64": "12.0.9", - "@next/swc-darwin-x64": "12.0.9", - "@next/swc-linux-arm-gnueabihf": "12.0.9", - "@next/swc-linux-arm64-gnu": "12.0.9", - "@next/swc-linux-arm64-musl": "12.0.9", - "@next/swc-linux-x64-gnu": "12.0.9", - "@next/swc-linux-x64-musl": "12.0.9", - "@next/swc-win32-arm64-msvc": "12.0.9", - "@next/swc-win32-ia32-msvc": "12.0.9", - "@next/swc-win32-x64-msvc": "12.0.9" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", - "react": "^17.0.2 || ^18.0.0-0", - "react-dom": "^17.0.2 || ^18.0.0-0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, "apps/temp-docs/node_modules/next-mdx-remote": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-3.0.8.tgz", @@ -897,23 +678,6 @@ "node": ">= 0.8.0" } }, - "apps/temp-docs/node_modules/postcss": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", - "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", - "dependencies": { - "nanoid": "^3.1.30", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, "apps/temp-docs/node_modules/supports-color": { "version": "7.2.0", "dev": true, @@ -3574,6 +3338,37 @@ "node": ">=0.1.95" } }, + "node_modules/@codemirror/language": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.0.0.tgz", + "integrity": "sha512-rtjk5ifyMzOna1c7PBu7J1VCt0PvA5wy3o8eMVnxMKb7z8KA7JFecvD04dSn14vj/bBaAbqRsGed5OjtofEnLA==", + "peer": true, + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/state": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.1.2.tgz", + "integrity": "sha512-Mxff85Hp5va+zuj+H748KbubXjrinX/k28lj43H14T2D0+4kuvEFIEIO7hCEcvBT8ubZyIelt9yGOjj2MWOEQA==", + "peer": true + }, + "node_modules/@codemirror/view": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.4.0.tgz", + "integrity": "sha512-Kv32b6Tn7QVwFbj/EDswTLSocjk5kgggF6zzBFAL4o4hZ/vmtFD155+EjH1pVlbfoDyVC2M6SedPsMrwYscgNg==", + "peer": true, + "dependencies": { + "@codemirror/state": "^6.0.0", + "style-mod": "^4.0.0", + "w3c-keyname": "^2.2.4" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -3841,6 +3636,66 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "node_modules/@graphiql/react": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/@graphiql/react/-/react-0.13.7.tgz", + "integrity": "sha512-mI+6mXd9AJFDJy39VuZGxCiVLvmBe2XoNidbN3lXgTLe689RZKifPaUw41USitQOu20sASoYDfzJ8i98G4urow==", + "dependencies": { + "@graphiql/toolkit": "^0.8.0", + "@reach/combobox": "^0.17.0", + "@reach/dialog": "^0.17.0", + "@reach/listbox": "^0.17.0", + "@reach/menu-button": "^0.17.0", + "@reach/tooltip": "^0.17.0", + "@reach/visually-hidden": "^0.17.0", + "codemirror": "^5.65.3", + "codemirror-graphql": "^2.0.2", + "copy-to-clipboard": "^3.2.0", + "graphql-language-service": "^5.1.0", + "markdown-it": "^12.2.0", + "set-value": "^4.1.0" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@graphiql/react/node_modules/set-value": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", + "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", + "funding": [ + "https://github.com/sponsors/jonschlinkert", + "https://paypal.me/jonathanschlinkert", + "https://jonschlinkert.dev/sponsor" + ], + "dependencies": { + "is-plain-object": "^2.0.4", + "is-primitive": "^3.0.1" + }, + "engines": { + "node": ">=11.0" + } + }, + "node_modules/@graphiql/toolkit": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@graphiql/toolkit/-/toolkit-0.8.0.tgz", + "integrity": "sha512-DbMFhEKejpPzB6k8W3Mj+Rl8geXiw49USDF9Wdi06EEk1XLVh1iebDqveYY+4lViITsV4+BeGikxlqi8umfP4g==", + "dependencies": { + "@n1ru4l/push-pull-async-iterable-iterator": "^3.1.0", + "meros": "^1.1.4" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0", + "graphql-ws": ">= 4.5.0" + }, + "peerDependenciesMeta": { + "graphql-ws": { + "optional": true + } + } + }, "node_modules/@graphql-typed-document-node/core": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", @@ -5474,6 +5329,30 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@lezer/common": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.1.tgz", + "integrity": "sha512-8TR5++Q/F//tpDsLd5zkrvEX5xxeemafEaek7mUp7Y+bI8cKQXdSqhzTOBaOogETcMOVr0pT3BBPXp13477ciw==", + "peer": true + }, + "node_modules/@lezer/highlight": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.1.2.tgz", + "integrity": "sha512-CAun1WR1glxG9ZdOokTZwXbcwB7PXkIEyZRUMFBVwSrhTcogWq634/ByNImrkUnQhjju6xsIaOBIxvcRJtplXQ==", + "peer": true, + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.2.3.tgz", + "integrity": "sha512-qpB7rBzH8f6Mzjv2AVZRahcm+2Cf7nbIH++uXbvVOL1yIRvVWQ3HAM/saeBLCyz/togB7LGo76qdJYL1uKQlqA==", + "peer": true, + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, "node_modules/@mdx-js/loader": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.6.22.tgz", @@ -5877,6 +5756,14 @@ "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", "dev": true }, + "node_modules/@n1ru4l/push-pull-async-iterable-iterator": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@n1ru4l/push-pull-async-iterable-iterator/-/push-pull-async-iterable-iterator-3.2.0.tgz", + "integrity": "sha512-3fkKj25kEjsfObL6IlKPAlHYPq/oYwUkkQ03zsTTiDjD7vg/RxjdiLeCydqtxHZP0JgsXL3D/X5oAkMGzuUp/Q==", + "engines": { + "node": ">=12" + } + }, "node_modules/@next/bundle-analyzer": { "version": "12.3.1", "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-12.3.1.tgz", @@ -6781,6 +6668,229 @@ "@babel/runtime": "^7.13.10" } }, + "node_modules/@reach/auto-id": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.17.0.tgz", + "integrity": "sha512-ud8iPwF52RVzEmkHq1twuqGuPA+moreumUHdtgvU3sr3/15BNhwp3KyDLrKKSz0LP1r3V4pSdyF9MbYM8BoSjA==", + "dependencies": { + "@reach/utils": "0.17.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/combobox": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/combobox/-/combobox-0.17.0.tgz", + "integrity": "sha512-2mYvU5agOBCQBMdlM4cri+P1BbNwp05P1OuDyc33xJSNiBG7BMy4+ZSHJ0X4fyle6rHwSgCAOCLOeWV1XUYjoQ==", + "dependencies": { + "@reach/auto-id": "0.17.0", + "@reach/descendants": "0.17.0", + "@reach/popover": "0.17.0", + "@reach/portal": "0.17.0", + "@reach/utils": "0.17.0", + "prop-types": "^15.7.2", + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/descendants": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.17.0.tgz", + "integrity": "sha512-c7lUaBfjgcmKFZiAWqhG+VnXDMEhPkI4kAav/82XKZD6NVvFjsQOTH+v3tUkskrAPV44Yuch0mFW/u5Ntifr7Q==", + "dependencies": { + "@reach/utils": "0.17.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/dialog": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/dialog/-/dialog-0.17.0.tgz", + "integrity": "sha512-AnfKXugqDTGbeG3c8xDcrQDE4h9b/vnc27Sa118oQSquz52fneUeX9MeFb5ZEiBJK8T5NJpv7QUTBIKnFCAH5A==", + "dependencies": { + "@reach/portal": "0.17.0", + "@reach/utils": "0.17.0", + "prop-types": "^15.7.2", + "react-focus-lock": "^2.5.2", + "react-remove-scroll": "^2.4.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/dropdown": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/dropdown/-/dropdown-0.17.0.tgz", + "integrity": "sha512-qBTIGInhxtPHtdj4Pl2XZgZMz3e37liydh0xR3qc48syu7g71sL4nqyKjOzThykyfhA3Pb3/wFgsFJKGTSdaig==", + "dependencies": { + "@reach/auto-id": "0.17.0", + "@reach/descendants": "0.17.0", + "@reach/popover": "0.17.0", + "@reach/utils": "0.17.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/listbox": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/listbox/-/listbox-0.17.0.tgz", + "integrity": "sha512-AMnH1P6/3VKy2V/nPb4Es441arYR+t4YRdh9jdcFVrCOD6y7CQrlmxsYjeg9Ocdz08XpdoEBHM3PKLJqNAUr7A==", + "dependencies": { + "@reach/auto-id": "0.17.0", + "@reach/descendants": "0.17.0", + "@reach/machine": "0.17.0", + "@reach/popover": "0.17.0", + "@reach/utils": "0.17.0", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/machine": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/machine/-/machine-0.17.0.tgz", + "integrity": "sha512-9EHnuPgXzkbRENvRUzJvVvYt+C2jp7PGN0xon7ffmKoK8rTO6eA/bb7P0xgloyDDQtu88TBUXKzW0uASqhTXGA==", + "dependencies": { + "@reach/utils": "0.17.0", + "@xstate/fsm": "1.4.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/menu-button": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/menu-button/-/menu-button-0.17.0.tgz", + "integrity": "sha512-YyuYVyMZKamPtivoEI6D0UEILYH3qZtg4kJzEAuzPmoR/aHN66NZO75Fx0gtjG1S6fZfbiARaCOZJC0VEiDOtQ==", + "dependencies": { + "@reach/dropdown": "0.17.0", + "@reach/popover": "0.17.0", + "@reach/utils": "0.17.0", + "prop-types": "^15.7.2", + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x", + "react-is": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/observe-rect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", + "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" + }, + "node_modules/@reach/popover": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.17.0.tgz", + "integrity": "sha512-yYbBF4fMz4Ml4LB3agobZjcZ/oPtPsNv70ZAd7lEC2h7cvhF453pA+zOBGYTPGupKaeBvgAnrMjj7RnxDU5hoQ==", + "dependencies": { + "@reach/portal": "0.17.0", + "@reach/rect": "0.17.0", + "@reach/utils": "0.17.0", + "tabbable": "^4.0.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/portal": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.17.0.tgz", + "integrity": "sha512-+IxsgVycOj+WOeNPL2NdgooUdHPSY285wCtj/iWID6akyr4FgGUK7sMhRM9aGFyrGpx2vzr+eggbUmAVZwOz+A==", + "dependencies": { + "@reach/utils": "0.17.0", + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/rect": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.17.0.tgz", + "integrity": "sha512-3YB7KA5cLjbLc20bmPkJ06DIfXSK06Cb5BbD2dHgKXjUkT9WjZaLYIbYCO8dVjwcyO3GCNfOmPxy62VsPmZwYA==", + "dependencies": { + "@reach/observe-rect": "1.2.0", + "@reach/utils": "0.17.0", + "prop-types": "^15.7.2", + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/tooltip": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/tooltip/-/tooltip-0.17.0.tgz", + "integrity": "sha512-HP8Blordzqb/Cxg+jnhGmWQfKgypamcYLBPlcx6jconyV5iLJ5m93qipr1giK7MqKT2wlsKWy44ZcOrJ+Wrf8w==", + "dependencies": { + "@reach/auto-id": "0.17.0", + "@reach/portal": "0.17.0", + "@reach/rect": "0.17.0", + "@reach/utils": "0.17.0", + "@reach/visually-hidden": "0.17.0", + "prop-types": "^15.7.2", + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/utils": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.17.0.tgz", + "integrity": "sha512-M5y8fCBbrWeIsxedgcSw6oDlAMQDkl5uv3VnMVJ7guwpf4E48Xlh1v66z/1BgN/WYe2y8mB/ilFD2nysEfdGeA==", + "dependencies": { + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@reach/visually-hidden": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/visually-hidden/-/visually-hidden-0.17.0.tgz", + "integrity": "sha512-T6xF3Nv8vVnjVkGU6cm0+kWtvliLqPAo8PcZ+WxkKacZsaHTjaZb4v1PaCcyQHmuTNT/vtTVNOJLG0SjQOIb7g==", + "dependencies": { + "prop-types": "^15.7.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, "node_modules/@react-dnd/asap": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-4.0.1.tgz", @@ -10925,6 +11035,11 @@ "node": ">=8" } }, + "node_modules/@xstate/fsm": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@xstate/fsm/-/fsm-1.4.0.tgz", + "integrity": "sha512-uTHDeu2xI5E1IFwf37JFQM31RrH7mY7877RqPBS4ZqSNUwoLDuct8AhBWaXGnVizBAYyimVwgCyGa9z/NiRhXA==" + }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -13461,6 +13576,39 @@ "node": ">=0.10.0" } }, + "node_modules/codemirror": { + "version": "5.65.9", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.9.tgz", + "integrity": "sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw==" + }, + "node_modules/codemirror-graphql": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/codemirror-graphql/-/codemirror-graphql-2.0.2.tgz", + "integrity": "sha512-9c1cItR+8lG7thmTnDDQ3zI8YesNKiFCp2BnLFkYWCtdhSSuCUHebU/Vurew6ayyUl8MBCldNx3Ev66QAWM5Kw==", + "dependencies": { + "graphql-language-service": "5.0.6" + }, + "peerDependencies": { + "@codemirror/language": "6.0.0", + "codemirror": "^5.65.3", + "graphql": "^15.5.0 || ^16.0.0" + } + }, + "node_modules/codemirror-graphql/node_modules/graphql-language-service": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/graphql-language-service/-/graphql-language-service-5.0.6.tgz", + "integrity": "sha512-FjE23aTy45Lr5metxCv3ZgSKEZOzN7ERR+OFC1isV5mHxI0Ob8XxayLTYjQKrs8b3kOpvgTYmSmu6AyXOzYslg==", + "dependencies": { + "nullthrows": "^1.0.0", + "vscode-languageserver-types": "^3.15.1" + }, + "bin": { + "graphql": "dist/temp-bin.js" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0" + } + }, "node_modules/coffee-script": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", @@ -15426,7 +15574,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -18006,6 +18153,23 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, + "node_modules/graphiql": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/graphiql/-/graphiql-2.0.13.tgz", + "integrity": "sha512-hfqcd40aO2V44Z/rey6lGXYnEsbwseeokeeZGQbFfSImciGtyP0SS8MyE5s5yno6z/M0ymJccpaNaUlC6imSwA==", + "dependencies": { + "@graphiql/react": "^0.13.7", + "@graphiql/toolkit": "^0.8.0", + "entities": "^2.0.0", + "graphql-language-service": "^5.1.0", + "markdown-it": "^12.2.0" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/graphql": { "version": "16.6.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", @@ -18014,6 +18178,21 @@ "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, + "node_modules/graphql-language-service": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/graphql-language-service/-/graphql-language-service-5.1.0.tgz", + "integrity": "sha512-APffigZ/l2me6soek+Yq5Us3HBwmfw4vns4QoqsTePXkK3knVO8rn0uAC6PmTyglb1pmFFPbYaRIzW4wmcnnGQ==", + "dependencies": { + "nullthrows": "^1.0.0", + "vscode-languageserver-types": "^3.17.1" + }, + "bin": { + "graphql": "dist/temp-bin.js" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0" + } + }, "node_modules/graphql-tag": { "version": "2.12.6", "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", @@ -19668,6 +19847,14 @@ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, + "node_modules/is-primitive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", + "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-reference": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.0.tgz", @@ -23473,6 +23660,14 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dependencies": { + "uc.micro": "^1.0.1" + } + }, "node_modules/list-item": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz", @@ -23845,6 +24040,34 @@ "node": ">=0.10.0" } }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/markdown-it/node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/markdown-link": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz", @@ -24598,6 +24821,22 @@ "node": ">= 8" } }, + "node_modules/meros": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/meros/-/meros-1.2.1.tgz", + "integrity": "sha512-R2f/jxYqCAGI19KhAvaxSOxALBMkaXWH2a7rOyqQw+ZmizX5bKkEYWLzdhC+U82ZVVPVp6MCXe3EkVligh+12g==", + "engines": { + "node": ">=13" + }, + "peerDependencies": { + "@types/node": ">=13" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -26155,6 +26394,11 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + }, "node_modules/num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -29240,6 +29484,17 @@ "react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0" } }, + "node_modules/react-clientside-effect": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz", + "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==", + "dependencies": { + "@babel/runtime": "^7.12.13" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-contexify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/react-contexify/-/react-contexify-5.0.0.tgz", @@ -29465,6 +29720,39 @@ "react": ">=16.8.6" } }, + "node_modules/react-focus-lock": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.9.1.tgz", + "integrity": "sha512-pSWOQrUmiKLkffPO6BpMXN7SNKXMsuOakl652IBuALAu1esk+IcpJyM+ALcYzPTTFz1rD0R54aB9A4HuP5t1Wg==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "focus-lock": "^0.11.2", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.6", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-focus-lock/node_modules/focus-lock": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.11.3.tgz", + "integrity": "sha512-4n0pYcPTa/uI7Q66BZna61nRT7lDhnuJ9PJr6wiDjx4uStg491ks41y7uOG+s0umaaa+hulNKSldU9aTg9/yVg==", + "dependencies": { + "tslib": "^2.0.3" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/react-from-dom": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/react-from-dom/-/react-from-dom-0.6.2.tgz", @@ -32919,6 +33207,12 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/style-mod": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz", + "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==", + "peer": true + }, "node_modules/style-to-object": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", @@ -33077,6 +33371,11 @@ "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==", "dev": true }, + "node_modules/tabbable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-4.0.0.tgz", + "integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==" + }, "node_modules/table": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", @@ -34342,6 +34641,11 @@ "node": ">=4.2.0" } }, + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -35255,6 +35559,11 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "devOptional": true }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", + "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -35264,6 +35573,12 @@ "browser-process-hrtime": "^1.0.0" } }, + "node_modules/w3c-keyname": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", + "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==", + "peer": true + }, "node_modules/w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", @@ -36830,6 +37145,8 @@ "dayjs": "^1.11.0", "file-saver": "^2.0.5", "generate-password": "^1.7.0", + "graphiql": "^2.0.13", + "graphql": "^16.6.0", "html-to-image": "^1.10.8", "immutability-helper": "^3.1.1", "json-logic-js": "^2.0.2", @@ -39084,6 +39401,37 @@ "minimist": "^1.2.0" } }, + "@codemirror/language": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.0.0.tgz", + "integrity": "sha512-rtjk5ifyMzOna1c7PBu7J1VCt0PvA5wy3o8eMVnxMKb7z8KA7JFecvD04dSn14vj/bBaAbqRsGed5OjtofEnLA==", + "peer": true, + "requires": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "@codemirror/state": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.1.2.tgz", + "integrity": "sha512-Mxff85Hp5va+zuj+H748KbubXjrinX/k28lj43H14T2D0+4kuvEFIEIO7hCEcvBT8ubZyIelt9yGOjj2MWOEQA==", + "peer": true + }, + "@codemirror/view": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.4.0.tgz", + "integrity": "sha512-Kv32b6Tn7QVwFbj/EDswTLSocjk5kgggF6zzBFAL4o4hZ/vmtFD155+EjH1pVlbfoDyVC2M6SedPsMrwYscgNg==", + "peer": true, + "requires": { + "@codemirror/state": "^6.0.0", + "style-mod": "^4.0.0", + "w3c-keyname": "^2.2.4" + } + }, "@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -39315,6 +39663,46 @@ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "@graphiql/react": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/@graphiql/react/-/react-0.13.7.tgz", + "integrity": "sha512-mI+6mXd9AJFDJy39VuZGxCiVLvmBe2XoNidbN3lXgTLe689RZKifPaUw41USitQOu20sASoYDfzJ8i98G4urow==", + "requires": { + "@graphiql/toolkit": "^0.8.0", + "@reach/combobox": "^0.17.0", + "@reach/dialog": "^0.17.0", + "@reach/listbox": "^0.17.0", + "@reach/menu-button": "^0.17.0", + "@reach/tooltip": "^0.17.0", + "@reach/visually-hidden": "^0.17.0", + "codemirror": "^5.65.3", + "codemirror-graphql": "^2.0.2", + "copy-to-clipboard": "^3.2.0", + "graphql-language-service": "^5.1.0", + "markdown-it": "^12.2.0", + "set-value": "^4.1.0" + }, + "dependencies": { + "set-value": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", + "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", + "requires": { + "is-plain-object": "^2.0.4", + "is-primitive": "^3.0.1" + } + } + } + }, + "@graphiql/toolkit": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@graphiql/toolkit/-/toolkit-0.8.0.tgz", + "integrity": "sha512-DbMFhEKejpPzB6k8W3Mj+Rl8geXiw49USDF9Wdi06EEk1XLVh1iebDqveYY+4lViITsV4+BeGikxlqi8umfP4g==", + "requires": { + "@n1ru4l/push-pull-async-iterable-iterator": "^3.1.0", + "meros": "^1.1.4" + } + }, "@graphql-typed-document-node/core": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz", @@ -40578,6 +40966,30 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@lezer/common": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.1.tgz", + "integrity": "sha512-8TR5++Q/F//tpDsLd5zkrvEX5xxeemafEaek7mUp7Y+bI8cKQXdSqhzTOBaOogETcMOVr0pT3BBPXp13477ciw==", + "peer": true + }, + "@lezer/highlight": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.1.2.tgz", + "integrity": "sha512-CAun1WR1glxG9ZdOokTZwXbcwB7PXkIEyZRUMFBVwSrhTcogWq634/ByNImrkUnQhjju6xsIaOBIxvcRJtplXQ==", + "peer": true, + "requires": { + "@lezer/common": "^1.0.0" + } + }, + "@lezer/lr": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.2.3.tgz", + "integrity": "sha512-qpB7rBzH8f6Mzjv2AVZRahcm+2Cf7nbIH++uXbvVOL1yIRvVWQ3HAM/saeBLCyz/togB7LGo76qdJYL1uKQlqA==", + "peer": true, + "requires": { + "@lezer/common": "^1.0.0" + } + }, "@mdx-js/loader": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.6.22.tgz", @@ -40860,6 +41272,11 @@ } } }, + "@n1ru4l/push-pull-async-iterable-iterator": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@n1ru4l/push-pull-async-iterable-iterator/-/push-pull-async-iterable-iterator-3.2.0.tgz", + "integrity": "sha512-3fkKj25kEjsfObL6IlKPAlHYPq/oYwUkkQ03zsTTiDjD7vg/RxjdiLeCydqtxHZP0JgsXL3D/X5oAkMGzuUp/Q==" + }, "@next/bundle-analyzer": { "version": "12.3.1", "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-12.3.1.tgz", @@ -41494,6 +41911,172 @@ "@babel/runtime": "^7.13.10" } }, + "@reach/auto-id": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.17.0.tgz", + "integrity": "sha512-ud8iPwF52RVzEmkHq1twuqGuPA+moreumUHdtgvU3sr3/15BNhwp3KyDLrKKSz0LP1r3V4pSdyF9MbYM8BoSjA==", + "requires": { + "@reach/utils": "0.17.0", + "tslib": "^2.3.0" + } + }, + "@reach/combobox": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/combobox/-/combobox-0.17.0.tgz", + "integrity": "sha512-2mYvU5agOBCQBMdlM4cri+P1BbNwp05P1OuDyc33xJSNiBG7BMy4+ZSHJ0X4fyle6rHwSgCAOCLOeWV1XUYjoQ==", + "requires": { + "@reach/auto-id": "0.17.0", + "@reach/descendants": "0.17.0", + "@reach/popover": "0.17.0", + "@reach/portal": "0.17.0", + "@reach/utils": "0.17.0", + "prop-types": "^15.7.2", + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" + } + }, + "@reach/descendants": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.17.0.tgz", + "integrity": "sha512-c7lUaBfjgcmKFZiAWqhG+VnXDMEhPkI4kAav/82XKZD6NVvFjsQOTH+v3tUkskrAPV44Yuch0mFW/u5Ntifr7Q==", + "requires": { + "@reach/utils": "0.17.0", + "tslib": "^2.3.0" + } + }, + "@reach/dialog": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/dialog/-/dialog-0.17.0.tgz", + "integrity": "sha512-AnfKXugqDTGbeG3c8xDcrQDE4h9b/vnc27Sa118oQSquz52fneUeX9MeFb5ZEiBJK8T5NJpv7QUTBIKnFCAH5A==", + "requires": { + "@reach/portal": "0.17.0", + "@reach/utils": "0.17.0", + "prop-types": "^15.7.2", + "react-focus-lock": "^2.5.2", + "react-remove-scroll": "^2.4.3", + "tslib": "^2.3.0" + } + }, + "@reach/dropdown": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/dropdown/-/dropdown-0.17.0.tgz", + "integrity": "sha512-qBTIGInhxtPHtdj4Pl2XZgZMz3e37liydh0xR3qc48syu7g71sL4nqyKjOzThykyfhA3Pb3/wFgsFJKGTSdaig==", + "requires": { + "@reach/auto-id": "0.17.0", + "@reach/descendants": "0.17.0", + "@reach/popover": "0.17.0", + "@reach/utils": "0.17.0", + "tslib": "^2.3.0" + } + }, + "@reach/listbox": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/listbox/-/listbox-0.17.0.tgz", + "integrity": "sha512-AMnH1P6/3VKy2V/nPb4Es441arYR+t4YRdh9jdcFVrCOD6y7CQrlmxsYjeg9Ocdz08XpdoEBHM3PKLJqNAUr7A==", + "requires": { + "@reach/auto-id": "0.17.0", + "@reach/descendants": "0.17.0", + "@reach/machine": "0.17.0", + "@reach/popover": "0.17.0", + "@reach/utils": "0.17.0", + "prop-types": "^15.7.2" + } + }, + "@reach/machine": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/machine/-/machine-0.17.0.tgz", + "integrity": "sha512-9EHnuPgXzkbRENvRUzJvVvYt+C2jp7PGN0xon7ffmKoK8rTO6eA/bb7P0xgloyDDQtu88TBUXKzW0uASqhTXGA==", + "requires": { + "@reach/utils": "0.17.0", + "@xstate/fsm": "1.4.0", + "tslib": "^2.3.0" + } + }, + "@reach/menu-button": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/menu-button/-/menu-button-0.17.0.tgz", + "integrity": "sha512-YyuYVyMZKamPtivoEI6D0UEILYH3qZtg4kJzEAuzPmoR/aHN66NZO75Fx0gtjG1S6fZfbiARaCOZJC0VEiDOtQ==", + "requires": { + "@reach/dropdown": "0.17.0", + "@reach/popover": "0.17.0", + "@reach/utils": "0.17.0", + "prop-types": "^15.7.2", + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" + } + }, + "@reach/observe-rect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", + "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" + }, + "@reach/popover": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.17.0.tgz", + "integrity": "sha512-yYbBF4fMz4Ml4LB3agobZjcZ/oPtPsNv70ZAd7lEC2h7cvhF453pA+zOBGYTPGupKaeBvgAnrMjj7RnxDU5hoQ==", + "requires": { + "@reach/portal": "0.17.0", + "@reach/rect": "0.17.0", + "@reach/utils": "0.17.0", + "tabbable": "^4.0.0", + "tslib": "^2.3.0" + } + }, + "@reach/portal": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.17.0.tgz", + "integrity": "sha512-+IxsgVycOj+WOeNPL2NdgooUdHPSY285wCtj/iWID6akyr4FgGUK7sMhRM9aGFyrGpx2vzr+eggbUmAVZwOz+A==", + "requires": { + "@reach/utils": "0.17.0", + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" + } + }, + "@reach/rect": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.17.0.tgz", + "integrity": "sha512-3YB7KA5cLjbLc20bmPkJ06DIfXSK06Cb5BbD2dHgKXjUkT9WjZaLYIbYCO8dVjwcyO3GCNfOmPxy62VsPmZwYA==", + "requires": { + "@reach/observe-rect": "1.2.0", + "@reach/utils": "0.17.0", + "prop-types": "^15.7.2", + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" + } + }, + "@reach/tooltip": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/tooltip/-/tooltip-0.17.0.tgz", + "integrity": "sha512-HP8Blordzqb/Cxg+jnhGmWQfKgypamcYLBPlcx6jconyV5iLJ5m93qipr1giK7MqKT2wlsKWy44ZcOrJ+Wrf8w==", + "requires": { + "@reach/auto-id": "0.17.0", + "@reach/portal": "0.17.0", + "@reach/rect": "0.17.0", + "@reach/utils": "0.17.0", + "@reach/visually-hidden": "0.17.0", + "prop-types": "^15.7.2", + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" + } + }, + "@reach/utils": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.17.0.tgz", + "integrity": "sha512-M5y8fCBbrWeIsxedgcSw6oDlAMQDkl5uv3VnMVJ7guwpf4E48Xlh1v66z/1BgN/WYe2y8mB/ilFD2nysEfdGeA==", + "requires": { + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" + } + }, + "@reach/visually-hidden": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@reach/visually-hidden/-/visually-hidden-0.17.0.tgz", + "integrity": "sha512-T6xF3Nv8vVnjVkGU6cm0+kWtvliLqPAo8PcZ+WxkKacZsaHTjaZb4v1PaCcyQHmuTNT/vtTVNOJLG0SjQOIb7g==", + "requires": { + "prop-types": "^15.7.2", + "tslib": "^2.3.0" + } + }, "@react-dnd/asap": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-4.0.1.tgz", @@ -44682,6 +45265,11 @@ "tslib": "^2.3.0" } }, + "@xstate/fsm": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@xstate/fsm/-/fsm-1.4.0.tgz", + "integrity": "sha512-uTHDeu2xI5E1IFwf37JFQM31RrH7mY7877RqPBS4ZqSNUwoLDuct8AhBWaXGnVizBAYyimVwgCyGa9z/NiRhXA==" + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -46609,6 +47197,30 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" }, + "codemirror": { + "version": "5.65.9", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.9.tgz", + "integrity": "sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw==" + }, + "codemirror-graphql": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/codemirror-graphql/-/codemirror-graphql-2.0.2.tgz", + "integrity": "sha512-9c1cItR+8lG7thmTnDDQ3zI8YesNKiFCp2BnLFkYWCtdhSSuCUHebU/Vurew6ayyUl8MBCldNx3Ev66QAWM5Kw==", + "requires": { + "graphql-language-service": "5.0.6" + }, + "dependencies": { + "graphql-language-service": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/graphql-language-service/-/graphql-language-service-5.0.6.tgz", + "integrity": "sha512-FjE23aTy45Lr5metxCv3ZgSKEZOzN7ERR+OFC1isV5mHxI0Ob8XxayLTYjQKrs8b3kOpvgTYmSmu6AyXOzYslg==", + "requires": { + "nullthrows": "^1.0.0", + "vscode-languageserver-types": "^3.15.1" + } + } + } + }, "coffee-script": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", @@ -48245,8 +48857,7 @@ "entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" }, "errno": { "version": "0.1.8", @@ -50235,11 +50846,32 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, + "graphiql": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/graphiql/-/graphiql-2.0.13.tgz", + "integrity": "sha512-hfqcd40aO2V44Z/rey6lGXYnEsbwseeokeeZGQbFfSImciGtyP0SS8MyE5s5yno6z/M0ymJccpaNaUlC6imSwA==", + "requires": { + "@graphiql/react": "^0.13.7", + "@graphiql/toolkit": "^0.8.0", + "entities": "^2.0.0", + "graphql-language-service": "^5.1.0", + "markdown-it": "^12.2.0" + } + }, "graphql": { "version": "16.6.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.6.0.tgz", "integrity": "sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==" }, + "graphql-language-service": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/graphql-language-service/-/graphql-language-service-5.1.0.tgz", + "integrity": "sha512-APffigZ/l2me6soek+Yq5Us3HBwmfw4vns4QoqsTePXkK3knVO8rn0uAC6PmTyglb1pmFFPbYaRIzW4wmcnnGQ==", + "requires": { + "nullthrows": "^1.0.0", + "vscode-languageserver-types": "^3.17.1" + } + }, "graphql-tag": { "version": "2.12.6", "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", @@ -51418,6 +52050,11 @@ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, + "is-primitive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", + "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==" + }, "is-reference": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.0.tgz", @@ -54336,6 +54973,14 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "requires": { + "uc.micro": "^1.0.1" + } + }, "list-item": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz", @@ -54639,6 +55284,30 @@ "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==" }, + "markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "requires": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" + } + } + }, "markdown-link": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/markdown-link/-/markdown-link-0.1.1.tgz", @@ -55214,6 +55883,12 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, + "meros": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/meros/-/meros-1.2.1.tgz", + "integrity": "sha512-R2f/jxYqCAGI19KhAvaxSOxALBMkaXWH2a7rOyqQw+ZmizX5bKkEYWLzdhC+U82ZVVPVp6MCXe3EkVligh+12g==", + "requires": {} + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -56288,6 +56963,11 @@ "boolbase": "^1.0.0" } }, + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + }, "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", @@ -58618,6 +59298,14 @@ "use-memo-one": "^1.1.1" } }, + "react-clientside-effect": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz", + "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==", + "requires": { + "@babel/runtime": "^7.12.13" + } + }, "react-contexify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/react-contexify/-/react-contexify-5.0.0.tgz", @@ -58784,6 +59472,29 @@ "prop-types": "^15.7.2" } }, + "react-focus-lock": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.9.1.tgz", + "integrity": "sha512-pSWOQrUmiKLkffPO6BpMXN7SNKXMsuOakl652IBuALAu1esk+IcpJyM+ALcYzPTTFz1rD0R54aB9A4HuP5t1Wg==", + "requires": { + "@babel/runtime": "^7.0.0", + "focus-lock": "^0.11.2", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.6", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "dependencies": { + "focus-lock": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.11.3.tgz", + "integrity": "sha512-4n0pYcPTa/uI7Q66BZna61nRT7lDhnuJ9PJr6wiDjx4uStg491ks41y7uOG+s0umaaa+hulNKSldU9aTg9/yVg==", + "requires": { + "tslib": "^2.0.3" + } + } + } + }, "react-from-dom": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/react-from-dom/-/react-from-dom-0.6.2.tgz", @@ -61415,6 +62126,8 @@ "dayjs": "^1.11.0", "file-saver": "^2.0.5", "generate-password": "^1.7.0", + "graphiql": "*", + "graphql": "*", "html-to-image": "^1.10.8", "immutability-helper": "^3.1.1", "jest": "^27.4.0", @@ -61658,6 +62371,12 @@ } } }, + "style-mod": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz", + "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==", + "peer": true + }, "style-to-object": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", @@ -62018,6 +62737,11 @@ "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==", "dev": true }, + "tabbable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-4.0.0.tgz", + "integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==" + }, "table": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", @@ -62159,7 +62883,7 @@ "lodash": "^4.17.21", "markdown-toc": "^1.2.0", "minimist": "^1.2.6", - "next": "12.0.9", + "next": "12.1.0", "next-compose-plugins": "^2.2.1", "next-mdx-remote": "^3.0.8", "next-themes": "0.0.15", @@ -62235,77 +62959,6 @@ "version": "1.6.22", "requires": {} }, - "@next/env": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.9.tgz", - "integrity": "sha512-oBlkyDop0Stf7MPIzETGv5r0YT/G/weBrknoPOUTaa5qwOeGjuy6gsOVc/SBtrBkOoBmRpD+fFhQJPvmo1mS+g==" - }, - "@next/swc-android-arm64": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.9.tgz", - "integrity": "sha512-aVqgsEn5plmUH2X58sjzhHsH/6majucWTMaaBEs7hHO2+GCwCZc7zaLH4XCBMKPES9Yaja8/pYUbvZQE9DqgFw==", - "optional": true - }, - "@next/swc-darwin-arm64": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.9.tgz", - "integrity": "sha512-uAgRKm4a2nVdyBiPPJokvmDD1saugOvxljz9ld2ih0CCg5S9vBhqaj3kPGCQBj9hSu3q+Lng2CHnQqG3ga1jzA==", - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.9.tgz", - "integrity": "sha512-fDOs2lZIyrAdU18IxMA5orBPn9qLbOdu55gXSTNZOhyRJ8ugtbUAejsK7OL0boJy0CCHPAdVRXm01Mwk8tZ9RQ==", - "optional": true - }, - "@next/swc-linux-arm-gnueabihf": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.9.tgz", - "integrity": "sha512-/ni0p9DBvATUML9RQ1ycQuf05uOYKdzA6iI8+eRsARjpGbFVUFbge7XPzlj9g2Q9YWgoN8CSjFGnKRlyky5uHA==", - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.9.tgz", - "integrity": "sha512-AphxilJDf95rUxJDHgM9Ww1DaYXZWqTvoKwXeej/0SgSvICcRZrLaFDrkojdXz0Rxr4igX2OdYR1S4/Hj1jWOQ==", - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.9.tgz", - "integrity": "sha512-K5jbvNNzF3mRjWmPdxP5Bg87i7FHivfBj/L0KJlxpkLSC8sffBJDmB6jtMnI7wiPj9J6vmLkbGtSosln78xAlQ==", - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.9.tgz", - "integrity": "sha512-bJZ9bkMkQzsY+UyWezEZ77GWQ4TzwKeXdayX3U3+aEkL8k5C6eKBXlidWdrhu0teLmaUXIyWerWrLnJzwGXdfw==", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.9.tgz", - "integrity": "sha512-SR9p0R+v1T32DTXPVAXZw31pmJAkSDotC6Afy+mfC0xrEL3pp95R8sGXYAAUCEPkQp0MEeUOVy2LrToe92X7hQ==", - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.9.tgz", - "integrity": "sha512-mzQ1A8vfHhJrvEy5KJZGZWEByXthyKfWofvFaf+oo/5nJl/0Bz1ODP2ajSmbLG++77Eo2AROgbm9pkW1ucvG2A==", - "optional": true - }, - "@next/swc-win32-ia32-msvc": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.9.tgz", - "integrity": "sha512-MpD2vj1zjo1u3J3wiz3pEKse19Etz+P0GL6XfQkB/9a84vJQ1JWMaWBjmIdivzZv718Il2pRSSx8hymwPfguYQ==", - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.9.tgz", - "integrity": "sha512-1c/sxp/4Qz4F6rCxiYqAnrmghCOFt5hHZ9Kd+rXFW5Mqev4C4XDOUMHdBH55HgnJZqngYhOE0r/XNkCtsIojig==", - "optional": true - }, "@radix-ui/primitive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", @@ -62642,29 +63295,6 @@ "version": "0.4.1", "dev": true }, - "next": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/next/-/next-12.0.9.tgz", - "integrity": "sha512-omfYqoR/DvbdOIJ6SS1unKJ4mGIxUPs0RPa7wr/Mft22OCKgJhuG+aI9KFYi5ZJBwoFQk1vqaMKpWz5qr+dN0Q==", - "requires": { - "@next/env": "12.0.9", - "@next/swc-android-arm64": "12.0.9", - "@next/swc-darwin-arm64": "12.0.9", - "@next/swc-darwin-x64": "12.0.9", - "@next/swc-linux-arm-gnueabihf": "12.0.9", - "@next/swc-linux-arm64-gnu": "12.0.9", - "@next/swc-linux-arm64-musl": "12.0.9", - "@next/swc-linux-x64-gnu": "12.0.9", - "@next/swc-linux-x64-musl": "12.0.9", - "@next/swc-win32-arm64-msvc": "12.0.9", - "@next/swc-win32-ia32-msvc": "12.0.9", - "@next/swc-win32-x64-msvc": "12.0.9", - "caniuse-lite": "^1.0.30001283", - "postcss": "8.4.5", - "styled-jsx": "5.0.0", - "use-subscription": "1.5.1" - } - }, "next-mdx-remote": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/next-mdx-remote/-/next-mdx-remote-3.0.8.tgz", @@ -62692,16 +63322,6 @@ "word-wrap": "^1.2.3" } }, - "postcss": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", - "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", - "requires": { - "nanoid": "^3.1.30", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.1" - } - }, "supports-color": { "version": "7.2.0", "dev": true, @@ -63494,6 +64114,11 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==" }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + }, "uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -64175,6 +64800,11 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "devOptional": true }, + "vscode-languageserver-types": { + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz", + "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA==" + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -64183,6 +64813,12 @@ "browser-process-hrtime": "^1.0.0" } }, + "w3c-keyname": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", + "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==", + "peer": true + }, "w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", diff --git a/studio/package.json b/studio/package.json index 1b9790d0711..03b6da52c66 100644 --- a/studio/package.json +++ b/studio/package.json @@ -39,6 +39,8 @@ "dayjs": "^1.11.0", "file-saver": "^2.0.5", "generate-password": "^1.7.0", + "graphiql": "^2.0.13", + "graphql": "^16.6.0", "html-to-image": "^1.10.8", "immutability-helper": "^3.1.1", "json-logic-js": "^2.0.2", diff --git a/studio/pages/project/[ref]/graphql/index.tsx b/studio/pages/project/[ref]/graphql/index.tsx new file mode 100644 index 00000000000..01b89f9585e --- /dev/null +++ b/studio/pages/project/[ref]/graphql/index.tsx @@ -0,0 +1,34 @@ +import { createGraphiQLFetcher } from '@graphiql/toolkit' +import { GraphiQL } from 'graphiql' +import { observer } from 'mobx-react-lite' +import 'graphiql/graphiql.css' + +import { ProjectLayoutWithAuth } from 'components/layouts' +import { useStore } from 'hooks' +import { NextPageWithLayout } from 'types' + +const fetcher = createGraphiQLFetcher({ + url: 'https://yrjyofbjvjypdsexuvvu.supabase.red/graphql/v1', + fetch, + headers: { + apikey: + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlyanlvZmJqdmp5cGRzZXh1dnZ1Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2NjczNTg0OTIsImV4cCI6MTk4MjkzNDQ5Mn0.CMVzrM7R0ym8ukt5miDoNL0ELhsM9fxOx2Qpm0hsLFE', + }, +}) + +const GraphiQLPage: NextPageWithLayout = () => { + const { ui } = useStore() + + const project = ui.selectedProject + console.log('project:', project) + + return +} + +GraphiQLPage.getLayout = (page) => ( + +
{page}
+
+) + +export default observer(GraphiQLPage) From 6cfb9283d662b5b9f48171605c3bde255485880c Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Wed, 2 Nov 2022 16:31:57 +1100 Subject: [PATCH 002/230] adds graphiql menu item --- package-lock.json | 6 +- .../NavigationBar/NavigationBar.utils.tsx | 14 +++++ studio/package.json | 1 + studio/pages/project/[ref]/graphiql/index.tsx | 59 +++++++++++++++++++ studio/pages/project/[ref]/graphql/index.tsx | 34 ----------- studio/public/img/graphql.svg | 10 ++++ 6 files changed, 88 insertions(+), 36 deletions(-) create mode 100644 studio/pages/project/[ref]/graphiql/index.tsx delete mode 100644 studio/pages/project/[ref]/graphql/index.tsx create mode 100644 studio/public/img/graphql.svg diff --git a/package-lock.json b/package-lock.json index c676116c2ca..2d9b2c00154 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37120,6 +37120,7 @@ "studio": { "version": "0.0.9", "dependencies": { + "@graphiql/toolkit": "^0.8.0", "@headlessui/react": "^1.4.1", "@monaco-editor/react": "^4.3.1", "@next/bundle-analyzer": "^12.0.4", @@ -62070,6 +62071,7 @@ "version": "file:studio", "requires": { "@babel/core": "^7.17.5", + "@graphiql/toolkit": "*", "@headlessui/react": "^1.4.1", "@monaco-editor/react": "^4.3.1", "@next/bundle-analyzer": "^12.0.4", @@ -62126,8 +62128,8 @@ "dayjs": "^1.11.0", "file-saver": "^2.0.5", "generate-password": "^1.7.0", - "graphiql": "*", - "graphql": "*", + "graphiql": "^2.0.13", + "graphql": "^16.6.0", "html-to-image": "^1.10.8", "immutability-helper": "^3.1.1", "jest": "^27.4.0", diff --git a/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.utils.tsx b/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.utils.tsx index c5b6ddb9036..6ef0458c2be 100644 --- a/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.utils.tsx +++ b/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.utils.tsx @@ -50,6 +50,20 @@ export const generateToolRoutes = (ref?: string, project?: ProjectBase): Route[] ref && (isProjectPaused ? homeUrl : isProjectBuilding ? buildingUrl : `/project/${ref}/sql`), }, + { + key: 'graphiql', + label: 'GraphiQL', + icon: ( + code.replace(/svg/, 'svg class="m-auto text-color-inherit"')} + /> + ), + link: + ref && + (isProjectPaused ? homeUrl : isProjectBuilding ? buildingUrl : `/project/${ref}/graphiql`), + }, ] } export const generateProductRoutes = (ref?: string, project?: ProjectBase): Route[] => { diff --git a/studio/package.json b/studio/package.json index 03b6da52c66..62bd3fbd52a 100644 --- a/studio/package.json +++ b/studio/package.json @@ -14,6 +14,7 @@ "prettier:write": "prettier --write ." }, "dependencies": { + "@graphiql/toolkit": "^0.8.0", "@headlessui/react": "^1.4.1", "@monaco-editor/react": "^4.3.1", "@next/bundle-analyzer": "^12.0.4", diff --git a/studio/pages/project/[ref]/graphiql/index.tsx b/studio/pages/project/[ref]/graphiql/index.tsx new file mode 100644 index 00000000000..bbf6f911558 --- /dev/null +++ b/studio/pages/project/[ref]/graphiql/index.tsx @@ -0,0 +1,59 @@ +import { createGraphiQLFetcher } from '@graphiql/toolkit' +import { GraphiQL } from 'graphiql' +import 'graphiql/graphiql.css' + +import { ProjectLayoutWithAuth } from 'components/layouts' +import Connecting from 'components/ui/Loading/Loading' +import { useParams, useProjectSettings } from 'hooks' +import { DEFAULT_PROJECT_API_SERVICE_ID } from 'lib/constants' +import { useMemo } from 'react' +import { NextPageWithLayout } from 'types' +import { IconAlertCircle } from 'ui' + +const GraphiQLPage: NextPageWithLayout = () => { + const { ref } = useParams() + + const { + services, + isError: isProjectSettingsError, + isLoading: isProjectSettingsLoading, + } = useProjectSettings(ref) + + const apiService = (services ?? []).find((x: any) => x.app.id == DEFAULT_PROJECT_API_SERVICE_ID) + const apiConfig = apiService?.app_config ?? {} + const apiKeys = apiService?.service_api_keys ?? [] + + const graphqlUrl = `https://${apiConfig.endpoint}/graphql/v1` + const anonKey = apiKeys.find((key: any) => key.tags === 'anon')?.api_key + + const fetcher = useMemo(() => { + return createGraphiQLFetcher({ + url: graphqlUrl, + fetch, + headers: { + apikey: anonKey, + }, + }) + }, [graphqlUrl, anonKey]) + + if (isProjectSettingsLoading) { + return + } + + if (isProjectSettingsError) { + return ( +
+ +

Failed to retrieve API keys

+
+ ) + } + + return +} + +GraphiQLPage.getLayout = (page) => ( + {page} +) + +export default GraphiQLPage diff --git a/studio/pages/project/[ref]/graphql/index.tsx b/studio/pages/project/[ref]/graphql/index.tsx deleted file mode 100644 index 01b89f9585e..00000000000 --- a/studio/pages/project/[ref]/graphql/index.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { createGraphiQLFetcher } from '@graphiql/toolkit' -import { GraphiQL } from 'graphiql' -import { observer } from 'mobx-react-lite' -import 'graphiql/graphiql.css' - -import { ProjectLayoutWithAuth } from 'components/layouts' -import { useStore } from 'hooks' -import { NextPageWithLayout } from 'types' - -const fetcher = createGraphiQLFetcher({ - url: 'https://yrjyofbjvjypdsexuvvu.supabase.red/graphql/v1', - fetch, - headers: { - apikey: - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InlyanlvZmJqdmp5cGRzZXh1dnZ1Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2NjczNTg0OTIsImV4cCI6MTk4MjkzNDQ5Mn0.CMVzrM7R0ym8ukt5miDoNL0ELhsM9fxOx2Qpm0hsLFE', - }, -}) - -const GraphiQLPage: NextPageWithLayout = () => { - const { ui } = useStore() - - const project = ui.selectedProject - console.log('project:', project) - - return -} - -GraphiQLPage.getLayout = (page) => ( - -
{page}
-
-) - -export default observer(GraphiQLPage) diff --git a/studio/public/img/graphql.svg b/studio/public/img/graphql.svg new file mode 100644 index 00000000000..8060db470ea --- /dev/null +++ b/studio/public/img/graphql.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file From 3274074846295f74397370ecc29a281aec6067e3 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Wed, 2 Nov 2022 17:10:02 +1100 Subject: [PATCH 003/230] only show graphiql interface if graphql extension is enabled --- studio/pages/project/[ref]/graphiql/index.tsx | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/studio/pages/project/[ref]/graphiql/index.tsx b/studio/pages/project/[ref]/graphiql/index.tsx index bbf6f911558..b7382665d15 100644 --- a/studio/pages/project/[ref]/graphiql/index.tsx +++ b/studio/pages/project/[ref]/graphiql/index.tsx @@ -1,17 +1,31 @@ +import { observer } from 'mobx-react-lite' import { createGraphiQLFetcher } from '@graphiql/toolkit' import { GraphiQL } from 'graphiql' import 'graphiql/graphiql.css' +import ExtensionCard from 'components/interfaces/Database/Extensions/ExtensionCard' import { ProjectLayoutWithAuth } from 'components/layouts' import Connecting from 'components/ui/Loading/Loading' -import { useParams, useProjectSettings } from 'hooks' +import { useParams, useProjectSettings, useStore } from 'hooks' import { DEFAULT_PROJECT_API_SERVICE_ID } from 'lib/constants' -import { useMemo } from 'react' +import { useEffect, useMemo } from 'react' import { NextPageWithLayout } from 'types' import { IconAlertCircle } from 'ui' const GraphiQLPage: NextPageWithLayout = () => { const { ref } = useParams() + const { ui, meta } = useStore() + + const isExtensionsLoading = meta.extensions.isLoading + const pgGraphqlExtension = meta.extensions.byId('pg_graphql') + + useEffect(() => { + if (ui.selectedProject?.ref) { + // Schemas may be needed when enabling the GraphQL extension + meta.schemas.load() + meta.extensions.load() + } + }, [ui.selectedProject?.ref]) const { services, @@ -36,7 +50,7 @@ const GraphiQLPage: NextPageWithLayout = () => { }) }, [graphqlUrl, anonKey]) - if (isProjectSettingsLoading) { + if (isProjectSettingsLoading || (isExtensionsLoading && !pgGraphqlExtension)) { return } @@ -49,6 +63,24 @@ const GraphiQLPage: NextPageWithLayout = () => { ) } + if (pgGraphqlExtension?.installed_version === null) { + return ( +
+
+
+

Enable the GraphQL Extension

+

+ Toggle the switch below to enable the GraphQL extension. Then you can use the GraphQL + API with your Supabase Database. +

+
+ + +
+
+ ) + } + return } @@ -56,4 +88,4 @@ GraphiQLPage.getLayout = (page) => ( {page} ) -export default GraphiQLPage +export default observer(GraphiQLPage) From 8e069fd002c9cabedcfe4bc448a5d4fbcdc23f93 Mon Sep 17 00:00:00 2001 From: Tilman Vogel Date: Tue, 31 Jan 2023 15:11:37 +0100 Subject: [PATCH 004/230] Add section about testing row-level-security --- .../pages/guides/auth/row-level-security.mdx | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/apps/docs/pages/guides/auth/row-level-security.mdx b/apps/docs/pages/guides/auth/row-level-security.mdx index eca412cd214..a4d5b2a8226 100644 --- a/apps/docs/pages/guides/auth/row-level-security.mdx +++ b/apps/docs/pages/guides/auth/row-level-security.mdx @@ -328,6 +328,64 @@ Tip: Make sure to enable RLS for all your tables, so that your tables are inacce Supabase provides special "Service" keys, which can be used to bypass all RLS. These should never be used in the browser or exposed to customers, but they are useful for administrative tasks. +### Testing policies + +In order to test policies on the database itself, i.e. from the SQL editor or from `psql` without switching to your frontend and logging in as different users, you can utilize the following helper SQL procedures ([credits](https://github.com/supabase/supabase/issues/7311#issuecomment-1398648114)): + +```sql +GRANT anon, authenticated TO postgres; + +CREATE OR REPLACE PROCEDURE auth.login_as_user (user_email text) + LANGUAGE plpgsql + AS $$ +DECLARE + auth_user auth.users; +BEGIN + SELECT + * INTO auth_user + FROM + auth.users + WHERE + email = user_email; + EXECUTE format('SET request.jwt.claim.sub=%L', (auth_user).id::text); + EXECUTE format('SET request.jwt.claim.role=%I', (auth_user).ROLE); + EXECUTE format('SET request.jwt.claim.email=%L', (auth_user).email); + EXECUTE format('SET request.jwt.claims=%L', json_strip_nulls(json_build_object('app_metadata', (auth_user).raw_app_meta_data))::text); + + RAISE NOTICE '%', format( 'SET ROLE %I; -- Logging in as %L (%L)', (auth_user).ROLE, (auth_user).id, (auth_user).email); + EXECUTE format('SET ROLE %I', (auth_user).ROLE); +END; +$$; + +CREATE OR REPLACE PROCEDURE auth.login_as_anon () + LANGUAGE plpgsql + AS $$ +BEGIN + SET request.jwt.claim.sub=''; + SET request.jwt.claim.role=''; + SET request.jwt.claim.email=''; + SET request.jwt.claims=''; + SET ROLE anon; +END; +$$; + +CREATE OR REPLACE PROCEDURE auth.logout () + LANGUAGE plpgsql + AS $$ +BEGIN + SET request.jwt.claim.sub=''; + SET request.jwt.claim.role=''; + SET request.jwt.claim.email=''; + SET request.jwt.claims=''; + SET ROLE postgres; +END; +$$; +``` + +In order to switch to a given user (by email), use `CALL auth.login_as_user('my@email.com');`. You can also switch to the `anon` role using `CALL auth.login_as_anon();`. When you are done, use `CALL auth.logout();` which will return yourself to the powerful `postgres` role. + +These procedures are also very handy for writing [pgTAP](/docs/guides/database/extensions/pgtap) unit-tests for policies. + ## Deprecated features We have deprecate some functions to ensure better performance and extensibilty of RLS policies. From f4e05ec743e55aa33b4799dcd6e8eb8438706682 Mon Sep 17 00:00:00 2001 From: dng Date: Tue, 31 Jan 2023 17:03:50 -0800 Subject: [PATCH 005/230] Apply suggestions from code review --- apps/docs/pages/guides/auth/row-level-security.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/docs/pages/guides/auth/row-level-security.mdx b/apps/docs/pages/guides/auth/row-level-security.mdx index a4d5b2a8226..0700d4fdc0d 100644 --- a/apps/docs/pages/guides/auth/row-level-security.mdx +++ b/apps/docs/pages/guides/auth/row-level-security.mdx @@ -330,7 +330,7 @@ These should never be used in the browser or exposed to customers, but they are ### Testing policies -In order to test policies on the database itself, i.e. from the SQL editor or from `psql` without switching to your frontend and logging in as different users, you can utilize the following helper SQL procedures ([credits](https://github.com/supabase/supabase/issues/7311#issuecomment-1398648114)): +To test policies on the database itself (i.e., from the [SQL Editor](https://app.supabase.com/project/_/sql) or from `psql`) without switching to your frontend and logging in as different users, you can utilize the following helper SQL procedures ([credits](https://github.com/supabase/supabase/issues/7311#issuecomment-1398648114)): ```sql GRANT anon, authenticated TO postgres; @@ -382,9 +382,9 @@ END; $$; ``` -In order to switch to a given user (by email), use `CALL auth.login_as_user('my@email.com');`. You can also switch to the `anon` role using `CALL auth.login_as_anon();`. When you are done, use `CALL auth.logout();` which will return yourself to the powerful `postgres` role. +To switch to a given user (by email), use `CALL auth.login_as_user('my@email.com');`. You can also switch to the `anon` role using `CALL auth.login_as_anon();`. When you are done, use `CALL auth.logout();` to return yourself to the `postgres` role. -These procedures are also very handy for writing [pgTAP](/docs/guides/database/extensions/pgtap) unit-tests for policies. +These procedures can also be used for writing [pgTAP](/docs/guides/database/extensions/pgtap) unit tests for policies. ## Deprecated features From 99a9edf28cdb9d55b6bc2fef0ddea8c1ecc7864c Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Sun, 5 Feb 2023 17:50:56 -0330 Subject: [PATCH 006/230] Mock autodocs into table editor --- studio/components/grid/types/grid.ts | 5 + .../TableGridEditor/GridHeaderActions.tsx | 20 +++- .../TableGridEditor/TableGridEditor.tsx | 103 +++++++++++++++++- 3 files changed, 125 insertions(+), 3 deletions(-) diff --git a/studio/components/grid/types/grid.ts b/studio/components/grid/types/grid.ts index e05352cfdfc..68c3dc73220 100644 --- a/studio/components/grid/types/grid.ts +++ b/studio/components/grid/types/grid.ts @@ -69,6 +69,11 @@ export interface SupabaseGridProps { * error handler */ onError?: (error: any) => void + /** + * Toggle api preview panel open + */ + apiPreviewPanelOpen?: boolean + setApiPreviewPanelOpen?: () => void } export interface SupabaseGridRef { diff --git a/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx b/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx index 198e9a2a964..c21c62febe1 100644 --- a/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx +++ b/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx @@ -1,21 +1,37 @@ import { FC } from 'react' import Link from 'next/link' -import { Button, IconAlertCircle, IconLock } from 'ui' +import { Button, IconAlertCircle, IconCode, IconLock } from 'ui' import type { PostgresPolicy, PostgresTable } from '@supabase/postgres-meta' import { useStore } from 'hooks' interface Props { table: PostgresTable + apiPreviewPanelOpen: boolean + setApiPreviewPanelOpen: (apiPreviewPanelOpen: boolean) => void } -const GridHeaderActions: FC = ({ table }) => { +const GridHeaderActions: FC = ({ table, apiPreviewPanelOpen, setApiPreviewPanelOpen }) => { const { ui, meta } = useStore() const projectRef = ui.selectedProject?.ref const policies = meta.policies.list((policy: PostgresPolicy) => policy.table_id === table.id) + const RenderAPIPreviewToggle = () => { + return ( + + ) + } + return (
+ + + {disabled && ( + + +
+ + You need additional permissions to update network restrictions + +
+
+ )} + +) + +const DisallowAllAccessButton: FC<{ disabled: boolean; onClick: (value: boolean) => void }> = ({ + disabled, + onClick, +}) => ( + + + + + {disabled && ( + + +
+ + You need additional permissions to update network restrictions + +
+
+ )} +
+) + const NetworkRestrictions = ({}) => { const { ref } = useParams() @@ -21,6 +79,8 @@ const NetworkRestrictions = ({}) => { const [selectedRestrictionToRemove, setSelectedRestrictionToRemove] = useState() const { data, isLoading } = useNetworkRestrictionsQuery({ projectRef: ref }) + const canUpdateNetworkRestrictions = checkPermissions(PermissionAction.UPDATE, 'projects') + const hasAccessToRestrictions = data?.entitlement === 'allowed' const restrictedIps = data?.config.dbAllowedCidrs ?? [] const restrictionStatus = data?.status ?? '' @@ -48,7 +108,31 @@ const NetworkRestrictions = ({}) => {
- + + + + + {!canUpdateNetworkRestrictions && ( + + +
+ + You need additional permissions to update network restrictions + +
+
+ )} +
{isLoading ? ( @@ -75,12 +159,14 @@ const NetworkRestrictions = ({}) => {

- - + +
@@ -101,9 +187,10 @@ const NetworkRestrictions = ({}) => {
- +
) : isDisallowedAll ? ( @@ -125,9 +212,10 @@ const NetworkRestrictions = ({}) => {
- +
) : ( @@ -146,12 +234,14 @@ const NetworkRestrictions = ({}) => {

- - + +
{restrictedIps.map((ip) => { diff --git a/studio/components/interfaces/Settings/Database/SSLConfiguration.tsx b/studio/components/interfaces/Settings/Database/SSLConfiguration.tsx index d1709896cf1..989df6e60fe 100644 --- a/studio/components/interfaces/Settings/Database/SSLConfiguration.tsx +++ b/studio/components/interfaces/Settings/Database/SSLConfiguration.tsx @@ -1,8 +1,10 @@ import Link from 'next/link' import { useState, useEffect } from 'react' -import { useParams, useStore } from 'hooks' +import { checkPermissions, useParams, useStore } from 'hooks' import * as Tooltip from '@radix-ui/react-tooltip' import { Button, IconDownload, Toggle, IconExternalLink, IconLoader, Alert } from 'ui' +import { PermissionAction } from '@supabase/shared-types/out/constants' + import { FormHeader, FormPanel, @@ -25,6 +27,8 @@ const SSLConfiguration = () => { }) const { mutateAsync: updateSSLEnforcement } = useSSLEnforcementUpdateMutation() + const canUpdateSSLEnforcement = checkPermissions(PermissionAction.UPDATE, 'projects') + const hasAccessToSSLEnforcement = !sslEnforcementConfiguration?.isNotAllowed const env = process.env.NEXT_PUBLIC_ENVIRONMENT === 'prod' ? 'prod' : 'staging' const hasSSLCertificate = @@ -115,11 +119,30 @@ const SSLConfiguration = () => { {(isLoading || isSubmitting) && ( )} - + + + + + {!canUpdateSSLEnforcement && ( + + +
+ + You need additional permissions to update SSL configurations + +
+
+ )} +
diff --git a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx index ede0524c0a3..cfe5c5ac2e2 100644 --- a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx +++ b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx @@ -1,7 +1,10 @@ import { FC, useEffect } from 'react' +import { useRouter } from 'next/router' import { Badge, Button, IconAlertCircle, IconInfo, Loading } from 'ui' +import * as Tooltip from '@radix-ui/react-tooltip' +import { PermissionAction } from '@supabase/shared-types/out/constants' -import { useStore } from 'hooks' +import { checkPermissions, useStore } from 'hooks' import { formatBytes } from 'lib/helpers' import { PRICING_TIER_PRODUCT_IDS, USAGE_APPROACHING_THRESHOLD } from 'lib/constants' import SparkBar from 'components/ui/SparkBar' @@ -9,8 +12,6 @@ import ShimmeringLoader from 'components/ui/ShimmeringLoader' import InformationBox from 'components/ui/InformationBox' import { USAGE_BASED_PRODUCTS } from 'components/interfaces/Billing/Billing.constants' import { ProjectUsageResponse, useProjectUsageQuery } from 'data/usage/project-usage-query' -import { useRouter } from 'next/router' -import * as Tooltip from '@radix-ui/react-tooltip' interface Props { projectRef?: string @@ -21,6 +22,11 @@ const ProjectUsage: FC = ({ projectRef }) => { const { data: usage, error, isLoading } = useProjectUsageQuery({ projectRef }) const router = useRouter() + const canUpdateSubscription = checkPermissions( + PermissionAction.BILLING_WRITE, + 'stripe.subscriptions' + ) + const subscriptionTier = ui.selectedProject?.subscription_tier const projectHasNoLimits = @@ -128,14 +134,16 @@ const ProjectUsage: FC = ({ projectRef }) => { usageElement = (
Not included in {planName} tier - + {canUpdateSubscription && ( + + )}
) } else if (showUsageExceedMessage) { diff --git a/studio/components/to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx b/studio/components/to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx index 4e05953129a..65662c22665 100644 --- a/studio/components/to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx +++ b/studio/components/to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx @@ -1,12 +1,14 @@ import { useState } from 'react' +import * as Tooltip from '@radix-ui/react-tooltip' import { Button, Form, IconClock, Input, Listbox } from 'ui' -import { useStore } from 'hooks' +import { checkPermissions, useStore } from 'hooks' import { useProjectStorageConfigQuery } from 'data/config/project-storage-config-query' import { useProjectStorageConfigUpdateUpdateMutation } from 'data/config/project-storage-config-update-mutation' import UpgradeToPro from 'components/ui/UpgradeToPro' import { convertFromBytes, convertToBytes } from './StorageSettings.utils' import { StorageSizeUnits, STORAGE_FILE_SIZE_LIMIT_MAX_BYTES } from './StorageSettings.constants' +import { PermissionAction } from '@supabase/shared-types/out/constants' export type StorageSettingsProps = { projectRef: string | undefined @@ -42,6 +44,8 @@ const StorageConfig = ({ config, projectRef }: any) => { const [selectedUnit, setSelectedUnit] = useState(unit) let initialValues = { fileSizeLimit: value, unformattedFileSizeLimit: fileSizeLimit } + const canUpdateStorageSettings = checkPermissions(PermissionAction.UPDATE, 'projects') + const formattedMaxSizeBytes = `${new Intl.NumberFormat('en-US').format( STORAGE_FILE_SIZE_LIMIT_MAX_BYTES )} bytes` @@ -184,13 +188,20 @@ const StorageConfig = ({ config, projectRef }: any) => { icon={} primaryText="Free Plan has a fixed upload file size limit of 50 MB." projectRef={projectRef} - secondaryText="Please upgrade to Pro plan for a configurable upload file size limit of up to 5 GB." + secondaryText="Upgrade to the Pro plan for a configurable upload file size limit of up to 5 GB." /> )}
-
+
+ {!canUpdateStorageSettings ? ( +

+ You need additional permissions to update storage settings +

+ ) : ( +
+ )}
diff --git a/studio/components/to-be-cleaned/forms/SchemaForm.js b/studio/components/to-be-cleaned/forms/SchemaForm.js index bc5e6ac20a0..fa65c7b1560 100644 --- a/studio/components/to-be-cleaned/forms/SchemaForm.js +++ b/studio/components/to-be-cleaned/forms/SchemaForm.js @@ -2,10 +2,19 @@ import { AutoForm } from 'uniforms-bootstrap4' import Ajv from 'ajv' import { JSONSchemaBridge } from 'uniforms-bridge-json-schema' -const SchemaForm = ({ schema, model, children, formRef, onSubmit, onChangeModel = () => {} }) => { +const SchemaForm = ({ + schema, + model, + disabled = false, + children, + formRef, + onSubmit, + onChangeModel = () => {}, +}) => { const validatedSchema = new JSONSchemaBridge(schema, createValidator(schema)) return (
{title || ''}
-
- - -
+ + +
+ )} {message}
{ setHasChanged(true) if (onChangeModel) onChangeModel(model) diff --git a/studio/components/ui/UpgradeToPro.tsx b/studio/components/ui/UpgradeToPro.tsx index ca7b1b549b6..ccee10b1295 100644 --- a/studio/components/ui/UpgradeToPro.tsx +++ b/studio/components/ui/UpgradeToPro.tsx @@ -2,8 +2,11 @@ import { Button } from 'ui' import { observer } from 'mobx-react-lite' import Link from 'next/link' import { FC, ReactNode } from 'react' -import { useStore } from 'hooks' +import * as Tooltip from '@radix-ui/react-tooltip' + +import { checkPermissions, useStore, useFlag, useParams } from 'hooks' import { PRICING_TIER_PRODUCT_IDS } from 'lib/constants' +import { PermissionAction } from '@supabase/shared-types/out/constants' interface Props { icon?: ReactNode @@ -14,8 +17,16 @@ interface Props { const UpgradeToPro: FC = ({ icon, primaryText, projectRef, secondaryText }) => { const { ui } = useStore() + const { ref } = useParams() const tier = ui.selectedProject?.subscription_tier + const canUpdateSubscription = checkPermissions( + PermissionAction.BILLING_WRITE, + 'stripe.subscriptions' + ) + const projectUpdateDisabled = useFlag('disableProjectCreationAndUpdate') + const isEnterprise = tier === PRICING_TIER_PRODUCT_IDS.ENTERPRISE + return (
= ({ icon, primaryText, projectRef, secondaryText

{secondaryText}

- - - - - + + {!canUpdateSubscription || projectUpdateDisabled ? ( + + +
+ + {projectUpdateDisabled ? ( + <> + Subscription changes are currently disabled. +
+ Our engineers are working on a fix. + + ) : !canUpdateSubscription ? ( + 'You need additional permissions to amend subscriptions' + ) : ( + '' + )} +
+
+
+ ) : ( + <> + )} +
diff --git a/studio/pages/project/[ref]/database/backups/pitr.tsx b/studio/pages/project/[ref]/database/backups/pitr.tsx index 5f3eb4aadad..694e62f97c7 100644 --- a/studio/pages/project/[ref]/database/backups/pitr.tsx +++ b/studio/pages/project/[ref]/database/backups/pitr.tsx @@ -65,7 +65,7 @@ const PITR = () => { primaryText="Point in time recovery is a Pro plan add-on." secondaryText={ tier === PRICING_TIER_PRODUCT_IDS.FREE - ? 'Please upgrade to the Pro plan with the PITR add-on selected to enable point in time recovery for your project.' + ? 'Upgrade to the Pro plan with the PITR add-on selected to enable point in time recovery for your project.' : 'Please enable the add-on to enable point in time recovery for your project.' } /> diff --git a/studio/pages/project/[ref]/settings/billing/subscription.tsx b/studio/pages/project/[ref]/settings/billing/subscription.tsx index 750af452736..a47a62ad90d 100644 --- a/studio/pages/project/[ref]/settings/billing/subscription.tsx +++ b/studio/pages/project/[ref]/settings/billing/subscription.tsx @@ -36,7 +36,6 @@ interface SettingsProps { const Settings: FC = ({ project }) => { const { ui } = useStore() - const projectTier = ui.selectedProject?.subscription_tier const { data: subscription, diff --git a/studio/sentry.client.config.js b/studio/sentry.client.config.js index 456f62c88a0..23e597a09cb 100644 --- a/studio/sentry.client.config.js +++ b/studio/sentry.client.config.js @@ -39,6 +39,9 @@ Sentry.init({ // Safe to ignore since it's not a user-facing issue + we've not received any user feedback/report about it // Ref: https://github.com/supabase/supabase/pull/9729 'The provided `href` (/org/[slug]/general) value is missing query values (slug)', + 'The provided `href` (/org/[slug]/team) value is missing query values (slug)', + 'The provided `href` (/org/[slug]/billing) value is missing query values (slug)', + 'The provided `href` (/org/[slug]/invoices) value is missing query values (slug)', ], beforeSend: (event) => filterConsoleErrors(event), }) From e6bc954a9defb8aa2827d656f6e56d2d26c2a71e Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Thu, 9 Feb 2023 09:53:28 -0330 Subject: [PATCH 008/230] Format api sections --- packages/ui/index.tsx | 1 + packages/ui/internals/icons.js | 5 ++- packages/ui/internals/icons.json | 4 ++ .../src/components/Icon/IconImportHandler.tsx | 1 + .../ui/src/components/Icon/icons/index.tsx | 1 + .../interfaces/Docs/ResourceContent.tsx | 40 ++++++++++++------- .../to-be-cleaned/Docs/Pages/Introduction.js | 2 +- studio/components/to-be-cleaned/Docs/Param.js | 35 ---------------- studio/styles/ui.scss | 10 ++++- 9 files changed, 44 insertions(+), 55 deletions(-) delete mode 100644 studio/components/to-be-cleaned/Docs/Param.js diff --git a/packages/ui/index.tsx b/packages/ui/index.tsx index 772f434d345..3edb9ec62c3 100644 --- a/packages/ui/index.tsx +++ b/packages/ui/index.tsx @@ -305,6 +305,7 @@ export * from './src/components/Icon/icons/IconSun' export * from './src/components/Icon/icons/IconSunrise' export * from './src/components/Icon/icons/IconSunset' export * from './src/components/Icon/icons/IconTablet' +export * from './src/components/Icon/icons/IconTable' export * from './src/components/Icon/icons/IconTag' export * from './src/components/Icon/icons/IconTarget' export * from './src/components/Icon/icons/IconTerminal' diff --git a/packages/ui/internals/icons.js b/packages/ui/internals/icons.js index 07a7f0e5539..1cde50bfbd9 100644 --- a/packages/ui/internals/icons.js +++ b/packages/ui/internals/icons.js @@ -234,6 +234,7 @@ export default { IconSunrise: 'src/components/Icon/icons/IconSunrise/index.tsx', IconSunset: 'src/components/Icon/icons/IconSunset/index.tsx', IconTablet: 'src/components/Icon/icons/IconTablet/index.tsx', + IconTable: 'src/components/Icon/icons/IconTable/index.tsx', IconTag: 'src/components/Icon/icons/IconTag/index.tsx', IconTarget: 'src/components/Icon/icons/IconTarget/index.tsx', IconTerminal: 'src/components/Icon/icons/IconTerminal/index.tsx', @@ -284,5 +285,5 @@ export default { IconZapOff: 'src/components/Icon/icons/IconZapOff/index.tsx', IconZap: 'src/components/Icon/icons/IconZap/index.tsx', IconZoomIn: 'src/components/Icon/icons/IconZoomIn/index.tsx', - IconZoomOut: 'src/components/Icon/icons/IconZoomOut/index.tsx' -} \ No newline at end of file + IconZoomOut: 'src/components/Icon/icons/IconZoomOut/index.tsx', +} diff --git a/packages/ui/internals/icons.json b/packages/ui/internals/icons.json index 992be561d20..a348ede4cf5 100644 --- a/packages/ui/internals/icons.json +++ b/packages/ui/internals/icons.json @@ -939,6 +939,10 @@ "name": "Tablet", "path": "react-feather/dist/icons/tablet" }, + "Table": { + "name": "Table", + "path": "react-feather/dist/icons/table" + }, "Tag": { "name": "Tag", "path": "react-feather/dist/icons/tag" diff --git a/packages/ui/src/components/Icon/IconImportHandler.tsx b/packages/ui/src/components/Icon/IconImportHandler.tsx index 0d158b428c6..3863d419700 100644 --- a/packages/ui/src/components/Icon/IconImportHandler.tsx +++ b/packages/ui/src/components/Icon/IconImportHandler.tsx @@ -241,6 +241,7 @@ export const Sun: Icon = require(`react-feather/dist/icons/sun`) export const Sunrise: Icon = require(`react-feather/dist/icons/sunrise`) export const Sunset: Icon = require(`react-feather/dist/icons/sunset`) export const Tablet: Icon = require(`react-feather/dist/icons/tablet`) +export const Table: Icon = require(`react-feather/dist/icons/table`) export const Tag: Icon = require(`react-feather/dist/icons/tag`) export const Target: Icon = require(`react-feather/dist/icons/target`) export const Terminal: Icon = require(`react-feather/dist/icons/terminal`) diff --git a/packages/ui/src/components/Icon/icons/index.tsx b/packages/ui/src/components/Icon/icons/index.tsx index 9fc2134a5a7..5975707ac72 100644 --- a/packages/ui/src/components/Icon/icons/index.tsx +++ b/packages/ui/src/components/Icon/icons/index.tsx @@ -234,6 +234,7 @@ export * as IconSun from './IconSun' export * as IconSunrise from './IconSunrise' export * as IconSunset from './IconSunset' export * as IconTablet from './IconTablet' +export * as IconTable from './IconTable' export * as IconTag from './IconTag' export * as IconTarget from './IconTarget' export * as IconTerminal from './IconTerminal' diff --git a/studio/components/interfaces/Docs/ResourceContent.tsx b/studio/components/interfaces/Docs/ResourceContent.tsx index a37ed884081..784b5018793 100644 --- a/studio/components/interfaces/Docs/ResourceContent.tsx +++ b/studio/components/interfaces/Docs/ResourceContent.tsx @@ -2,6 +2,7 @@ import Snippets from 'components/to-be-cleaned/Docs/Snippets' import CodeSnippet from 'components/to-be-cleaned/Docs/CodeSnippet' import Param from 'components/to-be-cleaned/Docs/Param' import Description from 'components/to-be-cleaned/Docs/Description' +import { IconTable } from 'ui' const ResourceContent = ({ autoApiService, @@ -29,12 +30,18 @@ const ResourceContent = ({ return ( <> -

- {resourceId} +

+ + + + {resourceId}

- @@ -147,8 +157,8 @@ const ResourceContent = ({ insert will also return the replaced values for UPSERT.

- - Learn more. + + Learn more

@@ -183,8 +193,8 @@ const ResourceContent = ({ update will also return the replaced values for UPDATE.

- - Learn more. + + Learn more

@@ -207,8 +217,8 @@ const ResourceContent = ({ default, so remember to specify your filters!

- - Learn more. + + Learn more

@@ -230,8 +240,8 @@ const ResourceContent = ({ users depending on Row Level Security (RLS) policies.

- - Learn more. + + Learn more

diff --git a/studio/components/to-be-cleaned/Docs/Pages/Introduction.js b/studio/components/to-be-cleaned/Docs/Pages/Introduction.js index 30e24301034..ed3e73462c0 100644 --- a/studio/components/to-be-cleaned/Docs/Pages/Introduction.js +++ b/studio/components/to-be-cleaned/Docs/Pages/Introduction.js @@ -5,7 +5,7 @@ export default function Introduction({ autoApiService, selectedLang }) { return ( <>

Introduction

-
+

This API provides an easy way to integrate with your Postgres database. The API diff --git a/studio/components/to-be-cleaned/Docs/Param.js b/studio/components/to-be-cleaned/Docs/Param.js deleted file mode 100644 index 9abb36712f8..00000000000 --- a/studio/components/to-be-cleaned/Docs/Param.js +++ /dev/null @@ -1,35 +0,0 @@ -import { Badge } from 'ui' -import Description from './Description' - -const Param = ({ - name, - type, - format, - required, - description, - metadata = {}, - onDesciptionUpdated = () => {}, -}) => { - return ( - <> -

- {name} - {required ? 'Required' : 'Optional'} -
- {format && format != type && ( -
- - {format} - {type} -
- )} - {description !== false && ( - <> - - - - )} - - ) -} -export default Param diff --git a/studio/styles/ui.scss b/studio/styles/ui.scss index 16a1284fc6b..d4515a3f090 100644 --- a/studio/styles/ui.scss +++ b/studio/styles/ui.scss @@ -224,6 +224,12 @@ @apply border-b flex border-scale-500; } + .doc-section--introduction { + .text { + width: 85%; + } + } + .doc-section article:first-child { @apply prose prose-docs prose-sm max-w-none; } @@ -239,7 +245,7 @@ a { @apply transition; } - + a:hover { @apply text-brand-1000; } @@ -333,4 +339,4 @@ .pitr-listbox { @apply md:gap-x-2; -} \ No newline at end of file +} From 2e90f996570e07c90ccd2c35eefd0b3760544c29 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Thu, 9 Feb 2023 09:53:40 -0330 Subject: [PATCH 009/230] Add table icon --- .../components/Icon/icons/IconTable/IconTable.tsx | 13 +++++++++++++ .../src/components/Icon/icons/IconTable/index.tsx | 1 + 2 files changed, 14 insertions(+) create mode 100644 packages/ui/src/components/Icon/icons/IconTable/IconTable.tsx create mode 100644 packages/ui/src/components/Icon/icons/IconTable/index.tsx diff --git a/packages/ui/src/components/Icon/icons/IconTable/IconTable.tsx b/packages/ui/src/components/Icon/icons/IconTable/IconTable.tsx new file mode 100644 index 00000000000..c0e41b29099 --- /dev/null +++ b/packages/ui/src/components/Icon/icons/IconTable/IconTable.tsx @@ -0,0 +1,13 @@ +// DO NOT EDIT + // this file is generated by /internals/populate-icons script + import * as React from 'react' + // @ts-ignore + import { Table } from 'react-feather' + import IconBase from './../../IconBase' + + function IconTable(props: any) { + return + } + + export default IconTable + \ No newline at end of file diff --git a/packages/ui/src/components/Icon/icons/IconTable/index.tsx b/packages/ui/src/components/Icon/icons/IconTable/index.tsx new file mode 100644 index 00000000000..906c04de230 --- /dev/null +++ b/packages/ui/src/components/Icon/icons/IconTable/index.tsx @@ -0,0 +1 @@ +export { default as IconTable } from './IconTable' \ No newline at end of file From 3aab5590ccf3a6bd9dcf061ff35084ff4a1c1c84 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Thu, 9 Feb 2023 10:04:24 -0330 Subject: [PATCH 010/230] Add param file --- .../components/to-be-cleaned/Docs/Param.tsx | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 studio/components/to-be-cleaned/Docs/Param.tsx diff --git a/studio/components/to-be-cleaned/Docs/Param.tsx b/studio/components/to-be-cleaned/Docs/Param.tsx new file mode 100644 index 00000000000..3ff95984a62 --- /dev/null +++ b/studio/components/to-be-cleaned/Docs/Param.tsx @@ -0,0 +1,98 @@ +import { FC } from 'react' +import { Badge, IconCode, IconDatabase } from 'ui' +import Description from './Description' + +interface Props { + name: string + type: string + format: string + required: string + description: boolean + metadata: any + onDesciptionUpdated: () => void +} + +function getColumnType(type: string, format: string) { + // json and jsonb both have type=undefined, so check format instead + if (type === undefined && (format === 'jsonb' || format === 'json')) return 'json' + + switch (type) { + case 'string': + return 'string' + case 'integer': + return 'number' + case 'json': + return 'json' + case 'number': + return 'number' + case 'boolean': + return 'boolean' + default: + return '' + } +} + +const Param: FC = ({ + name, + type, + format, + required, + description, + metadata = {}, + onDesciptionUpdated = () => {}, +}) => { + return ( + <> +
+
+
+ + +
+ {name} +
+
+
+ + {required ? 'Required' : 'Optional'} +
+ {format && ( +
+
+ +
+ + + + {getColumnType(type, format)} + + +
+
+
+ +
+ + + + {format} + + +
+
+
+ )} + {description !== false && ( +
+ + +
+ )} + + ) +} +export default Param From d150f7def7071717d2f611bf754e5a2c4e598e82 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 10 Feb 2023 02:01:32 +0800 Subject: [PATCH 011/230] mid --- .../grid/components/header/Header.tsx | 147 +++++++++--------- .../grid/components/menu/ColumnMenu.tsx | 1 - .../Auth/EmailTemplates/EmailTemplates.tsx | 17 +- .../Functions/FunctionsList/FunctionsList.tsx | 2 + .../interfaces/Database/Tables/ColumnList.tsx | 103 +++++++++--- .../interfaces/Database/Tables/TableList.tsx | 95 ++++++++++- .../TableGridEditor/GridHeaderActions.tsx | 30 +++- .../TableGridEditor/TableGridEditor.tsx | 6 +- .../layouts/StorageLayout/StorageLayout.tsx | 19 +-- .../layouts/StorageLayout/StorageMenu.tsx | 56 +++++-- .../project/[ref]/storage/buckets/index.tsx | 15 +- 11 files changed, 350 insertions(+), 141 deletions(-) diff --git a/studio/components/grid/components/header/Header.tsx b/studio/components/grid/components/header/Header.tsx index d839ced0cfd..1b7c0d8fbce 100644 --- a/studio/components/grid/components/header/Header.tsx +++ b/studio/components/grid/components/header/Header.tsx @@ -1,17 +1,9 @@ -import { FC, useState, ReactNode } from 'react' -import { - Button, - IconDownload, - IconPlus, - IconX, - IconTrash, - Dropdown, - IconColumns, - IconChevronDown, -} from 'ui' import { saveAs } from 'file-saver' +import { FC, useState, ReactNode } from 'react' +import { Button, IconDownload, IconX, IconTrash, Dropdown, IconChevronDown } from 'ui' +import { PermissionAction } from '@supabase/shared-types/out/constants' -import { useStore } from 'hooks' +import { checkPermissions, useStore } from 'hooks' import FilterDropdown from './filter' import SortPopover from './sort' import RefreshButton from './RefreshButton' @@ -80,6 +72,9 @@ const DefaultHeader: FC = ({ }) => { const canAddNew = onAddRow !== undefined || onAddColumn !== undefined + // [Joshen] Using this logic to block both column and row creation/update/delete + const canCreateColumns = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'columns') + return (
@@ -91,71 +86,73 @@ const DefaultHeader: FC = ({ <>
- -
-
-
+ {canCreateColumns && ( + +
+
+
+
+ } + > +
+

Insert row

+

Insert a new row into {table.name}

- } - > -
-

Insert row

-

Insert a new row into {table.name}

-
- , - ] - : []), - ...(onAddColumn !== undefined - ? [ - -
-
-
+ , + ] + : []), + ...(onAddColumn !== undefined + ? [ + +
+
+
+
+ } + > +
+

Insert column

+

Insert a new column into {table.name}

- } - > -
-

Insert column

-

Insert a new column into {table.name}

-
- , - ] - : []), - ]} - > - - + , + ] + : []), + ]} + > + + + )}
)} diff --git a/studio/components/grid/components/menu/ColumnMenu.tsx b/studio/components/grid/components/menu/ColumnMenu.tsx index d252aa58289..27d5f59b57a 100644 --- a/studio/components/grid/components/menu/ColumnMenu.tsx +++ b/studio/components/grid/components/menu/ColumnMenu.tsx @@ -10,7 +10,6 @@ import { IconLock, IconUnlock, } from 'ui' -import * as React from 'react' import { useDispatch, useTrackedState } from '../../store' type ColumnMenuProps = { diff --git a/studio/components/interfaces/Auth/EmailTemplates/EmailTemplates.tsx b/studio/components/interfaces/Auth/EmailTemplates/EmailTemplates.tsx index a982880a845..85462a7e4be 100644 --- a/studio/components/interfaces/Auth/EmailTemplates/EmailTemplates.tsx +++ b/studio/components/interfaces/Auth/EmailTemplates/EmailTemplates.tsx @@ -8,19 +8,18 @@ import TemplateEditor from './TemplateEditor' const EmailTemplates = observer(() => { return (
-
+ = ({ title="Functions" ctaButtonLabel="Create a new function" onClickCta={() => createFunction()} + disabled={!canCreateFunctions} + disabledMessage="You need additional permissions to create functions" >

diff --git a/studio/components/interfaces/Database/Tables/ColumnList.tsx b/studio/components/interfaces/Database/Tables/ColumnList.tsx index c5b668777fc..e53ed442863 100644 --- a/studio/components/interfaces/Database/Tables/ColumnList.tsx +++ b/studio/components/interfaces/Database/Tables/ColumnList.tsx @@ -1,11 +1,13 @@ import { FC, useState } from 'react' import { observer } from 'mobx-react-lite' +import * as Tooltip from '@radix-ui/react-tooltip' import { Input, Button, IconSearch, IconPlus, IconChevronLeft, IconEdit3, IconTrash } from 'ui' +import type { PostgresTable } from '@supabase/postgres-meta' +import { PermissionAction } from '@supabase/shared-types/out/constants' -import { useStore } from 'hooks' +import { useStore, checkPermissions } from 'hooks' import Table from 'components/to-be-cleaned/Table' import NoSearchResults from 'components/to-be-cleaned/NoSearchResults' -import type { PostgresTable } from '@supabase/postgres-meta' interface Props { selectedTable: PostgresTable @@ -30,6 +32,7 @@ const ColumnList: FC = ({ : selectedTable.columns?.filter((column: any) => column.name.includes(filterString))) ?? [] const isLocked = meta.excludedSchemas.includes(selectedTable.schema ?? '') + const canUpdateColumns = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'columns') return ( <> @@ -58,9 +61,32 @@ const ColumnList: FC = ({

{!isLocked && (
- + + + + + {!canUpdateColumns && ( + + +
+ + You need additional permissions to create columns + +
+
+ )} +
)}
@@ -103,20 +129,59 @@ const ColumnList: FC = ({
-
diff --git a/studio/components/interfaces/Database/Tables/TableList.tsx b/studio/components/interfaces/Database/Tables/TableList.tsx index de856582937..b058f9ce6f4 100644 --- a/studio/components/interfaces/Database/Tables/TableList.tsx +++ b/studio/components/interfaces/Database/Tables/TableList.tsx @@ -12,10 +12,11 @@ import { IconLock, IconCheck, } from 'ui' - import { partition } from 'lodash' +import * as Tooltip from '@radix-ui/react-tooltip' +import { PermissionAction } from '@supabase/shared-types/out/constants' -import { useStore } from 'hooks' +import { useStore, checkPermissions } from 'hooks' import Table from 'components/to-be-cleaned/Table' import NoSearchResults from 'components/to-be-cleaned/NoSearchResults' import type { PostgresTable, PostgresSchema } from '@supabase/postgres-meta' @@ -38,8 +39,8 @@ const TableList: FC = ({ onOpenTable = () => {}, }) => { const { meta } = useStore() - const [filterString, setFilterString] = useState('') + const canUpdateTables = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') const schemas: PostgresSchema[] = meta.schemas.list() const [protectedSchemas, openSchemas] = partition(schemas, (schema) => @@ -120,9 +121,32 @@ const TableList: FC = ({
{!isLocked && (
- + + + + + {!canUpdateTables && ( + + +
+ + You need additional permissions to create tables + +
+
+ )} +
)}
@@ -183,7 +207,62 @@ const TableList: FC = ({ > {x.columns.length} columns -
diff --git a/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx b/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx index 198e9a2a964..2a8a757aaa5 100644 --- a/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx +++ b/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx @@ -1,9 +1,11 @@ import { FC } from 'react' import Link from 'next/link' +import * as Tooltip from '@radix-ui/react-tooltip' import { Button, IconAlertCircle, IconLock } from 'ui' import type { PostgresPolicy, PostgresTable } from '@supabase/postgres-meta' -import { useStore } from 'hooks' +import { useStore, checkPermissions } from 'hooks' +import { PermissionAction } from '@supabase/shared-types/out/constants' interface Props { table: PostgresTable @@ -14,8 +16,34 @@ const GridHeaderActions: FC = ({ table }) => { const projectRef = ui.selectedProject?.ref const policies = meta.policies.list((policy: PostgresPolicy) => policy.table_id === table.id) + const isReadOnly = + !checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') && + !checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'columns') + return (
+ {isReadOnly && ( + + +
+ Viewing as read-only +
+
+ + +
+ + You need additional permissions to manage your project's data + +
+
+
+ )}
- } - style={{ justifyContent: 'start' }} - onClick={openCreateBucketModal} - > - New bucket - + + +
+ } + disabled={!canAccessStorage} + style={{ justifyContent: 'start' }} + onClick={openCreateBucketModal} + > + New bucket + + + {!canAccessStorage && ( + + +
+ + You need additional permissions to create buckets + +
+
+ )} +
diff --git a/studio/pages/project/[ref]/storage/buckets/index.tsx b/studio/pages/project/[ref]/storage/buckets/index.tsx index 80ca79f9f03..396a914ba2a 100644 --- a/studio/pages/project/[ref]/storage/buckets/index.tsx +++ b/studio/pages/project/[ref]/storage/buckets/index.tsx @@ -3,21 +3,21 @@ import { useRouter } from 'next/router' import { observer } from 'mobx-react-lite' import { API_URL } from 'lib/constants' -import { useFlag, useStore } from 'hooks' +import { useFlag, useParams, useStore } from 'hooks' import { post } from 'lib/common/fetch' import { PROJECT_STATUS } from 'lib/constants' import { StorageLayout } from 'components/layouts' import ProductEmptyState from 'components/to-be-cleaned/ProductEmptyState' import { useStorageStore } from 'localStores/storageExplorer/StorageExplorerStore' import { NextPageWithLayout } from 'types' +import { useProjectApiQuery } from 'data/config/project-api-query' +import { find } from 'lodash' /** * PageLayout is used to setup layout - as usual it will requires inject global store */ const PageLayout: NextPageWithLayout = ({}) => { - const router = useRouter() - const { ref } = router.query - + const { ref } = useParams() const { ui } = useStore() const project = ui.selectedProject @@ -26,6 +26,11 @@ const PageLayout: NextPageWithLayout = ({}) => { const kpsEnabled = useFlag('initWithKps') + const { data: settings, isLoading } = useProjectApiQuery({ projectRef: ref }) + const apiService = settings?.autoApiService + const serviceKey = find(apiService?.service_api_keys ?? [], (key) => key.tags === 'service_role') + const canAccessStorage = !isLoading && apiService && serviceKey !== undefined + useEffect(() => { if (project && project.status === PROJECT_STATUS.INACTIVE) { post(`${API_URL}/projects/${ref}/restore`, { kps_enabled: kpsEnabled }) @@ -42,6 +47,8 @@ const PageLayout: NextPageWithLayout = ({}) => { infoButtonLabel="About storage" infoButtonUrl="https://supabase.com/docs/guides/storage" onClickCta={openCreateBucketModal} + disabled={!canAccessStorage} + disabledMessage="You need additional permissions to create buckets" >

Create buckets to store and serve any type of digital content. From 393955b5d00f382f7049f57da1050f0b15dcbaf1 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Thu, 9 Feb 2023 15:24:22 -0330 Subject: [PATCH 012/230] Extract language picker --- .../components/interfaces/Docs/Docs.types.ts | 4 + .../interfaces/Docs/ResourceContent.tsx | 10 +- .../TableGridEditor/TableGridEditor.tsx | 30 ++++- .../to-be-cleaned/Docs/CodeSnippet.js | 1 + .../to-be-cleaned/Docs/LangSelector.tsx | 110 ++++++++++++++++++ .../components/to-be-cleaned/Docs/Param.tsx | 2 +- studio/pages/project/[ref]/api/index.tsx | 15 ++- studio/styles/ui.scss | 4 + 8 files changed, 163 insertions(+), 13 deletions(-) create mode 100644 studio/components/interfaces/Docs/Docs.types.ts create mode 100644 studio/components/to-be-cleaned/Docs/LangSelector.tsx diff --git a/studio/components/interfaces/Docs/Docs.types.ts b/studio/components/interfaces/Docs/Docs.types.ts new file mode 100644 index 00000000000..e6f3e8cb322 --- /dev/null +++ b/studio/components/interfaces/Docs/Docs.types.ts @@ -0,0 +1,4 @@ +export type showApiKey = { + key: string + name: string +} \ No newline at end of file diff --git a/studio/components/interfaces/Docs/ResourceContent.tsx b/studio/components/interfaces/Docs/ResourceContent.tsx index 784b5018793..df8634208be 100644 --- a/studio/components/interfaces/Docs/ResourceContent.tsx +++ b/studio/components/interfaces/Docs/ResourceContent.tsx @@ -30,7 +30,7 @@ const ResourceContent = ({ return ( <> -

+

@@ -54,7 +54,7 @@ const ResourceContent = ({
{properties.map((x) => (
-
+
-
-
+
+
-

+
))}
diff --git a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx index 1512a0446ae..b58d6f3375f 100644 --- a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx @@ -11,13 +11,14 @@ import GridHeaderActions from './GridHeaderActions' import NotFoundState from './NotFoundState' import SidePanelEditor from './SidePanelEditor' import { Dictionary, parseSupaTable, SupabaseGrid, SupabaseGridRef } from 'components/grid' -import { SidePanel } from 'ui' +import { IconBookOpen, SidePanel } from 'ui' import ActionBar from './SidePanelEditor/ActionBar' import { GeneralContent, ResourceContent } from '../Docs' import { useProjectSettingsQuery } from 'data/config/project-settings-query' import { snakeToCamel } from 'lib/helpers' import useSWR from 'swr' import { get } from 'lib/common/fetch' +import LangSelector from 'components/to-be-cleaned/Docs/LangSelector' interface Props { /** Theme for the editor */ @@ -78,9 +79,14 @@ const TableGridEditor: FC = ({ settings?.autoApiService.endpoint ?? '-' }`, } - const [selectedLang, setSelectedLang] = useState('js') + const DEFAULT_KEY = { name: 'hide', key: 'SUPABASE_KEY' } + const [encryptedColumns, setEncryptedColumns] = useState([]) const [apiPreviewPanelOpen, setApiPreviewPanelOpen] = useState(false) + + const [selectedLang, setSelectedLang] = useState('js') + const [showApiKey, setShowApiKey] = useState(DEFAULT_KEY) + const isVaultEnabled = useFlag('vaultExtension') const getEncryptedColumns = async (table: any) => { @@ -263,7 +269,12 @@ const TableGridEditor: FC = ({ size="xlarge" visible={apiPreviewPanelOpen} onCancel={() => console.log('cancel')} - header={Connect to your table} + header={ + + + API + + } customFooter={ = ({ /> } > -
+
+
+ +
+ {jsonSchema?.definitions && ( { + console.log(snippet, 'snippet') if (!snippet[selectedLang]) return null return ( <> diff --git a/studio/components/to-be-cleaned/Docs/LangSelector.tsx b/studio/components/to-be-cleaned/Docs/LangSelector.tsx new file mode 100644 index 00000000000..2386ff91d3d --- /dev/null +++ b/studio/components/to-be-cleaned/Docs/LangSelector.tsx @@ -0,0 +1,110 @@ +import { FC } from 'react' +import { Button, Dropdown, IconKey } from 'ui' +import { checkPermissions } from 'hooks' +import { PermissionAction } from '@supabase/shared-types/out/constants' + +import { showApiKey } from 'components/interfaces/Docs/docs.types' + +const DEFAULT_KEY = { name: 'hide', key: 'SUPABASE_KEY' } + +interface Props { + selectedLang: string + setSelectedLang: (selectedLang: string) => void + showApiKey: showApiKey + setShowApiKey: (showApiKey: showApiKey) => void + apiKey: string | undefined + autoApiService: any +} + +const LangSelector: FC = ({ + selectedLang, + setSelectedLang, + showApiKey, + setShowApiKey, + apiKey, + autoApiService, +}) => { + const canReadServiceKey = checkPermissions( + PermissionAction.READ, + 'service_api_keys.service_role_key' + ) + + return ( +
+
+ + + {selectedLang == 'bash' && ( +
+
+ + Project API key : +
+ + setShowApiKey(DEFAULT_KEY)}> + hide + + {apiKey && ( + + setShowApiKey({ + key: apiKey, + name: 'anon (public)', + }) + } + > + anon (public) + + )} + {canReadServiceKey && ( + + setShowApiKey({ + key: autoApiService.serviceApiKey, + name: 'service_role (secret)', + }) + } + > + service_role (secret) + + )} + + } + > + + +
+ )} +
+
+ ) +} + +export default LangSelector diff --git a/studio/components/to-be-cleaned/Docs/Param.tsx b/studio/components/to-be-cleaned/Docs/Param.tsx index 3ff95984a62..247cfd9d4c9 100644 --- a/studio/components/to-be-cleaned/Docs/Param.tsx +++ b/studio/components/to-be-cleaned/Docs/Param.tsx @@ -51,7 +51,7 @@ const Param: FC = ({
- {name} + {name}
diff --git a/studio/pages/project/[ref]/api/index.tsx b/studio/pages/project/[ref]/api/index.tsx index 4a793b45190..1ad4f4968f6 100644 --- a/studio/pages/project/[ref]/api/index.tsx +++ b/studio/pages/project/[ref]/api/index.tsx @@ -12,6 +12,7 @@ import { DocsLayout } from 'components/layouts' import { GeneralContent, ResourceContent, RpcContent } from 'components/interfaces/Docs' import { PermissionAction } from '@supabase/shared-types/out/constants' import { useProjectSettingsQuery } from 'data/config/project-settings-query' +import LangSelector from 'components/to-be-cleaned/Docs/LangSelector' const PageContext = createContext(null) @@ -128,10 +129,18 @@ const DocView: FC = observer(({}) => { const PAGE_KEY: any = resource || rpc || page || 'index' return ( -
+
-
+ + {/*
)}
-
+
*/}
{resource ? ( diff --git a/studio/styles/ui.scss b/studio/styles/ui.scss index d4515a3f090..2fa8033d916 100644 --- a/studio/styles/ui.scss +++ b/studio/styles/ui.scss @@ -234,6 +234,10 @@ @apply prose prose-docs prose-sm max-w-none; } + &.Docs--table-editor .doc-section__table-name { + @apply mt-12; + } + .text { @apply p-4 px-6 w-1/2; max-width: 50%; From e9dd00e4cee8dfeb6e66a485076dbe172c98c442 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 10 Feb 2023 15:11:40 +0800 Subject: [PATCH 013/230] Add read only locks for storage and vault --- .../Vault/Keys/EncryptionKeysManagement.tsx | 68 +++++++++++++++--- .../Settings/Vault/Secrets/SecretRow.tsx | 69 ++++++++++++++++--- .../Vault/Secrets/SecretsManagement.tsx | 35 ++++++++-- .../layouts/StorageLayout/StorageLayout.tsx | 20 +++--- .../storageExplorer/StorageExplorerStore.js | 1 + 5 files changed, 157 insertions(+), 36 deletions(-) diff --git a/studio/components/interfaces/Settings/Vault/Keys/EncryptionKeysManagement.tsx b/studio/components/interfaces/Settings/Vault/Keys/EncryptionKeysManagement.tsx index 876805da8a1..63cac0d9820 100644 --- a/studio/components/interfaces/Settings/Vault/Keys/EncryptionKeysManagement.tsx +++ b/studio/components/interfaces/Settings/Vault/Keys/EncryptionKeysManagement.tsx @@ -1,6 +1,7 @@ import dayjs from 'dayjs' import Link from 'next/link' import { observer } from 'mobx-react-lite' +import * as Tooltip from '@radix-ui/react-tooltip' import { FC, Fragment, useEffect, useState } from 'react' import { Alert, @@ -11,13 +12,13 @@ import { Modal, Form, IconTrash, - Badge, IconKey, IconLoader, IconX, IconExternalLink, } from 'ui' -import { useParams, useStore } from 'hooks' +import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useParams, useStore, checkPermissions } from 'hooks' import Divider from 'components/ui/Divider' const DEFAULT_KEY_NAME = 'No description provided' @@ -34,6 +35,8 @@ const EncryptionKeysManagement: FC = ({}) => { const [selectedKeyToRemove, setSelectedKeyToRemove] = useState() const [isDeletingKey, setIsDeletingKey] = useState(false) + const canManageKeys = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') + useEffect(() => { if (id !== undefined) setSearchValue(id) }, [id]) @@ -143,9 +146,32 @@ const EncryptionKeysManagement: FC = ({}) => { - + + + + + {!canManageKeys && ( + + +
+ + You need additional permissions to add keys + +
+
+ )} +
@@ -178,12 +204,32 @@ const EncryptionKeysManagement: FC = ({}) => {

Added on {dayjs(key.created).format('MMM D, YYYY')}

-
{idx !== keys.length - 1 && } diff --git a/studio/components/interfaces/Settings/Vault/Secrets/SecretRow.tsx b/studio/components/interfaces/Settings/Vault/Secrets/SecretRow.tsx index 412435028c3..c3c08a02e92 100644 --- a/studio/components/interfaces/Settings/Vault/Secrets/SecretRow.tsx +++ b/studio/components/interfaces/Settings/Vault/Secrets/SecretRow.tsx @@ -1,3 +1,4 @@ +import Link from 'next/link' import dayjs from 'dayjs' import { FC, useState } from 'react' import { @@ -12,9 +13,10 @@ import { IconMoreVertical, IconLoader, } from 'ui' +import * as Tooltip from '@radix-ui/react-tooltip' +import { PermissionAction } from '@supabase/shared-types/out/constants' import { VaultSecret } from 'types' -import { useParams, useStore } from 'hooks' -import Link from 'next/link' +import { useParams, useStore, checkPermissions } from 'hooks' interface Props { secret: VaultSecret @@ -30,6 +32,8 @@ const SecretRow: FC = ({ secret, onSelectEdit, onSelectRemove }) => { const [revealedValue, setRevealedValue] = useState() const name = secret?.name ?? 'No name provided' + const canManageSecrets = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') + const revealSecret = async () => { setIsLoading(true) if (revealedValue === undefined) { @@ -106,15 +110,58 @@ const SecretRow: FC = ({ secret, onSelectEdit, onSelectRemove }) => { className="w-[120px]" overlay={ <> - } onClick={() => onSelectEdit(secret)}> - Edit - - } - onClick={() => onSelectRemove(secret)} - > - Delete - + + + } + disabled={!canManageSecrets} + onClick={() => onSelectEdit(secret)} + > + Edit + + + {!canManageSecrets && ( + + +
+ + You need additional permissions to edit secrets + +
+
+ )} +
+ + + } + onClick={() => onSelectRemove(secret)} + > + Delete + + + {!canManageSecrets && ( + + +
+ + You need additional permissions to delete secrets + +
+
+ )} +
} > diff --git a/studio/components/interfaces/Settings/Vault/Secrets/SecretsManagement.tsx b/studio/components/interfaces/Settings/Vault/Secrets/SecretsManagement.tsx index 468773ef358..05ca9c5d11c 100644 --- a/studio/components/interfaces/Settings/Vault/Secrets/SecretsManagement.tsx +++ b/studio/components/interfaces/Settings/Vault/Secrets/SecretsManagement.tsx @@ -1,9 +1,11 @@ import Link from 'next/link' import { observer } from 'mobx-react-lite' +import * as Tooltip from '@radix-ui/react-tooltip' import { FC, Fragment, useState, useEffect } from 'react' import { IconSearch, Input, Button, Listbox, IconLoader, IconExternalLink, IconX } from 'ui' +import { PermissionAction } from '@supabase/shared-types/out/constants' -import { useStore, useParams } from 'hooks' +import { useStore, useParams, checkPermissions } from 'hooks' import SecretRow from './SecretRow' import EditSecretModal from './EditSecretModal' import DeleteSecretModal from './DeleteSecretModal' @@ -22,6 +24,8 @@ const SecretsManagement: FC = ({}) => { const [selectedSecretToEdit, setSelectedSecretToEdit] = useState() const [selectedSecretToRemove, setSelectedSecretToRemove] = useState() + const canManageSecrets = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') + useEffect(() => { if (search !== undefined) setSearchValue(search) }, [search]) @@ -105,9 +109,32 @@ const SecretsManagement: FC = ({}) => { - + + + + + {!canManageSecrets && ( + + +
+ + You need additional permissions to add secrets + +
+
+ )} +
diff --git a/studio/components/layouts/StorageLayout/StorageLayout.tsx b/studio/components/layouts/StorageLayout/StorageLayout.tsx index 1a12f2e8c24..53432b6461c 100644 --- a/studio/components/layouts/StorageLayout/StorageLayout.tsx +++ b/studio/components/layouts/StorageLayout/StorageLayout.tsx @@ -40,6 +40,7 @@ const StorageLayout: FC = ({ title, children }) => { buckets, } = storageExplorerStore || {} + // [Joshen] At the moment, without the service key, we won't be able to pull any data from storage const { data: settings, isLoading } = useProjectApiQuery({ projectRef }) const apiService = settings?.autoApiService const serviceKey = find(apiService?.service_api_keys ?? [], (key) => key.tags === 'service_role') @@ -99,16 +100,15 @@ const StorageLayout: FC = ({ title, children }) => { } } - // [Joshen TODO] Revisit this - // if (!isLoading && !canAccessStorage) { - // return ( - // - //
- // - //
- //
- // ) - // } + if (!isLoading && !canAccessStorage) { + return ( + +
+ +
+
+ ) + } return ( }> diff --git a/studio/localStores/storageExplorer/StorageExplorerStore.js b/studio/localStores/storageExplorer/StorageExplorerStore.js index 77d26ceda79..6fee62250c0 100644 --- a/studio/localStores/storageExplorer/StorageExplorerStore.js +++ b/studio/localStores/storageExplorer/StorageExplorerStore.js @@ -44,6 +44,7 @@ const EMPTY_FOLDER_PLACEHOLDER_FILE_NAME = '.emptyFolderPlaceholder' const STORAGE_PROGRESS_INFO_TEXT = "Please do not close the browser until it's completed" class StorageExplorerStore { + isReadOnly = false projectRef = '' loaded = false view = STORAGE_VIEWS.COLUMNS From d2e28ca1667b568893249c5d439c468c422d5444 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 10 Feb 2023 16:12:06 +0800 Subject: [PATCH 014/230] Add read only locks for wrappers --- .../Database/Wrappers/CreateWrapper.tsx | 3 +- .../Database/Wrappers/EditWrapper.tsx | 9 ++- .../Database/Wrappers/WrapperRow.tsx | 78 +++++++++++++++---- .../interfaces/Database/Wrappers/Wrappers.tsx | 2 +- .../Database/Wrappers/WrappersDropdown.tsx | 30 ++++++- .../project/[ref]/database/wrappers/[id].tsx | 1 + .../project/[ref]/database/wrappers/index.tsx | 2 +- .../project/[ref]/database/wrappers/new.tsx | 6 +- 8 files changed, 107 insertions(+), 24 deletions(-) diff --git a/studio/components/interfaces/Database/Wrappers/CreateWrapper.tsx b/studio/components/interfaces/Database/Wrappers/CreateWrapper.tsx index dbe8fe10c83..242345a01f7 100644 --- a/studio/components/interfaces/Database/Wrappers/CreateWrapper.tsx +++ b/studio/components/interfaces/Database/Wrappers/CreateWrapper.tsx @@ -36,7 +36,7 @@ const CreateWrapper = () => { const [selectedTableToEdit, setSelectedTableToEdit] = useState() const [formErrors, setFormErrors] = useState<{ [k: string]: string }>({}) - const canCreateWrapper = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'extensions') + const canCreateWrapper = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'wrappers') const wrapperMeta = WRAPPERS.find((wrapper) => wrapper.name === type) const initialValues = @@ -164,6 +164,7 @@ const CreateWrapper = () => { isSubmitting={isSubmitting} hasChanges={hasChanges} handleReset={handleReset} + disabled={!canCreateWrapper} helper={ !canCreateWrapper ? 'You need additional permissions to create a foreign data wrapper' diff --git a/studio/components/interfaces/Database/Wrappers/EditWrapper.tsx b/studio/components/interfaces/Database/Wrappers/EditWrapper.tsx index 2286ec04c7f..fdcec1aa4b8 100644 --- a/studio/components/interfaces/Database/Wrappers/EditWrapper.tsx +++ b/studio/components/interfaces/Database/Wrappers/EditWrapper.tsx @@ -65,7 +65,7 @@ const EditWrapper = () => { const [selectedTableToEdit, setSelectedTableToEdit] = useState() const [formErrors, setFormErrors] = useState<{ [k: string]: string }>({}) - const canCreateWrapper = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'extensions') + const canUpdateWrapper = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'wrappers') const initialValues = wrapperMeta !== undefined @@ -248,7 +248,7 @@ const EditWrapper = () => { return ( { handleReset() setWrapperTables(initialTables) }} + disabled={!canUpdateWrapper} helper={ - !canCreateWrapper - ? 'You need additional permissions to create a foreign data wrapper' + !canUpdateWrapper + ? 'You need additional permissions to edit a foreign data wrapper' : undefined } /> diff --git a/studio/components/interfaces/Database/Wrappers/WrapperRow.tsx b/studio/components/interfaces/Database/Wrappers/WrapperRow.tsx index 35b7efbed34..896cd11d45e 100644 --- a/studio/components/interfaces/Database/Wrappers/WrapperRow.tsx +++ b/studio/components/interfaces/Database/Wrappers/WrapperRow.tsx @@ -1,10 +1,12 @@ import Link from 'next/link' import Image from 'next/image' import { FC } from 'react' -import { Collapsible, IconChevronUp, Button, IconExternalLink, IconTrash, IconEdit } from 'ui' import { partition } from 'lodash' +import * as Tooltip from '@radix-ui/react-tooltip' +import { PermissionAction } from '@supabase/shared-types/out/constants' +import { Collapsible, IconChevronUp, Button, IconExternalLink, IconTrash, IconEdit } from 'ui' -import { useParams, useStore } from 'hooks' +import { useParams, useStore, checkPermissions } from 'hooks' import { WrapperMeta } from './Wrappers.types' import { FDW } from 'data/fdw/fdws-query' import { useFDWDeleteMutation } from 'data/fdw/fdw-delete-mutation' @@ -24,6 +26,8 @@ const WrapperRow: FC = ({ wrappers = [], wrapperMeta, isOpen, onOpen }) = const { project } = useProjectContext() const { mutateAsync: deleteFDW } = useFDWDeleteMutation() + const canManageWrappers = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'wrappers') + const onDeleteWrapper = (wrapper: any) => { confirmAlert({ title: `Confirm to disable ${wrapper.name}`, @@ -156,21 +160,69 @@ const WrapperRow: FC = ({ wrappers = [], wrapperMeta, isOpen, onOpen }) =
- - + {canManageWrappers ? ( + + +
) diff --git a/studio/components/interfaces/Database/Wrappers/Wrappers.tsx b/studio/components/interfaces/Database/Wrappers/Wrappers.tsx index d05146b786d..ad5e35a095f 100644 --- a/studio/components/interfaces/Database/Wrappers/Wrappers.tsx +++ b/studio/components/interfaces/Database/Wrappers/Wrappers.tsx @@ -1,4 +1,5 @@ import Link from 'next/link' +import { groupBy } from 'lodash' import { useState } from 'react' import { Button, IconExternalLink } from 'ui' import { observer } from 'mobx-react-lite' @@ -11,7 +12,6 @@ import ShimmeringLoader from 'components/ui/ShimmeringLoader' import WrappersDropdown from './WrappersDropdown' import WrappersDisabledState from './WrappersDisabledState' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' -import { groupBy } from 'lodash' const Wrappers = () => { const { meta } = useStore() diff --git a/studio/components/interfaces/Database/Wrappers/WrappersDropdown.tsx b/studio/components/interfaces/Database/Wrappers/WrappersDropdown.tsx index b74c9a9fffb..affb01fb608 100644 --- a/studio/components/interfaces/Database/Wrappers/WrappersDropdown.tsx +++ b/studio/components/interfaces/Database/Wrappers/WrappersDropdown.tsx @@ -3,8 +3,10 @@ import Image from 'next/image' import { FC, Fragment } from 'react' import { observer } from 'mobx-react-lite' import { Button, Dropdown, IconPlus } from 'ui' +import * as Tooltip from '@radix-ui/react-tooltip' +import { PermissionAction } from '@supabase/shared-types/out/constants' -import { useParams } from 'hooks' +import { useParams, checkPermissions } from 'hooks' import { WRAPPERS } from './Wrappers.constants' interface Props { @@ -14,6 +16,32 @@ interface Props { const WrapperDropdown: FC = ({ buttonText = 'Add wrapper', align = 'end' }) => { const { ref } = useParams() + const canManageWrappers = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') + + if (!canManageWrappers) { + return ( + + + + + + +
+ + You need additional permissions to add wrappers + +
+
+
+ ) + } return ( { const canReadWrappers = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_READ, 'wrappers') + if (!canReadWrappers) { return } diff --git a/studio/pages/project/[ref]/database/wrappers/index.tsx b/studio/pages/project/[ref]/database/wrappers/index.tsx index ead5fba1e25..d8df5feae34 100644 --- a/studio/pages/project/[ref]/database/wrappers/index.tsx +++ b/studio/pages/project/[ref]/database/wrappers/index.tsx @@ -9,7 +9,7 @@ import NoPermission from 'components/ui/NoPermission' import { FormsContainer } from 'components/ui/Forms' const DatabaseWrappers: NextPageWithLayout = () => { - const canReadWrappers = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_READ, 'wrappers') + const canReadWrappers = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_READ, 'tables') if (!canReadWrappers) { return } diff --git a/studio/pages/project/[ref]/database/wrappers/new.tsx b/studio/pages/project/[ref]/database/wrappers/new.tsx index 4db0245131f..225b4051123 100644 --- a/studio/pages/project/[ref]/database/wrappers/new.tsx +++ b/studio/pages/project/[ref]/database/wrappers/new.tsx @@ -8,9 +8,9 @@ import NoPermission from 'components/ui/NoPermission' import { CreateWrapper } from 'components/interfaces/Database' const DatabaseWrappersNew: NextPageWithLayout = () => { - const canReadWrappers = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_READ, 'wrappers') - if (!canReadWrappers) { - return + const canCreateWrappers = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') + if (!canCreateWrappers) { + return } return From 1469cb111e7a8fdd1468d88d02a5d16a8206d499 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 10 Feb 2023 16:16:49 +0800 Subject: [PATCH 015/230] read only lock storage settings --- .../to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx b/studio/components/to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx index 65662c22665..a604849edf0 100644 --- a/studio/components/to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx +++ b/studio/components/to-be-cleaned/Storage/StorageSettings/StorageSettings.tsx @@ -142,7 +142,7 @@ const StorageConfig = ({ config, projectRef }: any) => { id="fileSizeLimit" name="fileSizeLimit" type="number" - disabled={isFreeTier} + disabled={isFreeTier || !canUpdateStorageSettings} step={1} onKeyPress={(event) => { if (event.charCode < 48 || event.charCode > 57) { From f5dade6b67dc35adcdb331df153c256de2f9d3d7 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 10 Feb 2023 17:21:55 +0800 Subject: [PATCH 016/230] read only lock pitr --- .../Database/Backups/PITR/PITRNotice.tsx | 38 +++++++++++++++---- .../Database/Backups/PITR/PITRStatus.tsx | 32 +++++++++++++++- 2 files changed, 61 insertions(+), 9 deletions(-) diff --git a/studio/components/interfaces/Database/Backups/PITR/PITRNotice.tsx b/studio/components/interfaces/Database/Backups/PITR/PITRNotice.tsx index cd43b19d452..daab4106406 100644 --- a/studio/components/interfaces/Database/Backups/PITR/PITRNotice.tsx +++ b/studio/components/interfaces/Database/Backups/PITR/PITRNotice.tsx @@ -1,15 +1,22 @@ import Link from 'next/link' import { Button, IconCalendar } from 'ui' import { FormPanel } from 'components/ui/Forms' -import { useParams } from 'hooks' +import * as Tooltip from '@radix-ui/react-tooltip' +import { checkPermissions, useParams } from 'hooks' import { useProjectSubscriptionQuery } from 'data/subscriptions/project-subscription-query' import { getPITRRetentionDuration } from './PITR.utils' +import { PermissionAction } from '@supabase/shared-types/out/constants' const PITRNotice = ({}) => { const { ref: projectRef } = useParams() const { data: subscription } = useProjectSubscriptionQuery({ projectRef }) const retentionPeriod = getPITRRetentionDuration(subscription?.addons ?? []) + const canUpdateSubscription = checkPermissions( + PermissionAction.BILLING_WRITE, + 'stripe.subscriptions' + ) + return ( { You can also increase your recovery retention period updating your PITR add-on - - - - - + + {!canUpdateSubscription && ( + + +
+ + You need additional permissions to amend subscriptions + +
+
+ )} + } > diff --git a/studio/components/interfaces/Database/Backups/PITR/PITRStatus.tsx b/studio/components/interfaces/Database/Backups/PITR/PITRStatus.tsx index 4b47575c1d4..b634e1365c7 100644 --- a/studio/components/interfaces/Database/Backups/PITR/PITRStatus.tsx +++ b/studio/components/interfaces/Database/Backups/PITR/PITRStatus.tsx @@ -2,11 +2,13 @@ import dayjs from 'dayjs' import { FC } from 'react' import { observer } from 'mobx-react-lite' import { Button, IconAlertCircle } from 'ui' +import * as Tooltip from '@radix-ui/react-tooltip' -import { useStore } from 'hooks' +import { checkPermissions, useStore } from 'hooks' import { Timezone } from './PITR.types' import { FormPanel } from 'components/ui/Forms' import TimezoneSelection from './TimezoneSelection' +import { PermissionAction } from '@supabase/shared-types/out/constants' interface Props { selectedTimezone: Timezone @@ -29,6 +31,11 @@ const PITRStatus: FC = ({ selectedTimezone, onUpdateTimezone, onSetConfig .tz(selectedTimezone?.utc[0]) .format('DD MMM YYYY, HH:mm:ss') + const canTriggerPhysicalBackup = checkPermissions( + PermissionAction.INFRA_EXECUTE, + 'queue_job.walg.prepare_restore' + ) + return ( <> = ({ selectedTimezone, onUpdateTimezone, onSetConfig You'll be able to pick the right date and time when you begin - + + + + + {!canTriggerPhysicalBackup && ( + + +
+ + You need additional permissions to trigger a PITR recovery + +
+
+ )} +
} > From fae9a272759051079f8270921757fe66ba6a0aea Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Fri, 10 Feb 2023 16:42:25 -0330 Subject: [PATCH 017/230] Update --- .../ui/src/components/SidePanel/SidePanel.tsx | 2 +- packages/ui/src/lib/theme/defaultTheme.ts | 327 +++++++++--------- .../TableGridEditor/TableGridEditor.tsx | 8 +- .../to-be-cleaned/Docs/CodeSnippet.js | 5 +- .../to-be-cleaned/Docs/LangSelector.tsx | 2 +- .../components/to-be-cleaned/Docs/Param.tsx | 10 +- studio/styles/ui.scss | 5 +- 7 files changed, 181 insertions(+), 178 deletions(-) diff --git a/packages/ui/src/components/SidePanel/SidePanel.tsx b/packages/ui/src/components/SidePanel/SidePanel.tsx index e105fe85d91..ba0ed494a53 100644 --- a/packages/ui/src/components/SidePanel/SidePanel.tsx +++ b/packages/ui/src/components/SidePanel/SidePanel.tsx @@ -22,7 +22,7 @@ interface CustomProps { children?: React.ReactNode header?: string | React.ReactNode visible: boolean - size?: 'medium' | 'large' | 'xlarge' + size?: 'medium' | 'large' | 'xlarge' | 'xxlarge' loading?: boolean align?: 'right' | 'left' hideFooter?: boolean diff --git a/packages/ui/src/lib/theme/defaultTheme.ts b/packages/ui/src/lib/theme/defaultTheme.ts index 1265d536a10..35de4089bd7 100644 --- a/packages/ui/src/lib/theme/defaultTheme.ts +++ b/packages/ui/src/lib/theme/defaultTheme.ts @@ -117,9 +117,9 @@ export default { flex flex-row gap-3 items-center - w-full - text-left - cursor-pointer + w-full + text-left + cursor-pointer outline-none focus-visible:ring-1 @@ -143,27 +143,27 @@ export default { group border border-scale-700 - + first:rounded-tl-md first:rounded-tr-md last:rounded-bl-md last:rounded-br-md `, trigger: ` flex flex-row items-center - px-6 py-4 - w-full - text-left - cursor-pointer - - font-medium - text-base - bg-transparent + px-6 py-4 + w-full + text-left + cursor-pointer + + font-medium + text-base + bg-transparent outline-none focus-visible:ring-1 focus-visible:z-50 ring-scale-1100 - + transition-colors hover:bg-scale-200 @@ -252,8 +252,8 @@ export default { alert: { base: ` - relative rounded border py-4 px-6 - flex space-x-4 items-start + relative rounded border py-4 px-6 + flex space-x-4 items-start `, header: 'block text-sm font-normal mb-1', description: `text-xs`, @@ -290,11 +290,11 @@ export default { }, }, close: ` - absolute - right-6 top-4 - p-0 m-0 + absolute + right-6 top-4 + p-0 m-0 text-scale-900 - cursor-pointer transition ease-in-out + cursor-pointer transition ease-in-out bg-transparent border-transparent focus:outline-none opacity-50 hover:opacity-100`, }, @@ -306,15 +306,15 @@ export default { card: { base: ` bg-white dark:bg-scaleDark-700 - - border - ${defaults.border.primary} - flex flex-col + border + ${defaults.border.primary} + + flex flex-col rounded-md shadow-lg overflow-hidden relative `, hoverable: 'transition hover:-translate-y-1 hover:shadow-2xl', - head: `px-8 py-6 flex justify-between + head: `px-8 py-6 flex justify-between border-b ${defaults.border.primary} `, content: 'p-8', @@ -328,20 +328,20 @@ export default { base: `w-full justify-between space-y-4`, underlined: { list: ` - flex items-center border-b + flex items-center border-b ${defaults.border.secondary} `, - base: ` - relative - cursor-pointer - text-scale-900 - flex - items-center + base: ` + relative + cursor-pointer + text-scale-900 + flex + items-center space-x-2 - text-center + text-center transition - focus:outline-none - focus-visible:ring + focus:outline-none + focus-visible:ring focus-visible:ring-scale-700 focus-visible:border-scale-900 `, @@ -355,18 +355,18 @@ export default { }, pills: { list: 'flex space-x-1', - base: ` - relative - cursor-pointer - flex - items-center + base: ` + relative + cursor-pointer + flex + items-center space-x-2 - text-center + text-center transition shadow-sm rounded - focus:outline-none - focus-visible:ring + focus:outline-none + focus-visible:ring focus-visible:ring-scale-700 focus-visible:border-scale-900 `, @@ -378,23 +378,23 @@ export default { active: ` bg-scale-1200 text-scale-200 - border-scale-1200 + border-scale-1200 `, }, 'rounded-pills': { list: 'flex flex-wrap gap-2', - base: ` - relative - cursor-pointer - flex - items-center + base: ` + relative + cursor-pointer + flex + items-center space-x-2 - text-center + text-center transition shadow-sm rounded-full - focus:outline-none - focus-visible:ring + focus:outline-none + focus-visible:ring focus-visible:ring-scale-700 focus-visible:border-scale-900 `, @@ -406,7 +406,7 @@ export default { active: ` bg-scale-1200 text-scale-200 - border-scale-1200 + border-scale-1200 `, }, block: 'w-full flex items-center justify-center', @@ -427,15 +427,15 @@ export default { button: { base: ` - relative - cursor-pointer - inline-flex items-center space-x-2 - text-center + relative + cursor-pointer + inline-flex items-center space-x-2 + text-center font-regular - transition ease-out duration-200 - rounded + transition ease-out duration-200 + rounded ${defaults['focus-visible']} - + `, label: `truncate`, container: 'inline-flex font-medium', @@ -449,7 +449,7 @@ export default { secondary: ` bg-scale-1200 text-scale-100 hover:text-scale-800 - focus-visible:text-scale-600 + focus-visible:text-scale-600 bordershadow-scale-1100 hover:bordershadow-scale-900 @@ -462,7 +462,7 @@ export default { dark:bordershadow-scale-700 hover:dark:bordershadow-scale-800 dark:bg-scale-500 dark:hover:bg-scale-600 focus-visible:outline-brand-600 - + `, alternative: ` text-brand-1100 @@ -473,14 +473,14 @@ export default { focus-visible:outline-brand-600 `, outline: ` - text-scale-1200 - bg-transparent + text-scale-1200 + bg-transparent bordershadow-scale-600 hover:bordershadow-scale-700 dark:bordershadow-scale-800 hover:dark:bordershadow-scale-900 focus-visible:outline-scale-700 `, dashed: ` - text-scale-1200 + text-scale-1200 border border-dashed border-scale-700 hover:border-scale-900 @@ -498,7 +498,7 @@ export default { focus-visible:outline-scale-700 `, text: ` - text-scale-1200 + text-scale-1200 hover:bg-scale-500 shadow-none focus-visible:outline-scale-700 @@ -538,13 +538,13 @@ export default { input: { base: ` - block - box-border - w-full - rounded-md - shadow-sm + block + box-border + w-full + rounded-md + shadow-sm transition-all - text-scale-1200 + text-scale-1200 border focus:shadow-md ${defaults.focus} @@ -559,7 +559,7 @@ export default { `, error: ` bg-red-100 - border border-red-700 + border border-red-700 focus:ring-red-500 placeholder:text-red-600 `, @@ -581,13 +581,13 @@ export default { select: { base: ` - block - box-border - w-full - rounded-md - shadow-sm + block + box-border + w-full + rounded-md + shadow-sm transition-all - text-scale-1200 + text-scale-1200 border focus:shadow-md ${defaults.focus} @@ -605,7 +605,7 @@ export default { `, error: ` bg-red-100 - border border-red-700 + border border-red-700 focus:ring-red-500 placeholder:text-red-600 `, @@ -628,12 +628,12 @@ export default { inputNumber: { base: ` block - box-border - w-full - rounded-md - shadow-sm + box-border + w-full + rounded-md + shadow-sm transition-all - text-scale-1200 + text-scale-1200 border focus:shadow-md ${defaults.focus} @@ -651,7 +651,7 @@ export default { `, error: ` bg-red-100 - border border-red-700 + border border-red-700 focus:ring-red-500 placeholder:text-red-600 `, @@ -668,9 +668,9 @@ export default { /* * Checkbox * - * + * * This Checkbox requires a plugin in your config: - + ``` // tailwind.config.js module.exports = { @@ -681,17 +681,17 @@ export default { ], } ``` - * - * + * + * */ checkbox: { base: ` - bg-transparent + bg-transparent ${defaults.focus} focus:ring-scale-400 - text-brand-900 - border-scale-700 + text-brand-900 + border-scale-700 shadow-sm rounded cursor-pointer @@ -727,9 +727,9 @@ export default { /* * Radio * - * + * * This Radio requires a plugin in your config: - + ``` // tailwind.config.js module.exports = { @@ -740,8 +740,8 @@ export default { ], } ``` - * - * + * + * */ radio: { @@ -750,7 +750,7 @@ export default { ${defaults.focus} focus:ring-brand-400 border-scale-700 - + text-brand-900 shadow-sm cursor-pointer @@ -797,7 +797,7 @@ export default { `, active: ` bg-scale-300 dark:bg-scale-600 z-10 - border-scale-900 dark:border-scale-900 + border-scale-900 dark:border-scale-900 border-1 `, radio_offset: 'left-4', @@ -816,7 +816,7 @@ export default { transition rounded-md border - shadow-sm + shadow-sm `, size: { tiny: `px-5 py-3`, @@ -833,7 +833,7 @@ export default { `, active: ` bg-scale-300 dark:bg-scale-600 z-10 - border-scale-900 dark:border-scale-900 + border-scale-900 dark:border-scale-900 border-1 `, radio_offset: 'left-4', @@ -849,9 +849,9 @@ export default { }, group: `flex flex-row gap-3`, base: ` - transition + transition border - rounded-lg + rounded-lg grow items-center flex-wrap @@ -888,10 +888,10 @@ export default { }, group: `flex flex-row gap-3`, base: ` - transition - border border-scale-700 hover:border-scale-900 + transition + border border-scale-700 hover:border-scale-900 shadow-sm - rounded-lg + rounded-lg grow `, size: { @@ -909,7 +909,7 @@ export default { `, active: ` bg-scale-300 dark:bg-scale-600 z-10 - border-scale-900 dark:border-scale-900 + border-scale-900 dark:border-scale-900 border-1 `, radio_offset: 'left-4', @@ -969,21 +969,21 @@ export default { sidepanel: { base: ` bg-scale-100 dark:bg-scale-300 - flex flex-col - fixed - inset-y-0 - max-w-full + flex flex-col + fixed + inset-y-0 + max-w-full h-screen border-l border-overlay-border shadow-xl `, header: ` - space-y-1 py-4 px-4 bg-overlay-bg sm:px-6 + space-y-1 py-4 px-4 bg-overlay-bg sm:px-6 border-b border-overlay-border `, contents: ` - relative - flex-1 + relative + flex-1 overflow-y-auto `, content: ` @@ -998,16 +998,17 @@ export default { medium: `w-screen max-w-md h-full`, large: `w-screen max-w-2xl h-full`, xlarge: `w-screen max-w-3xl h-full`, + xxlarge: `w-screen max-w-4xl h-full`, }, align: { left: ` left-0 - data-open:animate-panel-slide-left-out + data-open:animate-panel-slide-left-out data-closed:animate-panel-slide-left-in `, right: ` right-0 - data-open:animate-panel-slide-right-out + data-open:animate-panel-slide-right-out data-closed:animate-panel-slide-right-in `, }, @@ -1023,9 +1024,9 @@ export default { dark:bg-scale-100 h-full w-full left-0 - top-0 + top-0 opacity-75 - data-closed:animate-fade-out-overlay-bg + data-closed:animate-fade-out-overlay-bg data-open:animate-fade-in-overlay-bg `, // this is to reset the button @@ -1041,10 +1042,10 @@ export default { toggle: { base: ` - p-0 relative - inline-flex flex-shrink-0 - border-2 border-transparent - rounded-full + p-0 relative + inline-flex flex-shrink-0 + border-2 border-transparent + rounded-full cursor-pointer transition-colors ease-in-out duration-200 ${defaults.focus} @@ -1054,8 +1055,8 @@ export default { hover:bg-scale-700 `, active: ` - bg-brand-900 - hover:bg-brand-900 + bg-brand-900 + hover:bg-brand-900 `, handle_container: { tiny: 'h-4 w-7', @@ -1066,12 +1067,12 @@ export default { }, handle: { base: ` - inline-block h-5 w-5 - rounded-full + inline-block h-5 w-5 + rounded-full bg-scale-100 dark:bg-scale-900 - shadow ring-0 - transition + shadow ring-0 + transition ease-in-out duration-200 `, tiny: 'h-3 w-3', @@ -1159,7 +1160,7 @@ export default { }, error: { base: ` - text-red-900 + text-red-900 transition-all data-show:mt-2 data-show:animate-slide-down-normal @@ -1187,7 +1188,7 @@ export default { trigger: ` flex - border-none + border-none rounded bg-transparent p-0 outline-none @@ -1279,8 +1280,8 @@ export default { popover: { trigger: ` flex - border-none - + border-none + rounded bg-transparent p-0 @@ -1300,7 +1301,7 @@ export default { data-closed:animate-dropdown-content-hide min-w-fit - origin-popover + origin-popover data-open:animate-dropdown-content-show data-closed:animate-dropdown-content-hide `, @@ -1344,7 +1345,7 @@ export default { cursor-pointer flex space-x-3 items-center outline-none - focus-visible:ring-1 ring-scale-1200 focus-visible:z-10 + focus-visible:ring-1 ring-scale-1200 focus-visible:z-10 group `, content: { @@ -1415,7 +1416,7 @@ export default { }, group: { base: ` - flex space-x-3 + flex space-x-3 mb-2 font-normal `, @@ -1438,20 +1439,20 @@ export default { bg-scale-100 dark:bg-scale-300 my-4 border border-scale-300 dark:border-scale-500 - rounded-md - shadow-xl - data-open:animate-overlay-show - data-closed:animate-overlay-hide - + rounded-md + shadow-xl + data-open:animate-overlay-show + data-closed:animate-overlay-hide + `, header: ` bg-scale-200 dark:bg-scale-400 - space-y-1 py-3 px-4 sm:px-5 + space-y-1 py-3 px-4 sm:px-5 border-b border-scale-300 dark:border-scale-500 `, footer: ` flex justify-end gap-2 - py-3 px-5 + py-3 px-5 border-t border-scale-300 dark:border-scale-500 `, size: { @@ -1469,9 +1470,9 @@ export default { dark:bg-scale-100 h-full w-full left-0 - top-0 + top-0 opacity-75 - data-closed:animate-fade-out-overlay-bg + data-closed:animate-fade-out-overlay-bg data-open:animate-fade-in-overlay-bg `, scroll_overlay: ` @@ -1480,7 +1481,7 @@ export default { grid place-items-center overflow-y-auto - data-open:animate-overlay-show data-closed:animate-overlay-hide + data-open:animate-overlay-show data-closed:animate-overlay-hide `, separator: ` w-full @@ -1495,12 +1496,12 @@ export default { listbox: { base: ` - block - box-border - w-full - rounded-md - shadow-sm - text-scale-1200 + block + box-border + w-full + rounded-md + shadow-sm + text-scale-1200 border focus:shadow-md ${defaults.focus} @@ -1524,24 +1525,24 @@ export default { `, error: ` bg-red-100 - border border-red-700 + border border-red-700 focus:ring-red-500 placeholder:text-red-600 `, }, options_container_animate: ` transition - data-open:animate-slide-down + data-open:animate-slide-down data-open:opacity-1 data-closed:animate-slide-up data-closed:opacity-0 `, options_container: ` - bg-scale-100 dark:bg-scale-300 - shadow-lg - border border-solid - border-gray-100 dark:border-gray-600 max-h-60 - rounded-md py-1 text-base + bg-scale-100 dark:bg-scale-300 + shadow-lg + border border-solid + border-gray-100 dark:border-gray-600 max-h-60 + rounded-md py-1 text-base sm:text-sm z-10 overflow-hidden overflow-y-scroll origin-dropdown @@ -1561,7 +1562,7 @@ export default { chevron: 'h-5 w-5 text-scale-600', option: ` w-listbox - transition cursor-pointer select-none relative py-2 pl-3 pr-9 + transition cursor-pointer select-none relative py-2 pl-3 pr-9 text-scale-900 text-sm hover:bg-scale-300 dark:hover:bg-scale-500 @@ -1587,9 +1588,9 @@ export default { inputErrorIcon: { base: ` - flex items-center - right-3 pr-2 pl-2 - inset-y-0 + flex items-center + right-3 pr-2 pl-2 + inset-y-0 pointer-events-none text-red-900 `, @@ -1597,8 +1598,8 @@ export default { inputIconContainer: { base: ` - absolute inset-y-0 - left-0 pl-3 flex + absolute inset-y-0 + left-0 pl-3 flex items-center pointer-events-none text-scale-1100 `, diff --git a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx index b58d6f3375f..9d7b7185c6f 100644 --- a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx @@ -266,9 +266,9 @@ const TableGridEditor: FC = ({ console.log('cancel')} + onCancel={() => setApiPreviewPanelOpen(false)} header={ @@ -277,7 +277,7 @@ const TableGridEditor: FC = ({ } customFooter={ setApiPreviewPanelOpen(false)} @@ -286,7 +286,7 @@ const TableGridEditor: FC = ({ >
-
+
{ - console.log(snippet, 'snippet') if (!snippet[selectedLang]) return null return ( - <> +

{snippet.title}

{snippet[selectedLang].code} - +
) } export default CodeSnippet diff --git a/studio/components/to-be-cleaned/Docs/LangSelector.tsx b/studio/components/to-be-cleaned/Docs/LangSelector.tsx index 2386ff91d3d..ce453e47fad 100644 --- a/studio/components/to-be-cleaned/Docs/LangSelector.tsx +++ b/studio/components/to-be-cleaned/Docs/LangSelector.tsx @@ -30,7 +30,7 @@ const LangSelector: FC = ({ ) return ( -
+
@@ -63,8 +63,8 @@ const Param: FC = ({
- - + + {getColumnType(type, format)} @@ -76,8 +76,8 @@ const Param: FC = ({ Format
- - + + {format} diff --git a/studio/styles/ui.scss b/studio/styles/ui.scss index 2fa8033d916..c824175ec2b 100644 --- a/studio/styles/ui.scss +++ b/studio/styles/ui.scss @@ -224,7 +224,7 @@ @apply border-b flex border-scale-500; } - .doc-section--introduction { + &.Docs--table-editor .doc-section--introduction { .text { width: 85%; } @@ -280,6 +280,9 @@ @apply text-brand-900; } } + .codeblock-container + .codeblock-container { + @apply mt-12; + } } ::-moz-selection { From d4c16fa923725d8e3aeae86eaf419f040356dcce Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Fri, 10 Feb 2023 16:57:34 -0330 Subject: [PATCH 018/230] Fix type --- .../components/to-be-cleaned/Docs/Param.tsx | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/studio/components/to-be-cleaned/Docs/Param.tsx b/studio/components/to-be-cleaned/Docs/Param.tsx index 88b1ede519a..3b962756d09 100644 --- a/studio/components/to-be-cleaned/Docs/Param.tsx +++ b/studio/components/to-be-cleaned/Docs/Param.tsx @@ -2,16 +2,6 @@ import { FC } from 'react' import { Badge, IconCode, IconDatabase } from 'ui' import Description from './Description' -interface Props { - name: string - type: string - format: string - required: string - description: boolean - metadata: any - onDesciptionUpdated: () => void -} - function getColumnType(type: string, format: string) { // json and jsonb both have type=undefined, so check format instead if (type === undefined && (format === 'jsonb' || format === 'json')) return 'json' @@ -32,6 +22,15 @@ function getColumnType(type: string, format: string) { } } +interface Props { + name: string + type: string + format: string + required: boolean + description: boolean + metadata?: any + onDesciptionUpdated?: () => void +} const Param: FC = ({ name, type, From 549617e4a9374013bb5c9e690a1f5e415737cc69 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Fri, 10 Feb 2023 17:02:19 -0330 Subject: [PATCH 019/230] Types --- studio/components/to-be-cleaned/Docs/LangSelector.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/to-be-cleaned/Docs/LangSelector.tsx b/studio/components/to-be-cleaned/Docs/LangSelector.tsx index ce453e47fad..a0e05272874 100644 --- a/studio/components/to-be-cleaned/Docs/LangSelector.tsx +++ b/studio/components/to-be-cleaned/Docs/LangSelector.tsx @@ -3,7 +3,7 @@ import { Button, Dropdown, IconKey } from 'ui' import { checkPermissions } from 'hooks' import { PermissionAction } from '@supabase/shared-types/out/constants' -import { showApiKey } from 'components/interfaces/Docs/docs.types' +import { showApiKey } from 'components/interfaces/Docs/Docs.types' const DEFAULT_KEY = { name: 'hide', key: 'SUPABASE_KEY' } From 1e6da5179ff60accf531f687ed64dcab20135d4a Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Mon, 13 Feb 2023 17:25:16 -0330 Subject: [PATCH 020/230] Add icons for libs --- .../interfaces/Docs/ResourceContent.tsx | 15 ----- .../TableGridEditor/TableGridEditor.tsx | 2 +- .../{Introduction.js => Introduction.tsx} | 55 ++++++++++++++++++- .../public/img/icons/reference-auth-light.svg | 1 + .../img/icons/reference-csharp-light.svg | 1 + studio/public/img/icons/reference-csharp.svg | 9 +++ .../public/img/icons/reference-dart-light.svg | 9 +++ studio/public/img/icons/reference-dart.svg | 9 +++ .../img/icons/reference-javascript-light.svg | 9 +++ .../public/img/icons/reference-javascript.svg | 9 +++ .../img/icons/reference-python-light.svg | 9 +++ studio/public/img/icons/reference-python.svg | 9 +++ 12 files changed, 120 insertions(+), 17 deletions(-) rename studio/components/to-be-cleaned/Docs/Pages/{Introduction.js => Introduction.tsx} (56%) create mode 100644 studio/public/img/icons/reference-auth-light.svg create mode 100644 studio/public/img/icons/reference-csharp-light.svg create mode 100644 studio/public/img/icons/reference-csharp.svg create mode 100644 studio/public/img/icons/reference-dart-light.svg create mode 100644 studio/public/img/icons/reference-dart.svg create mode 100644 studio/public/img/icons/reference-javascript-light.svg create mode 100644 studio/public/img/icons/reference-javascript.svg create mode 100644 studio/public/img/icons/reference-python-light.svg create mode 100644 studio/public/img/icons/reference-python.svg diff --git a/studio/components/interfaces/Docs/ResourceContent.tsx b/studio/components/interfaces/Docs/ResourceContent.tsx index df8634208be..21e6a3dc5fb 100644 --- a/studio/components/interfaces/Docs/ResourceContent.tsx +++ b/studio/components/interfaces/Docs/ResourceContent.tsx @@ -274,21 +274,6 @@ const ResourceContent = ({
- <> -

Much more

-
-
-

- These docs are a work in progress! See our{' '} - - docs - {' '} - for the additional functionality Supabase has to offer. -

-
-
-
- ) } diff --git a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx index 9d7b7185c6f..6dbc33f3a41 100644 --- a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx @@ -286,7 +286,7 @@ const TableGridEditor: FC = ({ >
-
+

Introduction

@@ -21,6 +47,33 @@ export default function Introduction({ autoApiService, selectedLang }) { update your API implementation accordingly whenever you make changes to your Supabase schema from the graphical interface.

+ +
+

Read the reference documentation:

+
+ {libs.map((lib) => ( + + {lib.name} + {lib.name} + + ))} +
+
diff --git a/studio/public/img/icons/reference-auth-light.svg b/studio/public/img/icons/reference-auth-light.svg new file mode 100644 index 00000000000..3995c790842 --- /dev/null +++ b/studio/public/img/icons/reference-auth-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/studio/public/img/icons/reference-csharp-light.svg b/studio/public/img/icons/reference-csharp-light.svg new file mode 100644 index 00000000000..782f87bcc40 --- /dev/null +++ b/studio/public/img/icons/reference-csharp-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/studio/public/img/icons/reference-csharp.svg b/studio/public/img/icons/reference-csharp.svg new file mode 100644 index 00000000000..40d0375079d --- /dev/null +++ b/studio/public/img/icons/reference-csharp.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/studio/public/img/icons/reference-dart-light.svg b/studio/public/img/icons/reference-dart-light.svg new file mode 100644 index 00000000000..178f51a5b88 --- /dev/null +++ b/studio/public/img/icons/reference-dart-light.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/studio/public/img/icons/reference-dart.svg b/studio/public/img/icons/reference-dart.svg new file mode 100644 index 00000000000..33f9ad24a27 --- /dev/null +++ b/studio/public/img/icons/reference-dart.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/studio/public/img/icons/reference-javascript-light.svg b/studio/public/img/icons/reference-javascript-light.svg new file mode 100644 index 00000000000..a11845dff91 --- /dev/null +++ b/studio/public/img/icons/reference-javascript-light.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/studio/public/img/icons/reference-javascript.svg b/studio/public/img/icons/reference-javascript.svg new file mode 100644 index 00000000000..f8ce1de0403 --- /dev/null +++ b/studio/public/img/icons/reference-javascript.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/studio/public/img/icons/reference-python-light.svg b/studio/public/img/icons/reference-python-light.svg new file mode 100644 index 00000000000..1ac57aae572 --- /dev/null +++ b/studio/public/img/icons/reference-python-light.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/studio/public/img/icons/reference-python.svg b/studio/public/img/icons/reference-python.svg new file mode 100644 index 00000000000..4ca064b0b73 --- /dev/null +++ b/studio/public/img/icons/reference-python.svg @@ -0,0 +1,9 @@ + + + + + + + + + From d1ee823b0ba50d934c77e6c1f11393b5521e3493 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Mon, 13 Feb 2023 21:22:23 -0330 Subject: [PATCH 021/230] Refresh docs --- studio/components/grid/types/grid.ts | 4 + .../TableGridEditor/GridHeaderActions.tsx | 15 +++- .../TableGridEditor/TableGridEditor.tsx | 85 ++++++++++++------- studio/pages/project/[ref]/api/index.tsx | 1 - 4 files changed, 73 insertions(+), 32 deletions(-) diff --git a/studio/components/grid/types/grid.ts b/studio/components/grid/types/grid.ts index 68c3dc73220..9650ea0b890 100644 --- a/studio/components/grid/types/grid.ts +++ b/studio/components/grid/types/grid.ts @@ -74,6 +74,10 @@ export interface SupabaseGridProps { */ apiPreviewPanelOpen?: boolean setApiPreviewPanelOpen?: () => void + /** + * Refresh the docs after a change is made to the table + */ + refreshDocs: () => void } export interface SupabaseGridRef { diff --git a/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx b/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx index c21c62febe1..78712ab0f0a 100644 --- a/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx +++ b/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx @@ -9,20 +9,31 @@ interface Props { table: PostgresTable apiPreviewPanelOpen: boolean setApiPreviewPanelOpen: (apiPreviewPanelOpen: boolean) => void + refreshDocs: () => void } -const GridHeaderActions: FC = ({ table, apiPreviewPanelOpen, setApiPreviewPanelOpen }) => { +const GridHeaderActions: FC = ({ + table, + apiPreviewPanelOpen, + setApiPreviewPanelOpen, + refreshDocs, +}) => { const { ui, meta } = useStore() const projectRef = ui.selectedProject?.ref const policies = meta.policies.list((policy: PostgresPolicy) => policy.table_id === table.id) + function handlePreviewToggle() { + setApiPreviewPanelOpen(!apiPreviewPanelOpen) + refreshDocs() + } + const RenderAPIPreviewToggle = () => { return ( diff --git a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx index 6dbc33f3a41..e0cbb60d6f9 100644 --- a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx @@ -16,7 +16,7 @@ import ActionBar from './SidePanelEditor/ActionBar' import { GeneralContent, ResourceContent } from '../Docs' import { useProjectSettingsQuery } from 'data/config/project-settings-query' import { snakeToCamel } from 'lib/helpers' -import useSWR from 'swr' +import useSWR, { mutate } from 'swr' import { get } from 'lib/common/fetch' import LangSelector from 'components/to-be-cleaned/Docs/LangSelector' @@ -117,7 +117,7 @@ const TableGridEditor: FC = ({ : undefined const swaggerUrl = settings?.autoApiService.restUrl - console.log('swaggerUrl:', swaggerUrl) + const headers: any = { apikey: API_KEY } if (API_KEY) headers['Authorization'] = `Bearer ${API_KEY}` @@ -126,9 +126,15 @@ const TableGridEditor: FC = ({ () => swaggerUrl, (url: string) => get(url, { headers, credentials: 'omit' }).then((res) => res) ) + if (jsonSchemaError) console.log('jsonSchemaError', jsonSchemaError) + const resources = getResourcesFromJsonSchema(jsonSchema) + const refreshDocs = async () => { + mutate(swaggerUrl) + } + useEffect(() => { if (selectedTable !== undefined && selectedTable.id !== undefined && isVaultEnabled) { getEncryptedColumns(selectedTable) @@ -230,12 +236,14 @@ const TableGridEditor: FC = ({ editable={canUpdateTables && canEditViaTableEditor} schema={selectedTable.schema} table={gridTable} + refreshDocs={refreshDocs} headerActions={ canEditViaTableEditor && ( ) } @@ -286,34 +294,53 @@ const TableGridEditor: FC = ({ >
-
- -
- + {jsonSchemaError ? ( +
+
+

Error connecting to API

+

{`${jsonSchemaError}`}

+
+
+ ) : ( + <> + {jsonSchema ? ( + <> +
+ +
+ - {jsonSchema?.definitions && ( - table.id === Number(query.id))?.name} - resources={resources} - definitions={jsonSchema.definitions} - paths={jsonSchema.paths} - showApiKey={true} - // refreshDocs={refreshDocs} - /> + {jsonSchema?.definitions && ( + table.id === Number(query.id))?.name} + resources={resources} + definitions={jsonSchema.definitions} + paths={jsonSchema.paths} + showApiKey={true} + refreshDocs={refreshDocs} + /> + )} + + ) : ( +
+

Building docs ...

+
+ )} + )}
diff --git a/studio/pages/project/[ref]/api/index.tsx b/studio/pages/project/[ref]/api/index.tsx index 1ad4f4968f6..670a7b93323 100644 --- a/studio/pages/project/[ref]/api/index.tsx +++ b/studio/pages/project/[ref]/api/index.tsx @@ -1,6 +1,5 @@ import useSWR, { mutate } from 'swr' import { useRouter } from 'next/router' -import { Button, Dropdown, IconKey } from 'ui' import { FC, createContext, useContext, useEffect, useState } from 'react' import { observer, useLocalObservable } from 'mobx-react-lite' From 6174de96d96b24a040dfa53c07b1fd16c6cdf658 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Mon, 13 Feb 2023 21:26:12 -0330 Subject: [PATCH 022/230] Add hover --- studio/components/to-be-cleaned/Docs/Pages/Introduction.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/to-be-cleaned/Docs/Pages/Introduction.tsx b/studio/components/to-be-cleaned/Docs/Pages/Introduction.tsx index e32e174a11c..5b58b9d7348 100644 --- a/studio/components/to-be-cleaned/Docs/Pages/Introduction.tsx +++ b/studio/components/to-be-cleaned/Docs/Pages/Introduction.tsx @@ -59,7 +59,7 @@ export default function Introduction({ autoApiService, selectedLang }: Props) { className=" flex items-center gap-1 rounded-md px-3 py-1 bg-scale-300 dark:bg-scale-500 - hover:dark:bg-scale-700 transition-colors + hover:bg-scale-500 hover:dark:bg-scale-700 transition-colors !text-scale-1100 hover:text-scale-1100 " > From 02a92913d2b92a0b9a75833c89e8b459e56e3ebf Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Tue, 14 Feb 2023 09:57:33 -0330 Subject: [PATCH 023/230] Change button name --- .../components/interfaces/TableGridEditor/GridHeaderActions.tsx | 2 +- studio/components/to-be-cleaned/Docs/Pages/Introduction.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx b/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx index 78712ab0f0a..67c50b23a0a 100644 --- a/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx +++ b/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx @@ -35,7 +35,7 @@ const GridHeaderActions: FC = ({ icon={} onClick={handlePreviewToggle} > - API Preview + API Quickstart ) } diff --git a/studio/components/to-be-cleaned/Docs/Pages/Introduction.tsx b/studio/components/to-be-cleaned/Docs/Pages/Introduction.tsx index b3563417179..9f45ba87634 100644 --- a/studio/components/to-be-cleaned/Docs/Pages/Introduction.tsx +++ b/studio/components/to-be-cleaned/Docs/Pages/Introduction.tsx @@ -48,7 +48,7 @@ export default function Introduction({ autoApiService, selectedLang }: Props) { schema from the graphical interface.

-
+

Read the reference documentation:

{libs.map((lib) => ( From e686aff22b0536d7ae73306135cb1fc10b22fa22 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Wed, 15 Feb 2023 08:13:04 -0330 Subject: [PATCH 024/230] Padding nudge --- studio/components/to-be-cleaned/Docs/Param.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/studio/components/to-be-cleaned/Docs/Param.tsx b/studio/components/to-be-cleaned/Docs/Param.tsx index 3b962756d09..611a61e707a 100644 --- a/studio/components/to-be-cleaned/Docs/Param.tsx +++ b/studio/components/to-be-cleaned/Docs/Param.tsx @@ -62,7 +62,7 @@ const Param: FC = ({
- + {getColumnType(type, format)} @@ -75,7 +75,7 @@ const Param: FC = ({ Format
- + {format} From 958559b2f78cf616f7d7038b932011a849f5f4d5 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Thu, 16 Feb 2023 15:38:36 +1100 Subject: [PATCH 025/230] move graphiql to react-query --- studio/package.json | 2 +- studio/pages/project/[ref]/graphiql/index.tsx | 27 ++++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/studio/package.json b/studio/package.json index 15a7c89b7fd..ffa23069e4d 100644 --- a/studio/package.json +++ b/studio/package.json @@ -44,7 +44,7 @@ "dayjs": "^1.11.0", "file-saver": "^2.0.5", "generate-password": "^1.7.0", - "graphiql": "^2.0.13", + "graphiql": "^2.2.0", "graphql": "^16.6.0", "html-to-image": "^1.10.8", "immutability-helper": "^3.1.1", diff --git a/studio/pages/project/[ref]/graphiql/index.tsx b/studio/pages/project/[ref]/graphiql/index.tsx index b7382665d15..e5a6538d890 100644 --- a/studio/pages/project/[ref]/graphiql/index.tsx +++ b/studio/pages/project/[ref]/graphiql/index.tsx @@ -6,14 +6,14 @@ import 'graphiql/graphiql.css' import ExtensionCard from 'components/interfaces/Database/Extensions/ExtensionCard' import { ProjectLayoutWithAuth } from 'components/layouts' import Connecting from 'components/ui/Loading/Loading' -import { useParams, useProjectSettings, useStore } from 'hooks' -import { DEFAULT_PROJECT_API_SERVICE_ID } from 'lib/constants' +import { useParams, useStore } from 'hooks' +import { useProjectApiQuery } from 'data/config/project-api-query' import { useEffect, useMemo } from 'react' import { NextPageWithLayout } from 'types' import { IconAlertCircle } from 'ui' const GraphiQLPage: NextPageWithLayout = () => { - const { ref } = useParams() + const { ref: projectRef } = useParams() const { ui, meta } = useStore() const isExtensionsLoading = meta.extensions.isLoading @@ -28,25 +28,26 @@ const GraphiQLPage: NextPageWithLayout = () => { }, [ui.selectedProject?.ref]) const { - services, + data: settings, isError: isProjectSettingsError, isLoading: isProjectSettingsLoading, - } = useProjectSettings(ref) + } = useProjectApiQuery({ + projectRef, + }) - const apiService = (services ?? []).find((x: any) => x.app.id == DEFAULT_PROJECT_API_SERVICE_ID) - const apiConfig = apiService?.app_config ?? {} - const apiKeys = apiService?.service_api_keys ?? [] + const apiService = settings?.autoApiService + const anonKey = apiService?.service_api_keys.find((x) => x.name === 'anon key') + ? apiService.defaultApiKey + : undefined + const endpoint = settings?.autoApiService.app_config.endpoint ?? '' - const graphqlUrl = `https://${apiConfig.endpoint}/graphql/v1` - const anonKey = apiKeys.find((key: any) => key.tags === 'anon')?.api_key + const graphqlUrl = `https://${endpoint}/graphql/v1` const fetcher = useMemo(() => { return createGraphiQLFetcher({ url: graphqlUrl, fetch, - headers: { - apikey: anonKey, - }, + ...(anonKey && { headers: { apikey: anonKey } }), }) }, [graphqlUrl, anonKey]) From 90b54f839acbf725554f9bdf3a89545548e00cf5 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Thu, 16 Feb 2023 15:44:53 +1100 Subject: [PATCH 026/230] update package-lock.json --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index f04276790a3..d3e4e45e973 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39461,7 +39461,7 @@ "dayjs": "^1.11.0", "file-saver": "^2.0.5", "generate-password": "^1.7.0", - "graphiql": "^2.0.13", + "graphiql": "^2.2.0", "graphql": "^16.6.0", "html-to-image": "^1.10.8", "immutability-helper": "^3.1.1", @@ -66717,7 +66717,7 @@ "dayjs": "^1.11.0", "file-saver": "^2.0.5", "generate-password": "^1.7.0", - "graphiql": "^2.0.13", + "graphiql": "^2.2.0", "graphql": "^16.6.0", "html-to-image": "^1.10.8", "immutability-helper": "^3.1.1", From 622f419a390b01474973dc3e2c4890377a8897d5 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 17 Feb 2023 01:32:41 +0800 Subject: [PATCH 027/230] Update database-usage.mdx --- .../pages/guides/platform/database-usage.mdx | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index 6ce6385770d..c3db3e86d78 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -27,16 +27,33 @@ For Pro and Enterprise projects, disk size expands ~1.5x automatically (e.g., 8G Disk size expansion can only occur once every six hours. Pro projects can store up to 1024TB. -All projects enter read-only mode when you reach 95% of the disk size. In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. +### Free tier project 'read-only' mode at 95% disk size use + +Free tier projects enter read-only mode when you reach 95% of the disk size. +In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size. +For automatic disk resizing, and avoid your database entering read-only mode, you can [upgrade to the Pro or Enterprise plan](https://app.supabase.com/project/_/settings/billing/subscription). + +### Paid tier automatic disk resizing + +If you are on Pro or Enterprise, database storage expands automatically. Usually the disk is expanded to be 50% larger. + +However, you may also encounter this error if you fill the database faster than it can expand. For every automatic database storage expansion, it will not auto expand for another 6 hours. + +During this 6 hour period, if you reach 95% of the disk space, your project may enter read-only mode. In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. +Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size. + +If you intend to import a lot of data into your database that would require multiple storage expansions then [reach out to our team](https://app.supabase.com/support/new). + If you need more than 1024TB of disk size or require multiple storage expansions in a short period of time, [contact us](https://app.supabase.com/support/new) to learn more about the Enterprise plan. ### Increasing available disk size 1. [Upgrade to the Pro or Enterprise plan](https://app.supabase.com/project/_/settings/billing/subscription) to increase your quota and expand your disk size automatically. -2. Delete data from your project's database to lower its disk usage. If your database is already in read-only mode, run the following command to change the transaction mode to read-write for your session: +2. Delete data from your project's database to lower its disk usage. + If your database is already in read-only mode, run the following command to change the transaction mode to read-write for your session: ```sql SET From 69169bfa465d0beac44635eaf435be2b20e2ead5 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 17 Feb 2023 01:56:27 +0800 Subject: [PATCH 028/230] Update database-usage.mdx --- .../pages/guides/platform/database-usage.mdx | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index c3db3e86d78..edbb50920f3 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -23,11 +23,14 @@ This value is also reported in the [database settings page](https://app.supabase ## Database storage management Supabase uses network-attached storage to balance performance with scalability. -For Pro and Enterprise projects, disk size expands ~1.5x automatically (e.g., 8GB -> 12GB) when you reach 90% of the disk size. -Disk size expansion can only occur once every six hours. -Pro projects can store up to 1024TB. -### Free tier project 'read-only' mode at 95% disk size use +For Pro and Enterprise tier projects, [disk size expands ~1.5x automatically](#paid-tier-automatic-disk-resizing) (e.g., 8GB -> 12GB) when you reach 90% of the disk size. Disk size expansion can only occur once every six hours. + +For Free tier projects, the database will enter ['read only' mode when you reach 95% disk space](#free-tier-project-read-only-mode). + +Pro and enterprise tier projects can store up to 1024TB. + +### Free tier project 'read-only' mode Free tier projects enter read-only mode when you reach 95% of the disk size. In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. @@ -37,11 +40,9 @@ For automatic disk resizing, and avoid your database entering read-only mode, yo ### Paid tier automatic disk resizing -If you are on Pro or Enterprise, database storage expands automatically. Usually the disk is expanded to be 50% larger. +If you are on Pro or Enterprise, database storage expands automatically. Usually the disk is expanded to be 50% larger. For every automatic database storage expansion, it will not auto expand for another 6 hours. -However, you may also encounter this error if you fill the database faster than it can expand. For every automatic database storage expansion, it will not auto expand for another 6 hours. - -During this 6 hour period, if you reach 95% of the disk space, your project may enter read-only mode. In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. +During this 6 hour period, if you reach 95% of the disk space, your project will enter read-only mode. In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size. If you intend to import a lot of data into your database that would require multiple storage expansions then [reach out to our team](https://app.supabase.com/support/new). From 3e365e0415ce85b8c34e76839bc2c862bda428d4 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 17 Feb 2023 02:06:51 +0800 Subject: [PATCH 029/230] Update database-usage.mdx --- apps/docs/pages/guides/platform/database-usage.mdx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index edbb50920f3..1db7f419cf0 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -42,13 +42,18 @@ For automatic disk resizing, and avoid your database entering read-only mode, yo If you are on Pro or Enterprise, database storage expands automatically. Usually the disk is expanded to be 50% larger. For every automatic database storage expansion, it will not auto expand for another 6 hours. -During this 6 hour period, if you reach 95% of the disk space, your project will enter read-only mode. In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. -Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size. - -If you intend to import a lot of data into your database that would require multiple storage expansions then [reach out to our team](https://app.supabase.com/support/new). +If you intend to import a lot of data into your database that would require multiple storage expansions then [reach out to our team](https://app.supabase.com/support/new), otherwise your project might enter a ['read-only' mode](#paid-tier-project-read-only-mode). If you need more than 1024TB of disk size or require multiple storage expansions in a short period of time, [contact us](https://app.supabase.com/support/new) to learn more about the Enterprise plan. +#### Paid tier project 'read-only' mode + +During the 6 hour period after an automatic resize, your database will not automatically resize until after 6 hours. +If within those 6 hours you reach 95% of the disk space, your project will enter read-only mode. + +In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. +Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size. + ### Increasing available disk size 1. [Upgrade to the Pro or Enterprise plan](https://app.supabase.com/project/_/settings/billing/subscription) to increase your quota and expand your disk size automatically. From 7e3cd1bae6dc06aaf21bba9e5695a87e3315a843 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 17 Feb 2023 02:12:01 +0800 Subject: [PATCH 030/230] Update database-usage.mdx --- apps/docs/pages/guides/platform/database-usage.mdx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index 1db7f419cf0..39c294b7d37 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -24,7 +24,7 @@ This value is also reported in the [database settings page](https://app.supabase Supabase uses network-attached storage to balance performance with scalability. -For Pro and Enterprise tier projects, [disk size expands ~1.5x automatically](#paid-tier-automatic-disk-resizing) (e.g., 8GB -> 12GB) when you reach 90% of the disk size. Disk size expansion can only occur once every six hours. +For Pro and Enterprise tier projects, [disk size expands ~1.5x automatically](#paid-tier-automatic-disk-resizing) when you reach 90% of the disk size. Disk size expansion can only occur once every six hours. For Free tier projects, the database will enter ['read only' mode when you reach 95% disk space](#free-tier-project-read-only-mode). @@ -36,11 +36,12 @@ Free tier projects enter read-only mode when you reach 95% of the disk size. In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size. -For automatic disk resizing, and avoid your database entering read-only mode, you can [upgrade to the Pro or Enterprise plan](https://app.supabase.com/project/_/settings/billing/subscription). +For [automatic disk resizing](paid-tier-automatic-disk-resizing), and avoid your database entering read-only mode, you can [upgrade to the Pro or Enterprise plan](https://app.supabase.com/project/_/settings/billing/subscription). ### Paid tier automatic disk resizing -If you are on Pro or Enterprise, database storage expands automatically. Usually the disk is expanded to be 50% larger. For every automatic database storage expansion, it will not auto expand for another 6 hours. +If you are on Pro or Enterprise, database storage expands automatically when you reach 90% of the disk size. Usually the disk is expanded to be 50% larger (e.g., 8GB -> 12GB). +For every automatic database storage expansion, it will not auto expand for another 6 hours. If you intend to import a lot of data into your database that would require multiple storage expansions then [reach out to our team](https://app.supabase.com/support/new), otherwise your project might enter a ['read-only' mode](#paid-tier-project-read-only-mode). @@ -52,7 +53,7 @@ During the 6 hour period after an automatic resize, your database will not autom If within those 6 hours you reach 95% of the disk space, your project will enter read-only mode. In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. -Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size. +Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size, or when the database automatically resizes after the 6 hour period. ### Increasing available disk size From ab0118b3bc9762f52c230e22fcbf23ae025b9b4a Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 17 Feb 2023 12:59:04 +0800 Subject: [PATCH 031/230] Apply suggestions from code review Co-authored-by: Copple <10214025+kiwicopple@users.noreply.github.com> --- apps/docs/pages/guides/platform/database-usage.mdx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index 39c294b7d37..cf354ebf325 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -24,7 +24,7 @@ This value is also reported in the [database settings page](https://app.supabase Supabase uses network-attached storage to balance performance with scalability. -For Pro and Enterprise tier projects, [disk size expands ~1.5x automatically](#paid-tier-automatic-disk-resizing) when you reach 90% of the disk size. Disk size expansion can only occur once every six hours. +For Pro and Enterprise tier projects, [disk size expands ~1.5x automatically](#paid-tier-disk-auto-scaling) when you reach 90% of the disk size. Disk size expansion can only occur once every six hours. For Free tier projects, the database will enter ['read only' mode when you reach 95% disk space](#free-tier-project-read-only-mode). @@ -36,12 +36,12 @@ Free tier projects enter read-only mode when you reach 95% of the disk size. In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size. -For [automatic disk resizing](paid-tier-automatic-disk-resizing), and avoid your database entering read-only mode, you can [upgrade to the Pro or Enterprise plan](https://app.supabase.com/project/_/settings/billing/subscription). +For [disk auto-scaling](paid-tier-disk-auto-scaling), and avoid your database entering read-only mode, you can [upgrade to the Pro or Enterprise plan](https://app.supabase.com/project/_/settings/billing/subscription). -### Paid tier automatic disk resizing +### Paid tier disk auto-scaling -If you are on Pro or Enterprise, database storage expands automatically when you reach 90% of the disk size. Usually the disk is expanded to be 50% larger (e.g., 8GB -> 12GB). -For every automatic database storage expansion, it will not auto expand for another 6 hours. +Pro and Enterprise have disk auto-scaling. Storage expands automatically when the database reaches 90% of the disk size. The disk is expanded to be 50% larger (e.g., 8GB -> 12GB). +Auto-scaling can only take place once every 6 hours. If you intend to import a lot of data into your database that would require multiple storage expansions then [reach out to our team](https://app.supabase.com/support/new), otherwise your project might enter a ['read-only' mode](#paid-tier-project-read-only-mode). @@ -49,7 +49,7 @@ If you need more than 1024TB of disk size or require multiple storage expansions #### Paid tier project 'read-only' mode -During the 6 hour period after an automatic resize, your database will not automatically resize until after 6 hours. +Database storage expands, at most, once every 6 hours. If within those 6 hours you reach 95% of the disk space, your project will enter read-only mode. In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. From 09f3fd0c62a5052a57962b6d8b5e8ca61eb52a2f Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Fri, 17 Feb 2023 16:59:46 +1100 Subject: [PATCH 032/230] adds custom graphiql layout --- package-lock.json | 36 ++ .../interfaces/GraphQL/GraphiQL.tsx | 607 ++++++++++++++++++ .../interfaces/GraphQL/graphiql.module.css | 4 + studio/package.json | 3 + studio/pages/project/[ref]/graphiql/index.tsx | 3 +- 5 files changed, 651 insertions(+), 2 deletions(-) create mode 100644 studio/components/interfaces/GraphQL/GraphiQL.tsx create mode 100644 studio/components/interfaces/GraphQL/graphiql.module.css diff --git a/package-lock.json b/package-lock.json index d3e4e45e973..c6da4ad6636 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19915,6 +19915,17 @@ "graphql": "^15.5.0 || ^16.0.0" } }, + "node_modules/graphql-ws": { + "version": "5.11.3", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.11.3.tgz", + "integrity": "sha512-fU8zwSgAX2noXAsuFiCZ8BtXeXZOzXyK5u1LloCdacsVth4skdBMPO74EG51lBoWSIZ8beUocdpV8+cQHBODnQ==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": ">=0.11 <=16" + } + }, "node_modules/gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", @@ -39432,6 +39443,7 @@ "studio": { "version": "0.0.9", "dependencies": { + "@graphiql/react": "^0.15.0", "@graphiql/toolkit": "^0.8.0", "@hcaptcha/react-hcaptcha": "^1.4.4", "@headlessui/react": "^1.4.1", @@ -39455,6 +39467,7 @@ "awesome-debounce-promise": "^2.1.0", "blueimp-md5": "^2.19.0", "clipboard": "^2.0.8", + "clsx": "^1.2.1", "common": "*", "config": "*", "configcat-js": "^7.0.0", @@ -39463,6 +39476,7 @@ "generate-password": "^1.7.0", "graphiql": "^2.2.0", "graphql": "^16.6.0", + "graphql-ws": "^5.11.3", "html-to-image": "^1.10.8", "immutability-helper": "^3.1.1", "ip-address": "^8.1.0", @@ -39724,6 +39738,14 @@ "postcss": "^8.1.0" } }, + "studio/node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, "studio/node_modules/configcat-common": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/configcat-common/-/configcat-common-7.0.1.tgz", @@ -55037,6 +55059,12 @@ "vscode-languageserver-types": "^3.17.1" } }, + "graphql-ws": { + "version": "5.11.3", + "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.11.3.tgz", + "integrity": "sha512-fU8zwSgAX2noXAsuFiCZ8BtXeXZOzXyK5u1LloCdacsVth4skdBMPO74EG51lBoWSIZ8beUocdpV8+cQHBODnQ==", + "requires": {} + }, "gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", @@ -66653,6 +66681,7 @@ "version": "file:studio", "requires": { "@babel/core": "^7.17.5", + "@graphiql/react": "*", "@graphiql/toolkit": "^0.8.0", "@hcaptcha/react-hcaptcha": "^1.4.4", "@headlessui/react": "^1.4.1", @@ -66711,6 +66740,7 @@ "babel-loader": "^8.2.3", "blueimp-md5": "^2.19.0", "clipboard": "^2.0.8", + "clsx": "^1.2.1", "common": "*", "config": "*", "configcat-js": "^7.0.0", @@ -66719,6 +66749,7 @@ "generate-password": "^1.7.0", "graphiql": "^2.2.0", "graphql": "^16.6.0", + "graphql-ws": "*", "html-to-image": "^1.10.8", "immutability-helper": "^3.1.1", "ip-address": "^8.1.0", @@ -66878,6 +66909,11 @@ "postcss-value-parser": "^4.2.0" } }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, "configcat-common": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/configcat-common/-/configcat-common-7.0.1.tgz", diff --git a/studio/components/interfaces/GraphQL/GraphiQL.tsx b/studio/components/interfaces/GraphQL/GraphiQL.tsx new file mode 100644 index 00000000000..dbeb0661c07 --- /dev/null +++ b/studio/components/interfaces/GraphQL/GraphiQL.tsx @@ -0,0 +1,607 @@ +/* Based on https://github.com/graphql/graphiql/blob/main/packages/graphiql/src/components/GraphiQL.tsx */ + +import { + Button, + ChevronDownIcon, + ChevronUpIcon, + CopyIcon, + Dialog, + ExecuteButton, + GraphiQLProvider, + HeaderEditor, + KeyboardShortcutIcon, + MergeIcon, + PlusIcon, + PrettifyIcon, + QueryEditor, + ReloadIcon, + ResponseEditor, + SettingsIcon, + Spinner, + Tab, + Tabs, + ToolbarButton, + Tooltip, + UnStyledButton, + useCopyQuery, + useDragResize, + useEditorContext, + useExecutionContext, + useMergeQuery, + usePluginContext, + usePrettifyEditors, + useSchemaContext, + useStorageContext, + useTheme, + VariableEditor, +} from '@graphiql/react' +import { Fetcher } from '@graphiql/toolkit' +import clsx from 'clsx' +import 'graphiql/graphiql.css' +import { PropsWithChildren, useState } from 'react' +import styles from './graphiql.module.css' + +export type GraphiQLProps = { + fetcher: Fetcher +} + +const GraphiQL = ({ fetcher }: GraphiQLProps) => { + // Ensure props are correct + if (typeof fetcher !== 'function') { + throw new TypeError( + 'The `GraphiQL` component requires a `fetcher` function to be passed as prop.' + ) + } + + return ( + + + + ) +} + +export function GraphiQLInterface() { + const editorContext = useEditorContext({ nonNull: true }) + const executionContext = useExecutionContext({ nonNull: true }) + const schemaContext = useSchemaContext({ nonNull: true }) + const storageContext = useStorageContext() + const pluginContext = usePluginContext() + + const copy = useCopyQuery() + const merge = useMergeQuery() + const prettify = usePrettifyEditors() + + const { theme, setTheme } = useTheme() + + const PluginContent = pluginContext?.visiblePlugin?.content + + const pluginResize = useDragResize({ + defaultSizeRelation: 1 / 3, + direction: 'horizontal', + initiallyHidden: pluginContext?.visiblePlugin ? undefined : 'second', + onHiddenElementChange: (resizableElement) => { + if (resizableElement === 'first') { + pluginContext?.setVisiblePlugin(null) + } + }, + sizeThresholdSecond: 200, + storageKey: 'docExplorerFlex', + }) + const editorResize = useDragResize({ + direction: 'horizontal', + storageKey: 'editorFlex', + }) + const editorToolsResize = useDragResize({ + defaultSizeRelation: 3, + direction: 'vertical', + initiallyHidden: (() => { + return editorContext.initialVariables || editorContext.initialHeaders ? undefined : 'second' + })(), + sizeThresholdSecond: 60, + storageKey: 'secondaryEditorFlex', + }) + + const [activeSecondaryEditor, setActiveSecondaryEditor] = useState<'variables' | 'headers'>( + () => { + return !editorContext.initialVariables && editorContext.initialHeaders + ? 'headers' + : 'variables' + } + ) + const [showDialog, setShowDialog] = useState<'settings' | 'short-keys' | null>(null) + const [clearStorageStatus, setClearStorageStatus] = useState<'success' | 'error' | null>(null) + + const logo = + + const toolbar = ( + <> + prettify()} label="Prettify query (Shift-Ctrl-P)"> + + merge()} label="Merge fragments into query (Shift-Ctrl-M)"> + + copy()} label="Copy query (Shift-Ctrl-C)"> + + + ) + + const onClickReference = () => { + if (pluginResize.hiddenElement === 'second') { + pluginResize.setHiddenElement(null) + } + } + + const modifier = + window.navigator.platform.toLowerCase().indexOf('mac') === 0 ? ( + Cmd + ) : ( + Ctrl + ) + + return ( +
+
+
+
+
+ + {editorContext.tabs.length > 1 ? ( + <> + {editorContext.tabs.map((tab, index) => ( + + { + executionContext.stop() + editorContext.changeTab(index) + }} + > + {tab.title} + + { + if (editorContext.activeTabIndex === index) { + executionContext.stop() + } + editorContext.closeTab(index) + }} + /> + + ))} +
+ + editorContext.addTab()} + aria-label="Add tab" + > + + +
+ + ) : null} +
+
+ {editorContext.tabs.length === 1 ? ( +
+ + editorContext.addTab()} + aria-label="Add tab" + > + + +
+ ) : null} + {logo} +
+
+
+
+
+
+
+
+ +
+
+ + {toolbar} +
+
+
+
+
+
+ { + if (editorToolsResize.hiddenElement === 'second') { + editorToolsResize.setHiddenElement(null) + } + setActiveSecondaryEditor('variables') + }} + > + Variables + + + { + if (editorToolsResize.hiddenElement === 'second') { + editorToolsResize.setHiddenElement(null) + } + setActiveSecondaryEditor('headers') + }} + > + Headers + +
+ + { + editorToolsResize.setHiddenElement( + editorToolsResize.hiddenElement === 'second' ? null : 'second' + ) + }} + aria-label={ + editorToolsResize.hiddenElement === 'second' + ? 'Show editor tools' + : 'Hide editor tools' + } + > + {editorToolsResize.hiddenElement === 'second' ? ( + + +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+ {executionContext.isFetching ? : null} + +
+
+
+
+
+ +
+ {pluginContext?.visiblePlugin ?
: null} +
+ +
+
{PluginContent ? : null}
+
+
+
+
+ {pluginContext?.plugins.map((plugin) => { + const isVisible = plugin === pluginContext.visiblePlugin + const label = `${isVisible ? 'Hide' : 'Show'} ${plugin.title}` + const Icon = plugin.icon + return ( + + { + if (isVisible) { + pluginContext.setVisiblePlugin(null) + pluginResize.setHiddenElement('second') + } else { + pluginContext.setVisiblePlugin(plugin) + pluginResize.setHiddenElement(null) + } + }} + aria-label={label} + > + + + ) + })} +
+
+ + schemaContext.introspect()} + aria-label="Re-fetch GraphQL schema" + > + + + + setShowDialog('short-keys')} + aria-label="Open short keys dialog" + > + + + + setShowDialog('settings')} + aria-label="Open settings dialog" + > + + +
+
+ setShowDialog(null)}> +
+
Short Keys
+ setShowDialog(null)} /> +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Short keyFunction
+ {modifier} + {' + '} + F + Search in editor
+ {modifier} + {' + '} + K + Search in documentation
+ {modifier} + {' + '} + Enter + Execute query
+ Ctrl + {' + '} + Shift + {' + '} + P + Prettify editors
+ Ctrl + {' + '} + Shift + {' + '} + M + Merge fragments definitions into operation definition
+ Ctrl + {' + '} + Shift + {' + '} + C + Copy query
+ Ctrl + {' + '} + Shift + {' + '} + R + Re-fetch schema using introspection
+

+ The editors use{' '} + + CodeMirror Key Maps + {' '} + that add more short keys. This instance of GraphiQL uses sublime + . +

+
+
+
+ { + setShowDialog(null) + setClearStorageStatus(null) + }} + > +
+
Settings
+ { + setShowDialog(null) + setClearStorageStatus(null) + }} + /> +
+ + {/*
+
+
Theme
+
+ Adjust how the interface looks like. +
+
+
+ + + + + +
+
*/} + {storageContext ? ( +
+
+
Clear storage
+
+ Remove all locally stored data and start fresh. +
+
+
+ +
+
+ ) : null} +
+
+ ) +} + +// Configure the UI by providing this Component as a child of GraphiQL. +function GraphiQLLogo(props: PropsWithChildren) { + return ( +
+ {props.children || ( + + Graph + i + QL + + )} +
+ ) +} + +GraphiQLLogo.displayName = 'GraphiQLLogo' + +export default GraphiQL diff --git a/studio/components/interfaces/GraphQL/graphiql.module.css b/studio/components/interfaces/GraphQL/graphiql.module.css new file mode 100644 index 00000000000..87caa2eb2e2 --- /dev/null +++ b/studio/components/interfaces/GraphQL/graphiql.module.css @@ -0,0 +1,4 @@ +.graphiqlContainer .graphiqlSessions { + margin-left: var(--px-16); + margin-right: 0; +} diff --git a/studio/package.json b/studio/package.json index ffa23069e4d..c135a48e5ea 100644 --- a/studio/package.json +++ b/studio/package.json @@ -15,6 +15,7 @@ "prettier:write": "prettier --write ." }, "dependencies": { + "@graphiql/react": "^0.15.0", "@graphiql/toolkit": "^0.8.0", "@hcaptcha/react-hcaptcha": "^1.4.4", "@headlessui/react": "^1.4.1", @@ -38,6 +39,7 @@ "awesome-debounce-promise": "^2.1.0", "blueimp-md5": "^2.19.0", "clipboard": "^2.0.8", + "clsx": "^1.2.1", "common": "*", "config": "*", "configcat-js": "^7.0.0", @@ -46,6 +48,7 @@ "generate-password": "^1.7.0", "graphiql": "^2.2.0", "graphql": "^16.6.0", + "graphql-ws": "^5.11.3", "html-to-image": "^1.10.8", "immutability-helper": "^3.1.1", "ip-address": "^8.1.0", diff --git a/studio/pages/project/[ref]/graphiql/index.tsx b/studio/pages/project/[ref]/graphiql/index.tsx index e5a6538d890..3a6102c80b1 100644 --- a/studio/pages/project/[ref]/graphiql/index.tsx +++ b/studio/pages/project/[ref]/graphiql/index.tsx @@ -1,9 +1,8 @@ import { observer } from 'mobx-react-lite' import { createGraphiQLFetcher } from '@graphiql/toolkit' -import { GraphiQL } from 'graphiql' -import 'graphiql/graphiql.css' import ExtensionCard from 'components/interfaces/Database/Extensions/ExtensionCard' +import GraphiQL from 'components/interfaces/GraphQL/GraphiQL' import { ProjectLayoutWithAuth } from 'components/layouts' import Connecting from 'components/ui/Loading/Loading' import { useParams, useStore } from 'hooks' From 5bd05e4099c1d8081ec52912068e994de91aabfe Mon Sep 17 00:00:00 2001 From: thorwebdev Date: Fri, 17 Feb 2023 14:09:27 +0800 Subject: [PATCH 033/230] chore: update to import_map and serve. --- examples/edge-functions/README.md | 21 +++++------ .../edge-functions.code-workspace | 3 +- .../supabase/.env.local.example | 25 +++++++++++-- .../supabase/functions/.vscode/settings.json | 4 +- .../functions/browser-with-cors/index.ts | 2 +- .../functions/cloudflare-turnstile/README.md | 4 ++ .../functions/cloudflare-turnstile/index.ts | 4 +- .../supabase/functions/discord-bot/README.md | 6 ++- .../supabase/functions/discord-bot/index.ts | 4 +- .../functions/file-upload-storage/index.ts | 8 ++-- .../get-tshirt-competition/README.md | 4 +- .../functions/get-tshirt-competition/index.ts | 4 +- .../functions/github-action-deploy/index.ts | 21 ++++------- .../supabase/functions/import_map.json | 18 +++++++++ .../supabase/functions/location/README.md | 8 ++++ .../supabase/functions/location/index.ts | 29 ++++++++++----- .../supabase/functions/oak-server/README.md | 4 +- .../supabase/functions/oak-server/index.ts | 2 +- .../og-image-with-storage-cdn/README.md | 2 +- .../og-image-with-storage-cdn/handler.tsx | 8 ++-- .../og-image-with-storage-cdn/index.ts | 2 +- .../supabase/functions/opengraph/README.md | 2 +- .../supabase/functions/opengraph/handler.tsx | 4 +- .../supabase/functions/opengraph/index.ts | 2 +- .../functions/postgres-on-the-edge/index.ts | 4 +- .../supabase/functions/puppeteer/README.md | 8 ++++ .../supabase/functions/puppeteer/index.ts | 11 ++++-- .../supabase/functions/read-storage/index.ts | 4 +- .../supabase/functions/restful-tasks/index.ts | 4 +- .../select-from-table-with-auth-rls/index.ts | 4 +- .../functions/send-email-smtp/README.md | 2 +- .../functions/send-email-smtp/index.ts | 10 ++--- .../functions/stripe-webhooks/README.md | 2 +- .../functions/stripe-webhooks/index.ts | 37 +++++-------------- .../supabase/functions/telegram-bot/index.ts | 24 +++++------- .../upstash-redis-counter/.env.example | 2 - .../functions/upstash-redis-counter/README.md | 6 +-- .../functions/upstash-redis-counter/index.ts | 4 +- 38 files changed, 177 insertions(+), 136 deletions(-) create mode 100644 examples/edge-functions/supabase/functions/import_map.json delete mode 100644 examples/edge-functions/supabase/functions/upstash-redis-counter/.env.example diff --git a/examples/edge-functions/README.md b/examples/edge-functions/README.md index f32e56e2357..47e624783a9 100644 --- a/examples/edge-functions/README.md +++ b/examples/edge-functions/README.md @@ -6,23 +6,17 @@ ## Example Functions -The function examples are located in [`./supabase/functions`](./supabase/functions): - -- [`browser-with-cors`](./supabase/functions/browser-with-cors/index.ts): Handle CORS headers for function invocations from browser environments. -- [`select-from-table-with-auth-rls`](./supabase/functions/select-from-table-with-auth-rls/index.ts): Retrieve data from an authenticated user via RLS. -- [`send-email-smtp`](./supabase/functions/send-email-smtp/index.ts): Send an email using SMTP credentials. -- [`stripe-webhooks`](./supabase/functions/stripe-webhooks/index.ts): Handle Stripe Webhooks. -- [`telegram-bot`](./supabase/functions/telegram-bot/index.ts): Webhook handler for Telegram bots using [grammY](https://grammy.dev/). +We're constantly adding new Function Examples, [check our docs](https://supabase.com/docs/guides/functions#examples) for a complete list! ## Develop locally - Run `supabase start` (make sure your Docker daemon is running.) -- Run `mv ./supabase/.env.local.example ./supabase/.env.local` to rename the local `.env` file. -- Set the required variables to run the desired edge functions in the `.env.local` file. -- Run `supabase functions serve your-function-name --env-file ./supabase/.env.local` +- Run `cp ./supabase/.env.local.example ./supabase/.env.local` to create your local `.env` file. +- Set the required variables for the corresponding edge functions in the `.env.local` file. +- Run `supabase functions serve --env-file ./supabase/.env.local --no-verify-jwt` - Run the CURL command in the example function, or use the [invoke method](https://supabase.com/docs/reference/javascript/invoke) on the Supabase client or use the test client [app](./app/). -## Test +## Test Client This example includes a create-react-app in the [`./app/`](./app/) directory which you can use as a sort of postman to make test requests both locally and to your deployed functions. @@ -45,10 +39,13 @@ Note: when testing locally, the select dropdown doesn't have any effect, and inv - Link your project - Within your project root run `supabase link --project-ref your-project-ref` - Set up your secrets + - Run `supabase secrets set --env-file ./supabase/.env.local` to set the environment variables. - + (This is assuming your local and production secrets are the same. The recommended way is to create a separate `.env` file for storing production secrets, and then use it to set the environment variables while deploying.) + - You can run `supabase secrets list` to check that it worked and also to see what other env vars are set by default. + - Deploy the function - Within your project root run `supabase functions deploy your-function-name` - In your [`./app/.env`](./app/.env) file remove the `SUPA_FUNCTION_LOCALHOST` variable and restart your Expo app. diff --git a/examples/edge-functions/edge-functions.code-workspace b/examples/edge-functions/edge-functions.code-workspace index 80054980ded..d3e694fd61c 100644 --- a/examples/edge-functions/edge-functions.code-workspace +++ b/examples/edge-functions/edge-functions.code-workspace @@ -18,6 +18,7 @@ "node_modules/": true, "app/": true, "supabase/functions/": true - } + }, + "deno.importMap": "./supabase/functions/import_map.json" } } diff --git a/examples/edge-functions/supabase/.env.local.example b/examples/edge-functions/supabase/.env.local.example index 2f2c44b56a5..981b2fdc1c4 100644 --- a/examples/edge-functions/supabase/.env.local.example +++ b/examples/edge-functions/supabase/.env.local.example @@ -1,3 +1,18 @@ +# cloudflare-turnstile +CLOUDFLARE_TURNSTILE_SECRET_KEY=your_secret_key + +# discord-bot +DISCORD_PUBLIC_KEY= + +# location +IPINFO_TOKEN="your https://ipinfo.io token" + +# postgres-on-the-edge +DATABASE_URL= + +# puppeteer +PUPPETEER_BROWSERLESS_IO_TOKEN= + # send-email-smtp SMTP_HOSTNAME="your.hostname.com" SMTP_PORT="2587" @@ -5,10 +20,14 @@ SMTP_USERNAME="your_username" SMTP_PASSWORD="your_password" SMTP_FROM="no-reply@example.com" +# stripe-webhooks +STRIPE_API_KEY="" +STRIPE_WEBHOOK_SIGNING_SECRET="" + # telegram-bot TELEGRAM_BOT_TOKEN="get it from https://t.me/BotFather" FUNCTION_SECRET="random secret" -# stripe-webhooks -STRIPE_API_KEY="" -STRIPE_WEBHOOK_SIGNING_SECRET="" \ No newline at end of file +# upstash-redis-counter +UPSTASH_REDIS_REST_URL= +UPSTASH_REDIS_REST_TOKEN= \ No newline at end of file diff --git a/examples/edge-functions/supabase/functions/.vscode/settings.json b/examples/edge-functions/supabase/functions/.vscode/settings.json index e40716fdd7e..1d800e858b2 100644 --- a/examples/edge-functions/supabase/functions/.vscode/settings.json +++ b/examples/edge-functions/supabase/functions/.vscode/settings.json @@ -1,5 +1,5 @@ { "deno.enable": true, - "deno.lint": true, - "deno.unstable": true + "deno.unstable": true, + "deno.importMap": "./import_map.json" } diff --git a/examples/edge-functions/supabase/functions/browser-with-cors/index.ts b/examples/edge-functions/supabase/functions/browser-with-cors/index.ts index 1ab04de4e1f..d022ef6035f 100644 --- a/examples/edge-functions/supabase/functions/browser-with-cors/index.ts +++ b/examples/edge-functions/supabase/functions/browser-with-cors/index.ts @@ -2,7 +2,7 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' +import { serve } from 'std/server' import { corsHeaders } from '../_shared/cors.ts' console.log(`Function "browser-with-cors" up and running!`) diff --git a/examples/edge-functions/supabase/functions/cloudflare-turnstile/README.md b/examples/edge-functions/supabase/functions/cloudflare-turnstile/README.md index 4d8bc5008cd..3ec3bf986bc 100644 --- a/examples/edge-functions/supabase/functions/cloudflare-turnstile/README.md +++ b/examples/edge-functions/supabase/functions/cloudflare-turnstile/README.md @@ -2,6 +2,10 @@ Turnstile is Cloudflare's CAPTCHA alternative: https://developers.cloudflare.com/turnstile/get-started/ +## Watch the Video Tutorial + +[![video tutorial](https://img.youtube.com/vi/OwW0znboh60/0.jpg)](https://www.youtube.com/watch?v=OwW0znboh60) + ## Setup - Follow these steps to set up a new site: https://developers.cloudflare.com/turnstile/get-started/ diff --git a/examples/edge-functions/supabase/functions/cloudflare-turnstile/index.ts b/examples/edge-functions/supabase/functions/cloudflare-turnstile/index.ts index 5d831d18ab7..02e440f3460 100644 --- a/examples/edge-functions/supabase/functions/cloudflare-turnstile/index.ts +++ b/examples/edge-functions/supabase/functions/cloudflare-turnstile/index.ts @@ -2,7 +2,7 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' +import { serve } from 'std/server' import { corsHeaders } from '../_shared/cors.ts' console.log(`Function "cloudflare-turnstile" up and running!`) @@ -55,7 +55,7 @@ serve(async (req) => { }) // To invoke: -// curl -i --location --request POST 'http://localhost:54321/functions/v1/' \ +// curl -i --location --request POST 'http://localhost:54321/functions/v1/cloudflare-turnstile' \ // --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0' \ // --header 'Content-Type: application/json' \ // --data '{"token":"cf-turnstile-response"}' diff --git a/examples/edge-functions/supabase/functions/discord-bot/README.md b/examples/edge-functions/supabase/functions/discord-bot/README.md index 5e9ad79f29b..7d66deb798c 100644 --- a/examples/edge-functions/supabase/functions/discord-bot/README.md +++ b/examples/edge-functions/supabase/functions/discord-bot/README.md @@ -5,6 +5,10 @@ - https://deno.com/deploy/docs/tutorial-discord-slash - https://discord.com/developers/docs/interactions/application-commands#slash-commands +## Watch the Video Tutorial + +[![video tutorial](https://img.youtube.com/vi/J24Bvo_m7DM/0.jpg)](https://www.youtube.com/watch?v=J24Bvo_m7DM) + ## Create an application on Discord Developer Portal 1. Go to [https://discord.com/developers/applications](https://discord.com/developers/applications) (login using your discord account if required). @@ -59,6 +63,6 @@ Open Discord, type `/Promise` and press **Enter**. ## Run locally ```bash -supabase functions serve discord-bot --no-verify-jwt --env-file ./supabase/functions/discord-bot/.env +supabase functions serve discord-bot --no-verify-jwt --env-file ./supabase/.env.local ngrok http 54321 ``` diff --git a/examples/edge-functions/supabase/functions/discord-bot/index.ts b/examples/edge-functions/supabase/functions/discord-bot/index.ts index 140bb30b767..abbf5985f2d 100644 --- a/examples/edge-functions/supabase/functions/discord-bot/index.ts +++ b/examples/edge-functions/supabase/functions/discord-bot/index.ts @@ -5,10 +5,10 @@ // Sift is a small routing library that abstracts away details like starting a // listener on a port, and provides a simple function (serve) that has an API // to invoke a function for a specific path. -import { json, serve, validateRequest } from 'https://deno.land/x/sift@0.6.0/mod.ts' +import { json, serve, validateRequest } from 'sift' // TweetNaCl is a cryptography library that we use to verify requests // from Discord. -import nacl from 'https://cdn.skypack.dev/tweetnacl@v1.0.3?dts' +import nacl from 'nacl' enum DiscordCommandType { Ping = 1, diff --git a/examples/edge-functions/supabase/functions/file-upload-storage/index.ts b/examples/edge-functions/supabase/functions/file-upload-storage/index.ts index 5593c0b6581..208619a7b49 100644 --- a/examples/edge-functions/supabase/functions/file-upload-storage/index.ts +++ b/examples/edge-functions/supabase/functions/file-upload-storage/index.ts @@ -1,8 +1,8 @@ // This example shows how to use Edge Functions to read incoming multipart/form-data request, // and write files to Supabase Storage and other fields to a database table. -import { Application, Router } from 'https://deno.land/x/oak/mod.ts' -import { createClient } from 'https://esm.sh/@supabase/supabase-js@2' +import { Application } from 'oak' +import { createClient } from '@supabase/supabase-js' const MB = 1024 * 1024 @@ -25,9 +25,9 @@ app.use(async (ctx) => { const supabaseClient = createClient( // Supabase API URL - env var exported by default. - Deno.env.get('SUPABASE_URL') ?? '', + Deno.env.get('SUPABASE_URL')!, // Supabase API ANON KEY - env var exported by default. - Deno.env.get('SUPABASE_ANON_KEY') ?? '' + Deno.env.get('SUPABASE_ANON_KEY')! ) //upload image to Storage diff --git a/examples/edge-functions/supabase/functions/get-tshirt-competition/README.md b/examples/edge-functions/supabase/functions/get-tshirt-competition/README.md index 8d0bcb0dd72..b83a049526c 100644 --- a/examples/edge-functions/supabase/functions/get-tshirt-competition/README.md +++ b/examples/edge-functions/supabase/functions/get-tshirt-competition/README.md @@ -15,9 +15,11 @@ Good luck trying to GET a T-Shirt! ### Serve this function locally ```bash -supabase functions serve --no-verify-jwt get-tshirt-competition +supabase functions serve --no-verify-jwt ``` +Navigate to http://localhost:54321/functions/v1/get-tshirt-competition?email=testr@test.de&twitter=thorwebdev&size=2XL&answer=20 + ### Deploy this function ```bash diff --git a/examples/edge-functions/supabase/functions/get-tshirt-competition/index.ts b/examples/edge-functions/supabase/functions/get-tshirt-competition/index.ts index 01e03605441..76b09b974c9 100644 --- a/examples/edge-functions/supabase/functions/get-tshirt-competition/index.ts +++ b/examples/edge-functions/supabase/functions/get-tshirt-competition/index.ts @@ -2,8 +2,8 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' -import { createClient } from 'https://esm.sh/@supabase/supabase-js@2' +import { serve } from 'std/server' +import { createClient } from '@supabase/supabase-js' import { corsHeaders } from '../_shared/cors.ts' console.log(`Function "get-tshirt-competition" up and running!`) diff --git a/examples/edge-functions/supabase/functions/github-action-deploy/index.ts b/examples/edge-functions/supabase/functions/github-action-deploy/index.ts index 2dc629d0cf8..423445b1608 100644 --- a/examples/edge-functions/supabase/functions/github-action-deploy/index.ts +++ b/examples/edge-functions/supabase/functions/github-action-deploy/index.ts @@ -2,23 +2,18 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from "https://deno.land/std@0.131.0/http/server.ts"; +import { serve } from 'std/server' -console.log("Hello from Functions!"); +console.log('Hello from Functions!') -serve(async (req) => { - const { name } = await req.json(); +serve((_req) => { const data = { message: `I was deployed via GitHub Actions!`, - }; + } return new Response(JSON.stringify(data), { - headers: { "Content-Type": "application/json" }, - }); -}); + headers: { 'Content-Type': 'application/json' }, + }) +}) -// To invoke: -// curl -i --location --request POST 'http://localhost:54321/functions/v1/' \ -// --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24ifQ.625_WdcF3KHqz5amU0x2X5WWHP-OEs_4qj0ssLNHzTs' \ -// --header 'Content-Type: application/json' \ -// --data '{"name":"Functions"}' +// To invoke: http://localhost:54321/functions/v1/github-action-deploy diff --git a/examples/edge-functions/supabase/functions/import_map.json b/examples/edge-functions/supabase/functions/import_map.json new file mode 100644 index 00000000000..087feb7c033 --- /dev/null +++ b/examples/edge-functions/supabase/functions/import_map.json @@ -0,0 +1,18 @@ +{ + "imports": { + "denomailer": "https://deno.land/x/denomailer@0.12.0/mod.ts", + "nacl": "https://cdn.skypack.dev/tweetnacl@v1.0.3?dts", + "oak": "https://deno.land/x/oak@v11.1.0/mod.ts", + "og_edge": "https://deno.land/x/og_edge@0.0.4/mod.ts", + "grammy": "https://deno.land/x/grammy@v1.8.3/mod.ts", + "react": "https://esm.sh/react@18.2.0", + "std/server": "https://deno.land/std@0.177.0/http/server.ts", + "stripe": "https://esm.sh/stripe@11.1.0?target=deno", + "sift": "https://deno.land/x/sift@0.6.0/mod.ts", + "@supabase/supabase-js": "https://esm.sh/@supabase/supabase-js@2.7.1", + "postgres": "https://deno.land/x/postgres@v0.14.2/mod.ts", + "puppeteer": "https://deno.land/x/puppeteer@16.2.0/mod.ts", + "React": "https://esm.sh/react@18.2.0?deno-std=0.177.0", + "upstash_redis": "https://deno.land/x/upstash_redis@v1.19.3/mod.ts" + } +} diff --git a/examples/edge-functions/supabase/functions/location/README.md b/examples/edge-functions/supabase/functions/location/README.md index b2c0bacceb7..de3010f4440 100644 --- a/examples/edge-functions/supabase/functions/location/README.md +++ b/examples/edge-functions/supabase/functions/location/README.md @@ -4,6 +4,14 @@ This example shows how you can get user location based on the IP provided in X-F You will need to signup for an account in https://ipinfo.io and provide it as `IPINFO_TOKEN` environment variable ([learn how to set environment variables to your functions](https://supabase.com/docs/guides/functions#secrets-and-environment-variables)). +## Develop locally + +```bash +supabase functions serve --env-file ./supabase/.env.local --no-verify-jwt +``` + +Navigate to http://localhost:54321/functions/v1/location + ## Deploy ```bash diff --git a/examples/edge-functions/supabase/functions/location/index.ts b/examples/edge-functions/supabase/functions/location/index.ts index c9df62475af..cda85ab7837 100644 --- a/examples/edge-functions/supabase/functions/location/index.ts +++ b/examples/edge-functions/supabase/functions/location/index.ts @@ -2,20 +2,29 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from "https://deno.land/std@0.131.0/http/server.ts" +import { serve } from 'std/server' function ips(req: Request) { - return req.headers.get("x-forwarded-for")?.split(/\s*,\s*/); + return req.headers.get('x-forwarded-for')?.split(/\s*,\s*/) } serve(async (req) => { - const clientIps = ips(req) || ['']; - const res = await fetch(`https://ipinfo.io/${clientIps[0]}?token=${Deno.env.get('IPINFO_TOKEN')}`, { - headers: { 'Content-Type': 'application/json'}}); - const { city, country } = await res.json(); - - return new Response( - JSON.stringify(`You're accessing from ${city}, ${country}`), - { headers: { "Content-Type": "application/json" } }, + const clientIps = ips(req) || [''] + const res = await fetch( + `https://ipinfo.io/${clientIps[0]}?token=${Deno.env.get('IPINFO_TOKEN')}`, + { + headers: { 'Content-Type': 'application/json' }, + } ) + if (res.ok) { + const { city, country } = await res.json() + + return new Response(JSON.stringify(`You're accessing from ${city}, ${country}`), { + headers: { 'Content-Type': 'application/json' }, + }) + } else { + return new Response(await res.text(), { + status: 400, + }) + } }) diff --git a/examples/edge-functions/supabase/functions/oak-server/README.md b/examples/edge-functions/supabase/functions/oak-server/README.md index b1db6166231..ed2795cfc71 100644 --- a/examples/edge-functions/supabase/functions/oak-server/README.md +++ b/examples/edge-functions/supabase/functions/oak-server/README.md @@ -5,7 +5,7 @@ This example shows how you can write functions using Oak server middleware (http ## Run locally ```bash -supabase functions serve oak-server +supabase functions serve --no-verify-jwt ``` Use cURL or Postman to make a POST request to http://localhost:54321/functions/v1/oak-server. @@ -20,5 +20,5 @@ Use cURL or Postman to make a POST request to http://localhost:54321/functions/v ## Deploy ```bash -supabase functions deploy oak-server +supabase functions deploy oak-server --no-verify-jwt ``` diff --git a/examples/edge-functions/supabase/functions/oak-server/index.ts b/examples/edge-functions/supabase/functions/oak-server/index.ts index 9be189be65a..965da32e4a0 100644 --- a/examples/edge-functions/supabase/functions/oak-server/index.ts +++ b/examples/edge-functions/supabase/functions/oak-server/index.ts @@ -1,4 +1,4 @@ -import { Application, Router } from 'https://deno.land/x/oak/mod.ts' +import { Application, Router } from 'oak' const router = new Router() router diff --git a/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/README.md b/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/README.md index 2adb83328c7..05158fd957e 100644 --- a/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/README.md +++ b/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/README.md @@ -9,7 +9,7 @@ Generate Open Graph images with Deno and Supabase Edge Functions and cache the g ## Run locally ```bash -supabase functions serve og-image-with-storage-cdn --no-verify-jwt +supabase functions serve --no-verify-jwt ``` Navigate to http://localhost:54321/functions/v1/og-image-with-storage-cdn?ticketNumber=3524&username=thorwebdev&name=Thor%20%E9%9B%B7%E7%A5%9E%20Schaeff diff --git a/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/handler.tsx b/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/handler.tsx index 80ef24e2ccd..202684370ea 100644 --- a/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/handler.tsx +++ b/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/handler.tsx @@ -1,6 +1,6 @@ -import React from 'https://esm.sh/react@18.2.0?deno-std=0.140.0' -import { ImageResponse } from 'https://deno.land/x/og_edge@0.0.4/mod.ts' -import { createClient } from 'https://esm.sh/@supabase/supabase-js@2' +import React from 'React' +import { ImageResponse } from 'og_edge' +import { createClient } from '@supabase/supabase-js' import { corsHeaders } from '../_shared/cors.ts' const STORAGE_URL = 'https://obuldanrptloktxcffvn.supabase.co/storage/v1/object/public/images/lw6' @@ -213,7 +213,7 @@ export async function handler(req: Request) { }) if (error) throw error - return generatedImage + return await fetch(`${STORAGE_URL}/tickets/${username}.png?v=3`) } catch (error) { return new Response(JSON.stringify({ error: error.message }), { headers: { ...corsHeaders, 'Content-Type': 'application/json' }, diff --git a/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/index.ts b/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/index.ts index 5b2cf3da0b9..0cf64b6e552 100644 --- a/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/index.ts +++ b/examples/edge-functions/supabase/functions/og-image-with-storage-cdn/index.ts @@ -2,7 +2,7 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from 'https://deno.land/std@0.140.0/http/server.ts' +import { serve } from 'std/server' import { handler } from './handler.tsx' diff --git a/examples/edge-functions/supabase/functions/opengraph/README.md b/examples/edge-functions/supabase/functions/opengraph/README.md index 9242524394e..866f222465a 100644 --- a/examples/edge-functions/supabase/functions/opengraph/README.md +++ b/examples/edge-functions/supabase/functions/opengraph/README.md @@ -8,7 +8,7 @@ Generate Open Graph images with Deno and Supabase Edge Functions, no framework n ## Run locally ```bash -supabase functions serve opengraph --no-verify-jwt +supabase functions serve --no-verify-jwt ``` Navigate to http://localhost:54321/functions/v1/opengraph diff --git a/examples/edge-functions/supabase/functions/opengraph/handler.tsx b/examples/edge-functions/supabase/functions/opengraph/handler.tsx index ef64dc4b8e9..d1bbcd5b2c2 100644 --- a/examples/edge-functions/supabase/functions/opengraph/handler.tsx +++ b/examples/edge-functions/supabase/functions/opengraph/handler.tsx @@ -1,5 +1,5 @@ -import React from 'https://esm.sh/react@18.2.0?deno-std=0.140.0' -import { ImageResponse } from 'https://deno.land/x/og_edge@0.0.4/mod.ts' +import React from 'React' +import { ImageResponse } from 'og_edge' export function handler(req: Request) { return new ImageResponse( diff --git a/examples/edge-functions/supabase/functions/opengraph/index.ts b/examples/edge-functions/supabase/functions/opengraph/index.ts index 5a7c90237cf..0a928de50a7 100644 --- a/examples/edge-functions/supabase/functions/opengraph/index.ts +++ b/examples/edge-functions/supabase/functions/opengraph/index.ts @@ -2,7 +2,7 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from 'https://deno.land/std@0.140.0/http/server.ts' +import { serve } from 'std/server' import { handler } from './handler.tsx' diff --git a/examples/edge-functions/supabase/functions/postgres-on-the-edge/index.ts b/examples/edge-functions/supabase/functions/postgres-on-the-edge/index.ts index 6ce14f6990d..871d24679fe 100644 --- a/examples/edge-functions/supabase/functions/postgres-on-the-edge/index.ts +++ b/examples/edge-functions/supabase/functions/postgres-on-the-edge/index.ts @@ -1,5 +1,5 @@ -import * as postgres from 'https://deno.land/x/postgres@v0.14.2/mod.ts' -import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' +import * as postgres from 'postgres' +import { serve } from 'std/server' // Get the connection string from the environment variable "DATABASE_URL" const databaseUrl = Deno.env.get('DATABASE_URL')! diff --git a/examples/edge-functions/supabase/functions/puppeteer/README.md b/examples/edge-functions/supabase/functions/puppeteer/README.md index 353df27fd05..57e99a74781 100644 --- a/examples/edge-functions/supabase/functions/puppeteer/README.md +++ b/examples/edge-functions/supabase/functions/puppeteer/README.md @@ -4,6 +4,14 @@ This example shows how you can use Puppeteer and a headless-browser to generate Since Edge Functions cannot run a Headless Browser instance due to resource constraints, you will need to use a hosted browser service like https://browserless.io. +## Develop locally + +```bash +supabase functions serve --env-file ./supabase/.env.local --no-verify-jwt +``` + +Navigate to http://localhost:54321/functions/v1/puppeteer + ## Deploy ```bash diff --git a/examples/edge-functions/supabase/functions/puppeteer/index.ts b/examples/edge-functions/supabase/functions/puppeteer/index.ts index 7eac140f29f..72efb56a723 100644 --- a/examples/edge-functions/supabase/functions/puppeteer/index.ts +++ b/examples/edge-functions/supabase/functions/puppeteer/index.ts @@ -1,11 +1,14 @@ -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' -import puppeteer from 'https://deno.land/x/puppeteer@16.2.0/mod.ts' +import { serve } from 'std/server' +import puppeteer from 'puppeteer' serve(async (req) => { try { + console.log(`wss://chrome.browserless.io?token=${Deno.env.get('PUPPETEER_BROWSERLESS_IO_KEY')}`) // Visit browserless.io to get your free API token const browser = await puppeteer.connect({ - browserWSEndpoint: 'wss://chrome.browserless.io?token=YOUR_API_TOKEN', + browserWSEndpoint: `wss://chrome.browserless.io?token=${Deno.env.get( + 'PUPPETEER_BROWSERLESS_IO_KEY' + )}`, }) const page = await browser.newPage() @@ -17,7 +20,7 @@ serve(async (req) => { return new Response(screenshot, { headers: { 'Content-Type': 'image/png' } }) } catch (e) { console.error(e) - return new Response(JSON.stringify(`Error occurred when generating the screenshot`), { + return new Response(JSON.stringify({ error: e.message }), { headers: { 'Content-Type': 'application/json' }, status: 500, }) diff --git a/examples/edge-functions/supabase/functions/read-storage/index.ts b/examples/edge-functions/supabase/functions/read-storage/index.ts index d7247b800dc..c32ccfd91bc 100644 --- a/examples/edge-functions/supabase/functions/read-storage/index.ts +++ b/examples/edge-functions/supabase/functions/read-storage/index.ts @@ -2,8 +2,8 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' -import { createClient } from 'https://esm.sh/@supabase/supabase-js@2' +import { serve } from 'std/server' +import { createClient } from '@supabase/supabase-js' const corsHeaders = { 'Access-Control-Allow-Origin': '*', diff --git a/examples/edge-functions/supabase/functions/restful-tasks/index.ts b/examples/edge-functions/supabase/functions/restful-tasks/index.ts index 67c36ed0a98..eea5219a074 100644 --- a/examples/edge-functions/supabase/functions/restful-tasks/index.ts +++ b/examples/edge-functions/supabase/functions/restful-tasks/index.ts @@ -2,8 +2,8 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' -import { createClient, SupabaseClient } from 'https://esm.sh/@supabase/supabase-js@2' +import { serve } from 'std/server' +import { createClient, SupabaseClient } from '@supabase/supabase-js' const corsHeaders = { 'Access-Control-Allow-Origin': '*', diff --git a/examples/edge-functions/supabase/functions/select-from-table-with-auth-rls/index.ts b/examples/edge-functions/supabase/functions/select-from-table-with-auth-rls/index.ts index f9dedb16a7d..72b95575cb9 100644 --- a/examples/edge-functions/supabase/functions/select-from-table-with-auth-rls/index.ts +++ b/examples/edge-functions/supabase/functions/select-from-table-with-auth-rls/index.ts @@ -2,8 +2,8 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' -import { createClient } from 'https://esm.sh/@supabase/supabase-js@2' +import { serve } from 'std/server' +import { createClient } from '@supabase/supabase-js' import { corsHeaders } from '../_shared/cors.ts' console.log(`Function "select-from-table-with-auth-rls" up and running!`) diff --git a/examples/edge-functions/supabase/functions/send-email-smtp/README.md b/examples/edge-functions/supabase/functions/send-email-smtp/README.md index 02e6d5a6b08..68b7dbad82b 100644 --- a/examples/edge-functions/supabase/functions/send-email-smtp/README.md +++ b/examples/edge-functions/supabase/functions/send-email-smtp/README.md @@ -13,4 +13,4 @@ Note: `SMTP_PORT` must be a port other than `25`, `465`, and `587` as Deno Deplo ## Test locally - `cp ./supabase/.env.local.example ./supabase/.env.local` -- `supabase functions serve send-email-smtp --env-file ./supabase/.env.local` \ No newline at end of file +- `supabase functions serve --env-file ./supabase/.env.local` diff --git a/examples/edge-functions/supabase/functions/send-email-smtp/index.ts b/examples/edge-functions/supabase/functions/send-email-smtp/index.ts index 4958b8fa153..d0abf117129 100644 --- a/examples/edge-functions/supabase/functions/send-email-smtp/index.ts +++ b/examples/edge-functions/supabase/functions/send-email-smtp/index.ts @@ -2,14 +2,14 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' -import { SmtpClient } from 'https://deno.land/x/denomailer@0.12.0/mod.ts' +import { serve } from 'std/server' +import { SmtpClient } from 'denomailer' const smtp = new SmtpClient() console.log(`Function "send-email-smtp" up and running!`) -serve(async (req) => { +serve(async (_req) => { await smtp.connect({ hostname: Deno.env.get('SMTP_HOSTNAME')!, port: Number(Deno.env.get('SMTP_PORT')!), @@ -24,7 +24,7 @@ serve(async (req) => { subject: `Hello from Supabase Edge Functions`, content: `Hello Functions \o/`, }) - } catch (error: any) { + } catch (error) { return new Response(error.message, { status: 500 }) } @@ -41,7 +41,7 @@ serve(async (req) => { }) // To invoke: -// curl -i --location --request POST 'http://localhost:54321/functions/v1/' \ +// curl -i --location --request POST 'http://localhost:54321/functions/v1/send-email-smtp' \ // --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24ifQ.625_WdcF3KHqz5amU0x2X5WWHP-OEs_4qj0ssLNHzTs' \ // --header 'Content-Type: application/json' \ // --data '{"name":"Functions"}' diff --git a/examples/edge-functions/supabase/functions/stripe-webhooks/README.md b/examples/edge-functions/supabase/functions/stripe-webhooks/README.md index 2d5a7a24d5d..337352277fb 100644 --- a/examples/edge-functions/supabase/functions/stripe-webhooks/README.md +++ b/examples/edge-functions/supabase/functions/stripe-webhooks/README.md @@ -9,7 +9,7 @@ Also check out our full Stripe Payments examples for [React Native (Expo)](https ## Test locally - Terminal 1: - - `supabase functions serve --no-verify-jwt stripe-webhooks --env-file ./supabase/.env.local` + - `supabase functions serve --no-verify-jwt --env-file ./supabase/.env.local` - Terminal 2: - `stripe listen --forward-to localhost:54321/functions/v1/` - Terminal 3 (optional): diff --git a/examples/edge-functions/supabase/functions/stripe-webhooks/index.ts b/examples/edge-functions/supabase/functions/stripe-webhooks/index.ts index 6b159a2a5b4..a0bbb7dc958 100644 --- a/examples/edge-functions/supabase/functions/stripe-webhooks/index.ts +++ b/examples/edge-functions/supabase/functions/stripe-webhooks/index.ts @@ -2,20 +2,21 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from 'https://deno.land/std@0.132.0/http/server.ts' +import { serve } from 'std/server' -// esm.sh is used to compile stripe-node to be compatible with ES modules. -import Stripe from 'https://esm.sh/stripe@10.13.0?target=deno&no-check&deno-std=0.132.0' +// Import via bare specifier thanks to the import_map.json file. +import Stripe from 'stripe' -const stripe = Stripe(Deno.env.get('STRIPE_API_KEY'), { +const stripe = new Stripe(Deno.env.get('STRIPE_API_KEY') as string, { // This is needed to use the Fetch API rather than relying on the Node http // package. + apiVersion: '2022-11-15', httpClient: Stripe.createFetchHttpClient(), }) // This is needed in order to use the Web Crypto API in Deno. const cryptoProvider = Stripe.createSubtleCryptoProvider() -console.log(`Function "stripe-webhooks" up and running!`) +console.log('Hello from Stripe Webhook!') serve(async (request) => { const signature = request.headers.get('Stripe-Signature') @@ -27,8 +28,8 @@ serve(async (request) => { try { receivedEvent = await stripe.webhooks.constructEventAsync( body, - signature, - Deno.env.get('STRIPE_WEBHOOK_SIGNING_SECRET'), + signature!, + Deno.env.get('STRIPE_WEBHOOK_SIGNING_SECRET')!, undefined, cryptoProvider ) @@ -36,25 +37,5 @@ serve(async (request) => { return new Response(err.message, { status: 400 }) } console.log(`🔔 Event received: ${receivedEvent.id}`) - - // Secondly, we use this event to query the Stripe API in order to avoid - // handling any forged event. If available, we use the idempotency key. - const requestOptions = - receivedEvent.request && receivedEvent.request.idempotency_key - ? { - idempotencyKey: receivedEvent.request.idempotency_key, - } - : {} - - let retrievedEvent - try { - retrievedEvent = await stripe.events.retrieve(receivedEvent.id, requestOptions) - } catch (err) { - return new Response(err.message, { status: 400 }) - } - - return new Response(JSON.stringify({ id: retrievedEvent.id, status: 'ok' }), { - status: 200, - headers: { 'Content-Type': 'application/json' }, - }) + return new Response(JSON.stringify({ ok: true }), { status: 200 }) }) diff --git a/examples/edge-functions/supabase/functions/telegram-bot/index.ts b/examples/edge-functions/supabase/functions/telegram-bot/index.ts index eab5aed9fd6..ecaa9916327 100644 --- a/examples/edge-functions/supabase/functions/telegram-bot/index.ts +++ b/examples/edge-functions/supabase/functions/telegram-bot/index.ts @@ -2,34 +2,28 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from "https://deno.land/std@0.131.0/http/server.ts" +import { serve } from 'std/server' console.log(`Function "telegram-bot" up and running!`) -import { Bot, webhookCallback } from "https://deno.land/x/grammy@v1.8.3/mod.ts"; +import { Bot, webhookCallback } from 'grammy' -const bot = new Bot(Deno.env.get('TELEGRAM_BOT_TOKEN') || ''); +const bot = new Bot(Deno.env.get('TELEGRAM_BOT_TOKEN') || '') -bot.command("start", (ctx) => ctx.reply("Welcome! Up and running.")); +bot.command('start', (ctx) => ctx.reply('Welcome! Up and running.')) bot.command('ping', (ctx) => ctx.reply(`Pong! ${new Date()} ${Date.now()}`)) -const handleUpdate = webhookCallback(bot, "std/http"); +const handleUpdate = webhookCallback(bot, 'std/http') serve(async (req) => { try { - const url = new URL(req.url); - if (url.searchParams.get('secret') !== Deno.env.get('FUNCTION_SECRET')) + const url = new URL(req.url) + if (url.searchParams.get('secret') !== Deno.env.get('FUNCTION_SECRET')) return new Response('not allowed', { status: 405 }) - return await handleUpdate(req); + return await handleUpdate(req) } catch (err) { - console.error(err); + console.error(err) } }) - -// To invoke: -// curl -i --location --request POST 'http://localhost:54321/functions/v1/' \ -// --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24ifQ.625_WdcF3KHqz5amU0x2X5WWHP-OEs_4qj0ssLNHzTs' \ -// --header 'Content-Type: application/json' \ -// --data '{"name":"Functions"}' diff --git a/examples/edge-functions/supabase/functions/upstash-redis-counter/.env.example b/examples/edge-functions/supabase/functions/upstash-redis-counter/.env.example deleted file mode 100644 index d0785c19978..00000000000 --- a/examples/edge-functions/supabase/functions/upstash-redis-counter/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -UPSTASH_REDIS_REST_URL= -UPSTASH_REDIS_REST_TOKEN= \ No newline at end of file diff --git a/examples/edge-functions/supabase/functions/upstash-redis-counter/README.md b/examples/edge-functions/supabase/functions/upstash-redis-counter/README.md index 3d33a9e7dd7..dd854b5a07b 100644 --- a/examples/edge-functions/supabase/functions/upstash-redis-counter/README.md +++ b/examples/edge-functions/supabase/functions/upstash-redis-counter/README.md @@ -9,7 +9,7 @@ Create a Redis database using the [Upstash Console](https://console.upstash.com/ Select the `Global` type to minimize the latency from all edge locations. Copy the `UPSTASH_REDIS_REST_URL` and `UPSTASH_REDIS_REST_TOKEN` to your .env file. You'll find them under **Details > REST API > .env**. ```bash -cp supabase/functions/upstash-redis-counter/.env.example supabase/functions/upstash-redis-counter/.env +cp supabase/.env.local.example supabase/.env.local ``` ## Run locally @@ -18,7 +18,7 @@ Make sure you have the latest version of the [Supabase CLI installed](https://su ```bash supabase start -supabase functions serve upstash-redis-counter --no-verify-jwt --env-file supabase/functions/upstash-redis-counter/.env +supabase functions serve --no-verify-jwt --env-file supabase/.env.local ``` Navigate to http://localhost:54321/functions/v1/upstash-redis-counter. @@ -27,5 +27,5 @@ Navigate to http://localhost:54321/functions/v1/upstash-redis-counter. ```bash supabase functions deploy upstash-redis-counter --no-verify-jwt -supabase secrets set --env-file supabase/functions/upstash-redis-counter/.env +supabase secrets set --env-file supabase/.env.local ``` diff --git a/examples/edge-functions/supabase/functions/upstash-redis-counter/index.ts b/examples/edge-functions/supabase/functions/upstash-redis-counter/index.ts index 911424209c9..bf630d0287f 100644 --- a/examples/edge-functions/supabase/functions/upstash-redis-counter/index.ts +++ b/examples/edge-functions/supabase/functions/upstash-redis-counter/index.ts @@ -2,8 +2,8 @@ // https://deno.land/manual/getting_started/setup_your_environment // This enables autocomplete, go to definition, etc. -import { serve } from 'https://deno.land/std@0.177.0/http/server.ts' -import { Redis } from 'https://deno.land/x/upstash_redis@v1.19.3/mod.ts' +import { serve } from 'std/server' +import { Redis } from 'upstash_redis' console.log(`Function "upstash-redis-counter" up and running!`) From 14bb72b340460d146d6a6018264db0b95e869d54 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Fri, 17 Feb 2023 17:13:42 +1100 Subject: [PATCH 034/230] update package-lock.json --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index c6da4ad6636..f39429b25f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -66681,7 +66681,7 @@ "version": "file:studio", "requires": { "@babel/core": "^7.17.5", - "@graphiql/react": "*", + "@graphiql/react": "^0.15.0", "@graphiql/toolkit": "^0.8.0", "@hcaptcha/react-hcaptcha": "^1.4.4", "@headlessui/react": "^1.4.1", @@ -66749,7 +66749,7 @@ "generate-password": "^1.7.0", "graphiql": "^2.2.0", "graphql": "^16.6.0", - "graphql-ws": "*", + "graphql-ws": "^5.11.3", "html-to-image": "^1.10.8", "immutability-helper": "^3.1.1", "ip-address": "^8.1.0", From ce30f82d2f2fbccedd17cfcf550e6f9ed2f21d55 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 17 Feb 2023 14:50:45 +0800 Subject: [PATCH 035/230] Update database-usage.mdx --- .../pages/guides/platform/database-usage.mdx | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index cf354ebf325..d443aa4d10f 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -57,17 +57,18 @@ Regular operation (read-write mode) is automatically re-enabled once usage is be ### Increasing available disk size -1. [Upgrade to the Pro or Enterprise plan](https://app.supabase.com/project/_/settings/billing/subscription) to increase your quota and expand your disk size automatically. +If your project is on the free tier, you can [Upgrade to the Pro or Enterprise tier](https://app.supabase.com/project/_/settings/billing/subscription) so that your disk size can start to [auto scale](#paid-tier-disk-auto-scaling) beyond 8GB. -2. Delete data from your project's database to lower its disk usage. - If your database is already in read-only mode, run the following command to change the transaction mode to read-write for your session: +For Free tier projects that do not wish to upgrade, or Pro tier projects that are nearing their disk size limit, you can increase available disk size by deleting data from your project's database to lower its disk usage. - ```sql - SET - default_transaction_read_only = 'off'; - ``` +If your free tier project database is already in read-only mode, run the following command to change the transaction mode to read-write for your session: - This allows you to delete data from within the session. +```sql +SET + default_transaction_read_only = 'off'; +``` + +This allows you to delete data from within the session. ### Preoccupied Space From 747cb3d02e7f7bff141c866e168bbcca0447b762 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 17 Feb 2023 16:54:10 +0800 Subject: [PATCH 036/230] Update edge functions home page --- .../Functions/EdgeFunctionsList.tsx | 123 ++++++++++++++++++ .../Functions/TerminalInstructions.tsx | 15 +-- .../components/interfaces/Functions/index.ts | 3 +- studio/components/layouts/FunctionsLayout.tsx | 72 +++++++--- studio/pages/_app.tsx | 2 + .../pages/project/[ref]/functions/index.tsx | 49 +------ 6 files changed, 193 insertions(+), 71 deletions(-) create mode 100644 studio/components/interfaces/Functions/EdgeFunctionsList.tsx diff --git a/studio/components/interfaces/Functions/EdgeFunctionsList.tsx b/studio/components/interfaces/Functions/EdgeFunctionsList.tsx new file mode 100644 index 00000000000..0ff6d7aa81b --- /dev/null +++ b/studio/components/interfaces/Functions/EdgeFunctionsList.tsx @@ -0,0 +1,123 @@ +import dayjs from 'dayjs' +import { FC, useState } from 'react' +import * as Tooltip from '@radix-ui/react-tooltip' + +import { useParams, useStore } from 'hooks' +import Table from 'components/to-be-cleaned/Table' +import FunctionsListItem from './FunctionsListItem' +import { Function } from 'components/interfaces/Functions/Functions.types' +import { IconUpload, IconCheck, IconClipboard, IconClock } from 'ui' +import { useRouter } from 'next/router' + +interface Props {} + +const EdgeFunctionsList: FC = () => { + const router = useRouter() + const { ref } = useParams() + const { ui, functions: functionsStore } = useStore() + const functions: Function[] = functionsStore.list() ?? [] + + const restUrl = ui.selectedProject?.restUrl + const restUrlTld = new URL(restUrl as string).hostname.split('.').pop() + + return ( +
+
+ {functions.map((fn) => { + const [isCopied, setIsCopied] = useState(false) + const functionUrl = `https://${ref}.functions.supabase.${restUrlTld}/${fn.slug}` + + return ( +
router.push(`/project/${ref}/functions/${fn.id}`)} + > +
+

{fn.name}

+
+

{functionUrl}

+ +
+
+
+ + +

Deployment {fn.version}

+
+ + +
+ + Deployment history coming soon + +
+
+
+ + +
+ +

{dayjs(fn.updated_at).fromNow()}

+
+
+ + +
+ + Last updated on {dayjs(fn.updated_at).format('DD MMM, YYYY HH:mm')} + +
+
+
+
+
+ ) + })} +
+
+ ) +} + +export default EdgeFunctionsList diff --git a/studio/components/interfaces/Functions/TerminalInstructions.tsx b/studio/components/interfaces/Functions/TerminalInstructions.tsx index f8f30b523ab..16a2e2eea21 100644 --- a/studio/components/interfaces/Functions/TerminalInstructions.tsx +++ b/studio/components/interfaces/Functions/TerminalInstructions.tsx @@ -10,19 +10,16 @@ import { Commands } from './Functions.types' interface Props { closable?: boolean + removeBorder?: boolean } -const TerminalInstructions: FC = ({ closable = false }) => { +const TerminalInstructions: FC = ({ closable = false, removeBorder = false }) => { const router = useRouter() const { ref: projectRef } = useParams() - const [showInstructions, setShowInstructions] = useState(!closable) - const { data: tokens } = useAccessTokensQuery() + const { data: settings } = useProjectApiQuery({ projectRef }) - const { data: settings } = useProjectApiQuery({ - projectRef, - }) const apiService = settings?.autoApiService const anonKey = apiService?.service_api_keys.find((x) => x.name === 'anon key') ? apiService.defaultApiKey @@ -86,7 +83,9 @@ const TerminalInstructions: FC = ({ closable = false }) => { return (
@@ -107,7 +106,7 @@ const TerminalInstructions: FC = ({ closable = false }) => {
)}
-
+
diff --git a/studio/components/interfaces/Functions/index.ts b/studio/components/interfaces/Functions/index.ts index b096ff5e604..e2d3d9dda40 100644 --- a/studio/components/interfaces/Functions/index.ts +++ b/studio/components/interfaces/Functions/index.ts @@ -1,5 +1,6 @@ +import EdgeFunctionsList from './EdgeFunctionsList' import FunctionsListItem from './FunctionsListItem' import FunctionsEmptyState from './FunctionsEmptyState' import TerminalInstructions from './TerminalInstructions' -export { FunctionsListItem, FunctionsEmptyState, TerminalInstructions } +export { EdgeFunctionsList, FunctionsListItem, FunctionsEmptyState, TerminalInstructions } diff --git a/studio/components/layouts/FunctionsLayout.tsx b/studio/components/layouts/FunctionsLayout.tsx index 511d401da95..67d65717dea 100644 --- a/studio/components/layouts/FunctionsLayout.tsx +++ b/studio/components/layouts/FunctionsLayout.tsx @@ -1,14 +1,15 @@ import Link from 'next/link' import { useRouter } from 'next/router' -import { FC, useEffect, ReactNode } from 'react' +import { FC, useEffect, ReactNode, useState } from 'react' import { observer } from 'mobx-react-lite' -import { IconCode } from 'ui' +import { Button, IconExternalLink, IconCode, Modal, IconTerminal } from 'ui' -import { checkPermissions, useStore, withAuth } from 'hooks' +import { checkPermissions, useParams, useStore, withAuth } from 'hooks' import FunctionsNav from '../interfaces/Functions/FunctionsNav' import BaseLayout from 'components/layouts' import NoPermission from 'components/ui/NoPermission' import { PermissionAction } from '@supabase/shared-types/out/constants' +import { TerminalInstructions } from 'components/interfaces/Functions' interface Props { title?: string @@ -16,10 +17,10 @@ interface Props { } const FunctionsLayout: FC = ({ title, children }) => { - const { functions, ui } = useStore() const router = useRouter() - - const { id, ref } = router.query + const { id, ref } = useParams() + const { functions, ui } = useStore() + const [showTerminalInstructions, setShowTerminalInstructions] = useState(false) useEffect(() => { if (ui.selectedProjectRef) functions.load() @@ -87,7 +88,7 @@ const FunctionsLayout: FC = ({ title, children }) => { ].join(' ')} >
-
+
= ({ title, children }) => {
-
- -

- Edge Functions -

- -

Beta

+
+
+ +

+ Edge Functions +

+ +

Beta

+
+
+ + + + + + +
- {name && ( + {/* {name && ( <> = ({ title, children }) => {
{name}
- )} + )} */}
{item && } @@ -140,6 +162,24 @@ const FunctionsLayout: FC = ({ title, children }) => {
)} + + setShowTerminalInstructions(false)} + header={

Deploying an edge function to your project

} + customFooter={ +
+ +
+ } + > +
+ +
+
) } diff --git a/studio/pages/_app.tsx b/studio/pages/_app.tsx index d97675d69ef..f542d30ca75 100644 --- a/studio/pages/_app.tsx +++ b/studio/pages/_app.tsx @@ -16,6 +16,7 @@ import dayjs from 'dayjs' import customParseFormat from 'dayjs/plugin/customParseFormat' import timezone from 'dayjs/plugin/timezone' import utc from 'dayjs/plugin/utc' +import relativeTime from 'dayjs/plugin/relativeTime' // @ts-ignore import Prism from 'prism-react-renderer/prism' @@ -44,6 +45,7 @@ import useAutoAuthRedirect from 'hooks/misc/useAutoAuthRedirect' dayjs.extend(customParseFormat) dayjs.extend(utc) dayjs.extend(timezone) +dayjs.extend(relativeTime) dart(Prism) diff --git a/studio/pages/project/[ref]/functions/index.tsx b/studio/pages/project/[ref]/functions/index.tsx index f8778eb09f5..7848cff03fe 100644 --- a/studio/pages/project/[ref]/functions/index.tsx +++ b/studio/pages/project/[ref]/functions/index.tsx @@ -1,50 +1,8 @@ import { observer } from 'mobx-react-lite' - -import { NextPageWithLayout } from 'types' import { useStore } from 'hooks' +import { NextPageWithLayout } from 'types' import FunctionsLayout from 'components/layouts/FunctionsLayout' - -import Table from 'components/to-be-cleaned/Table' -import { Function } from 'components/interfaces/Functions/Functions.types' -import { - FunctionsListItem, - FunctionsEmptyState, - TerminalInstructions, -} from 'components/interfaces/Functions' - -const FunctionsList = ({ functions }: { functions: Function[] }) => { - return ( - <> -
-
- {`${functions.length} function${ - functions.length > 1 ? 's' : '' - } deployed`} -
-
- - Name - URL - Created - Last updated - Version - Status - - } - body={ - <> - {functions.length > 0 && - functions.map((item: any) => )} - - } - /> - - - - ) -} +import { EdgeFunctionsList, FunctionsEmptyState } from 'components/interfaces/Functions' const PageLayout: NextPageWithLayout = () => { const { functions } = useStore() @@ -52,8 +10,7 @@ const PageLayout: NextPageWithLayout = () => { return hasFunctions ? (
- - +
) : ( From c5f162a8e699dd816bda64e5608bb3554919a7a5 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Fri, 17 Feb 2023 18:27:06 +0800 Subject: [PATCH 037/230] Shift edge functions to RQ and implement delete function --- .../Functions/EdgeFunctionDetails.tsx | 296 ++++++++++++++++++ .../Functions/EdgeFunctionsList.tsx | 123 -------- .../interfaces/Functions/EdgeFunctionsRow.tsx | 111 +++++++ .../Functions/FunctionsListItem.tsx | 62 ---- .../interfaces/Functions/FunctionsNav.tsx | 4 +- .../components/interfaces/Functions/index.ts | 5 +- studio/components/layouts/FunctionsLayout.tsx | 41 ++- .../edge-functions-delete-mutation.ts | 43 +++ .../edge-functions/edge-functions-query.ts | 57 ++++ studio/data/edge-functions/keys.ts | 3 + .../project/[ref]/functions/[id]/details.tsx | 231 +------------- .../pages/project/[ref]/functions/index.tsx | 27 +- 12 files changed, 559 insertions(+), 444 deletions(-) create mode 100644 studio/components/interfaces/Functions/EdgeFunctionDetails.tsx delete mode 100644 studio/components/interfaces/Functions/EdgeFunctionsList.tsx create mode 100644 studio/components/interfaces/Functions/EdgeFunctionsRow.tsx delete mode 100644 studio/components/interfaces/Functions/FunctionsListItem.tsx create mode 100644 studio/data/edge-functions/edge-functions-delete-mutation.ts create mode 100644 studio/data/edge-functions/edge-functions-query.ts create mode 100644 studio/data/edge-functions/keys.ts diff --git a/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx b/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx new file mode 100644 index 00000000000..4f25d522982 --- /dev/null +++ b/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx @@ -0,0 +1,296 @@ +import dayjs from 'dayjs' +import { useRouter } from 'next/router' +import { FC, useState, useEffect } from 'react' +import * as Tooltip from '@radix-ui/react-tooltip' +import { PermissionAction } from '@supabase/shared-types/out/constants' +import { Alert, IconGlobe, IconTerminal, IconMinimize2, IconMaximize2, Button, Modal } from 'ui' + +import { useStore, useParams, checkPermissions } from 'hooks' +import Panel from 'components/ui/Panel' +import CommandRender from './CommandRender' +import { useProjectApiQuery } from 'data/config/project-api-query' +import { useEdgeFunctionDeleteMutation } from 'data/edge-functions/edge-functions-delete-mutation' + +interface Props {} + +const EdgeFunctionDetails: FC = () => { + const router = useRouter() + const { functions, ui } = useStore() + const { ref: projectRef, id } = useParams() + const [showDeleteModal, setShowDeleteModal] = useState(false) + const [showInstructions, setShowInstructions] = useState(false) + const [selectedFunction, setSelectedFunction] = useState(null) + + const canDeleteEdgeFunction = checkPermissions(PermissionAction.FUNCTIONS_WRITE, '*') + const { mutateAsync: deleteEdgeFunction, isLoading: isDeleting } = useEdgeFunctionDeleteMutation() + + useEffect(() => { + setSelectedFunction(functions.byId(id)) + }, [functions.isLoaded, ui.selectedProject]) + + const { data: settings } = useProjectApiQuery({ projectRef }) + const functionUrl = `https://${projectRef}.functions.supabase.co/${selectedFunction?.slug}` + + // get the .co or .net TLD from the restUrl + const restUrl = ui.selectedProject?.restUrl + const restUrlTld = new URL(restUrl as string).hostname.split('.').pop() + + // Get the API service + const apiService = settings?.autoApiService + const anonKey = apiService?.service_api_keys.find((x) => x.name === 'anon key') + ? apiService.defaultApiKey + : undefined + + const endpoint = apiService?.app_config.endpoint ?? '' + const endpointSections = endpoint.split('.') + const functionsEndpoint = [ + ...endpointSections.slice(0, 1), + 'functions', + ...endpointSections.slice(1), + ].join('.') + + const onConfirmDelete = async () => { + if (!projectRef) return console.error('Project ref is required') + if (selectedFunction === undefined) return console.error('No edge function selected') + + try { + await deleteEdgeFunction({ projectRef, slug: selectedFunction.slug }) + ui.setNotification({ + category: 'success', + message: `Succesfully deleted "${selectedFunction.name}"`, + }) + router.push(`/project/${projectRef}/functions`) + } catch (error: any) { + ui.setNotification({ + category: 'error', + message: `Failed to delete function: ${error.message}`, + }) + } + } + + const managementCommands: any = [ + { + command: `supabase functions deploy ${selectedFunction?.slug}`, + description: 'This will overwrite the deployed function with your new function', + jsx: () => { + return ( + <> + supabase functions deploy{' '} + {selectedFunction?.slug} + + ) + }, + comment: 'Deploy a new version', + }, + { + command: `supabase functions delete ${selectedFunction?.slug}`, + description: 'This will remove the function and all the logs associated with it', + jsx: () => { + return ( + <> + supabase functions delete{' '} + {selectedFunction?.slug} + + ) + }, + comment: 'Delete the function', + }, + ] + + const secretCommands: any = [ + { + command: `supabase secrets list`, + description: 'This will list all the secrets for your project', + jsx: () => { + return ( + <> + supabase secrets list + + ) + }, + comment: 'View all secrets', + }, + { + command: `supabase secrets set NAME1=VALUE1 NAME2=VALUE2`, + description: 'This will set secrets for your project', + jsx: () => { + return ( + <> + supabase secrets set NAME1=VALUE1 NAME2=VALUE2 + + ) + }, + comment: 'Set secrets for your project', + }, + { + command: `supabase secrets unset NAME1 NAME2 `, + description: 'This will delete secrets for your project', + jsx: () => { + return ( + <> + supabase secrets unset NAME1 NAME2 + + ) + }, + comment: 'Unset secrets for your project', + }, + ] + + const invokeCommands: any = [ + { + command: `curl -L -X POST 'https://${projectRef}.functions.supabase.${restUrlTld}/${ + selectedFunction?.slug + }' -H 'Authorization: Bearer ${anonKey ?? '[YOUR ANON KEY]'}' --data '{"name":"Functions"}'`, + description: 'Invokes the hello function', + jsx: () => { + return ( + <> + curl -L -X POST 'https://{functionsEndpoint}/ + {selectedFunction?.slug}' -H 'Authorization: Bearer [YOUR ANON KEY]'{' '} + {`--data '{"name":"Functions"}'`} + + ) + }, + comment: 'Invoke your function', + }, + ] + + return ( + <> +
+
+
+

Function Name

+

{selectedFunction?.name}

+
+ +
+

Endpoint URL

+

{functionUrl}

+
+ +
+

Created At

+

+ {selectedFunction?.created_at && + dayjs(selectedFunction.created_at).format('dddd, MMMM D, YYYY h:mm A')} +

+
+ +
+

Last Updated At

+

+ {selectedFunction?.updated_at && + dayjs(selectedFunction.updated_at).format('dddd, MMMM D, YYYY h:mm A')} +

+
+ +
+ Deployment +
{selectedFunction?.version}
+
+ +
+ Regions +
+
+ + Earth +
+ All functions are deployed globally +
+
+
+ +
+
+
+
+ +
+

Command line access

+
+
setShowInstructions(!showInstructions)}> + {showInstructions ? ( + + ) : ( + + )} +
+
+ +
Deployment management
+ +
Invoke
+ +
Secrets management
+ +
+ + Delete Edge Function

}> + + +

+ Make sure you have made a backup if you want to restore your edge function +

+ + + + + {!canDeleteEdgeFunction && ( + + +
+ + You need additional permissions to delete an edge function + +
+
+ )} +
+
+
+
+
+ + Confirm to delete {selectedFunction?.name}} + visible={showDeleteModal} + loading={isDeleting} + onCancel={() => setShowDeleteModal(false)} + onConfirm={onConfirmDelete} + > +
+ + + Ensure that you have made a backup if you want to restore your edge function + + +
+
+ + ) +} + +export default EdgeFunctionDetails diff --git a/studio/components/interfaces/Functions/EdgeFunctionsList.tsx b/studio/components/interfaces/Functions/EdgeFunctionsList.tsx deleted file mode 100644 index 0ff6d7aa81b..00000000000 --- a/studio/components/interfaces/Functions/EdgeFunctionsList.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import dayjs from 'dayjs' -import { FC, useState } from 'react' -import * as Tooltip from '@radix-ui/react-tooltip' - -import { useParams, useStore } from 'hooks' -import Table from 'components/to-be-cleaned/Table' -import FunctionsListItem from './FunctionsListItem' -import { Function } from 'components/interfaces/Functions/Functions.types' -import { IconUpload, IconCheck, IconClipboard, IconClock } from 'ui' -import { useRouter } from 'next/router' - -interface Props {} - -const EdgeFunctionsList: FC = () => { - const router = useRouter() - const { ref } = useParams() - const { ui, functions: functionsStore } = useStore() - const functions: Function[] = functionsStore.list() ?? [] - - const restUrl = ui.selectedProject?.restUrl - const restUrlTld = new URL(restUrl as string).hostname.split('.').pop() - - return ( -
-
- {functions.map((fn) => { - const [isCopied, setIsCopied] = useState(false) - const functionUrl = `https://${ref}.functions.supabase.${restUrlTld}/${fn.slug}` - - return ( -
router.push(`/project/${ref}/functions/${fn.id}`)} - > -
-

{fn.name}

-
-

{functionUrl}

- -
-
-
- - -

Deployment {fn.version}

-
- - -
- - Deployment history coming soon - -
-
-
- - -
- -

{dayjs(fn.updated_at).fromNow()}

-
-
- - -
- - Last updated on {dayjs(fn.updated_at).format('DD MMM, YYYY HH:mm')} - -
-
-
-
-
- ) - })} -
-
- ) -} - -export default EdgeFunctionsList diff --git a/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx b/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx new file mode 100644 index 00000000000..185f01348e3 --- /dev/null +++ b/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx @@ -0,0 +1,111 @@ +import dayjs from 'dayjs' +import { useRouter } from 'next/router' +import { FC, useState } from 'react' +import * as Tooltip from '@radix-ui/react-tooltip' +import { IconUpload, IconCheck, IconClipboard } from 'ui' + +import { useParams, useStore } from 'hooks' +import { EdgeFunctionsResponse } from 'data/edge-functions/edge-functions-query' + +interface Props { + fn: EdgeFunctionsResponse +} + +const EdgeFunctionsRow: FC = ({ fn }) => { + const router = useRouter() + const { ref } = useParams() + const { ui } = useStore() + const [isCopied, setIsCopied] = useState(false) + + const restUrl = ui.selectedProject?.restUrl + const restUrlTld = new URL(restUrl as string).hostname.split('.').pop() + const functionUrl = `https://${ref}.functions.supabase.${restUrlTld}/${fn.slug}` + + return ( +
router.push(`/project/${ref}/functions/${fn.id}`)} + > +
+

{fn.name}

+
+

{functionUrl}

+ +
+
+
+ + +

Deployment {fn.version}

+
+ + +
+ Deployment history coming soon +
+
+
+ + +
+ +

{dayjs(fn.updated_at).fromNow()}

+
+
+ + +
+ + Last updated on {dayjs(fn.updated_at).format('DD MMM, YYYY HH:mm')} + +
+
+
+
+
+ ) +} + +export default EdgeFunctionsRow diff --git a/studio/components/interfaces/Functions/FunctionsListItem.tsx b/studio/components/interfaces/Functions/FunctionsListItem.tsx deleted file mode 100644 index f2b9045d417..00000000000 --- a/studio/components/interfaces/Functions/FunctionsListItem.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import dayjs from 'dayjs' -import { FC } from 'react' -import { useRouter } from 'next/router' -import { observer } from 'mobx-react-lite' - -import { useStore } from 'hooks' -import Table from 'components/to-be-cleaned/Table' - -interface Props { - function: any -} - -const FunctionsListItem: FC = ({ function: item }) => { - const { ui } = useStore() - const is_functionConfirmed = item.email_confirmed_at || item.phone_confirmed_at - - const router = useRouter() - const ref = ui?.selectedProject?.ref - - // get the .co or .net TLD from the restUrl - const restUrl = ui.selectedProject?.restUrl - const restUrlTld = new URL(restUrl as string).hostname.split('.').pop() - - return ( - { - router.push(`/project/${ref}/functions/${item.id}`) - }} - > - -
- {item.name} -
-
- -
- {`https://${ref}.functions.supabase.${restUrlTld}/${item.slug}`} - {`/${item.name}`} -
-
- - - {dayjs(item.created_at).format('DD MMM, YYYY HH:mm')} - - - - - {dayjs(item.updated_at).format('DD MMM, YYYY HH:mm')} - - - - v{item.version} - - - {item.status} - -
- ) -} - -export default observer(FunctionsListItem) diff --git a/studio/components/interfaces/Functions/FunctionsNav.tsx b/studio/components/interfaces/Functions/FunctionsNav.tsx index dfe6bd5ab13..992a11474d0 100644 --- a/studio/components/interfaces/Functions/FunctionsNav.tsx +++ b/studio/components/interfaces/Functions/FunctionsNav.tsx @@ -1,8 +1,7 @@ import { Tabs } from 'ui' import { useRouter } from 'next/router' -// @ts-ignore -const FunctionsNav = ({ item }) => { +const FunctionsNav = ({ item }: any) => { const router = useRouter() const activeRoute = router.pathname.split('/')[5] const { ref } = router.query @@ -19,7 +18,6 @@ const FunctionsNav = ({ item }) => { > - {/* */} diff --git a/studio/components/interfaces/Functions/index.ts b/studio/components/interfaces/Functions/index.ts index e2d3d9dda40..af628ba5d81 100644 --- a/studio/components/interfaces/Functions/index.ts +++ b/studio/components/interfaces/Functions/index.ts @@ -1,6 +1,5 @@ -import EdgeFunctionsList from './EdgeFunctionsList' -import FunctionsListItem from './FunctionsListItem' +import EdgeFunctionDetails from './EdgeFunctionDetails' import FunctionsEmptyState from './FunctionsEmptyState' import TerminalInstructions from './TerminalInstructions' -export { EdgeFunctionsList, FunctionsListItem, FunctionsEmptyState, TerminalInstructions } +export { EdgeFunctionDetails, FunctionsEmptyState, TerminalInstructions } diff --git a/studio/components/layouts/FunctionsLayout.tsx b/studio/components/layouts/FunctionsLayout.tsx index 67d65717dea..0dc242cd836 100644 --- a/studio/components/layouts/FunctionsLayout.tsx +++ b/studio/components/layouts/FunctionsLayout.tsx @@ -106,6 +106,26 @@ const FunctionsLayout: FC = ({ title, children }) => {

Beta

+ {name && ( +
+ + + + + +
{name}
+
+ )}
- - {/* {name && ( - <> - - - - - -
{name}
- - )} */} {item && } diff --git a/studio/data/edge-functions/edge-functions-delete-mutation.ts b/studio/data/edge-functions/edge-functions-delete-mutation.ts new file mode 100644 index 00000000000..23552bb4e48 --- /dev/null +++ b/studio/data/edge-functions/edge-functions-delete-mutation.ts @@ -0,0 +1,43 @@ +import { useMutation, UseMutationOptions, useQueryClient } from '@tanstack/react-query' +import { delete_ } from 'lib/common/fetch' +import { API_ADMIN_URL } from 'lib/constants' +import { edgeFunctionsKeys } from './keys' + +export type EdgeFunctionsDeleteVariables = { + projectRef: string + slug: string +} + +export async function deleteEdgeFunction({ projectRef, slug }: EdgeFunctionsDeleteVariables) { + if (!projectRef) throw new Error('projectRef is required') + + const response = await delete_(`${API_ADMIN_URL}/projects/${projectRef}/functions/${slug}`, {}) + if (response.error) { + throw response.error + } + + return response +} + +type EdgeFunctionsDeleteData = Awaited> + +export const useEdgeFunctionDeleteMutation = ({ + onSuccess, + ...options +}: Omit< + UseMutationOptions, + 'mutationFn' +> = {}) => { + const queryClient = useQueryClient() + + return useMutation( + (vars) => deleteEdgeFunction(vars), + { + async onSuccess(data, variables, context) { + await queryClient.invalidateQueries(edgeFunctionsKeys.list('edge-functions')) + await onSuccess?.(data, variables, context) + }, + ...options, + } + ) +} diff --git a/studio/data/edge-functions/edge-functions-query.ts b/studio/data/edge-functions/edge-functions-query.ts new file mode 100644 index 00000000000..28bc3f8c649 --- /dev/null +++ b/studio/data/edge-functions/edge-functions-query.ts @@ -0,0 +1,57 @@ +import { useQuery, useQueryClient, UseQueryOptions } from '@tanstack/react-query' +import { get } from 'lib/common/fetch' +import { API_ADMIN_URL } from 'lib/constants' +import { useCallback } from 'react' +import { edgeFunctionsKeys } from './keys' + +export type EdgeFunctionsVariables = { projectRef?: string } + +export type EdgeFunctionsResponse = { + id: string + name: string + slug: string + status: string + version: number + created_at: number + updated_at: number + verify_jwt: boolean + import_map: boolean +} + +export async function getEdgeFunctions( + { projectRef }: EdgeFunctionsVariables, + signal?: AbortSignal +) { + if (!projectRef) throw new Error('projectRef is required') + + const response = await get(`${API_ADMIN_URL}/projects/${projectRef}/functions`, { + signal, + }) + if (response.error) throw response.error + return response as EdgeFunctionsResponse[] +} + +export type EdgeFunctionsData = Awaited> +export type EdgeFunctionsError = unknown + +export const useEdgeFunctionsQuery = ( + { projectRef }: EdgeFunctionsVariables, + { enabled = true, ...options }: UseQueryOptions = {} +) => + useQuery( + edgeFunctionsKeys.list(projectRef), + ({ signal }) => getEdgeFunctions({ projectRef }, signal), + { enabled: enabled && typeof projectRef !== 'undefined', ...options } + ) + +export const useEdgeFunctionsPrefetch = ({ projectRef }: EdgeFunctionsVariables) => { + const client = useQueryClient() + + return useCallback(() => { + if (projectRef) { + client.prefetchQuery(edgeFunctionsKeys.list(projectRef), ({ signal }) => + getEdgeFunctions({ projectRef }, signal) + ) + } + }, [projectRef]) +} diff --git a/studio/data/edge-functions/keys.ts b/studio/data/edge-functions/keys.ts new file mode 100644 index 00000000000..dacd8d4a8dd --- /dev/null +++ b/studio/data/edge-functions/keys.ts @@ -0,0 +1,3 @@ +export const edgeFunctionsKeys = { + list: (projectRef: string | undefined) => ['projects', projectRef, 'edge-functions'] as const, +} diff --git a/studio/pages/project/[ref]/functions/[id]/details.tsx b/studio/pages/project/[ref]/functions/[id]/details.tsx index 613833e4f31..debcd5ebe99 100644 --- a/studio/pages/project/[ref]/functions/[id]/details.tsx +++ b/studio/pages/project/[ref]/functions/[id]/details.tsx @@ -1,244 +1,21 @@ -import dayjs from 'dayjs' -import { useEffect, useState } from 'react' import { observer } from 'mobx-react-lite' -import { IconGlobe, IconTerminal } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' import { NextPageWithLayout } from 'types' -import { checkPermissions, useParams, useStore } from 'hooks' -import { useProjectApiQuery } from 'data/config/project-api-query' +import { checkPermissions, useParams } from 'hooks' import FunctionsLayout from 'components/layouts/FunctionsLayout' -import CommandRender from 'components/interfaces/Functions/CommandRender' import NoPermission from 'components/ui/NoPermission' +import { EdgeFunctionDetails } from 'components/interfaces/Functions' const PageLayout: NextPageWithLayout = () => { - const { ref: projectRef, id } = useParams() - - const { functions, ui } = useStore() - - const [selectedFunction, setSelectedFunction] = useState(null) - - useEffect(() => { - setSelectedFunction(functions.byId(id)) - }, [functions.isLoaded, ui.selectedProject]) - - const { data: settings } = useProjectApiQuery({ - projectRef, - }) - - // get the .co or .net TLD from the restUrl - const restUrl = ui.selectedProject?.restUrl - const restUrlTld = new URL(restUrl as string).hostname.split('.').pop() - - const managementCommands: any = [ - { - command: `supabase functions deploy ${selectedFunction?.slug}`, - description: 'This will overwrite the deployed function with your new function', - jsx: () => { - return ( - <> - supabase functions deploy{' '} - {selectedFunction?.slug} - - ) - }, - comment: 'Deploy a new version', - }, - { - command: `supabase functions delete ${selectedFunction?.slug}`, - description: 'This will remove the function and all the logs associated with it', - jsx: () => { - return ( - <> - supabase functions delete{' '} - {selectedFunction?.slug} - - ) - }, - comment: 'Delete the function', - }, - ] - - const secretCommands: any = [ - { - command: `supabase secrets list`, - description: 'This will list all the secrets for your project', - jsx: () => { - return ( - <> - supabase secrets list - - ) - }, - comment: 'View all secrets', - }, - { - command: `supabase secrets set NAME1=VALUE1 NAME2=VALUE2`, - description: 'This will set secrets for your project', - jsx: () => { - return ( - <> - supabase secrets set NAME1=VALUE1 NAME2=VALUE2 - - ) - }, - comment: 'Set secrets for your project', - }, - { - command: `supabase secrets unset NAME1 NAME2 `, - description: 'This will delete secrets for your project', - jsx: () => { - return ( - <> - supabase secrets unset NAME1 NAME2 - - ) - }, - comment: 'Unset secrets for your project', - }, - ] - - // Get the API service - const apiService = settings?.autoApiService - const anonKey = apiService?.service_api_keys.find((x) => x.name === 'anon key') - ? apiService.defaultApiKey - : undefined - - const endpoint = apiService?.app_config.endpoint ?? '' - const endpointSections = endpoint.split('.') - const functionsEndpoint = [ - ...endpointSections.slice(0, 1), - 'functions', - ...endpointSections.slice(1), - ].join('.') - - const invokeCommands: any = [ - { - command: `curl -L -X POST 'https://${projectRef}.functions.supabase.${restUrlTld}/${ - selectedFunction?.slug - }' -H 'Authorization: Bearer ${anonKey ?? '[YOUR ANON KEY]'}' --data '{"name":"Functions"}'`, - description: 'Invokes the hello function', - jsx: () => { - return ( - <> - curl -L -X POST 'https://{functionsEndpoint}/ - {selectedFunction?.slug}' -H 'Authorization: Bearer [YOUR ANON KEY]'{' '} - {`--data '{"name":"Functions"}'`} - - ) - }, - comment: 'Invoke your function', - }, - ] + const { id } = useParams() const canReadFunction = checkPermissions(PermissionAction.FUNCTIONS_READ, id as string) if (!canReadFunction) { return } - return ( -
-
-
-
-
- Function Name -
{selectedFunction?.name}
-
- -
- Status -
-
-
- {selectedFunction?.status} -
- - - - -
-
-
-
-
-
- -
- Endpoint URL -
- {`https://${projectRef}.functions.supabase.co/${selectedFunction?.slug}`} -
-
- -
- Created At -
- {selectedFunction?.created_at && - dayjs(selectedFunction.created_at).format('dddd, MMMM D, YYYY h:mm A')} -
-
- -
- Updated At -
- {selectedFunction?.updated_at && - dayjs(selectedFunction.updated_at).format('dddd, MMMM D, YYYY h:mm A')} -
-
- -
- Version -
v{selectedFunction?.version}
-
- -
- Regions -
-
- - Earth -
- All functions are deployed globally -
-
-
-
- -
-
-
-
- -
-

Command line access

-
- -
Deployment management
- -
Invoke
- -
Secrets management
- -
-
-
- ) + return } PageLayout.getLayout = (page) => {page} diff --git a/studio/pages/project/[ref]/functions/index.tsx b/studio/pages/project/[ref]/functions/index.tsx index 7848cff03fe..480e1700d87 100644 --- a/studio/pages/project/[ref]/functions/index.tsx +++ b/studio/pages/project/[ref]/functions/index.tsx @@ -1,16 +1,33 @@ import { observer } from 'mobx-react-lite' -import { useStore } from 'hooks' +import { useParams } from 'hooks' import { NextPageWithLayout } from 'types' import FunctionsLayout from 'components/layouts/FunctionsLayout' -import { EdgeFunctionsList, FunctionsEmptyState } from 'components/interfaces/Functions' +import { FunctionsEmptyState } from 'components/interfaces/Functions' +import { useEdgeFunctionsQuery } from 'data/edge-functions/edge-functions-query' +import ShimmeringLoader from 'components/ui/ShimmeringLoader' +import EdgeFunctionsRow from 'components/interfaces/Functions/EdgeFunctionsRow' const PageLayout: NextPageWithLayout = () => { - const { functions } = useStore() - const hasFunctions = functions.list().length > 0 + const { ref } = useParams() + const { isLoading, data: functions } = useEdgeFunctionsQuery({ projectRef: ref }) + + const hasFunctions = (functions ?? []).length > 0 + + if (isLoading || functions === undefined) { + return ( +
+ + + +
+ ) + } return hasFunctions ? (
- + {(functions ?? []).map((fn) => ( + + ))}
) : ( From 9ac05120a853c0642b982947d8d540597f893d06 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 17 Feb 2023 20:28:21 +0800 Subject: [PATCH 038/230] Update database-usage.mdx --- apps/docs/pages/guides/platform/database-usage.mdx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index d443aa4d10f..2a04d0e2f38 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -24,11 +24,9 @@ This value is also reported in the [database settings page](https://app.supabase Supabase uses network-attached storage to balance performance with scalability. -For Pro and Enterprise tier projects, [disk size expands ~1.5x automatically](#paid-tier-disk-auto-scaling) when you reach 90% of the disk size. Disk size expansion can only occur once every six hours. - For Free tier projects, the database will enter ['read only' mode when you reach 95% disk space](#free-tier-project-read-only-mode). -Pro and enterprise tier projects can store up to 1024TB. +For Pro and Enterprise tier projects, your [disk size expands automatically](#paid-tier-disk-auto-scaling). ### Free tier project 'read-only' mode From 809ca473edaed12bfb81fa086a6d565990ff5627 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 17 Feb 2023 20:29:05 +0800 Subject: [PATCH 039/230] Update database-usage.mdx --- apps/docs/pages/guides/platform/database-usage.mdx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index 2a04d0e2f38..2ba8029f07f 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -24,9 +24,8 @@ This value is also reported in the [database settings page](https://app.supabase Supabase uses network-attached storage to balance performance with scalability. -For Free tier projects, the database will enter ['read only' mode when you reach 95% disk space](#free-tier-project-read-only-mode). - -For Pro and Enterprise tier projects, your [disk size expands automatically](#paid-tier-disk-auto-scaling). +- For **Free tier projects**, the database will enter ['read only' mode when you reach 95% disk space](#free-tier-project-read-only-mode). +- For **Pro and Enterprise tier projects**, your [disk size expands automatically](#paid-tier-disk-auto-scaling). ### Free tier project 'read-only' mode From f5eaab308a2a97f1dba4c7b4706ff9bbc7cd3e47 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 17 Feb 2023 22:45:28 +0800 Subject: [PATCH 040/230] Update database-usage.mdx --- apps/docs/pages/guides/platform/database-usage.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index 2ba8029f07f..9e8bcaba917 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -40,8 +40,12 @@ For [disk auto-scaling](paid-tier-disk-auto-scaling), and avoid your database en Pro and Enterprise have disk auto-scaling. Storage expands automatically when the database reaches 90% of the disk size. The disk is expanded to be 50% larger (e.g., 8GB -> 12GB). Auto-scaling can only take place once every 6 hours. + + If you intend to import a lot of data into your database that would require multiple storage expansions then [reach out to our team](https://app.supabase.com/support/new), otherwise your project might enter a ['read-only' mode](#paid-tier-project-read-only-mode). + + If you need more than 1024TB of disk size or require multiple storage expansions in a short period of time, [contact us](https://app.supabase.com/support/new) to learn more about the Enterprise plan. #### Paid tier project 'read-only' mode From 3630bd67db7c4e006e69777447506634312efacc Mon Sep 17 00:00:00 2001 From: Keshav Malik <33570148+theinfosecguy@users.noreply.github.com> Date: Sat, 18 Feb 2023 19:23:12 +0530 Subject: [PATCH 041/230] Add FastAPI & Supabase (CRUD API) Integration blog --- apps/docs/pages/guides/resources/examples.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/docs/pages/guides/resources/examples.mdx b/apps/docs/pages/guides/resources/examples.mdx index 23b102fb216..18c835d8298 100644 --- a/apps/docs/pages/guides/resources/examples.mdx +++ b/apps/docs/pages/guides/resources/examples.mdx @@ -113,6 +113,7 @@ Build a basic Todo List with Supabase and your favorite frontend framework: - 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/) - Link Shortener using Supabase and Ory [3-part Blog Series](https://www.ory.sh/tutorial-url-shortener-supabase-ory-integration-backend/) +- Building a CRUD API with FastAPI and Supabase: A Step-by-Step Guide [Blog](https://blog.theinfosecguy.xyz/building-a-crud-api-with-fastapi-and-supabase-a-step-by-step-guide) ### Example apps From acf9d6848e49c7e64a5df26aa8a2681d5ba5387c Mon Sep 17 00:00:00 2001 From: Tilman Vogel Date: Tue, 31 Jan 2023 15:11:37 +0100 Subject: [PATCH 042/230] Address suggestions from code review lower-case SQL; add example psql interaction; --- .../pages/guides/auth/row-level-security.mdx | 141 +++++++++++++----- 1 file changed, 103 insertions(+), 38 deletions(-) diff --git a/apps/docs/pages/guides/auth/row-level-security.mdx b/apps/docs/pages/guides/auth/row-level-security.mdx index 0700d4fdc0d..e7b5f588694 100644 --- a/apps/docs/pages/guides/auth/row-level-security.mdx +++ b/apps/docs/pages/guides/auth/row-level-security.mdx @@ -333,59 +333,124 @@ These should never be used in the browser or exposed to customers, but they are To test policies on the database itself (i.e., from the [SQL Editor](https://app.supabase.com/project/_/sql) or from `psql`) without switching to your frontend and logging in as different users, you can utilize the following helper SQL procedures ([credits](https://github.com/supabase/supabase/issues/7311#issuecomment-1398648114)): ```sql -GRANT anon, authenticated TO postgres; +grant anon, authenticated to postgres; -CREATE OR REPLACE PROCEDURE auth.login_as_user (user_email text) - LANGUAGE plpgsql - AS $$ -DECLARE +create or replace procedure auth.login_as_user (user_email text) + language plpgsql + as $$ +declare auth_user auth.users; -BEGIN - SELECT - * INTO auth_user - FROM +begin + select + * into auth_user + from auth.users - WHERE + where email = user_email; - EXECUTE format('SET request.jwt.claim.sub=%L', (auth_user).id::text); - EXECUTE format('SET request.jwt.claim.role=%I', (auth_user).ROLE); - EXECUTE format('SET request.jwt.claim.email=%L', (auth_user).email); - EXECUTE format('SET request.jwt.claims=%L', json_strip_nulls(json_build_object('app_metadata', (auth_user).raw_app_meta_data))::text); + execute format('set request.jwt.claim.sub=%L', (auth_user).id::text); + execute format('set request.jwt.claim.role=%I', (auth_user).role); + execute format('set request.jwt.claim.email=%L', (auth_user).email); + execute format('set request.jwt.claims=%L', json_strip_nulls(json_build_object('app_metadata', (auth_user).raw_app_meta_data))::text); - RAISE NOTICE '%', format( 'SET ROLE %I; -- Logging in as %L (%L)', (auth_user).ROLE, (auth_user).id, (auth_user).email); - EXECUTE format('SET ROLE %I', (auth_user).ROLE); -END; + raise notice '%', format( 'set role %I; -- logging in as %L (%L)', (auth_user).role, (auth_user).id, (auth_user).email); + execute format('set role %I', (auth_user).role); +end; $$; -CREATE OR REPLACE PROCEDURE auth.login_as_anon () - LANGUAGE plpgsql - AS $$ -BEGIN - SET request.jwt.claim.sub=''; - SET request.jwt.claim.role=''; - SET request.jwt.claim.email=''; - SET request.jwt.claims=''; - SET ROLE anon; -END; +create or replace procedure auth.login_as_anon () + language plpgsql + as $$ +begin + set request.jwt.claim.sub=''; + set request.jwt.claim.role=''; + set request.jwt.claim.email=''; + set request.jwt.claims=''; + set role anon; +end; $$; -CREATE OR REPLACE PROCEDURE auth.logout () - LANGUAGE plpgsql - AS $$ -BEGIN - SET request.jwt.claim.sub=''; - SET request.jwt.claim.role=''; - SET request.jwt.claim.email=''; - SET request.jwt.claims=''; - SET ROLE postgres; -END; +create or replace procedure auth.logout () + language plpgsql + as $$ +begin + set request.jwt.claim.sub=''; + set request.jwt.claim.role=''; + set request.jwt.claim.email=''; + set request.jwt.claims=''; + set role postgres; +end; $$; ``` -To switch to a given user (by email), use `CALL auth.login_as_user('my@email.com');`. You can also switch to the `anon` role using `CALL auth.login_as_anon();`. When you are done, use `CALL auth.logout();` to return yourself to the `postgres` role. +To switch to a given user (by email), use `call auth.login_as_user('my@email.com');`. You can also switch to the `anon` role using `call auth.login_as_anon();`. When you are done, use `call auth.logout();` to return yourself to the `postgres` role. These procedures can also be used for writing [pgTAP](/docs/guides/database/extensions/pgtap) unit tests for policies. +
+ Click here to see an example `psql` interaction using this. + +This example shows that the `public.profiles` table from the tutorial example can indeed be updated by the `postgres` role and the owner of the row but not from `anon` connections: + +```shell +postgres=> select id, email from auth.users; + id | email +--------------------------------------+------------------- + d4f0aa86-e6f6-41d1-bd32-391f077cf1b9 | user1@example.com + 15d6811a-16ee-4fa2-9b18-b63085688be4 | user2@example.com + 4e1010bb-eb37-4a4d-a05a-b0ee315c9d56 | user3@example.com +(3 rows) + +postgres=> table public.profiles; + id | updated_at | username | full_name | avatar_url | website +--------------------------------------+------------+----------+-----------+------------+--------- + d4f0aa86-e6f6-41d1-bd32-391f077cf1b9 | | user1 | User 1 | | + 15d6811a-16ee-4fa2-9b18-b63085688be4 | | user2 | User 2 | | + 4e1010bb-eb37-4a4d-a05a-b0ee315c9d56 | | user3 | User 3 | | +(3 rows) + +postgres=> call auth.login_as_anon(); +CALL +postgres=> update public.profiles set updated_at=now(); +UPDATE 0 -- anon users cannot update any profile but see all of them +postgres=> table public.profiles; + id | updated_at | username | full_name | avatar_url | website +--------------------------------------+------------+----------+-----------+------------+--------- + d4f0aa86-e6f6-41d1-bd32-391f077cf1b9 | | user1 | User 1 | | + 15d6811a-16ee-4fa2-9b18-b63085688be4 | | user2 | User 2 | | + 4e1010bb-eb37-4a4d-a05a-b0ee315c9d56 | | user3 | User 3 | | +(3 rows) + +postgres=> call auth.logout(); +CALL +postgres=> call auth.login_as_user('user1@example.com'); +NOTICE: set role authenticated; -- logging in as 'd4f0aa86-e6f6-41d1-bd32-391f077cf1b9' ('user1@example.com') +CALL +postgres=> update public.profiles set updated_at=now(); +UPDATE 1 -- authenticated users can update their own profile and see all of them +postgres=> table public.profiles; + id | updated_at | username | full_name | avatar_url | website +--------------------------------------+-------------------------------+----------+-----------+------------+--------- + 15d6811a-16ee-4fa2-9b18-b63085688be4 | | user1 | User 1 | | + 4e1010bb-eb37-4a4d-a05a-b0ee315c9d56 | | user2 | User 2 | | + d4f0aa86-e6f6-41d1-bd32-391f077cf1b9 | 2023-02-18 21:39:16.204612+00 | user3 | User 3 | | +(3 rows) + +postgres=> call auth.logout(); +CALL +postgres=> update public.profiles set updated_at=now(); +UPDATE 3 -- the 'postgres' role can update and see all profiles +postgres=> table public.profiles; + id | updated_at | username | full_name | avatar_url | website +--------------------------------------+-------------------------------+----------+-----------+------------+--------- + 15d6811a-16ee-4fa2-9b18-b63085688be4 | 2023-02-18 21:40:08.216324+00 | user1 | User 1 | | + 4e1010bb-eb37-4a4d-a05a-b0ee315c9d56 | 2023-02-18 21:40:08.216324+00 | user2 | User 2 | | + d4f0aa86-e6f6-41d1-bd32-391f077cf1b9 | 2023-02-18 21:40:08.216324+00 | user3 | User 3 | | +(3 rows) + +``` + +
+ ## Deprecated features We have deprecate some functions to ensure better performance and extensibilty of RLS policies. From 9feca04df12258fa8677187cdd052a7cc0ad5fd7 Mon Sep 17 00:00:00 2001 From: Ollie Halliday <22655069+Hallidayo@users.noreply.github.com> Date: Sun, 19 Feb 2023 21:27:08 +0000 Subject: [PATCH 043/230] added fixed width --- .../interfaces/Organization/TeamSettings/MembersView.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx b/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx index c54088028ed..3c238ef49d5 100644 --- a/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx +++ b/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx @@ -191,6 +191,7 @@ const MembersView: FC = ({ searchString, roles, members }) => { value={r.id} label={r.name} disabled={disableRoleEdit} + className="w-36" > {r.name} From 3873db7da4e1c7ac8711b8ff694768c01e9fea65 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 20 Feb 2023 12:02:43 +0800 Subject: [PATCH 044/230] Add comment --- studio/components/interfaces/Functions/EdgeFunctionDetails.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx b/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx index 4f25d522982..80b929e7324 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx @@ -13,6 +13,8 @@ import { useEdgeFunctionDeleteMutation } from 'data/edge-functions/edge-function interface Props {} +// [Joshen] Next - additional configs: Verify jwt + import maps + const EdgeFunctionDetails: FC = () => { const router = useRouter() const { functions, ui } = useStore() From 0247e1b8c32cd272696e57ba2e1fce25fdaa594b Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 20 Feb 2023 12:03:29 +0800 Subject: [PATCH 045/230] Fix typo --- studio/components/interfaces/Functions/EdgeFunctionDetails.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx b/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx index 80b929e7324..72b73e3e117 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx @@ -59,7 +59,7 @@ const EdgeFunctionDetails: FC = () => { await deleteEdgeFunction({ projectRef, slug: selectedFunction.slug }) ui.setNotification({ category: 'success', - message: `Succesfully deleted "${selectedFunction.name}"`, + message: `Successfully deleted "${selectedFunction.name}"`, }) router.push(`/project/${projectRef}/functions`) } catch (error: any) { From dbebd83937c8623df0bda4c50dd6c5a1cdd5f394 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 20 Feb 2023 14:21:51 +0800 Subject: [PATCH 046/230] Small style fix --- studio/components/interfaces/Functions/EdgeFunctionsRow.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx b/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx index 185f01348e3..e9df8387450 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx @@ -26,7 +26,7 @@ const EdgeFunctionsRow: FC = ({ fn }) => { key={fn.id} className={[ 'border border-scale-500 border-t-0 first:rounded-t first:border-t last:rounded-b', - 'bg-scale-100 dark:bg-scale-300 py-6 px-6 flex items-center justify-between', + 'bg-scale-100 dark:bg-scale-300 py-4 px-6 flex items-center justify-between', 'hover:border-t hover:-mt-[1px] first:!mt-0 cursor-pointer', 'hover:bg-scale-200 dark:hover:bg-scale-500 hover:border-scale-500 dark:hover:border-scale-700', ].join(' ')} From 7d4721f3e297e09fcd772099cffdd75e340012f4 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 20 Feb 2023 14:48:27 +0800 Subject: [PATCH 047/230] Fixes based on feedback --- .../Functions/EdgeFunctionDetails.tsx | 52 +++++++++++++++---- .../interfaces/Functions/EdgeFunctionsRow.tsx | 2 +- .../edge-functions-delete-mutation.ts | 2 +- 3 files changed, 45 insertions(+), 11 deletions(-) diff --git a/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx b/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx index 72b73e3e117..f2f21e65c04 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx @@ -3,7 +3,17 @@ import { useRouter } from 'next/router' import { FC, useState, useEffect } from 'react' import * as Tooltip from '@radix-ui/react-tooltip' import { PermissionAction } from '@supabase/shared-types/out/constants' -import { Alert, IconGlobe, IconTerminal, IconMinimize2, IconMaximize2, Button, Modal } from 'ui' +import { + Alert, + IconGlobe, + IconTerminal, + IconMinimize2, + IconMaximize2, + IconCheck, + IconClipboard, + Button, + Modal, +} from 'ui' import { useStore, useParams, checkPermissions } from 'hooks' import Panel from 'components/ui/Panel' @@ -19,6 +29,7 @@ const EdgeFunctionDetails: FC = () => { const router = useRouter() const { functions, ui } = useStore() const { ref: projectRef, id } = useParams() + const [isCopied, setIsCopied] = useState(false) const [showDeleteModal, setShowDeleteModal] = useState(false) const [showInstructions, setShowInstructions] = useState(false) const [selectedFunction, setSelectedFunction] = useState(null) @@ -31,11 +42,6 @@ const EdgeFunctionDetails: FC = () => { }, [functions.isLoaded, ui.selectedProject]) const { data: settings } = useProjectApiQuery({ projectRef }) - const functionUrl = `https://${projectRef}.functions.supabase.co/${selectedFunction?.slug}` - - // get the .co or .net TLD from the restUrl - const restUrl = ui.selectedProject?.restUrl - const restUrlTld = new URL(restUrl as string).hostname.split('.').pop() // Get the API service const apiService = settings?.autoApiService @@ -50,6 +56,7 @@ const EdgeFunctionDetails: FC = () => { 'functions', ...endpointSections.slice(1), ].join('.') + const functionUrl = `https://${functionsEndpoint}/${selectedFunction?.slug}` const onConfirmDelete = async () => { if (!projectRef) return console.error('Project ref is required') @@ -140,9 +147,9 @@ const EdgeFunctionDetails: FC = () => { const invokeCommands: any = [ { - command: `curl -L -X POST 'https://${projectRef}.functions.supabase.${restUrlTld}/${ - selectedFunction?.slug - }' -H 'Authorization: Bearer ${anonKey ?? '[YOUR ANON KEY]'}' --data '{"name":"Functions"}'`, + command: `curl -L -X POST '${functionUrl}' -H 'Authorization: Bearer ${ + anonKey ?? '[YOUR ANON KEY]' + }' --data '{"name":"Functions"}'`, description: 'Invokes the hello function', jsx: () => { return ( @@ -169,6 +176,33 @@ const EdgeFunctionDetails: FC = () => {

Endpoint URL

{functionUrl}

+
diff --git a/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx b/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx index e9df8387450..a263b6aff26 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx @@ -58,7 +58,7 @@ const EdgeFunctionsRow: FC = ({ fn }) => { ) : (
- +
)} diff --git a/studio/data/edge-functions/edge-functions-delete-mutation.ts b/studio/data/edge-functions/edge-functions-delete-mutation.ts index 23552bb4e48..f37faa08a37 100644 --- a/studio/data/edge-functions/edge-functions-delete-mutation.ts +++ b/studio/data/edge-functions/edge-functions-delete-mutation.ts @@ -34,7 +34,7 @@ export const useEdgeFunctionDeleteMutation = ({ (vars) => deleteEdgeFunction(vars), { async onSuccess(data, variables, context) { - await queryClient.invalidateQueries(edgeFunctionsKeys.list('edge-functions')) + await queryClient.invalidateQueries(edgeFunctionsKeys.list(variables.projectRef)) await onSuccess?.(data, variables, context) }, ...options, From 3a5f555426885d9f85f534f43fbe041f38b4126d Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 20 Feb 2023 15:37:57 +0800 Subject: [PATCH 048/230] Fix conflict --- .../Settings/Database/SSLConfiguration.tsx | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/studio/components/interfaces/Settings/Database/SSLConfiguration.tsx b/studio/components/interfaces/Settings/Database/SSLConfiguration.tsx index f5e57942243..20935a97d97 100644 --- a/studio/components/interfaces/Settings/Database/SSLConfiguration.tsx +++ b/studio/components/interfaces/Settings/Database/SSLConfiguration.tsx @@ -1,16 +1,10 @@ import Link from 'next/link' import { useState, useEffect } from 'react' -<<<<<<< HEAD -import { checkPermissions, useParams, useStore } from 'hooks' -import * as Tooltip from '@radix-ui/react-tooltip' -import { Button, IconDownload, Toggle, IconExternalLink, IconLoader, Alert } from 'ui' -import { PermissionAction } from '@supabase/shared-types/out/constants' - -======= -import { useParams, useStore, useFlag } from 'hooks' import * as Tooltip from '@radix-ui/react-tooltip' import { Button, IconDownload, Toggle, IconLoader, Alert } from 'ui' ->>>>>>> bb5d57da53dbdacb4c51df21a8c357d864ba7a0e +import { PermissionAction } from '@supabase/shared-types/out/constants' + +import { checkPermissions, useParams, useStore, useFlag } from 'hooks' import { FormHeader, FormPanel, From f4e69433ee66bc87b88f598553f6afdaa03043ec Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 20 Feb 2023 17:11:17 +0800 Subject: [PATCH 049/230] Remove unnecessary change in storage explorer store --- studio/localStores/storageExplorer/StorageExplorerStore.js | 1 - 1 file changed, 1 deletion(-) diff --git a/studio/localStores/storageExplorer/StorageExplorerStore.js b/studio/localStores/storageExplorer/StorageExplorerStore.js index 6fee62250c0..77d26ceda79 100644 --- a/studio/localStores/storageExplorer/StorageExplorerStore.js +++ b/studio/localStores/storageExplorer/StorageExplorerStore.js @@ -44,7 +44,6 @@ const EMPTY_FOLDER_PLACEHOLDER_FILE_NAME = '.emptyFolderPlaceholder' const STORAGE_PROGRESS_INFO_TEXT = "Please do not close the browser until it's completed" class StorageExplorerStore { - isReadOnly = false projectRef = '' loaded = false view = STORAGE_VIEWS.COLUMNS From 9a138330b578521c8ac07737ca8fe6dfac54713b Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 20 Feb 2023 17:46:36 +0800 Subject: [PATCH 050/230] Update StorageExplorerStore bucket operations to use API --- .../Settings/Database/SSLConfiguration.tsx | 2 +- .../layouts/StorageLayout/BucketRow.tsx | 6 ++- .../layouts/StorageLayout/StorageMenu.tsx | 15 ++---- .../storageExplorer/StorageExplorerStore.js | 49 +++++++++---------- 4 files changed, 33 insertions(+), 39 deletions(-) diff --git a/studio/components/interfaces/Settings/Database/SSLConfiguration.tsx b/studio/components/interfaces/Settings/Database/SSLConfiguration.tsx index 20935a97d97..9f1f8596905 100644 --- a/studio/components/interfaces/Settings/Database/SSLConfiguration.tsx +++ b/studio/components/interfaces/Settings/Database/SSLConfiguration.tsx @@ -122,7 +122,7 @@ const SSLConfiguration = () => { )}
diff --git a/studio/components/layouts/StorageLayout/BucketRow.tsx b/studio/components/layouts/StorageLayout/BucketRow.tsx index f96a5d96b4c..79e9cf91ace 100644 --- a/studio/components/layouts/StorageLayout/BucketRow.tsx +++ b/studio/components/layouts/StorageLayout/BucketRow.tsx @@ -1,6 +1,8 @@ import { FC } from 'react' import { Badge, Dropdown, IconLoader, IconMoreVertical, IconTrash } from 'ui' +import { PermissionAction } from '@supabase/shared-types/out/constants' +import { checkPermissions } from 'hooks' import ProductMenuItem from 'components/ui/ProductMenu/ProductMenuItem' import { STORAGE_ROW_STATUS } from 'components/to-be-cleaned/Storage/Storage.constants' @@ -19,6 +21,8 @@ const BucketRow: FC = ({ onSelectDeleteBucket = () => {}, onSelectToggleBucketPublic = () => {}, }) => { + const canUpdateBuckets = checkPermissions(PermissionAction.STORAGE_ADMIN_WRITE, '*') + return ( = ({ action={ bucket.status === STORAGE_ROW_STATUS.LOADING ? ( - ) : bucket.status === STORAGE_ROW_STATUS.READY ? ( + ) : canUpdateBuckets && bucket.status === STORAGE_ROW_STATUS.READY ? ( = () => { const router = useRouter() const { ref, bucketId } = useParams() + const canCreateBuckets = checkPermissions(PermissionAction.STORAGE_ADMIN_WRITE, '*') const page = router.pathname.split('/')[4] as | undefined @@ -33,11 +33,6 @@ const StorageMenu: FC = () => { openToggleBucketPublicModal, } = storageExplorerStore || {} - const { data: settings, isLoading } = useProjectApiQuery({ projectRef: ref }) - const apiService = settings?.autoApiService - const serviceKey = find(apiService?.service_api_keys ?? [], (key) => key.tags === 'service_role') - const canAccessStorage = !isLoading && apiService && serviceKey !== undefined - return (
@@ -51,14 +46,14 @@ const StorageMenu: FC = () => {
} - disabled={!canAccessStorage} + disabled={!canCreateBuckets} style={{ justifyContent: 'start' }} onClick={openCreateBucketModal} > New bucket - {!canAccessStorage && ( + {!canCreateBuckets && (
{ if (isNil(this.supabaseClient)) { return this.ui.setNotification({ - message: 'Failed to initialize supabase client, try refreshing your browser.', category: 'error', + message: 'Failed to initialize supabase client, try refreshing your browser.', }) } - const { data, error } = await this.supabaseClient.storage.createBucket(bucketName, { - public: isPublic, - }) - if (error) { - this.ui.setNotification({ - message: error.message, - category: 'error', - }) + const res = await post(`${this.endpoint}/buckets`, { id: bucketName, public: isPublic }) + if (res.error) { + this.ui.setNotification({ category: 'error', message: res.error.message }) this.closeCreateBucketModal() return undefined + } else { + await this.fetchBuckets() + this.closeCreateBucketModal() + return res } - - await this.fetchBuckets() - this.closeCreateBucketModal() - return data } openBucket = async (bucket) => { @@ -503,15 +502,15 @@ class StorageExplorerStore { // hence delete bucket and empty bucket are coupled tightly here const { id, name: bucketName } = bucket - const { error: emptyBucketError } = await this.supabaseClient.storage.emptyBucket(id) - if (emptyBucketError) { - this.ui.setNotification({ message: emptyBucketError.message, category: 'error' }) + const emptyBucketRes = await post(`${this.endpoint}/buckets/${id}/empty`, {}) + if (emptyBucketRes.error) { + this.ui.setNotification({ category: 'error', message: emptyBucketRes.error.message }) return false } - const { error: deleteBucketError } = await this.supabaseClient.storage.deleteBucket(id) - if (deleteBucketError) { - this.ui.setNotification({ message: deleteBucketError.message, category: 'error' }) + const deleteBucketRes = await delete_(`${this.endpoint}/buckets/${id}`) + if (deleteBucketRes.error) { + this.ui.setNotification({ category: 'error', message: deleteBucketRes.error.message }) return false } @@ -527,13 +526,9 @@ class StorageExplorerStore { } toggleBucketPublic = async (bucket) => { - const { name: bucketName } = bucket - - const { data, error } = await this.supabaseClient.storage.updateBucket(bucketName, { - public: !bucket.public, - }) - if (error) { - this.ui.setNotification({ message: error.message, category: 'error' }) + const res = await patch(`${this.endpoint}/buckets/${bucket.id}`, { public: !bucket.public }) + if (res.error) { + this.ui.setNotification({ category: 'error', message: res.error.message }) return this.closeToggleBucketPublicModal() } From ec932267316fe9233ab2aa025d84af8bc624b755 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 20 Feb 2023 18:14:57 +0800 Subject: [PATCH 051/230] Update fetchBuckets to use API --- .../storageExplorer/StorageExplorerStore.js | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/studio/localStores/storageExplorer/StorageExplorerStore.js b/studio/localStores/storageExplorer/StorageExplorerStore.js index 4d259cf5a79..ce653438126 100644 --- a/studio/localStores/storageExplorer/StorageExplorerStore.js +++ b/studio/localStores/storageExplorer/StorageExplorerStore.js @@ -1,14 +1,14 @@ import toast from 'react-hot-toast' import { createContext, useContext } from 'react' import { makeAutoObservable } from 'mobx' -import { find, compact, isEqual, isNil, has, some, chunk, get, uniq } from 'lodash' +import { find, compact, isEqual, isNil, has, some, chunk, uniq } from 'lodash' import { BlobReader, BlobWriter, ZipWriter } from '@zip.js/zip.js' import { createClient } from '@supabase/supabase-js' import { useStore } from 'hooks' import { copyToClipboard } from 'lib/helpers' import { API_URL, IS_PLATFORM } from 'lib/constants' -import { patch, post, delete_ } from 'lib/common/fetch' +import { get, patch, post, delete_ } from 'lib/common/fetch' import { PROJECT_ENDPOINT_PROTOCOL } from 'pages/api/constants' import { STORAGE_VIEWS, @@ -377,8 +377,8 @@ class StorageExplorerStore { this.selectedFilePreview = { ...file, previewUrl: 'loading' } const cachedPreview = find(this.filePreviewCache, { id: file.id }) - const fetchedAt = get(cachedPreview, ['fetchedAt'], null) - const expiresIn = get(cachedPreview, ['expiresIn'], null) + const fetchedAt = cachedPreview?.fetchedAt ?? null + const expiresIn = cachedPreview?.expiresIn ?? null const existsInCache = fetchedAt !== null && expiresIn !== null const isExpired = existsInCache ? fetchedAt + expiresIn * 1000 < Date.now() : true @@ -487,10 +487,10 @@ class StorageExplorerStore { } fetchBuckets = async () => { - const { data: buckets, error } = await this.supabaseClient.storage.listBuckets() - if (error) return this.ui.setNotification({ message: error.message, category: 'error' }) + const res = await get(`${this.endpoint}/buckets`) + if (res.error) return this.ui.setNotification({ category: 'error', message: res.error.message }) - const formattedBuckets = buckets.map((bucket) => { + const formattedBuckets = res.map((bucket) => { return { ...bucket, type: STORAGE_ROW_TYPES.BUCKET, status: STORAGE_ROW_STATUS.READY } }) this.buckets = formattedBuckets @@ -614,7 +614,8 @@ class StorageExplorerStore { // If we're uploading a folder which name already exists in the same folder that we're uploading to // We sanitize the folder name and let all file uploads through. (This is only via drag drop) - const topLevelFolders = get(this.columns, [derivedColumnIndex, 'items'], []) + // const topLevelFolders = get(this.columns, [derivedColumnIndex, 'items'], []) + const topLevelFolders = (this.columns?.[derivedColumnIndex]?.items ?? []) .filter((item) => !item.id) .map((item) => item.name) const formattedFilesToUpload = filesToUpload.map((file) => { @@ -661,7 +662,7 @@ class StorageExplorerStore { const fileOptions = { cacheControl: '3600' } const metadata = { mimetype: file.type, size: file.size } - const isWithinFolder = get(file, ['path'], '').split('/').length > 1 + const isWithinFolder = (file?.path ?? '').split('/').length > 1 const fileName = !isWithinFolder ? this.sanitizeNameForDuplicateInColumn(file.name, autofix) : file.name @@ -1090,7 +1091,7 @@ class StorageExplorerStore { downloadFile = async (file, showToast = true, returnBlob = false) => { const fileName = file.name - const fileMimeType = get(file, ['metadata', 'mimetype'], null) + const fileMimeType = file?.metadata?.mimetype ?? null const toastId = showToast ? this.ui.setNotification({ category: 'loading', message: `Retrieving ${fileName}...` }) From d5e421957a5f53652592f55ccc2f2c3c7cf25174 Mon Sep 17 00:00:00 2001 From: Ollie Halliday <22655069+Hallidayo@users.noreply.github.com> Date: Mon, 20 Feb 2023 11:06:24 +0000 Subject: [PATCH 052/230] added in reserved words note --- spec/supabase_js_v2.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spec/supabase_js_v2.yml b/spec/supabase_js_v2.yml index 26c48fec458..e59459ce89a 100644 --- a/spec/supabase_js_v2.yml +++ b/spec/supabase_js_v2.yml @@ -2258,6 +2258,9 @@ functions: ``` hideCodeBlock: true isSpotlight: true + description: | + When using [reserved words](https://www.postgresql.org/docs/current/sql-keywords-appendix.html) for column names you need + to add double quotes e.g. `.gt('"order"', 2)` - id: gte title: gte() $ref: '@supabase/postgrest-js.PostgrestFilterBuilder.gte' From cb49607cd89efc11454edd2f3753ff75619c330c Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 20 Feb 2023 21:12:51 +0800 Subject: [PATCH 053/230] Reinstate table component for functions list --- ...tionsRow.tsx => EdgeFunctionsListItem.tsx} | 78 +++++++++---------- .../components/interfaces/Functions/index.ts | 3 +- .../pages/project/[ref]/functions/index.tsx | 34 ++++++-- 3 files changed, 64 insertions(+), 51 deletions(-) rename studio/components/interfaces/Functions/{EdgeFunctionsRow.tsx => EdgeFunctionsListItem.tsx} (54%) diff --git a/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx b/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx similarity index 54% rename from studio/components/interfaces/Functions/EdgeFunctionsRow.tsx rename to studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx index a263b6aff26..0f8a00ecb8b 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionsRow.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx @@ -1,41 +1,44 @@ import dayjs from 'dayjs' -import { useRouter } from 'next/router' import { FC, useState } from 'react' +import { useRouter } from 'next/router' +import { observer } from 'mobx-react-lite' +import { IconCheck, IconClipboard } from 'ui' import * as Tooltip from '@radix-ui/react-tooltip' -import { IconUpload, IconCheck, IconClipboard } from 'ui' import { useParams, useStore } from 'hooks' +import Table from 'components/to-be-cleaned/Table' import { EdgeFunctionsResponse } from 'data/edge-functions/edge-functions-query' interface Props { - fn: EdgeFunctionsResponse + function: EdgeFunctionsResponse } -const EdgeFunctionsRow: FC = ({ fn }) => { +const EdgeFunctionsListItem: FC = ({ function: item }) => { const router = useRouter() - const { ref } = useParams() const { ui } = useStore() + const { ref } = useParams() const [isCopied, setIsCopied] = useState(false) + // get the .co or .net TLD from the restUrl const restUrl = ui.selectedProject?.restUrl const restUrlTld = new URL(restUrl as string).hostname.split('.').pop() - const functionUrl = `https://${ref}.functions.supabase.${restUrlTld}/${fn.slug}` + const functionUrl = `https://${ref}.functions.supabase.${restUrlTld}/${item.slug}` return ( -
router.push(`/project/${ref}/functions/${fn.id}`)} + { + router.push(`/project/${ref}/functions/${item.id}`) + }} > -
-

{fn.name}

-
-

{functionUrl}

+ +
+

{item.name}

+
+
+ +
+

{functionUrl}

-
-
- - -

Deployment {fn.version}

-
- - -
- Deployment history coming soon -
-
-
+ + +

{dayjs(item.created_at).format('DD MMM, YYYY HH:mm')}

+
+
- -

{dayjs(fn.updated_at).fromNow()}

+

{dayjs(item.updated_at).fromNow()}

@@ -98,14 +87,17 @@ const EdgeFunctionsRow: FC = ({ fn }) => { ].join(' ')} > - Last updated on {dayjs(fn.updated_at).format('DD MMM, YYYY HH:mm')} + Last updated on {dayjs(item.updated_at).format('DD MMM, YYYY HH:mm')}
-
-
+ + +

{item.version}

+
+ ) } -export default EdgeFunctionsRow +export default observer(EdgeFunctionsListItem) diff --git a/studio/components/interfaces/Functions/index.ts b/studio/components/interfaces/Functions/index.ts index af628ba5d81..003d5feaca6 100644 --- a/studio/components/interfaces/Functions/index.ts +++ b/studio/components/interfaces/Functions/index.ts @@ -1,5 +1,6 @@ import EdgeFunctionDetails from './EdgeFunctionDetails' +import EdgeFunctionsListItem from './EdgeFunctionsListItem' import FunctionsEmptyState from './FunctionsEmptyState' import TerminalInstructions from './TerminalInstructions' -export { EdgeFunctionDetails, FunctionsEmptyState, TerminalInstructions } +export { EdgeFunctionDetails, EdgeFunctionsListItem, FunctionsEmptyState, TerminalInstructions } diff --git a/studio/pages/project/[ref]/functions/index.tsx b/studio/pages/project/[ref]/functions/index.tsx index 480e1700d87..ae427eed957 100644 --- a/studio/pages/project/[ref]/functions/index.tsx +++ b/studio/pages/project/[ref]/functions/index.tsx @@ -1,11 +1,12 @@ import { observer } from 'mobx-react-lite' + import { useParams } from 'hooks' import { NextPageWithLayout } from 'types' +import Table from 'components/to-be-cleaned/Table' import FunctionsLayout from 'components/layouts/FunctionsLayout' -import { FunctionsEmptyState } from 'components/interfaces/Functions' -import { useEdgeFunctionsQuery } from 'data/edge-functions/edge-functions-query' +import { EdgeFunctionsListItem, FunctionsEmptyState } from 'components/interfaces/Functions' import ShimmeringLoader from 'components/ui/ShimmeringLoader' -import EdgeFunctionsRow from 'components/interfaces/Functions/EdgeFunctionsRow' +import { useEdgeFunctionsQuery } from 'data/edge-functions/edge-functions-query' const PageLayout: NextPageWithLayout = () => { const { ref } = useParams() @@ -24,10 +25,29 @@ const PageLayout: NextPageWithLayout = () => { } return hasFunctions ? ( -
- {(functions ?? []).map((fn) => ( - - ))} +
+
+ {`${functions.length} function${ + functions.length > 1 ? 's' : '' + } deployed`} +
+
+ Name + URL + Created + Last updated + Deployment + + } + body={ + <> + {functions.length > 0 && + functions.map((item: any) => )} + + } + /> ) : ( From 986b529625e665dd037cced0cf588146e595b417 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Mon, 20 Feb 2023 21:33:25 +0800 Subject: [PATCH 054/230] Fix from feedback --- .../interfaces/Database/Wrappers/WrappersDropdown.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/interfaces/Database/Wrappers/WrappersDropdown.tsx b/studio/components/interfaces/Database/Wrappers/WrappersDropdown.tsx index affb01fb608..76a5ce5b6b4 100644 --- a/studio/components/interfaces/Database/Wrappers/WrappersDropdown.tsx +++ b/studio/components/interfaces/Database/Wrappers/WrappersDropdown.tsx @@ -16,7 +16,7 @@ interface Props { const WrapperDropdown: FC = ({ buttonText = 'Add wrapper', align = 'end' }) => { const { ref } = useParams() - const canManageWrappers = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'tables') + const canManageWrappers = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'wrappers') if (!canManageWrappers) { return ( From c9a6695c7023f1da510353cd41238172c47a7c73 Mon Sep 17 00:00:00 2001 From: JD <31992827+jdshaeffer@users.noreply.github.com> Date: Mon, 20 Feb 2023 09:38:01 -0500 Subject: [PATCH 055/230] fix: update sveltekit tutorial - This small change from dynamic public env var to static allows the env vars to be used for deployment, particularly in Vercel. - For some reason, when deploying to Vercel and using `$env/dynamic/public`, the env vars will return `undefined` and you'll get an error when the Supabase client attempts to startup: `supaBase url is required` - This change makes a successful client connection to Supabase --- .../pages/guides/getting-started/tutorials/with-sveltekit.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx index 3be4542731a..1daf9a881ec 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-sveltekit.mdx @@ -50,9 +50,9 @@ These variables will be exposed on the browser, and that's completely fine since ```js title=src/lib/supabaseClient.ts import { createClient } from '@supabase/auth-helpers-sveltekit' -import { env } from '$env/dynamic/public' +import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public' -export const supabase = createClient(env.PUBLIC_SUPABASE_URL, env.PUBLIC_SUPABASE_ANON_KEY) +export const supabase = createClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY) ``` Optionally, update `src/routes/styles.css` with the [CSS from the example](https://raw.githubusercontent.com/supabase/supabase/master/examples/user-management/svelte-user-management/src/app.css). From 77c4f08ea2415fc778a2f1f2cb66862da19f31e8 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Mon, 20 Feb 2023 23:04:18 +0800 Subject: [PATCH 056/230] Update SQLEditor.constants.ts --- .../SQLEditor/SQLEditor.constants.ts | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts b/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts index 2483efe39da..44fb2d5111e 100644 --- a/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts +++ b/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts @@ -969,4 +969,63 @@ GRANT ALL ON TABLE next_auth.verification_tokens TO postgres; GRANT ALL ON TABLE next_auth.verification_tokens TO service_role; `.trim(), }, + { + id: 16, + type: 'template', + title: 'Most frequently invoked', + description: 'Top 10 most frequently called queries in your database.', + sql: `select + auth.rolname, + statements.query, + statements.calls, + statements.total_exec_time + statements.total_plan_time as total_time, + statements.min_exec_time + statements.min_plan_time as min_time, + statements.max_exec_time + statements.max_plan_time as max_time, + statements.mean_exec_time + statements.mean_plan_time as mean_time, + statements.rows / statements.calls as avg_rows + + from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid + order by + statements.calls desc + limit + 10;`, + }, + { + id: 17, + type: 'template', + title: 'Most time consuming', + description: 'Top 10 most time consuming queries in your database.', + sql: `SELECT +auth.rolname, +interval '1 millisecond' * statements.total_exec_time AS total_exec_time, +to_char((statements.total_exec_time/sum(statements.total_exec_time) OVER()) * 100, 'FM90D0') || '%' AS prop_exec_time, +to_char(statements.calls, 'FM999G999G999G990') AS ncalls, +statements.query AS query +FROM pg_stat_statements as statements +INNER JOIN pg_authid AS auth ON statements.userid = auth.oid +ORDER BY total_exec_time DESC +LIMIT 10;`, + }, + { + id: 18, + type: 'template', + title: 'Slowest execution time', + description: 'Top 10 slowest queries based on execution time. ', + sql: `select + auth.rolname, + statements.query, + statements.calls, + statements.total_exec_time + statements.total_plan_time as total_time, + statements.min_exec_time + statements.min_plan_time as min_time, + statements.max_exec_time + statements.max_plan_time as max_time, + statements.mean_exec_time + statements.mean_plan_time as mean_time, + statements.rows / statements.calls as avg_rows + from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid + order by + max_time desc + limit + 10;`, + }, ] From e8c834b82b88e03ecd08225d61717322b34ddfd7 Mon Sep 17 00:00:00 2001 From: Dhanush P Sukruth Date: Thu, 16 Feb 2023 13:52:26 +0530 Subject: [PATCH 057/230] Fix #12466 Adding viewport must solve mobile usability issues --- examples/user-management/sveltekit-user-management/src/app.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/user-management/sveltekit-user-management/src/app.html b/examples/user-management/sveltekit-user-management/src/app.html index b555f2469a3..8ce87909fb7 100644 --- a/examples/user-management/sveltekit-user-management/src/app.html +++ b/examples/user-management/sveltekit-user-management/src/app.html @@ -3,7 +3,7 @@ - + %sveltekit.head% From 4e3e3d7bb5c127a02c996a1347628ae58a19ec6a Mon Sep 17 00:00:00 2001 From: Dhanush P Sukruth Date: Fri, 17 Feb 2023 02:00:20 +0530 Subject: [PATCH 058/230] Fix #12466 added viewport for mobile usability problem. --- apps/docs/components/DocSearch.tsx | 1 + apps/docs/components/Favicons.tsx | 1 + apps/docs/layouts/DefaultLayout.tsx | 2 +- apps/docs/layouts/tutorials/TutorialLayout.tsx | 2 +- apps/docs/pages/_document.tsx | 4 +++- apps/www/pages/_app.tsx | 2 +- apps/www/pages/beta.tsx | 1 + 7 files changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/docs/components/DocSearch.tsx b/apps/docs/components/DocSearch.tsx index 7ff1a5ece2a..e956935ac50 100644 --- a/apps/docs/components/DocSearch.tsx +++ b/apps/docs/components/DocSearch.tsx @@ -48,6 +48,7 @@ export function SearchProvider({ children }: any) { <> + { {/* */} + diff --git a/apps/docs/layouts/DefaultLayout.tsx b/apps/docs/layouts/DefaultLayout.tsx index 3e610896b8b..783ed7f7187 100644 --- a/apps/docs/layouts/DefaultLayout.tsx +++ b/apps/docs/layouts/DefaultLayout.tsx @@ -21,7 +21,7 @@ const Layout: FC = (props: Props) => { {props.meta?.title} | Supabase Docs - + diff --git a/apps/docs/layouts/tutorials/TutorialLayout.tsx b/apps/docs/layouts/tutorials/TutorialLayout.tsx index fc1a2fa8ea9..2f58a612cca 100644 --- a/apps/docs/layouts/tutorials/TutorialLayout.tsx +++ b/apps/docs/layouts/tutorials/TutorialLayout.tsx @@ -50,7 +50,7 @@ const Layout: FC = (props: Props) => { {props.meta?.title} | Supabase - + diff --git a/apps/docs/pages/_document.tsx b/apps/docs/pages/_document.tsx index 98acbb79912..d7c31f22258 100644 --- a/apps/docs/pages/_document.tsx +++ b/apps/docs/pages/_document.tsx @@ -3,7 +3,9 @@ import { Html, Head, Main, NextScript } from 'next/document' export default function Document() { return ( - + + +
diff --git a/apps/www/pages/_app.tsx b/apps/www/pages/_app.tsx index b4fb7a031ce..9698060202f 100644 --- a/apps/www/pages/_app.tsx +++ b/apps/www/pages/_app.tsx @@ -38,7 +38,7 @@ export default function MyApp({ Component, pageProps }: AppProps) { return ( <> - + { {site_title} + From 961faf1035fc8360fad47b73cd12cda501e1d621 Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Sun, 19 Feb 2023 17:31:04 +0100 Subject: [PATCH 059/230] Update apps/docs/components/DocSearch.tsx --- apps/docs/components/DocSearch.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/docs/components/DocSearch.tsx b/apps/docs/components/DocSearch.tsx index e956935ac50..7ff1a5ece2a 100644 --- a/apps/docs/components/DocSearch.tsx +++ b/apps/docs/components/DocSearch.tsx @@ -48,7 +48,6 @@ export function SearchProvider({ children }: any) { <> - Date: Sun, 19 Feb 2023 17:31:28 +0100 Subject: [PATCH 060/230] Update apps/docs/components/Favicons.tsx --- apps/docs/components/Favicons.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/docs/components/Favicons.tsx b/apps/docs/components/Favicons.tsx index cb88257b6d9..5c65346f0fa 100644 --- a/apps/docs/components/Favicons.tsx +++ b/apps/docs/components/Favicons.tsx @@ -25,7 +25,6 @@ const Favicons = () => { {/* */} - From 6642d6446cc02796d36112ea3db7934cd97204a1 Mon Sep 17 00:00:00 2001 From: egor-romanov Date: Mon, 20 Feb 2023 19:50:01 +0300 Subject: [PATCH 061/230] fix prettier errors --- apps/docs/layouts/DefaultLayout.tsx | 2 +- apps/docs/pages/_document.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/docs/layouts/DefaultLayout.tsx b/apps/docs/layouts/DefaultLayout.tsx index 783ed7f7187..0a6b48c5547 100644 --- a/apps/docs/layouts/DefaultLayout.tsx +++ b/apps/docs/layouts/DefaultLayout.tsx @@ -21,7 +21,7 @@ const Layout: FC = (props: Props) => { {props.meta?.title} | Supabase Docs - + diff --git a/apps/docs/pages/_document.tsx b/apps/docs/pages/_document.tsx index d7c31f22258..ed9a8a70c10 100644 --- a/apps/docs/pages/_document.tsx +++ b/apps/docs/pages/_document.tsx @@ -4,7 +4,7 @@ export default function Document() { return ( - +
From f91e806b9e3b7d94535518946603f359b9186a8c Mon Sep 17 00:00:00 2001 From: Kevin Brolly Date: Mon, 20 Feb 2023 22:10:58 +0000 Subject: [PATCH 062/230] Update SQLEditor.constants.ts - Modified monitoring queries --- .../SQLEditor/SQLEditor.constants.ts | 61 +++++++++++++------ 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts b/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts index 44fb2d5111e..40a80e8e7b7 100644 --- a/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts +++ b/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts @@ -973,15 +973,24 @@ GRANT ALL ON TABLE next_auth.verification_tokens TO service_role; id: 16, type: 'template', title: 'Most frequently invoked', - description: 'Top 10 most frequently called queries in your database.', - sql: `select + description: 'Most frequently called queries in your database.', + sql: `-- Most frequently called queries + +-- A limit of 100 has been added below +select auth.rolname, statements.query, statements.calls, + -- -- Postgres 13, 14, 15 statements.total_exec_time + statements.total_plan_time as total_time, statements.min_exec_time + statements.min_plan_time as min_time, statements.max_exec_time + statements.max_plan_time as max_time, statements.mean_exec_time + statements.mean_plan_time as mean_time, + -- -- Postgres <= 12 + -- total_time, + -- min_time, + -- max_time, + -- mean_time, statements.rows / statements.calls as avg_rows from pg_stat_statements as statements @@ -989,43 +998,59 @@ GRANT ALL ON TABLE next_auth.verification_tokens TO service_role; order by statements.calls desc limit - 10;`, + 100;`, }, { id: 17, type: 'template', title: 'Most time consuming', - description: 'Top 10 most time consuming queries in your database.', - sql: `SELECT -auth.rolname, -interval '1 millisecond' * statements.total_exec_time AS total_exec_time, -to_char((statements.total_exec_time/sum(statements.total_exec_time) OVER()) * 100, 'FM90D0') || '%' AS prop_exec_time, -to_char(statements.calls, 'FM999G999G999G990') AS ncalls, -statements.query AS query -FROM pg_stat_statements as statements -INNER JOIN pg_authid AS auth ON statements.userid = auth.oid -ORDER BY total_exec_time DESC -LIMIT 10;`, + description: 'Aggregate time spent on a query type.', + sql: `-- Most time consuming queries + +-- A limit of 100 has been added below + +select + auth.rolname, + statements.query, + statements.calls, + statements.total_exec_time + statements.total_plan_time as total_time, + to_char(((statements.total_exec_time + statements.total_plan_time)/sum(statements.total_exec_time + statements.total_plan_time) OVER()) * 100, 'FM90D0') || '%' AS prop_total_time + from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid + order by + total_time desc + limit + 100;`, }, { id: 18, type: 'template', title: 'Slowest execution time', - description: 'Top 10 slowest queries based on execution time. ', - sql: `select + description: 'Slowest queries based on max execution time.', + sql: `-- Slowest queries by max execution time + +-- A limit of 100 has been added below + +select auth.rolname, statements.query, statements.calls, + -- -- Postgres 13, 14, 15 statements.total_exec_time + statements.total_plan_time as total_time, statements.min_exec_time + statements.min_plan_time as min_time, statements.max_exec_time + statements.max_plan_time as max_time, statements.mean_exec_time + statements.mean_plan_time as mean_time, + -- -- Postgres <= 12 + -- total_time, + -- min_time, + -- max_time, + -- mean_time, statements.rows / statements.calls as avg_rows from pg_stat_statements as statements inner join pg_authid as auth on statements.userid = auth.oid order by max_time desc limit - 10;`, - }, + 100;`, + } ] From ac0bec65e3b97beae76ce509745b6c52ba2d6a89 Mon Sep 17 00:00:00 2001 From: Kevin Brolly Date: Mon, 20 Feb 2023 22:21:01 +0000 Subject: [PATCH 063/230] Updated SQLEditor.constants.ts - Added query to see cache & index hit rate --- .../SQLEditor/SQLEditor.constants.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts b/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts index 40a80e8e7b7..b9c908eeae3 100644 --- a/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts +++ b/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts @@ -977,6 +977,7 @@ GRANT ALL ON TABLE next_auth.verification_tokens TO service_role; sql: `-- Most frequently called queries -- A limit of 100 has been added below + select auth.rolname, statements.query, @@ -1052,5 +1053,22 @@ select max_time desc limit 100;`, + }, + { + id: 19, + type: 'template', + title: 'Hit rate', + description: 'See your cache and index hit rate.', + sql: `-- Cache and index hit rate + +select + 'index hit rate' as name, + (sum(idx_blks_hit)) / nullif(sum(idx_blks_hit + idx_blks_read),0) as ratio + from pg_statio_user_indexes + union all + select + 'table hit rate' as name, + sum(heap_blks_hit) / nullif(sum(heap_blks_hit) + sum(heap_blks_read),0) as ratio + from pg_statio_user_tables;`, } ] From 1dafd72d486cbe6a4b7bf6d8f52a042033fee0cd Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Mon, 20 Feb 2023 21:05:56 -0330 Subject: [PATCH 064/230] Fix bearer typo --- .../TableGridEditor/TableGridEditor.tsx | 12 ++-- studio/pages/project/[ref]/api/index.tsx | 72 ------------------- 2 files changed, 6 insertions(+), 78 deletions(-) diff --git a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx index 71c6f5b35bc..30d3e925357 100644 --- a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx @@ -6,7 +6,7 @@ import type { PostgresColumn, PostgresTable } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import { SchemaView } from 'types' -import { checkPermissions, useFlag, useStore } from 'hooks' +import { checkPermissions, useFlag, useStore, useParams } from 'hooks' import GridHeaderActions from './GridHeaderActions' import NotFoundState from './NotFoundState' import SidePanelEditor from './SidePanelEditor' @@ -19,6 +19,7 @@ import { useProjectJsonSchemaQuery } from 'data/docs/project-json-schema-query' import { snakeToCamel } from 'lib/helpers' import LangSelector from 'components/to-be-cleaned/Docs/LangSelector' import { JsonEditValue } from './SidePanelEditor/RowEditor/RowEditor.types' +import Introduction from 'components/to-be-cleaned/Docs/Pages/Tables/Introduction' interface Props { /** Theme for the editor */ @@ -69,10 +70,9 @@ const TableGridEditor: FC = ({ const { meta, ui, vault } = useStore() const router = useRouter() const { query } = router - const { page } = query - + const { ref: projectRef } = useParams() const gridRef = useRef(null) - const projectRef = ui.selectedProject?.ref + const tables = meta.tables.list() const { data: settings } = useProjectApiQuery({ projectRef: projectRef }) @@ -330,7 +330,7 @@ const TableGridEditor: FC = ({ autoApiService={autoApiService} selectedLang={selectedLang} showApiKey={true} - page={page} + page="table-editor" /> {jsonSchema?.definitions && ( @@ -341,7 +341,7 @@ const TableGridEditor: FC = ({ resources={resources} definitions={jsonSchema.definitions} paths={jsonSchema.paths} - showApiKey={true} + showApiKey={showApiKey.key} refreshDocs={refreshDocs} /> )} diff --git a/studio/pages/project/[ref]/api/index.tsx b/studio/pages/project/[ref]/api/index.tsx index ff1ef6824f0..7e8216d627f 100644 --- a/studio/pages/project/[ref]/api/index.tsx +++ b/studio/pages/project/[ref]/api/index.tsx @@ -140,78 +140,6 @@ const DocView: FC = observer(({}) => { apiKey={anonKey} autoApiService={autoApiService} /> - {/*
-
- - - {selectedLang == 'bash' && ( -
-
- - Project API key : -
- - setShowApiKey(DEFAULT_KEY)}> - hide - - - setShowApiKey({ - key: anonKey, - name: 'anon (public)', - }) - } - > - anon (public) - - {canReadServiceKey && ( - - setShowApiKey({ - key: autoApiService.serviceApiKey, - name: 'service_role (secret)', - }) - } - > - service_role (secret) - - )} - - } - > - - -
- )} -
-
*/}
{resource ? ( From 805fbff496a542ee26d036ca1107b9e20ba1f61f Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Mon, 20 Feb 2023 21:26:33 -0330 Subject: [PATCH 065/230] Add generating types to api preview --- .../interfaces/Docs/GeneratingTypes.tsx | 112 ++++++++++++++++++ .../Docs/LangSelector.tsx | 0 .../TableGridEditor/TableGridEditor.tsx | 9 +- .../Docs/Pages/Tables/Introduction.tsx | 96 +-------------- studio/pages/project/[ref]/api/index.tsx | 7 +- 5 files changed, 123 insertions(+), 101 deletions(-) create mode 100644 studio/components/interfaces/Docs/GeneratingTypes.tsx rename studio/components/{to-be-cleaned => interfaces}/Docs/LangSelector.tsx (100%) diff --git a/studio/components/interfaces/Docs/GeneratingTypes.tsx b/studio/components/interfaces/Docs/GeneratingTypes.tsx new file mode 100644 index 00000000000..0a6d54579d2 --- /dev/null +++ b/studio/components/interfaces/Docs/GeneratingTypes.tsx @@ -0,0 +1,112 @@ +import { FC, useState } from 'react' +import Link from 'next/link' +import React from 'react' +import { Button, IconDownload, IconExternalLink } from 'ui' +import { API_ADMIN_URL } from 'lib/constants' +import { get } from 'lib/common/fetch' +import { useParams, useStore } from 'hooks' +import CodeSnippet from 'components/to-be-cleaned/Docs/CodeSnippet' + +interface Props { + selectedLang: string +} + +export default function GeneratingTypes({ selectedLang }: Props) { + const { ref } = useParams() + const { ui } = useStore() + const [isGeneratingTypes, setIsGeneratingTypes] = useState(false) + + const generateTypes = async () => { + setIsGeneratingTypes(true) + const res = await get(`${API_ADMIN_URL}/projects/${ref}/types/typescript`) + + if (!res.error) { + let element = document.createElement('a') + element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(res.types)) + element.setAttribute('download', 'supabase.ts') + element.style.display = 'none' + document.body.appendChild(element) + element.click() + document.body.removeChild(element) + ui.setNotification({ + category: 'success', + message: `Successfully generated types! File is being downloaded`, + }) + } else { + ui.setNotification({ + category: 'error', + message: `Failed to generate types: ${res.error.message}`, + error: res.error, + }) + } + + setIsGeneratingTypes(false) + } + return ( + <> +

+ Generating types + + + + + +

+
+
+

+ Supabase APIs are generated from your database, which means that we can use database + introspection to generate type-safe API definitions. +

+

+ You can generate types from your database either through the{' '} + + Supabase CLI + + , or by downloading the types file via the button on the right and importing it in your + application within src/index.ts. +

+
+
+ {selectedLang === 'js' && ( + + )} + + +
+
+ + ) +} + +const localSnippets = { + cliLogin: () => ({ + title: 'Login via the CLI with your Personal Access Token', + bash: { + code: ` +npx supabase login +`, + }, + }), + generateTypes: (ref: string) => ({ + title: 'Generate types', + bash: { + code: ` +npx supabase gen types typescript --project-id "${ref}" --schema public > types/supabase.ts +`, + }, + }), +} diff --git a/studio/components/to-be-cleaned/Docs/LangSelector.tsx b/studio/components/interfaces/Docs/LangSelector.tsx similarity index 100% rename from studio/components/to-be-cleaned/Docs/LangSelector.tsx rename to studio/components/interfaces/Docs/LangSelector.tsx diff --git a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx index 30d3e925357..a084a3ea1b9 100644 --- a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx @@ -17,9 +17,10 @@ import { GeneralContent, ResourceContent } from '../Docs' import { useProjectApiQuery } from 'data/config/project-api-query' import { useProjectJsonSchemaQuery } from 'data/docs/project-json-schema-query' import { snakeToCamel } from 'lib/helpers' -import LangSelector from 'components/to-be-cleaned/Docs/LangSelector' import { JsonEditValue } from './SidePanelEditor/RowEditor/RowEditor.types' import Introduction from 'components/to-be-cleaned/Docs/Pages/Tables/Introduction' +import LangSelector from '../Docs/LangSelector' +import GeneratingTypes from '../Docs/GeneratingTypes' interface Props { /** Theme for the editor */ @@ -70,7 +71,7 @@ const TableGridEditor: FC = ({ const { meta, ui, vault } = useStore() const router = useRouter() const { query } = router - const { ref: projectRef } = useParams() + const { ref: projectRef, page } = useParams() const gridRef = useRef(null) const tables = meta.tables.list() @@ -330,9 +331,11 @@ const TableGridEditor: FC = ({ autoApiService={autoApiService} selectedLang={selectedLang} showApiKey={true} - page="table-editor" + page={page} /> + + {jsonSchema?.definitions && ( = ({ selectedLang }) => { const { ref } = useParams() - const { ui } = useStore() - const [isGeneratingTypes, setIsGeneratingTypes] = useState(false) - - const generateTypes = async () => { - setIsGeneratingTypes(true) - const res = await get(`${API_ADMIN_URL}/projects/${ref}/types/typescript`) - - if (!res.error) { - let element = document.createElement('a') - element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(res.types)) - element.setAttribute('download', 'supabase.ts') - element.style.display = 'none' - document.body.appendChild(element) - element.click() - document.body.removeChild(element) - ui.setNotification({ - category: 'success', - message: `Successfully generated types! File is being downloaded`, - }) - } else { - ui.setNotification({ - category: 'error', - message: `Failed to generate types: ${res.error.message}`, - error: res.error, - }) - } - - setIsGeneratingTypes(false) - } return ( <> @@ -65,48 +34,7 @@ const Introduction: FC = ({ selectedLang }) => {
-

- Generating types - - - - - -

-
-
-

- Supabase APIs are generated from your database, which means that we can use database - introspection to generate type-safe API definitions. -

-

- You can generate types from your database either through the{' '} - Supabase CLI, - or by downloading the types file via the button on the right and importing it in your - application within src/index.ts. -

-
-
- {selectedLang === 'js' && ( - - )} - - -
-
+

GraphQL vs Supabase @@ -141,22 +69,6 @@ const Introduction: FC = ({ selectedLang }) => { } const localSnippets = { - cliLogin: () => ({ - title: 'Login via the CLI with your Personal Access Token', - bash: { - code: ` -npx supabase login -`, - }, - }), - generateTypes: (ref: string) => ({ - title: 'Generate types', - bash: { - code: ` -npx supabase gen types typescript --project-id "${ref}" --schema public > types/supabase.ts -`, - }, - }), withApollo: () => ({ title: 'With Apollo GraphQL', bash: { diff --git a/studio/pages/project/[ref]/api/index.tsx b/studio/pages/project/[ref]/api/index.tsx index 7e8216d627f..5f4e22b9031 100644 --- a/studio/pages/project/[ref]/api/index.tsx +++ b/studio/pages/project/[ref]/api/index.tsx @@ -10,7 +10,7 @@ import { DocsLayout } from 'components/layouts' import { GeneralContent, ResourceContent, RpcContent } from 'components/interfaces/Docs' import { PermissionAction } from '@supabase/shared-types/out/constants' import { useProjectJsonSchemaQuery } from 'data/docs/project-json-schema-query' -import LangSelector from 'components/to-be-cleaned/Docs/LangSelector' +import LangSelector from 'components/interfaces/Docs/LangSelector' const PageContext = createContext(null) @@ -79,11 +79,6 @@ const DocView: FC = observer(({}) => { : undefined const swaggerUrl = data?.autoApiService?.restUrl - const canReadServiceKey = checkPermissions( - PermissionAction.READ, - 'service_api_keys.service_role_key' - ) - const { data: jsonSchema, error: jsonSchemaError, From 4dd6ab8f8774b74dcd0c518cc5f4f9e76cfaa9e4 Mon Sep 17 00:00:00 2001 From: thorwebdev Date: Tue, 21 Feb 2023 11:23:39 +0800 Subject: [PATCH 066/230] chore: update openai and streams examples. --- examples/edge-functions/supabase/functions/import_map.json | 4 +++- examples/edge-functions/supabase/functions/openai/README.md | 2 +- examples/edge-functions/supabase/functions/openai/index.ts | 6 +++--- .../edge-functions/supabase/functions/streams/README.md | 2 +- examples/edge-functions/supabase/functions/streams/index.ts | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/examples/edge-functions/supabase/functions/import_map.json b/examples/edge-functions/supabase/functions/import_map.json index 087feb7c033..be4b4d84118 100644 --- a/examples/edge-functions/supabase/functions/import_map.json +++ b/examples/edge-functions/supabase/functions/import_map.json @@ -4,6 +4,7 @@ "nacl": "https://cdn.skypack.dev/tweetnacl@v1.0.3?dts", "oak": "https://deno.land/x/oak@v11.1.0/mod.ts", "og_edge": "https://deno.land/x/og_edge@0.0.4/mod.ts", + "openai": "https://esm.sh/openai@3.1.0", "grammy": "https://deno.land/x/grammy@v1.8.3/mod.ts", "react": "https://esm.sh/react@18.2.0", "std/server": "https://deno.land/std@0.177.0/http/server.ts", @@ -13,6 +14,7 @@ "postgres": "https://deno.land/x/postgres@v0.14.2/mod.ts", "puppeteer": "https://deno.land/x/puppeteer@16.2.0/mod.ts", "React": "https://esm.sh/react@18.2.0?deno-std=0.177.0", - "upstash_redis": "https://deno.land/x/upstash_redis@v1.19.3/mod.ts" + "upstash_redis": "https://deno.land/x/upstash_redis@v1.19.3/mod.ts", + "xhr_polyfill": "https://deno.land/x/xhr@0.3.0/mod.ts" } } diff --git a/examples/edge-functions/supabase/functions/openai/README.md b/examples/edge-functions/supabase/functions/openai/README.md index 4433aa6abb1..33894bacb4f 100644 --- a/examples/edge-functions/supabase/functions/openai/README.md +++ b/examples/edge-functions/supabase/functions/openai/README.md @@ -9,7 +9,7 @@ cp supabase/.env.local.example supabase/.env.local ## Run locally ```bash -supabase functions serve --no-verify-jwt --env-file ./supabase/.env.local openai +supabase functions serve --env-file ./supabase/.env.local --no-verify-jwt ``` Use cURL or Postman to make a POST request to http://localhost:54321/functions/v1/openai. diff --git a/examples/edge-functions/supabase/functions/openai/index.ts b/examples/edge-functions/supabase/functions/openai/index.ts index 5bab2eafbb2..a7418d73e19 100644 --- a/examples/edge-functions/supabase/functions/openai/index.ts +++ b/examples/edge-functions/supabase/functions/openai/index.ts @@ -1,6 +1,6 @@ -import 'https://deno.land/x/xhr@0.3.0/mod.ts' -import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' -import { CreateCompletionRequest } from 'https://esm.sh/openai@3.1.0' +import 'xhr_polyfill' +import { serve } from 'std/server' +import { CreateCompletionRequest } from 'openai' serve(async (req) => { const { query } = await req.json() diff --git a/examples/edge-functions/supabase/functions/streams/README.md b/examples/edge-functions/supabase/functions/streams/README.md index 52cd230a364..1be0ec27b24 100644 --- a/examples/edge-functions/supabase/functions/streams/README.md +++ b/examples/edge-functions/supabase/functions/streams/README.md @@ -3,7 +3,7 @@ ## Run locally ```bash -supabase functions serve --no-verify-jwt streams +supabase functions serve --no-verify-jwt ``` Use cURL or Postman to make a GET request to http://localhost:54321/functions/v1/streams. diff --git a/examples/edge-functions/supabase/functions/streams/index.ts b/examples/edge-functions/supabase/functions/streams/index.ts index 15d3c2ace8e..dafbf83c7d7 100644 --- a/examples/edge-functions/supabase/functions/streams/index.ts +++ b/examples/edge-functions/supabase/functions/streams/index.ts @@ -1,4 +1,4 @@ -import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' +import { serve } from 'std/server' const msg = new TextEncoder().encode('data: hello\r\n\r\n') From c4accb568f9be245450738b1d1b873028f08566c Mon Sep 17 00:00:00 2001 From: thorwebdev Date: Tue, 21 Feb 2023 11:42:45 +0800 Subject: [PATCH 067/230] chore: update docs. --- apps/docs/pages/guides/functions/examples/upstash-redis.mdx | 2 +- apps/docs/pages/guides/functions/local-development.mdx | 6 +++--- apps/docs/pages/guides/functions/secrets.mdx | 2 +- spec/cli_v1_commands--old.yaml | 4 ++-- spec/cli_v1_commands.yaml | 4 ++-- spec/common-cli-sections.json | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/docs/pages/guides/functions/examples/upstash-redis.mdx b/apps/docs/pages/guides/functions/examples/upstash-redis.mdx index bbe58dd4dd1..77411c5b1d8 100644 --- a/apps/docs/pages/guides/functions/examples/upstash-redis.mdx +++ b/apps/docs/pages/guides/functions/examples/upstash-redis.mdx @@ -73,7 +73,7 @@ serve(async (_req) => { ```bash supabase start -supabase functions serve upstash-redis-counter --no-verify-jwt --env-file supabase/functions/upstash-redis-counter/.env +supabase functions serve --no-verify-jwt --env-file supabase/functions/upstash-redis-counter/.env ``` Navigate to http://localhost:54321/functions/v1/upstash-redis-counter. diff --git a/apps/docs/pages/guides/functions/local-development.mdx b/apps/docs/pages/guides/functions/local-development.mdx index e342abe9b14..254cad70044 100644 --- a/apps/docs/pages/guides/functions/local-development.mdx +++ b/apps/docs/pages/guides/functions/local-development.mdx @@ -10,7 +10,7 @@ You can run your Edge Function locally using [`supabase functions serve`](/docs/ ```bash supabase start # start the supabase stack -supabase functions serve hello-world # start the Function watcher +supabase functions serve # start the Functions watcher ``` The `functions serve` command has hot-reloading capabilities. It will watch for any changes to your files and restart the Deno server. @@ -20,7 +20,7 @@ The `functions serve` command has hot-reloading capabilities. It will watch for While serving your local Edge Function, you can invoke it using curl: ```bash -curl --request POST 'http://localhost:54321/functions/v1/hello-world' \ +curl --request POST 'http://localhost:54321/functions/v1/function-name' \ --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24ifQ.625_WdcF3KHqz5amU0x2X5WWHP-OEs_4qj0ssLNHzTs' \ --header 'Content-Type: application/json' \ --data '{ "name":"Functions" }' @@ -37,7 +37,7 @@ const supabase = createClient( 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0' ) -const { data, error } = await supabase.functions.invoke('hello-world', { +const { data, error } = await supabase.functions.invoke('function-name', { body: { name: 'Functions' }, }) ``` diff --git a/apps/docs/pages/guides/functions/secrets.mdx b/apps/docs/pages/guides/functions/secrets.mdx index 3d60a239a8b..3487fc94d79 100644 --- a/apps/docs/pages/guides/functions/secrets.mdx +++ b/apps/docs/pages/guides/functions/secrets.mdx @@ -46,7 +46,7 @@ console.log(Deno.env.get('MY_NAME')) Now we can invoke our function locally, by serving it with our new `.env.local` file: ```bash -supabase functions serve hello-world --env-file ./supabase/.env.local +supabase functions serve --env-file ./supabase/.env.local ``` When the function starts you should see the name “Yoda” output to the terminal. diff --git a/spec/cli_v1_commands--old.yaml b/spec/cli_v1_commands--old.yaml index d7af310d127..f3671ceb1ae 100644 --- a/spec/cli_v1_commands--old.yaml +++ b/spec/cli_v1_commands--old.yaml @@ -380,12 +380,12 @@ commands: ``` - id: supabase-functions-serve title: supabase functions serve - summary: Serve a Function locally + summary: Serve Functions locally tags: [] links: [] usage: |- ```sh - supabase functions serve [flags] + supabase functions serve [flags] ``` subcommands: [] options: |- diff --git a/spec/cli_v1_commands.yaml b/spec/cli_v1_commands.yaml index c060b75634e..daf13552001 100644 --- a/spec/cli_v1_commands.yaml +++ b/spec/cli_v1_commands.yaml @@ -761,10 +761,10 @@ commands: flags: [] - id: supabase-functions-serve title: supabase functions serve - summary: Serve a Function locally + summary: Serve all functions locally tags: [] links: [] - usage: supabase functions serve [flags] + usage: supabase functions serve [flags] subcommands: [] flags: - id: env-file diff --git a/spec/common-cli-sections.json b/spec/common-cli-sections.json index 8e5dff89916..127c10a5318 100644 --- a/spec/common-cli-sections.json +++ b/spec/common-cli-sections.json @@ -239,7 +239,7 @@ }, { "id": "supabase-functions-serve", - "title": "Serve a function", + "title": "Serve functions locally", "slug": "supabase-functions-serve", "type": "cli-command" }, From 4918207adf74be1a46c8fb6eaaab772e2c1f7c34 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 21 Feb 2023 12:03:20 +0800 Subject: [PATCH 068/230] Clicking into edge functions will lead to details page --- studio/components/interfaces/Functions/EdgeFunctionDetails.tsx | 2 +- .../components/interfaces/Functions/EdgeFunctionsListItem.tsx | 2 +- studio/components/interfaces/Functions/FunctionsNav.tsx | 2 +- studio/pages/project/[ref]/functions/index.tsx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx b/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx index f2f21e65c04..42b4986fc64 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx @@ -222,7 +222,7 @@ const EdgeFunctionDetails: FC = () => {
- Deployment + Deployments
{selectedFunction?.version}
diff --git a/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx b/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx index 0f8a00ecb8b..0d9ce1f727b 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionsListItem.tsx @@ -28,7 +28,7 @@ const EdgeFunctionsListItem: FC = ({ function: item }) => { { - router.push(`/project/${ref}/functions/${item.id}`) + router.push(`/project/${ref}/functions/${item.id}/details`) }} > diff --git a/studio/components/interfaces/Functions/FunctionsNav.tsx b/studio/components/interfaces/Functions/FunctionsNav.tsx index 992a11474d0..af24e28d29f 100644 --- a/studio/components/interfaces/Functions/FunctionsNav.tsx +++ b/studio/components/interfaces/Functions/FunctionsNav.tsx @@ -16,8 +16,8 @@ const FunctionsNav = ({ item }: any) => { router.push(`/project/${ref}/functions/${item.id}/${e === 'metrics' ? '' : e}`) } > - + diff --git a/studio/pages/project/[ref]/functions/index.tsx b/studio/pages/project/[ref]/functions/index.tsx index ae427eed957..e78b41e0996 100644 --- a/studio/pages/project/[ref]/functions/index.tsx +++ b/studio/pages/project/[ref]/functions/index.tsx @@ -38,7 +38,7 @@ const PageLayout: NextPageWithLayout = () => { URL Created Last updated - Deployment + Deployments } body={ From 9e7623eb1773847a5490245a20f05fc013874f49 Mon Sep 17 00:00:00 2001 From: Isaiah Hamilton Date: Mon, 20 Feb 2023 23:11:05 -0500 Subject: [PATCH 069/230] fix: docs sidebar --- .../Navigation/NavigationMenu/NavigationMenuGuideList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx index 7e52d424832..1223868ffb7 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx @@ -38,7 +38,7 @@ const NavigationMenuGuideList: React.FC = ({ id, active }) => { // disabled // level !== 'home' && level !== id ? '-ml-8' : '', - !active ? 'opacity-0 invisible absolute' : '', + !active ? 'opacity-0 hidden absolute' : '', ].join(' ')} > From 6a2ad6fcfb1ded6b80204ee09d8f1c4431ef7121 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Thu, 2 Feb 2023 17:07:34 +1100 Subject: [PATCH 070/230] fix: remove credentials: 'include' from fetch requests --- studio/lib/common/fetch/delete.ts | 1 - studio/lib/common/fetch/get.ts | 2 -- studio/lib/common/fetch/head.ts | 2 -- studio/lib/common/fetch/patch.ts | 1 - studio/lib/common/fetch/post.ts | 1 - 5 files changed, 7 deletions(-) diff --git a/studio/lib/common/fetch/delete.ts b/studio/lib/common/fetch/delete.ts index ff5a2f3f4eb..4bedf25cfac 100644 --- a/studio/lib/common/fetch/delete.ts +++ b/studio/lib/common/fetch/delete.ts @@ -14,7 +14,6 @@ export async function delete_( const response = await fetch(url, { method: 'DELETE', body: JSON.stringify(data), - credentials: 'include', referrerPolicy: 'no-referrer-when-downgrade', headers, ...otherOptions, diff --git a/studio/lib/common/fetch/get.ts b/studio/lib/common/fetch/get.ts index dc4f56a0816..58b3f8946d3 100644 --- a/studio/lib/common/fetch/get.ts +++ b/studio/lib/common/fetch/get.ts @@ -12,7 +12,6 @@ export async function get( const headers = await constructHeaders(requestId, optionHeaders) const response = await fetch(url, { method: 'GET', - credentials: 'include', referrerPolicy: 'no-referrer-when-downgrade', headers, ...otherOptions, @@ -37,7 +36,6 @@ export async function getWithTimeout( const headers = await constructHeaders(requestId, optionHeaders) const response = await fetch(url, { method: 'GET', - credentials: 'include', referrerPolicy: 'no-referrer-when-downgrade', headers, ...otherOptions, diff --git a/studio/lib/common/fetch/head.ts b/studio/lib/common/fetch/head.ts index 6d7e7f42d6e..2bcba4895f3 100644 --- a/studio/lib/common/fetch/head.ts +++ b/studio/lib/common/fetch/head.ts @@ -13,7 +13,6 @@ export async function head( const headers = await constructHeaders(requestId, optionHeaders) const response = await fetch(url, { method: 'HEAD', - credentials: 'include', referrerPolicy: 'no-referrer-when-downgrade', headers, ...otherOptions, @@ -39,7 +38,6 @@ export async function headWithTimeout( const headers = await constructHeaders(requestId, optionHeaders) const response = await fetch(url, { method: 'HEAD', - credentials: 'include', referrerPolicy: 'no-referrer-when-downgrade', headers, ...otherOptions, diff --git a/studio/lib/common/fetch/patch.ts b/studio/lib/common/fetch/patch.ts index 9ca15e0c989..7fcf4aad2c9 100644 --- a/studio/lib/common/fetch/patch.ts +++ b/studio/lib/common/fetch/patch.ts @@ -14,7 +14,6 @@ export async function patch( const response = await fetch(url, { method: 'PATCH', body: JSON.stringify(data), - credentials: 'include', referrerPolicy: 'no-referrer-when-downgrade', headers, ...otherOptions, diff --git a/studio/lib/common/fetch/post.ts b/studio/lib/common/fetch/post.ts index e4757dc34a6..c71f86a14b6 100644 --- a/studio/lib/common/fetch/post.ts +++ b/studio/lib/common/fetch/post.ts @@ -14,7 +14,6 @@ export async function post( const response = await fetch(url, { method: 'POST', body: JSON.stringify(data), - credentials: 'include', referrerPolicy: 'no-referrer-when-downgrade', headers, ...otherOptions, From 33f1c837107da1ae3e0c486d44320584850ed487 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 21 Feb 2023 14:23:10 +0800 Subject: [PATCH 071/230] Update NavigationMenuGuideList.tsx --- .../Navigation/NavigationMenu/NavigationMenuGuideList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx index 1223868ffb7..c55ec3b6f0d 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenuGuideList.tsx @@ -38,7 +38,7 @@ const NavigationMenuGuideList: React.FC = ({ id, active }) => { // disabled // level !== 'home' && level !== id ? '-ml-8' : '', - !active ? 'opacity-0 hidden absolute' : '', + !active ? 'opacity-0 invisible absolute h-0 overflow-hidden' : '', ].join(' ')} > From ddb0a33c0d1375d943ce17f3b2ce27814f746011 Mon Sep 17 00:00:00 2001 From: thorwebdev Date: Tue, 21 Feb 2023 14:26:06 +0800 Subject: [PATCH 072/230] chore: add openai example. --- .../NavigationMenu.constants.ts | 2 + .../examples/connect-to-postgres.mdx | 1 + .../guides/functions/examples/openai.mdx | 84 ++++++++++++++++++ .../img/integrations/logos/openai_logo.png | Bin 0 -> 48063 bytes 4 files changed, 87 insertions(+) create mode 100644 apps/docs/pages/guides/functions/examples/openai.mdx create mode 100644 apps/docs/public/img/integrations/logos/openai_logo.png diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 7385afd2d3d..3a0cd161cca 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -555,6 +555,7 @@ export const functions = { }, { name: 'GitHub Actions', url: '/guides/functions/examples/github-actions', items: [] }, { name: 'OG Image', url: '/guides/functions/examples/og-image', items: [] }, + { name: 'OpenAI', url: '/guides/functions/examples/openai', items: [] }, { name: 'Storage Caching', url: '/guides/functions/examples/storage-caching', items: [] }, { name: 'Stripe Webhooks', url: '/guides/functions/examples/stripe-webhooks', items: [] }, { name: 'Telegram Bot', url: '/guides/functions/examples/telegram-bot', items: [] }, @@ -821,6 +822,7 @@ export const integrations = { url: undefined, items: [ { name: 'Estuary', url: '/guides/integrations/estuary', items: [] }, + { name: 'OpenAI', url: '/guides/functions/examples/openai', items: [] }, { name: 'pgMustard', url: '/guides/integrations/pgmustard', items: [] }, { name: 'Prisma', url: '/guides/integrations/prisma', items: [] }, { name: 'Sequin', url: '/guides/integrations/sequin', items: [] }, diff --git a/apps/docs/pages/guides/functions/examples/connect-to-postgres.mdx b/apps/docs/pages/guides/functions/examples/connect-to-postgres.mdx index 3b66a4affd9..de9f2378359 100644 --- a/apps/docs/pages/guides/functions/examples/connect-to-postgres.mdx +++ b/apps/docs/pages/guides/functions/examples/connect-to-postgres.mdx @@ -4,6 +4,7 @@ export const meta = { id: 'examples-postgres-on-the-edge', title: 'Connect to Postgres', description: 'Connecting to Postgres from Edge Functions.', + video: 'https://www.youtube.com/v/cl7EuF1-RsY', }
diff --git a/apps/docs/pages/guides/functions/examples/openai.mdx b/apps/docs/pages/guides/functions/examples/openai.mdx new file mode 100644 index 00000000000..bc24d6a151a --- /dev/null +++ b/apps/docs/pages/guides/functions/examples/openai.mdx @@ -0,0 +1,84 @@ +import Layout from '~/layouts/DefaultGuideLayout' + +export const meta = { + id: 'examples-openai', + title: 'OpenAI', + description: 'Using OpenAI in Edge Functions.', + video: 'https://www.youtube.com/v/29p8kIqyU_Y', +} + +
+ +
+ +Use the [OpenAI completions API](https://platform.openai.com/docs/api-reference/completions) in Supabase Edge Functions. + +```ts index.ts +import 'xhr_polyfill' +import { serve } from 'std/server' +import { CreateCompletionRequest } from 'openai' + +serve(async (req) => { + const { query } = await req.json() + + const completionConfig: CreateCompletionRequest = { + model: 'text-davinci-003', + prompt: query, + max_tokens: 256, + temperature: 0, + stream: true, + } + + return fetch('https://api.openai.com/v1/completions', { + method: 'POST', + headers: { + Authorization: `Bearer ${Deno.env.get('OPENAI_API_KEY')}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify(completionConfig), + }) +}) +``` + +## Run locally + +```bash +supabase functions serve --env-file ./supabase/.env.local --no-verify-jwt +``` + +Use cURL or Postman to make a POST request to http://localhost:54321/functions/v1/openai. + +```bash +curl -i --location --request POST http://localhost:54321/functions/v1/openai \ + --header 'Content-Type: application/json' \ + --data '{"query":"What is Supabase?"}' +``` + +## Deploy + +```bash +supabase functions deploy --no-verify-jwt openai +supabase secrets set --env-file ./supabase/.env.local +``` + +## Go deeper + +If you're interesting in learning how to use this to build your own ChatGPT, read [the blog post](/blog/chatgpt-supabase-docs) and check out the video: + +
+ +
+ +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/public/img/integrations/logos/openai_logo.png b/apps/docs/public/img/integrations/logos/openai_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c5596878b0b39bd3dff02db3ad6c2733345d1f7d GIT binary patch literal 48063 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

)wPS90WhetGP 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 KC>JT3y!$_5swKk! literal 0 HcmV?d00001 From 805358d0da7b33139f50683145e2a3378a3e1d97 Mon Sep 17 00:00:00 2001 From: thorwebdev Date: Tue, 21 Feb 2023 14:56:05 +0800 Subject: [PATCH 073/230] chore: sync all examples. --- .../NavigationMenu.constants.ts | 1 + apps/docs/pages/guides/functions.mdx | 69 ++++++- apps/docs/pages/guides/functions/auth.mdx | 2 +- apps/docs/pages/guides/functions/cors.mdx | 2 +- .../examples/cloudflare-turnstile.mdx | 2 +- .../examples/connect-to-postgres.mdx | 2 +- .../guides/functions/examples/discord-bot.mdx | 178 ++++++++++++++++++ .../guides/functions/examples/og-image.mdx | 2 +- .../pages/guides/integrations/onesignal.mdx | 68 +++---- 9 files changed, 277 insertions(+), 49 deletions(-) create mode 100644 apps/docs/pages/guides/functions/examples/discord-bot.mdx diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 3a0cd161cca..88c2d614951 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -553,6 +553,7 @@ export const functions = { url: '/guides/functions/examples/connect-to-postgres', items: [], }, + { name: 'Discord Bot', url: '/guides/functions/examples/discord-bot', items: [] }, { name: 'GitHub Actions', url: '/guides/functions/examples/github-actions', items: [] }, { name: 'OG Image', url: '/guides/functions/examples/og-image', items: [] }, { name: 'OpenAI', url: '/guides/functions/examples/openai', items: [] }, diff --git a/apps/docs/pages/guides/functions.mdx b/apps/docs/pages/guides/functions.mdx index a382f7ccde1..b19ddb81872 100644 --- a/apps/docs/pages/guides/functions.mdx +++ b/apps/docs/pages/guides/functions.mdx @@ -43,12 +43,12 @@ export const examples = [ { name: 'With supabase-js', description: 'Use the Supabase client inside your Edge Function.', - href: 'https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/select-from-table-with-auth-rls/index.ts', + href: '/guides/functions/auth', }, { name: 'With CORS headers', description: 'Send CORS headers for invoking from the browser.', - href: 'https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/browser-with-cors/index.ts', + href: '/guides/functions/cors', }, { name: 'React Native with Stripe', @@ -86,6 +86,71 @@ export const examples = [ description: `Get user location data from user's IP address.`, href: 'https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/location', }, + { + name: 'Cloudflare Turnstile', + description: `Protecting Forms with Cloudflare Turnstile.`, + href: '/guides/functions/examples/cloudflare-turnstile', + }, + { + name: 'Connect to Postgres', + description: `Connecting to Postgres from Edge Functions.`, + href: '/guides/functions/examples/connect-to-postgres', + }, + { + name: 'Github Actions', + description: `Deploying Edge Functions with GitHub Actions.`, + href: '/guides/functions/examples/github-actions', + }, + { + name: 'Oak Server Middleware', + description: `Request Routing with Oak server middleware.`, + href: 'https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/oak-server', + }, + { + name: 'OpenAI', + description: `Using OpenAI in Edge Functions.`, + href: '/guides/functions/examples/openai', + }, + { + name: 'Stripe Webhooks', + description: `Handling signed Stripe Webhooks with Edge Functions.`, + href: '/guides/functions/examples/stripe-webhooks', + }, + { + name: 'Send emails', + description: `Send emails in Edge Functions.`, + href: 'https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/send-email-smtp', + }, + { + name: 'Web Stream', + description: `Server-Sent Events in Edge Functions.`, + href: 'https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/streams', + }, + { + name: 'Puppeteer', + description: `Generate screenshots with Puppeteer.`, + href: 'https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/puppeteer', + }, + { + name: 'Discord Bot', + description: `Building a Slash Command Discord Bot with Edge Functions.`, + href: '/guides/functions/examples/discord-bot', + }, + { + name: 'Telegram Bot', + description: `Building a Telegram Bot with Edge Functions.`, + href: '/guides/functions/examples/telegram-bot', + }, + { + name: 'Upload File', + description: `Process multipart/form-data.`, + href: 'https://github.com/supabase/supabase/tree/master/examples/edge-functions/supabase/functions/file-upload-storage', + }, + { + name: 'Upstash Redis', + description: `Build an Edge Functions Counter with Upstash Redis.`, + href: '/guides/functions/examples/upstash-redis', + }, ] export const Page = ({ children }) => diff --git a/apps/docs/pages/guides/functions/auth.mdx b/apps/docs/pages/guides/functions/auth.mdx index 871c16bd6f2..29ad1505034 100644 --- a/apps/docs/pages/guides/functions/auth.mdx +++ b/apps/docs/pages/guides/functions/auth.mdx @@ -20,7 +20,7 @@ By creating a supabase client with the auth context from the function, you can d 2. Run queries in the context of the user with [Row Level Security (RLS)](/docs/guides/auth/row-level-security) policies enforced. ```js lines=14,17-19,22-23 title=supabase/functions/select-from-table-with-auth-rls/index.ts -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' +import { serve } from 'https://deno.land/std@0.177.0/http/server.ts' import { createClient } from 'https://esm.sh/@supabase/supabase-js@2' serve(async (req: Request) => { diff --git a/apps/docs/pages/guides/functions/cors.mdx b/apps/docs/pages/guides/functions/cors.mdx index 766da74ae86..7274d810b02 100644 --- a/apps/docs/pages/guides/functions/cors.mdx +++ b/apps/docs/pages/guides/functions/cors.mdx @@ -24,7 +24,7 @@ export const corsHeaders = { You can then import and use the CORS headers within your functions: ```ts index.ts -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' +import { serve } from 'https://deno.land/std@0.177.0/http/server.ts' import { corsHeaders } from '../_shared/cors.ts' console.log(`Function "browser-with-cors" up and running!`) diff --git a/apps/docs/pages/guides/functions/examples/cloudflare-turnstile.mdx b/apps/docs/pages/guides/functions/examples/cloudflare-turnstile.mdx index ef38552855f..830e91723c8 100644 --- a/apps/docs/pages/guides/functions/examples/cloudflare-turnstile.mdx +++ b/apps/docs/pages/guides/functions/examples/cloudflare-turnstile.mdx @@ -34,7 +34,7 @@ supabase functions new cloudflare-turnstile And add the code to the `index.ts` file: ```ts index.ts -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' +import { serve } from 'https://deno.land/std@0.177.0/http/server.ts' import { corsHeaders } from '../_shared/cors.ts' console.log('Hello from Cloudflare Trunstile!') diff --git a/apps/docs/pages/guides/functions/examples/connect-to-postgres.mdx b/apps/docs/pages/guides/functions/examples/connect-to-postgres.mdx index de9f2378359..d99931b58e8 100644 --- a/apps/docs/pages/guides/functions/examples/connect-to-postgres.mdx +++ b/apps/docs/pages/guides/functions/examples/connect-to-postgres.mdx @@ -20,7 +20,7 @@ Supabase Edge Functions allow you to go beyond HTTP and can connect to your Post ```ts index.ts import * as postgres from 'https://deno.land/x/postgres@v0.14.2/mod.ts' -import { serve } from 'https://deno.land/std@0.168.0/http/server.ts' +import { serve } from 'https://deno.land/std@0.177.0/http/server.ts' // Get the connection string from the environment variable "DATABASE_URL" const databaseUrl = Deno.env.get('DATABASE_URL')! diff --git a/apps/docs/pages/guides/functions/examples/discord-bot.mdx b/apps/docs/pages/guides/functions/examples/discord-bot.mdx new file mode 100644 index 00000000000..281a2ac0e3e --- /dev/null +++ b/apps/docs/pages/guides/functions/examples/discord-bot.mdx @@ -0,0 +1,178 @@ +import Layout from '~/layouts/DefaultGuideLayout' + +export const meta = { + id: 'examples-discord-bot', + title: 'Discord Bot', + description: 'Building a Slash Command Discord Bot with Edge Functions.', + video: 'https://www.youtube.com/v/J24Bvo_m7DM', +} + +

+ +
+ +## Create an application on Discord Developer Portal + +1. Go to [https://discord.com/developers/applications](https://discord.com/developers/applications) (login using your discord account if required). +2. Click on **New Application** button available at left side of your profile picture. +3. Name your application and click on **Create**. +4. Go to **Bot** section, click on **Add Bot**, and finally on **Yes, do it!** to confirm. + +That's it. A new application is created which will hold our Slash Command. Don't close the tab as we need information from this application page throughout our development. + +Before we can write some code, we need to curl a discord endpoint to register a Slash Command in our app. + +Fill `DISCORD_BOT_TOKEN` with the token available in the **Bot** section and `CLIENT_ID` with the ID available on the **General Information** section of the page and run the command on your terminal. + +```bash +BOT_TOKEN='replace_me_with_bot_token' +CLIENT_ID='replace_me_with_client_id' +curl -X POST \ +-H 'Content-Type: application/json' \ +-H "Authorization: Bot $BOT_TOKEN" \ +-d '{"name":"hello","description":"Greet a person","options":[{"name":"name","description":"The name of the person","type":3,"required":true}]}' \ +"https://discord.com/api/v8/applications/$CLIENT_ID/commands" +``` + +This will register a Slash Command named `hello` that accepts a parameter named `name` of type string. + +## Code + +```ts index.ts +// Sift is a small routing library that abstracts away details like starting a +// listener on a port, and provides a simple function (serve) that has an API +// to invoke a function for a specific path. +import { json, serve, validateRequest } from 'sift' +// TweetNaCl is a cryptography library that we use to verify requests +// from Discord. +import nacl from 'nacl' + +enum DiscordCommandType { + Ping = 1, + ApplicationCommand = 2, +} + +// For all requests to "/" endpoint, we want to invoke home() handler. +serve({ + '/discord-bot': home, +}) + +// The main logic of the Discord Slash Command is defined in this function. +async function home(request: Request) { + // validateRequest() ensures that a request is of POST method and + // has the following headers. + const { error } = await validateRequest(request, { + POST: { + headers: ['X-Signature-Ed25519', 'X-Signature-Timestamp'], + }, + }) + if (error) { + return json({ error: error.message }, { status: error.status }) + } + + // verifySignature() verifies if the request is coming from Discord. + // When the request's signature is not valid, we return a 401 and this is + // important as Discord sends invalid requests to test our verification. + const { valid, body } = await verifySignature(request) + if (!valid) { + return json( + { error: 'Invalid request' }, + { + status: 401, + } + ) + } + + const { type = 0, data = { options: [] } } = JSON.parse(body) + // Discord performs Ping interactions to test our application. + // Type 1 in a request implies a Ping interaction. + if (type === DiscordCommandType.Ping) { + return json({ + type: 1, // Type 1 in a response is a Pong interaction response type. + }) + } + + // Type 2 in a request is an ApplicationCommand interaction. + // It implies that a user has issued a command. + if (type === DiscordCommandType.ApplicationCommand) { + const { value } = data.options.find( + (option: { name: string; value: string }) => option.name === 'name' + ) + return json({ + // Type 4 responds with the below message retaining the user's + // input at the top. + type: 4, + data: { + content: `Hello, ${value}!`, + }, + }) + } + + // We will return a bad request error as a valid Discord request + // shouldn't reach here. + return json({ error: 'bad request' }, { status: 400 }) +} + +/** Verify whether the request is coming from Discord. */ +async function verifySignature(request: Request): Promise<{ valid: boolean; body: string }> { + const PUBLIC_KEY = Deno.env.get('DISCORD_PUBLIC_KEY')! + // Discord sends these headers with every request. + const signature = request.headers.get('X-Signature-Ed25519')! + const timestamp = request.headers.get('X-Signature-Timestamp')! + const body = await request.text() + const valid = nacl.sign.detached.verify( + new TextEncoder().encode(timestamp + body), + hexToUint8Array(signature), + hexToUint8Array(PUBLIC_KEY) + ) + + return { valid, body } +} + +/** Converts a hexadecimal string to Uint8Array. */ +function hexToUint8Array(hex: string) { + return new Uint8Array(hex.match(/.{1,2}/g)!.map((val) => parseInt(val, 16))) +} +``` + +## Deploy the Slash Command Handler + +```bash +supabase functions deploy discord-bot --no-verify-jwt +supabase secrets set DISCORD_PUBLIC_KEY=your_public_key +``` + +Navigate to your Function details in the Supabase Dashboard to get your Endpoint URL. + +### Configure Discord application to use our URL as interactions endpoint URL + +1. Go back to your application (Greeter) page on Discord Developer Portal +2. Fill **INTERACTIONS ENDPOINT URL** field with the URL and click on **Save Changes**. + +The application is now ready. Let's proceed to the next section to install it. + +## Install the Slash Command on your Discord server + +So to use the `hello` Slash Command, we need to install our Greeter application on our Discord server. Here are the steps: + +1. Go to **OAuth2** section of the Discord application page on Discord Developer Portal +2. Select `applications.commands` scope and click on the **Copy** button below. +3. Now paste and visit the URL on your browser. Select your server and click on **Authorize**. + +Open Discord, type `/Promise` and press **Enter**. + +## Run locally + +```bash +supabase functions serve discord-bot --no-verify-jwt --env-file ./supabase/.env.local +ngrok http 54321 +``` + +export const Page = ({ children }) => + +export default Page diff --git a/apps/docs/pages/guides/functions/examples/og-image.mdx b/apps/docs/pages/guides/functions/examples/og-image.mdx index efa8eb99e59..be4f4dc46d2 100644 --- a/apps/docs/pages/guides/functions/examples/og-image.mdx +++ b/apps/docs/pages/guides/functions/examples/og-image.mdx @@ -50,7 +50,7 @@ export default function handler(req: Request) { Create an `index.ts` file to execute the handler on incoming requests: ```ts index.ts -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' +import { serve } from 'https://deno.land/std@0.177.0/http/server.ts' import handler from './handler.tsx' console.log('Hello from og-image Function!') diff --git a/apps/docs/pages/guides/integrations/onesignal.mdx b/apps/docs/pages/guides/integrations/onesignal.mdx index 3f270c6f60e..bf4922e749f 100644 --- a/apps/docs/pages/guides/integrations/onesignal.mdx +++ b/apps/docs/pages/guides/integrations/onesignal.mdx @@ -8,7 +8,7 @@ export const meta = { video: 'https://www.youtube.com/v/mw0DLwItue4', } -[OneSignal](https://onesignal.com/) is a tool that allows you to send messages across different channels such as the following to keep your users engaged. +[OneSignal](https://onesignal.com/) is a tool that allows you to send messages across different channels such as the following to keep your users engaged. - Push notifications - SMS @@ -36,7 +36,6 @@ You can find the complete example app along with the edge functions code to send ![Ordering app UI](/docs/img/guides/integrations/onesignal/app-ui.png) - ## Step 1: Getting started Before we dive into the code, this guide assumes that you have the following ready @@ -80,8 +79,7 @@ const supabase = createClient(supabaseUrl, supabaseAnonKey) const Home: NextPage = () => { const [user, setUser] = useState(null) - const [oneSignalInitialized, setOneSignalInitialized] = - useState(false) + const [oneSignalInitialized, setOneSignalInitialized] = useState(false) /** * Initializes OneSignal SDK for a given Supabase User ID @@ -123,9 +121,7 @@ const Home: NextPage = () => { const { price } = Object.fromEntries(new FormData(event.currentTarget)) if (typeof price !== 'string') return - const { error } = await supabase - .from('orders') - .insert({ price: Number(price) }) + const { error } = await supabase.from('orders').insert({ price: Number(price) }) if (error) { alert(error.message) } @@ -142,15 +138,13 @@ const Home: NextPage = () => { initialize() - const authListener = supabase.auth.onAuthStateChange( - async (event, session) => { - const user = session?.user ?? null - setUser(user) - if (user) { - initializeOneSignal(user.id) - } + const authListener = supabase.auth.onAuthStateChange(async (event, session) => { + const user = session?.user ?? null + setUser(user) + if (user) { + initializeOneSignal(user.id) } - ) + }) return () => { authListener.data.subscription.unsubscribe() @@ -175,10 +169,7 @@ const Home: NextPage = () => { - @@ -190,10 +181,7 @@ const Home: NextPage = () => { name="email" placeholder="Email" /> - @@ -211,7 +199,7 @@ There is quite a bit of stuff going on here, but basically, it’s creating a si Notice that inside the `initializeOneSignal()` function, we are setting the Supabase user ID as an [external user ID of OneSignal](https://documentation.onesignal.com/docs/external-user-ids). This allows us to later send push notifications to the user using their Supabase user ID from the backend, which is very handy. ```tsx -await OneSignal.setExternalUserId(uid); +await OneSignal.setExternalUserId(uid) ``` The front-end side of things is done here. Let’s get into the backend. @@ -237,7 +225,7 @@ supabase functions new notify Replace the contents of `supabase/functions/notify/index.ts` with the following ```tsx -import { serve } from 'https://deno.land/std@0.131.0/http/server.ts' +import { serve } from 'https://deno.land/std@0.177.0/http/server.ts' import * as OneSignal from 'https://esm.sh/@onesignal/node-onesignal@1.0.0-beta7' const _OnesignalAppId_ = Deno.env.get('ONESIGNAL_APP_ID')! @@ -263,12 +251,9 @@ serve(async (req) => { } const onesignalApiRes = await onesignal.createNotification(notification) - return new Response( - JSON.stringify({ onesignalResponse: onesignalApiRes }), - { - headers: { 'Content-Type': 'application/json' }, - } - ) + return new Response(JSON.stringify({ onesignalResponse: onesignalApiRes }), { + headers: { 'Content-Type': 'application/json' }, + }) } catch (err) { console.error('Failed to create OneSignal notification', err) return new Response('Server error.', { @@ -295,7 +280,6 @@ ONESIGNAL_REST_API_KEY=YOUR_ONESIGNAL_REST_API_KEY ![Where to find OneSignal User Auth Key](/docs/img/guides/integrations/onesignal/onesignal-api-key.png) - Once your environment variables are filled in, you can run the following command to set the environment variable. ```bash @@ -313,35 +297,35 @@ supabase functions deploy notify --no-verify-jwt Finally, we get to set up the database! Run the following SQL to set up the `orders` table. ```sql -create table if not exists public.orders ( - id uuid not null primary key default uuid_generate_v4(), - created_at timestamptz not null default now(), - user_id uuid not null default auth.uid(), +create table + if not exists public.orders ( + id uuid not null primary key default uuid_generate_v4 (), + created_at timestamptz not null default now (), + user_id uuid not null default auth.uid (), price int8 not null -); + ); ``` As you can see, the `orders` table has 4 columns and 3 of them have default values. That means all we need to send from the front-end app is the price. That is why our insert statement looked very simple. ```tsx const { error } = await supabase.from('orders').insert({ - price: 100, - }) + price: 100, +}) ``` Let’s also set up the webhook so that whenever a new row is inserted in the `orders` table, it calls the edge function. Go to `Database > Webhooks` and create a new Database Webhook. The table should be set to `orders` and Events should be inserted. The type should be HTTP Request, the HTTP method should be POST, and the URL should be the URL of your edge function. Hit confirm to save the webhook configuration. ![Supabase Webhooks configuration](/docs/img/guides/integrations/onesignal/webhook.png) -At this point, the app should be complete! Run your app locally with `npm run dev`, or deploy your app to a hosting service and see how you receive a push notification when you place an order! +At this point, the app should be complete! Run your app locally with `npm run dev`, or deploy your app to a hosting service and see how you receive a push notification when you place an order! Remember that if you decide to deploy your app to a hosting service, you would need to create another OneSignal app configured for your local address. ![Ordering app UI](/docs/img/guides/integrations/onesignal/app-ui.png) - ## Resources -This particular example was using Next.js, but you can apply the same principles to implement send push notification, SMS, Emails, and in-app-notifications on other platforms as well. +This particular example was using Next.js, but you can apply the same principles to implement send push notification, SMS, Emails, and in-app-notifications on other platforms as well. - [OneSignal + Flutter + Supabase example](https://github.com/OneSignalDevelopers/onesignal-supabase-sample-integration-supabase) - [OneSignal Mobile Quickstart](https://documentation.onesignal.com/docs/mobile-sdk-setup) From 6e60cf087d059a6f395b0c06ea3d2357a0daf756 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 21 Feb 2023 14:57:56 +0800 Subject: [PATCH 074/230] Add check permissions for database roles --- .../interfaces/Database/Roles/RolesList.tsx | 48 ++++++++++++++----- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/studio/components/interfaces/Database/Roles/RolesList.tsx b/studio/components/interfaces/Database/Roles/RolesList.tsx index 956fb1af750..c5059c26e05 100644 --- a/studio/components/interfaces/Database/Roles/RolesList.tsx +++ b/studio/components/interfaces/Database/Roles/RolesList.tsx @@ -1,17 +1,18 @@ +import { partition } from 'lodash' import { FC, useState, useEffect } from 'react' import { observer } from 'mobx-react-lite' import * as Tooltip from '@radix-ui/react-tooltip' import { PostgresRole } from '@supabase/postgres-meta' import { Button, Input, IconPlus, IconSearch, IconX, Badge } from 'ui' +import { PermissionAction } from '@supabase/shared-types/out/constants' -import { useStore } from 'hooks' +import { checkPermissions, useStore } from 'hooks' import SparkBar from 'components/ui/SparkBar' import { FormHeader } from 'components/ui/Forms' import RoleRow from './RoleRow' -import DeleteRoleModal from './DeleteRoleModal' import { SUPABASE_ROLES } from './Roles.constants' -import { partition } from 'lodash' import CreateRolePanel from './CreateRolePanel' +import DeleteRoleModal from './DeleteRoleModal' interface Props { onSelectRole: (role: any) => void @@ -26,6 +27,8 @@ const RolesList: FC = ({}) => { const [isCreatingRole, setIsCreatingRole] = useState(false) const [selectedRoleToDelete, setSelectedRoleToDelete] = useState() + const canUpdateRoles = checkPermissions(PermissionAction.TENANT_SQL_ADMIN_WRITE, 'roles') + useEffect(() => { const getMaxConnectionLimit = async () => { const res = await meta.query('show max_connections') @@ -149,13 +152,31 @@ const RolesList: FC = ({}) => {
- + + + + + {!canUpdateRoles && ( + + +
+ You need additional permissions to add a new role +
+
+ )} +
@@ -184,7 +205,12 @@ const RolesList: FC = ({}) => { )} {otherRoles.map((role: PostgresRole, i: number) => ( - + ))} From d1a7465f99f2f34634c2a42002791a023742f307 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 21 Feb 2023 16:55:59 +0800 Subject: [PATCH 075/230] Update index.tsx --- apps/www/pages/pricing/index.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/www/pages/pricing/index.tsx b/apps/www/pages/pricing/index.tsx index 9b209dc901e..44f6ef9030a 100644 --- a/apps/www/pages/pricing/index.tsx +++ b/apps/www/pages/pricing/index.tsx @@ -127,8 +127,8 @@ export default function IndexPage() { `Private Slack channel`, `Uptime SLA`, ], - priceLabel: 'Custom quotas', - priceMonthly: 'Exclusive pricing', + priceLabel: '', + priceMonthly: 'Contact us', preface: 'These apply to all projects within the organization:', scale: '', shutdown: '', @@ -750,13 +750,15 @@ export default function IndexPage() { <> {tier.name !== 'Enterprise' && '$'} {tier.priceMonthly} -

per project per month

+ {tier.priceMonthly && !isNaN(Number(tier.priceMonthly)) && ( +

per project per month

+ )} {tier.warning && ( From 04d75e86e7baff703508998d9f8b4da29d7edd7a Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 21 Feb 2023 17:15:18 +0800 Subject: [PATCH 076/230] Update index.tsx --- apps/www/pages/pricing/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/www/pages/pricing/index.tsx b/apps/www/pages/pricing/index.tsx index 44f6ef9030a..2724d7bc5e1 100644 --- a/apps/www/pages/pricing/index.tsx +++ b/apps/www/pages/pricing/index.tsx @@ -319,7 +319,7 @@ export default function IndexPage() {

{tier.name !== 'Enterprise' && '$'} From 29b8451826098f2ef86baf360ddba94f2828a9be Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 21 Feb 2023 17:26:09 +0800 Subject: [PATCH 077/230] Convert most storage js library calls to API proxy except download and upload --- studio/lib/common/fetch/post.ts | 3 +- .../storageExplorer/StorageExplorerStore.js | 231 +++++++++--------- 2 files changed, 116 insertions(+), 118 deletions(-) diff --git a/studio/lib/common/fetch/post.ts b/studio/lib/common/fetch/post.ts index e4757dc34a6..6df21a2f437 100644 --- a/studio/lib/common/fetch/post.ts +++ b/studio/lib/common/fetch/post.ts @@ -9,7 +9,7 @@ export async function post( ): Promise> { const requestId = uuidv4() try { - const { headers: optionHeaders, ...otherOptions } = options ?? {} + const { headers: optionHeaders, abortSignal, ...otherOptions } = options ?? {} const headers = await constructHeaders(requestId, optionHeaders) const response = await fetch(url, { method: 'POST', @@ -18,6 +18,7 @@ export async function post( referrerPolicy: 'no-referrer-when-downgrade', headers, ...otherOptions, + signal: abortSignal, }) if (!response.ok) return handleResponseError(response, requestId) return handleResponse(response, requestId) diff --git a/studio/localStores/storageExplorer/StorageExplorerStore.js b/studio/localStores/storageExplorer/StorageExplorerStore.js index ce653438126..b9316de1d1d 100644 --- a/studio/localStores/storageExplorer/StorageExplorerStore.js +++ b/studio/localStores/storageExplorer/StorageExplorerStore.js @@ -357,9 +357,9 @@ class StorageExplorerStore { .upload(formattedPathToEmptyPlaceholderFile, new File([], EMPTY_FOLDER_PLACEHOLDER_FILE_NAME)) if (pathToFolder.length > 0) { - await this.supabaseClient.storage - .from(this.selectedBucket.name) - .remove([`${pathToFolder}/${EMPTY_FOLDER_PLACEHOLDER_FILE_NAME}`]) + await delete_(`${this.endpoint}/buckets/${this.selectedBucket.id}/objects`, { + paths: [`${pathToFolder}/${EMPTY_FOLDER_PLACEHOLDER_FILE_NAME}`], + }) } } @@ -458,13 +458,6 @@ class StorageExplorerStore { /* Bucket CRUD */ createBucket = async (bucketName, isPublic = false) => { - if (isNil(this.supabaseClient)) { - return this.ui.setNotification({ - category: 'error', - message: 'Failed to initialize supabase client, try refreshing your browser.', - }) - } - const res = await post(`${this.endpoint}/buckets`, { id: bucketName, public: isPublic }) if (res.error) { this.ui.setNotification({ category: 'error', message: res.error.message }) @@ -736,9 +729,9 @@ class StorageExplorerStore { }, Promise.resolve()) if (numberOfFilesUploadedSuccess > 0) { - await this.supabaseClient.storage - .from(this.selectedBucket.name) - .remove([`${pathToFile}/${EMPTY_FOLDER_PLACEHOLDER_FILE_NAME}`]) + await delete_(`${this.endpoint}/buckets/${this.selectedBucket.id}/objects`, { + paths: [`${pathToFile}/${EMPTY_FOLDER_PLACEHOLDER_FILE_NAME}`], + }) } await this.refetchAllOpenedFolders() @@ -806,16 +799,13 @@ class StorageExplorerStore { const toPath = newPathToFile.length > 0 ? `${formattedNewPathToFile}/${item.name}` : item.name - const { error } = await this.supabaseClient.storage - .from(this.selectedBucket.name) - .move(fromPath, toPath) - - if (error) { + const res = await post(`${this.endpoint}/buckets/${this.selectedBucket.id}/objects/move`, { + from: fromPath, + to: toPath, + }) + if (res.error) { numberOfFilesMovedFail += 1 - this.ui.setNotification({ - message: error.message, - category: 'error', - }) + this.ui.setNotification({ category: 'error', message: res.error.message }) } }) ) @@ -853,23 +843,20 @@ class StorageExplorerStore { const formattedPathToFile = pathToFile.length > 0 ? `${pathToFile}/${fileName}` : fileName if (this.selectedBucket.public) { - const { data, error } = await this.supabaseClient.storage - .from(this.selectedBucket.name) - .getPublicUrl(formattedPathToFile) - - if (!error) { - return data.publicUrl - } + const res = await post( + `${this.endpoint}/buckets/${this.selectedBucket.id}/objects/public-url`, + { path: formattedPathToFile } + ) + if (!res.error) return res.publicUrl + else console.error('Failed to fetch public file preview', res.error.message) + } else { + const res = await post(`${this.endpoint}/buckets/${this.selectedBucket.id}/objects/sign`, { + path: formattedPathToFile, + expiresIn: expiresIn || DEFAULT_EXPIRY, + }) + if (!res.error) return res.signedUrl + else console.error('Failed to fetch signed url preview', res.error.message) } - - const { data, error } = await this.supabaseClient.storage - .from(this.selectedBucket.name) - .createSignedUrl(formattedPathToFile, expiresIn || DEFAULT_EXPIRY) - - if (!error) { - return data.signedUrl - } - return null } @@ -903,7 +890,9 @@ class StorageExplorerStore { // batch BATCH_SIZE prefixes per request const batches = chunk(prefixes, BATCH_SIZE).map((batch) => () => { progress = progress + batch.length / prefixes.length - return this.supabaseClient.storage.from(this.selectedBucket.name).remove(batch) + return delete_(`${this.endpoint}/buckets/${this.selectedBucket.name}/objects`, { + paths: batch, + }) }) // make BATCH_SIZE requests at the same time @@ -1103,43 +1092,48 @@ class StorageExplorerStore { .join('/') const formattedPathToFile = pathToFile.length > 0 ? `${pathToFile}/${fileName}` : fileName - const { data, error } = await this.supabaseClient.storage - .from(this.selectedBucket.name) - .download(formattedPathToFile) + const res = await post(`${this.endpoint}/buckets/${this.selectedBucket.id}/objects/download`, { + path: formattedPathToFile, + }) + console.log({ res: res }) - if (!error) { - const blob = data - const newBlob = new Blob([blob], { type: fileMimeType }) + // const { data, error } = await this.supabaseClient.storage + // .from(this.selectedBucket.name) + // .download(formattedPathToFile) - if (returnBlob) return { name: fileName, blob: newBlob } + // if (!res.error) { + // const blob = res + // const newBlob = new Blob([blob], { type: fileMimeType }) - const blobUrl = window.URL.createObjectURL(newBlob) - const link = document.createElement('a') - link.href = blobUrl - link.setAttribute('download', `${fileName}`) - document.body.appendChild(link) - link.click() - link.parentNode.removeChild(link) - window.URL.revokeObjectURL(blob) - if (toastId) { - this.ui.setNotification({ - id: toastId, - category: 'success', - message: `Downloading ${fileName}`, - }) - } - return true - } else { - if (toastId) { - this.ui.setNotification({ - error, - id: toastId, - category: 'error', - message: `Failed to download ${fileName}`, - }) - } - return false - } + // if (returnBlob) return { name: fileName, blob: newBlob } + + // const blobUrl = window.URL.createObjectURL(newBlob) + // const link = document.createElement('a') + // link.href = blobUrl + // link.setAttribute('download', `${fileName}`) + // document.body.appendChild(link) + // link.click() + // link.parentNode.removeChild(link) + // window.URL.revokeObjectURL(blob) + // if (toastId) { + // this.ui.setNotification({ + // id: toastId, + // category: 'success', + // message: `Downloading ${fileName}`, + // }) + // } + // return true + // } else { + // if (toastId) { + // this.ui.setNotification({ + // error: error, + // id: toastId, + // category: 'error', + // message: `Failed to download ${fileName}`, + // }) + // } + // return false + // } } renameFile = async (file, newName, columnIndex) => { @@ -1153,15 +1147,14 @@ class StorageExplorerStore { const fromPath = pathToFile.length > 0 ? `${pathToFile}/${originalName}` : originalName const toPath = pathToFile.length > 0 ? `${pathToFile}/${newName}` : newName - const { error } = await this.supabaseClient.storage - .from(this.selectedBucket.name) - .move(fromPath, toPath) - if (error) { - this.ui.setNotification({ - message: error.message, - type: 'error', - }) + const res = await post(`${this.endpoint}/buckets/${this.selectedBucket.id}/objects/move`, { + from: fromPath, + to: toPath, + }) + + if (res.error) { + this.ui.setNotification({ category: 'error', message: res.error.message }) } await this.refetchAllOpenedFolders() @@ -1191,16 +1184,16 @@ class StorageExplorerStore { search: searchString, sortBy: { column: this.sortBy, order: this.sortByOrder }, } - const parameters = { signal: this.abortController.signal } - - const { data: items, error } = await this.supabaseClient.storage - .from(this.selectedBucket.name) - .list(prefix, options, parameters) + const res = await post( + `${this.endpoint}/buckets/${this.selectedBucket.id}/objects/list`, + { path: prefix, options }, + { abortSignal: this.abortController.signal } + ) this.updateRowStatus(folderName, STORAGE_ROW_STATUS.READY, index) - if (!error) { - const formattedItems = this.formatFolderItems(items) + if (!res.error) { + const formattedItems = this.formatFolderItems(res) this.pushColumnAtIndex( { id: folderId || folderName, @@ -1224,22 +1217,23 @@ class StorageExplorerStore { search: searchString, sortBy: { column: this.sortBy, order: this.sortByOrder }, } - const parameters = { signal: this.abortController.signal } - const { data: items, error } = await this.supabaseClient.storage - .from(this.selectedBucket.name) - .list(prefix, options, parameters) + const res = await post( + `${this.endpoint}/buckets/${this.selectedBucket.id}/objects/list`, + { path: prefix, options }, + { abortSignal: this.abortController.signal } + ) - if (!error) { + if (!res.error) { // Add items to column - const formattedItems = this.formatFolderItems(items) + const formattedItems = this.formatFolderItems(res) this.columns = this.columns.map((col, idx) => { if (idx === index) { return { ...col, items: col.items.concat(formattedItems), isLoadingMoreItems: false, - hasMoreItems: items.length === LIMIT, + hasMoreItems: res.length === LIMIT, } } return col @@ -1264,15 +1258,12 @@ class StorageExplorerStore { sortBy: { column: this.sortBy, order: this.sortByOrder }, } - const { data: items, error } = await this.supabaseClient.storage - .from(this.selectedBucket.name) - .list(prefix, options) - - if (error) { - console.error('Error at fetchFoldersByPath:', error) - } - - return items + const res = await post(`${this.endpoint}/buckets/${this.selectedBucket.id}/objects/list`, { + path: prefix, + options, + }) + if (res.error) console.error('Error at fetchFoldersByPath:', error) + return res }) ) @@ -1310,10 +1301,11 @@ class StorageExplorerStore { // Check parent folder if its empty, if yes, reinstate .emptyFolderPlaceholder // Used when deleting folder or deleting files validateParentFolderEmpty = async (parentFolderPrefix) => { - const { data: items, error } = await this.supabaseClient.storage - .from(this.selectedBucket.name) - .list(parentFolderPrefix, this.DEFAULT_OPTIONS) - if (!error && items.length === 0) { + const res = await post(`${this.endpoint}/buckets/${this.selectedBucket.id}/objects/list`, { + path: parentFolderPrefix, + options: this.DEFAULT_OPTIONS, + }) + if (!res.error && res.length === 0) { const prefixToPlaceholder = `${parentFolderPrefix}/${EMPTY_FOLDER_PLACEHOLDER_FILE_NAME}` await this.supabaseClient.storage .from(this.selectedBucket.name) @@ -1392,10 +1384,14 @@ class StorageExplorerStore { return () => { return new Promise(async (resolve) => { progress = progress + 1 / files.length - const { error } = await this.supabaseClient.storage - .from(this.selectedBucket.name) - .move(fromPath, toPath) - if (error) { + const res = await post( + `${this.endpoint}/buckets/${this.selectedBucket.name}/objects/move`, + { + from: fromPath, + to: toPath, + } + ) + if (res.error) { hasErrors = true this.ui.setNotification({ category: 'error', @@ -1483,12 +1479,13 @@ class StorageExplorerStore { let folderContents = [] for (;;) { - const { data } = await this.supabaseClient.storage - .from(this.selectedBucket.name) - .list(formattedPathToFolder, options) - folderContents = folderContents.concat(data) + const res = await post(`${this.endpoint}/buckets/${this.selectedBucket.name}/objects/list`, { + path: formattedPathToFolder, + options, + }) + folderContents = folderContents.concat(res) options.offset += options.limit - if ((data || []).length < options.limit) { + if ((res || []).length < options.limit) { break } } From 05da078e0102ba845f354ea499e1bbef6e56b167 Mon Sep 17 00:00:00 2001 From: Div Arora Date: Tue, 21 Feb 2023 17:28:28 +0800 Subject: [PATCH 078/230] chore: remove note offering support for inter-project migrations --- .../pages/guides/platform/migrating-and-upgrading-projects.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/platform/migrating-and-upgrading-projects.mdx b/apps/docs/pages/guides/platform/migrating-and-upgrading-projects.mdx index 1b657450546..9b035e1264b 100644 --- a/apps/docs/pages/guides/platform/migrating-and-upgrading-projects.mdx +++ b/apps/docs/pages/guides/platform/migrating-and-upgrading-projects.mdx @@ -66,7 +66,7 @@ Replication for Realtime is disabled for all tables in your new project. On the ### Migrate Storage objects -The new project has the old project's Storage buckets, but the Storage objects need to be migrated manually. Use this script to move storage objects from one project to another. If you have more than 10k objects, we can move the objects for you. Just contact us at [support@supabase.com](mailto:support@supabase.com). +The new project has the old project's Storage buckets, but the Storage objects need to be migrated manually. Use this script to move storage objects from one project to another. ```js // npm install @supabase/supabase-js@1 From 97934c6607b93a38456fa2f36bf67c243a5316a9 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 21 Feb 2023 18:05:32 +0800 Subject: [PATCH 079/230] fix accordian types. remove social buttons for pricing questions --- apps/www/pages/pricing/index.tsx | 71 ++++--------------- .../ui/src/components/Accordion/Accordion.tsx | 9 ++- 2 files changed, 18 insertions(+), 62 deletions(-) diff --git a/apps/www/pages/pricing/index.tsx b/apps/www/pages/pricing/index.tsx index 2724d7bc5e1..550ab106c57 100644 --- a/apps/www/pages/pricing/index.tsx +++ b/apps/www/pages/pricing/index.tsx @@ -863,66 +863,12 @@ export default function IndexPage() {

Frequently asked questions

-

- Can't find the answer to your question, ask someone in the community either on - our Discord or GitHub. -

- -
- {/* @ts-ignore */} +
@@ -942,6 +888,17 @@ export default function IndexPage() { })}
+

+ Can't find the answer to your question, you can{' '} + + open a support ticket + {' '} + and our team of experts will be able to help. +

diff --git a/packages/ui/src/components/Accordion/Accordion.tsx b/packages/ui/src/components/Accordion/Accordion.tsx index 4a802c44ed6..11ca83de563 100644 --- a/packages/ui/src/components/Accordion/Accordion.tsx +++ b/packages/ui/src/components/Accordion/Accordion.tsx @@ -37,14 +37,13 @@ interface AccordionProps { defaultActiveId?: (string | number)[] icon?: React.ReactNode iconPosition?: Align - bordered: boolean onChange?: (item: string | string[]) => void openBehaviour: 'single' | 'multiple' type: Type size: Size defaultValue?: string | string[] | undefined - justified: Boolean - chevronAlign: Align + justified?: Boolean + chevronAlign?: Align } function Accordion({ @@ -58,8 +57,8 @@ function Accordion({ type = 'default', // size, // TO DO defaultValue = undefined, - justified = true, - chevronAlign, + justified = false, + chevronAlign = 'left', }: AccordionProps) { // const [currentItems, setCurrentItems] = useState(defaultValue || []) From 41dc9158291f9e859e508044a8923483ac35fd0e Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 21 Feb 2023 18:09:31 +0800 Subject: [PATCH 080/230] Update index.tsx --- apps/www/pages/pricing/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/www/pages/pricing/index.tsx b/apps/www/pages/pricing/index.tsx index 550ab106c57..bf161b4b65e 100644 --- a/apps/www/pages/pricing/index.tsx +++ b/apps/www/pages/pricing/index.tsx @@ -756,7 +756,7 @@ export default function IndexPage() { {tier.name !== 'Enterprise' && '$'} {tier.priceMonthly} - {tier.priceMonthly && !isNaN(Number(tier.priceMonthly)) && ( + {tier.name !== 'Enterprise' && (

per project per month

)} From 62436ca0bcfcae448a748cddea96f4f1d55c28c8 Mon Sep 17 00:00:00 2001 From: phamhieu Date: Tue, 21 Feb 2023 17:13:35 +0700 Subject: [PATCH 081/230] fix: storage file download --- .../storageExplorer/StorageExplorerStore.js | 80 +++++++++++-------- 1 file changed, 46 insertions(+), 34 deletions(-) diff --git a/studio/localStores/storageExplorer/StorageExplorerStore.js b/studio/localStores/storageExplorer/StorageExplorerStore.js index b9316de1d1d..722d685a977 100644 --- a/studio/localStores/storageExplorer/StorageExplorerStore.js +++ b/studio/localStores/storageExplorer/StorageExplorerStore.js @@ -8,7 +8,7 @@ import { createClient } from '@supabase/supabase-js' import { useStore } from 'hooks' import { copyToClipboard } from 'lib/helpers' import { API_URL, IS_PLATFORM } from 'lib/constants' -import { get, patch, post, delete_ } from 'lib/common/fetch' +import { get, patch, post, delete_, constructHeaders } from 'lib/common/fetch' import { PROJECT_ENDPOINT_PROTOCOL } from 'pages/api/constants' import { STORAGE_VIEWS, @@ -16,6 +16,7 @@ import { STORAGE_ROW_STATUS, STORAGE_SORT_BY, } from 'components/to-be-cleaned/Storage/Storage.constants.ts' +import { uuidv4 } from 'lib/helpers' /** * This is a preferred method rather than React Context and useStorageExplorerStore(). @@ -1092,48 +1093,59 @@ class StorageExplorerStore { .join('/') const formattedPathToFile = pathToFile.length > 0 ? `${pathToFile}/${fileName}` : fileName - const res = await post(`${this.endpoint}/buckets/${this.selectedBucket.id}/objects/download`, { - path: formattedPathToFile, + // TODO: need refactoring + // We need to update the post util method to support other content type other than json + const requestId = uuidv4() + const headers = await constructHeaders(requestId) + const res = await fetch(`${this.endpoint}/buckets/${this.selectedBucket.id}/objects/download`, { + method: 'POST', + body: JSON.stringify({ + path: formattedPathToFile, + }), + credentials: 'include', + referrerPolicy: 'no-referrer-when-downgrade', + headers, }) + console.log({ res: res }) // const { data, error } = await this.supabaseClient.storage // .from(this.selectedBucket.name) // .download(formattedPathToFile) - // if (!res.error) { - // const blob = res - // const newBlob = new Blob([blob], { type: fileMimeType }) + if (!res.error) { + const blob = await res.blob() + const newBlob = new Blob([blob], { type: fileMimeType }) - // if (returnBlob) return { name: fileName, blob: newBlob } + if (returnBlob) return { name: fileName, blob: newBlob } - // const blobUrl = window.URL.createObjectURL(newBlob) - // const link = document.createElement('a') - // link.href = blobUrl - // link.setAttribute('download', `${fileName}`) - // document.body.appendChild(link) - // link.click() - // link.parentNode.removeChild(link) - // window.URL.revokeObjectURL(blob) - // if (toastId) { - // this.ui.setNotification({ - // id: toastId, - // category: 'success', - // message: `Downloading ${fileName}`, - // }) - // } - // return true - // } else { - // if (toastId) { - // this.ui.setNotification({ - // error: error, - // id: toastId, - // category: 'error', - // message: `Failed to download ${fileName}`, - // }) - // } - // return false - // } + const blobUrl = window.URL.createObjectURL(newBlob) + const link = document.createElement('a') + link.href = blobUrl + link.setAttribute('download', `${fileName}`) + document.body.appendChild(link) + link.click() + link.parentNode.removeChild(link) + window.URL.revokeObjectURL(blob) + if (toastId) { + this.ui.setNotification({ + id: toastId, + category: 'success', + message: `Downloading ${fileName}`, + }) + } + return true + } else { + if (toastId) { + this.ui.setNotification({ + error: error, + id: toastId, + category: 'error', + message: `Failed to download ${fileName}`, + }) + } + return false + } } renameFile = async (file, newName, columnIndex) => { From 179d1f8fb3568fbdd8a33a5f384f7b75c2d72060 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Tue, 21 Feb 2023 18:41:25 +0800 Subject: [PATCH 082/230] Refactor storage download methods to use API proxy --- studio/lib/common/fetch/base.ts | 3 ++ .../storageExplorer/StorageExplorerStore.js | 39 ++++++------------- 2 files changed, 14 insertions(+), 28 deletions(-) diff --git a/studio/lib/common/fetch/base.ts b/studio/lib/common/fetch/base.ts index 45597dc3588..4116526bf6b 100644 --- a/studio/lib/common/fetch/base.ts +++ b/studio/lib/common/fetch/base.ts @@ -12,6 +12,9 @@ export async function handleResponse( response: Response, requestId: string ): Promise> { + const contentType = response.headers.get('Content-Type') + if (contentType === 'application/octet-stream') return response as any + try { const resTxt = await response.text() try { diff --git a/studio/localStores/storageExplorer/StorageExplorerStore.js b/studio/localStores/storageExplorer/StorageExplorerStore.js index 722d685a977..6f3f71576f2 100644 --- a/studio/localStores/storageExplorer/StorageExplorerStore.js +++ b/studio/localStores/storageExplorer/StorageExplorerStore.js @@ -1,14 +1,14 @@ import toast from 'react-hot-toast' import { createContext, useContext } from 'react' import { makeAutoObservable } from 'mobx' -import { find, compact, isEqual, isNil, has, some, chunk, uniq } from 'lodash' +import { find, compact, isEqual, has, some, chunk, uniq } from 'lodash' import { BlobReader, BlobWriter, ZipWriter } from '@zip.js/zip.js' import { createClient } from '@supabase/supabase-js' import { useStore } from 'hooks' import { copyToClipboard } from 'lib/helpers' import { API_URL, IS_PLATFORM } from 'lib/constants' -import { get, patch, post, delete_, constructHeaders } from 'lib/common/fetch' +import { get, patch, post, delete_ } from 'lib/common/fetch' import { PROJECT_ENDPOINT_PROTOCOL } from 'pages/api/constants' import { STORAGE_VIEWS, @@ -16,7 +16,6 @@ import { STORAGE_ROW_STATUS, STORAGE_SORT_BY, } from 'components/to-be-cleaned/Storage/Storage.constants.ts' -import { uuidv4 } from 'lib/helpers' /** * This is a preferred method rather than React Context and useStorageExplorerStore(). @@ -959,17 +958,18 @@ class StorageExplorerStore { const fileMimeType = file.metadata?.mimetype ?? null return () => { return new Promise(async (resolve) => { - const { data, error } = await this.supabaseClient.storage - .from(this.selectedBucket.name) - .download(`${file.prefix}/${file.name}`) - + const res = await post( + `${this.endpoint}/buckets/${this.selectedBucket.id}/objects/download`, + { path: `${file.prefix}/${file.name}` } + ) progress = progress + 1 / files.length - if (!error) { + if (!res.error) { + const blob = await res.blob() resolve({ name: file.name, prefix: file.prefix, - blob: new Blob([data], { type: fileMimeType }), + blob: new Blob([blob], { type: fileMimeType }), }) } else { resolve(false) @@ -1092,27 +1092,10 @@ class StorageExplorerStore { .map((folder) => folder.name) .join('/') const formattedPathToFile = pathToFile.length > 0 ? `${pathToFile}/${fileName}` : fileName - - // TODO: need refactoring - // We need to update the post util method to support other content type other than json - const requestId = uuidv4() - const headers = await constructHeaders(requestId) - const res = await fetch(`${this.endpoint}/buckets/${this.selectedBucket.id}/objects/download`, { - method: 'POST', - body: JSON.stringify({ - path: formattedPathToFile, - }), - credentials: 'include', - referrerPolicy: 'no-referrer-when-downgrade', - headers, + const res = await post(`${this.endpoint}/buckets/${this.selectedBucket.id}/objects/download`, { + path: formattedPathToFile, }) - console.log({ res: res }) - - // const { data, error } = await this.supabaseClient.storage - // .from(this.selectedBucket.name) - // .download(formattedPathToFile) - if (!res.error) { const blob = await res.blob() const newBlob = new Blob([blob], { type: fileMimeType }) From ea6862fef216ed38069559bd0b903329250967ab Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Tue, 21 Feb 2023 22:28:21 +1100 Subject: [PATCH 083/230] sync graphiql theme to dashboard theme --- .../components/interfaces/GraphQL/GraphiQL.tsx | 18 +++++++++++++----- studio/pages/project/[ref]/graphiql/index.tsx | 2 +- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/studio/components/interfaces/GraphQL/GraphiQL.tsx b/studio/components/interfaces/GraphQL/GraphiQL.tsx index dbeb0661c07..1f961603bd8 100644 --- a/studio/components/interfaces/GraphQL/GraphiQL.tsx +++ b/studio/components/interfaces/GraphQL/GraphiQL.tsx @@ -38,14 +38,15 @@ import { import { Fetcher } from '@graphiql/toolkit' import clsx from 'clsx' import 'graphiql/graphiql.css' -import { PropsWithChildren, useState } from 'react' +import { PropsWithChildren, useEffect, useState } from 'react' import styles from './graphiql.module.css' export type GraphiQLProps = { fetcher: Fetcher + theme?: 'dark' | 'light' } -const GraphiQL = ({ fetcher }: GraphiQLProps) => { +const GraphiQL = ({ fetcher, theme = 'dark' }: GraphiQLProps) => { // Ensure props are correct if (typeof fetcher !== 'function') { throw new TypeError( @@ -55,12 +56,16 @@ const GraphiQL = ({ fetcher }: GraphiQLProps) => { return ( - + ) } -export function GraphiQLInterface() { +type GraphiQLInterfaceProps = { + theme: 'dark' | 'light' +} + +export const GraphiQLInterface = ({ theme }: GraphiQLInterfaceProps) => { const editorContext = useEditorContext({ nonNull: true }) const executionContext = useExecutionContext({ nonNull: true }) const schemaContext = useSchemaContext({ nonNull: true }) @@ -71,7 +76,10 @@ export function GraphiQLInterface() { const merge = useMergeQuery() const prettify = usePrettifyEditors() - const { theme, setTheme } = useTheme() + const { setTheme } = useTheme() + useEffect(() => { + setTheme(theme) + }, [theme]) const PluginContent = pluginContext?.visiblePlugin?.content diff --git a/studio/pages/project/[ref]/graphiql/index.tsx b/studio/pages/project/[ref]/graphiql/index.tsx index 3a6102c80b1..ed285275815 100644 --- a/studio/pages/project/[ref]/graphiql/index.tsx +++ b/studio/pages/project/[ref]/graphiql/index.tsx @@ -81,7 +81,7 @@ const GraphiQLPage: NextPageWithLayout = () => { ) } - return + return } GraphiQLPage.getLayout = (page) => ( From f8aa24fec90422fe494ec909f08ae41d8e3a4763 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 21 Feb 2023 19:54:04 +0800 Subject: [PATCH 084/230] Update index.tsx --- apps/www/pages/pricing/index.tsx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/apps/www/pages/pricing/index.tsx b/apps/www/pages/pricing/index.tsx index bf161b4b65e..6dd5e19f7b3 100644 --- a/apps/www/pages/pricing/index.tsx +++ b/apps/www/pages/pricing/index.tsx @@ -899,6 +899,17 @@ export default function IndexPage() { {' '} and our team of experts will be able to help.

+

+ For enterprise enquries, + + you can contact the team here + + . +

From ec286b138c44b920c6fe32e2ecb610bf4b0d0bfa Mon Sep 17 00:00:00 2001 From: Kevin Brolly Date: Tue, 21 Feb 2023 11:55:41 +0000 Subject: [PATCH 085/230] Updated and added more tips to the examining query performance docs --- .../pages/guides/platform/performance.mdx | 173 +++++++++++++++--- 1 file changed, 146 insertions(+), 27 deletions(-) diff --git a/apps/docs/pages/guides/platform/performance.mdx b/apps/docs/pages/guides/platform/performance.mdx index 8d7ae48e422..db6cbc5e82d 100644 --- a/apps/docs/pages/guides/platform/performance.mdx +++ b/apps/docs/pages/guides/platform/performance.mdx @@ -8,6 +8,152 @@ export const meta = { The Supabase platform automatically optimizes your Postgres database to take advantage of the compute resources of the tier your project is on. However, these optimizations are based on assumptions about the type of workflow the project is being utilized for, and it is likely that better results can be obtained by tuning the database for your particular workflow. +## Examining Query Performance + +A major cause of poor database performance is unoptimized queries. The techniques on this page can help you identify and understand queries that take the most time and resources from your database. + +Database performance is a large topic and many factors can contribute, but some of the most common causes of poor performance include: + +* An inefficiently designed schema +* Inefficiently designed queries +* A lack of indexes causing slower than required queries over large tables +* Unused indexes causing slow `INSERT`, `UPDATE` and `DELETE` operations +* Not enough compute resources, such as memory, causing your database to go to disk for results too often +* Lock contention from multiple queries operating on highly utilized tables +* Large amount of bloat on your tables causing poor query planning + +Thankfully there are solutions to all these issues, which we will cover in the following sections. + +### Postgres Cumulative Statistics system + +Postgres itself collects lots of data about its own operations using the [cumulative statistics system](https://www.postgresql.org/docs/current/monitoring-stats.html). In addition to this, every Supabase project has [the pg_stat_statements extension](https://www.postgresql.org/docs/14/pgstatstatements.html) enabled by default. This extension records query execution performance details and is the best way to find queries that take the most time to execute. This information can be combined with the Postgres query plan analyzer to develop more efficient queries. + +It is easy to use `pg_stat_statements` and other Postgres statistics tables to get a wealth of information about your database. Here are some example queries to get you started. + +Most frequently called queries: + +```sql +select + auth.rolname, + statements.query, + statements.calls, + -- -- Postgres 13, 14, 15 + statements.total_exec_time + statements.total_plan_time as total_time, + statements.min_exec_time + statements.min_plan_time as min_time, + statements.max_exec_time + statements.max_plan_time as max_time, + statements.mean_exec_time + statements.mean_plan_time as mean_time, + -- -- Postgres <= 12 + -- total_time, + -- min_time, + -- max_time, + -- mean_time, + statements.rows / statements.calls as avg_rows + +from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid +order by + statements.calls desc +limit + 100; +``` + +This query will show you statistics about queries ordered by the number of times they have been called. It shows the role that ran the query, the number of times it has been called, the average number of rows returned, the cumulative total time the query has spent running as well as the min, max and mean query times. + +This can provide useful information about queries that you are running often. You should try and ensure that any queries that are being called often are performant and have good mean exeuction times. Queries which are showing as having high max or mean times and are being called often can be good candidates for optimisation. + +Slowest queries by execution time: + +```sql +select + auth.rolname, + statements.query, + statements.calls, + -- -- Postgres 13, 14, 15 + statements.total_exec_time + statements.total_plan_time as total_time, + statements.min_exec_time + statements.min_plan_time as min_time, + statements.max_exec_time + statements.max_plan_time as max_time, + statements.mean_exec_time + statements.mean_plan_time as mean_time, + -- -- Postgres <= 12 + -- total_time, + -- min_time, + -- max_time, + -- mean_time, + statements.rows / statements.calls as avg_rows +from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid + order by + max_time desc + limit + 100; +``` + +This query will show you statistics about queries ordered by the maximum execution time. It is similar to the query above ordered by calls, but this one highlights outliers that may have high executions times. Queries which have high or mean execution times are good candidates for optimisation. + +Most time consuming queries: + +```sql +select + auth.rolname, + statements.query, + statements.calls, + statements.total_exec_time + statements.total_plan_time as total_time, + to_char(((statements.total_exec_time + statements.total_plan_time)/sum(statements.total_exec_time + statements.total_plan_time) OVER()) * 100, 'FM90D0') || '%' AS prop_total_time +from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid +order by + total_time desc +limit + 100; +``` + +This query will show you statistics about queries ordered by the cumulative total execution time. It shows the total time the query has spent running as well as the proportion of total execution time the query has taken up. + +Queries which are the most time consuming are not necessarily bad, you may have a very effiecient and frequently ran queries that end up taking a large total % time, but it can be useful to help spot queries that are taking up more time than they should. + +### Hit rate + +Generally for most applications a small percentage of data is accessed more regularly than the rest. To make sure that your regularly accessed data is available, Postgres tracks your data access patterns and keeps this in its [shared_buffers](https://www.postgresql.org/docs/15/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY) cache. + +Applications with lower cache hit rates generally perform more poorly since they have to hit the disk to get results rather than serving them from memory. Very poor hit rates can also cause you to burst past your [Disk I/O limits](https://supabase.com/docs/guides/platform/compute-add-ons#disk-io-bandwidth) causing significat performance issues. + +You can view your cache and index hit rate by executing the following query: + +``` +select + 'index hit rate' as name, + (sum(idx_blks_hit)) / nullif(sum(idx_blks_hit + idx_blks_read),0) * 100 as ratio +from pg_statio_user_indexes +union all +select + 'table hit rate' as name, + sum(heap_blks_hit) / nullif(sum(heap_blks_hit) + sum(heap_blks_read),0) * 100 as ratio +from pg_statio_user_tables; +``` + +This shows the ratio of data blocks fetched from the Postgres [shared_buffers](https://www.postgresql.org/docs/15/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY) cache against the data blocks that were read from disk/OS cache. + +If either of your index or table hit rate are <99% then this can indicate your compute plan is too small for your current workload and you would benefit from more memory. [Upgrading your compute](https://supabase.com/docs/guides/platform/compute-add-ons) is easy and can be done from your [project dashboard](https://app.supabase.com/project/_/settings/billing/subscription). + + +### Optimizing poor performing queries + +Postgres has built in tooling to help you optimize poorly performing queries. You can use the [query plan analyzer](https://www.postgresql.org/docs/current/sql-explain.html) on any expensive queries that you have identified: + +```sql +explain analyze ; +``` + +Be careful using `explain analyze` with `insert`/`update`/`delete` queries, because the query will actually run, and could have unintended side-effects. + +Using the query plan analyzer to optimize your queries is a large topic, with a number of online resources available: + +- [Official docs.](https://www.postgresql.org/docs/current/using-explain.html) +- [The Art of PostgreSQL.](https://theartofpostgresql.com/explain-plan-visualizer/) +- [Postgres Wiki.](https://wiki.postgresql.org/wiki/Using_EXPLAIN) +- [Enterprise DB.](https://www.enterprisedb.com/blog/postgresql-query-optimization-performance-tuning-with-explain-analyze) + +You can pair the information available from `pg_stat_statements` with the detailed system metrics available [via your metrics endpoint](../platform/metrics) to better understand the behavior of your DB and the queries you're executing against it. + ## Optimizing the number of connections By default, the number of connections allowed to Postgres and PgBouncer is configured based on the resources available to the database. @@ -64,33 +210,6 @@ alter system reset ; Configuring the number of PgBouncer connections is not supported at this time. -## Examining Query Performance - -Every Supabase project has [the pg_stat_statements extension](https://www.postgresql.org/docs/14/pgstatstatements.html) enabled by default. This extension records query execution performance details and is the best way to find queries that take the most time to execute. This information can be combined with the Postgres query plan analyzer to develop more efficient queries. - -Obtaining information from pg_stat_statements: - -```sql -select mean_exec_time + stddev_exec_time, * from pg_stat_statements order by 1 desc; -``` - -Using the query plan analyzer on your expensive queries: - -```sql -explain analyze ; -``` - -Be careful using `explain analyze` with `insert`/`update`/`delete` queries, because the query will actually run, and could have unintended side-effects. - -Using the query plan analyzer to optimize your queries is a large topic, with a number of online resources available: - -- [Official docs.](https://www.postgresql.org/docs/current/using-explain.html) -- [The Art of PostgreSQL.](https://theartofpostgresql.com/explain-plan-visualizer/) -- [Postgres Wiki.](https://wiki.postgresql.org/wiki/Using_EXPLAIN) -- [Enterprise DB.](https://www.enterprisedb.com/blog/postgresql-query-optimization-performance-tuning-with-explain-analyze) - -You can pair the information available from `pg_stat_statements` with the detailed system metrics available [via your metrics endpoint](../platform/metrics) to better understand the behavior of your DB and the queries you're executing against it. - export const Page = ({ children }) => export default Page From 992029383eb80ca1ddf8f8c626b0ac6e45ab5bfe Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Tue, 21 Feb 2023 23:03:32 +1100 Subject: [PATCH 086/230] updates graphiql theme --- .../interfaces/GraphQL/GraphiQL.tsx | 4 +-- .../interfaces/GraphQL/graphiql.module.css | 27 +++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/studio/components/interfaces/GraphQL/GraphiQL.tsx b/studio/components/interfaces/GraphQL/GraphiQL.tsx index 1f961603bd8..de419530f14 100644 --- a/studio/components/interfaces/GraphQL/GraphiQL.tsx +++ b/studio/components/interfaces/GraphQL/GraphiQL.tsx @@ -215,12 +215,12 @@ export const GraphiQLInterface = ({ theme }: GraphiQLInterfaceProps) => {
diff --git a/studio/components/interfaces/GraphQL/graphiql.module.css b/studio/components/interfaces/GraphQL/graphiql.module.css index 87caa2eb2e2..dc574beed61 100644 --- a/studio/components/interfaces/GraphQL/graphiql.module.css +++ b/studio/components/interfaces/GraphQL/graphiql.module.css @@ -1,4 +1,27 @@ .graphiqlContainer .graphiqlSessions { - margin-left: var(--px-16); - margin-right: 0; + margin: 0; + border-radius: 0; +} + +.graphiqlContainer .graphiqlSession { + padding: 0; +} + +.graphiqlContainer .graphiqlEditors { + border-radius: 0; +} + +.graphiqlContainer .graphiqlEditors:global(.full-height) { + margin-top: calc(0px - var(--session-header-height)); +} + +/* Colors */ +:global(body.graphiql-dark) .graphiqlContainer { + --color-base: 0, 0%, 11%; + --color-primary: 153, 50%, 50%; +} + +:global(body.graphiql-light) .graphiqlContainer { + --color-base: 210, 17%, 98%; + --color-primary: 153, 50%, 50%; } From 21990fede29600737c11a4e54b6c95e5616410ad Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Tue, 21 Feb 2023 08:35:17 -0330 Subject: [PATCH 087/230] Cleanup --- apps/www/pages/pricing/index.tsx | 30 +----------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/apps/www/pages/pricing/index.tsx b/apps/www/pages/pricing/index.tsx index 6dd5e19f7b3..af6bd0ae0a8 100644 --- a/apps/www/pages/pricing/index.tsx +++ b/apps/www/pages/pricing/index.tsx @@ -83,34 +83,6 @@ export default function IndexPage() { additional: '', cta: 'Get Started', }, - // { - // name: 'Team', - // nameBadge: 'New', - // costUnit: 'per month per org', - // href: 'https://app.supabase.com/new/new-project', - // from: true, - // priceLabel: 'Starting from', - // priceMonthly: 599, - // description: 'For scaling teams with permissions & access controls', - // warning: '+ any additional usage', - // features: [ - // 'Usage-based pricing', - // 'Organization member roles (ABAC)', - // 'SOC2', - // 'Priority email support & SLAs', - // '14 day backups', - // '100,000 monthly active users included', - // 'Standardized Security Questionnaire', - // 'SSO for Supabase Dashboard', - // '1 XS compute instance', - // '28 day log retention', - // ], - // scale: '', - // shutdown: '', - // preface: 'The following features will apply to all projects within the organization:', - // additional: '', - // cta: 'Get Started', - // }, { name: 'Enterprise', href: 'https://forms.supabase.com/enterprise', @@ -900,7 +872,7 @@ export default function IndexPage() { and our team of experts will be able to help.

- For enterprise enquries, + For enterprise enquries,{' '} Date: Tue, 21 Feb 2023 20:37:12 +0800 Subject: [PATCH 088/230] Update performance.mdx --- apps/docs/pages/guides/platform/performance.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/platform/performance.mdx b/apps/docs/pages/guides/platform/performance.mdx index db6cbc5e82d..6dc62b3665c 100644 --- a/apps/docs/pages/guides/platform/performance.mdx +++ b/apps/docs/pages/guides/platform/performance.mdx @@ -132,7 +132,7 @@ from pg_statio_user_tables; This shows the ratio of data blocks fetched from the Postgres [shared_buffers](https://www.postgresql.org/docs/15/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY) cache against the data blocks that were read from disk/OS cache. -If either of your index or table hit rate are <99% then this can indicate your compute plan is too small for your current workload and you would benefit from more memory. [Upgrading your compute](https://supabase.com/docs/guides/platform/compute-add-ons) is easy and can be done from your [project dashboard](https://app.supabase.com/project/_/settings/billing/subscription). +If either of your index or table hit rate are < 99% then this can indicate your compute plan is too small for your current workload and you would benefit from more memory. [Upgrading your compute](https://supabase.com/docs/guides/platform/compute-add-ons) is easy and can be done from your [project dashboard](https://app.supabase.com/project/_/settings/billing/subscription). ### Optimizing poor performing queries From c2bd313a12567c2f3391972984f6c5051986a3c5 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Tue, 21 Feb 2023 09:11:07 -0330 Subject: [PATCH 089/230] Remove unused prop --- .../Logs/LogsErrorRenderers/ResourcesExceededErrorRenderer.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/studio/components/interfaces/Settings/Logs/LogsErrorRenderers/ResourcesExceededErrorRenderer.tsx b/studio/components/interfaces/Settings/Logs/LogsErrorRenderers/ResourcesExceededErrorRenderer.tsx index 2473f64aa19..c8b76284adc 100644 --- a/studio/components/interfaces/Settings/Logs/LogsErrorRenderers/ResourcesExceededErrorRenderer.tsx +++ b/studio/components/interfaces/Settings/Logs/LogsErrorRenderers/ResourcesExceededErrorRenderer.tsx @@ -19,7 +19,6 @@ const ResourcesExceededErrorRenderer: React.FC = ({ error, i type="default" chevronAlign="left" size="small" - bordered={false} iconPosition="left" > From 7102791900f649a05a99254975a154ea2813c32b Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Wed, 22 Feb 2023 00:07:59 +1100 Subject: [PATCH 090/230] move graphiql to api docs section --- .../layouts/DocsLayout/DocsLayout.tsx | 2 ++ .../layouts/DocsLayout/DocsLayout.utils.tsx | 20 +++++++++++++++++++ .../NavigationBar/NavigationBar.utils.tsx | 14 ------------- .../{graphiql/index.tsx => api/graphiql.tsx} | 6 ++---- 4 files changed, 24 insertions(+), 18 deletions(-) rename studio/pages/project/[ref]/{graphiql/index.tsx => api/graphiql.tsx} (94%) diff --git a/studio/components/layouts/DocsLayout/DocsLayout.tsx b/studio/components/layouts/DocsLayout/DocsLayout.tsx index c172f2c7a88..f4d677f2669 100644 --- a/studio/components/layouts/DocsLayout/DocsLayout.tsx +++ b/studio/components/layouts/DocsLayout/DocsLayout.tsx @@ -14,6 +14,8 @@ function DocsLayout({ title, children }: { title: string; children: ReactElement const { data, isLoading, error } = meta.openApi const getPage = () => { + if (router.pathname.endsWith('graphiql')) return 'graphiql' + const { page, resource } = router.query if (!page && !resource) return 'introduction' return (page || resource || '') as string diff --git a/studio/components/layouts/DocsLayout/DocsLayout.utils.tsx b/studio/components/layouts/DocsLayout/DocsLayout.utils.tsx index c97284cf3e1..13b4c097599 100644 --- a/studio/components/layouts/DocsLayout/DocsLayout.utils.tsx +++ b/studio/components/layouts/DocsLayout/DocsLayout.utils.tsx @@ -1,4 +1,5 @@ import { ProductMenuGroup } from 'components/ui/ProductMenu/ProductMenu.types' +import SVG from 'react-inlinesvg' import { IconBook, IconBookOpen } from 'ui' export const generateDocsMenu = ( @@ -58,6 +59,25 @@ export const generateDocsMenu = ( }), ], }, + { + title: 'GraphQL', + items: [ + { + name: 'GraphiQL', + key: 'graphiql', + url: `/project/${ref}/api/graphiql`, + icon: ( + code.replace(/svg/, 'svg class="m-auto text-color-inherit"')} + /> + ), + items: [], + }, + ], + }, { title: 'More Resources', items: [ diff --git a/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.utils.tsx b/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.utils.tsx index c16b3374c95..5a2c1a7bac5 100644 --- a/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.utils.tsx +++ b/studio/components/layouts/ProjectLayout/NavigationBar/NavigationBar.utils.tsx @@ -50,20 +50,6 @@ export const generateToolRoutes = (ref?: string, project?: ProjectBase): Route[] ref && (isProjectPaused ? homeUrl : isProjectBuilding ? buildingUrl : `/project/${ref}/sql`), }, - { - key: 'graphiql', - label: 'GraphiQL', - icon: ( - code.replace(/svg/, 'svg class="m-auto text-color-inherit"')} - /> - ), - link: - ref && - (isProjectPaused ? homeUrl : isProjectBuilding ? buildingUrl : `/project/${ref}/graphiql`), - }, ] } export const generateProductRoutes = (ref?: string, project?: ProjectBase): Route[] => { diff --git a/studio/pages/project/[ref]/graphiql/index.tsx b/studio/pages/project/[ref]/api/graphiql.tsx similarity index 94% rename from studio/pages/project/[ref]/graphiql/index.tsx rename to studio/pages/project/[ref]/api/graphiql.tsx index ed285275815..4e11726744f 100644 --- a/studio/pages/project/[ref]/graphiql/index.tsx +++ b/studio/pages/project/[ref]/api/graphiql.tsx @@ -3,7 +3,7 @@ import { createGraphiQLFetcher } from '@graphiql/toolkit' import ExtensionCard from 'components/interfaces/Database/Extensions/ExtensionCard' import GraphiQL from 'components/interfaces/GraphQL/GraphiQL' -import { ProjectLayoutWithAuth } from 'components/layouts' +import { DocsLayout } from 'components/layouts' import Connecting from 'components/ui/Loading/Loading' import { useParams, useStore } from 'hooks' import { useProjectApiQuery } from 'data/config/project-api-query' @@ -84,8 +84,6 @@ const GraphiQLPage: NextPageWithLayout = () => { return } -GraphiQLPage.getLayout = (page) => ( - {page} -) +GraphiQLPage.getLayout = (page) => {page} export default observer(GraphiQLPage) From 630536941a08c0b149342f081da5f07f9e9b9558 Mon Sep 17 00:00:00 2001 From: Kevin Brolly Date: Tue, 21 Feb 2023 14:16:19 +0000 Subject: [PATCH 091/230] Added missing markdown language hint in docs --- apps/docs/pages/guides/platform/performance.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/platform/performance.mdx b/apps/docs/pages/guides/platform/performance.mdx index 6dc62b3665c..24d57869947 100644 --- a/apps/docs/pages/guides/platform/performance.mdx +++ b/apps/docs/pages/guides/platform/performance.mdx @@ -118,7 +118,7 @@ Applications with lower cache hit rates generally perform more poorly since they You can view your cache and index hit rate by executing the following query: -``` +```sql select 'index hit rate' as name, (sum(idx_blks_hit)) / nullif(sum(idx_blks_hit + idx_blks_read),0) * 100 as ratio From dee866ca9c5ef9bed29901bf7478463e00b2684d Mon Sep 17 00:00:00 2001 From: Kasper Laursen Date: Sun, 19 Feb 2023 11:52:29 +0100 Subject: [PATCH 092/230] Update Types path + Add comment for help I got a little confused when trying to get type generation to work with SvelteKit. After finding that [at least one other person had the same](https://github.com/supabase/supabase/discussions/11811) I thought a small PR might be helpful. I changed the path in the example to the one used in the Type generation guide: https://supabase.com/docs/guides/database/api/generating-types **Note:** I think the documentation for this `@supabase/auth-helpers-sveltekit` is a bit too decoupled from the SvelteKit and maybe Type Generation documentation, had a hard time finding it even when i knew it existed :) --- apps/docs/pages/guides/auth/auth-helpers/sveltekit.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/auth/auth-helpers/sveltekit.mdx b/apps/docs/pages/guides/auth/auth-helpers/sveltekit.mdx index 7598037b2d8..8d73f79e224 100644 --- a/apps/docs/pages/guides/auth/auth-helpers/sveltekit.mdx +++ b/apps/docs/pages/guides/auth/auth-helpers/sveltekit.mdx @@ -137,7 +137,8 @@ In order to get the most out of TypeScript and it´s intellisense, you should im // and what to do when importing types declare namespace App { interface Supabase { - Database: import('./DatabaseDefinitions').Database + // Use the path to where you generated the types using the Supbase CLI. + Database: import('../types/supabase').Database; SchemaName: 'public' } From 8490ff0ea07bb6ec29f361dfc8878f176b5eb0bd Mon Sep 17 00:00:00 2001 From: Alex Ruheni Date: Tue, 21 Feb 2023 16:11:22 +0100 Subject: [PATCH 093/230] chore: update Prisma integration guide --- .../docs/pages/guides/integrations/prisma.mdx | 192 ++++++++++++++---- .../prisma/w0oowg8vq435ob5c3gf0.png | Bin 526613 -> 1052258 bytes package-lock.json | 3 +- 3 files changed, 155 insertions(+), 40 deletions(-) diff --git a/apps/docs/pages/guides/integrations/prisma.mdx b/apps/docs/pages/guides/integrations/prisma.mdx index c2f0d5a8f14..c8ea366d16b 100644 --- a/apps/docs/pages/guides/integrations/prisma.mdx +++ b/apps/docs/pages/guides/integrations/prisma.mdx @@ -29,22 +29,17 @@ In case you don’t have a Prisma project or this is your first time working wit ### Cloning the starter project -Navigate into a directory of your choice and run the following command in your terminal if you’re on a Windows machine: +Navigate into a directory of your choice and run the following command in your terminal: ```bash -curl https://pris.ly/quickstart -L -o quickstart-main.tar.gz && tar -zxvf quickstart-main.tar.gz quickstart-main/typescript/starter && move quickstart-main\typescript\starter starter && rmdir /S /Q quickstart-main && del /Q quickstart-main.tar.gz -``` - -And if you’re using Mac OS or Linux, run the following command: - -```bash -curl -L https://pris.ly/quickstart | tar -xz --strip=2 quickstart-main/typescript/starter +curl https://codeload.github.com/prisma/prisma-examples/tar.gz/latest | tar -xz --strip=2 prisma-examples-latest/databases/postgresql-supabase ``` You can now navigate into the directory and install the project’s dependencies: ```bash -cd starter && npm install +cd postgresql-supabase +npm install ``` ### A look at the project’s structure @@ -52,16 +47,17 @@ cd starter && npm install This project comes with TypeScript configured and has the following structure. - A `prisma` directory which contains: - - A `dev.db` file: This is a SQLite database. - - A `schema.prisma` file: Where we define the different database models and relations between them. -- A `.env` file: Contains the `DATABASE_URL` variable, which Prisma will use. -- A `script.ts` file: where we will run some queries using Prisma Client. - This starter also comes with the following packages installed: + - A `seed.ts` file: This is the data used to seed your database. + - A `schema.prisma` file: Where you define the different database models and relations between them. +- A `script.ts` file: where you will run some queries using Prisma Client. + +This starter also comes with the following packages installed: - [`@prisma/client`](https://www.npmjs.com/package/@prisma/client): An auto-generated and type-safe query builder that’s _tailored_ to your data. - [`prisma`](https://www.npmjs.com/package/prisma): Prisma’s command-line interface (CLI). It allows you to initialize new project assets, generate Prisma Client, and analyze existing database structures through introspection to automatically create your application models. - > Note: Prisma works with both JavaScript and TypeScript. However, to get the best possible development experience, using TypeScript is highly recommended. -### Configuring the project to use PostgreSQL +> Note: Prisma works with both JavaScript and TypeScript. However, to get the best possible development experience, using TypeScript is highly recommended. + +### Configuring the project By default, Prisma migrations will try to drop the `postgres` database, which can lead to conflicts with Supabase databases. For this scenario, use [Prisma Shadow Databases](https://www.prisma.io/docs/concepts/components/prisma-migrate/shadow-database#cloud-hosted-shadow-databases-must-be-created-manually). @@ -78,7 +74,6 @@ postgres=> CREATE DATABASE postgres_shadow; postgres=> exit ``` -Go ahead and delete the `prisma/dev.db` file because we will be switching to PostgreSQL. In the `.env` file, update `DATABASE_URL` and `SHADOW_DATABASE_URL` to the connection string from **step 1**. The `.env` file should look like: ```env @@ -87,18 +82,19 @@ DATABASE_URL="postgres://postgres:[YOUR-PASSWORD]@db.[YOUR-PROJECT-REF].supabase SHADOW_DATABASE_URL="postgres://postgres:[YOUR-PASSWORD]@db.[YOUR-PROJECT-REF].supabase.co:5432/postgres_shadow" ``` -In the `schema.prisma` file, change the `provider` from "sqlite" to `"postgresql"` and add the `shadowDatabaseUrl` property. This is what your `schema.prisma` file should look like: ```go datasource db { - provider = "postgresql" - url = env("DATABASE_URL") + provider = "postgresql" + url = env("DATABASE_URL") shadowDatabaseUrl = env("SHADOW_DATABASE_URL") } + generator client { provider = "prisma-client-js" } + model Post { id Int @id @default(autoincrement()) title String @@ -107,6 +103,7 @@ model Post { author User? @relation(fields: [authorId], references: [id]) authorId Int? } + model User { id Int @id @default(autoincrement()) email String @unique @@ -115,53 +112,83 @@ model User { } ``` + To test that everything works correctly, run the following command to create a migration: ```bash -prisma migrate dev --name init +npx prisma migrate dev --name init ``` -You can optionally give your migration a name, depending on the changes you made. Since this is the project’s first migration, you’re setting the `--name` flag to “init”. -If everything works correctly, you should get the following message in your terminal: +You can optionally give your migration a name, depending on the changes you made. Since this is the project’s first migration, you’re setting the `--name` flag to “init”. If everything works correctly, you should get the following message in your terminal: ```text Your database is now in sync with your schema. -:heavy_check_mark: Generated Prisma Client (2.x.x) to ./node_modules/@prisma/client in 111ms +:heavy_check_mark: Generated Prisma Client (4.x.x) to ./node_modules/@prisma/client in 111ms ``` This will create a `prisma/migrations` folder inside your `prisma` directory and synchronize your Prisma schema with your database schema. -> Note: if you want to skip the process of creating a migration history, you can use the [`db push`](https://www.prisma.io/docs/concepts/components/prisma-migrate/db-push) command instead of `migrate dev`. -> If you go to your Supabase project, in the table editor, you should see that two tables have been created, a `Post` and a `User` table. -> ![tables created in the UI](/docs/img/guides/integrations/prisma/7y4qq4wwvfrheti6r09u.png) -> That’s it! You have now successfully connected a Prisma project to a PostgreSQL database hosted on Supabase and ran your first migration. +> **Note**: If you want to skip the process of creating a migration history, you can use the [`prisma db push`](https://www.prisma.io/docs/concepts/components/prisma-migrate/db-push) command instead of `prisma migrate dev`. However, we recommend using `prisma migrate dev` to evolve your database schema in development. +> If you would like to get a conceptual overview of how Prisma Migrate works and which commands to use in what environment, refer to [this page in the Prisma documentation](https://www.prisma.io/docs/concepts/components/prisma-migrate/mental-model). + +If you go to your Supabase project, in the table editor, you should see that two tables have been created, a `Post`, `User`, and `_prisma_migrations` tables. The `_prisma_migrations` table is used to keep + +![tables created in the UI](/docs/img/guides/integrations/prisma/7y4qq4wwvfrheti6r09u.png) + +That’s it! You have now successfully connected a Prisma project to a PostgreSQL database hosted on Supabase and ran your first migration. ## Connection pooling with Supabase -If you’re working in a serverless environment (for example Node.js functions hosted on AWS Lambda, Vercel or Netlify Functions), you need to set up [connection pooling](https://www.prisma.io/docs/guides/performance-and-optimization/connection-management#serverless-environments-faas) using a tool like [PgBouncer](https://www.pgbouncer.org/). That’s because every function invocation may result in a [new connection to the database](https://www.prisma.io/docs/guides/performance-and-optimization/connection-management#the-serverless-challenge). Supabase [supports connection management using PgBouncer](https://supabase.io/blog/2021/04/02/supabase-pgbouncer#what-is-connection-pooling) and are enabled by default. -Go to the **Database** page from the sidebar in the Supabase dashboard and navigate to **connection pool** settings +If you’re working in a serverless environment (for example Node.js functions hosted on AWS Lambda, Vercel or Netlify Functions), you need to set up [connection pooling](https://www.prisma.io/docs/guides/performance-and-optimization/connection-management#serverless-environments-faas) using a tool like [PgBouncer](https://www.pgbouncer.org/). That’s because every function invocation may result in a [new connection to the database](https://www.prisma.io/docs/guides/performance-and-optimization/connection-management#the-serverless-challenge). + +Supabase [supports connection management using PgBouncer](https://supabase.io/blog/2021/04/02/supabase-pgbouncer#what-is-connection-pooling) and are enabled by default. + +Go to the **Database** page from the sidebar in the Supabase dashboard and navigate to **Connection pool** settings: + ![Connection pool settings](/docs/img/guides/integrations/prisma/w0oowg8vq435ob5c3gf0.png) -When migrating, you need to use the non-pooled connection URL (like the one used in **step 1**). However, when deploying your app, use the pooled connection URL and add the `?pgbouncer=true` flag to the PostgreSQL connection URL. It's also recommended to minimize the number of concurrent connections by setting the `connection_limit` to `1`. The `.env` file should look like: + +When updating your database schema, you need to use the non-pooled connection URL (like the one used in **step 1**). You can configure the non-pooled connection string by using the `directUrl` property in the datasource block. + +Update your `.env` file with the following changes: +1. Rename the `DATABASE_URL` environment variable to `DIRECT_URL` +1. Create a `DATABASE_URL` environment variable and paste in the new connection string from the dashboard as its value + +It is recommended to minimize the number of concurrent connections by setting the `connection_limit` to `1`. You can set connection limit by appending `?connection_limit=1` to your connection string + +Your `.env` file should resemble the following: ```env # .env -DATABASE_URL="postgres://postgres:[YOUR-PASSWORD]@db.[YOUR-PROJECT-REF].supabase.co:6543/postgres?pgbouncer=true&connection_limit=1" +# PostgreSQL connection string used for migrations +DIRECT_URL="postgres://postgres:[YOUR-PASSWORD]@db.[YOUR-PROJECT-REF].supabase.co:6543/postgres" +# PostgreSQL connection string with pgBouncer config — used by Prisma Client +DATABASE_URL="postgres://postgres:[YOUR-PASSWORD]@db.[YOUR-PROJECT-REF].supabase.co:6543/postgres?connection_limit=1" + SHADOW_DATABASE_URL="postgres://postgres:[YOUR-PASSWORD]@db.[YOUR-PROJECT-REF].supabase.co:5432/postgres_shadow" ``` -Prisma Migrate uses database transactions to check out the current state of the database and the migrations table. However, the Migration Engine is designed to use a single connection to the database, and does not support connection pooling with PgBouncer. If you attempt to run Prisma Migrate commands in any environment that uses PgBouncer for connection pooling, you might see the following error: +Update your Prisma schema by setting the `directUrl` in the datasource block: -```bash -Error: undefined: Database error -Error querying the database: db error: ERROR: prepared statement “s0” already exists +```go +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + directURL = env("DIRECT_URL") + shadowDatabaseUrl = env("SHADOW_DATABASE_URL") +} ``` -This is a known issue and it is being worked on, you can follow the progress on this [GitHub issue](https://github.com/prisma/prisma/issues/6485). -If you want to learn more about Prisma, check out the [docs](https://www.prisma.io/docs). Also in case you have any questions or run into any issue, feel free to start a discussion in the repo’s [discussions section](https://github.com/prisma/prisma/discussions). +> **Note**: This feature is available from Prisma version [4.10.0](https://github.com/prisma/prisma/releases/tag/4.10.0) and higher. + +If you want to learn more about Prisma, check out the [docs](https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#fields). Also in case you have any questions or run into any issue, feel free to start a discussion in the repo’s [discussions section](https://github.com/prisma/prisma/discussions). ## Troubleshooting -If you run `prisma migrate dev --name init` multiple times, it sometimes asks if you want to recreate the whole schema. If you chose yes, it will delete the public schema and recreate it. The default grants are missing after this. If you run into this problem, add a helper SQL for fixing the grants: +### 1. Missing grants + +If you run `prisma migrate dev --name init` multiple times, it sometimes asks if you want to recreate the whole schema. If you chose yes, it will delete the public schema and recreate it. The default grants are missing after this. + + If you run into this problem, create a draft migration using `prisma migrate dev --create-only`, and add the following helper SQL: ```sql grant usage on schema public to postgres, anon, authenticated, service_role; @@ -175,6 +202,93 @@ alter default privileges in schema public grant all on functions to postgres, an alter default privileges in schema public grant all on sequences to postgres, anon, authenticated, service_role; ``` +Run `prisma migrate dev` to apply the draft migration to the database. + +### 2. Using Prisma with multiple PostgreSQL schemas + +If you're using multiple database schemas, enable the `multiSchema` Preview feature flag in the `generator` block of your Prisma schema: + +```go +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + directURL = env("DIRECT_URL") + shadowDatabaseUrl = env("SHADOW_DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" + previewFeatures = ["multiSchema"] +} +``` + +Next, specify the database schemas you would like to include in your Prisma schema: + +```go +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + directURL = env("DIRECT_URL") + shadowDatabaseUrl = env("SHADOW_DATABASE_URL") + schemas = ["public", "auth"] +} + +generator client { + provider = "prisma-client-js" + previewFeatures = ["multiSchema"] +} +``` + +You can then specify what schema a model or enum belongs to using the `@@schema` attribute: + +```go +model User { + id Int @id + // ... + + @@schema("auth") // or @@schema("public") +} +``` + +To learn more about using Prisma with multiple database schemas, refer to [this page in the Prisma docs](https://www.prisma.io/docs/guides/database/multi-schema#learn-more-about-the-multischema-preview-feature). + +### 3. Enabling PosgreSQL extensions + +If you would like to use a PostgreSQL extension with Prisma, enable the `postgresqlExtensions` Preview feature flag in the `generator` block of your Prisma schema: + +```go +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + directURL = env("DIRECT_URL") + shadowDatabaseUrl = env("SHADOW_DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" + previewFeatures = ["postgresqlExtensions"] +} +``` + +Next, specify the extensions you need in the `datasource` block: + +```go +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + directURL = env("DIRECT_URL") + shadowDatabaseUrl = env("SHADOW_DATABASE_URL") + extensions = [hstore(schema: "myHstoreSchema"), pg_trgm, postgis(version: "2.1")] +} + +generator client { + provider = "prisma-client-js" + previewFeatures = ["postgresqlExtensions"] +} +``` + +To learn more about using Prisma with PostgreSQL extensions, refer to [this page in the Prisma docs](https://www.prisma.io/docs/concepts/components/prisma-schema/postgresql-extensions). + ## Resources - [Prisma](https://prisma.io) official website. diff --git a/apps/docs/public/img/guides/integrations/prisma/w0oowg8vq435ob5c3gf0.png b/apps/docs/public/img/guides/integrations/prisma/w0oowg8vq435ob5c3gf0.png index 9bfb34db474de2083f5afb514479af7cdadd7c13..05db2d109b61772e274f247f67c1ab28365cd779 100644 GIT binary patch literal 1052258 zcmeFZc|27A`#-FeC|XfsNcLqyk#&TUlqD5qnMy*oB8>I4Nm54H6Qd+)Arx6hW#0zL z&e+F3jAiz7?laWq{r>*G_x=0te%$xt@%whgoH?)cT(8&bTAtT+L|B*^Z{yv^%f-dD z&E%xfSuQStK`yQ>7Cf8bJDbC6?{abResnc7v@kI=6u0p9y6)=k#KmDT8!PmI2j4%kOM)lXwZxV=tH(_fiIBDB;KHvWF8#Ya zH4AM;SviMGevX=DW#IQqq zxO5_Z?vUZqe=QjrD6O%s&d}Si%b<1_&kjL}nddKFR2$L`{y1@R>#*dRG3QFQl=%;$ zceRO+_t7n9Q@b0!4C-#2e7)Oj1q#>?*`BpJn15vJb}6aHA@_ECc=WRS{^((p9N&l_ zcVpfi4N+86#7^Aji{o$eUppt&EX>DbpSd`LYFJp0EI4ewS^IW8eKJ)dU(t*&zT>e_ zeqw&(4#MxagW)FZh~R?5fZ0`-N=0YhA3_B0K<`IHyRD{ELZ;i?^Ub~^3xAWphokZ&woV+) zHP~|^+vug{NOHNUu>MBxJG|%aO1Eq}QL)u#o%Z0yzB@AWo7Rc%HoEI{hi~UG`8N8g z&-*@dZ%X5F-=uwPQp*|#`kSw_Pyjm{)x@lV+i4mITgY*E@^R|AIGje zTAyWbDO&Fu@5N(VYd29IuwGr3<$WBsQ(WTU-3x{yX$Rizet(DG;7ALhMRQ{3ZPBTF zVg~FMo+UxX`t-{?Plp}3yaBVW@lMib#C~36*sj4nH~C)*c-?InlBXT*<3iu_`q6(A z!QvG&UKhLd@x!(gNw0)u1?9Q+Jbi2&Vd-WW_D=QOp7;E}pG@iZ8!o>(VTo(CIlSqN zaq_E_7QKl>hlR@4mkHWG$<{|4*GTJarM9pqRF?d=?oE$UsXBVKEAiy%_1C4|a#=mh zs(x8z_x-lxW);L|8^vvIkG|G0E~kGs={nzab;iM6w_s0im}o`R$jzhYU&=M_6}mGr zsCskLxBhP<-y*-2d^^@BQ@YiG&nt}j!+0c&rW3pu6b9FW%Aq`{W6?4byY_Ecw^2+Y z*}~xHX&31}>8(4ZAMqL)zE)F-O*FDISCr}4k+U7Qomf{}J5hVIc4HmSHE*YSC$oCH zn8^hC>9YruqHW#?KY#Eg?Dm89Q-LP~jiqC@)q0M)cyA8iD|#55#CpOqi9g_`+z>xj zmmTvd)+4%1fq5xPJQGD*o~LfLW`4tJSm2#2n1Yg}h;|O~+d^KFiwGZ?3;mzo%Y&kLi&&d08gy z2d1{%knufjVp(@W&Q8uW>+EFdS;V&EYH7Kya$k1#$Xybcjm&$fYL%2zda=lio=q{1 z3y}Ae4~{d43ykxOL%zR#-u(Bq-yZLuzBm8fazpyYu^S4%SF-FaMN*7YNQbf7IX4Hg z0%(fK2 zTYjExWXLg>EKjWGFTn=>vldBN55%* z^l`aGn{go}4q@sS%w^OvuVp%#{p8ywL=h5mI6C-or16&CL?6k(Kf+gYu#NP7w*J;9 z?~u8-)73s7{6wzqQ;SKgNy_P0>Z_V_?nmYAzvyQ3NlaG23u}NiGe1r^MBpVjJ7_s< zaro-sI8ZR~q0~0ykY1=>Z*XAuK6mAkhq~i#n;qsf<_xWd2m7e)QF-mAXKn|)PGlY5^7_T=TdhN_zgtI4brNRmRD~Ty zthWEkZ@=l<(Kg-C9-pD8jkojEbf!<*oOU;w$?eK{$z`_3Stm-gP{#8~!|>d2`Eb#K z-~0($GwUp9QR)-y%DQ>a=f}!}XGWcsd6kyyOf4iZF{3eGP?L_{`jls*b+M0P8Rvp; zxKC-mdVT0(SL)lO__z)!)jfM2F)kdy`z|GC!X%H_Igpeesrp(zM2an;bL{6wfHSaE{<^y{X)O~dyF&X^^yKzG1n^M<7B z(@iBB0CIHCfNY+uyaMA=qf+@o`WSW$W#$<{Y`b{XI?qeN@54tV zmibeQWj`*8lUb?(j`=D)O{sF1A#q5+>IZJbelxh{4*<+?= z)|t|Z$|os~xnJ4P9^HSaBeAQibNBCd-)5?vZNAlFH@XqfYh4P z$VWM<@bM*Mq?Fx07u$gqn)m1!bN1M5iZv_Su4Kx0*_%6mWcUclO{r5f2Uqg_TPx<* z-1VPIy|&K4SN5`droHn|4`%Nf|NV1^{gq~lZ+0%vWdw;)vj?1s`0lcAB_Cuyl8$+u z_9AW=xIYvwCqUGx4?etbl)7cyWXOu1=|pJ9oo8QX*@ockiS$q`XiG3mMTrgamojwO z)SUZtWG%A(;g^Ru9)5agd!qEjT&W$!dp>UBccsgB1TQcX;IYJL#CZY(`y%&?1WSgh z(F#!a)!8~)r0|5&80|63|Bn6}~X^%e_G#bZ{6CMNKwm7}+llc$f1*KJXp9zPe?dX(!q zo7*;LPHQ=Oc_?4G=5^Ic8RK!2(}YV0qXl1jINiP?j`48!^wGlT9$2lR1z&S+BM*qL zR=Mq_d%)(5g}9-Yx0ATK@*(9z2lRNw#l>~JuU*$VYjomIbNHL?0himiZ)zct{{H^T z{%Xoz-p)uBO-)VYAyuTRsuEm7$tS?`_7#khr;p@XCx81fa`JKXcD;Gq)yq?y)9;n5 zUcR?=4;SpLjK=1yX|`Y|DhSDWUblibFB@h z!|6=R!WHA>e$mL)1Li6`H9b|eqla}?$N6tX|IBo)>3JU~Z$mE+xaDoVf7azs<9`?a zuMJnnwE1Vu!-v%W%b5Qv`d3rVLui?MyTZd=;c!t;MF;uc?)|B+gXFOIUo2l+&(*u| zg6i?=Apf&D^mx%4zeTvX^tnuoj-A7-nE#obj-8T_D!zU3jMV- zRaFWbVbBv|k-b&%f#fvzd^+!W`|vTfh(}LijDshKWOfHaOIEwrOKkt2|Np~*|KY&@ zaNvJ9@W0~#^}swfh+AEGqru?ujiGvhkdD~gZUNt(k3pR-2@~P&K67Ye5nt0zCmoM+ z#P8&h(Y?^TwV^Y zz`e(9I>l2IormY!qOwj>Y&JWCDi3$X8TU803pNYsp7}Ho?)`(Jg+XmtEZhF%qb_!;}W;Yvij9W=teKE>v5do z>vc^}g?pFhi{0)m;RFcnyt@8`PLI7Q`FH0vfc-EIRz!%13M4`^$5mopYDdeVx?P5E zRPwNA??>4=mWng8ei5`syDqBM_>-C_FKLG!-r84d>()jROZ0d9=&?jt#^6R7!dJ%+ z#T)+&IcNTQoA)OgQimqjaaHaFp^Thld;JHBJ`H97EuuP;#4ITx=`ZhW^HCzW8A5n@ zV&dtfRxz*9Jp9$?(6j$g9FzpvvsB6|hXro0KgasYsvIUr39t@#sK#5INDU&YMdB;p z(LSsaUw>T;bmWr}D5Sd1)pijjD8_1pWTB^s4CI(-z+8xFb7~9}w@P7igLTl0OR5lG z(w#3#bTpqp=r}M2lLz{&=rgG3cI6)ICr$P1bmAIK@TRiJSyGGmXIoC%K8MQY2c1EG zn5ZjKzjx4yrp9&)T`wFRSH9ATR+$T;zagN8h}NqChHZ2=8i;QUJ-P8*vur(@d%dh1 z(^iwzSd>U%KzG9{64#y6}~#%8Efw&~6Z?)FLoO(1cRdT#Fx_G8lQ{G01Cmk2-Z;p!ulruJ}p z8EXh_STbjDcU$O1i%iICOya`$j%EOYf~<39?v^?8{1;Xf&?~lYfi_g_L(1Jged{6< zNYSoBj-CH`Fw^^LWMG*8=R7n$kEqIy0gtK23XEWZ3uJWf8U8ZpS6VkF)6|+!tS{yiCD6YYevn zGY-jA`h}WA{AJA>;QvRgX)1gNbeJ&quE%Xz7dPR2soV+R+IX&1{>rs_tr{E~6v|~G zGh4ipAHIa@BkNy;LJDqA9A{B3I*)u)rUSp!;Z#8t9nA_1{ z6L<|+L{aeZdZlCL zQ^WuzlT)%jqq z@OWy<@}S+(-GJa9QVzj1;NE`XRMEWi7%_}X|k)d8((BZ>Lz8{eiw z<8^0fSGMb~%St=?h5Uuy5@m4Ua^9P#xjJ90%%s#IQ=`q7YNC@jB5FSKAM`qPvONAv z6^g?TG`u;I*>&JJFjJud@d?~|R-QrbRE5+aTX;@3h3Pc6nl$mNeXb_93(o(IWI%~? ztg@SfnYq6`11>3m1HyX%yor?3f<~{G-4PDQ(Yg?@Fj_NK?ljM*mB?X8x*uynv@jE>zw?(Tf0Y^pU z_+7u|&B1JM6>?W>+#J#9`fqsm6K4p;d{a9H@?fbSqBHixyC;@~Wnn+qDSG6Enq91e z5^LRq^Wbwc_NZ{id_{(71#U`y-)~}VA`4*PtmTNO5kN;rzvG)r+k_mMB zn!4U3F)Ylx(w3pY{(#N2voT9~4)c37npPcy3 z#w=+H^o6p$b3K1CG@Yc_YR|f9ZvY{|`W;@AMCLNGd^@J8Wb;Eyo(B~Ik1Gxr$a8~^ zTMOK7-w9V2>rG{1)xYs)EKdhgKC^`xM?3U-Wna<40ZJ#^6jBUH1nrO70XKZ|P`z(& zIFtHYQy=5LIRObNn}il#D?1eULi%HdXQO04$pCzra@zGVJde*)bC~{R$l6B~Ri~5P zNg3WouI%De)$7`eqHZ{kSPPcW=E02_kPv?-u6{>`@0k15OdU;PZXKFImjBJYZRCA3hwFaptv$yjkzwpMl#QvyBjrb}_2p5O)7TfSZTg7i#02PxBT3 zNyCsZ7B-9<_5C2^HZ-WaE`dd0k%t95e-w*+D1b%g9{4Ax{_?y8drx=?QD!gsm*%0eR@b{#d}aBadZE zFQj;BXSZF51$qV!Cvv3G9k{5A`kH0RX)>*sCX#&)%vk%zXpiOeD9$~Gj{m9%orUi= zL@9jTgFXPQN6z8Kil4Dro;wojBFQV!sIKqdN?S@R4=PCY1k@}nF$rl8ipd?=xA{*O zwB#wd*t2?#_k#=HD1k#b)*l`S2;Sc4q2fQ@<<&3e_lqaG(WA| zkd`ELp~kp&d_Mz2I;MOmI=d<`+obo6W~v{lh5zE&OsuaI!zRH`Y#?A50oD=AP5be% zRp#Hld8YD>E7Bzs{SlLievM>G?&C|I@dCN2_hcZqE77p!3v;jpLhJo=()6SfSg@@QwkTIY5So1=Z;Y)9ZP7Q?c<7 zigE@}XtplKWEZlh>U5c-E1Kb)&aKX|^!y)k2Mo%A9P0j0XLJNN&;7S$X_}B5anC## zVv9Qkb=>hv3{*6C8ti-?o@L%H)lK|lRdKDYGSW}Qifq%90CrE@Jp=3YpD9Df#4wM6 zNSF$h==)}Kg0!;TV0a96MQF=+yKkqCnv1-#tV%Sc4s99UJwoPAoc5!-U7ey zQ@chbnTtyfcOzoi7f;F}r?y}Eh2j%AWLe{IYp7o@*A#jSl$qBWb2OW$zL>NVAh>TJ zA;N0K`N{@qorxVT!#_$wt{USpZ8+Ezmldh~`DTe=@RO-}>jkw@yLzI#xg?}HgSb3F zhSgN;w$UqRsa~&!LXwU)1&xb3F1d5&(MAqj@`s9n`puL>S(TOPejG2Gj`a_68IZik3>m*!}o9T;5%s(^H_*;Zo$T z%m6~E zkyh-B29)MbQoZ_j9UJ^K|_(DsaUE*N_8$jCRhg2y@a+M5i1D2IqcG1yv^aPL7 z&$HdN(8h@4zp4W>C+eVj=tbUwxbhglFHS*GQ0;Nny+3s8VBy7~vl=$>D1z!rk0=?03OUa|&v4m40uFpL)nLkG44+vej2!myV<3tklIS zrJzNw1F*?zWgqZWsV@d@$02jy`x(U&(5{1mXAp)dr_4cTkQDor`&J#KbEg(+gw9zz zc<@mV!tFR@)qgq5b8Xr+7MX1^5Iux}6Tp=XyBStQ(!S1qV7nhr8=@_8RWZ=Uq8rqn zZcS8qs8{~MQ8tNWM{4mT?hiVQ8$C*@0vu%>t{%J&3vCGzSS(?+?y0g%d^5Fn*;QV@ znxX7#x8f}EoZYYbrc_q4{xl3ZM7m$&pdvi=Gvtnxsna)iBuB&*x8H)Hlanj{4bha> zPh{0#bOM?842BxsOUmZsZT;V?eLwClePQZs4U9S*=q4%|)<>$oZsc@Sdx8UFM5Q%? zp8Z+P8-;R{Y_d#66WI2Tt^tKx<&gD{RAJo#9uVPxC-CH$|8;Wy{~t__s@sKb{;@Yb zXY0D%zDvvE6;8N>FlyGpnauX?tJJ7hbNi7mr|D*{B2w2(`sw+eB2tcWz+rIsdrA^1 zlmDVa?o!Bb&izsLE~}2T=B|tW+j?NNPet;{W6Jz^6H4o600kYFFQm zIRSy?C9;)byTo7&`(oD{fU2umd4RcrhdaRf-3N0RzdClMS9HD>d>O4%eXibg#hEDj zdEU$k$iveSbi~A6Rt^g}d+@?;80y&5{x!3GFQ4UWLq%6den(Mq@fR!qGYnYhWzG?w zZ@acW@7x9VMN!RrvD&6R!asw>rk0wD-CE*VO773`N;2U#2Z1{`qy58*{T~HV1$MWg zrtD1*nLybk!y$E`d;dDYsaRNp8H1h0BAnyZv&CJuc*j}mvz@6H&Wc7CS!K7lVpv!y zh5AVEP0H zU+(8Ra4yLE(eV|b?fjH%3u~MO0pbet@NdJLCfqYwaqizkHeKzXH-uEkb07Oizp3aTpHgC2IV~Kon!Z&+2sQ`u zSIq%xmQuT)g~1fR?-q}4ghegvw14;~NIH`diceOi)#M1aru>y~HZ zKJPwg|IYX_2HZE`z)=MmwXnS;t5^@410C0045Od0$e+~yWib)%=skFh669yK``s{w z-TU=nu-TL|Ybqg7g--j-LDEco`e7$0vppU-KQlEr^q`QObLJ;TVA`^^uR7GkXivU;OZsMPb-<}3EgsM#l1 zLdGpfMa@(;ydrD?9gj@@+|*KxzwXo%UtFo0*=uagLUx1psJ3qa%bwNE7j)BWMvft} zJ<(u6<1_T?V&E3~W(T8K9^cfx(Z9gyg+@NZl%iPq_2b9Nt(+T2k0mD%Zov@A%9z9W zUd>&kOsvXFcHv0UVFJ9~i%c^SUopbTWF1js1WN|QtIdm7H82(y=VB(dH5aYm=z41+rP_QQ0O00+aRP%4ZvYl9ks6ulr z_9`M{3&(1=Ta5n;z|c51@UT%{^nhYMhI3$0xf#F5h$|^_P(iNjs^x7;7n(I%GwTcV z^ffqE{W&m;wX66}ChKR^A86roaJ8>O0fbpjpXekMIKaHIXO)qUFOWJA6OV?ms}?Z9 zOBbvZGAJA&TTo;>mn;jRcY0C3)SDL}9stnJ<-$(zN#3bA4xrX=J}JM=Gwc?k9{M@6T@`fP-X2-=b$S^UW71WAVdD-F$MkkD|}c zSqqj%$FK+}vTIBl26h8bZK&RYo5;6pOX6EV=)~|VG0msV3zE$IXf7d-GO7YIU&Yc> zwn~NrCW-}fj_bTt2nWx(iHhZ(ih+UfZ8z({c-U*nV}D=~KJ98xj-})H5?JKfpaVj5 zTths?3gGPjn37jI?~LPOS%k2S-#A)$9PotXA)o1u%hFD;=9KZ5gtQ@%kU=Zftvd_) zjAVFi5Pbq;cNuSnv0t`)#&f7ZuO0g$Fpri_``J|rAMbox39a{A@7a>OULK9-S!KCg zIF5rfY0YtB|I$^VC%JEt$IECzj(=S)*FING-|GvcD~I{zVYqQc`6h~klIin{*Z+f< zeO`VQI@%t?IW6PY>rth;&|pgO7;rCB@4c|L18OV~687q=d8vuj%=V8YmUcG#vh19r zf}-$_gL^}+Z=~_Gl8)brtdNS%7J9ZKx8$(@RJnjq6us2SUw6E*;Rs389_yx+sy^XJ zFA;L8_LaN1s7nhn>x_{hy)~nRwfUfH5cXK+ttsAB>k2TKU2{w?IHBji!$d0gxt*#Kt_ zaimE-DsJ`0+0Xbu)X;-}*gJ@Se0 zoMC4SelfYa&JndgBfg3E8ZE$+4W85iO3JacZSWPZ#AVeyV2#_HfZuB-_UpcrEjrZoF(+ z)0Vm_I}4$zlos>hY<<`$L9fZnh6}GHCF=k2+d00ws4Z?YWr*7^j}}yOzS<`CFH`jQ z-_^6w*#FyD{*Sm^ML_2FeBQC$>3`vaAL~JiA}l?(KzmiI-zq{Ez)x$)h$-^Di1~5) zd^*dKUPHl-AsSHefFks5=HS~Mwim&#EH`>5C1(sxj0cWbyMk5zGYxU`+7q47MeOAo_4cLM24}I#lJLnm-j<+}as>Ul;PM9Gq>-=HS#hshw zmrnDaK5?T8ZK^IU2&*C7MC2M6vijSLbs|J+WQHPuIWvZc4iAOCj&cRaLK}Jcuz!!C z9Q1{~(N{7<@At>G9hbqf;=oB`#Cm)jpa65xgIPa@h!A8@(POv-7*Ve!F*Ds0c2ivRS`wmAzwnd9B`?^ePyVCR3s78wQ^)5v`=*j7sRA!$n0UMo1wST1CwkwqikjRK4CxJxF8|W7_!5yJx&VaGj{`+}AH^joR@GPR&A`v$Z zc>zK}@eqEY79zl8te_|lqa_NU5{QH>!E{zlUc?ws53x?t5pO`_c8GQ66G(o-R|YKs z^+af&bKfoiUx_Q9*tKI`pb&K{2@$9zbl-GcKtRPFr^(~5v0Ch?Bwq$w@QYz%C;g`4 ztb=%OY2s4r2`CQFOe2O^8f5#A5jG`zMB(QqeHQ%z`3@GFa}Y+@ z&T))@!AsoQt}0km%(AmHDF1fnxHzu-} z<^v&m$D#K*0V-<7PbsUzg7YdUV`;Fn{KVWlqfnNgH` zIkP_I#*5t~hrOmL%X@2d9u>`{Q0j5&aSD#Q+-@z+nBFmSk;=ZJPV5jtD<=iWZs?-j zzeJOPIlV+E*kfhxt&!HbgmP@dr+xnXqu_MX*_xJAwr$>X_VG)3_1I|i$9D|9_dcUi6;rKrQPQ8~)y4?wKo(4sLx#k0W@B7|Dr)r91f-cyVPE_qwP zGF6g#jQvQ)65O-99v=@&gG;akoo1z|`&|VcO4cCe%#xc7i^c55px40ikt$rU27+oF zFikdZl55RDUj{>(#~Qx?&8(lJ0=PPy9#5H3ik@RxI^&oK$@$5Ma5~hW!_eI|8%p6We&WZZ7$4tT^*3WA6TTTjN6k2YUmo?|3Yx==CIqx0F=dh5J>*o+B~G zXVTf@WGKa-xYR#Pz>xH6aG{;IX8L}XR-*4gqi1wMrpQA`Vmr4)rj@6Ml|$?+>@$FL zNgAlb1?Dnq&TujnIO=~^HZyz12KM6i)8}`L^htB z;&%{ooQ{H}`Eiic@rsVayrAPI>asMd4#GC9HWbv`!XkTUulaBs^K1p*`;B2)h3oa> z*j@X~Zz9u%31L6ad$qiutAz%%IL&PPEm{B25WcsRVac$l7Ng@7aG$oZg`uE;k8UZ2 zQ|R$>Dv{_NA5@NKUO0ilrxN`cu_=>)B&y8~3?Gpv>vJ7SFO(cSe!)g=$JO5Rn8miN ztto~$qkiKnnYR^*b;YxdPR-{wXPb!lV4PEZL>u-+>AuI7y2jug<=DuZEgJL^`?3s-#X{kzwQDpxawu5h_4smn?uASix36+ z{PRz$3nwq;g+L=@6JQmR!OEFc7($B6=w03rv1iPb?p!klc%J@#kXvNg#8m7E}lR=VT0NoyR?0&>?gke`$ zVGrPm-hyiDL&K2*e>%5kWyhYsMo5}~J$yD`wdf?-fbvAWVogWM{oVV^Ws5mBqHLtQ z!1M=yrM-(%OIX%WhUl9IT_dqTZ=beQP{KQA3wKlQ$Euz$-J$0Yz0v?xA6VjDe|MQz zU!Z^R!JPv$(d&(q*PABK#z&3W7q2uO$@$T=AK5i(p2A0{!bG4#p0Ia=@`9MAvQSrW zk@b?~HUzkj9b6eL{2FY|!gnkJa`b5yM~ZYDK}UkqAld8n0GxG!$3f3Pb0`xk%r=35 zZrWd+sLur{!)lQIoc=fH%GsctM1wU96W>SvPq5|RaT?AwlWN{8vqaRrxI)G;sOFVT zwfEn+&xd}JL`HqBY|cBe8p@*H+QC2Ux#pp9ytGvLh4u)>u6Pa>O2_qPcK9cTwtobk zK)R$LvLZ0b3ZQSkri54j-R$4LH59a)j>o}$=uW|>CDEPgRc{I zY)_Z7;O&2@8J6I;2k*GUV#?~~tfS8D6vJc|$!2=-YO6Z&;&k9KVMl}e#nbzL=kp^w zZeqVM(Zmv8u#W5i;t_5?NJqfzSvq={(3L>@MGhov%5KDw{8^tC5r*d8Tan0xOkD00 z`hJo#n@0B9Dn_USXn2Ti3a+M+5x#^^5_>^w7+_u;0M|0XIO$uh4vF8{b<|It< z_y+`WOMD#kW?P^fbP9kGGGmZi?4IaG;mh8)Uw!tMm@SfCPc zMjt&CVV~W?jISc~k31I3V3#bPwm4}&G_V_vB<=w|1-%k&4IPDZn1&2F44*a? z1kyyAZ0Ci}=Nm$AXp~77G*Q>~c&2{_ZJHU0Y7Ni{?j#yFg zFdKR;y6)ljLlg3~rD`Xx_&>SlRTtcuo?UTP>jYS87?s(4lqb{&+jymK6g8dQ1Q#`} zTr|FdNlj-QO=Z~9K46k$U?osI-AX7=o2Jw6V;Fl)xAgmfLG;M> zPzn~&#b22TuwC~SXx+fL#E7KXGu)QkG+gjw@S}U+E)aLJDr2;;N44IrT7n!&9`3Dk zGQ>oexq;UdbwdL~0F^b9G;=t%jL&1n1v=Umx0YD58<;eHC;5*n7xA$GZ&XIxwfixu z729)WUKaLar8^X%&$HLp@S4y3(`GKnM(00{8q;zNAt*S87UZwOHTbz8F$$nvB8--m zZ8^ZP%Q+AcN1jY*#H~4Y^vLRX8iDa^3|(HviY)dB`TZ5}k!7IjS)Fg7zTSjb)YXGy z0~9fkwtZawdpFY{g}$8~GkS!L?MAcLtqW7r*E8ahIDhADg}ghjRLFLlo`;uJ6V6_F z`QrwALXWw3WMn^5Zp<$E)^;gJuZ7HQVI$>oq9mR1=8(q7@uKsW$W`c2$_l%yK0-*! z0~d*!4ho&xPS!yWvna`=DBzD-($O>tIpx5c{W?(abOPN-#rt_2u0d5?u%)_%##AuKX;V8BKnwi*9T9RJ0b4vTt@`_E>^#06n; z0O(ZZC+vARk>)1a*%OK8{##x<&3}td3R7OlFgB_TnCQQm=W5z_dQ{Q;vntt-TslV-d)7 zA$r7Wzk3b7YQKDI*;yT+gx1o-*Z&TLG#~IH3NeX(CMBj)nUx)AaVKU*I86afu zvdIeRJ8l2*73XQ*<(l@r?XV$^xLti-502DguK_ql4jo~eX=eX|tppm2!6Ij1R0bpb z!EQEkHSV?H;Z?rb*?+o(mlFm%YR;oZ0VRd?$`d9F zbx@DGQ_u4mFS@{}1mrfkE%aV^?hA(Fz}_hiJWogWmIuO;u0?zd;3$pOEj@6K!>rXi zh3^l-{ZBlvB&U#$l{sVKsm7 zW*l~jP<)(o9oWwNZf}|S7GP2Z&?9(2UpXZDcNP)bS%bgm)ELwafDXcXIytV>Y^ zDp6WA%jVFY>=lxWRzyJdq|T|%WLDD6-$WmN-_92-*OFx_;R$y0`gN)mN8j_xd}`k# zKTyRxbk=6aZJsNn16mK;iej@(ORz%R$DGbQ((8QFe`F^8C2MR81c(U)i_@(F_u6!Z zG=%TeqkMt!eirh*Mfk*hX@D@lAE;>A*C%v}PW%D+3?d+@1mZo`GMk8o z4nlP(tx_h?3!1M=EmjI>O-W!$0SyjtB46dRT#15HcJJ`UtOhL@P;C0629!Zr@LL?P z20X8jg(=V?w2-j0D7OfqK&lr9)BJ}N@Meu+W=q88QNRm!ezc+FlJ7ssBQT@~C#`Ne zS(G+FMi*?`AyQ8#^F-p~8~^I$VYETlGZuN*W03uQ-F?053pK?ejEi)lt@<~mVFO(l zQ?V>l_=QzSBnon(uWT!reyXPPzME20cXIu zh)`Os75Jr$8|X-31%$iDhYVHLm|ALc!oI7)MLFn1Yfotpg?+|6>WN6!? z%Qt3(L=}F5;n59n0--FZFY`_!H1f;?J1Zp9qKhM6yjP4G_CT*1MX@&ia&k zaLk_C6R;?g(K?oL_w*m^x;F_5kPYKDfY04HFlBx~kdfH6{iLmdD{jQ20p1Np>KuEl zb<5P&Yn;fj8syUp=YSZ>>1=06z~8KZow+SFl@IlMcAjGH_p${^q(#(sJG>dIC?A&O zrH&*vf2bOx`~e$ZMTEY8r;ZYebb2jyr(d@EM8-IJrr<)(ux!EucKV2S+>s?=It#og z&imQTudv~M^_o=7)9q1+lP4of#VKkF4v_!PVoA zuu|t{1)*s%+=v%5cV?t$z&o@?6+vOepk^rxtd(93)6Q#K38pmdczTNxSdhz2x57X7 z$cEGO%~#E-%ooqK*9BMlItWYT9}-L-JS26Y{#ik2{W}jBTS1H(1Xx^Ggu|6v z$h&Q_Myeip4=C02APan+cyLe(?^imqYVmNY!UKQaj~EQ@Fgf0FR;X9Ax&Tgs5Gb+` zi{0A*XDa;A-gH5yA0>4y&Z_WHoMh}LxB@3ndaVMS!LeFl67hd_1@l%^?JwJZ2G@u? zVuSVhtha1Sg0yKR$d&P=D#%3(j|^HCxg*teSIsxIyJoL=Juxag7deE0!qBT0%_kXw zueWvU+CkS=ZO@ri6{!z-0|Z-fV2&m%NnujrF|Ml(4%Hj!i&onEJIjKgQ@Lci!BJo zXo3z2%USu=qg4MzpbpB!vP}>{q2sswco0)o1VSpN3-`eOA-9yy;FkXT_#nqKQ{_Z0 zR8WGndMKLqv$ssQ2Iohe2t=Kur;9lZjX9z>ZId{AbHci7x8MW5vldyuNG~qGw|?segWAmzEBxcE6B|=Xp2JdE- zra@l(r;h||N@OLpEh($+p^OPKO*M!)s7&mQ4?Pe)+ zdbmJ{!n_;|S{m?U(pcoM`F} zSlCt)F@{bh;BWd@aCaZelr{VkR2Vf?0@E*4!-E|m&Iu_Li)P6d4*qee;A(O1;9lx-;C>#Cxw{y%O973#cJ^{`8 z$$4WZOP~#f?8PrZy=?4^zy-`?V#Fqo|KKvmMalsd=|$}2m*A#|5aMczH=$gh3RQ)w z<)W9_(h0-(VSM2@F_WM&-8J+lZEWYaH!>!zZv^XW}%Zv172}I%{A4j@Z*cw zp6!>O7D7=hKJ~5TJ*rdXlAZPH%ns@;a`Uam%wPaE5Qpl1GQ5^iNk3oc#0=a+xzS4F z@WG=Y{gJ|LWHHypSE2){#AUm1|Ea;MqZ5x&ZfuK3W+LOeRFCr)!x&^6hBPy6z>hx})R(y21@yQ3$7x%6&>%CEM5*K35$#A^=#`{ilyY*-)#>>UH&@AuibM8}+r((rHrqAQ5^!*F* zU_Z4o$T_0%HWdE^hRI-X(^sg4uN(cbMq1_7=v@j*UGVaA=+@)oV9h!hC98*e0uAsD z&$T(PO;w53t=gq_RIai_DB#Yalc!|^(pZG2n-WKX)T_^+fQo3S=$Zr+G;PB6G`)Rd z^#v)8cel1sLV;ZPG@1_`3+~=^O6(oY$8nu>6)w|eHz0N>%~<>tIpS8hl&Tdg_fS3b z4^=9U0|@c0JK-iL@%OY~`$;@^R(6?{qa?#fiLX5kk~+r#@9?;bqtJ8%P`E7-i8ccFOgyj8dlr)CLx=0+kvB$5m1(!RLaZk{5C3D zpZE92Ur4#rAHQeZoADPtg>0V5+;)s54Dw2|&QtIR-+*7{A=ynfB+=h8r@rg9nWf}z z&u}a5*w4HGew+;MT)|_82HMfdHKE z3#S2%uB(Srp8u7Zqy7x`gUv^H*v303qUb!D+pE{+oHPZeJ||7GDa`wX;@7Kh$F031 z_kq?h@tVd5U9R52z#bS4f-Ar%=Yj^0u+`}@OIDH7PXKAbDs#$Mg_k%G6Nh~0yo|HI zu&M*z4`8%_L%lU`)yZcTYO3GT9P3VShADcCPy!Ej3_okxLbD&dNg(1?vCIv3CEQf} z2jr$c^66#**5rNE3t(dkNHAsn4rt76PGy4#pU{r0pe`vv#^)n?LCBDeUf5%t>q}Sx z6oD0r{VsioXH;`Xn%qI&%^3z`Qb|J3L&LU|Vw}&MsuBI|^TfauF{*Qlftgrbum`oW z;-h?09H;6;%9qZ7OGRQK(Tk(H%)LLgopVLY8*lXo(HjW9mGH4^TxQLOMB#(3Y-K*+ z&VUc=!hTBT)6kW%5lpWfc?j659r3k$!(wFw|H`b^(lK%X_;q-Zhyvj}$xpUzY}=#o zYiImZp*8ON(*OP~fZ1J??;|DDaVcj0g;UUVC=a5e=)eSlh5lp!0`M^i4?PD`+xX~2 zzHkf{{biQu<@mH~8g5#u+-14chK)$$YB_ zPEm2Sci~uZ2~0uE-&3b%W%Z8J!^tRUkmyVK6d>-jPL$q81hnGM7PYS2@Um~9l9tFm zER;0#-2r14qgz@{3=uO#5D2WodFO2bFh4_pIabszW9oOY2}i_EM;n3Hb%OIN_H0mpIujKStx_NS<1;Zr>lH7eJK3BqEu#iP`Bdd(qo ztQca=JTOhqVMan=_7LPpHwQaHjQ!?XQT_N#h6)@6Zq4STd|M#~QDx(R6QF*g8y5mZ zi_UY>Uc741i{)^xJ4^Uy2H>~#L&}NkPvFXvX!1!I9TAv~a)KdV9|b50Mpu4k!w4fg z2?`tQD&OQgb`XX()SzUM+$A`E)3%LH>rggKv!jX|X@|BWl_jYz~3-4gk&c#LguhkuaSqY$nhGLW%a_0YoXfWqHF-(eUBm z(9_M2#KrXsevOA`8p-Y@R9)`d{c>da)+agP_9EfzhW$M+2`{pJ#t27yFrx%ar_Vs^ z?VTh2+EPZz%#5d+gazD)@J~r{0?pi^JxRtAH?3DgEQ|PM3xD?-Bk#RQz~GTr<+Vhmpo#K9?H=fMx~I^IwU%saQJ;+`O{W0R zPy=@Zcrs~6a$u+H`3&fiobmIH{6{57?F%yY;okN5kVc;zuLac5&yi3Wpkt`t%kLZ^ ziKCXn3m5^ z=Iye>`MMa(W^|j2_ymY!)Eu}|7;db+(>fhV(?Qh=0O9}Q>P_Hc+W-G?d-g%Dq-E?O zBwgC)Aa2)I2njWpFbGM~J_jL*CW=Hg_ADuB(>iFG_CYl5Q%yB$s%d7L<;Q6-*|~8|Lhk~4SA!RNWp@?$NQb%`U?d1YK8d6)#6NuOCGPv z>1NGlYFZLw5`Rt?ARW(&WzcUmM$85L_`bC|x<)J6-t{S3u6fN%PUxCQN4; zC_Jmh-2bAryWBn-- z3;fnu{Z?8%$Lk~$pm)Nam0UC+ewQ5`9;RurYvD0Q-&&1%}WR7Fv1qH`eCb~EC zqDXv^eiq55b%ie8G?2XepA@xtdVp%~*yDw7FO0drrZ?bty&h(&x;*OzS4sU0_v}rbUolCf=XUtt!(jBjyPP; zx9tX0d(a->?s1YENXQ~ZFQzZTygN8{n1x;*yuN;@;8{3XOkHhEY>m33b!0b@Zb$?ViosF=*ZWg5xSI%J_XfU*PWwD`L(;y+!QDbV(^o|q$kS=-)1B)7`! zI~8iOes{|Lrxx!1-7+Uq`*`SpUC94>WuE*{;C3MmDvCsmAw8AGg@ry~p`X1stW3pB z@KaJVE^p6JD&;W+5O@8r)9a%Rb-Yz`RYv~Zkm!`qrc9uCV``V4Pdren%H=Ao5U+QO zy9<>Dz}ST{5mjC+E};@hjI4QW9c)8IUruLez5eJ+ah{xOqHdjaA&h71Y8VwdS6)Of zc{y>yb7+-Vx@y>TV@}zZ@Q>AN^aVD$zT9W$IS}ax?US5cemW|Llhq2g;)%sJFn%q; zxtHSp(7e{KK;%2w*IP_m&QI{&&8tQwhtSkbwhT3^lxJRReGRE%QtJJuiW1`ee|px6 zS}J&J+&LN~oaJTJmUT?+tF$e%P71rgjYM89&;76n9EN5M>*iu0*XS)UA5A;E4Hk}V z$-|_a`I<1pXQ=befKK0+4uxiY-x`yk*1%2x=I^YWEc+#3bS2{C3&Etf_hBusWxWf} ze;R&EGYT1gek}M`sjjGf>r4J%(l%W*Ip>WQ+02EqQQ|Mca{oMt{Qi<6^p4Vu3mv;Z zOHVb!ciZp!p2+bDe{QoO@v(6QXi?2fnOoVcOLt)vTvqH*K=OwuxJ7#=|2rEF)dhTR(a?BUC8G>v4#C3c_8ZdQ$BVN{k-q` zYPIi%+Zwl3N6@K;1rBX`qHm`JgU__~E%&WQH^z7DpXUf2mkiYyw@XV{j_Sx1XH0SC zAcr(AfhmR^)5Os4ZtSd{+4Tjkpr{1YH^q?D`B8`LA;_P7KGkpfbvuwViO)5L$89oQAA|+rzcx z>8?bPOVE0cPR@RbKgto)wqp<&&8%=BJUkSiJ_rrjZJnH;%;3gu+pRrR?vQ2$?iLf6 zam7-ki?R)C7@pk%eTbK6B$hsU{C^SDVNo*X(KLyFg4zt=gxlYLY~!b$|6cJTwDU)HZl0;UjqX`l!)E(>3qtM{2v- z1@t3V#vjUbA1RyBP#a?0bi!e1iIM+q4!sF-WYOdwCcc5;3BvuE8sf{KO>DIKiPJ;h z7SbZSM1>(*w8rzXqEloubR^V_4f}>+yYGntt2S%B=Yq5NRsqd!_@1=tp-j}lX^IXG zo{Dlf`^4{@mJ(v#zH8uKq@WAI`0`Wny~GNmSCl8ad5=8jLJQ;z^xov>sKR{<7!1Bm zw4QrRS}O}zErx20O_bR1eol5yBlXX+vSOQ~P$Ljt6qmOEc=95lg2n|JL5ot9WMTSI zt!x`|0X*1G40!jTX6|l;H@4@|W6knkXTD+e#VIQwnzhSp7J7#H8uoFz`WJ`E)o#Bv z+h^RhuGkX=(3Nw#tmN`u&2rCZ=uc*JriGf_K(e>5`28f=vHQi`Jl)^a^#OP>wW_0) zNRZY+3t#A<%~NHtur|$}=<>*LoRDv+Ar~zwvGQCjDA+`}6|-1BINt#sN(S0KlRYXQ z(c*D?o#(X2-OgE4pPZ8+9&N1Lshk8%sc5zohg1a>Czj%;C1O=#W9TDf&nR^Z$w zyEmt4>>O3G1O1KKpEvO{eqHWUhIJgL*^$rIdQRR@HOFqeP04*KISKpv%7QI5A&eJJ}CwqM{LlxV3!9%oLJmY|Z5-|H*(q^JxxQMt3#b!(5g}E#2 z5sh~@y3LwPbC+*eN)`?sa>uOe6~S0WQCIGY6Evf8zqe3vAHxbY%R|Y1+lSR&Dl<*k zU+&M^vYxHc8?HltQx$3T z9nEjaUnSU|w+iy@ra+f77mkR0xO!_P`@y9*tCsaE)A8ck92j8n?NHJt@EFRMOa`x= z+ew@jIuHK+|0;a1t!Q5gt{lbFrOwLDJ;qA)?(1ufuT!q?V&2$=L{j?FFkZ=7LSyP@ z4CXR(2QOWS$O~!vj1F=z4u;%3IuNJKAYmC(yYlJ-lNoo`1ojZfT^7C=4Oj=e@yrUI z`QR{4J3g|k_`aO{EAcQ zLRgZgM(0AudP|PE3wElgMeBAB4O(Cp*EFrgO!JiW6?2j}_T{{+eslm&D78)z*+Aqi z70L(q?G)@>>n=1VZr(-;++$P=vAQyqLPATpb}=_aNC~95W70wFmGfc4kY0usb5^Hb z9?MXiYy-byMuHDU=~NP@>_;yAU8|Bb-m}Vo*L@JY6ujqGN}Nqk z&du@o)je1~{YeKdgirH?XHWi9o6GdSGL+j~m;Dk-{wp=tb`hnHOJL72-Fm2($6Ar* zM$N|fPZ1LULCOC?SH z1ah>3I@`-D$HsK>P9ONbpl?Ry?`k;IQERJIx!>!nad5u}MqUY%u(FrWC2O@1sy*Eh zy8Hvx3bM2eK|}godgg^Y?|;X^sH3!b4F9x!+Euu@rB$Rw2pq7uP`wY3GpJGcWhh#p{iFN->ASt}_$y~%dLn+88MRAyHR12AvKcO1LmZka z{OI2_I$)jT(IDlFm}WRU2j%{QcPY&A4z>*p9OB7lFL-g&$MAW8%{70YoCM#NGy%<6 z6N89`p5Dq((RXufMAM!Nt*?nCM{nhd__FE16j2qq&4~7vk6@QshcU=Cj6ZqSPx&vm z-n{)XIATfQG^=_(tKcI#_VC20ke1Ybd>FDlk_6H6K5wcs+fdP+2*qj+beghz7{yGdj;W}7WEK+ zmCvnU$^w3d*|G0}-SewmmF{(csUs0#?9e}xyYGS)6VHHs{z=s5pYQ{MI2Qc3LD?EY zC(@ThE@tLVQzr<5dU1K8E}4EdN|`1a5v8D`=958JnmT8Y1p9S|z#phQ(0|FVvfoFRd=65+j%Z( z@7HOB#kpO?3HBdlv;WU%v`g!{l&@<(yPNz9?v=kRR`g6GaW zo5gWYo>4a>w;7<-K9IuvhME#ANt`7-J1LH~(tR;^{EZbW(JiW_-QI~(DI25+9t^L) zm!qtMk1mBc&;#eg?y7m1i+|fq@H5WL^AU6&unS#SGlXBAH-nG_!R&zTL~Hn0kp?g3#^Y%Mrs%N1PT`rqg`ubb0ih*#Y`XN{ z=5s0-dBIssF_djY^X&u&lo?cR@)7Uql*t&bRF# z(Vr!OznFOn6~`w&m?C80`{f(-=?D;J`H-;O0x0xG>F$uMLks?SY<7eE?za;Th& z*_MgrQlcjM@=(nw<)Nqj&7|V+p;q4pf$ej0|FW4A$H8VkYUkY3o>Q)rbS)P}i-e~| zHU4F}MP8}go%2FGvnmX#ohS-NO(m0pIn%#~(k7F-+UlF< zc;EnWs0)(sU#yd<>n?CKx~}O{z#>}v?OzE$&VEw@o}tXccYYgCSQVk#hz#h5zAy?g zXs#%XPT_mOrX=JBdPpF7%Y$M-z3vXouYY&}|^zz4(KP7LUTnRTs{Z1K@U>WYt~{f}$tAyBIxv$-hxK zP^Kjtsd}vRY>tN5-zG8JCB8lBKjQwM1#nR)r59{YfLc9#3GBN(9QL3b?KRK z$TVce;Y?FhkUowfpc#%Ks{@j!YHQ1Vm`hVF=+nGi(``cHF*;1lnHHOKl&o-2rAmR; z!KCiq*<0jeFMNS#UcV&5PheS4#Ee8ukum%Ojb`fIb4Mo8CK`x_eOFS9{n#!xg8fLI z)4V4~CYN;Uk(*|YQ?8E+hLViIVn1k{S1&fJXX2r>{w_{X(p~cci?X$45Ng+080Sf7 z=)vXJ)0Y*)p%J)~B~hFjyhN|>hIj&_!&#Y6YjWGVoXHnalK9TR&Qv7D*}@Ds7W4)C z2TL>Rj6pMxTK&ccO9bTJQeac#p^N-9OtEa+R7*v z6|X%--GF>n@A@x(?|=L9A#7VWHJdYjzUtO*KCQ`T&%d5gR=o30i&zNjD+{~GV$ID- z@BGWxZfwp(v%l7ceh}cbhn5F@w>HDz`bmo_nJpiePF5Afd>4d12i8Ok*S!Cr3lP*} z`lD;4&cye597k)opxg0N@kSHeNMT5%C4yO~ygzT)AxCL3_1tnlcJo?}GqBub+;gC5 zcuWg}W38N<#I{+)r{(K?^qXC5lj-966H9Y$aN0~Jd0ESIp4M8`zZbovyny$<0 zwr<$Y)~e)nCL}Z57iT;cQ1qd!cn*{&EPV`h@tW!|D+CW@l``ppJ3O!qW6$Hs@S#97 zf+Z}vKxgkPDj_G4tC(5diQssV8mjYz;+9}S(F6A4d{D%L?JXEYVOz@>tLZhtnQy=+ zO+XF!CzZd1^@p1I%SKWMdeJ`vRERoG!vT$${;8+*)~%Sy`EaN=1@}11S1RLscrT@P zap*Q;Ed^#=xI#@{X>bo331+>(SjYQt-me2*b4?wrxy<-^S`Gk;2h`mtI_58JNL94x zQnXJ035@Ay_HhHaJOi#Hq-oGZu05JmBU?Y#v5-KF2NA=Ph}FMD=V1qKgR2zn?xAJK zKbkEenqc)t6I;q*2R!og`ff7Cn;2<;+ry!`<%r;|I63=glA5hb(-0Mf@7mrfJRyle;Y)MoHmn-mv76bfnViGRHcgC!gGZoKj(4pd5MPq40~Nfv>>P^?0x4 zQfoo3yo<9>(H?X&?4ZboL1BkXhDljnHF+t5CU0xR*F8@42YU8HQW!)aEcUiU_3@3F zwh-?x5ZEv)d7^H84;x^QyED?il%RtTDGDM9nk1wWGC^)bx))*8pcFOOZ5GD%k~=r1 zZ)83PUxs=?Kkv@yK?g0JDTDfb4x38mgGid3)|&`Tv3g_v)my>&X!P(Ld06kJdnB-= zU{q7O8AzA){9p`C4MYo^GaX>Oe zL?@v==4}=q+GL47gP{@{`I{GRA7huG*mG~x(4I4c@0U^@J({@MVdl6koTnq|(xze4 z-NSd~r3wrwYd_bLTbs)gtdr>M+{K<6vqmeKe4ImIjE{IHbrMvX8Pbk z&YE6-vZHJQs+!BLl}3tNL^6E1g6G#`+z$VaP352@G@z{*SmW`*ku2e^qVsfi;jpGd zyqD;Y2-Ids{^N5OX`-+dByEMw9@qk_uR2!wh*(V{{WUZpDUJeihy`#w60V%R)lH?2gMkjtM@Bs$&TFxaSEfT|U!Q0G z0o6B#e~PyLW(WpQ^t1cUIOu9zZm;#ul_p+%VGk_=HV%akAaM0NtXcfHP>cJ1ak>Yn ziqZBv3I9WfT8_HG?Y30&FNmzAx ztu%k}b9s1PFq8#E`5US)HwZ1)8}=WVdvWZMat0@S#@VJ`!N?HgI{CBpJ$5wPZ#LhG zdn5tx*EQv?8=75gyRp?eHf0Uh)6mPR=Vg*_w=?3$^-nlm)ST8Xo%)qi9H0!DKuGKw z?31Ptna)I1#u2-&`1sN0;pUmX?f+%^yofHYJ)s+Qz`T9C*xr zX|_}lYVA>l8qe-R&lo&}vu)Dg#8{Aib{a{x8D=YmPNcwM3?rAXhj=qPGZ~{g%NFe& zyA76G4D;?y!4JWuXUiKOLjxv!0{b5(Ff*G0-8>GkZ{z;{>*p|h&=hPX`?kg5&S%Q+ zO@Y35Sjdl)u$WCT+9<~(kF>0kHJq?el=M|{QLs=HDQYp&L<$JvPP$nmSw&T;oqM)? zPX?$~P%u|M(LCIS$IX5kR393Lti2euR<+**#^0~*3g)}dfXFcxcHu`@`5bLW9I_X zAvyLqfHs*i%7&Yfxc2J9JaUrX;tKEV8WP&=P4<#fXF_DyQa-kVc|p)RN7QzoPiXg9 zA4xQeZzv3D)8~7nLi$zgN=RFMTyZxw3>p$xdyo~*tx^~Nngjd+&jhvjps0emh8F{5 z>U`9kmGnzVi(enUe)XFx4UCmdCRwMkkp%=lk) zSN$&wD?ht%IO>r_BzmuQIpHt|CMJS7!)VJ)X_g#xTL|Q0qgj*7@JeAQ7C2)Jmi^$^>%b%ycb8?CItCn$Ym`42VB@ zXG4>Xv`NpyYQ~~T|29~#7yo_a;JuxkZi`tcVJ}WL=LL5#SkhSl7!zf#u~CjELlhp+ zyvg3C7VaN57X^WXG2i_3tMWq&914VdDFsv4-WMqAEHPVj7ubgM z1V(X91U^#-IO1fE{jTsd&%hi}Wq48AwN)il+j*;^$vftW7mO?*hu#aBY_@vfrt3er zRcyBTHGlS3CwHR2qGuL(iuK1J(vN$IVL*H-vx$LDQq1&Oby%0kGE7HU9%EkL?Ob7# zS;h3{X4f`F+m&1mOc~keABpe-W-quV#fLAAJ*~y341f3*`NG7(vPz!sjt!X>9&NA) zUPPpHnpqc|8_o&N{wWDr~h+6`UR zRkpYwNg3P{c&u#Q&9HDhkY*@~b%E-Ij9VADPX=K335Ynq2FpK%wX~H3c0)ykCLMQo zXuHRbbtFyf zGLfGm-T5=D#}29QYvda}9bK%GQDB*r?~Vb8f$aSoirq399Ez%4{l zA9XN%;a{y_g;_82ba8adut<(XPl*UFQU8Edj#d!;)>&(n)Cb+@@%3_}3J`ST>e`vl zBuF+BuJIx#f_pFWR;9f4)&MM?c>SVUM1Y<;{Wwb7P~U$a4bxgKJ-h>QH8)`>7IYWo z96YsKg8WGAtNWFa3zt^tNEWlRXZ4k92g%Y&O*NsnjmsbU!Ezg3cA;-brN~`tc|GA2fJ<{umV)}%c~rw;DawQ7R7*HJBPq# zNvO1-b~J(Pff_1{$%jLm8U)yic(j8h&%wfArGl2Dmxii}6@Wb&M1TXBZ@o~FJdhSH z0>e17mVCu2-nw2VoQwJDMVVfBPrnMp6F%ajafV3eUZh-s#sa>2m5z-7v4%C_od_x6 z-c2Q{5v4sHRWcPFT|-OIhls!aALkz;yu;fClYfR&xf%$Jq&W~y<9jd?W`Dkhj8cYZ zfL%mpflo8tGnHm|bQ)wBcMg8%!gGK)`F1ECTI}6Z=#os7A=&uMD6MvkO4@ZEKkh z&cN6?6a~H7_Fj)5*JNqR(6CFe0Q|&OoZ?V-)8bW`@u~h06c;ly~77QFp7I{4! z3LNY^K_f?DJqVuSPHO*z&RC|bhF+8aW`VchAbOW95sc0tE^(F$n$jwmBHwa6th%5C zZKT$JzBj*FhdT6WR;wMt`#IZhc)$tpn z=~jkBN0B2<@_|AAG;WBIjpGEXBw;J387^P{M?P$L)xH2rO*+a_R{Ca-IvZ6=mXP z0*EH$2Q3d8WRg3Za`0oC>f0K;LG3})tQ5mL7lNt15ZUn zA}WEhUI(zg@C4(m>ZZqbSQskE_CfS26D3m2j1Yh{!UQLQ>wa?sC=z6Gf&zGA7N7yi zmR!QVO7;?@ynum0JRekbv{_Q8F&x^yz1T3)?Mypj}Y{j>$aRBvfV+ zby8+I(G7F2ygYXUz)OhPB1Js2miP9GBB zoFTLX#dy`1rai0y_t6j`Vyt9p*eV(>y@Y>Nk0TfYRt*^|9&GDDTTqS2;aarJPu<1p z>VJjL%V#esyUa0>qC?K&hbRDD;TL0ppLR+W;yl5$9AXkcFRyh%ZY^ zHijWY@o0LE(pl}>M;+#wQ!zeX?J~+)9o&ZE$@5TQP$KRO#P@w_SV=Adt9v5$7m1!_+~9 z1;->=Ng`CNBr0h3RxZL~gop@?62xBO)RHkIWLzyQlldZYl!%41Zz0O0)jqN9GT|n| zgn$c3d)l_`MCG^{BVe8vJ(^{Lflp))SJ-dcGjkJtflkrS_YTPw`~nasZDz0Na&jVa z26@1_wfV|Pb*jKUSOlE5P)asTH~-6ETi?3#^Y_g)xh7#SrEVssod<>hl#&5=9U< zPb9QKqWE?kAwQQ%D-?!C7!jPssLG?zk|>H(ub0LMvIw@699*XMP68fX48*HOkoLqI zCs!bN5d9oc5Eoj?$>_nbhaM~|cpZ{ZWf7Y*xjVO55GO^uXvT6ZMk=i3NNM$`QsdS| zx{tCzKsETBrrJ5_Jx@l{NFRJ6_*vQNG>jvSJ6D*7t{XZ;x5{|+;{e9zDK58;wnmHY z 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%0DNy%M5X@7Lbw{X62}d#^SR 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

Vnve_}jzhz>mxWL`kx4%A3AOP@wg&u}bR6 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

6!y;W=O^j8nTd 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

kF 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

D}_zzwcXl#P~CD$zw~zV58PWta-xvm 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�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%0A6JF@y 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%0D6$H*?|12STY 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%0AWNpqHUvFTE|l&3VH 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 pAD=UTjslAGZN5bO6{{6tkwhzC7xL4r)0I>Lo6Z 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 J+3wR<{|A%J(-8mw literal 526613 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�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 z Z?yxB(85s3Aw;Sot6^jl^7+WvgKc0=#$J$X8c4VVG_huX$d-s8Sp@k@2dNf7 zVkkZP%g~w#AcRmVckAU)T3~8}Fuf;NN2`j0ulj4ENGd!iBsmG&+jJiDhs@n=a;O2x znV&!!HMa{{;az`^nGndV^!)t%Uiq^Ns`2?1LzTvRJrqR-(Q@0UA+iDf{>oJZ)cNb? z8>GBiu3gLU3U7lGmM~x9) zr((HPBAyQB*x3ifF2P<9;jT$Ky|b>`jmh}uXBnhJF{g!+g zDwRwWPLesh+DagTVY5U^Snx`T*tbQ-yL=zC!Y(idC%dS26;xzeVygC`W`vucM~_Pc zMvx6;u%qD(h5PTC3rYi9+J%cfg3()=W80n=e}teq6~3boR#9mPL|oi|+i zPeJsEBJIbcZ!Vt%m_-O`=QOyPig<^Dfcb`Salt?jg#sz{*|BQ(cd&n6dQ2QdA*~|t z7Eo=3Bn?AJQ$U!vh-1trJL;LI-UV2BvWR#Vk)lPt{bgqdqkEs zPg(2H|BLGbZZ67m%Sh@477j!y4OHuemw`(BN-&OACTj#*Cq$U^2!wUPazFm-W7Q@2 z@6c4d{^9p~vlSpXc#|PdgWTn8$f4VYl)3n7O>ZOq`2}7pu%Da@H5teOB3!d9qjkNX z{Ay1k^ZVW`)wg2^1s!hP{xyP6ofqVnA3e}~P*|kNGOFMF&KhhD8U~YR8UL(~o_`)V z>?!G4UpyC{ZoJbvL%Ew7EtiQ<8!{8E%VLZon+Vv#_sI;$u4?9|jS?if{7Ai)iP5dpqLBp_oinTOaKLq9U`sHqnSVolrhkf$$NISx7)&4 zlniBGaT@?+mJBPyb6xEVTre)SzzH(}HE#l$Ocw1r{C8|ZzLDIQS1*Km zo*iy&O5hcT&dK@mS!VAnCs+EI7EF2dRimYY<$^Jz!J(o43WH2nB-*K#v=5vjI;}?w z{w4d=yZb}-S)Z=}e1Tw%nZ0f@eKGGFDhkVW-aos`jF2W?pKMe{O~px-z5?m@)cRbw zINYfSTT$`8W-?r0xlmi7BEZt&CjhIouU-4yNx-7L+<(b*?K=P=h&tfK*C`189Wckm zek2K^pcM>mp4-*x*bl%Ki(trt2xvRtg&roAS=H@_nm=sG6C~-t3_J@(vk~+rUzC4> zEAv)u=hpxJ(!?<=D&{hQASQY(o8s8l# zf&>0T+dT~(qsog~NZT;j0J(NZ1tx-3-DN|6ic1%JtkQ$5=A3DQUvF|u1C_2(YiSJN z60#)a>TF%lj;HQbbP~G^_R?*#LXDdFo;rukUh}x21+5(?WIyiLuh)Q!tLih^%8S)z zGtvIB%QL;o?RV!%=i(S;{xW+uQPdIEb98l!p!25b=IGJ6{-tqoQ~ zN%YvgEmwqn3u{Xx5|R8AEU6;_{6MtLwctgToRM+8lmf#!AJ+JS4h+U@BNBI11WaCK zWny9?gZr2F*D3A8;^G7--Sv!(e?mtc`^!X-E$|&W<@R-{mE#M`BSqDJw9a$N?PCO-Di(N#@aax8zZ!+sI<#xvEcc{J-339Y{Rl5|kRAd4 za~I0ciGUGk`cXTxe{ z9=~MG^KECtXp`b%@rpnr+z3QtVaNB)Dn~8ssLfNhXM0uJr?*smB-Uk_LR6v6r$S$+ zNkZq4&+;Lh*5J~a*N{p-*3FA4Lkn}G?>%`;W~*SAe2fj(9=i$zeWMpOqaX@$cB<@a z+L&||4-JJSLN50kt3UEY?stfn1Ef@l^cWRECI_(|Jb|n11@!7Tw73w+GT-8bI4UEH z`Zu__KEXtx);4xcRuoW&h!+;kcw{Vp)HbA#NJj;J+;4SK00jkd1cPAEtAK6r7iNGW znkwlAIO(KO-_FeBm$s-pJhcV6$k(x9C|?-VJ>j?`o*43=vUm~k6yTz?TQoNyDTffj zi-^3CF}80Wo@9Yd$gV*ahAbNX^eWHuBUe(|IwEO?v3|^|L_w)6d=J^X%^L{ z0P2kE?LD>1&?65BLarKc^M=?M0ybwQH?E5B70rf7&^`z+srDCXasIVwPw>S^B5>UYLO(Fzn`R91ShQg>1Ply6@JyE#FiSDk5V9JY~r59v)srBg0 zU9`z_VBi;CcEnUY4zVhG)ekJr{UIAvhVt#{OWhLH7r+Fgitf&ZgaZZ`QI&gz#s#+! zuZbxir~o08b^!7{_>s_QY=2Sg3776Ot{L}X0f8Btu;-ntKMo3K)-EX4s1Sk+BKg27* zZv^*XI{*@D!5@u-i)*^37bNXpI}dr%?p{5FlM>`paEu9-h9(o}s;<3Shd^-;0P~D9 zd_Z0U>v4CSZ~Cvl-hw9}1VfMyAzF?xxfl@hMuLoB3d*^29v&Vzc@`G{oj!u1>M__Z zBBJ0=<$LMj@N0jR9C7=M?c^bjT=LFPzj+E~`nU#v*__Yr0y(JhOa*0gUdY$9A3n`E z3^GSWz}zEX1@ubZvCHT~3w!>Wt$6bF!(M4XvpOJ4Vnrd~0RQoDWd5>z$o zAx&i1dGcWQhN!-fe+9@PQj>p~Y&ry`gQ9cuzBy=wU6Y9RDv&EG$feO!`KmW6V!Kq=X zL|QE*lY=YB0&Hq4$5%mbcApuLiu{?Ao|EJ6FI5AwaGZ5IL8exPtI88UxwX6^)Tngid+ph9hmcLtiK!2WJBxozn&3~J=tmgtEz z69F4{f#BS4QJ0CcKHO#|?)mZwC?cmY5Znzog+#H%x!y5k=s-*RFmmJFx$xYgSP=r( zB__*;02zbFYBwg6fN5%Fm8q=j0w441+#^o{^m26d_4RM8{ve2_UIKz!3n=K~)DodR z4~oo)`@Mn7M8CX#3Ay!BsbC6O8wfj@QRbD7On@O+k2V+= z=jP^mK~V`d7~tgtz)JQ|(4$lCtw0iR54enUg5uekuY=@VT_heWB8PF3sUXsfXGF#*JT9K`jZL$c)6nqrN2)2i-- zhAGM|;oSY-z?1+sBTZTtT%cPUt4T=44pkbmI}sq}!Xt}6b|d^Z_r*JiRQ!IMJDY2t z0_NXVeFNt>TacPPZ|Z?V_zY@Udw4CRuqg-6s$#$;UIxa-bVtC604FmF6$*s16tr0c zbntEn;-NblGRndMIv{BDXjlb|I3dEpFvvXKYtT7oA+9D!odGM!BW)f5PTsJ!QH6;N4lEHzAp?>S-M2F#*DOkJRI6IN9{1o#y-3dvT$OhCW?LCYV=@gM)q z|8i76T^m{jiqJ)3L}Q3&Zmf1%xPyu0$8tMe@acd{Clwlgh=5&P9zA;&N{C?a$T*oE zJXRQ_B|h5I%M_wf&7zg~Rw-mJc%{G{NVr89?+4**Gls@xi2oADbaZz!P?80YQn12M z{%^jV)$($2HWBvUKalv^bf1EVjXy`Sgm!gKvLdC3ZxJgg?&Z>BrA_GZ@3DmIU-x3R zh5*1TbGrb!q<;S|NynuFgOEhNpN#$>DI)UZWng4CN}~@xTO7XN5B>~Prza@DPkMK& zB9o<@O|JCbMQ`&Fu$!zkHlFYK{ML#=$DzsE$Yd(1nCqwMXoK3V={_YvwE>`a8l)AtA^vEbRI2Y*||&oYTKJptp@E7mP{{I=a%8eKego-9GJdDEL*#HvNc; zj{4mGFd?qsz4P*>M}T{Q!n~75bF7pq&%pYYZnWPq`TJO%(nvF zQeK`DNx)FHfU{*NdFL+kfms$saL05&wE#?<0E9wtAx)a8u4!z!^Ow^Tw;{jcg?tT3?UU2e z?tm|bEoj5Z&=ipoaAV1ZW#c<>odabHEoCw={=n=b8nJqT-+KlS0*HD@!_W@W2Qr?r zcXwc5AbGkPP(fq?9-eZK1LoDM`85R7fJJSA15^&nnllEjIt<{dq60s7>A61l%*>1} zFgB2$0}-lqQLt{9s)qJbmv!JoG?Mi|uN$%+NG3X=g?Ai!5*P zZ!cNSfR#o%*(pxpz-)-<;y{|99`#HpL=gc?uvKyeno#4IwYLZikRtvILiK`@`tXq> zcCcVSI#ZDDMsx*1J&ZK?QHa|Q(vH0j>=Nj_{#Y-hUk|d?Sg`!)2|(IW&`kn_AO^z5 z6Hrwk$u)EsqacC1?e9)g2S_+HUKmgx>wG1UeqYW~gO#k>_m2+O2=iv>&}g`0c*cU` zfI{Vvq)spFIoAS!*s&?>IJl%E>^0OB^l=d)Yh+>*U=j$+fC`0d47jr{fwNC00OQw( zO9hZ#3w#zN;{zbJ<=f{E_p`FxRnsuP>_H1S2>QUt)04HX&jI5f@S8pYAcx(yRSDp- z$Sn!K?Rr;9Y_ag%ZB4&xd>2bA&youtFaxS ziOY}s_8mO&3hAAnav#lsDhl`JjdcI2-o)pi)njj5&mVieA$SZr!QM+S@05pItb!0009tUHf=K1SDUg|G0llxJ-Kij$>Ti5<2#_Q`;O9Y;EzL=8sgb@AvS=ku<50W>P50kW%I}ixZK|Q$iDx%xsb-3Z)EXs+2?#nTM@p z$b6K@n7K^b5Zk=J>#p;8f1l6$dH#T>Uru$z-miV%*Ra;Q)p4j%YRlh146DIVpzIRYh1{f;-Zk!P@-fI0#^ z?5eYX0!WDo8%7LMoJJuzi7I$@euxASyj3EPG~7so6$I$m6O;lB60i8R9z&-06i1vh z9{vAXTL1Ju1H}Dfol&$kxZ=TWa>QN(Dnr7Qly`z^!YL$PQI|dmg?@)uZ4ts9YcXVQ z>*irF`xN+NNXh2Sn}J1flMZZ8n};;vzR236f|6RG$AmNM;gBJM1z2QOn9c)+`2e$L zHi}-phieV2cs5cL0Hss=2~(cg;fJlM4!u=}P_9Y=>?*%$4qlbq6oSS;;!k{1rI^}D z{7hIM-GaZ7;l{wbcMo9}g*2V0Ro9|o6KyOaee>^MPfvf&b9W|8FsiX03!sww5#(zi zq(j8qL$q70wgB!uXGtEzO%e+PDexUMQxSw{{zEM}79iOXrNxKm4?)C-jR5R~TUe?c zcl@`&2?0|7D-PgV(3W?Aax85!W2betU@|O)$0otE=;RP zqQf_WB}$lgaMe5f4Q#fhC}uEhzIFF*5$>N|_~5DNDH+5U0&Nf>iEA$OA!pn26^Xs< zk~KTG!8YVWz(2%+ndD+J0oT;g0k$;_$eI z2m)44g$`mRwspK|bLn$k+Qs|q2O@Mmm9KXuEE24FC-D4V?zwm}KU#7!T$zA|7wLIx zKB&*1U1x#RMP*-zGQ5z;_t4H8ZcKvX4VkATb(OSr)e?i%ytnS;VG#$BVSEyae&>;4 z0&12703Y5I4hVJut8d5jIvVboOJ984tVtYR6VXKv<qv0dR z=vXtlO|F5l>hTXOid>4C9++bFTl8hlY>M%ugUt5qVZv_}vjJXV8&4*^)a)!>{6^Qa z)YtRd+&;w@&KrZ23-2b0pR!$ZN8{l0EvV^mQC;T7>+OI0HIs4{?zPjN+aRi!gj#wWn?4V zNLiNgG=-!B-`wTTg$_3vAD{=8oFEQoWmQ3hd<#w<(GwQ`k-qPV3(tIB9ppYz#E0zEDjD3TxRHxgc9+`s zW7?{yxf*?I?yp)ki014{`(Icc{JMBq?8lD>iRR17Ck;|9AYa3{DP({G0|KOsCS=1- z69HtgB0N!+E}`!x2rDY}q2+OZKki}ZyV^&`-M^3W6N=Yx&Hz$lfjQCQ-kKLKAW~}r%0sE+oy%xPdiY1;gx^@mky)kmw9X2ght)}1>`03Iy@*p{+I zEaO7`GNk{pbBZO$VDQ`O(zz6UKA8_?pO0L9)IOiV)17wGAj++8+mek64eA{Xw>;AP zOpo{PpwS-hzHoyGNzu42lrz~&m(@@h`HQeR!Xp4yxrt8_=)DTtO(;pAZzRJFHYG%i zM5dM;XoNQ)O-*gADv-h3;j?Y16ct8GHy2%g<7YwhAM+fzB3gDq`2k?FFJelipFX{Z zV`2dDB0{|Dk*hayxN9j$`;dtfH2g(dBfRak9dbOXqLBKF8MZCM$Z`gLrv^_Z>aBq6 zCgu6$zFwysV#KNE$5mTf3#4MvEJVoYGLokzu}H}WG~6_=q;Epzd@&tlHW zyz=f3pyqCY`d^8u3g~EVeRI>ijaWp=npQkxZt`&wL9j<6-V?#};ir8KfX(k}3e#oj z$pLiq3-8fZSyRtuq94L0iw%3hE!~c2L*!?nb(@MOl|sSAr}fICGpe8#wtKplZtjXx6;+zHJ5L4@snit4888^y_d{t z!b1+kL(S)%yXHx>`;e@fNHcUr?I;PQMFO(`p^TtPGPJ6?d-rY{4}}DF(iDhEk?KeR zvk5(`ktp9)NHznm7z^vI2)~BR_|0e)T65y1Nze)OG&P`)Dk5Y*8;NuO{EgyjIqu)j ziX|pQXW`(~+0}IhvqTo?+N?gHuQ8sJqsXsc2BNlQGz^~&@iPV9{igy(<4@@lazb39 z_oM)y>O@?Su^wr`hXgNC8)3y)gEyD1!_F2t3WWf<@r=xERBnbw-d@4_(mGOzdR=Ain_!P1oX$0jOtgAoU zwIDzO7h|OmDZZNE%uhKDp+kRfd1qC*_RdDdMs>X_d)E^M2)Vm}{s#a3eS=fYA;oA(h^3EFR;+=<~Za@sa z0cpfkrBV{kZ4>FJDXzhP-^D8)jSvUUK15?uQ=b)JAYizJ-z%(Wd*7o6A1^%H(q?@H zQ3)%>N{AdD01CyG{v05%H1|t8ybjW4P&aJ%>s+sf3Qq+(4FrR0fX&}~C`7c~e$P|y zu3?`Wa?AkG8d1B1GkQrW)aLOyHw2WLMzoU4z}u4VPC5UeK>bB;<41$}cF?6gxAz@b zC9(Y#6%`+$&=fP?3y=Z_`YswHV#iAK+(^HHD0&S~qm3)|hz8dgO}eTv*+pHv>bcO% zkojRU0tYn!VF)PRpy??%N~}SQ`L<_AxF`jP{pLy;zk1E>2c7Nn1KCHB>>hDf0e`C; zC`h^7eN0X2K}#a@*a?%F_Xzl5*U#cyuq{|p0Pn}jZjy;;beyavDaiV~Be(27VJwh8 zH(~fYfof5+E_X}9y<#k940)gvSV{>X5Vn9i^gw8uNJ|dgZUcm#1Y!IsMz&ytv9kcs zp2R!{F)>w}Co@&UH3zt!?7zNJ!AMsc z5*|P_yg)wr_&tB!n`!{-L>wl@^3T&2QK0$q@4lu)2~+ZvBcgty-b9E^u`&F=hM7Wi z+=Dc-dJ$$D8gvAiI-)*6FCOz;IVaHxI5X;vFcKQ$1wFxR(!F4cnrv zg*uc%07yxG`nS}$wrqe=GImTfZy_J+u(~HKdIn#$ft)0v_>HCg`xTHxfO4$e*ZP+X z>Moa>3y`5uXGe~Zaq2J_I0F~Bj*=vd(~Br5revo9)smyGwo-}`8yjne#vW>(t$rQY zN*En}i61Z~@@%b>qAc4K$}hDpg@>_q3A&xo-lbK942-*tK)qx3@fI)))Zn`ouNuGw zLD`L7{4dg^15);7&e6SkoF#2DnzRatu{Y_$LdH0|ctFaBql%MQ*JaV_h3}00pgi)^^DB3o1 zT8F73H?+PmqB`7mJd6c$uHVYQqQ=|M0U6%^1Pgm47^c1-3$)eeQ`x-5BN*$~j3KP0 zDP-v2xmb6A+x#mibfFh;Tm7$ibxK4PHjW7ui*g5^(wR3d7&7UZgU9is4C$RalQ9l4 z(3DZFwQw7MD4kZ6)>bs7v`XE{DcyBFV5h*r&Y6k9#g7_H8|tZBUwLzsKF-x#g`<02 z9_-LZ)SO~T{U4^WK1q@~>ykQ2p%C#2`cyUy^FEwvz-p$I?{ct|fQ*NdNnCu&tiL2_&!IGDv_#&UK0xw}lnv!~#@D5LWx zYkxOG6biP}*?sy4LfoZm_t-9>plS-5GP-~0_tdp^iS?{{!~=tj7MmCWVXPNz=)!yfYOSG zL4>C#bubMF&QK}$M|~3i3yo;oDj9*htEE_-o9#JBO@g~v?KF#&>5vHTT!WPZ#^Ryh zHc`CW#Q17!pQ{mAi^!`80*u+0mA^6x>Wt&7KhLIQRzNA|&=6`z-46QbbU`->KvSDQ z|2-rcQ-|iz(iqA$US+=My*Me!iBFoFAWvZn`Lr`712!gk3VuB|(N zUO~mrV*TJadP-omD1db1kEdN9M@(?T>EvAFWb>z(G`0C1gC6(;qC8REAA+ z=37~|#LMUzA7>EqK>FJdN?aAZupRwnAHS2fGb8eNT=%1V?4M(?u9(229l<_5`x@Rp z>mIvejIN42PZUp$;-RXYNVkhzJb^6vp&yCaO2}u7wmoJL;+=M|9;}3e)-x2f972r`B#L^SFfbzae zcuz_e;Zog1J*l%Q{6UO8hhk>EG29wPcg3AvGQA#x$)$jsxCH2Sbg&q)s1(+Fb%MYu zZ{tFQTs-N_!1yS^M@V`@&Y5^jxld^EX!F&VJ9_`vK47GT|H_SCP0Nv2$M&b21aWLO zJX8udqm=!3S-LWA2OZ+PvAX{DtmtB$t53e_C|hn{IIi3gp`8J%w=H`QdGIAZCDV-gotU2#GZ#En+7J0gI6t#_he)5Ua78clKtMUC+ z!khgln}#7?Y=?h&y2t7VfY^Yg=vi6D1JqnAbMY22f z4Fy8M-co;LqwAJL3pDX-OkCR8Q&WkN4v}ADdsXbmYC7gBu2n67d{_#a&%X$>ObN5G zL7$`pTYo>uv7ewRgA`tglyZsCeWN=mLg8Kcl{Dq3SsD0t@n4#PimSpm8-CF@o*1SSR4gvVn!}xQgv)#0tUZKtpZ?`jcJ#Q3X1ERF;)piGVY1JneBkdtU{r-o4yJBa1%N`6eos0r;OiU&k;LF|LHnf`U^G_yUpEcP z_zM#=f7CbOQY7tsOeYu!$i^S8tte7Ks#R3q?(FPjt9mg@z9@3rKxy@(P;uk6yN1Zr zLBFBi@Ad>V{mFPOcH;Yn*Rdm2&lG^B6>BdB4$n;G&R>ZFKy?59Y1gF<`d9`yWyCrD z=wa`1k)%N|T>GnPX;*$~IfO9KDq%lFIHx~R;zN(aPrfI@5Sr)>Vr^4bFgqJzJdL|C z`go}_PgW8k$+L$*S3yU2?s3DSE@SKGNI5EP{8)KW*)*Lc{s{n2Zgs;qcpem3jxvJ# z@->@#_2le3d(f*4NG)>lg@AV) zUuW&dOCD4x>bkawvY2+CP59{X@D7*F#iUgb?U;xD@g_Dd#`3yu&s&p9JFv_siT-S@ zgx-7}+xs#4)!{MbQX5l}fNL}|n^n`;M8i$fjBB`#54{wO{;N;vonu{kpOpTVm?+J@ zbnT|EndM?+q49ZFGLxup*a4aEgPVq(wpo)Q9^~_TrHG8jJ#6OK~`M<%O>klQh*ZN;m+FKi$FkuMaTq_VNW=*(hFWns36tDcMAPT6#Bmc zoy%maf&5J3%Cp6v0aB>#@5SoLjZPI$c?969B)DV8jvsQ^umD}IIA~o212XJS^Q|TA z-J=U{-ebhzCVpS8-?ksJfg~bee;mCg1D$NdKQd^~$x%j)eqP?4r~{=?X_7;Yb{4i8 zGQqU~alA2Y&PMYdlDk37d?(hb;My(9G!mA&!Og&0 zA1M*}%UMR?x1+*i9|Z?rBgHx4a#*??IfB?1{s*Hi=siU3-4v)Cgey|+eB{1I6q&0E z8De=~`ZT`Q#U^5iu|__n$zQyN9@8OLl8t_U|J?BZ$p{E`T2u&nSsO>tG!EpI@cp85W!a6Utv-g56^ArpjGPRia>*s* zUi{%4Z+bP$JuVhJs(!s_@yU&8&8GsMhm`03GScJzW$B^FucU{D*i^!yZ+zA{obOEs z9GRn6@eeEWw--aEj75V?Z>FlFz}|<$65H3Exs;c8jVk#{bKj1!ThV>0?KQ>Y=SGZA zR~YH}bDilvq<`1+1;k#@fLgAWI{g>X62qdP6U`Q}Ua#;XmKFGLb_C90PM~KRRl+_{ zO%-d7-tzOW?oE9cng`lQtQ-;~6A1T+4GcJgwC9sV^atv-2y$LFYK?%k*TRXbM^!#y z!h?Q*v`G)kWS8`2cF6&$P8NGCWwGE*X2+sgu;^6&8bFncAb>1EfN?tfF6{qu&>yrv zJ-`0M>y6%WjKFQG$Id3K96VFtnFm611W%bDA4fp5S9Gu;=i#WI1{X_gJqt!sQ&a8X zde;H@$%LBE9k@9WyaP39XG*#FSd$almrN{s8V0m8QyFFmDGHHO{pRq2fzxcfrn>p0 z%_mTyN+}zLsAh;t?Uj}N7BQCxCD2R2A3!)OAEIWR8FW{vO3gP(?mw@q`J}YE6jZ>0 zsv2V>?q;GP1XRElw1?%MsNm1KgwUxq6G$t4pRC zm*Shk6{3neekt7$jP?iRikS8Ee&^WKmtJ#XAr?X`#FS$$$qAI6Uy_%ye<*DF=kg}m zcb2chRMH*=m0LdaQxFKem2muqb`$^Z!{U^TRn;Ox<-zgdKDu|#@%?W@Dt{ZFB3)%2 z_r;EptVK-S8FDp&VLt&^q_REb+HI^^%ouFWk{-(L7pJ(^wGzGtb;Af^Y{l+=yjNFB~=KDRANEq-A`aa zRSlD*`kmWd@Qy}^-`%>C0JAS)57-kFwtIUc94e|!P|XnVf*>&=YrKJo+g)tVTmelO zrV#!j^eLJ0C;1ZWVX|c+^2uh*7yxU9B771_sp6v2xLXI^cEdU zUQ@)Nw*{gVL!F4Y7lYYJVij00-v1?@`)mGn5>266{2K9o4kIof(IpQfksRzdN3+|L&Tx;hamMtSPB%G5uUQkz%r{m=IXLis@n|i9`$mn&Tw)jqgL7PxNDW z;^vTY^te}$<>>~ZeDiL{GI)=EUOGYM3L$i;{@f(WeO&gz}Z8ca$O@LHFjSon_3 zoK#}?kIq~{MctEj*WbSoHC$o9V?4o$wzi`2J^2HfT1H7;xN@Q<9dxd6=Ih=w<>6D7 zN|^?_Lfr{Q7cn{YRhyxsl+ouR;LuW+eOwQlgR$akWWm5#+h9kz?UJ4O5*3q9WVKOw z0GHdmr^*;}-2USA-~!uQj&;|6ooh-67QB{2#xBz@4Es5r8O;;B95mAn-*Qay1^0_S z8(})aM3)>&LbMRC4tvx~(IHG8^cn30l19_&hr!kF2q9M1e~GTtUwsLk5z3uM42&vb zQkHC=B{v5YGiFI%O)XBtrDid-E@SnDzEaPCtC2M2)=ivNxQwL48fkT>w}ar_$u3iBA<=UIgq5KLiH7n^5TS)tJL73!+`92D{ zU7(PKz9~1;4+2{!>q9%BB`F|Q2EebH)TD#Kt zu7JFj)~}XaBE79P;F!;jWlMq5%dX4z*zohvF7{1<8LGj;o9dxHj1M37K*j8Ef7>~X zhxH7?rGkedw&4h}fzC_Mhb3$JT=h^A#I&6&>s7^=%C&rDD{Jd#$no%q30YIF)}LlC z*JkafZ6DEDs}%;s5}3vp_dxZ1wtyH*Pv3yZ=*Dh+1Iba>C-XxKCz1elpoqdSVEPsf z(<}cR>R}|}nsC`-%9Uu8QB|bz?B&&6cIZz9HfKnLPuMg$iM#6$&Z`}G{_ap?x1Y}s zO;^c9FpOO{_>In-%#Zr8&Fx%kZr0$RZf2Yo`sK{^tHcXt!p@Z3ofUr))y>CDI#1JI zJfc^Phr-Us3tW2@ys7@);F_+gvOcce{xrE5qruphQsZPn*rL)EBW34jy&^HJZ-K~f z&dVldn%_K12M+db_H!u5Grx^i)lqlxze6X^#iRy-Z-g77IbnT+r=C~?xU2Y@M3J=%w`~Ym^oC1t z^|9i!qEJ%{i?P!xgKvky8TrHD8QGka;g)m|@{9U$fR z_&-~}?8v?Beb6<^oTaKjy-|Zg7(hJRREC4fr}_~cUE}Le!EqSv5f&~U&B!u7p)FZ7 zvS*$Mw()N$uDz}hHM5jl$}%EaKr*fR9b@tn<+~|WxxH)1TAM1#B{~AXM?JPtPmD52 z%U^nk>UiBqH|bK)!xgU{`nJB<#P>C1$+8iR^e|1Gjm7ac*aoXxIw`)QZS&Xh2TvxM zqQFCo!FJjxe`(EemVhkhCNp5;T_Uz1v^9XxGgEPV0zb;v?LO~I{+78xaVe+8$>FqCr0w_o|V03`N*tgOil5v`aetD~-vXQuAUx8eu4{YCGuivPKp zS0?Up8X@?9#3V#F!*yE_LpH8Y(-70X>p^@RwMU%1%faul{CM2w(M*hVKww}+mFXXG z5ld}ml~mSc9}tPPmy2}ixGln3RcnNfhp2n;4G*GRu?d#xPJB0-+K!_@pj(21Txzn( zAVUlxgX@>wlx35lH2Ka0BMVn0D+8rP9(>DnO&y$u?b9ARQ!=wQy7D^}T~kx1JE;50 z>VhP6cxo%NzW`_Yy+d;jC&h4O;i5joHYw%pc6eGhmaOSu7+ub3AzDQr;bz`q+(ZlE z@mFCOdz=KE&t|I~(R&W{dCwp)#TeLCgmm99Z=mv>IEmDgx?=%Zjz~z+p(E$dpD$32 z{4jzK_4i~vT^Yc9day`Vi><*Af#Lq_F^jlmqn%@D6UC$)={nt02u!=lz=*nc#SS8+=rfG$A;vq zwXOtk2=CA`>dkz|^D8ed(^O4pq}2i5Zlv?-nFAU69fBH$p#**en9se?nqVCjG5R=j z<_wRh6}*v%re`cy37TUTkwfcX>i{7kE7p~Qt`$JDU?iO5OtcFV3S=C_+;Jboh2E|+ zL6j-ej02O-D=@Xy9ooL^t*lq-lpZU>}ELMs>Ak6N*v zL48{!Jf8DBojG4ErmlMI*atuai+PAj z%ZpGnv`{z3(A_56oJyID(-_gP`bPuh`i|;thm@S49auH30Plqp0DdD;% zTWmJF#f_D+SkuRT8~e;)jO+;uZH=N(4e_+sO2=b5C1yq9tzQNzO_yFK3mIWHAWrtY z3Rc<*+BCl7Bm=G`(H^VeFZwXTv%Xar!WXe80_uK7-wvKD zq*1DvfjA>UH%TVv0#PXuwYLxZVoi)I;q%xCf=>daa624ckT<=emIFw5$p)GKvsQgQE@ojr< z_7R%_vN;Zp3}o#lnW_L^Y8Gz17~I5(boRO_4<&dNufu))K=veplY}mb_&yO?GYoe# z-V?PBB%~>W1QjOL944b6W&Q}Tp4jUldMroPP_T4Qvl%sJ0va7Xr6vDaO!+ib;}7p< zcidHY*<;BDlwXVzNVg_Tn(=+d>?%MH{p|sqT0SWNY#yqUu}NxFJ^ZLoAtA zab*U7vl%T|${fD-5_m;cig;GnN-}(d_>6@+glGRfK7w@5qAUUR6~sQ4M@V|986T!{dARR$NMN zBn5ZG!NY@{U}@Oi%%E|>uA@i&wvF#TMJSpe-^md;iYT($A>x7=8?lHX@8TYW@#sg0 zm5TQ#Sbc?x5?LM0;eg3M#Age=+`l@oyAVYEc78$SfMpWko6VKtjKo93KN_w+ z0`E`U95ReI_7>HF+*y@F_EB+Y`&N=I&@iHTw8t)hlUtZ9Qg1+ZBXUtxUXQEwi@HS{ z*PnyU7eEAJmF5O5J6g?6J9aE3syNV~ngoh%At}wNhwc*wn|c&3r*~a!sPP!8e!PbZ zLY_j1s>wwDFHAXTd5?i){w6FSicVREdrh75L6|I-;9M`ti$;tfZZe=-xdbGBx&V&Q zOEzP{5X21-SnZhd*v&l}xIx}ZIJe0-SjwW9xC0yla8ZMP#$)1}HPN|%i6J9(sDwMg zFG+Ko!+!1-?4sNjJO0M z%-A?>L=8tQRE=XDW&rO!#m5Anz$3uPe%tM#8X{wNq&p+O7g$=QL#CtZXs z@a9g9(D@PBsKQ2#s~tS`ZIh(a1KEBFZ8#f+Q1--biujcfbc!t60aO<9X@xTUpfR*J zHTW6zY9%9U_qg zkWU`xd*jKDq%=O*vx!D4=zhfFa8Ze7k%=QcVF{DxX_isBYYp#Ogkq2QIs=cJ*y}2* zIiD9LLg!p*x?AwKi|dnlAKmBGqaWkhPRMU|HrnvOz%*(};4P7+-7ZC)DGz;*<=>Qv zQfn&a6UdjleSC$f(C~qa{dMB2%}m!nDG99UkWYi{Pre`jrqioWH({M>S+G%;GUw)Z zmezToto5v#NRmSRVEW@5`-e2xQY(N2hRORb2wbeFvYHs80!XykZ1EY<$6XaCoG{vl z|8oOacAecfc$N;M(;>AFu`ea{9q|PUafI0WHzS^UO6QHyH@mMyow^3~me?Zz6-yf4 zlCEuJ`v50FvTu-1{P+G5q8BGqV$VAZ@b$NeTuJN;;9x$Gd6sK>@pmeyW&R<;Nm5Q+ z%YV`4*1y9DeFKU17~r}vRih1b%ZnIyO-F_j^#W1dTVE!+YclaOW#a{8g>0cH==DX? z{`0F!fxs1L%)m1`V^oG?F82zKtP75Z9}gY+G;&KpdHdp>H&*RUnCQoeWw?7_x`IrW z5b+GCGQ{F=?y9ZOcol%(s64aHv*$Z$NuWegBH@Vy1ZeG3TW+E&S_R;9H=VfPLUBd- zv-UswOM-i)HwCPbUI1(|)p!C`Ch@-6L!a@;_ilR*wJy+RF`0h5Bo|4< zuHLy_MPMkK-sHfL3Zl~&n)O09R2-2K-ePHmWQG+mo?_w$^Rwvk`|`p^&`%m(ych>vY`?@~(WwE#aaDSm_4BL$h?Y_0%`) zz91KXfLxSW;RsAW3Vsi-Z&a^5*Q) z4F%r0^^@3-`7{Xb5DPW94U6baVzPo zBk5h&zIq;>0uuGJiH88neltKNDvaBu$5HzO1iKF9dp#144rBBvRM-#cMjS%4XaijqNt>SO2!N-)jlhuP=J$OG6mjS%z9t}P#i@9~2Z zn1lJaIZ(j|is&W?x;gE1JXGG?a&V`6jFhi7X90j=yY8W!&M)uSDt+zu& zAsXU~$~P-YOAFwLPi706gaxBv8&58vjh3U8l`v5-k~!749uo4WNZ zq%=V;wv@j%h8|f86dzQijS~%8+S)|jLzZ-~1Tu-!OLZ3Jfy}1X>+SKH_b8u(lc~^; zsY+}r#%a3)+KVINy#m(Dk#SSFBA&R|Ce+>2L#!S^hx)cz(@|n!e#Hev%v-3m$xf1T zY{%5>Y7k}NE8V`H)4G`1p`h`*I)WwE%ydJ#&AN>)-&ru+`nn-t3djU8sl{;r_9p!s zWWa{#$^o*7k7nuM)k>8c(53xUxGSN|^-V_U@^~TWIpt{XMJM|m|77X(Op*YxvcN9EPU3VonNfn+9)Ld@X7j3IYCstH*J4`# zeHeU_h(HWabB~`q{Vozu(*h82NN2|O8`}cr7Wgqd#n%6Zssj1#rXq=^<*WPDPf3Jp z64h8t$IwF+L&r8N+`RoI5hY`okBCJv6%NxnJ-~5fN)h9GPa6UTkq~|_lEI;Dh%yDU z1PKtJRQn_M{1^In+7U%1^1%Wy)C(sWT9+^HBqor1w$sREi(SZ)*DchrC3Nz~npoGeUl^cYrDLfv#1?UC@t(NlTqoz5ty9?oX!6$*d!=@W(dG z)Q+LF{0GD5q}#%1a{+M44{s*CP!3kE;UJh4aK}Og4S0aUZ;q8%wu4+)FsrHAdpWCO zE*^w7&L*nhW#u;?0C8ekS(mqYomYnYhMK$X?{dQLdUda~^%n(0C4aww0GVJbYp9R$ zFG427c~!y15n~7x?!@d11$hyAg%9%=|2YoacNnprwe<19ZXklYLW@3rjKMpic;f{; z3eNT=!~v;u$g)LZx&mm7{rCe+ZXN@z;jzh4^u?md=>`xUtT5 z>z9k!MfOpmSlINh?FH%5fUaK?_T>9WKu?58)>1WfPo(ckOY~fako1Z10yK7!6P#tp z|M;QA0TO!qfyT7OWc;mbO8O8yamYhKys|*XJ@m+I8xlX6R>#Z4%n8J`WFZo(a)w%8 zn!OBxfmix<0y#2KiyO-;v5h8kLwHF<$OA)cqyweb!J*jLs#Zai4gmSh`C^eLpQ5KC zhy}6n!UJ42OYWm(>S%HpW0t63Nr}oHn|FUeGH(?-x_Qs;~?65V{tx|Xg5%n{56~7iYXP~EyR@! zm)G7PiH+<&M*|OTUS8^sS6yzCO1xmX^qjl<__tH4=kQ75!TEA>r%;+%E~Mo0eXU}7 zm2frUZJWr~6OpVZkFX}`=?Z;K5MLE_B6a1#32nMX9GB&9W%k8USz?NG`Sf2Wb@cNJq-Y9gdfZ&qwqi^E z+CugV<^D!pyc-*e_Pi^x+xNk@+ul ztoso?@bTz2-aKY`3xm%%Lpxq4`JaaMj?k#3nk1N!tu=fX+QGQ}HVE#o(uBa0jG&@f zesZ$<|1sJ}oB~KU3k|Q>Js0%R*Q0j0;_#rI)xFoj4?|kg=R)3j;=4_7aPYl|2&0v8 z@kcT6cBOIUiEFBAYTLiAxyF{&9b#C~1gJp#pkX6G-rG*% z6BtfaRozzGr70wYm8L|i0RGWm;S@BjkR$k_f#p3Hao^1*;w~v+eLLXF@}^!(HJ{;< z*Lr$t&Tu)pT#OEhU8&8QHa1=Fp=8=X+wPa$b__FA*E`ikCqH3C8?|XN3jfa=%lpSe z^u)T6bFcgTywamF-#<3>q45P^NoAMe7}Gt`K4q1aJ0_YJLYtCOEV*RL**jvnNsn>4 zGSA6n8PnSqbDa@SE2B-Evv}2fAuY1Pv0fw(qew}k)ok6ggvn)-y;TX0Cp`+}!t)F? z0zSp|2xPTi)Li+?Uz(Z+Fs!N%JrRJ_n})=#@hWKZJY-uZC^kW26?XotfzD+LG< z2goOBf^uUSuBTNi6Ui>z=)je=yJ05) zP#?1%KV;$XPFC=VvQ4%gIQTpsv8!j0#+=W2=NzX;`V|;ct}5ANT^xzw(6!k(@M?3{vUQ~zU!46$EQS2~P78D< z*m&oPJo;=E-3$xzc2moza_dX`mal1BA(*drC%z-Wmc#8~fU!sDEs5<~10Brm8*os; z&!v}>M}`Bsz6OPfsX4xSVwPe7=0 z(1}c{lF^X)v1n#kVD!?K%n$#hSgIMppYM;Onl&$Ro?Gwmu$g|qWZp4m)*;YEz2{`Y z8&BY6fMx1@AtVfPvLI;odd4s%HCG|e;i(7%Yc=vgZ- z=v&6D5B$B}lvguqeb#|K-~LZy`=~{?P3~^uG7|n#-n}Aul|rfL%3D&FLO0F}ZHiXt zd&;vVpMKIKM15WsVTTQcLYgli2#y98$m(3t9;2KT zGmu-)J%9X%GJ?kN1NOIX+xE#x-^t189DU@+Y-)b@20a+ppPlh~g%tI0;tgv3$hXHGRWzqsM6>3%V5c1cfcnk~aR1~@ z%P*sy%GhL^FzYO9p5OOCKqOi>t3%enBTxHU6!Y~&y|@zgzXA&qq?(V?6=g=2>iJ85 zslGJIbSRQZ|FCUe5JzIEf86o(#28I^!QkP#0J(dnoKIKw>G)tHW(Y5@o1N(H{3k`B zGtWBQZ92-I`tBRCR9hyJD57=Bqg3$LzL7{3EJW8+re;OE&3ZX<{6*12fs81zfI`e) zdXGoe2uiI0Z+Mu9h<5h?QGI*y+s=!v?>NgtBudctR#@WyiVq(6kMt1g04dmvWx}3F z&3(_UvIuD4)+{^HsvG8oVYLG6gnHWXk+D%wj@u>Agly?(z#%$EKlXMKDWbU*QGQMjewpzog!0@VQsg!(MrqmU`taz7~ydciGHQ>WjuVTb0)d&T5)`8m4VS zKBXdoQ4Mxy?csHQCuu@=D9+f!b>)E~#`P7Zig47=bJ^DtI|5>0?jDGrB8~$V^{r!yf&5uTtm4%=E?hxVQV>XPTSDj|KNtd*<66 zy~UHn4DcB%^kAR*XI0ls@`;r$w`<|-k@i@ryQ+`A1q=Zc8 zo3UWEZTSZe7k3-R9oEV>qQ+&11SC5wvK*ZYwcu)yP%+=m-PPi>sWi}M_F@p7-gfHX z%f0CQyZ5?L<=;OQwoBTZwr6gbl zd5xbN-T>%5(#fJ}nKsGTXa-pNLXwXABDNGznseVdlwVHlqEHIHKL~lJnrAv8KK|uF zZ=JS^5^9ez1m`?`3*gPcsuvx zex}xxYiPH!+DP$LgHn$F{NO*o@m5LF+^MiBL+Y9?I zAMFb&<>;N}WuM*c8hYYrsl;DXj(tCusFqcK)l~YgZ$(++*0NpTWX^o{s<9aZrm5!j zjn|GXT{xe)^oP7?BHIVsvNrWM?oVanuP`(ozw&lGi&Zc_g;Hz4o>$Ql+!ilXm-bro{VRC-UQ{FYx$$#2(OuO%A#ml1E4MZDyamHt{c*BsxWJ8J4s-_n#xGVqb zSHtC&N)D5>{-g_vG^05$)rV`B&-%{pTtaQimh=cRO@A*j^F3qkpiRzqrCuM8@+G~& zCo~vGcJ$D9A@lGxMZx-fqvx*^k&wrM%5SvF`up#{YU^2E=I<@scr84oxJ%LhNm|f4LzBZkBJgm{ejc!%V!ny`mW{?$-)UsUV2Zm zg=3%oDZvVjoY~UundgEYZz8RY*IgG-9vmIi%PU`$b7(e8sm)6@B-+^`q^$aiX=n6> z$aQeDXwgsG54COk&}C0bhki5?8W;|&!)aBV8+P5 zuP}gf=IKEDLEB~{26cNEW6$GLxl;lc#cml<^)gK_^;$Q(P{VKEnfXZ*>t8i8rdAf3 zy_QF`yFR`*G+}vHlf+$Sk-yJuwt({NMkfP2{ztM7FEC^ruR$FRzMp+c^!EeZTbM_64iY+Tr%^g61!FaLG; zzP|Xe^d8oPymSMnZ6;o}uI5r+2DMh>UoOt*u#WoGSI_iN%B!#ADVpe`D_PY+)Vyhjqu!A3oaGa5SgWb=+jZ zhlx6NSJzNWuCHqseefvP-k;BWp6b464A1)2L2Bgv9E;H*x2(bBpHDRfl{ehU)1K}( zWxm2N?Yl1f3tO<{rpKxLumAciYrM$&QIxpN)nDVeBg>1MR%aT=V<$MwK6}c`wxlrI zHa=lqj{nYu-a{(XO`DXB1(g%M7*p2;Xf-!yU#e3xPaiz>yr2GjzK+=>ou0MjSiAzQ z*;jF4+j29unGds9F1)bsJ76k!|n*0b~Ywq9N}xx7a%`W15P}- z@-mr3Y;o&M<{P}XVU-cYI;ZBH)Ma(I9{LjpsjwIc{J~_vRnK+Rv)gVIU59> zkJlb7jGkEF74K|)>-DMcx`&U3mTEjK&A1urY~efAXOS=3b+i1K?^L_PQr)w|Q`9N{ z{H{3eQD=klP>FiJ{Nd{z6A+#|eq3?nEWki~{EuK?*_t$h#6#>u&LOk9L36YVcu~U$ zxZ;yDA^)$}7s;FNEIKbt?d-3f>syds-Iv`RaD8`|7CmF`=9Iqk-&%97ddwkRfnmos zYR*Y&{IqkzHo6^Ec<-vO(Yj?^{meq^(3e_l`?Y!xZEDx6+OTIrAkn;luevEMKTKJy zSeL28`ks#wV~;jbgAyk6v3X~u>A=^(niMxQa&^i=Xo&cVUK zyi?Nub)YGddwCWWu`ioF#-Vy>R<&s2l!c8%CS$yAUe4XzGtO-->#YBGn>&)q3Hf!j zCKvO39@B>fI}>FK`bwUyobr54%NV&VG&;yWm7e1Bg)z;WYPHx%gy%s;yV7OZ~OG=3IijcRE8|j&5(2z2`KQ@>F_twXB5YF{Ca6KK`$L>3un2$|9z6r@5ETje|F9*b|)S;PqP5^{?~72 z#=P-nP0{@Ej1=B&du}MxzE}DCbjAy`Nf_Qc9;WfS>wgY_x60Gh)PCBUy83!uchNsT zV4u!6+U8U*>jjy0T(6A1jJHo2YB5c<4tIYOxV*=vJ^kP{x?6JfyhoPQ<)Q35P3iWZ zIj7d_iE=b(I8gm6?!xAQs^M~tE#38wroj*Rv!bcT_4ha#2bpfYN2mSe)iy3Px|nlH zhWd3w>g*=g^9SW3PYDN~5Y>ryUPPgonT<~6rhF5#GbJxY(hRbvS}b1P4Pwm(_)z2L ze=p!GD>$y-&z_H5BjEVjyQan0Y`iXizVZB*xmPS&)nydf@!S^W=Wpctj3fi@KD4(u zQ>UF2>C|N2p4Z)Le8cE))!hqIsuB+}Jk}){&F|}@r`k5{;rE@giWz4Lja#z+HM6p? zYLV&IXlLbT-yPoD7>XP=7(sCzS3~^k%B>US= zA(dnUN-V45tkc%jjhmi!d&GrORp#Nb=O;}~ld`k3&ug&b-4!f55BB_iY;ke%pTEH0 zy%e2sJ~KhDpu{I|J~8}#glNj+%y}18&-kvp%~@Z6YA$?}k-?aGzF}vdzRU;VXx&`@ z55fa&qtROQZb1*K_@=gvwl5BkIWHoK9?gVb6NU>u!vgaacDDk|sCLyzu@>ilX%NmKa#X2bne)Ni*hxi0AUO%~cb;K3Xo zU|D5!n5WAy%BwW;{oNVYUZcZZ6W`KJ<(@9@Ix@62%OPbbd|b%%z24N$DMz89wiGeM zH2$ZNrR;o0F{ZN}d_{vVUI<6J^~KAM{v*61l@ZP>J7W*~0Cx-^Rcvf*)?ykScm?IcgU>oFR;9yD~ zSY8!_Jfnt*6-U;uXo`|`uqu)TXSE+f4%r0$C4%u^j;A%C0BTSfX8!)LmwdsYdD7Ek zwOdB!74~RP^6US(fZhgXOk1(g@}J}wO8_<7yVUsvQzoz!8Cjmls)Nkmlt zy{&cjd&#(IX1C!zudry*d!}21`JEDDTb!O8%%4k{=H(e^ycD6uh^{|=mgM#NoYv>4 z*N^Z|l^)rJsge7=H3^#w=*T+pV)XdDYCDcNs;|r%Q9@^0ycI(RuHL za=zL20F}@WUAtsfYSslCea>yI4_C?@@tqo1p~{tNWR2~hwf-OW-UF)X>}wmfA$CRu z8AZebDxzQ+MQO215fP*)Eg&jGSE`gGDpn9s6k>x|K%|36heS|{Am9KY^dQ9u0YVEQ z{qBP^|96~uzwh34@3+?d?pl}Snj#vK^E+psy`TL&&pv;6xYdN~R3<0;c7UstA{9Pl z+S=CU13uUTU^YR8+3raj!uKA8WMVLTOKG%a=Ghx)Z-MgZAlM7}WqZi|`0%haq5nBT z8s2Z7JbjuCBv7V;cuLX`9WnT7PJ}~s9F!Zmiiv=S)&*n5?2pjIfu*|wj&9V~ucZPi(&k9kWe>$4_kiYK+n_(|3#QLxOthTxHxIGsy z5gf-0)TF7ecvwZ8Yc5uh;4e1=^rCj5IGRA%+BbQmgnaSwg1}@7t7wGAQ<57jIXuvz z+&vCOi~HW?T5+Za@s`DmVFkMvB(Cud!8HUC;Mc^D2}2g>P&SIf(Zq7ur?a0tdGZ@@ z>*OzeT#C{}MJH%V%E&DT$CwvDI53EWIxqpP3TUV8t|wjL>3oi;>h;hQ5~^xcjN|9dk^49+O#8O= z#WZpMrZdi4pZ=Z@prKL9Y?$xB9gf&sxh)Up&sH5KRzpcINuw#m4@egK; zO_au%Hux=-9IX4g%5-JOxB>tpWCH~;TFVhWb)>25-XHHDT@-K4eo=IS7AhQ!GVzSI z=H@rhtISw6>&Kt)T>zZKhTBUwG&VPHPIT#;O%HlMAUV%ReB$)B>~zW=@`Vl>fgznP z%TZa_8_aa0VEfj-ij9)wJymFOv%*_y-w@lA(|vLU2k+5IJbs+u_?;ju!DFt8m;@>F zHSO&xWGTub@lCw4s7W+Z()@NQex+pLCHn5AO0I2TQ_Nn^p#(LNl)`P+tjzIkn86vN zVYA}LQ1Nt}9CqJWU{I5k3>Y(J!K4-0T8Ch9Vt>zHXZ?9=(DG6s<|IL15=hL(&aSSe z4i2yOxVOInp0W#kE;#&Ip7~D#8R(LPFW>zz!kW!ygB#1ERdRB>;d<0FQ6)BjAkIPM zN`26kdt%P(fkfhxg`*Ebz79E_7?oKlcq&MJ-x<*#%E=0$6(q={m#M;`<&B%LSJU@_md-Di-_-atBfovrC9W|Otqah>nL629LUs;#`D$t?N0a%8~mr(4ZbIi zaDofaGS@xkX!zFZUHQr4rIQ|*$<;_%yr{D@iHm`l-+GPc6ExMz;@pn9UiYW6| z+iXjq(|H7Ok^VsSf_Yzwg9>)*_PVRv*{smfN{Ef$P&zyh^Ho>-2G2>I%sQNDwkU{f zv%yFBGJg3tQ;YSO)J~g?Ii*)wOGdeg3*dvj?rU?Fv?rc0!I$^(!ym>4{dhExNY3MK zybjPJwAx)DI=7xD+BAOo@*Mi(Noi>(`hR1||JbtcyNK0&jV&#S@Ys`Hy*dOOk_+ix zzw7MZ*FjM*cW^HgO88K*#3T&Ippy5**~$!n*2x+PKpBG?C^8&_(WAGvV-$L;!<@Kh zh}e0xQcOAy-`Yn^rWjRmYUb+Dze%UvKA9-O6p0T5%Cz+hW;JGAV3+-9QDeiUWxftm zavTYs=yGxQVkvUyVfW+oJN5>8Q`j|p6W#;t_gW)fpMDg=3isLLCX2)B2tAyhLe9?pga0)5x)g6!<52} z#__X!>FlqP3pCdcF8oyJrt(pWct0avZSY0&V%|ncx$5*^?kyM_2MAzyG$dU=zUJm{ z4w;Hb|M5S~PNOW!7ujLII8@?CV(!6Kcq>FJQ#y0Oa01r7gnoJ5-a56Ot~w&$sY6aj z&1@a!$bT@%=KIZr+kKewAJ5M2SOtZ7kdPmBHW_M`WY}L~*rlRYd1PR;24|(!kz8tiSUsFXMO^+ZRGIt7ci$P3x^KgQ;^`ctfkW_KGz%b z9qjStHB>rHj0r|ST@xpq0ubY&A~e< zVU4yY!%~==PFcdFt0yM7YbJ_1#>Nlebt*Y3OCbJL_4y?wlePLqIKW-#1N5wcM2eKf znR!gQ3ScceD6?Z>aHdpT50y{s#X>SAyZ5zR6pRDZQfyZ1bKSe&oUFV)Td~ zRz>jck(P`Jv&N(fP056tPDBO#foKnhW;J|OP03g(H_E2-&$s;7g8@`JbXYbErD>Gt z?lPW9(Fi^K*zhCi{{b$2(QIZlhu!5*REYXyltier0Nf$S$&M}FgFnq&bIR9$j@ftH zlSRQBJo$n{9Bfc+46{&8P&J4Ag<^{DJkPB&DZ2E0#n@i~_pi5M_eDi|fe9OG=NV&%Vdr`2Wn&8u;9~+b4n>Y-?SA;5J@(gY z1>15K%%i3O%q<`{iDgY+R6K`k1LHoM7ruabCFALs`U7U{8^bLf!iJ4*qz3n(LRFbw ze*9`rRm@OrT|xel|L!#{rH|yynlA3Qp~{S`ybj&Cfgi{nw@E2j`I5=_#)ftFrSS^A zY1JyCFM|<;+qfE|#Drb1R-h)$PhWN?2i$c=P>Idt_Welgx;FI^?MK?0ZhQ?Eyj_fM zk)#Z5a&D90?33-ay0DjYH=qFHyyHLMz+bO6w-_1<15knK;|WZ0U%86%sjr$jN-IkH z)`U=I51hHS?wQ?DZFy;5!&-T%U9MR3QTHX9<_WRql}ZKgsw1q)*e#`uR{y4K<9TBZ zs`PMbVM>P8M-p>fNIb{&SHF-bIL_HE%5TcQbZXdghS^TI+~mE#9B74fZZ`m^;E-nw zQg|v5#9xAn(-|l_)Y$cNk>zCoE0CUyl1QMEM~I+rWf7=vb;QOdX6NHEaTWzARL(|T z`$5$Z4;)hcNW@13L5x>s59oC2B{5S6Kq~9b>o+1K-B>7V9$59)C!YTI$p;1h9|ERl zxJrV&p5~Mg^BN54P*Qk@;qC4H9ds3qsB2gZ9@f;@oxHEX3WDcp;47_H4}=OIKp=;u zC73kZz|>j|X3ARzs3nd9(Yp~0YkWZHh{_FWtS_mkN1g>EEwU8#0N!L#uZ;Am5zcrJ z_-&z#HC~^0RP}8U5fpz~zW3&h#k{N1YWH%#UCj`+4tz=-ZhJC6E>^?CMKz<=Sn|@hXVo#%LROp`>Nw7N}wZI_ZMYEh7> z5tPY052{6VK4)oeb8Vw%819Xq8kptlfLDTHed9L|H* zY2iv>zb?TDF5-GODEvVXa|le3My5_a%sH(Q)3l>v^{Mtwm}3!|tn|}opOHg4_`>c- z>&kp=8qKbnciyE@CH0Ek?6$7^Pwx(Kq&D^C2u)<7&p)WjAMLHp9$rqrzw}#zHU3eL z#r6#0KB5PMq0&nnn92}rUWc*Ri1CDr86Rs;7Vd0R>OH1PqN&er`vlrIR7-xpcW8<7 zFa)=Nz9@?cc-}Us4IzD`6%-f0ftbyZq+=5any2l^4j?HxxdBM_CPQs+oY0=(cXD*} z>Oltd21IUJqeY;WJqh5=J4Izu9aD-hbtpT5Oii^ZG>6J66SsKr;#JxK@9O*0V3b9B zdkO-65RiuBbXW{2OPz+S6zH-k4^C+4MTQV+e!d8DFu4n^QP1#Y7Nyi`Cd9Um0GL7G z2RIj+hom3xS~!X;_E%kp9Z2+&V%B--r(trR_*X+K!Jv=-l3*oKno~`sTU4o85D;Du zP%3KG-Du!Blr*Ol-2_Il^4<9L= zspsILmSoG{_4sZlx7Kd}{5FgY3_=zAy-56LsN9`yytmGV0nbDx2+ycMbxJB6E~wV{ z{pWa2b?|6qnX=SJ4Murh$(gnJICI)IHl7=l7qI`d!7wDjvUCf$DGM**I&$f%QP?C= zhq}VVCd~5H3z>B)eYe=+uURVGvZ$U-F($0@a$7&A|K3G(x!oQ%rPh+ZrfcC~>aXBH&_f*`U{vvV}OdlGR4fFV!Bh4O$uoYrtc)6htVd+rh)q-igg zZa8Yn_dR(49zIDlu?ekc14t@Ohx%PDT3pR3!XXcz@|BKnAnT2M2X;#XcX!pknQY9_ zJ$CGts0SlDM2Af{0Yq5SKrod5+tf>GI6Sx7l-{&gRru zv)Ol9{TvgvxmiP5xgOe)SsYNc>v3wNz=Rt0ps?@4kpcnxB@X7MFG$pEh?a z_sKBj&5n5^Hj9>kVN1cz$7z%@VEmo{V;=_J2NxJvhzAOmY_8G1zK1$C>cEQM{o8M@ z*?gF0|J{6L0;(sx147H2!Hfte+p{99ftLU7-8&e)cgCu3<-=WoHEqM|bT;ui=bi;u zk+M3_4z{>+V)f%;?x1Nl|Aa{m>*sytyTVwS%PTpsb+)?0o(G;ro^8c{oWN@!>Bstg-cj)#qAwL#&bwhw%n{=_(DEKZ z*esskMjt?t>XQqCj%+}A7#Rn5njw1VlO29o+(@uOqx~)U*Wif@{uDj|V7JTeQ4pU7 z3-0}&GIfOgMzRavWB4s~`jNF5age-kv%Ln0NR;%@T?qQGbYzHB)#sVi+rh%;o`8)n z51N5iFcWx(7Y5Wo=z#Cj*)<;cQ$Xe)Zs1%3r3CYlLpThXYj_8S@SBO%PM~6g-dVUi zxcsDo634d&VPL0D>^lM&nCX_NkQ&C7*-P#z!uL$D!U2orq(0F3PL!$PGkc%C++4rX z@!1Rbf#wKc2N8ER*phBLo$-7s1-FiXdW;CMR?-6zeIA~jjP1|s32#7Ge6#&6geW^Tg@MN zlua!tua)GQ7%eWuRL~-zH>iV}#%-R^Hpa;J-tu}kT1BNNn36@d1A#(<^yl4>GhZLM z%GYb1lk$ijZ8OiK)~Im`JFCt7Vw#N$Kj^^~;lUP$_eHm=8Z&4Yoge!k$*9Oui|-oS zbpUTUicRw5;>q!251vR1cFI~AsuEw#w7>V=z*s#e6VdQ$j}eVVD3SgE zuDCb!#F^VX{0&?QkjjAg2#D)@i}@X_CRxfm(@Po+~;5 zF+Fqc9Pw5nTySq^+JjcK0Nerrz5LuP;_-Oh}Hdq*tS&*Q^H%Z%!;=?WL53t%U8*D zQp~T_RLU(joBUb_ww%w`XwoIvb=U!+7Vil_qj+e*DlKd^*-{7KsbjE|6wz;(IwTrseR2Yh zLfry7pW)NvCE#_Fh7oh?0zeVP2AFpR2Yh|40Q61=J}&XCL-?;d4#H7Q0KW@$6fIEx z3jV?h{1{&4F`bvtk1OaFAYq%lXXQF)7ncTfV?!!vE-x=%)`Rw!&SYkUlC2eV48fkO zusP^n%>_0zv6$fM(1hA~fVApHBCHO@y#NTWv3qNQPmaRzo~EELO--*8VgvLcIBq4c zBtRv`YiH;r_)+*BR>HsqVG0;q5Zn_|W)S-8;{!lj1uTcvaLuJn2@w~M*OW^(yYv~- zL~9iCA+&+_02}yB&hW>}dcaJD3VZMfxW%7++G!EZ^kcz+0U&cHqaRY~pNI6vpA!Fn%Fo|HZ^4HqaA{_5S*!Z}WMt(;30I5t~EH$7EpYmRC>iU_+OWh&b%)1E_kG^y0v@koy=GRR?`n$I;ph~HS5 z?nQf8olD9ox`8u_AInXutvvzVagWd!e;kX6iJ`{MlJ?k-W~hNI;2m`rVk8^JXqZL5 zgJ6$BXaP)`IUBYg7C%X6{BhkIIOE{IKn3;t3nREDl`4?sHl#UVJY&(15sza+`3Vrr zSwRdqWN+}jXiF!^O~rm-PEujVtl|qJUg}~+V?@+W*R!cv32g@- z*X-+{Gi5?z*9iVSiJL>bAvQ6=W2On3#}m|ayctA3=zM}#3Ph+#MI7ujRh_3-1?uzCbR z&=UanStuV=l!rS2utc~y&~MVG>cUpz!%3}(N3_Z_at&>@IWkHFC(-H$vTlX*}K zclB`!x5gufS6m0YH3&x+F2QDEH910ha5}geU2+iMkSRw44DXqUN)I{$O5)bni!H5q zv^rq^NI*YRKN12h;XC*k`~l+kGg>-eJv_}uf}|q1Mf;~v^xm#-U;|F*clyB){WFVM zGGwi?KFiV-OK@Yf<`J$c_3TByV-cLdl4FmVv1UJ)vR61lI}`cas0N z#~Qu&4poH)}Cc zG|MA{jb=sKQ<&Xw>HPKZ@Fghm$ow|DO`K?iOFI2b8!wnTeV{-w=2H2}vcQfE`(Siw zmOqhFL^%}i<0hRKAPYPd39X+u97sLN@>Q*Jj)OR)0rU^lgSixAe<>Oneq1wZvcVMVSAj)S}OC!_4P z5K1@lE6`Q1Zwi9(-1_J~DWiW%^ z1#UpTd9d;NmdXoRDfsQT!B{?R${#X8c({I$5F{ltEq?tO`~Nc8i1Sxo4oI&gkwEM~6_S%1V>(TpN0 zh#t$06JdSld_sQ_Yb~!4p)G=&ada7`4!g9fMn4M8h|P*6g(Cqc{Cmm9a5E8G|HWKJOIg)-DoRZ z5tz|-PkON0gcOOrf2(!gNi?0v75n1k7clC|wkw%c49*UBR1UeO268AU++J^OZLJDN zE!`Cs$6<2OwVjVY?{SH2i=^NMxEm@8*SE<3r!R>1`IQ*M7bjC(a#szc1Pr99Cns#| za4yO!A)BxnXV{G){2fE93pb`-?g-4`dmXh2n@Mi65keP}^H6TrQ27W~nMgV%Sfk&^ z=kYW8q1&1g%0XZ^&ivEH>*N&~ZF3sjPhyqb$|jn)zbLu#yT#ACu`jiCHPz+sI;dMP z@cnNOxa*I8lfNMKC3K5hT$Va!;xCv9#E%>ueg0*~yb z{$aPogcUXeiQ@3~9ay6nbE8b)^D?Mr1UGgsdF6W=i7(sH78Deg-`7@zizy0o>rteV z_yR!Y@`DINl<`u`-om9%?~?L59bFxZ(jO7_{~rg}ZwN$IsW-oxNUgwHaEuXT7%2uG^#H>asBWf=g$i zc(6`60VcXn(Yoz$;ZW_P;z>~t1oxW*-47iKhM|a-L&|?O@TOz=d*9_ntD7i~>FVpI z*5j~_^7$|Y%0=uMq)B_SI3>1Ypl%%DL}o>L@871pZm&~L!9a6YST)-oe_-^&f@+S+ zuZmQ9TRu7SxheU#48T5{0R@{`xY+%{35klAT}GWTOyZq;0i6RL)f&y0zY>?}tR|7t z?s+g?J8xEazbCS~ZvsrbWOKzsbdlk!V-drgz34{t`Eo$AAMWosJRmG9G^bXmTA$W( z1k(qZic!W^%Xhzj*`sisGf5D$#8hxyxqm5R*Eb}YUR$ufYn%Jd${cPg52_8 zw^z#_t~G%il5k% z07&zo^+Qi*a+)2aaDxsCD(-af_9XVnA z!Gv_#P&OnPRK$0#xL=um&$D(PV{^<2q80~|rj$wVpHMctLS~vovM-WkcsL0OFM+VD z)9$ywxqj*7Ko;}?2n@vi5pe1e^_HB0a(G_a8DX96N z=1v)M^JtjPF@O8bv?wPrQ4hoYWEA4zjxF>}1zu=c_b5fgPA{uN=py*%S$U>(__i6s z3=Z4w?BGA3n6?lIu1W>%2aMU}lNStO)$M@aghVO9yJk1-W4Jch0+!VQ4*nPpgh99$ zq%q%tqS=J<@9#KPAU3@RUv}I0)zQUMow4xOx*2HZk?Vb~6`f};@6%{pCV(Fu;G*+w z$laxbk6<83a`Yl$3P%zIx~SEgLe|?rby7A|A}ACi2o5Uy`-(7a>I_n%1@8WM*f9o6LiT{=Mmj{w~xXrOY{Gvgw9lv!7#g-u(iN-2%h& z9b8dfm|VVfH2~$4yX5cMRC8zKWU2*yU6}cjv8zt&6qKs02_x}@(H+Jy<2V4enPB=s zh1*h54J3B^Gp)Y__vE;6^%0R;!n?to9HYT@9^r|t!M#?oL|pojbm$TM^c1mEJ*d#YGY_)$04tevFH}NEV-Sj_W~GI#h0cN@YU4!~gnR~wM$H*m%Eh&s z2qlFyE(I^jcE4V*RplhQL5QYN_ zxdAX~`GOuLaj^|{s#F&39R0`> zP>UA#ZS(j8b=qWYFCRccE+_}tP+K%apRb3e(@T_a7k}I3H{9OM0H=0lIzgBWB{k(u zcD5OMC0-B~ti-6Ogn@6tPB6c`cQE6_#8bN9D0(lbdjw-5zt2{f+MoI91^g|b>7L4_ zL~hI3%@RVhy8&`#RL_IohQ1h#OVhAo9&K9KgWz%m37i0IdkEC2?9)w!0e6YR#1w?H_Fbw7?YO$RUHLD4eapbAbE`VHc#; zYIDOQyfNboJGgoj>%?V%+R>xqM#5&1KRs82A4h2v&Td`;nBprG4A3ZOXy^@|y~KtB zCJ{ISr#u4N+LonTWjjZaC*sxm(b?-B1^U4Nl)nw&rW}X<5CXbk1QGG_FgQ{8pbZ9o zbU+0E{s8?+)H_2AW(byv@$pAcZ?QWcdZ?)11Q$mqvl-yz1o&=0f;3=THUc`DRjZ+L z=@|moWNo~SyE9?5+F=CgheM>+Gx74uI-$|8h+uy@XA(Vi#AEH+t5)Vb)%}iE=TN&D22Xy4f=&g+QP+g4Ou-Rys_iNL=oo^- zd>|)LN^`we$6zO5gnHAz1vb_e{2de3=qN5fvG)K%T*tVbhL^y=s|gaxQ!$=Z%9aJ* zPMDRt#>k1x1Z%wHsJ`HNLpDCJFsK;9}52R0z5@1d1+?`BVA{Y+xkILz>*_NX;h> zZ6ZX-kQo^b8}4AsOElK5XAeh@$gffMOT`{}?S-j$^1g(QeNM#3e*CQ}J>_pnqE(s|byQLNB|rfdJ%~eB)-3&%07b^7 zt*6N&MMskMjl)nh0k95B&htdWCutJ!=Iq>DCY*&Pm@?m- z?kIiaKH}0N4M_m>I&!Bv5z!ivA>eg@jT!*fYv3#MQa;I!+=^PHe_bBvNP*w$1f1XB zp}|8Xm+5GNh>(r4g(o{4ZmQ;WU3*)z9ZqH(!cX<;!R0mel#zCJYlGy;gZY$b$t?Lk zvA9LcFFNYl-%iOr5aS%x3l>w_ASJ~WenUA=D#-A zm6drxD&LK&h}A4pTK!Vd3u0BSq+`!fefN|96OQ6n;^OBap83y29D>*a!S99C@^c7A7g3~d{>f~_o8A1Oy06wAwEP5Bd+>W0 z_v8ih5A`E|1D2c+YyxS@3C~_40134jQ4<6@lY|CH6kMoOpWUe_ooqy@^*(jt|WS3!-qh5+B^1Y0oSLar%9PS=Vl)*e{}qSc_PCD{s8bN=U#1UGDk=+ z57N~{M307B5sjGmG!BM;$#u|(pvLa`>6yB!g8{(dVWS-WJt~pWVH6ljQS?bl2-i;T zHJj-=SQJ1zNArmwnt>>fyryk(6P0qTgKHidYcWAl|ET$HzpOOh{{~fk zeVhalCVrds%yl&R!9qP(Qe)w+(vAIvYg|oMvWMS{c!)S<6ZYnoqmr=?SwvjMIPVFI zvX)|b6?aDulp{f4Xjdj7!R0PPf~>nwy&g@kCg4qaP}s$yCmp;*Ll+Dw8zIuZgIfX- z5)d8_S5uO<;f!BRK{Sx8{iil$dWAE>eAE>#=PbKIJ>KR#@2mbyP#32NjVO^Snz=n|Zi3uW&t)FvSf5(E$d3>y;7dF?e zW;XeYPC{pxWc2;}jgPmVI8BHhBIj5O^QobHo>wB{2-{wmUq_TnHxc6Ec^nh43P==7 zksMJW?t3Y({m`i2d+kRTujO33BCVE`+hc!oDC?}~og79j@r1VF9D9)QESzx5zH+S_ z8z=2?AtRp;#MWE~wraIsb#Jg24&Qveiy-^L*n|c}7{NsYT!0-BLap8X!IU7s2{2(<`1>{C?weYy9lf)c~ z$rU$7N4CgN^mSmC=;nvvd6dTML)CdMgO}^y%I2i2R*qL6Y!1$*&iY{^(2*=Y2sr9J zq?1eN9ez|)XzSkQ_h^c-{98hB=1+$NeyCkC^ZR#15uieWXRRu_Ch*osh1(w#BBlWC zoUiD&749EMB2I#UJZs416Yd_e6u>ThZ@xEUmAiPZI3vw!Ac;~d+0*K8d=INzX+*4? zRz|F=RGV0b+44Xk?brKe{k*_L0$V(J*G(0b5zVqph3kgpll)r`JlpVz3#u1TrYifU zBpDXg^Tto9Vm^P$>&d||#&B8t^MmN4;8PN@Y|QKY7>=el6)L0DYqjgJ%|Wt9<(s^Z ze?L^y3p!x|q&Co9(USY$SNC~Bi>)>9(kmpy0%K63+u`rFGYe6R`o5 z4Tg9wPy7~Zz0Y6$@wD8E}ne@T9hh3Xqy@;uK5xQ56x+BmyjDu z)P!9gdp?iJFIQH-aM@;KC2P^Q|59T7_4=+7Kwq$G46*|-Ha$E%yqOFI{=pY(p?eeH zSZn0c#TFX_J1|{kZCpF)n&yQVS@JIs6=GJAtJkx_x$`e{T%v>EZ&!)WUSn{;-jQNq_(- zb|+Yl*4}wnU8mIBHnt?DW~+eq*Id3{Ab(WxoGj5|&`I zkUJY5rs+|jEnSoQXjHEuhuHaTB#-Ld*A4bdU%OPQwDx7!%DQ8HuhB!ySz|5i4H z!cf9XPs97oG1E8Bv|tZ;&A5({RZ7*We^F(v1^=Gb42ON3h5~hyk~||E6cU_-{Sa26t=b%M7`yxl(22i-0`q=j>fjWC^bs(BhiYdJ0};_ieG% z-yw|*HUN`<3L&PYa+{D+wpuMN*z3a*N&3qB=0V(Bm0^9v>$>@v9D4MlN+0oOU&3UE z3^LR38g93SEJCx`TJ_k>wIEncd)qR&=ZyK^bHeB5G7BW&S0aKpAEvKG3XnTI%lE^Q zxd(8&!wo-bD7?JxCZ6HtuB936$9NrlX{>`r^%1|j)#G()xWIIK8ZNrJE?;tZ9Bfg5 z*7nM-6E54$_erc;4#nEnZSRRhe%-=1OMzzslFBNO;m2=bpMd3CbX z`gf7>BVVrhdo@2dovG5e-fy?JQ*@9ama-qYk5+iM(#C2FW>D)>5`&nbvv=;`1n{fM zuKewTp#Ri-K1`LmD|4Oql8{U}k(3qQ?qe^^ChQ}}xYW!wuXATJ{6QyPx203j?u_}V zVTN=Q2}p(#>i9?4lSPk9$AHm$w~NUdvZkLtxdprGG;jW-}Y62^fF!N!XtOQ?R z*lc(cbkmlUbHUn=bc;2Q1mRoV+7>%ryY*1Nl2Z-ZXkRx1N{=OoB&ji>7W6D-WP=~M|zWnh4o8=x7V)D0k2ICr2zmE}I z7eDr4)#S5kV8ttZJ9d7$i{1Av>P@}e#KMv*_I`(JhpG!*1d0nwPCJ!Rx~>I8Cyw-7 zSAXnBJ71|LF8liyM{nf4-LfBLiRCAHJ#Sh_7?j6)G!nCVAod>Cwp4ufy8H(Gr}^~E zZcXL-l1Gyxg1`C{|M(p5pUWJ%zu?AMw?Ne5S%=I@MAI3UKfCBWCh-9nOBC*MZP&Gl zStWY?b~uR8ULIzhcAn9$!+*S_Jgx8F@w3r-`~Z5bY2y>+#_JBowYDXjw)v6e!5|^4BtH=nZ@#C=e<#|qMbMYJO){I_rh-1D4E7$K z2s-I@zY~XtPxoFMch{8Fnxjmf2-bf1hCkQK-Bm8RtJYvTpHEy>{jbn_AT^LZdpZbA zixyo@Kx#Mp;NJZu!U-6~ET=Yy5#JFf70>kMs-u7 z#g?volW-%<-bUIu!$uin_2FNOmGKI06n5=1 z>~{xn7$Q(8#N#*An*7d8x!->F)YMYDT3z}YsmbiVC;x+&K=IXDHR}`W|7Bm-0?58- zB~Q&pzczQrdOz{Bc^&q@+x!{emobotkqYg_WfnD_vL;QeAYjFAY?`mzQ5z_}heTjt z7b5=C!0vx86l|c${8DA3aH3Ov$#oI%1t&xEKiX*~Gv8!7;5 zJLI6Y?b}mGgJriYJ{iuk9r0l0=8p3FR{j4n!TOi{DkNz+t>*Shdj!%wB58V}2#S(HVS{ zp;oo#L~nVG4=eW|o{;5K_Ef60{90w-ts8s^KYV!@gZQ{Ik0h#o>%J62i3>_hKJdZ> zw59m`1qaB&`YCMD=F0SiV;@*AF31Dp$=S*2&JfILdh32QJ};8(%JGK2%#a@7+JA zD|Qj=1vM=?^c`nw7U-B8PrpyODxWG2yH;Vrgml+xe=8&PM;VC46%R z9HsumLwXH_$>Q9orBzLDES&d`R2w!Q9*khk8Z|J93w9AMTlO_+=AP&nIj~+kiriL6 z$zKIes9(N(NzQ)`cp=zEWa2>BVtnWjNYj4q5YL#=xHb2OJ(e;hoh`oKy?FVZoj7i6 zhh5WodyFA6b<1(R-q>LCwQ%>~%=nJFIAHt)1zz@7Kl&(L=UehYd|t}oM+!O?;?MAG zu%ef02y=NtZETcoi`Dc?gI4@jy(hqMguzt5YUTnDg!U^~ZNL^xo=pA66Pl4-x`3`p z6t8WU>M@*N#1?|^}9a}PW|HM7Bj0m0zVf^`1<_mg0~ zU`r7CAk+ww!!j=|%Gd!gnN6AbB0v8ObgatiBv)U&0=v;ns}rc-z$A~p@H3GP>Ub5e zWQEhhY-)gkHrS*g(}tRC53P|Kyqu2yoGjIP+9f`bc8e=fhE?@gEFtQHPZxMv9OKEo zUnm8R4Qnx}y#c(dP4u<_34GLb5x@^N7M?QK0iq#it#2oKfA%9zVdtW26mtQ4PrPjK zbou$yj2kjM{w=w04E{Z^BXgdw$MwaS7XV8=1gpZDc-%hnHwuC1O&pIIeGprZ1bT0+K z1Xmbp_tqKn&%DVl0YFsQy(22}iZY{{WZFQTU)sf=n~|&#q2J5N7Il_agSnt=Z(G#@6FO7;YAwbXYra3@DSMso=LL*i zs+II2+w1vMiC6fKbxYcv`0NLkRue68nh=IX%t|xcW zT397{zdL3JIL_>T@*)t_8^UY@!mXZCDE@KSV7KiYcTLj)5nm zDt(}iABjB~)Hef50F4|7`J3pB;2^m|YcgRz{xpGQp?_}+P0Wv4s}CNJgbn!q+ne)r zm;lK1R%EED{Fil|x!}M}ZqC*tj@x5dRl2nOq7!`}lDh5Y(VTGr#=sN+eW%)%gNA)N zk!YQrX)w~B3GMNSA=1wC`q}?-$IWQiEWH3Pa~mA-Z$$nmC+ z{#5vag&g%24#San-Upc$G18)!ZyfDKkrGS8wfZB(Jdwp?NvVq`#V^ z@iGM=b0+uwUl*-d96(g7(5cjgrAAe20)8C?bo7Io(S2j^d8?lfZkF>X$Bz~SYNlSM z-KgW(DA<#?S>1ogl2a8t6YN~+a{&M1FurPNoMVGskL-ur2xpT`NyZevdv<% zG<5T%3I2uBY5|<&xw_gavzrZ=sUnT!%MDlCPlM}>xi-7iDc6m5;|RyUOm5cJ4UF>a zpk$K8L2{VIw73s2XNdJ(*NCl1sWyKG=^aOYP!{e%Fv(&|C4#9w)HMDsIuW0p zojnE4YiEG`LVxWKTM@OE%`7Y|+8GwM|9A{DGR(}tiaB}=0sg+Uho*^FI*dL?zZ-cm zxm~ai?>`rFhAy=C7|s1JR3%;dOaGYjZbHH?f=JLj39~UEIcjMmNnO_e>*3Gja=6!no`=BQoUh-yfNXj-;KJu zJi#+fb&Eq>&6u2=9NWb+fPsiBKpZ(}ArdEBUDS5(-p%fRa;c}hEC&P(D}8*29~R61 z<74hOll~u~FkZuX|7%bfmrZQoT5*_2W#I%9Z{ZTYJ;VYW9Hw!l90^?!RkX)-&+jOw z82Y)B4`@adD(x=geDrOSXPy3+^;-f$YIw||f&s7-)?$v~pb2tAw*CK{q-%BC4r*5= zWN>y~P7s_Wm-%VxPMcv1ciR39DM%*y@ro%^wk4MzcRe`>In!+?qKAaQllCoG?YO>s z_`Gpuu)zBs$&+D)FRs4bo(;f6?Sqs6{CsAxgXRrn`UDi>veyU<+#oRrJEZuBu43s;uV{zb5zea**qDp$aFP|j6bFv)$I z@pO@Q>5`vHC-Q-XJGIdZjgq?Dt;bv$C;_)x2;_n6GsLRD~1;`=|W;;3wy z61=Up8q`H;F)(kaR4QAesiozN=aK84HImar!VgO{k0Vxnx&sJULU(JyoI-t|AZ&53 z`_aTppWN`zWW#qZIlO&==s`&D(2a?&ay;Q)2~I=$3cHF1cYqwf1XmLFi6m79{RlaZMoK3G`qP zWq*vUK&{-`+FD!wCc`I<$y_^_oL~tos<^b*!QgT%9Wewf;3uHQ0|Bgb;cMW4zz9}E zE?z#4gle!$rmG#iDLR(UAAz#H8|Z4N8HD6LAUarX;mwTDo@_pZ$h)ADivx9u6HH$J z+NR|DYgkwq=+TOSNM%w)LX5U)gt+24xT8)W(IHTun^+)siA+}duQmO(=;h|f0Ov%U zFnd(|mG-}nYn*5aWmYNB$Mp9oc>DS~!(b%K9M?15qcF|wBMM-ToAb?2?g9tW=H2$Q zuPJV`EjkSy5+s`kx=e;`g_WfxqLe{%#~HH|t*2%p(8N#&UISH>_4Ug%qw5&E38Ekz z(~4e?#Ctjs`LM1`q+3IRy>H*XHD>~$61i0uz^J2l=RQTg?P>R{-iDT0aau2hl!8N| zAXKX&=NaHMt-|1g(tDtiumlMYqGELb;}n`;J-(z3IjPeetr+h}MI=-B2r8BiKD z>(7IX28h2Vfq{YPUO*BLT|5_2ijb@Wie%{sqbI-JnLAxRwS7dM1Yk9B0(kWXT8M)L z{3IlTY=Va&i+l_ab*Va>izwTqsgIjL@%HF)5b&flfPm(WI57;2INu${P(?Z**)0%X zBjVD&v4)f%d;;mFYW*3A{G^1&g`|K_M?wLx0&_3-&0Dkt z3LPGiz$JG3f)U}gQ;7wIXO^8X7d?;Zujdi}3k~_U6lz@yC^!^puBbbZks()^kMrd3 z)E|}}UCuTzjSJq_oUdnKbgrX0X7@wNAz)E&!MlUUJ}4;@VKcu4=biwWFDaJUNxk`B zGfm3WJHZDLZDVk8UUw-Cz1@uL)feB-|x<<^Z79-bKVe9Pocn z6wwj)I328%2D!TRFyal#W0|2?!PyqZ^#M6B4nnHZ(Vhy9W&8&#kpCcoS2G#xaPxsE z_G3}upI?lOrS-IZ8nP|L#l>T}??8hVF9YU%YWa2;;almi%a-opo?s7`XIv8cEC{C+ zKD{f=T5mjZzIk?LyrS!!`OGO@&MwNA7zKR3vY-1SEO=}U6t^F3?PDup(mN^EdK}83 z_D+`${O;5XcA%)Y8^adA!@0&1Oy>5Sy&;fNQ3wiVW4os_QlLe%C_<3nN#6wL3g}XX1 z>Y$$8#%{#&OL56^>b_(uw#_lW&Rjf9AMsF8I=!u!T9nY(Ft3YA`S4O`iZBurPt?Df z_V4zZ&%Iwg&9VrA=^$4+{B) zA3&^>4612^NJOw>iG>s%2&H9Qpt1s&vH_SpJT2pB_XDwLBAHC4Jwj@QQBpDzw*L`< z|1C4I3rL~$u*0*4wLy+)e%L6~lZ zaj2nfNQ2&#W@F{~8NgN~A1xbtyvq?;QnyANQQ$XMc*A6|72xv$E;EM|cqd7sd{;wPhHt}}H#_yVI z1~uqQm-<>xIphr9*tXnW>f=Vom=$|&`WPQB@r@U_E@rSYU|!d28jR&0Jq^B5;Ti*P zK9^%^h78Yj!9Ki0#j4Rso{P=VslD1Gjz?MiB=AlP4co_6N4mGnt zlO0s%VxDH5NEc1!@=B!e&pE(g;~~SH=24iL3FD*KE}wzorfa0le(0X}b#4qipUfzU zq!%w<901M#(My3~3WuWS!|Fbs)=~H|$cjKZ_ZVaVAnwgf;@mh_vD)i+cEa@DnEuCe zjU*dF@h*le?-4jt(OIncdZrlMCRsNt^Y!AXSwV-^O*z@fDCc6dDvWk67%S~lEDb7@ z#3+apO!1Akpsrw%qU63m9;B}09x2-mmbJ!WH~U4Wh0c+xiFmlWA6DTNXDH_N5D8E9Y7Z#extIY8SLpF zH(PPR&!s7W8Dx*!y!w@zgF8sbVbVN4TjAIrg`I3wq!P^afVDyFV&NJFx-`JV12Kr< z4mtqNg??o&_5JVA4FG$=2_?Y@5Ll(4@8s&*2r9DYNN)pVW%E5xJ6?{Wthfi4M31t&xv{ZrN}b$PX(e!L09krY6l-@pWKWR{_X-D8JbI*fh`x1}jkpJW%&xy+3xV8e1CX zJ(kgF1S?^-%~NBGOB6yOp%$0ZEshiDBljI^v-e{-?aQ5g&~AP(Kp&SGGh2`P;*>D( zb*MlCzT#!{Gv&q~a5|RW=(^k~pX;)rjBsagp&F57VRQ-K*;h5Bmgn_gYy*)rf6U8j z9i7A^WP#>VDSA+!oWien1b+n?cN=oren>^33U6P$F=YuHA{!HzXX z#!p}cBB^zu*&7GJs2{|Uf!Q9}Se=opQqmaA|H0f_M^(LcYyTh;ihx0=w4xv=p;A&J zC?-gwG)R}E2rNKAL_$hJ0YN~dOS+awsVE3acS(0FU;*nlZ+4x1&U40i$8WrUynF1i z$McNsUiH0W&TG!=Ga;(l1go0JU>-zT^eBz>07_RQeeA9s51rR2kB6wNZW~=(02Xn; z&lao4HUK~=3nu2Mgso)gZr?>(z;v?^8%71Ibd?sqi^Wa90NW zNdyOia{NTNCT+LHx=UcdHw?nTQ|o}>Jq=Jxu9(d}(Ul)EDCDq!RT8lMVF8}=F8L2J zufWLJ`F`B>BQg0df&z$Hu7c$SMMYD{0tBuThL{fIWrAP@O}tgU6!${g9t`5>5U!g= zEy7^RJ7bNYGobYsC1=x7^FdE>{xXcc4dX2xJ&atDV19G9^?+t=5V%$lVGVi7zY4ut z{|0xvA|gssORno-zV%Y00TiFOVU+?bSF8$>p@|{Pg#(G0(%V@a@(00@uW18Q~;{(Px0Dvq7 zGFWl5X3~xh?+2A_kJiR@*EEnf%NahYQf*Ofd|AKZ3Qdf0F;i92u6NsC4Py)Vu?I&x zO8G91EM@sgO)p*G9mwGdId=J<2IkV(z{VW=5zccTLRYrV0ov?+ll)tV{x#ebVeAIb z4bz-00p0zaiURm{sIeVJ`X)nS21}LQsp1c7gWd2~@|4n2(IN@xXN7V?S$8l}b1qY@ zBkqyq@OKw*@L%Xr ztM?^-0O|`lY=6p0E`=Ig@PV1~{LCQ@Tl#iMgGaGR0LH2sy5eRNO@U{nzIYW?CX96xh3@?AIW*V~a{KWgz4gLK<3|=k^;QG60GtpG4kM%LwYU>2v3l-^;h5#&~V}?}7-Q z^iO+cLh&5k!4tTK{o`3x;`8p^np^L(_jqI&Hm5%dauv9;sCvXwR~zSCbpA?-o!2Zh z-UgQ~V@RY+>^z&(RR}CXwCi}>hLbfnJC+Zy>AJd8FpR|ci|`=mC=_B$pWdB-cG&X= zg!YLINaC|!xIKK~ad+s>y(%f|()L1qL)la4kdy{qcjFkI_w~z0sP|&RW!`O-`E1>O z3RBnSUw%p4lH0?6EFy@r2bwq*uQFTNs-LHq)y0 z_H8g~-A7Io7R0uNtbP-gR?4Yckt>f?eV{!OnNT;ss#l#z%lNVRXOz7H%k4f;k1~;4 z1Bn9zE+;JN`N4~`B-EImlhXlCr=JG4r5u1Dx`9GMMBYWW7#uV_RYN<7xFcxQeKF3d z+YFG2%3XO7I}q+2Ieq&sa3NaX-Gaw+7!k`r=26OHt3uv4ExYHuRqMn4_LTteLi9dI zC#R`*Q97*vBS82rwECQz*q<>aBCsSnj}JGj?=q!;R8lvKq#UFZA;1BAl1V55-G%J{ zAq`@>a{DKS8J-f9sQ_~zVho z#mgHN$W{#&anoAAL&!qp)aR&vqZN34D~-B4N+{A94xp*1T0T2}+vzb+$0%a? z-r!a{c8nIyR%!7zY85xw7y_+GH@3gyGEVz+;N2{$D3J#yKe2s+K?w^M^4NWP}NHc|r3wNE9ePK%qF~asGJl8#tmp41|i8 z9LS^sl3ny1mH<_;9FJLh@0y|_3C4p>V4?)v*)CTXG~VFt3uB012NyGaz%1gpA!FOX zdcE-17ZRXdK(&I7vIUA}hP!^dT_oKu<`8VXsSuu3%{U_u1R_;^ITd9JL08@OGgkK! zb=R4PBH&K*eMqH2-e_QK$%i@YY>ZFCQ=Trg ztB3QY9X=-#=aEz6XvaqFsnm-<#Q+ zY&VcHzO+$+(2?6vH{+eNfi(!>qs}*G=o66_o4wcv$b;=SQs{)({VVsvt@U}^U4w_F zw0nt?=j?||7KEQU4+hmQE);g^OII~VxnNhZ3H^dS`rD5sqje?Or7Y<~T);tCm)lL{c+%$RW-O{Hfaw*%Mq8s3!we+F;J?>?N<@WRt*A z^i%owKx$o_T{7&iLp3|yp7j$U577(PVURgP9Ly(XPV7Sxnum6bvx{eBy z1w2-SmO6woZO(W%C0($~2K2zal$WwUZ8~TRrP;Q4Dd5$vWZ7VNgvf88c|GuM`_J9W zmklcbzx)I|Kj)cPUtix&4HSD%zK>^tmn&0~DS>Ota9ILUaWtt5QbZUjJj^N;41s+8 zi`8NQV|0>$nbBYw|Kph??e2dhTLQ2jL~^6U?Hb1+$lCEg2B$A!R}Fw}a)gMiGwJA< zr~C7%!;mjHd2ak+^@MKw#vt|GX4@;(UYXEwIT>ZXU^7}ww|7fs;nv-CVS=WwmFD=h zOCphH!snZ_3b*23RF*1+K~a4bcJ2yyU}ra65{x_-&CJZw)(p{`+?9FbzG)Wcw)CZJ zCchD4P#VqKIS*LaxDj_S7tth|) zQ7dHihMKQIkG{;Ob~`{&aEDLcr?o>+O}OFit!?ef6HrG#bz{<@%;4=N&?{*qphEe) z0SL?4$Yok*<%;(Z-KDtJZy`HY-j(f#6^Nn<`G4rI)#gq#r0`2D@OGw=aAb>zl6(-e z)KqGcKcPa4i*^Np%zIfwLN+$zu0D5oRa=rnczn{R}0077T(S;8KSf$RXy5De5`SfUp^Oe1~ zFQKmUkwIr|*rn5%BPWv9&oi`N4Yd_EXf(dQc#3Vy*-6}PW0DO9>NS@vZk<1J4EM9X zU`vG`dd6;~!yrQ#N1(9VGL}p?e|d4kQF^Cnn-8bj+S{wO)eGGZsP5U2HTV|dPl#3N z7-^B}3+Oq>p-iE_!#xJ*|vj51=vX=&_}#7RaY_q7z9}YHoG}WHU%B49U~q9KMVTW1^v58Z}V zFSr>4;|8F?1pK+?a2i9z&n%_}h5z76W(P>Ak+Sdx%;g5&G8#;mcc)2snty?rWF-&Z zLOPl1I#((O4FZ6-l}rxcExVqk(jg_}j_y-bP|GK6=?A{rDg^wKkPrWCc3-;y7^-Pd z)Z0NEfdoW%MGMOCE|8vJze8Amb3Kv(>5^qQlkRoGSDu`e$>Sbxu##UO9{kFJinL~6bg3hw(1jZ3cv0nRnoq9GpK-7Mux|qxfo-uj zYrFEF>Rw?zkVJG2v$ns*-(QL?|237P>@R$1eUE#F6d3)qi+`zl#L?6jE+?`O^3CuH1JPD35nM70dS!n)g7-DA~Kgy@%FDWgpMXl*ERpJ4ReFO>+5Tl4>i zfwYS}EEg|coJdW2(F(zp!!JcS=(q|gJAMRhC6MdZE(w|c;(}1-WV@Rlw4y;hLT(cM zX#`u>;o(C|?xS7{JTADivk4stPvYWf_|ZH7ckp8Sfr=`zo(?;ElIY zVOAYAt) zdg=zsq2SpF40>F{Lx7cCTsdonj!T&Fd<2D7_aPC3(MNY?0iYU|3=v7Cg5kz8;2v^o zE@l^lvH~dO01h)an_Naig$$q0$N6KQ z53Fz6W6Pe*ekiksAwX26zwlNB{l8m7@pKe!eSh)%&A;Mf;`hCPIdu_BHJgNmu2Wz^ z3iS=7YY!%kTbu4k79y%qbz1$)`51fG@d-9dZn-*wvkfyhb5WAMEb;1`nx34K?zho7M~Z?_`NeE_YS+(NijCLk>55;`mn6IU?imnT5c zgZ-@Lmaz@eQ$Pb6pp8zBx>iWGgPZV>z1DJAdrDkJdRRAs3vb8 zM`$u6h5@3|vl#4!!+CIo(*-QyphzJZG~NtNS9!X}9qwutm?|zV!(Fl(H}7Wh(GVq_ zbtc{DyqGVQ%Kx^Lvbyy`tp>^ks;Vd0aSbVs@4-xSz~zdcFK6D27B;5h)p4m z18ZjrdQy;PdDVWQFX&4I)~B!0Rsm*J3R;rD13uQ zW%&qt0P0`!aGRN%x84!%Q`w4AM-(HZ7Y#2WYGSA7Luf>u1fGp?7uhqAs?qMtn|?%F zmEewY2}{dBK|_vGc#4IlEhi+POq3VF;&!3N9Y6aX$>t~`Xh6a`nsfu~1&`Jo_f?*( zdmmCPv++?uB*WM!^v95lgn&?Muc5^Fc6|dTNIpY5_^SOsXWiY`t}QVhBbrKwJd|J= zX!KCdVK9Z*CLN7|v^Ty)gcHt;C%-kP+pNwD=|n@T{Hfdn7Sy?$i>b0;w3)Z6(1OM& z>8h+uw$;iVsr^ew-l@Eqr_Gb9BKc(9&+rK!L!-Wb0eeuN^Qzh+^%2())U9pOM(k(= zbIe1q%K6uxK9n5^xP$yw4H&A5g%^&L4UA(<}~V zl-A9ztvSJ>%IprlhFDQE@y)2*io1rZ)e7rH)233eU1Jf6#VAm=CIAYH%bi8o zI<`rC`CGoB`-BW@D-c?b*@{o2_Hg#1zwqIO^3$$oLhZVpf!}E7eho`M~ z`~pE4G20l5=Ydp}wK?<8Hm<#@I7(nN{M#n>|7$+B$9wgua|x&?wOHi^L`n0`4PvNO z+6+oed8nl$1G8J)yNjf>OKWTE2pBl9J@-fut`MDZAwfYzReX?nZxG2Nz>+Z-M;$i) zm3>e)AXFd~R^w1999kHJ`ndyTyz90DXzdc}pUa{P5l+s|aVd=1aSF8G(I^_b(l;Iz zl9S2d4v4{wz(2qmbJ4y4!?Mt0L}L~Z)r8?>Vu0*d*?+)nNZxv+!3v4C>L5Gh;|ft_Ff{$^+7BW_n}0jn>o0HmI#z}?%DS5Mm5l~QrV1q zjCx6sj*X3PMs+X+x8Wn30D{vx%LeCc-)aO<$HP{j32PEKUn+kLa3}y=6;Ip?+#~^V z+7^&L=qw)aqb7-d0PdTE$O)F;-TjsQsPY!le-U{JzN0*FFa5H1q5g1eW@zq=*_a># z`U-&QlwmZ&@JqzK*Aw;GJRca!bQ4 zPguaHXgt6TqugBe!L+PfJ0E32flcM_jOP=+)}$R}+f$Vw^$n8s%%7iFT+}4$cJv?l z>bjpegKd(i;2#jyS{F6y>-^vP<&SrCcc%lh*#c0#&l_~Xf`bI2wl}BI9$3jo0u_}1 zkQk8!s`rhsKPt+sJZ?CYk)db`LV@QEXyHx4@ti0LEKqac%!U3cyz~)`$#IH*G)Sv|-eCm|AV@w#6{%Xa@5^9RSP2bw zlZEDkN@|foq8r@!UR~!QQUqkW|H1f9A#00zLB<+r@IKNE$7UNq@znFz z324|rgt|@|^ab7sgZg9&s)a&1$u!4aJ?s8ER9r$DAk#ERFA)gwZVtD79R^Oouw>#K zpNF93Pr?203$DSlH;w~N3>b>F!mMU5;ss$Fy2QEf4Wq%`lmbs%u23t>WYHf6xvvcK?NjcZLo78`0(IX-TTIlJvX zAEx^5hP<>Pg9Aq?{gW->lrInE`jw3e{4vsaN^7yKH^uAt-y~^|qWnE3BI6Ym6stV+ zb{LZBmo55XYThc4GOvR8f{5u5e+2}Qqnr1O*RCHfwFr8Y?xXTADkNv=Vyi|UBb|~; zxHkbsxu6-I75fd@MHXso!R}0BUp7bWJR(8o3H0owqM2Io=QGxlu7eHf{O(jb0*VZkRs zN6uawIhqUTXoO}(x*m+|nX0u%VLk*&4TxA+Xi(=LW(Xfy2XziQ!o0F5CJVr^ZNiAH zMA+lo(Cqp6OCIzrfvT_72Zt2&YWo?z#P^*WN5j)lLzy;=FFD1?3PLuE%LMx_+YTjU z;5+;K(D&p8;?tj~I`DwuM^33;V&5;RiSwORaDmJ=uW29lytD{R<|DAxyr3>U+gQAO z?m|v~hUm-tuh_J#YpOyPZY|xi`8?ZvX6I`6b~|}9_el0CI1A}K+>Z(C^jqOe*B}4x z>y#1&A;|Z7D{6zeIUs1>32El38%Uood=Kh@=d7OG2Ejw9+3qT?@H9waFze zidr*JvJDhEq(f@)cFYSrgXA3cC>;UfN$I~1dT0@M!LfshA*;}DJx;YFcI7d4Th z&K?l94wMi}!0Usm(G9dPq}D-hs)guHP)Z}$qL7M4f%oh4M*gVr14V0q350*G4si&! z0XkkGGEWqp}+S{ zf-f3baeRx==MI@(-t3>MIz*t6yJX%!D0NB6AATvvSb1c=>1O!R6SI?*+n?j4H~y8m zc>8fN7Ob@^{Cqjivo2}2Zi?9E+ojW6=KFpt}ZevJ^ZbyG(k2~J%mgKtqn0pGH&CLaTra-m-d=2C3EvfZs zH9-HMNHHAgidCBP|fgnfnk3K}CXCg~-C03Aarg*?TEE#bi89CyT-jI>FGV01N zrg*A<*yz=b)JBsm(=cF=|aI1@vtU~fDg*#GOPuLZ2j@`puza-MZ(2plK#$!t6 z_bwh;vRNzME~@pB@XH+Lp{DiP3Iv>oz5Rb;4%~;?G;i_@iU-LZIiFKApF zv3FXpSRLN^ZB-r;5}~Xv?59iisZ4dWKJP4aG~iKb2VbIlE%85$$Gsbnc>T}n!Mm+< zX#_;MV4uBWHN5r?pG|=scx1kQigl(sxsTQ3r@Q3SLGjYXUzm|s=QlR~6ULx1%M-DA z%G8#?niQ}6lRrZ%JCXEMRg~8&(Bo|7XH_q z+?~jF0>Z-#)?gZZ=0`(ZBFz`H54(S|8z1izsWPm41U_eh*`bYTyL}sJK(hI7ujDDs z<9~u~e_i+5pEkuQ!geznT)i~)xY7Op1as$`x?mOnT+KheE%nB=m#v3skE5vw$1t32<$r`)F7PJ zplDq{UyTv_mI>vZ@@CRvX8HSbZenVno_gCWL-iRqmJA^J|Msbf$SUVl4`y1IsZC>x z)zR=lo+>sh9~FgA$$YF|Zyxwk`kZ*3DU{qM$z8b=aa6y1JB8G$tzf={h9Dk|lGPiqZ1{HZVtHs9K;xU+_U#hWu!f&<@EZ>Za zSMiuz&f4jj>V*M7w6Uzec|Hdhu?=)Y!m5ngR3prfPsXqraMR`WJgpk3e)cN&=O@+= z@vPw;a`3LOoa<rs{R2`6o`D>8yW=K#SxblCA|DmaUI{Ymx9DY4ev?2S_lsxFf4e^Z% z%4nCtN2z=FDT_B49Cu2nCd9ZiK_vP*a68*IQ7Fv;rw~(skuP5aUOJe|>^_&G>~;D# zecRoC^GYloD@u%--`#OjutM7*I7lN*8Y;nAR;WjgWK2df_X#_}5?fx#7GQX{xhv9&Wx?CgmO}-iC0| z?DXFMH!#OD%ilne=wtgQLdwT!9n!ady(Xbxb0KW&Ch3fOnCPm*?e&<2BWFvNF$~xG zwOLD_CCzQ`T!SG#A9K-=9^PoV`<1Nb=SKhA=WW||G9V%&%cDZy6ZdJ3*j`JDH3Q@jea)OB1 z`R~8H;R?^CI|yyjz&}$WOcAo)zO@W;L0$8YeLrvKW$%{~U^VTy&-v6*d;K$_;J=@xeLL3|v&k82SY)}6a@yg4`ahCS)^_J*ABcQ3 zu|?<-n_uVpx)tnUtm$G?us7@n={pMli-+zW;#u<=6L*zbJ^RQd^5=)X=D9O2? zTx+QJ(;rN}$@we9XQj;1-NW)tmx-~-tuQL$rN>yE$3`Yjzc<9KjD^FSaT~|KF5ld2 zw@y%?VD~wAs*I-;dTa;pWrN5wxLHcHLx;H6?YDE%;MB z?^2B&RldySi#tb#3B6a%IUC+M!MpjtzO2u|e1(%nQWNF`$44#megr9w&^-rb$Hr1A zM9+B(RFWhcj-^s9zER&imneMJ*G|>D>JInMlM!ZCeMJuTnE&OoqIc_huc)fJm))U| zP$o86+(BRsGd<7tIVj{Lk8HAcYV>;6QJsv|BEQ<)qDY?i-nlnl4;OcLf4QRT;7hk@ zN~P%gK4$93|NioyC41Ua&mLNH@-_{l+l`J zM~b0Hj`S=zr*!MGi$Z%8?zx?%QfZ=<-SK_*bOk0fPhm1tthq3ubXVFRMNeoZW3FM| znuLE1U#%(BmA94t>rps}Z5sFR=e{Q>EY{Pr(p#BM-hI4}n)Cv-ysWo!U9rXMp|x~o z?%)|ht;>r;`PfhRlatmfjd}W)X~4>p(h^V?6Q`~HPF`PjKx8y|lOUMy7|b|*t4~|| z)PMPk*KsoIDNjD`-xk`t)i+#R@fEv%$k)B=0iSpue=OgDjeLT3)AfYQtY?WP#k+o< zo2Dd`R#16YRY<+8qH>XP7a>$CVzYMerdx#k_mZPhPfw7t`8^3e$t3&CZ-#=Rg)65( z_dvefB^~R6qnAawE(=UhO2j0OTzmM@Gqsp0HQ_qGwrE|zDS?SYZ$_48@hfwx<$zfEM=T`YTC`0~!1{Y|O^|lQld+=I|LJX%&qZyobDb<-|W9I+DMkD_^6>bWl{x zGgeUg_I}N2QM;*qNmZBKoArN0os$3EwN~kR@U!foZ~ycQp$SSt`Bm

7((R_ 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

  • *dG_35F#-GEIr>;`xM@({Vw(oIW8sE>| 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ⅆA6KB=624VKOY?F3ubpqtB1@o_4pv4Y=n@@ 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 atEukdlU4b91H3kX*9rGiZq=XTQ~m?U4!}16 diff --git a/package-lock.json b/package-lock.json index ad7da916061..9944995b450 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "supabase", "version": "0.0.0", "license": "Apache-2.0", "workspaces": [ @@ -46166,7 +46167,7 @@ "@sinclair/typebox": "^0.25.1", "pg": "^8.7.1", "pg-format": "^1.0.4", - "pgsql-parser": "^13.3.0", + "pgsql-parser": "13.4.0", "postgres-array": "^3.0.1", "prettier": "^2.6.0", "prettier-plugin-sql": "^0.12.1" From e2767ca87a6855eaf5db3cd252d06694a8d050c4 Mon Sep 17 00:00:00 2001 From: Yann Aufray <70212709+yannaufray@users.noreply.github.com> Date: Tue, 21 Feb 2023 16:53:31 +0100 Subject: [PATCH 094/230] Update nuxtjs.mdx --- apps/docs/pages/guides/getting-started/quickstarts/nuxtjs.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/getting-started/quickstarts/nuxtjs.mdx b/apps/docs/pages/guides/getting-started/quickstarts/nuxtjs.mdx index 366120f35e9..f9259185926 100644 --- a/apps/docs/pages/guides/getting-started/quickstarts/nuxtjs.mdx +++ b/apps/docs/pages/guides/getting-started/quickstarts/nuxtjs.mdx @@ -126,7 +126,7 @@ The fastest way to get started with supabase and Nuxt.js is to use the supabase- - Next, in your Next.js app, create a file called supabase-client.js and add the following code to initialize the Supabase client and set your project's credentials: + Next, in your Nuxt.js app, create a file called supabase-client.js and add the following code to initialize the Supabase client and set your project's credentials: From 1f9158342d51a672a9a9dea4775e4d5dc8eb340e Mon Sep 17 00:00:00 2001 From: Onur Usluca <51825926+onurusluca@users.noreply.github.com> Date: Wed, 22 Feb 2023 00:55:30 +0900 Subject: [PATCH 095/230] docs: fix email form logic user management tutorial guide for vue 3 Without a "required" property, form will try to make a request for empty string. --- apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx b/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx index 5480df2d4aa..0cbdd921ca2 100644 --- a/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx +++ b/apps/docs/pages/guides/getting-started/tutorials/with-vue-3.mdx @@ -99,7 +99,7 @@ const handleLogin = async () => {

    Supabase + Vue 3

    Sign in via magic link with your email below

    - +
    Date: Tue, 21 Feb 2023 16:14:28 +0000 Subject: [PATCH 096/230] Fixed spelling error in performance tuning docs --- apps/docs/pages/guides/platform/performance.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/platform/performance.mdx b/apps/docs/pages/guides/platform/performance.mdx index 24d57869947..e0228809418 100644 --- a/apps/docs/pages/guides/platform/performance.mdx +++ b/apps/docs/pages/guides/platform/performance.mdx @@ -114,7 +114,7 @@ Queries which are the most time consuming are not necessarily bad, you may have Generally for most applications a small percentage of data is accessed more regularly than the rest. To make sure that your regularly accessed data is available, Postgres tracks your data access patterns and keeps this in its [shared_buffers](https://www.postgresql.org/docs/15/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-MEMORY) cache. -Applications with lower cache hit rates generally perform more poorly since they have to hit the disk to get results rather than serving them from memory. Very poor hit rates can also cause you to burst past your [Disk I/O limits](https://supabase.com/docs/guides/platform/compute-add-ons#disk-io-bandwidth) causing significat performance issues. +Applications with lower cache hit rates generally perform more poorly since they have to hit the disk to get results rather than serving them from memory. Very poor hit rates can also cause you to burst past your [Disk I/O limits](https://supabase.com/docs/guides/platform/compute-add-ons#disk-io-bandwidth) causing significant performance issues. You can view your cache and index hit rate by executing the following query: From 0146540e0a635b2949de21bd7beba4011cbbbbe5 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Tue, 21 Feb 2023 15:06:00 -0330 Subject: [PATCH 097/230] Update pitr price --- apps/www/pages/pricing/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/www/pages/pricing/index.tsx b/apps/www/pages/pricing/index.tsx index af6bd0ae0a8..bb359df65a1 100644 --- a/apps/www/pages/pricing/index.tsx +++ b/apps/www/pages/pricing/index.tsx @@ -136,7 +136,7 @@ export default function IndexPage() { name: 'Point in Time Recovery', heroImg: 'addons-pitr-hero', icon: 'pitr-upgrade', - price: 'Starts from $5', + price: 'Starts from $100', description: 'Roll back to any specific point in time and ensure that data is not lost.', leftCtaText: 'Documentation', leftCtaLink: 'https://supabase.com/docs/guides/platform/backups', From b8670c38ea957033e383f860bb5d7edd39cc511d Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Tue, 21 Feb 2023 16:08:39 -0330 Subject: [PATCH 098/230] Notify users when their db is in read-only mode --- .../ProjectUsageBars/ProjectUsageBars.tsx | 73 ++++++++++++++++++- .../LayoutHeader/LayoutHeader.tsx | 38 ++++++++++ 2 files changed, 107 insertions(+), 4 deletions(-) diff --git a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx index a7d3134706e..4e29da3c019 100644 --- a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx +++ b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx @@ -1,5 +1,14 @@ -import { FC, useEffect } from 'react' -import { Badge, Button, IconAlertCircle, IconInfo, Loading, IconExternalLink } from 'ui' +import { FC, useEffect, useState } from 'react' +import { + Badge, + Button, + IconAlertCircle, + IconInfo, + Loading, + IconExternalLink, + Alert, + IconBookOpen, +} from 'ui' import { useStore } from 'hooks' import { formatBytes } from 'lib/helpers' @@ -11,6 +20,9 @@ import { USAGE_BASED_PRODUCTS } from 'components/interfaces/Billing/Billing.cons import { ProjectUsageResponseUsageKeys, useProjectUsageQuery } from 'data/usage/project-usage-query' import { useRouter } from 'next/router' import * as Tooltip from '@radix-ui/react-tooltip' +import Link from 'next/link' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' +import { executeSql } from 'data/sql/execute-sql-query' interface Props { projectRef?: string @@ -21,8 +33,10 @@ const ProjectUsage: FC = ({ projectRef }) => { const { data: usage, error, isLoading } = useProjectUsageQuery({ projectRef }) const router = useRouter() - const subscriptionTier = ui.selectedProject?.subscription_tier + const { project } = useProjectContext() + const [isReadOnlyMode, setIsReadOnlyMode] = useState(false) + const subscriptionTier = ui.selectedProject?.subscription_tier const projectHasNoLimits = subscriptionTier === PRICING_TIER_PRODUCT_IDS.PAYG || subscriptionTier === PRICING_TIER_PRODUCT_IDS.TEAM || @@ -59,6 +73,20 @@ const ProjectUsage: FC = ({ projectRef }) => { /> ) } + // [Terry] + // temporary solution to check if project is in read only mode + // until we get an api endpoint for this + + async function checkForReadOnlyMode() { + const sql = `show default_transaction_read_only;` + const connectionString = project?.connectionString + const { result: readOnlyStatus } = await executeSql({ projectRef, connectionString, sql }) + if (readOnlyStatus[0]?.default_transaction_read_only === 'on') setIsReadOnlyMode(true) + } + + useEffect(() => { + checkForReadOnlyMode() + }) const isPaidTier = subscriptionTier !== PRICING_TIER_PRODUCT_IDS.FREE @@ -127,7 +155,6 @@ const ProjectUsage: FC = ({ projectRef }) => {
  • - {/* Line items */} {usage === undefined ? (
    @@ -253,6 +280,44 @@ const ProjectUsage: FC = ({ projectRef }) => {
    )}
    + + {!isReadOnlyMode && product.title === 'Database' && ( + + )}
    ) })} diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx index cf8789a80e2..bfb11815157 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx @@ -11,19 +11,43 @@ import HelpPopover from './HelpPopover' import NotificationsPopover from './NotificationsPopover' import { getResourcesExceededLimits } from 'components/ui/OveragesBanner/OveragesBanner.utils' import { useProjectUsageQuery } from 'data/usage/project-usage-query' +import { Badge } from 'ui' +import { executeSql } from 'data/sql/execute-sql-query' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' + +import { useEffect, useState } from 'react' const LayoutHeader = ({ customHeaderComponents, breadcrumbs = [], headerBorder = true }: any) => { const { ui } = useStore() const { selectedOrganization, selectedProject } = ui const { ref: projectRef } = useParams() + const { project } = useProjectContext() + + const [isReadOnlyMode, setIsReadOnlyMode] = useState(false) + + // [Terry] + // temporary solution to check if project is in read only mode + // until we get an api endpoint for this + async function checkForReadOnlyMode() { + const sql = `show default_transaction_read_only;` + const connectionString = project?.connectionString + const { result: readOnlyStatus } = await executeSql({ projectRef, connectionString, sql }) + if (readOnlyStatus[0]?.default_transaction_read_only === 'on') setIsReadOnlyMode(true) + } + + useEffect(() => { + checkForReadOnlyMode() + }) const { data: usage } = useProjectUsageQuery({ projectRef }) const resourcesExceededLimits = getResourcesExceededLimits(usage) + const projectHasNoLimits = ui.selectedProject?.subscription_tier === PRICING_TIER_PRODUCT_IDS.PAYG || ui.selectedProject?.subscription_tier === PRICING_TIER_PRODUCT_IDS.ENTERPRISE || ui.selectedProject?.subscription_tier === PRICING_TIER_PRODUCT_IDS.TEAM + const showOverUsageBadge = selectedProject?.subscription_tier !== undefined && !projectHasNoLimits && @@ -63,6 +87,20 @@ const LayoutHeader = ({ customHeaderComponents, breadcrumbs = [], headerBorder = {/* Project Dropdown */} + {/* [Terry] Temporary until we figure out how we want to display this permanently */} + {/* context: https://www.notion.so/supabase/DB-Disk-Size-Free-tier-Read-only-Critical-f2b8937c13a149e3ac769fe5888f6db0*/} + {!isReadOnlyMode && ( + + )} + {/* [Joshen TODO] Temporarily hidden until usage endpoint is sorted out */} {/* {showOverUsageBadge && (
    From 2f3c67a56e243477238b3e7c24f7cfa8d4b965fd Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Wed, 22 Feb 2023 09:06:00 +1100 Subject: [PATCH 099/230] moves apiKey header to graphiql headers section --- studio/components/interfaces/GraphQL/GraphiQL.tsx | 5 +++-- studio/pages/project/[ref]/api/graphiql.tsx | 7 +++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/studio/components/interfaces/GraphQL/GraphiQL.tsx b/studio/components/interfaces/GraphQL/GraphiQL.tsx index de419530f14..f52a378157d 100644 --- a/studio/components/interfaces/GraphQL/GraphiQL.tsx +++ b/studio/components/interfaces/GraphQL/GraphiQL.tsx @@ -44,9 +44,10 @@ import styles from './graphiql.module.css' export type GraphiQLProps = { fetcher: Fetcher theme?: 'dark' | 'light' + apiKey?: string } -const GraphiQL = ({ fetcher, theme = 'dark' }: GraphiQLProps) => { +const GraphiQL = ({ fetcher, theme = 'dark', apiKey }: GraphiQLProps) => { // Ensure props are correct if (typeof fetcher !== 'function') { throw new TypeError( @@ -55,7 +56,7 @@ const GraphiQL = ({ fetcher, theme = 'dark' }: GraphiQLProps) => { } return ( - + ) diff --git a/studio/pages/project/[ref]/api/graphiql.tsx b/studio/pages/project/[ref]/api/graphiql.tsx index 4e11726744f..8b449994aee 100644 --- a/studio/pages/project/[ref]/api/graphiql.tsx +++ b/studio/pages/project/[ref]/api/graphiql.tsx @@ -46,9 +46,8 @@ const GraphiQLPage: NextPageWithLayout = () => { return createGraphiQLFetcher({ url: graphqlUrl, fetch, - ...(anonKey && { headers: { apikey: anonKey } }), }) - }, [graphqlUrl, anonKey]) + }, [graphqlUrl]) if (isProjectSettingsLoading || (isExtensionsLoading && !pgGraphqlExtension)) { return @@ -70,7 +69,7 @@ const GraphiQLPage: NextPageWithLayout = () => {

    Enable the GraphQL Extension

    - Toggle the switch below to enable the GraphQL extension. Then you can use the GraphQL + Toggle the switch below to enable the GraphQL extension. You can then use the GraphQL API with your Supabase Database.

    @@ -81,7 +80,7 @@ const GraphiQLPage: NextPageWithLayout = () => { ) } - return + return } GraphiQLPage.getLayout = (page) => {page} From 5691531290c7c70aec1a9a26702c7bc7b3350255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Gal=C3=A1n?= Date: Wed, 22 Feb 2023 02:26:56 +0100 Subject: [PATCH 100/230] Docs: improve python client docs (#12532) * Document insert functionality in python client spec * Document select functionality in python client spec --- spec/supabase_py_v2.yml | 354 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 348 insertions(+), 6 deletions(-) diff --git a/spec/supabase_py_v2.yml b/spec/supabase_py_v2.yml index a3af18a5acd..486e429f3e1 100644 --- a/spec/supabase_py_v2.yml +++ b/spec/supabase_py_v2.yml @@ -281,18 +281,360 @@ functions: name: Getting your data code: | ``` - r = supabase - .from('countries') - .select("*").execute() + response = supabase.table('countries').select("*").execute() + ``` + data: + sql: | + ```sql + create table + countries (id int8 primary key, name text); + + insert into + countries (id, name) + values + (1, 'Afghanistan'), + (2, 'Albania'), + (3, 'Algeria'); + ``` + response: | + ``` + APIResponse(data=[{'id': 1, 'name': 'Afghanistan'}, + {'id': 2, 'name': 'Albania'}, + {'id': 3, 'name': 'Algeria'}], + count=None) ``` - id: selecting-specific-columns name: Selecting specific columns code: | ``` - r = await supabase - .from('countries') - .select('name').execute() + response = supabase.table('countries').select('name').execute() ``` + data: + sql: | + ```sql + create table + countries (id int8 primary key, name text); + + insert into + countries (id, name) + values + (1, 'Afghanistan'), + (2, 'Albania'), + (3, 'Algeria'); + ``` + response: | + ``` + APIResponse(data=[{'name': 'Afghanistan'}, + {'name': 'Albania'}, + {'name': 'Algeria'}], + count=None) + ``` + - id: query-foreign-tables + name: Query foreign tables + description: | + If your database has foreign key relationships, you can query related tables too. + code: | + ``` + response = supabase.table('countries').select('name, cities(name)').execute() + ``` + data: + sql: | + ```sql + create table + countries (id int8 primary key, name text); + create table + cities ( + id int8 primary key, + country_id int8 not null references countries, + name text + ); + + insert into + countries (id, name) + values + (1, 'Germany'), + (2, 'Indonesia'); + insert into + cities (id, country_id, name) + values + (1, 2, 'Bali'), + (2, 1, 'Munich'); + ``` + response: | + ``` + APIResponse(data=[{'name': 'Germany', 'cities': [{'name': 'Munich'}]}, + {'name': 'Indonesia', 'cities': [{'name': 'Bali'}]}], + count=None) + ``` + - id: query-foreign-tables-through-a-join-table + name: Query foreign tables through a join table + code: | + ``` + response = supabase.table('users').select('name, teams(name)').execute() + ``` + data: + sql: | + ```sql + create table + users ( + id int8 primary key, + name text + ); + create table + teams ( + id int8 primary key, + name text + ); + -- join table + create table + users_teams ( + user_id int8 not null references users, + team_id int8 not null references teams, + -- both foreign keys must be part of a composite primary key + primary key (user_id, team_id) + ); + + insert into + users (id, name) + values + (1, 'Kiran'), + (2, 'Evan'); + insert into + teams (id, name) + values + (1, 'Green'), + (2, 'Blue'); + insert into + users_teams (user_id, team_id) + values + (1, 1), + (1, 2), + (2, 2); + ``` + response: | + ``` + APIResponse(data=[ + {'name': 'Kiran', 'teams': [{'name': 'Green'}, {'name': 'Blue'}]}, + {'name': 'Evan', 'teams': [{'name': 'Blue'}]} + ], + count=None) + ``` + description: | + If you're in a situation where your tables are **NOT** directly + related, but instead are joined by a _join table_, you can still use + the `select()` method to query the related data. The join table needs + to have the foreign keys as part of its composite primary key. + hideCodeBlock: true + - id: query-the-same-foreign-table-multiple-times + name: Query the same foreign table multiple times + code: | + ``` + response = supabase.table('messages').select('content,from:sender_id(name),to:receiver_id(name)').execute() + ``` + data: + sql: | + ```sql + create table + users (id int8 primary key, name text); + + create table + messages ( + sender_id int8 not null references users, + receiver_id int8 not null references users, + content text + ); + + insert into + users (id, name) + values + (1, 'Kiran'), + (2, 'Evan'); + + insert into + messages (sender_id, receiver_id, content) + values + (1, 2, '👋'); + ``` + response: | + ``` + APIResponse(data=[{'content': '👋', + 'from': {'name': 'Kiran'}, + 'to': {'name': 'Evan'}} + ], + count=None) + ``` + description: | + If you need to query the same foreign table twice, use the name of the + joined column to identify which join to use. You can also give each + column an alias. + hideCodeBlock: true + - id: filtering-through-foreign-tables + name: Filtering through foreign tables + code: | + ``` + response = supabase.table('cities').select('name, countries(*)').eq('countries.name', 'Estonia').execute() + ``` + data: + sql: | + ```sql + create table + countries (id int8 primary key, name text); + create table + cities ( + id int8 primary key, + country_id int8 not null references countries, + name text + ); + + insert into + countries (id, name) + values + (1, 'Germany'), + (2, 'Indonesia'); + insert into + cities (id, country_id, name) + values + (1, 2, 'Bali'), + (2, 1, 'Munich'); + ``` + response: | + ``` + APIResponse(data=[{'name': 'Bali', 'countries': None}, + {'name': 'Munich', 'countries': None}], + count=None) + ``` + description: | + NOT WORKING CURRENTLY + If the filter on a foreign table's column is not satisfied, the foreign + table returns `[]` or `null` but the parent table is not filtered out. + If you want to filter out the parent table rows, use the `!inner` hint + hideCodeBlock: true + - id: querying-foreign-table-with-count + name: Querying foreign table with count + code: | + ``` + response = supabase.table('countries').select('*, cities(count)').execute() + ``` + data: + sql: | + ```sql + create table countries ( + "id" "uuid" primary key default "extensions"."uuid_generate_v4"() not null, + "name" text + ); + + create table cities ( + "id" "uuid" primary key default "extensions"."uuid_generate_v4"() not null, + "name" text, + "country_id" "uuid" references public.countries on delete cascade + ); + + with country as ( + insert into countries (name) + values ('united kingdom') returning id + ) + insert into cities (name, country_id) values + ('London', (select id from country)), + ('Manchester', (select id from country)), + ('Liverpool', (select id from country)), + ('Bristol', (select id from country)); + ``` + response: | + ``` + APIResponse(data=[{'id': 1, 'name': 'Germany', 'cities': [{'count': 1}]}, + {'id': 2, 'name': 'Indonesia', 'cities': [{'count': 1}]}], + count=None) + ``` + description: | + You can get the number of rows in a related table by using the + **count** property. + hideCodeBlock: true + - id: querying-with-count-option + name: Querying with count option + code: | + ``` + response = supabase.table('countries').select('*', count='exact').execute() + ``` + data: + sql: | + ```sql + create table + countries (id int8 primary key, name text); + + insert into + countries (id, name) + values + (1, 'Afghanistan'), + (2, 'Albania'), + (3, 'Algeria'); + ``` + response: | + ``` + APIResponse(data=[{'id': 1, 'name': 'Germany'}, + {'id': 2, 'name': 'Indonesia'}], + count=2) + ``` + description: | + You can get the number of rows by using the + *count* parameter in the select query. + hideCodeBlock: true + - id: querying-json-data + name: Querying JSON data + code: | + ``` + response = supabase.table('users').select('id, name, address->city').execute() + ``` + data: + sql: | + ```sql + create table + users ( + id int8 primary key, + name text, + address jsonb + ); + + insert into + users (id, name, address) + values + (1, 'Avdotya', '{"city":"Saint Petersburg"}'); + ``` + response: | + ``` + APIResponse(data=[{'id': 1, 'name': 'Avdotya', 'city': 'Saint Petersburg'}], count=None) + ``` + description: | + You can select and filter data inside of + [JSON](/docs/guides/database/json) columns. Postgres offers some + [operators](/docs/guides/database/json#query-the-jsonb-data) for + querying JSON data. + hideCodeBlock: true + + - id: insert + title: 'Create data: insert()' + $ref: '@supabase/postgrest-js.PostgrestQueryBuilder.insert' + examples: + - id: create-a-record + name: Create a record + code: | + ``` + data, count = supabase + .table('countries') + .insert({"id": 1, "name": "Denmark"}) + .execute() + ``` + data: + sql: | + ```sql + create table + countries (id int8 primary key, name text); + ``` + response: | + ``` + APIResponse(data=[{'id': 1, 'name': 'Denmark'}], count=None) + ``` + hideCodeBlock: true + isSpotlight: true - id: invoke title: 'invoke()' From a2e980f04c73a13c06d1b3044beadcd695b8ec29 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 22 Feb 2023 11:11:28 +0800 Subject: [PATCH 101/230] Update ProjectUsageBars.tsx --- .../ProjectUsageBars/ProjectUsageBars.tsx | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx index 4e29da3c019..2ec8272f340 100644 --- a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx +++ b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx @@ -281,21 +281,39 @@ const ProjectUsage: FC = ({ projectRef }) => { )} - {!isReadOnlyMode && product.title === 'Database' && ( + {isReadOnlyMode && product.title === 'Database' && (
    +

    Your disk has reached 95% capacity and has entered Read Only mode.

    {isPaidTier ? ( -

    - Your disk has reached 90% capacity. For Pro and Enterprise projects, - disk size expands ~1.5x automatically (e.g., 8GB to 12GB), but can only - occur once every six hours.{' '} -

    + <> +

    + For Pro and Enterprise projects, Disk Size expands ~1.5x automatically + (e.g., 8GB to 12GB) when it reaches 90% capacity, but can only occur{' '} + once every six hours. +

    +

    + If the disk size has already expanded within 6 hours, and then reaches + 95% capacity, your disk will enter read only mode until it can resize + again after 6 hours. +

    +

    + If you require help or need your disk changed so you can delete data, + + you can contact the support team + + . +

    + ) : (

    - This project is on the Free tier. Consider{' '} + This project is on the Free tier. Your disk size cannot auto scale. + Consider{' '} - upgrading + upgrading this project {' '} to resume service as usual.

    From 49492bf9351d4395948b4947818f2a33d226f089 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 22 Feb 2023 11:14:11 +0800 Subject: [PATCH 102/230] Update apps/docs/pages/guides/platform/database-usage.mdx --- apps/docs/pages/guides/platform/database-usage.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index 9e8bcaba917..e64320c45e3 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -46,7 +46,9 @@ If you intend to import a lot of data into your database that would require mult -If you need more than 1024TB of disk size or require multiple storage expansions in a short period of time, [contact us](https://app.supabase.com/support/new) to learn more about the Enterprise plan. +You may require multiple storage expansions in a short period of time. For example, you need to upload more than 1.5x the current size of your database storage. This will lead to your database entering a [read-only mode](#paid-tier-project-read-only-mode). You can avoid this by [contacting the support team](https://app.supabase.com/support/new) so that your database can be resized to a sufficient amount before you start uploading to it. + +If you need more than 1024TB of disk size, you can [contact us](https://app.supabase.com/support/new) to learn more about the Enterprise plan. #### Paid tier project 'read-only' mode From d5da9083231e442ed25d653efbafbe536e458593 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 22 Feb 2023 11:39:48 +0800 Subject: [PATCH 103/230] added guards in place because projectRef can be undefined on new page load --- .../ProjectUsageBars/ProjectUsageBars.tsx | 30 +++++++++++++------ .../LayoutHeader/LayoutHeader.tsx | 4 +-- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx index 2ec8272f340..e291b7fcc1a 100644 --- a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx +++ b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx @@ -85,8 +85,8 @@ const ProjectUsage: FC = ({ projectRef }) => { } useEffect(() => { - checkForReadOnlyMode() - }) + if (projectRef) checkForReadOnlyMode() + }, [projectRef]) const isPaidTier = subscriptionTier !== PRICING_TIER_PRODUCT_IDS.FREE @@ -289,19 +289,27 @@ const ProjectUsage: FC = ({ projectRef }) => { {isPaidTier ? ( <>

    - For Pro and Enterprise projects, Disk Size expands ~1.5x automatically + For Pro and Enterprise projects,{' '} + + Disk Size expands ~1.5x automatically + (e.g., 8GB to 12GB) when it reaches 90% capacity, but can only occur{' '} once every six hours.

    If the disk size has already expanded within 6 hours, and then reaches - 95% capacity, your disk will enter read only mode until it can resize - again after 6 hours. + 95% capacity,{' '} + + your disk will enter read only mode + {' '} + until it can resize again after 6 hours.

    If you require help or need your disk changed so you can delete data, you can contact the support team @@ -312,14 +320,18 @@ const ProjectUsage: FC = ({ projectRef }) => {

    This project is on the Free tier. Your disk size cannot auto scale. Consider{' '} - + upgrading this project {' '} to resume service as usual.

    )} -

    + {/*

    -

    +

    */}
    diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx index bfb11815157..14a04890a6c 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx @@ -37,8 +37,8 @@ const LayoutHeader = ({ customHeaderComponents, breadcrumbs = [], headerBorder = } useEffect(() => { - checkForReadOnlyMode() - }) + if (projectRef) checkForReadOnlyMode() + }, [projectRef]) const { data: usage } = useProjectUsageQuery({ projectRef }) const resourcesExceededLimits = getResourcesExceededLimits(usage) From 22835d79319431406e7f7d988c6877f68a827ca7 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 22 Feb 2023 12:00:06 +0800 Subject: [PATCH 104/230] Update LayoutHeader.tsx --- .../layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx index 14a04890a6c..4b2a129b33d 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx @@ -89,7 +89,7 @@ const LayoutHeader = ({ customHeaderComponents, breadcrumbs = [], headerBorder = {/* [Terry] Temporary until we figure out how we want to display this permanently */} {/* context: https://www.notion.so/supabase/DB-Disk-Size-Free-tier-Read-only-Critical-f2b8937c13a149e3ac769fe5888f6db0*/} - {!isReadOnlyMode && ( + {isReadOnlyMode && (
    From 0961562be1af485e7c0b6748136deef929e83fff Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 22 Feb 2023 13:21:50 +0800 Subject: [PATCH 105/230] updating text --- .../ProjectUsageBars/ProjectUsageBars.tsx | 99 +++++++++++++------ .../LayoutHeader/LayoutHeader.tsx | 6 +- 2 files changed, 72 insertions(+), 33 deletions(-) diff --git a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx index e291b7fcc1a..edb4ab3b1cf 100644 --- a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx +++ b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx @@ -281,26 +281,45 @@ const ProjectUsage: FC = ({ projectRef }) => { )} - {isReadOnlyMode && product.title === 'Database' && ( + {!isReadOnlyMode && product.title === 'Database' && (
    - +
    -

    Your disk has reached 95% capacity and has entered Read Only mode.

    +

    + Your disk has reached 95% capacity and has entered{' '} + + read-only mode + + . +

    {isPaidTier ? ( <>

    For Pro and Enterprise projects,{' '} - - Disk Size expands ~1.5x automatically - - (e.g., 8GB to 12GB) when it reaches 90% capacity, but can only occur{' '} + + Disk Size expands automatically + {' '} + when it reaches 90% capacity, but can only occur{' '} once every six hours.

    - If the disk size has already expanded within 6 hours, and then reaches - 95% capacity,{' '} - - your disk will enter read only mode + If the disk size has already expanded and then reaches 95% capacity + within 6 hours, then{' '} + + your disk will enter read-only mode {' '} until it can resize again after 6 hours.

    @@ -311,39 +330,61 @@ const ProjectUsage: FC = ({ projectRef }) => { projectRef ? projectRef : '' }&category=Database_unresponsive&Subject=Read%20only%20mode%20issue`} > - you can contact the support team + + you can contact the support team + .

    ) : (

    - This project is on the Free tier. Your disk size cannot auto scale. - Consider{' '} + This project is on the Free tier. Your disk size cannot auto scale to + avoid read-only mode. You can either{' '} + + reduce your disk usage + {' '} + or{' '} - upgrading this project - {' '} - to resume service as usual. + + upgrade your project + + + .

    )} - {/*

    - + ) : ( + -

    */} + + Database storage management + + + )} +

    diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx index 4b2a129b33d..2d53a284b4a 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx @@ -89,13 +89,11 @@ const LayoutHeader = ({ customHeaderComponents, breadcrumbs = [], headerBorder = {/* [Terry] Temporary until we figure out how we want to display this permanently */} {/* context: https://www.notion.so/supabase/DB-Disk-Size-Free-tier-Read-only-Critical-f2b8937c13a149e3ac769fe5888f6db0*/} - {isReadOnlyMode && ( + {!isReadOnlyMode && ( From dda1206cea566fcde8108813fe85e8688b6afb94 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 22 Feb 2023 13:27:54 +0800 Subject: [PATCH 106/230] Updates based on feedback --- .../components/interfaces/Functions/EdgeFunctionDetails.tsx | 2 +- studio/data/edge-functions/edge-functions-delete-mutation.ts | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx b/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx index 42b4986fc64..c93c1fefb66 100644 --- a/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx +++ b/studio/components/interfaces/Functions/EdgeFunctionDetails.tsx @@ -56,7 +56,7 @@ const EdgeFunctionDetails: FC = () => { 'functions', ...endpointSections.slice(1), ].join('.') - const functionUrl = `https://${functionsEndpoint}/${selectedFunction?.slug}` + const functionUrl = `${apiService?.protocol}://${functionsEndpoint}/${selectedFunction?.slug}` const onConfirmDelete = async () => { if (!projectRef) return console.error('Project ref is required') diff --git a/studio/data/edge-functions/edge-functions-delete-mutation.ts b/studio/data/edge-functions/edge-functions-delete-mutation.ts index f37faa08a37..d642758cd9c 100644 --- a/studio/data/edge-functions/edge-functions-delete-mutation.ts +++ b/studio/data/edge-functions/edge-functions-delete-mutation.ts @@ -34,7 +34,10 @@ export const useEdgeFunctionDeleteMutation = ({ (vars) => deleteEdgeFunction(vars), { async onSuccess(data, variables, context) { - await queryClient.invalidateQueries(edgeFunctionsKeys.list(variables.projectRef)) + const { projectRef } = variables + await queryClient.invalidateQueries(edgeFunctionsKeys.list(projectRef), { + refetchType: 'all', + }) await onSuccess?.(data, variables, context) }, ...options, From 15579a108c20fe86bde8ea404e6786a2cb6f2aa3 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 22 Feb 2023 13:42:18 +0800 Subject: [PATCH 107/230] update doc to reflect db storage behaviour --- .../pages/guides/platform/database-usage.mdx | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index e64320c45e3..e99bf995aba 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -24,20 +24,21 @@ This value is also reported in the [database settings page](https://app.supabase Supabase uses network-attached storage to balance performance with scalability. -- For **Free tier projects**, the database will enter ['read only' mode when you reach 95% disk space](#free-tier-project-read-only-mode). +- For **Free tier projects**, the database can enter ['read only' mode when you exceed the 500mb limit](#free-tier-project-read-only-mode). - For **Pro and Enterprise tier projects**, your [disk size expands automatically](#paid-tier-disk-auto-scaling). ### Free tier project 'read-only' mode -Free tier projects enter read-only mode when you reach 95% of the disk size. -In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. -Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size. +Free tier projects can enter read-only mode when exceeding the 500mb database size limit. -For [disk auto-scaling](paid-tier-disk-auto-scaling), and avoid your database entering read-only mode, you can [upgrade to the Pro or Enterprise plan](https://app.supabase.com/project/_/settings/billing/subscription). +In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. +Regular operation (read-write mode) is automatically re-enabled once database storage is below the 500mb database size limit. + +For more database storage and avoid your database entering read-only mode when exceeding the limit, you can [upgrade to the Pro or Enterprise plan](https://app.supabase.com/project/_/settings/billing/subscription). ### Paid tier disk auto-scaling -Pro and Enterprise have disk auto-scaling. Storage expands automatically when the database reaches 90% of the disk size. The disk is expanded to be 50% larger (e.g., 8GB -> 12GB). +Pro and Enterprise have disk auto-scaling. Database storage expands automatically when the database reaches 90% of the disk size. The disk is expanded to be 50% larger (e.g., 8GB -> 12GB). Auto-scaling can only take place once every 6 hours. @@ -48,9 +49,9 @@ If you intend to import a lot of data into your database that would require mult You may require multiple storage expansions in a short period of time. For example, you need to upload more than 1.5x the current size of your database storage. This will lead to your database entering a [read-only mode](#paid-tier-project-read-only-mode). You can avoid this by [contacting the support team](https://app.supabase.com/support/new) so that your database can be resized to a sufficient amount before you start uploading to it. -If you need more than 1024TB of disk size, you can [contact us](https://app.supabase.com/support/new) to learn more about the Enterprise plan. +If you need more than 1024TB of disk size, you can [contact us](https://app.supabase.com/support/new) to learn more about the Enterprise plan. -#### Paid tier project 'read-only' mode +### Paid tier project 'read-only' mode Database storage expands, at most, once every 6 hours. If within those 6 hours you reach 95% of the disk space, your project will enter read-only mode. @@ -58,13 +59,13 @@ If within those 6 hours you reach 95% of the disk space, your project will enter In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size, or when the database automatically resizes after the 6 hour period. -### Increasing available disk size +### Increasing available database space -If your project is on the free tier, you can [Upgrade to the Pro or Enterprise tier](https://app.supabase.com/project/_/settings/billing/subscription) so that your disk size can start to [auto scale](#paid-tier-disk-auto-scaling) beyond 8GB. +If your project is on the free tier, you can [Upgrade to the Pro or Enterprise tier](https://app.supabase.com/project/_/settings/billing/subscription) so that you can start to use more than 500mb. -For Free tier projects that do not wish to upgrade, or Pro tier projects that are nearing their disk size limit, you can increase available disk size by deleting data from your project's database to lower its disk usage. +For Pro and Enterprise tier projects that are [nearing their disk size limit](#paid-tier-project-read-only-mode), you can increase available disk size by deleting data from your project's database to lower its disk usage. -If your free tier project database is already in read-only mode, run the following command to change the transaction mode to read-write for your session: +If your project database is already in read-only mode, run the following command to change the transaction mode to read-write for your session: ```sql SET From a8cb08728d48cfa4a70137b6cebe2f76be1e6f1d Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 22 Feb 2023 13:54:44 +0800 Subject: [PATCH 108/230] change text --- .../ProjectUsageBars/ProjectUsageBars.tsx | 182 +++++++++--------- .../LayoutHeader/LayoutHeader.tsx | 2 +- 2 files changed, 96 insertions(+), 88 deletions(-) diff --git a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx index edb4ab3b1cf..769579c4d4a 100644 --- a/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx +++ b/studio/components/interfaces/Settings/ProjectUsageBars/ProjectUsageBars.tsx @@ -91,7 +91,7 @@ const ProjectUsage: FC = ({ projectRef }) => { const isPaidTier = subscriptionTier !== PRICING_TIER_PRODUCT_IDS.FREE const featureFootnotes: Record = { - db_size: ( + db_size: isPaidTier ? (
    {usage?.disk_volume_size_gb && Disk Size: {usage.disk_volume_size_gb} GB} @@ -105,6 +105,8 @@ const ProjectUsage: FC = ({ projectRef }) => {
    + ) : ( + <> ), } @@ -284,108 +286,114 @@ const ProjectUsage: FC = ({ projectRef }) => { {!isReadOnlyMode && product.title === 'Database' && (
    -
    -

    - Your disk has reached 95% capacity and has entered{' '} - - read-only mode - - . -

    +

    {isPaidTier ? ( <> -

    - For Pro and Enterprise projects,{' '} - - Disk Size expands automatically - {' '} - when it reaches 90% capacity, but can only occur{' '} - once every six hours. -

    -

    - If the disk size has already expanded and then reaches 95% capacity - within 6 hours, then{' '} - - your disk will enter read-only mode - {' '} - until it can resize again after 6 hours. -

    -

    - If you require help or need your disk changed so you can delete data, - - - you can contact the support team - - - . -

    - - ) : ( -

    - This project is on the Free tier. Your disk size cannot auto scale to - avoid read-only mode. You can either{' '} + Your disk has reached 95% capacity and has entered{' '} - reduce your disk usage + read-only mode + + . + + ) : ( + <> + You have exceeded the 500mb Database size limit and your project is now + in{' '} + + read-only mode + + . + + )} +

    + {isPaidTier ? ( + <> +

    + For Pro and Enterprise projects,{' '} + + Disk Size expands automatically {' '} - or{' '} + when it reaches 90% capacity, but can only occur once every six hours. + If the disk size has already expanded and then reaches 95% capacity + within 6 hours, then{' '} + + your disk will enter read-only mode + {' '} + until it can resize again after 6 hours. +

    +

    + If you require help or need your disk changed to read/write mode so you + can delete data,{' '} - upgrade your project + you can contact the support team .

    - )} - + + ) : (

    - {!isPaidTier ? ( - - ) : ( - - )} + You can either{' '} + + reduce your disk usage below 500mb + {' '} + or{' '} + + + upgrade your project + + + .

    -
    + )} + + {!isPaidTier ? ( + + ) : ( + + )}
    )} diff --git a/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx b/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx index 2d53a284b4a..b3b3c01e9ea 100644 --- a/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx +++ b/studio/components/layouts/ProjectLayout/LayoutHeader/LayoutHeader.tsx @@ -93,7 +93,7 @@ const LayoutHeader = ({ customHeaderComponents, breadcrumbs = [], headerBorder = From eb073f085666391f1d341db90c43ae911dcf8c16 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Wed, 22 Feb 2023 16:58:44 +1100 Subject: [PATCH 109/230] remove unused comments --- .../interfaces/GraphQL/GraphiQL.tsx | 33 ------------------- 1 file changed, 33 deletions(-) diff --git a/studio/components/interfaces/GraphQL/GraphiQL.tsx b/studio/components/interfaces/GraphQL/GraphiQL.tsx index f52a378157d..4780cf40d25 100644 --- a/studio/components/interfaces/GraphQL/GraphiQL.tsx +++ b/studio/components/interfaces/GraphQL/GraphiQL.tsx @@ -522,39 +522,6 @@ export const GraphiQLInterface = ({ theme }: GraphiQLInterfaceProps) => { />
    - {/*
    -
    -
    Theme
    -
    - Adjust how the interface looks like. -
    -
    -
    - - - - - -
    -
    */} {storageContext ? (
    From c2f62c2ef162662ef2d03af3807603166f41148d Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 22 Feb 2023 14:04:56 +0800 Subject: [PATCH 110/230] hiding disk size --- .../pages/project/[ref]/reports/database.tsx | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/studio/pages/project/[ref]/reports/database.tsx b/studio/pages/project/[ref]/reports/database.tsx index 20ba14361d2..934c9af1246 100644 --- a/studio/pages/project/[ref]/reports/database.tsx +++ b/studio/pages/project/[ref]/reports/database.tsx @@ -103,24 +103,26 @@ const DatabaseUsage: FC = () => { />
    -
    -
    - {usage?.disk_volume_size_gb && ( - Disk Size: {usage.disk_volume_size_gb} GB - )} + {isPaidTier && ( +
    +
    + {usage?.disk_volume_size_gb && ( + Disk Size: {usage.disk_volume_size_gb} GB + )} - {isPaidTier && Auto-Scaling} + {isPaidTier && Auto-Scaling} +
    + +
    - - -
    + )}
    From 3dc80725742ab6298f70b21799901f912f780ae4 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 22 Feb 2023 14:05:20 +0800 Subject: [PATCH 111/230] Update database.tsx --- studio/pages/project/[ref]/reports/database.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/studio/pages/project/[ref]/reports/database.tsx b/studio/pages/project/[ref]/reports/database.tsx index 934c9af1246..51ff8dfb946 100644 --- a/studio/pages/project/[ref]/reports/database.tsx +++ b/studio/pages/project/[ref]/reports/database.tsx @@ -109,8 +109,7 @@ const DatabaseUsage: FC = () => { {usage?.disk_volume_size_gb && ( Disk Size: {usage.disk_volume_size_gb} GB )} - - {isPaidTier && Auto-Scaling} + Auto-Scaling
    - ) : ( - <> - ), + ) : null, } return ( From 439ed764594b96886d27cc33be98f878e768ed92 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Wed, 22 Feb 2023 17:35:26 +0800 Subject: [PATCH 135/230] Fix loadBySchema persisting stale data --- studio/stores/common/PostgresMetaInterface.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/studio/stores/common/PostgresMetaInterface.ts b/studio/stores/common/PostgresMetaInterface.ts index 09f605b5acc..bd51fd319d5 100644 --- a/studio/stores/common/PostgresMetaInterface.ts +++ b/studio/stores/common/PostgresMetaInterface.ts @@ -117,6 +117,7 @@ export default class PostgresMetaInterface implements IPostgresMetaInterface< } } + // [Joshen] Only used for tables and views for now async loadBySchema(schema: string) { let { LOADING, ERROR, LOADED } = this.STATES try { @@ -132,7 +133,14 @@ export default class PostgresMetaInterface implements IPostgresMetaInterface< const data = response as T[] const formattedData = keyBy(data, this.identifier) - this.data = { ...this.data, ...formattedData } + // Purge existing data that belongs to given schema, otherwise + // stale data will persist + const purgedData = Object.keys(this.data) + .map((identifier: any) => this.data[identifier]) + .filter((item: any) => item.schema !== schema) + const formattedPurgedData = keyBy(purgedData, this.identifier) + + this.data = { ...formattedPurgedData, ...formattedData } this.setState(LOADED) return data From 66ae9a029025123982e17cc3e45ebf9b69924d75 Mon Sep 17 00:00:00 2001 From: Stojan Dimitrovski Date: Wed, 22 Feb 2023 11:04:16 +0100 Subject: [PATCH 136/230] docs: add clarification about ssr with next.js prefetching --- apps/docs/pages/guides/auth/server-side-rendering.mdx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/docs/pages/guides/auth/server-side-rendering.mdx b/apps/docs/pages/guides/auth/server-side-rendering.mdx index 635407cd986..10ccfcf4e5b 100644 --- a/apps/docs/pages/guides/auth/server-side-rendering.mdx +++ b/apps/docs/pages/guides/auth/server-side-rendering.mdx @@ -160,6 +160,12 @@ use this potentially stale information to render a page. ## Frequently Asked Questions +### No session on the server side with Next.js route prefetching? + +When you use route prefetching in Next.js using `` components or the `Router.push()` APIs can cause server-side requests to be sent out before the browser-side has had a chance to process the access and refresh tokens. This means that those requests may not have any cookies set, and your server code will render unauthenticated content. + +To go around this problem you can always redirect users back to one specific page after sign-in, where you will not be using any route prefetching magic from Next.js, and then once the Supabase client library running in the browser has had a chance to obtain the access and refresh tokens from the URL fragment, take the user to regular Next.js pages which can use prefetching. + ### How do I make the cookies `HttpOnly`? This is not necessary. Both the access token and refresh token are designed to From eb6fbe0e8a25bcd192c4bf683378e09618befb30 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 22 Feb 2023 18:24:48 +0800 Subject: [PATCH 137/230] changed article name. adjusted flow of database size so free and pro are split --- .../NavigationMenu.constants.ts | 2 +- .../{database-usage.mdx => database-size.mdx} | 46 +++++++++++++------ apps/www/lib/redirects.js | 5 ++ 3 files changed, 38 insertions(+), 15 deletions(-) rename apps/docs/pages/guides/platform/{database-usage.mdx => database-size.mdx} (71%) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 7385afd2d3d..98afadd61ee 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -635,7 +635,7 @@ export const platform = { url: undefined, items: [ { name: 'Access Control', url: '/guides/platform/access-control', items: [] }, - { name: 'Database Usage', url: '/guides/platform/database-usage', items: [] }, + { name: 'Database Size', url: '/guides/platform/database-size', items: [] }, { name: 'HTTP Status Codes', url: '/guides/platform/http-status-codes', items: [] }, { name: 'Logging', url: '/guides/platform/logs', items: [] }, { name: 'Metrics', url: '/guides/platform/metrics', items: [] }, diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-size.mdx similarity index 71% rename from apps/docs/pages/guides/platform/database-usage.mdx rename to apps/docs/pages/guides/platform/database-size.mdx index e99bf995aba..027e869c9da 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-size.mdx @@ -1,9 +1,9 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { - id: 'database-usage', - title: 'Database usage', - description: 'Understanding how database usage applies to your subscription.', + id: 'database-size', + title: 'Database size', + description: 'Understanding how database size applies to your subscription.', } Database size refers to the _monthly average storage usage_, as reported by Postgres. This metric is reported in your project's [billing usage](https://app.supabase.com/project/_/settings/billing/usage) and is updated daily. @@ -24,21 +24,41 @@ This value is also reported in the [database settings page](https://app.supabase Supabase uses network-attached storage to balance performance with scalability. -- For **Free tier projects**, the database can enter ['read only' mode when you exceed the 500mb limit](#free-tier-project-read-only-mode). -- For **Pro and Enterprise tier projects**, your [disk size expands automatically](#paid-tier-disk-auto-scaling). +### Free tier project -### Free tier project 'read-only' mode +For [**Free tier projects**](#free-tier-project), the database can enter ['read only' mode when you exceed the 500mb limit](#free-tier-project-read-only-mode). + +#### Free tier project 'read-only' mode Free tier projects can enter read-only mode when exceeding the 500mb database size limit. In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. Regular operation (read-write mode) is automatically re-enabled once database storage is below the 500mb database size limit. -For more database storage and avoid your database entering read-only mode when exceeding the limit, you can [upgrade to the Pro or Enterprise plan](https://app.supabase.com/project/_/settings/billing/subscription). +#### Increasing available database space -### Paid tier disk auto-scaling +If your project is on the free tier, there is a 500mb Database size limit. -Pro and Enterprise have disk auto-scaling. Database storage expands automatically when the database reaches 90% of the disk size. The disk is expanded to be 50% larger (e.g., 8GB -> 12GB). +- If you are in [read-only](#free-tier-project-read-only-mode) mode: + + - Then you can [upgrade to the Pro or Enterprise tier](https://app.supabase.com/project/_/settings/billing/subscription) to go beyond the 500mb database size limit. + - However; If your project database is already in [read-only](#free-tier-project-read-only-mode) mode, run the following command to change the transaction mode to read-write for your session + (This allows you to delete data from within the session). + + ```sql + SET + default_transaction_read_only = 'off'; + ``` + +- If you are over your limit, but not in [read-only](#free-tier-project-read-only-mode) mode yet, it's important to reduce your Database size as your database might go into [read-only](#free-tier-project-read-only-mode) mode. + +### Paid tier project + +For **Pro and Enterprise tier projects**, your [disk size expands automatically](#paid-tier-disk-auto-scaling). + +#### Paid tier disk auto-scaling + +Pro and Enterprise have Disk size auto-scaling. Database storage expands automatically when the database reaches 90% of the disk size. The disk is expanded to be 50% larger (e.g., 8GB -> 12GB). Auto-scaling can only take place once every 6 hours. @@ -51,7 +71,7 @@ You may require multiple storage expansions in a short period of time. For examp If you need more than 1024TB of disk size, you can [contact us](https://app.supabase.com/support/new) to learn more about the Enterprise plan. -### Paid tier project 'read-only' mode +#### Paid tier project 'read-only' mode Database storage expands, at most, once every 6 hours. If within those 6 hours you reach 95% of the disk space, your project will enter read-only mode. @@ -59,13 +79,11 @@ If within those 6 hours you reach 95% of the disk space, your project will enter In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size, or when the database automatically resizes after the 6 hour period. -### Increasing available database space - -If your project is on the free tier, you can [Upgrade to the Pro or Enterprise tier](https://app.supabase.com/project/_/settings/billing/subscription) so that you can start to use more than 500mb. +#### Increasing available database space For Pro and Enterprise tier projects that are [nearing their disk size limit](#paid-tier-project-read-only-mode), you can increase available disk size by deleting data from your project's database to lower its disk usage. -If your project database is already in read-only mode, run the following command to change the transaction mode to read-write for your session: +If your project database is already in [read-only](#paid-tier-project-read-only-mode) mode, run the following command to change the transaction mode to read-write for your session: ```sql SET diff --git a/apps/www/lib/redirects.js b/apps/www/lib/redirects.js index e73aa509b57..00b9b15e5c5 100644 --- a/apps/www/lib/redirects.js +++ b/apps/www/lib/redirects.js @@ -1857,4 +1857,9 @@ module.exports = [ source: '/docs/reference/javascript/v0/rpc', destination: '/docs/reference/javascript/rpc', }, + { + permanent: true, + source: '/docs/guides/platform/database-usage', + destination: '/docs/guides/platform/database-size', + }, ] From 87fb3f17ed980aeefc08cd4c187d4c64582c19b2 Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Sun, 12 Feb 2023 16:25:59 +0100 Subject: [PATCH 138/230] Disble loading permissions on self-host --- studio/hooks/misc/withAuth.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/studio/hooks/misc/withAuth.tsx b/studio/hooks/misc/withAuth.tsx index b41734cb1c8..d2cdc5d94fd 100644 --- a/studio/hooks/misc/withAuth.tsx +++ b/studio/hooks/misc/withAuth.tsx @@ -50,6 +50,7 @@ export function withAuth( }) usePermissionsQuery({ + enabled: IS_PLATFORM, onSuccess(permissions) { ui.setPermissions(permissions) }, From f00ec9bccc70f0c962492e20939d90bcc9b15896 Mon Sep 17 00:00:00 2001 From: Gustavo Santos <53129852+gefgu@users.noreply.github.com> Date: Wed, 22 Feb 2023 12:41:49 +0000 Subject: [PATCH 139/230] fix: sql editor typo in product menu item --- studio/components/ui/ProductMenu/ProductMenuItem.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/studio/components/ui/ProductMenu/ProductMenuItem.tsx b/studio/components/ui/ProductMenu/ProductMenuItem.tsx index ca2fdcf51a7..42fb817e326 100644 --- a/studio/components/ui/ProductMenu/ProductMenuItem.tsx +++ b/studio/components/ui/ProductMenu/ProductMenuItem.tsx @@ -34,9 +34,9 @@ const ProductMenuItem: FC = ({
    - {name}{' '} + {name} {label !== undefined && ( {label} )} From b5fb101bfdcc8de4c8d1780528b2b56e403f8125 Mon Sep 17 00:00:00 2001 From: Ollie Halliday <22655069+Hallidayo@users.noreply.github.com> Date: Wed, 22 Feb 2023 13:39:19 +0000 Subject: [PATCH 140/230] changed link to avoid 404 --- apps/docs/components/Extensions.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/docs/components/Extensions.tsx b/apps/docs/components/Extensions.tsx index a3ab9bff99e..b7b7260cd64 100644 --- a/apps/docs/components/Extensions.tsx +++ b/apps/docs/components/Extensions.tsx @@ -94,8 +94,15 @@ export default function Extensions() { filters.length === 0 ? x : x.tags.some((item) => filters.includes(item)) ) .map((extension) => ( - - + +

    {extension.comment.charAt(0).toUpperCase() + extension.comment.slice(1)} From 87355ed7c4d9559a6614295c5132e93477a7fa1a Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Wed, 22 Feb 2023 14:41:36 +0000 Subject: [PATCH 141/230] Add nextjs todo list example --- .../nextjs-todo-list/.env.local.example | 3 + .../todo-list/nextjs-todo-list/.eslintrc.json | 3 + .../todo-list/nextjs-todo-list/.gitignore | 36 + examples/todo-list/nextjs-todo-list/README.md | 75 + .../nextjs-todo-list/components/TodoList.tsx | 151 + .../nextjs-todo-list/lib/initSupabase.ts | 7 + .../todo-list/nextjs-todo-list/lib/schema.ts | 49 + .../todo-list/nextjs-todo-list/next.config.js | 6 + .../nextjs-todo-list/package-lock.json | 4276 +++++++++++++++++ .../todo-list/nextjs-todo-list/package.json | 32 + .../todo-list/nextjs-todo-list/pages/_app.tsx | 12 + .../nextjs-todo-list/pages/_document.tsx | 13 + .../nextjs-todo-list/pages/api/hello.ts | 13 + .../nextjs-todo-list/pages/index.tsx | 50 + .../nextjs-todo-list/public/favicon.ico | Bin 0 -> 25931 bytes .../nextjs-todo-list/public/next.svg | 1 + .../nextjs-todo-list/public/thirteen.svg | 1 + .../nextjs-todo-list/public/vercel.svg | 1 + .../todo-list/nextjs-todo-list/styles/app.css | 844 ++++ .../nextjs-todo-list/styles/tailwind.css | 30 + .../nextjs-todo-list/tailwind.config.js | 13 + .../todo-list/nextjs-todo-list/tsconfig.json | 24 + .../sveltejs-todo-list/src/assets/app.css | 47 - 23 files changed, 5640 insertions(+), 47 deletions(-) create mode 100644 examples/todo-list/nextjs-todo-list/.env.local.example create mode 100644 examples/todo-list/nextjs-todo-list/.eslintrc.json create mode 100644 examples/todo-list/nextjs-todo-list/.gitignore create mode 100644 examples/todo-list/nextjs-todo-list/README.md create mode 100644 examples/todo-list/nextjs-todo-list/components/TodoList.tsx create mode 100644 examples/todo-list/nextjs-todo-list/lib/initSupabase.ts create mode 100644 examples/todo-list/nextjs-todo-list/lib/schema.ts create mode 100644 examples/todo-list/nextjs-todo-list/next.config.js create mode 100644 examples/todo-list/nextjs-todo-list/package-lock.json create mode 100644 examples/todo-list/nextjs-todo-list/package.json create mode 100644 examples/todo-list/nextjs-todo-list/pages/_app.tsx create mode 100644 examples/todo-list/nextjs-todo-list/pages/_document.tsx create mode 100644 examples/todo-list/nextjs-todo-list/pages/api/hello.ts create mode 100644 examples/todo-list/nextjs-todo-list/pages/index.tsx create mode 100644 examples/todo-list/nextjs-todo-list/public/favicon.ico create mode 100644 examples/todo-list/nextjs-todo-list/public/next.svg create mode 100644 examples/todo-list/nextjs-todo-list/public/thirteen.svg create mode 100644 examples/todo-list/nextjs-todo-list/public/vercel.svg create mode 100644 examples/todo-list/nextjs-todo-list/styles/app.css create mode 100644 examples/todo-list/nextjs-todo-list/styles/tailwind.css create mode 100644 examples/todo-list/nextjs-todo-list/tailwind.config.js create mode 100644 examples/todo-list/nextjs-todo-list/tsconfig.json diff --git a/examples/todo-list/nextjs-todo-list/.env.local.example b/examples/todo-list/nextjs-todo-list/.env.local.example new file mode 100644 index 00000000000..477da3d401d --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/.env.local.example @@ -0,0 +1,3 @@ +# Update these with your Supabase details from your project settings > API +NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co +NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key \ No newline at end of file diff --git a/examples/todo-list/nextjs-todo-list/.eslintrc.json b/examples/todo-list/nextjs-todo-list/.eslintrc.json new file mode 100644 index 00000000000..bffb357a712 --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/examples/todo-list/nextjs-todo-list/.gitignore b/examples/todo-list/nextjs-todo-list/.gitignore new file mode 100644 index 00000000000..c87c9b392c0 --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/todo-list/nextjs-todo-list/README.md b/examples/todo-list/nextjs-todo-list/README.md new file mode 100644 index 00000000000..83ba22e28bd --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/README.md @@ -0,0 +1,75 @@ +# Todo example using Supabase + +- Frontend: + - [Next.js](https://github.com/vercel/next.js) - a React framework for production. + - [Tailwind](https://tailwindcss.com/) for styling and layout. + - [Supabase.js](https://supabase.com/docs/library/getting-started) for user management and realtime data syncing. +- Backend: + - [app.supabase.com](https://app.supabase.com/): hosted Postgres database with restful API for usage with Supabase.js. + +## Deploy with Vercel + +The Vercel deployment will guide you through creating a Supabase account and project. After installation of the Supabase integration, all relevant environment variables will be set up so that the project is usable immediately after deployment 🚀 + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https%3A%2F%2Fgithub.com%2Fsupabase%2Fexamples%2Ftree%2Fmain%2Fsupabase-js-v1%2Ftodo-list%2Fnextjs-todo-list&project-name=supabase-todo-list&repository-name=supabase-todo-list&demo-title=Todo%20list&demo-description=An%20example%20web%20app%20using%20Supabase%20and%20Next.js&demo-url=https%3A%2F%2Fsupabase-nextjs-todo-list.vercel.app&demo-image=https%3A%2F%2Fi.imgur.com%2FGJauPlN.png&integration-ids=oac_jUduyjQgOyzev1fjrW83NYOv&external-id=supabase-todo-list) + +## Build from scratch + +### 1. Create new project + +Sign up to Supabase - [https://app.supabase.com](https://app.supabase.com) and create a new project. Wait for your database to start. + +### 2. Run "Todo List" Quickstart + +Once your database has started, run the "Todo List" quickstart. Inside of your project, enter the `SQL editor` tab and scroll down until you see `TODO LIST: Build a basic todo list with Row Level Security`. + +### 3. Get the URL and Key + +Go to the Project Settings (the cog icon), open the API tab, and find your API URL and `anon` key, you'll need these in the next step. + +The `anon` key is your client-side API key. It allows "anonymous access" to your database, until the user has logged in. Once they have logged in, the keys will switch to the user's own login token. This enables row level security for your data. Read more about this [below](#postgres-row-level-security). + +![image](https://user-images.githubusercontent.com/10214025/88916245-528c2680-d298-11ea-8a71-708f93e1ce4f.png) + +**_NOTE_**: The `service_role` key has full access to your data, bypassing any security policies. These keys have to be kept secret and are meant to be used in server environments and never on a client or browser. + +## Supabase details + +### Postgres Row level security + +This project uses very high-level Authorization using Postgres' Role Level Security. +When you start a Postgres database on Supabase, we populate it with an `auth` schema, and some helper functions. +When a user logs in, they are issued a JWT with the role `authenticated` and their UUID. +We can use these details to provide fine-grained control over what each user can and cannot do. + +This is a trimmed-down schema, with the policies: + +```sql +create table todos ( + id bigint generated by default as identity primary key, + user_id uuid references auth.users not null, + task text check (char_length(task) > 3), + is_complete boolean default false, + inserted_at timestamp with time zone default timezone('utc'::text, now()) not null +); + +alter table todos enable row level security; + +create policy "Individuals can create todos." on todos for + insert with check (auth.uid() = user_id); + +create policy "Individuals can view their own todos. " on todos for + select using (auth.uid() = user_id); + +create policy "Individuals can update their own todos." on todos for + update using (auth.uid() = user_id); + +create policy "Individuals can delete their own todos." on todos for + delete using (auth.uid() = user_id); +``` + +## Authors + +- [Supabase](https://supabase.com) + +Supabase is open source. We'd love for you to follow along and get involved at https://github.com/supabase/supabase diff --git a/examples/todo-list/nextjs-todo-list/components/TodoList.tsx b/examples/todo-list/nextjs-todo-list/components/TodoList.tsx new file mode 100644 index 00000000000..6d060b5a964 --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/components/TodoList.tsx @@ -0,0 +1,151 @@ +import { Database } from '@/lib/schema' +import { Session, useSupabaseClient } from '@supabase/auth-helpers-react' +import { useEffect, useState } from 'react' + +type Todos = Database['public']['Tables']['todos']['Row'] + +export default function TodoList({ session }: { session: Session }) { + const supabase = useSupabaseClient() + const [todos, setTodos] = useState([]) + const [newTaskText, setNewTaskText] = useState('') + const [errorText, setErrorText] = useState('') + + const user = session.user + + useEffect(() => { + const fetchTodos = async () => { + const { data: todos, error } = await supabase + .from('todos') + .select('*') + .order('id', { ascending: true }) + + if (error) console.log('error', error) + else setTodos(todos) + } + + fetchTodos() + }, [supabase]) + + const addTodo = async (taskText: string) => { + let task = taskText.trim() + if (task.length) { + const { data: todo, error } = await supabase + .from('todos') + .insert({ task, user_id: user.id }) + .select() + .single() + + if (error) { + setErrorText(error.message) + } else { + setTodos([...todos, todo]) + setNewTaskText('') + } + } + } + + const deleteTodo = async (id: number) => { + try { + await supabase.from('todos').delete().eq('id', id).throwOnError() + setTodos(todos.filter((x) => x.id != id)) + } catch (error) { + console.log('error', error) + } + } + + return ( +

    +

    Todo List.

    +
    { + e.preventDefault() + addTodo(newTaskText) + }} + className="flex gap-2 my-2" + > + { + setErrorText('') + setNewTaskText(e.target.value) + }} + /> + +
    + {!!errorText && } +
    +
      + {todos.map((todo) => ( + deleteTodo(todo.id)} /> + ))} +
    +
    +
    + ) +} + +const Todo = ({ todo, onDelete }: { todo: Todos; onDelete: () => void }) => { + const supabase = useSupabaseClient() + const [isCompleted, setIsCompleted] = useState(todo.is_complete) + + const toggle = async () => { + try { + const { data } = await supabase + .from('todos') + .update({ is_complete: !isCompleted }) + .eq('id', todo.id) + .throwOnError() + .select() + .single() + + if (data) setIsCompleted(data.is_complete) + } catch (error) { + console.log('error', error) + } + } + + return ( +
  • +
    +
    +
    {todo.task}
    +
    +
    + toggle()} + type="checkbox" + checked={isCompleted ? true : false} + /> +
    + +
    +
  • + ) +} + +const Alert = ({ text }: { text: string }) => ( +
    +
    {text}
    +
    +) diff --git a/examples/todo-list/nextjs-todo-list/lib/initSupabase.ts b/examples/todo-list/nextjs-todo-list/lib/initSupabase.ts new file mode 100644 index 00000000000..5457bdff41f --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/lib/initSupabase.ts @@ -0,0 +1,7 @@ +import { createClient } from '@supabase/supabase-js' +import { Database } from './schema' + +export const supabase = createClient( + process.env.NEXT_PUBLIC_SUPABASE_URL, + process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY +) diff --git a/examples/todo-list/nextjs-todo-list/lib/schema.ts b/examples/todo-list/nextjs-todo-list/lib/schema.ts new file mode 100644 index 00000000000..ec8b8f854b2 --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/lib/schema.ts @@ -0,0 +1,49 @@ +export type Json = + | string + | number + | boolean + | null + | { [key: string]: Json } + | Json[] + +export interface Database { + public: { + Tables: { + todos: { + Row: { + id: number + inserted_at: string + is_complete: boolean | null + task: string | null + user_id: string + } + Insert: { + id?: number + inserted_at?: string + is_complete?: boolean | null + task?: string | null + user_id: string + } + Update: { + id?: number + inserted_at?: string + is_complete?: boolean | null + task?: string | null + user_id?: string + } + } + } + Views: { + [_ in never]: never + } + Functions: { + [_ in never]: never + } + Enums: { + [_ in never]: never + } + CompositeTypes: { + [_ in never]: never + } + } +} diff --git a/examples/todo-list/nextjs-todo-list/next.config.js b/examples/todo-list/nextjs-todo-list/next.config.js new file mode 100644 index 00000000000..a843cbee09a --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/next.config.js @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, +} + +module.exports = nextConfig diff --git a/examples/todo-list/nextjs-todo-list/package-lock.json b/examples/todo-list/nextjs-todo-list/package-lock.json new file mode 100644 index 00000000000..98500e935ef --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/package-lock.json @@ -0,0 +1,4276 @@ +{ + "name": "nextjs-todo-list", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "nextjs-todo-list", + "version": "0.1.0", + "dependencies": { + "@next/font": "13.1.6", + "@supabase/auth-helpers-react": "^0.3.1", + "@supabase/auth-ui-react": "^0.2.8", + "@supabase/supabase-js": "^2.8.0", + "@types/node": "18.14.0", + "@types/react": "18.0.28", + "@types/react-dom": "18.0.11", + "eslint": "8.34.0", + "eslint-config-next": "13.1.6", + "next": "13.1.6", + "react": "18.2.0", + "react-dom": "18.2.0", + "typescript": "4.9.5" + }, + "devDependencies": { + "concurrently": "^7.6.0", + "tailwindcss": "^3.2.7" + } + }, + "node_modules/@babel/runtime": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + }, + "node_modules/@next/env": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.1.6.tgz", + "integrity": "sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.1.6.tgz", + "integrity": "sha512-o7cauUYsXjzSJkay8wKjpKJf2uLzlggCsGUkPu3lP09Pv97jYlekTC20KJrjQKmSv5DXV0R/uks2ZXhqjNkqAw==", + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/font": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/font/-/font-13.1.6.tgz", + "integrity": "sha512-AITjmeb1RgX1HKMCiA39ztx2mxeAyxl4ljv2UoSBUGAbFFMg8MO7YAvjHCgFhD39hL7YTbFjol04e/BPBH5RzQ==" + }, + "node_modules/@next/swc-android-arm-eabi": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.1.6.tgz", + "integrity": "sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-android-arm64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.1.6.tgz", + "integrity": "sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.1.6.tgz", + "integrity": "sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.1.6.tgz", + "integrity": "sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-freebsd-x64": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.1.6.tgz", + "integrity": "sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.1.6.tgz", + "integrity": "sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.1.6.tgz", + "integrity": "sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.1.6.tgz", + "integrity": "sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.1.6.tgz", + "integrity": "sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.1.6.tgz", + "integrity": "sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.1.6.tgz", + "integrity": "sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.1.6.tgz", + "integrity": "sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.1.6.tgz", + "integrity": "sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==", + "dependencies": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" + }, + "node_modules/@stitches/core": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@stitches/core/-/core-1.2.8.tgz", + "integrity": "sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==" + }, + "node_modules/@stitches/react": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@stitches/react/-/react-1.2.8.tgz", + "integrity": "sha512-9g9dWI4gsSVe8bNLlb+lMkBYsnIKCZTmvqvDG+Avnn69XfmHZKiaMrx7cgTaddq7aTPPmXiTsbFcUy0xgI4+wA==", + "peerDependencies": { + "react": ">= 16.3.0" + } + }, + "node_modules/@supabase/auth-helpers-react": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@supabase/auth-helpers-react/-/auth-helpers-react-0.3.1.tgz", + "integrity": "sha512-g3SFv08Dz9FapNif/ZY1b7qKGlMJDyTLSayHBz3kb3FuYxg7aLWgQtydDhm5AGbc0XtvpIBuhGTIOVevwpdosA==", + "peerDependencies": { + "@supabase/supabase-js": "^2.0.4" + } + }, + "node_modules/@supabase/auth-ui-react": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@supabase/auth-ui-react/-/auth-ui-react-0.2.8.tgz", + "integrity": "sha512-CfN9Zt2t1PMfri8htLCFYYIWho6F15ZvbWICE3RuOZ348z1P15iP6scjxB3704Jbu334Q+ykCQP+UzdnB7cXHQ==", + "dependencies": { + "@stitches/core": "^1.2.8", + "@stitches/react": "^1.2.8", + "prop-types": "^15.7.2" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.1 || ^18.0.0", + "react-dom": "^16.13.1 || ^17.0.1 || ^18.0.0" + } + }, + "node_modules/@supabase/functions-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.0.0.tgz", + "integrity": "sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==", + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@supabase/gotrue-js": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.12.1.tgz", + "integrity": "sha512-r8Jfq8FvP6q4kp7sI33X1RWfEEHzJFu9uM1Q6HgiDVkY89NNgqYy2kxaRGtidPFllND7vpcJUcpoWS5oq+4u0g==", + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@supabase/postgrest-js": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.4.1.tgz", + "integrity": "sha512-aruqwV/aTggkM7OVv2JinCeXmRMKHJCZpkuS1nuoa0NgLw7g3NyILSyWOKYTBJ/PxE/zXtWsBhdxFzaaNz5uxg==", + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.6.0.tgz", + "integrity": "sha512-tOVulMobhpxyDuu8VIImpL8FXmZOKsGNOSyS5ihJdj2xYmPPvYG+D2J51Ewfl+MFF65tweiB6p9N9bNIW1cDNA==", + "dependencies": { + "@types/phoenix": "^1.5.4", + "websocket": "^1.0.34" + } + }, + "node_modules/@supabase/storage-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.3.0.tgz", + "integrity": "sha512-YGWVCEYYYF3+UiyL8O4xC78N9n9paLbT0hHl8dmYAtd3DqyWtu5Eph9JTu0PWm+/29Zhns5TbhUZW4xpWjJfPQ==", + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.8.0.tgz", + "integrity": "sha512-uzf4J+qAKdUMhB2tnJl6BrQRUQBinwjJ2eWo2ZsDw9EUUP5JcHsxTamiq6p91DpqzmTIRg3xRAT+bItTzbfa0w==", + "dependencies": { + "@supabase/functions-js": "^2.0.0", + "@supabase/gotrue-js": "^2.12.0", + "@supabase/postgrest-js": "^1.1.1", + "@supabase/realtime-js": "^2.4.0", + "@supabase/storage-js": "^2.1.0", + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@swc/helpers": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", + "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "node_modules/@types/node": { + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" + }, + "node_modules/@types/phoenix": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.5.5.tgz", + "integrity": "sha512-1eWWT19k0L4ZiTvdXjAvJ9KvW0B8SdiVftQmFPJGTEx78Q4PCSIQDpz+EfkFVR1N4U9gREjlW4JXL8YCIlY0bw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/react": { + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", + "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz", + "integrity": "sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==", + "dependencies": { + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", + "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", + "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", + "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", + "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", + "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bufferutil": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", + "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001457", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", + "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concurrently": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", + "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.29.1", + "lodash": "^4.17.21", + "rxjs": "^7.0.0", + "shell-quote": "^1.7.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^17.3.1" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + }, + "node_modules/date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "dev": true, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", + "dependencies": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.1.6.tgz", + "integrity": "sha512-0cg7h5wztg/SoLAlxljZ0ZPUQ7i6QKqRiP4M2+MgTZtxWwNKb2JSwNc18nJ6/kXBI6xYvPraTbQSIhAuVw6czw==", + "dependencies": { + "@next/eslint-plugin-next": "13.1.6", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.42.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.3.tgz", + "integrity": "sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.10.0", + "get-tsconfig": "^4.2.0", + "globby": "^13.1.2", + "is-core-module": "^2.10.0", + "is-glob": "^4.0.3", + "synckit": "^0.8.4" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", + "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.4.0.tgz", + "integrity": "sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==", + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "dependencies": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/next": { + "version": "13.1.6", + "resolved": "https://registry.npmjs.org/next/-/next-13.1.6.tgz", + "integrity": "sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==", + "dependencies": { + "@next/env": "13.1.6", + "@swc/helpers": "0.4.14", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=14.6.0" + }, + "optionalDependencies": { + "@next/swc-android-arm-eabi": "13.1.6", + "@next/swc-android-arm64": "13.1.6", + "@next/swc-darwin-arm64": "13.1.6", + "@next/swc-darwin-x64": "13.1.6", + "@next/swc-freebsd-x64": "13.1.6", + "@next/swc-linux-arm-gnueabihf": "13.1.6", + "@next/swc-linux-arm64-gnu": "13.1.6", + "@next/swc-linux-arm64-musl": "13.1.6", + "@next/swc-linux-x64-gnu": "13.1.6", + "@next/swc-linux-x64-musl": "13.1.6", + "@next/swc-win32-arm64-msvc": "13.1.6", + "@next/swc-win32-ia32-msvc": "13.1.6", + "@next/swc-win32-x64-msvc": "13.1.6" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^6.0.0 || ^7.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==", + "dev": true + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tailwindcss": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.7.tgz", + "integrity": "sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==", + "dev": true, + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.0.9", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/tailwindcss/node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/tailwindcss/node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/examples/todo-list/nextjs-todo-list/package.json b/examples/todo-list/nextjs-todo-list/package.json new file mode 100644 index 00000000000..32fac003794 --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/package.json @@ -0,0 +1,32 @@ +{ + "name": "nextjs-todo-list", + "version": "2.0.0", + "private": true, + "scripts": { + "dev": "concurrently \"npm run dev:css\" \"next dev\"", + "dev:css": "tailwindcss -w -i ./styles/tailwind.css -o styles/app.css", + "build": "next build", + "build:css": "tailwindcss -m -i ./styles/tailwind.css -o styles/app.css", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@next/font": "13.1.6", + "@supabase/auth-helpers-react": "^0.3.1", + "@supabase/auth-ui-react": "^0.2.8", + "@supabase/supabase-js": "^2.8.0", + "@types/node": "18.14.0", + "@types/react": "18.0.28", + "@types/react-dom": "18.0.11", + "eslint": "8.34.0", + "eslint-config-next": "13.1.6", + "next": "13.1.6", + "react": "18.2.0", + "react-dom": "18.2.0", + "typescript": "4.9.5" + }, + "devDependencies": { + "concurrently": "^7.6.0", + "tailwindcss": "^3.2.7" + } +} diff --git a/examples/todo-list/nextjs-todo-list/pages/_app.tsx b/examples/todo-list/nextjs-todo-list/pages/_app.tsx new file mode 100644 index 00000000000..59d31d438bc --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/pages/_app.tsx @@ -0,0 +1,12 @@ +import { supabase } from '@/lib/initSupabase' +import '@/styles/app.css' +import { SessionContextProvider } from '@supabase/auth-helpers-react' +import type { AppProps } from 'next/app' + +export default function App({ Component, pageProps }: AppProps) { + return ( + + + + ) +} diff --git a/examples/todo-list/nextjs-todo-list/pages/_document.tsx b/examples/todo-list/nextjs-todo-list/pages/_document.tsx new file mode 100644 index 00000000000..54e8bf3e2a2 --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/pages/_document.tsx @@ -0,0 +1,13 @@ +import { Html, Head, Main, NextScript } from 'next/document' + +export default function Document() { + return ( + + + +
    + + + + ) +} diff --git a/examples/todo-list/nextjs-todo-list/pages/api/hello.ts b/examples/todo-list/nextjs-todo-list/pages/api/hello.ts new file mode 100644 index 00000000000..f8bcc7e5cae --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/pages/api/hello.ts @@ -0,0 +1,13 @@ +// Next.js API route support: https://nextjs.org/docs/api-routes/introduction +import type { NextApiRequest, NextApiResponse } from 'next' + +type Data = { + name: string +} + +export default function handler( + req: NextApiRequest, + res: NextApiResponse +) { + res.status(200).json({ name: 'John Doe' }) +} diff --git a/examples/todo-list/nextjs-todo-list/pages/index.tsx b/examples/todo-list/nextjs-todo-list/pages/index.tsx new file mode 100644 index 00000000000..d498b19419f --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/pages/index.tsx @@ -0,0 +1,50 @@ +import Head from 'next/head' +import { useSession, useSupabaseClient } from '@supabase/auth-helpers-react' +import { Auth, ThemeSupa } from '@supabase/auth-ui-react' +import TodoList from '@/components/TodoList' + +export default function Home() { + const session = useSession() + const supabase = useSupabaseClient() + + return ( + <> + + Create Next App + + + + +
    + {!session ? ( +
    +
    +
    + + Login + + +
    +
    +
    + ) : ( +
    + + +
    + )} +
    + + ) +} diff --git a/examples/todo-list/nextjs-todo-list/public/favicon.ico b/examples/todo-list/nextjs-todo-list/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/examples/todo-list/nextjs-todo-list/public/next.svg b/examples/todo-list/nextjs-todo-list/public/next.svg new file mode 100644 index 00000000000..5174b28c565 --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/todo-list/nextjs-todo-list/public/thirteen.svg b/examples/todo-list/nextjs-todo-list/public/thirteen.svg new file mode 100644 index 00000000000..8977c1bd123 --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/public/thirteen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/todo-list/nextjs-todo-list/public/vercel.svg b/examples/todo-list/nextjs-todo-list/public/vercel.svg new file mode 100644 index 00000000000..d2f84222734 --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/todo-list/nextjs-todo-list/styles/app.css b/examples/todo-list/nextjs-todo-list/styles/app.css new file mode 100644 index 00000000000..0530e31cacc --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/styles/app.css @@ -0,0 +1,844 @@ +/* +! tailwindcss v3.2.7 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +*/ + +html { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ + font-feature-settings: normal; + /* 5 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font family by default. +2. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden] { + display: none; +} + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; +} + +.mx-4 { + margin-left: 1rem; + margin-right: 1rem; +} + +.my-2 { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} + +.my-3 { + margin-top: 0.75rem; + margin-bottom: 0.75rem; +} + +.mb-1 { + margin-bottom: 0.25rem; +} + +.mb-12 { + margin-bottom: 3rem; +} + +.ml-2 { + margin-left: 0.5rem; +} + +.mt-12 { + margin-top: 3rem; +} + +.block { + display: block; +} + +.flex { + display: flex; +} + +.h-4 { + height: 1rem; +} + +.h-full { + height: 100%; +} + +.min-h-screen { + min-height: 100vh; +} + +.w-4 { + width: 1rem; +} + +.w-full { + width: 100%; +} + +.min-w-0 { + min-width: 0px; +} + +.min-w-full { + min-width: 100%; +} + +.max-w-sm { + max-width: 24rem; +} + +.flex-1 { + flex: 1 1 0%; +} + +.cursor-pointer { + cursor: pointer; +} + +.flex-col { + flex-direction: column; +} + +.items-center { + align-items: center; +} + +.justify-center { + justify-content: center; +} + +.gap-2 { + gap: 0.5rem; +} + +.overflow-hidden { + overflow: hidden; +} + +.truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.rounded { + border-radius: 0.25rem; +} + +.rounded-md { + border-radius: 0.375rem; +} + +.border-2 { + border-width: 2px; +} + +.border-b { + border-bottom-width: 1px; +} + +.bg-gray-200 { + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity)); +} + +.bg-red-100 { + --tw-bg-opacity: 1; + background-color: rgb(254 226 226 / var(--tw-bg-opacity)); +} + +.bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + +.p-2 { + padding: 0.5rem; +} + +.p-4 { + padding: 1rem; +} + +.p-5 { + padding: 1.25rem; +} + +.px-4 { + padding-left: 1rem; + padding-right: 1rem; +} + +.py-4 { + padding-top: 1rem; + padding-bottom: 1rem; +} + +.pb-2 { + padding-bottom: 0.5rem; +} + +.text-center { + text-align: center; +} + +.font-sans { + font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; +} + +.text-4xl { + font-size: 2.25rem; + line-height: 2.5rem; +} + +.text-base { + font-size: 1rem; + line-height: 1.5rem; +} + +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + +.font-medium { + font-weight: 500; +} + +.leading-5 { + line-height: 1.25rem; +} + +.text-red-700 { + --tw-text-opacity: 1; + color: rgb(185 28 28 / var(--tw-text-opacity)); +} + +.shadow { + --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.filter { + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.transition { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.duration-150 { + transition-duration: 150ms; +} + +.ease-in-out { + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Write your own custom component styles here */ + +.btn-black { + border-radius: 0.25rem; + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(0 0 0 / var(--tw-border-opacity)); + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity)); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + padding-right: 1rem; + text-align: center; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +.btn-black:hover { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); + --tw-text-opacity: 1; + color: rgb(0 0 0 / var(--tw-text-opacity)); + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.btn-black-outline { + border-radius: 0.25rem; + border-width: 1px; + --tw-border-opacity: 1; + border-color: rgb(0 0 0 / var(--tw-border-opacity)); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + padding-right: 1rem; + text-align: center; + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(0 0 0 / var(--tw-text-opacity)); +} + +.btn-black-outline:hover { + --tw-bg-opacity: 1; + background-color: rgb(0 0 0 / var(--tw-bg-opacity)); + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +html, +body, +#__next { + height: 100vh; + min-height: 100vh; +} + +h1 { + font-size: 4rem; + font-weight: bold; + display: block; +} + +.hover\:border-black:hover { + --tw-border-opacity: 1; + border-color: rgb(0 0 0 / var(--tw-border-opacity)); +} + +.hover\:bg-gray-200:hover { + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity)); +} + +.focus\:bg-gray-200:focus { + --tw-bg-opacity: 1; + background-color: rgb(229 231 235 / var(--tw-bg-opacity)); +} + +.focus\:outline-none:focus { + outline: 2px solid transparent; + outline-offset: 2px; +} + +@media (min-width: 640px) { + .sm\:h-auto { + height: auto; + } + + .sm\:w-2\/5 { + width: 40%; + } + + .sm\:px-6 { + padding-left: 1.5rem; + padding-right: 1.5rem; + } +} diff --git a/examples/todo-list/nextjs-todo-list/styles/tailwind.css b/examples/todo-list/nextjs-todo-list/styles/tailwind.css new file mode 100644 index 00000000000..a183f14adb7 --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/styles/tailwind.css @@ -0,0 +1,30 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +/* Write your own custom component styles here */ +.btn-black { + @apply border border-black bg-black text-white font-bold py-2 px-4 rounded text-center; +} +.btn-black:hover { + @apply transition duration-150 bg-white text-black; +} +.btn-black-outline { + @apply border border-black text-black py-2 px-4 rounded font-bold text-center; +} +.btn-black-outline:hover { + @apply transition duration-150 bg-black text-white; +} + +html, +body, +#__next { + height: 100vh; + min-height: 100vh; +} + +h1 { + font-size: 4rem; + font-weight: bold; + display: block; +} diff --git a/examples/todo-list/nextjs-todo-list/tailwind.config.js b/examples/todo-list/nextjs-todo-list/tailwind.config.js new file mode 100644 index 00000000000..81f91ba2f15 --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/tailwind.config.js @@ -0,0 +1,13 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./components/**/*.{js,ts,jsx,tsx}', './pages/**/*.{js,ts,jsx,tsx}'], + theme: { + extend: { + colors: { + 'accent-1': '#333', + }, + }, + }, + variants: {}, + plugins: [], +} diff --git a/examples/todo-list/nextjs-todo-list/tsconfig.json b/examples/todo-list/nextjs-todo-list/tsconfig.json new file mode 100644 index 00000000000..f4ab65fd2eb --- /dev/null +++ b/examples/todo-list/nextjs-todo-list/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "baseUrl": ".", + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"] +} diff --git a/examples/todo-list/sveltejs-todo-list/src/assets/app.css b/examples/todo-list/sveltejs-todo-list/src/assets/app.css index e20cf35c6f2..2bf19da9df6 100644 --- a/examples/todo-list/sveltejs-todo-list/src/assets/app.css +++ b/examples/todo-list/sveltejs-todo-list/src/assets/app.css @@ -457,53 +457,6 @@ video { --tw-backdrop-sepia: ; } -::-webkit-backdrop { - --tw-border-spacing-x: 0; - --tw-border-spacing-y: 0; - --tw-translate-x: 0; - --tw-translate-y: 0; - --tw-rotate: 0; - --tw-skew-x: 0; - --tw-skew-y: 0; - --tw-scale-x: 1; - --tw-scale-y: 1; - --tw-pan-x: ; - --tw-pan-y: ; - --tw-pinch-zoom: ; - --tw-scroll-snap-strictness: proximity; - --tw-ordinal: ; - --tw-slashed-zero: ; - --tw-numeric-figure: ; - --tw-numeric-spacing: ; - --tw-numeric-fraction: ; - --tw-ring-inset: ; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-color: rgb(59 130 246 / 0.5); - --tw-ring-offset-shadow: 0 0 #0000; - --tw-ring-shadow: 0 0 #0000; - --tw-shadow: 0 0 #0000; - --tw-shadow-colored: 0 0 #0000; - --tw-blur: ; - --tw-brightness: ; - --tw-contrast: ; - --tw-grayscale: ; - --tw-hue-rotate: ; - --tw-invert: ; - --tw-saturate: ; - --tw-sepia: ; - --tw-drop-shadow: ; - --tw-backdrop-blur: ; - --tw-backdrop-brightness: ; - --tw-backdrop-contrast: ; - --tw-backdrop-grayscale: ; - --tw-backdrop-hue-rotate: ; - --tw-backdrop-invert: ; - --tw-backdrop-opacity: ; - --tw-backdrop-saturate: ; - --tw-backdrop-sepia: ; -} - ::backdrop { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; From 0d5720a07a527b332d030b31e5d007a7aac913a4 Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Wed, 22 Feb 2023 14:49:16 +0000 Subject: [PATCH 142/230] Update link to next js todo example in dashboard --- studio/components/interfaces/Home/Home.constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/interfaces/Home/Home.constants.ts b/studio/components/interfaces/Home/Home.constants.ts index 0bbcef3fcda..4ea2889a70b 100644 --- a/studio/components/interfaces/Home/Home.constants.ts +++ b/studio/components/interfaces/Home/Home.constants.ts @@ -75,7 +75,7 @@ export const EXAMPLE_PROJECTS = [ framework: 'NextJS', title: 'Next.js todo list app', description: 'NextJS todo list example', - url: 'https://github.com/supabase/examples/tree/main/supabase-js-v1/todo-list/nextjs-todo-list', + url: 'https://github.com/supabase/examples/tree/master/examples/todo-list/nextjs-todo-list', }, { framework: 'React', From 98f88eb91dc3bd4976573459e0f7dc5121d7883f Mon Sep 17 00:00:00 2001 From: Andrew Smith Date: Wed, 22 Feb 2023 14:55:31 +0000 Subject: [PATCH 143/230] Update with correct link --- studio/components/interfaces/Home/Home.constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/interfaces/Home/Home.constants.ts b/studio/components/interfaces/Home/Home.constants.ts index 4ea2889a70b..319aa46eb5d 100644 --- a/studio/components/interfaces/Home/Home.constants.ts +++ b/studio/components/interfaces/Home/Home.constants.ts @@ -75,7 +75,7 @@ export const EXAMPLE_PROJECTS = [ framework: 'NextJS', title: 'Next.js todo list app', description: 'NextJS todo list example', - url: 'https://github.com/supabase/examples/tree/master/examples/todo-list/nextjs-todo-list', + url: 'https://github.com/supabase/supabase/tree/master/examples/todo-list/nextjs-todo-list', }, { framework: 'React', From ace053febd6f3df29d432a41b6a20503ee895fad Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Wed, 22 Feb 2023 20:50:12 +0100 Subject: [PATCH 144/230] Update apps/docs/pages/guides/platform/database-size.mdx --- apps/docs/pages/guides/platform/database-size.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/platform/database-size.mdx b/apps/docs/pages/guides/platform/database-size.mdx index 027e869c9da..f75314d6825 100644 --- a/apps/docs/pages/guides/platform/database-size.mdx +++ b/apps/docs/pages/guides/platform/database-size.mdx @@ -37,7 +37,7 @@ Regular operation (read-write mode) is automatically re-enabled once database st #### Increasing available database space -If your project is on the free tier, there is a 500mb Database size limit. +The Free Tier has a 500mb Database size limit. - If you are in [read-only](#free-tier-project-read-only-mode) mode: From 3a239c5c97cc8e14c98365283bd092f19e5729e0 Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Wed, 22 Feb 2023 21:20:30 +0100 Subject: [PATCH 145/230] round one --- .../pages/guides/platform/database-size.mdx | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/apps/docs/pages/guides/platform/database-size.mdx b/apps/docs/pages/guides/platform/database-size.mdx index f75314d6825..4b3054520b1 100644 --- a/apps/docs/pages/guides/platform/database-size.mdx +++ b/apps/docs/pages/guides/platform/database-size.mdx @@ -6,10 +6,12 @@ export const meta = { description: 'Understanding how database size applies to your subscription.', } -Database size refers to the _monthly average storage usage_, as reported by Postgres. This metric is reported in your project's [billing usage](https://app.supabase.com/project/_/settings/billing/usage) and is updated daily. -Database size is the total size of used storage from your database, whereas disk size describes the size of the underlying available storage. +Database size refers to the _monthly average storage usage_, as reported by Postgres. This metric is reported in your project's [billing usage](https://app.supabase.com/project/_/settings/billing/usage) and is updated daily. As you read this document we will refer to "database size" and "disk size": -For an instantaneous live view of the DB size, you can execute in Postgres: +- "Database size" is the total size of used storage from your database. +- "Disk size" describes the size of the underlying available storage. + +This SQL query will show the size of your Postgres database: ```sql select @@ -22,23 +24,17 @@ This value is also reported in the [database settings page](https://app.supabase ## Database storage management -Supabase uses network-attached storage to balance performance with scalability. +Supabase uses network-attached storage to balance performance with scalability. The behavior of your disk depends on your billing tier. -### Free tier project +### Free Tier -For [**Free tier projects**](#free-tier-project), the database can enter ['read only' mode when you exceed the 500mb limit](#free-tier-project-read-only-mode). - -#### Free tier project 'read-only' mode - -Free tier projects can enter read-only mode when exceeding the 500mb database size limit. +[Free Tier](#free-tier-project) projects will enter ['read only'](#free-tier-project-read-only-mode) mode when you exceed the 500mb limit. In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. Regular operation (read-write mode) is automatically re-enabled once database storage is below the 500mb database size limit. #### Increasing available database space -The Free Tier has a 500mb Database size limit. - - If you are in [read-only](#free-tier-project-read-only-mode) mode: - Then you can [upgrade to the Pro or Enterprise tier](https://app.supabase.com/project/_/settings/billing/subscription) to go beyond the 500mb database size limit. @@ -92,12 +88,11 @@ SET This allows you to delete data from within the session. -### Preoccupied Space +## Preoccupied Space -When launching a new project, your database size will be roughly ~40-60mb. -The space is used up by preinstalled extensions, schema/data used by our services that are offered with each project and default Postgres data. +New Supabase projects have a database size of ~40-60mb. This space includes pre-installed extensions, schemas, and default Postgres data. -When installing additional extensions, even if you don't actively use them, additional database size is used. +Additional database size is used when installing additional extensions, even if those extensions are inactive. ## Vacuum operations From 927fa0107d3de1a22dc199ac7e914d7a95d4d752 Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Wed, 22 Feb 2023 21:36:07 +0100 Subject: [PATCH 146/230] round 2 --- .../pages/guides/platform/database-size.mdx | 61 +++++++++++-------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/apps/docs/pages/guides/platform/database-size.mdx b/apps/docs/pages/guides/platform/database-size.mdx index 4b3054520b1..16ef3b34127 100644 --- a/apps/docs/pages/guides/platform/database-size.mdx +++ b/apps/docs/pages/guides/platform/database-size.mdx @@ -11,7 +11,11 @@ Database size refers to the _monthly average storage usage_, as reported by Post - "Database size" is the total size of used storage from your database. - "Disk size" describes the size of the underlying available storage. -This SQL query will show the size of your Postgres database: +## Database space management + +### Database size + +This SQL query will show the current size of your Postgres database: ```sql select @@ -20,9 +24,37 @@ from pg_database; ``` -This value is also reported in the [database settings page](https://app.supabase.com/project/_/settings/database). +This value is reported in the [database settings page](https://app.supabase.com/project/_/settings/database). -## Database storage management +Database Space is consumed primarily by your data, indexes, and materialized views. You can reduce your disk size by removing any of these and running a Vacuum operation. + + + +Depending on your billing tier, your database can go into read-only mode which can prevent you inserting and deleting data. There are instructions for managing read-only mode in the [Disk Management](#disk-management) section. + + + +### Vacuum operations + +Postgres does not immediately reclaim the physical space used by dead tuples (i.e., deleted rows) in the DB. They are marked as "removed" until a [vacuum operation](https://www.postgresql.org/docs/current/routine-vacuuming.html) is executed. As a result, deleting data from your database may not immediately reduce the reported disk usage. + + + +Vacuum operations can temporarily increase resource utilization, which may adversely impact the observed performance of your project until the maintenance is completed. + + + +Supabase projects have automatic vacuuming enabled, which ensures that these operations are performed regularly to keep the database healthy and performant. +It is possible to [fine-tune](https://www.percona.com/blog/2018/08/10/tuning-autovacuum-in-postgresql-and-autovacuum-internals/) +the [autovacuum parameters](https://www.enterprisedb.com/blog/postgresql-vacuum-and-analyze-best-practice-tips), +or [manually initiate](https://www.postgresql.org/docs/current/sql-vacuum.html) vacuum operations. +Running a manual vacuum after deleting large amounts of data from your DB could help reduce the database size reported by Postgres. + +### Preoccupied Space + +New Supabase projects have a database size of ~40-60mb. This space includes pre-installed extensions, schemas, and default Postgres data. Additional database size is used when installing extensions, even if those extensions are inactive. + +## Disk management Supabase uses network-attached storage to balance performance with scalability. The behavior of your disk depends on your billing tier. @@ -88,29 +120,6 @@ SET This allows you to delete data from within the session. -## Preoccupied Space - -New Supabase projects have a database size of ~40-60mb. This space includes pre-installed extensions, schemas, and default Postgres data. - -Additional database size is used when installing additional extensions, even if those extensions are inactive. - -## Vacuum operations - -Postgres does not immediately reclaim the physical space used by dead tuples (i.e., deleted rows) in the DB. Instead, they are internally marked as removed until a [vacuum operation](https://www.postgresql.org/docs/current/routine-vacuuming.html) is executed. -As a result, deleting data from your database may not immediately reduce the reported disk usage. - - - -Vacuum operations can temporarily increase resource utilization, which may adversely impact the observed performance of your project until the maintenance is completed. - - - -Supabase projects have automatic vacuuming enabled, which ensures that these operations are performed regularly to keep the database healthy and performant. -However, it can be necessary to either [fine-tune](https://www.percona.com/blog/2018/08/10/tuning-autovacuum-in-postgresql-and-autovacuum-internals/) -the [autovacuum parameters](https://www.enterprisedb.com/blog/postgresql-vacuum-and-analyze-best-practice-tips), -or [manually initiate](https://www.postgresql.org/docs/current/sql-vacuum.html) vacuum operations. -For example, running a manual vacuum after deleting large amounts of data from your DB could help reduce the reported disk usage by Postgres. - export const Page = ({ children }) => export default Page From ce2843255f72ca28ac5b8367449581a32a31a0cd Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Wed, 22 Feb 2023 22:05:01 +0100 Subject: [PATCH 147/230] final comments --- .../pages/guides/platform/database-size.mdx | 56 ++++++------------- package-lock.json | 1 + 2 files changed, 17 insertions(+), 40 deletions(-) diff --git a/apps/docs/pages/guides/platform/database-size.mdx b/apps/docs/pages/guides/platform/database-size.mdx index 16ef3b34127..8fb09062a9e 100644 --- a/apps/docs/pages/guides/platform/database-size.mdx +++ b/apps/docs/pages/guides/platform/database-size.mdx @@ -58,67 +58,43 @@ New Supabase projects have a database size of ~40-60mb. This space includes pre- Supabase uses network-attached storage to balance performance with scalability. The behavior of your disk depends on your billing tier. -### Free Tier +### Paid Tier Behavior -[Free Tier](#free-tier-project) projects will enter ['read only'](#free-tier-project-read-only-mode) mode when you exceed the 500mb limit. +Pro and Enterprise projects have auto-scaling Disk Storage. -In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. -Regular operation (read-write mode) is automatically re-enabled once database storage is below the 500mb database size limit. - -#### Increasing available database space - -- If you are in [read-only](#free-tier-project-read-only-mode) mode: - - - Then you can [upgrade to the Pro or Enterprise tier](https://app.supabase.com/project/_/settings/billing/subscription) to go beyond the 500mb database size limit. - - However; If your project database is already in [read-only](#free-tier-project-read-only-mode) mode, run the following command to change the transaction mode to read-write for your session - (This allows you to delete data from within the session). - - ```sql - SET - default_transaction_read_only = 'off'; - ``` - -- If you are over your limit, but not in [read-only](#free-tier-project-read-only-mode) mode yet, it's important to reduce your Database size as your database might go into [read-only](#free-tier-project-read-only-mode) mode. - -### Paid tier project - -For **Pro and Enterprise tier projects**, your [disk size expands automatically](#paid-tier-disk-auto-scaling). - -#### Paid tier disk auto-scaling - -Pro and Enterprise have Disk size auto-scaling. Database storage expands automatically when the database reaches 90% of the disk size. The disk is expanded to be 50% larger (e.g., 8GB -> 12GB). -Auto-scaling can only take place once every 6 hours. +Disk storage expands automatically when the database reaches 90% of the disk size. The disk is expanded to be 50% larger (e.g., 8GB -> 12GB). Auto-scaling can only take place once every 6 hours. If within those 6 hours you reach 95% of the disk space, your project will enter read-only mode. -If you intend to import a lot of data into your database that would require multiple storage expansions then [reach out to our team](https://app.supabase.com/support/new), otherwise your project might enter a ['read-only' mode](#paid-tier-project-read-only-mode). +If you intend to import a lot of data into your database which requires multiple disk expansions then [reach out to our team](https://app.supabase.com/support/new). For example, uploading more than 1.5x the current size of your database storage will put your database into [read-only mode](#read-only-mode). -You may require multiple storage expansions in a short period of time. For example, you need to upload more than 1.5x the current size of your database storage. This will lead to your database entering a [read-only mode](#paid-tier-project-read-only-mode). You can avoid this by [contacting the support team](https://app.supabase.com/support/new) so that your database can be resized to a sufficient amount before you start uploading to it. +The maximum Disk Size for Pro Tier is 1024TB. If you need more than this, [contact us](https://app.supabase.com/support/new) to learn more about the Enterprise plan. -If you need more than 1024TB of disk size, you can [contact us](https://app.supabase.com/support/new) to learn more about the Enterprise plan. +### Free Tier Behavior -#### Paid tier project 'read-only' mode +[Free Tier](#free-tier-project) projects enter ['read only'](#free-tier-project-read-only-mode) mode when you exceed the 500mb limit. Once in read-only mode, you have several options: -Database storage expands, at most, once every 6 hours. -If within those 6 hours you reach 95% of the disk space, your project will enter read-only mode. +- [Upgrade to the Pro or Enterprise tier](https://app.supabase.com/project/_/settings/billing/subscription) to enable auto-scaling and expand beyond the 500mb database size limit. +- [Disable read-only mode](#disabling-read-only-mode) and reduce your database size. -In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. -Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size, or when the database automatically resizes after the 6 hour period. +### Read-only mode -#### Increasing available database space +In some cases Supabase may put your database into read-only mode to prevent your database from exceeding the billing or disk limitations. -For Pro and Enterprise tier projects that are [nearing their disk size limit](#paid-tier-project-read-only-mode), you can increase available disk size by deleting data from your project's database to lower its disk usage. +In read-only mode, clients will encounter errors such as `cannot execute INSERT in a read-only transaction`. Regular operation (read-write mode) is automatically re-enabled once usage is below 95% of the disk size, -If your project database is already in [read-only](#paid-tier-project-read-only-mode) mode, run the following command to change the transaction mode to read-write for your session: +### Disabling read-only mode + +You can manually override read-only mode to reduce disk size. To do this, run the following in the [SQL Editor](https://app.supabase.com/project/_/sql): ```sql SET default_transaction_read_only = 'off'; ``` -This allows you to delete data from within the session. +This allows you to delete data from within the session. After deleting data, you should run a vacuum to reclaim as much space as possible. export const Page = ({ children }) => diff --git a/package-lock.json b/package-lock.json index dccce67d772..96964519779 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "supabase", "version": "0.0.0", "license": "Apache-2.0", "workspaces": [ From 006048eaddfeaee7f75b298e939c0a3e69523850 Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Wed, 22 Feb 2023 22:07:57 +0100 Subject: [PATCH 148/230] fixes links --- apps/docs/pages/guides/platform/database-size.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/platform/database-size.mdx b/apps/docs/pages/guides/platform/database-size.mdx index 8fb09062a9e..b827b926832 100644 --- a/apps/docs/pages/guides/platform/database-size.mdx +++ b/apps/docs/pages/guides/platform/database-size.mdx @@ -74,7 +74,7 @@ The maximum Disk Size for Pro Tier is 1024TB. If you need more than this, [conta ### Free Tier Behavior -[Free Tier](#free-tier-project) projects enter ['read only'](#free-tier-project-read-only-mode) mode when you exceed the 500mb limit. Once in read-only mode, you have several options: +Free Tier projects enter [read-only](#read-only-mode) mode when you exceed the 500mb limit. Once in read-only mode, you have several options: - [Upgrade to the Pro or Enterprise tier](https://app.supabase.com/project/_/settings/billing/subscription) to enable auto-scaling and expand beyond the 500mb database size limit. - [Disable read-only mode](#disabling-read-only-mode) and reduce your database size. From 68f759631e5fc55d66a1f47b23f0e29f1731424b Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Wed, 22 Feb 2023 22:17:53 +0100 Subject: [PATCH 149/230] Update apps/docs/pages/guides/auth/server-side-rendering.mdx --- apps/docs/pages/guides/auth/server-side-rendering.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/auth/server-side-rendering.mdx b/apps/docs/pages/guides/auth/server-side-rendering.mdx index 10ccfcf4e5b..53627fe94db 100644 --- a/apps/docs/pages/guides/auth/server-side-rendering.mdx +++ b/apps/docs/pages/guides/auth/server-side-rendering.mdx @@ -162,7 +162,7 @@ use this potentially stale information to render a page. ### No session on the server side with Next.js route prefetching? -When you use route prefetching in Next.js using `` components or the `Router.push()` APIs can cause server-side requests to be sent out before the browser-side has had a chance to process the access and refresh tokens. This means that those requests may not have any cookies set, and your server code will render unauthenticated content. +When you use route prefetching in Next.js using `` components or the `Router.push()` APIs can send server-side requests before the browser processes the access and refresh tokens. This means that those requests may not have any cookies set and your server code will render unauthenticated content. To go around this problem you can always redirect users back to one specific page after sign-in, where you will not be using any route prefetching magic from Next.js, and then once the Supabase client library running in the browser has had a chance to obtain the access and refresh tokens from the URL fragment, take the user to regular Next.js pages which can use prefetching. From 56d12a5c41d9184ee68432d6b13da75adb10311d Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Wed, 22 Feb 2023 22:21:38 +0100 Subject: [PATCH 150/230] Update apps/docs/pages/guides/auth/server-side-rendering.mdx --- apps/docs/pages/guides/auth/server-side-rendering.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/auth/server-side-rendering.mdx b/apps/docs/pages/guides/auth/server-side-rendering.mdx index 53627fe94db..346984a63fb 100644 --- a/apps/docs/pages/guides/auth/server-side-rendering.mdx +++ b/apps/docs/pages/guides/auth/server-side-rendering.mdx @@ -164,7 +164,7 @@ use this potentially stale information to render a page. When you use route prefetching in Next.js using `` components or the `Router.push()` APIs can send server-side requests before the browser processes the access and refresh tokens. This means that those requests may not have any cookies set and your server code will render unauthenticated content. -To go around this problem you can always redirect users back to one specific page after sign-in, where you will not be using any route prefetching magic from Next.js, and then once the Supabase client library running in the browser has had a chance to obtain the access and refresh tokens from the URL fragment, take the user to regular Next.js pages which can use prefetching. +To improve experience for your users, we recommend redirecting users to one specific page after sign-in that does not include any route prefetching from Next.js. Once the Supabase client library running in the browser has obtained the access and refresh tokens from the URL fragment, you can send users to any pages that use prefetching. ### How do I make the cookies `HttpOnly`? From d3fc6a6e8b610cea0735852d2e442ea4729edae7 Mon Sep 17 00:00:00 2001 From: Copple <10214025+kiwicopple@users.noreply.github.com> Date: Wed, 22 Feb 2023 22:58:30 +0100 Subject: [PATCH 151/230] Update apps/docs/pages/guides/integrations/prisma.mdx --- apps/docs/pages/guides/integrations/prisma.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/integrations/prisma.mdx b/apps/docs/pages/guides/integrations/prisma.mdx index c8ea366d16b..2951c44b9d6 100644 --- a/apps/docs/pages/guides/integrations/prisma.mdx +++ b/apps/docs/pages/guides/integrations/prisma.mdx @@ -141,7 +141,7 @@ That’s it! You have now successfully connected a Prisma project to a PostgreSQ If you’re working in a serverless environment (for example Node.js functions hosted on AWS Lambda, Vercel or Netlify Functions), you need to set up [connection pooling](https://www.prisma.io/docs/guides/performance-and-optimization/connection-management#serverless-environments-faas) using a tool like [PgBouncer](https://www.pgbouncer.org/). That’s because every function invocation may result in a [new connection to the database](https://www.prisma.io/docs/guides/performance-and-optimization/connection-management#the-serverless-challenge). -Supabase [supports connection management using PgBouncer](https://supabase.io/blog/2021/04/02/supabase-pgbouncer#what-is-connection-pooling) and are enabled by default. +Supabase [supports connection management using PgBouncer](/docs/guides/database/connecting-to-postgres#connection-pool). Go to the **Database** page from the sidebar in the Supabase dashboard and navigate to **Connection pool** settings: From f6d1483fc6927809f483765cbfebdc5165a465e4 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Thu, 23 Feb 2023 12:36:39 +0800 Subject: [PATCH 152/230] Apply suggestions from code review Co-authored-by: Copple <10214025+kiwicopple@users.noreply.github.com> --- .../pages/guides/platform/performance.mdx | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/apps/docs/pages/guides/platform/performance.mdx b/apps/docs/pages/guides/platform/performance.mdx index e0228809418..8594995acfb 100644 --- a/apps/docs/pages/guides/platform/performance.mdx +++ b/apps/docs/pages/guides/platform/performance.mdx @@ -10,9 +10,9 @@ The Supabase platform automatically optimizes your Postgres database to take adv ## Examining Query Performance -A major cause of poor database performance is unoptimized queries. The techniques on this page can help you identify and understand queries that take the most time and resources from your database. +Unoptimized queries are a major cause of poor database performance. The techniques on this page can help you identify and understand queries that take the most time and resources from your database. -Database performance is a large topic and many factors can contribute, but some of the most common causes of poor performance include: +Database performance is a large topic and many factors can contribute. Some of the most common causes of poor performance include: * An inefficiently designed schema * Inefficiently designed queries @@ -26,9 +26,9 @@ Thankfully there are solutions to all these issues, which we will cover in the f ### Postgres Cumulative Statistics system -Postgres itself collects lots of data about its own operations using the [cumulative statistics system](https://www.postgresql.org/docs/current/monitoring-stats.html). In addition to this, every Supabase project has [the pg_stat_statements extension](https://www.postgresql.org/docs/14/pgstatstatements.html) enabled by default. This extension records query execution performance details and is the best way to find queries that take the most time to execute. This information can be combined with the Postgres query plan analyzer to develop more efficient queries. +Postgres collects data about its own operations using the [cumulative statistics system](https://www.postgresql.org/docs/current/monitoring-stats.html). In addition to this, every Supabase project has the [pg_stat_statements extension](/docs/guides/database/extensions/pg_stat_statements) enabled by default. This extension records query execution performance details and is the best way to find inefficient queries. This information can be combined with the Postgres query plan analyzer to develop more efficient queries. -It is easy to use `pg_stat_statements` and other Postgres statistics tables to get a wealth of information about your database. Here are some example queries to get you started. +Here are some example queries to get you started. Most frequently called queries: @@ -57,9 +57,16 @@ limit 100; ``` -This query will show you statistics about queries ordered by the number of times they have been called. It shows the role that ran the query, the number of times it has been called, the average number of rows returned, the cumulative total time the query has spent running as well as the min, max and mean query times. +This query shows: -This can provide useful information about queries that you are running often. You should try and ensure that any queries that are being called often are performant and have good mean exeuction times. Queries which are showing as having high max or mean times and are being called often can be good candidates for optimisation. +- query statistics, ordered by the number of times each query has been executed +- the role that ran the query +- the number of times it has been called +- the average number of rows returned +- the cumulative total time the query has spent running +- the min, max and mean query times. + +This provides useful information about the queries you run most frequently. Queries that have high `max_time` or `mean_time` times and are being called often can be good candidates for optimization. Slowest queries by execution time: From ce03be7e36b57f3a2020cff774f5a09939393921 Mon Sep 17 00:00:00 2001 From: Alaister Young Date: Thu, 23 Feb 2023 15:53:32 +1100 Subject: [PATCH 153/230] lowercase over() and as Co-authored-by: Jonathan Summers-Muir --- studio/components/interfaces/SQLEditor/SQLEditor.constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts b/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts index b9c908eeae3..f1b8e5c4c85 100644 --- a/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts +++ b/studio/components/interfaces/SQLEditor/SQLEditor.constants.ts @@ -1015,7 +1015,7 @@ select statements.query, statements.calls, statements.total_exec_time + statements.total_plan_time as total_time, - to_char(((statements.total_exec_time + statements.total_plan_time)/sum(statements.total_exec_time + statements.total_plan_time) OVER()) * 100, 'FM90D0') || '%' AS prop_total_time + to_char(((statements.total_exec_time + statements.total_plan_time)/sum(statements.total_exec_time + statements.total_plan_time) over()) * 100, 'FM90D0') || '%' as prop_total_time from pg_stat_statements as statements inner join pg_authid as auth on statements.userid = auth.oid order by From 44a4aa4ace858c40547fcd3c2ac49e56ab7edeb3 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Thu, 23 Feb 2023 12:55:51 +0800 Subject: [PATCH 154/230] Apply suggestions from code review --- apps/docs/pages/guides/platform/performance.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/docs/pages/guides/platform/performance.mdx b/apps/docs/pages/guides/platform/performance.mdx index 8594995acfb..d5a1f6d4ef3 100644 --- a/apps/docs/pages/guides/platform/performance.mdx +++ b/apps/docs/pages/guides/platform/performance.mdx @@ -30,7 +30,7 @@ Postgres collects data about its own operations using the [cumulative statistics Here are some example queries to get you started. -Most frequently called queries: +#### Most frequently called queries: ```sql select @@ -68,7 +68,7 @@ This query shows: This provides useful information about the queries you run most frequently. Queries that have high `max_time` or `mean_time` times and are being called often can be good candidates for optimization. -Slowest queries by execution time: +#### Slowest queries by execution time: ```sql select @@ -96,7 +96,7 @@ from pg_stat_statements as statements This query will show you statistics about queries ordered by the maximum execution time. It is similar to the query above ordered by calls, but this one highlights outliers that may have high executions times. Queries which have high or mean execution times are good candidates for optimisation. -Most time consuming queries: +#### Most time consuming queries: ```sql select From bcfecac945741fa901b60b0a212e1a87afc4a194 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Thu, 23 Feb 2023 12:57:03 +0800 Subject: [PATCH 155/230] Update apps/docs/pages/guides/platform/performance.mdx Co-authored-by: Alaister Young --- apps/docs/pages/guides/platform/performance.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/platform/performance.mdx b/apps/docs/pages/guides/platform/performance.mdx index d5a1f6d4ef3..a00b509dbb3 100644 --- a/apps/docs/pages/guides/platform/performance.mdx +++ b/apps/docs/pages/guides/platform/performance.mdx @@ -104,7 +104,7 @@ select statements.query, statements.calls, statements.total_exec_time + statements.total_plan_time as total_time, - to_char(((statements.total_exec_time + statements.total_plan_time)/sum(statements.total_exec_time + statements.total_plan_time) OVER()) * 100, 'FM90D0') || '%' AS prop_total_time + to_char(((statements.total_exec_time + statements.total_plan_time)/sum(statements.total_exec_time + statements.total_plan_time) over()) * 100, 'FM90D0') || '%' as prop_total_time from pg_stat_statements as statements inner join pg_authid as auth on statements.userid = auth.oid order by From fe8735c563fca86fa75e7d74caaa3ce92a57e438 Mon Sep 17 00:00:00 2001 From: theMogget Date: Thu, 23 Feb 2023 13:14:25 +0800 Subject: [PATCH 156/230] blog(docsgpt): language nits --- apps/www/_blog/2023-02-07-chatgpt-supabase-docs.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/www/_blog/2023-02-07-chatgpt-supabase-docs.mdx b/apps/www/_blog/2023-02-07-chatgpt-supabase-docs.mdx index 0773f7c9713..85b061947c7 100644 --- a/apps/www/_blog/2023-02-07-chatgpt-supabase-docs.mdx +++ b/apps/www/_blog/2023-02-07-chatgpt-supabase-docs.mdx @@ -11,7 +11,7 @@ date: '2023-02-07' toc_depth: 3 --- -We all know that Microsoft's real agenda for pouring billions into OpenAI to revive their favorite friend Clippy. +We all know that Microsoft's real agenda for pouring billions into OpenAI is to revive their favorite friend Clippy. Today, we're doing our part to support the momentum by releasing “Supabase Clippy” for our docs (and we don't expect this name to last long before the lawyers catch on). ![Clippy](/images/blog/docsgpt/clippy.png) @@ -30,7 +30,7 @@ Our product suite has grown in the past 2 years and our docs have grown as a res ### The “ask” interface -Developers have recently gained an the ability to trust a bot. Where Clippy failed, ChatGPT succeeded. +Developers have recently gained the ability to trust a bot. Where Clippy failed, ChatGPT succeeded. This is convenient timing for us, since our documentation content is more than the average developer wants to consume in one go. Today we're providing a similar interface to ChatGPT which is trained on our own docs. From e63970b45170d4c0108935a4d422fdde4687d9be Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Thu, 23 Feb 2023 14:28:18 +0800 Subject: [PATCH 157/230] Add check permissions across storage explorer components and refactor some files to tsx --- .../TeamSettings/MemberActions.tsx | 3 +- .../Organization/TeamSettings/MembersView.tsx | 4 +- .../layouts/ProjectLayout/ConnectingState.tsx | 1 + .../layouts/StorageLayout/StorageLayout.tsx | 37 ++-- .../StorageExplorer/ColumnContextMenu.js | 49 ------ .../StorageExplorer/ColumnContextMenu.tsx | 121 +++++++++++++ .../Storage/StorageExplorer/FileExplorer.js | 25 +-- .../StorageExplorer/FileExplorerHeader.tsx | 75 ++++++-- .../StorageExplorer/FileExplorerRow.tsx | 160 +++++++++++------- .../StorageExplorer/FolderContextMenu.js | 29 ---- .../StorageExplorer/FolderContextMenu.tsx | 44 +++++ ...ItemContextMenu.js => ItemContextMenu.tsx} | 52 +++--- .../{MoveItemsModal.js => MoveItemsModal.tsx} | 18 +- .../Storage/StorageExplorer/PreviewPane.tsx | 43 ++++- .../StorageExplorer/StorageExplorer.js | 18 -- studio/lib/pingPostgrest.ts | 1 + .../storageExplorer/StorageExplorerStore.js | 2 +- 17 files changed, 426 insertions(+), 256 deletions(-) delete mode 100644 studio/components/to-be-cleaned/Storage/StorageExplorer/ColumnContextMenu.js create mode 100644 studio/components/to-be-cleaned/Storage/StorageExplorer/ColumnContextMenu.tsx delete mode 100644 studio/components/to-be-cleaned/Storage/StorageExplorer/FolderContextMenu.js create mode 100644 studio/components/to-be-cleaned/Storage/StorageExplorer/FolderContextMenu.tsx rename studio/components/to-be-cleaned/Storage/StorageExplorer/{ItemContextMenu.js => ItemContextMenu.tsx} (66%) rename studio/components/to-be-cleaned/Storage/StorageExplorer/{MoveItemsModal.js => MoveItemsModal.tsx} (83%) diff --git a/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx b/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx index a920d38809e..9bd55624df0 100644 --- a/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx +++ b/studio/components/interfaces/Organization/TeamSettings/MemberActions.tsx @@ -15,12 +15,11 @@ import { isInviteExpired } from '../Organization.utils' import { getRolesManagementPermissions } from './TeamSettings.utils' interface Props { - members: Member[] member: Member roles: Role[] } -const MemberActions: FC = ({ members, member, roles }) => { +const MemberActions: FC = ({ member, roles }) => { const { ui } = useStore() const { slug } = useParams() const { rolesRemovable } = getRolesManagementPermissions(roles) diff --git a/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx b/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx index c54088028ed..87099434d46 100644 --- a/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx +++ b/studio/components/interfaces/Organization/TeamSettings/MembersView.tsx @@ -232,9 +232,7 @@ const MembersView: FC = ({ searchString, roles, members }) => { )} - {!memberIsUser && ( - - )} + {!memberIsUser && } diff --git a/studio/components/layouts/ProjectLayout/ConnectingState.tsx b/studio/components/layouts/ProjectLayout/ConnectingState.tsx index a4124474256..d26e4043bea 100644 --- a/studio/components/layouts/ProjectLayout/ConnectingState.tsx +++ b/studio/components/layouts/ProjectLayout/ConnectingState.tsx @@ -40,6 +40,7 @@ const ConnectingState: FC = ({ project }) => { const result = await pingPostgrest(project.restUrl!, project.ref, { kpsVersion: project.kpsVersion, }) + console.log('testProjectConnection', result) if (result) { clearInterval(checkProjectConnectionIntervalRef.current) app.onProjectPostgrestStatusUpdated(project.id, 'ONLINE') diff --git a/studio/components/layouts/StorageLayout/StorageLayout.tsx b/studio/components/layouts/StorageLayout/StorageLayout.tsx index 53432b6461c..cb46bbb60d2 100644 --- a/studio/components/layouts/StorageLayout/StorageLayout.tsx +++ b/studio/components/layouts/StorageLayout/StorageLayout.tsx @@ -40,11 +40,8 @@ const StorageLayout: FC = ({ title, children }) => { buckets, } = storageExplorerStore || {} - // [Joshen] At the moment, without the service key, we won't be able to pull any data from storage const { data: settings, isLoading } = useProjectApiQuery({ projectRef }) const apiService = settings?.autoApiService - const serviceKey = find(apiService?.service_api_keys ?? [], (key) => key.tags === 'service_role') - const canAccessStorage = !isLoading && apiService && serviceKey useEffect(() => { if (!isLoading && apiService) initializeStorageStore(apiService) @@ -52,15 +49,13 @@ const StorageLayout: FC = ({ title, children }) => { const initializeStorageStore = async (apiService: AutoApiService) => { if (apiService.endpoint) { - if (serviceKey) { - storageExplorerStore.initStore( - projectRef, - apiService.endpoint, - apiService.serviceApiKey, - apiService.protocol - ) - await storageExplorerStore.fetchBuckets() - } + storageExplorerStore.initStore( + projectRef, + apiService.endpoint, + apiService.serviceApiKey, + apiService.protocol + ) + await storageExplorerStore.fetchBuckets() } else { ui.setNotification({ category: 'error', @@ -100,15 +95,15 @@ const StorageLayout: FC = ({ title, children }) => { } } - if (!isLoading && !canAccessStorage) { - return ( - -
    - -
    -
    - ) - } + // if (!isLoading && !canAccessStorage) { + // return ( + // + //
    + // + //
    + //
    + // ) + // } return ( }> diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/ColumnContextMenu.js b/studio/components/to-be-cleaned/Storage/StorageExplorer/ColumnContextMenu.js deleted file mode 100644 index 45d5cb5ba0d..00000000000 --- a/studio/components/to-be-cleaned/Storage/StorageExplorer/ColumnContextMenu.js +++ /dev/null @@ -1,49 +0,0 @@ -import { Menu, Item, Separator, Submenu } from 'react-contexify' -import 'react-contexify/dist/ReactContexify.css' - -import { STORAGE_VIEWS, STORAGE_SORT_BY, STORAGE_SORT_BY_ORDER } from '../Storage.constants' - -const ColumnContextMenu = ({ - id = '', - onCreateNewFolder = () => {}, - onSelectAllItems = () => {}, - onSelectView = () => {}, - onSelectSort = () => {}, - onSelectSortByOrder = () => {}, -}) => { - return ( - - { - onCreateNewFolder(props.index) - }} - > - New folder - - - { - onSelectAllItems(props.index) - }} - > - Select all items - - - onSelectView(STORAGE_VIEWS.COLUMNS)}>As columns - onSelectView(STORAGE_VIEWS.LIST)}>As list - - - onSelectSort(STORAGE_SORT_BY.NAME)}>Name - onSelectSort(STORAGE_SORT_BY.CREATED_AT)}>Last created - onSelectSort(STORAGE_SORT_BY.UPDATED_AT)}>Last modified - onSelectSort(STORAGE_SORT_BY.LAST_ACCESSED_AT)}>Last accessed - - - onSelectSortByOrder(STORAGE_SORT_BY_ORDER.ASC)}>Ascending - onSelectSortByOrder(STORAGE_SORT_BY_ORDER.DESC)}>Descending - - - ) -} - -export default ColumnContextMenu diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/ColumnContextMenu.tsx b/studio/components/to-be-cleaned/Storage/StorageExplorer/ColumnContextMenu.tsx new file mode 100644 index 00000000000..4f13edbf96b --- /dev/null +++ b/studio/components/to-be-cleaned/Storage/StorageExplorer/ColumnContextMenu.tsx @@ -0,0 +1,121 @@ +import { FC } from 'react' +import { compact, uniqBy } from 'lodash' +import { Menu, Item, Separator, Submenu } from 'react-contexify' +import 'react-contexify/dist/ReactContexify.css' + +import { + STORAGE_VIEWS, + STORAGE_SORT_BY, + STORAGE_SORT_BY_ORDER, + STORAGE_ROW_TYPES, +} from '../Storage.constants' +import { useStorageStore } from 'localStores/storageExplorer/StorageExplorerStore' +import { IconFolderPlus } from 'ui' + +interface Props { + id: string +} + +const ColumnContextMenu: FC = ({ id = '' }) => { + const storageExplorerStore = useStorageStore() + const { + columns, + selectedItems, + setSelectedItems, + setView, + setSortBy, + setSortByOrder, + addNewFolderPlaceholder, + } = storageExplorerStore + + const onSelectCreateFolder = (columnIndex = -1) => { + addNewFolderPlaceholder(columnIndex) + } + + const onSelectAllItemsInColumn = (columnIndex: number) => { + const columnFiles = columns[columnIndex].items + .filter((item: any) => item.type === STORAGE_ROW_TYPES.FILE) + .map((item: any) => { + return { ...item, columnIndex } + }) + const columnFilesId = compact(columnFiles.map((item: any) => item.id)) + const selectedItemsFromColumn = selectedItems.filter((item: any) => + columnFilesId.includes(item.id) + ) + + if (selectedItemsFromColumn.length === columnFiles.length) { + // Deselect all items from column + const updatedSelectedItems = selectedItems.filter( + (item: any) => !columnFilesId.includes(item.id) + ) + setSelectedItems(updatedSelectedItems) + } else { + // Select all items from column + const updatedSelectedItems = uniqBy(selectedItems.concat(columnFiles), 'id') + setSelectedItems(updatedSelectedItems) + } + } + + return ( + + onSelectCreateFolder(props.index)}> + + New folder + + + onSelectAllItemsInColumn(props.index)}> + Select all items + + + View +
    + } + > + setView(STORAGE_VIEWS.COLUMNS)}> + As columns + + setView(STORAGE_VIEWS.LIST)}> + As list + + + + Sort by +
    + } + > + setSortBy(STORAGE_SORT_BY.NAME)}> + Name + + setSortBy(STORAGE_SORT_BY.CREATED_AT)}> + Last created + + setSortBy(STORAGE_SORT_BY.UPDATED_AT)}> + Last modified + + setSortBy(STORAGE_SORT_BY.LAST_ACCESSED_AT)}> + Last accessed + + + + Sort by order +
    + } + > + setSortByOrder(STORAGE_SORT_BY_ORDER.ASC)}> + Ascending + + setSortByOrder(STORAGE_SORT_BY_ORDER.DESC)}> + Descending + + + + ) +} + +export default ColumnContextMenu diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorer.js b/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorer.js index 69e9a354f06..2b41ffda51a 100644 --- a/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorer.js +++ b/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorer.js @@ -1,4 +1,4 @@ -import React, { useEffect, useRef } from 'react' +import { useEffect, useRef } from 'react' import { observer } from 'mobx-react-lite' import { STORAGE_VIEWS, CONTEXT_MENU_KEYS } from '../Storage.constants' @@ -6,7 +6,6 @@ import ItemContextMenu from './ItemContextMenu' import FolderContextMenu from './FolderContextMenu' import ColumnContextMenu from './ColumnContextMenu' import FileExplorerColumn from './FileExplorerColumn' -import { useStorageStore } from 'localStores/storageExplorer/StorageExplorerStore' const FileExplorer = ({ view = STORAGE_VIEWS.COLUMNS, @@ -17,16 +16,9 @@ const FileExplorer = ({ onFilesUpload = () => {}, onSelectAllItemsInColumn = () => {}, onSelectColumnEmptySpace = () => {}, - onSelectCreateFolder = () => {}, - onChangeView = () => {}, - onChangeSortBy = () => {}, - onChangeSortByOrder = () => {}, onColumnLoadMore = () => {}, }) => { const fileExplorerRef = useRef(null) - const storageExplorerStore = useStorageStore() - - const { setSelectedItemToRename, setSelectedItemsToDelete } = storageExplorerStore useEffect(() => { if (fileExplorerRef) { @@ -42,20 +34,9 @@ const FileExplorer = ({ ref={fileExplorerRef} className="file-explorer flex flex-grow overflow-x-auto justify-between h-full w-full" > - + - setSelectedItemToRename(folder)} - onDeleteFolder={(folder) => setSelectedItemsToDelete([folder])} - /> + {view === STORAGE_VIEWS.COLUMNS ? (
    {columns.map((column, index) => ( diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerHeader.tsx b/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerHeader.tsx index e4ab9f3e40e..d3b10ab5108 100644 --- a/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerHeader.tsx +++ b/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerHeader.tsx @@ -18,6 +18,10 @@ import { IconChevronsUp, IconList, } from 'ui' +import * as Tooltip from '@radix-ui/react-tooltip' +import { PermissionAction } from '@supabase/shared-types/out/constants' + +import { checkPermissions } from 'hooks' import { useStorageStore } from 'localStores/storageExplorer/StorageExplorerStore' import { STORAGE_VIEWS, STORAGE_SORT_BY, STORAGE_SORT_BY_ORDER } from '../Storage.constants' @@ -137,6 +141,7 @@ const FileExplorerHeader: FC = ({ const breadcrumbs = columns.map((column: any) => column.name) const backDisabled = columns.length <= 1 + const canUpdateStorage = checkPermissions(PermissionAction.STORAGE_ADMIN_WRITE, '*') useEffect(() => { if (itemSearchString) setSearchString(itemSearchString) @@ -392,22 +397,60 @@ const FileExplorerHeader: FC = ({ {/* @ts-ignore */}
    - - + + + + + {!canUpdateStorage && ( + + +
    + + You need additional permissions to upload files + +
    +
    + )} +
    + + + + + {!canUpdateStorage && ( + + +
    + + You need additional permissions to create folders + +
    +
    + )} +
    {/* Search: Disabled for now */} diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerRow.tsx b/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerRow.tsx index b5bd5982c23..55437aba869 100644 --- a/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerRow.tsx +++ b/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorerRow.tsx @@ -20,6 +20,9 @@ import { import SVG from 'react-inlinesvg' import * as Tooltip from '@radix-ui/react-tooltip' import { useContextMenu } from 'react-contexify' +import { PermissionAction } from '@supabase/shared-types/out/constants' + +import { checkPermissions } from 'hooks' import { STORAGE_VIEWS, STORAGE_ROW_TYPES, @@ -95,6 +98,7 @@ const FileExplorerRow: FC = ({ addNewFolder, renameFolder, renameFile, + selectedBucket, setSelectedItems, setSelectedItemsToDelete, setSelectedItemToRename, @@ -106,11 +110,13 @@ const FileExplorerRow: FC = ({ copyFileURLToClipboard, } = storageExplorerStore + const isPublic = selectedBucket.public const itemWithColumnIndex = { ...item, columnIndex } const isSelected = find(selectedItems, item) !== undefined const isOpened = openedFolders.length > columnIndex ? isEqual(openedFolders[columnIndex], item) : false const isPreviewed = !isEmpty(selectedFilePreview) && isEqual(selectedFilePreview.id, item.id) + const canUpdateFiles = checkPermissions(PermissionAction.STORAGE_ADMIN_WRITE, '*') const onSelectFile = async (columnIndex: number, file: any) => { popColumnAtIndex(columnIndex) @@ -187,77 +193,109 @@ const FileExplorerRow: FC = ({ const rowOptions = item.type === STORAGE_ROW_TYPES.FOLDER ? [ - { - name: 'Rename', - icon: , - onClick: () => setSelectedItemToRename(itemWithColumnIndex), - }, - { - name: 'Download', - icon: , - onClick: () => downloadFolder(itemWithColumnIndex), - }, - { name: 'Separator', icon: undefined, onClick: undefined }, - { - name: 'Delete', - icon: , - onClick: () => setSelectedItemsToDelete([itemWithColumnIndex]), - }, - ] - : [ - ...(!item.isCorrupted + ...(canUpdateFiles ? [ - { - name: 'Get URL', - icon: , - children: [ - { - name: 'Expire in 1 week', - onClick: async () => - await copyFileURLToClipboard(itemWithColumnIndex, URL_EXPIRY_DURATION.WEEK), - }, - { - name: 'Expire in 1 month', - onClick: async () => - await copyFileURLToClipboard( - itemWithColumnIndex, - URL_EXPIRY_DURATION.MONTH - ), - }, - { - name: 'Expire in 1 year', - onClick: async () => - await copyFileURLToClipboard(itemWithColumnIndex, URL_EXPIRY_DURATION.YEAR), - }, - { - name: 'Custom expiry', - onClick: async () => setSelectedFileCustomExpiry(itemWithColumnIndex), - }, - ], - }, { name: 'Rename', icon: , onClick: () => setSelectedItemToRename(itemWithColumnIndex), }, - { - name: 'Move', - icon: , - onClick: () => setSelectedItemsToMove([itemWithColumnIndex]), - }, - { - name: 'Download', - icon: , - onClick: async () => await downloadFile(itemWithColumnIndex), - }, - { name: 'Separator', icon: undefined, onClick: undefined }, ] : []), { - name: 'Delete', - icon: , - onClick: () => setSelectedItemsToDelete([itemWithColumnIndex]), + name: 'Download', + icon: , + onClick: () => downloadFolder(itemWithColumnIndex), }, + ...(canUpdateFiles + ? [ + { name: 'Separator', icon: undefined, onClick: undefined }, + { + name: 'Delete', + icon: , + onClick: () => setSelectedItemsToDelete([itemWithColumnIndex]), + }, + ] + : []), + ] + : [ + ...(!item.isCorrupted + ? [ + ...(isPublic + ? [ + { + name: 'Get URL', + icon: , + onClick: async () => await copyFileURLToClipboard(itemWithColumnIndex), + }, + ] + : [ + { + name: 'Get URL', + icon: , + children: [ + { + name: 'Expire in 1 week', + onClick: async () => + await copyFileURLToClipboard( + itemWithColumnIndex, + URL_EXPIRY_DURATION.WEEK + ), + }, + { + name: 'Expire in 1 month', + onClick: async () => + await copyFileURLToClipboard( + itemWithColumnIndex, + URL_EXPIRY_DURATION.MONTH + ), + }, + { + name: 'Expire in 1 year', + onClick: async () => + await copyFileURLToClipboard( + itemWithColumnIndex, + URL_EXPIRY_DURATION.YEAR + ), + }, + { + name: 'Custom expiry', + onClick: async () => setSelectedFileCustomExpiry(itemWithColumnIndex), + }, + ], + }, + ]), + ...(canUpdateFiles + ? [ + { + name: 'Rename', + icon: , + onClick: () => setSelectedItemToRename(itemWithColumnIndex), + }, + { + name: 'Move', + icon: , + onClick: () => setSelectedItemsToMove([itemWithColumnIndex]), + }, + { + name: 'Download', + icon: , + onClick: async () => await downloadFile(itemWithColumnIndex), + }, + { name: 'Separator', icon: undefined, onClick: undefined }, + ] + : []), + ] + : []), + ...(canUpdateFiles + ? [ + { + name: 'Delete', + icon: , + onClick: () => setSelectedItemsToDelete([itemWithColumnIndex]), + }, + ] + : []), ] const size = item.metadata ? formatBytes(item.metadata.size) : '-' diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/FolderContextMenu.js b/studio/components/to-be-cleaned/Storage/StorageExplorer/FolderContextMenu.js deleted file mode 100644 index 15ecfd3e311..00000000000 --- a/studio/components/to-be-cleaned/Storage/StorageExplorer/FolderContextMenu.js +++ /dev/null @@ -1,29 +0,0 @@ -import { useStorageStore } from 'localStores/storageExplorer/StorageExplorerStore' -import { Menu, Item, Separator } from 'react-contexify' -import 'react-contexify/dist/ReactContexify.css' -import { IconEdit, IconDownload, IconTrash2 } from 'ui' - -const FolderContextMenu = ({ id = '', onRenameFolder = () => {}, onDeleteFolder = () => {} }) => { - const storageExplorerStore = useStorageStore() - const { downloadFolder } = storageExplorerStore - - return ( - - onRenameFolder(props.item)}> - - Rename - - downloadFolder(props.item)}> - - Download - - - onDeleteFolder(props.item)}> - - Delete - - - ) -} - -export default FolderContextMenu diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/FolderContextMenu.tsx b/studio/components/to-be-cleaned/Storage/StorageExplorer/FolderContextMenu.tsx new file mode 100644 index 00000000000..aedfa8e5c55 --- /dev/null +++ b/studio/components/to-be-cleaned/Storage/StorageExplorer/FolderContextMenu.tsx @@ -0,0 +1,44 @@ +import { FC } from 'react' +import { Menu, Item, Separator } from 'react-contexify' +import 'react-contexify/dist/ReactContexify.css' +import { IconEdit, IconDownload, IconTrash2 } from 'ui' +import { PermissionAction } from '@supabase/shared-types/out/constants' + +import { checkPermissions } from 'hooks' +import { useStorageStore } from 'localStores/storageExplorer/StorageExplorerStore' + +interface Props { + id: string +} + +const FolderContextMenu: FC = ({ id = '' }) => { + const storageExplorerStore = useStorageStore() + const { downloadFolder, setSelectedItemToRename, setSelectedItemsToDelete } = storageExplorerStore + const canUpdateFiles = checkPermissions(PermissionAction.STORAGE_ADMIN_WRITE, '*') + + return ( + + {canUpdateFiles && ( + setSelectedItemToRename(props.item)}> + + Rename + + )} + downloadFolder(props.item)}> + + Download + + {canUpdateFiles && ( + <> + + setSelectedItemsToDelete([props.item])}> + + Delete + + + )} + + ) +} + +export default FolderContextMenu diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/ItemContextMenu.js b/studio/components/to-be-cleaned/Storage/StorageExplorer/ItemContextMenu.tsx similarity index 66% rename from studio/components/to-be-cleaned/Storage/StorageExplorer/ItemContextMenu.js rename to studio/components/to-be-cleaned/Storage/StorageExplorer/ItemContextMenu.tsx index eb48047e271..e42be48fe5f 100644 --- a/studio/components/to-be-cleaned/Storage/StorageExplorer/ItemContextMenu.js +++ b/studio/components/to-be-cleaned/Storage/StorageExplorer/ItemContextMenu.tsx @@ -1,12 +1,19 @@ +import { FC } from 'react' import { observer } from 'mobx-react-lite' import { Menu, Item, Separator, Submenu } from 'react-contexify' import 'react-contexify/dist/ReactContexify.css' +import { PermissionAction } from '@supabase/shared-types/out/constants' import { IconClipboard, IconEdit, IconMove, IconDownload, IconTrash2, IconChevronRight } from 'ui' +import { checkPermissions } from 'hooks' import { URL_EXPIRY_DURATION } from '../Storage.constants' import { useStorageStore } from 'localStores/storageExplorer/StorageExplorerStore' -const ItemContextMenu = ({ id = '' }) => { +interface Props { + id: string +} + +const ItemContextMenu: FC = ({ id = '' }) => { const storageExplorerStore = useStorageStore() const { downloadFile, @@ -18,12 +25,13 @@ const ItemContextMenu = ({ id = '' }) => { copyFileURLToClipboard, } = storageExplorerStore const isPublic = selectedBucket.public + const canUpdateFiles = checkPermissions(PermissionAction.STORAGE_ADMIN_WRITE, '*') - const onHandleClick = async (event, item, expiresIn) => { + const onHandleClick = async (event: any, item: any, expiresIn?: number) => { if (item.isCorrupted) return switch (event) { case 'copy': - if (expiresIn < 0) return setSelectedFileCustomExpiry(item) + if (expiresIn !== undefined && expiresIn < 0) return setSelectedFileCustomExpiry(item) else return await copyFileURLToClipboard(item, expiresIn) case 'rename': return setSelectedItemToRename(item) @@ -73,23 +81,27 @@ const ItemContextMenu = ({ id = '' }) => { )} - onHandleClick('rename', props.item)}> - - Rename - - onHandleClick('move', props.item)}> - - Move - - onHandleClick('download', props.item)}> - - Download - - - setSelectedItemsToDelete([props.item])}> - - Delete - + {canUpdateFiles && ( + <> + onHandleClick('rename', props.item)}> + + Rename + + onHandleClick('move', props.item)}> + + Move + + onHandleClick('download', props.item)}> + + Download + + + setSelectedItemsToDelete([props.item])}> + + Delete + + + )} ) } diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/MoveItemsModal.js b/studio/components/to-be-cleaned/Storage/StorageExplorer/MoveItemsModal.tsx similarity index 83% rename from studio/components/to-be-cleaned/Storage/StorageExplorer/MoveItemsModal.js rename to studio/components/to-be-cleaned/Storage/StorageExplorer/MoveItemsModal.tsx index 0f85cf1fae2..709b4c5bcaf 100644 --- a/studio/components/to-be-cleaned/Storage/StorageExplorer/MoveItemsModal.js +++ b/studio/components/to-be-cleaned/Storage/StorageExplorer/MoveItemsModal.tsx @@ -1,7 +1,15 @@ -import { useEffect, useState } from 'react' -import { Modal, Button, Input, Space } from 'ui' +import { FC, useEffect, useState } from 'react' +import { Modal, Button, Input } from 'ui' -const MoveItemsModal = ({ +interface Props { + bucketName: string + visible: boolean + selectedItemsToMove: any[] + onSelectCancel: () => void + onSelectMove: (path: string) => void +} + +const MoveItemsModal: FC = ({ bucketName = '', visible = false, selectedItemsToMove = [], @@ -21,14 +29,14 @@ const MoveItemsModal = ({ const title = multipleFiles ? `Moving ${selectedItemsToMove.length} items within ${bucketName}` : selectedItemsToMove.length === 1 - ? `Moving ${selectedItemsToMove[0].name} within ${bucketName}` + ? `Moving ${selectedItemsToMove[0]?.name} within ${bucketName}` : `` const description = `Enter the path to where you'd like to move the file${ multipleFiles ? 's' : '' } to.` - const onConfirmMove = (event) => { + const onConfirmMove = (event: any) => { if (event) { event.preventDefault() } diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/PreviewPane.tsx b/studio/components/to-be-cleaned/Storage/StorageExplorer/PreviewPane.tsx index 205e6fbbba6..b23ba4f5a64 100644 --- a/studio/components/to-be-cleaned/Storage/StorageExplorer/PreviewPane.tsx +++ b/studio/components/to-be-cleaned/Storage/StorageExplorer/PreviewPane.tsx @@ -14,6 +14,10 @@ import { import SVG from 'react-inlinesvg' import { formatBytes } from 'lib/helpers' import { Transition } from '@headlessui/react' +import * as Tooltip from '@radix-ui/react-tooltip' +import { PermissionAction } from '@supabase/shared-types/out/constants' + +import { checkPermissions } from 'hooks' import { URL_EXPIRY_DURATION } from '../Storage.constants' import { useStorageStore } from 'localStores/storageExplorer/StorageExplorerStore' @@ -107,6 +111,7 @@ const PreviewPane = () => { const mimeType = file.metadata ? file.metadata.mimetype : null const createdAt = file.created_at ? new Date(file.created_at).toLocaleString() : 'Unknown' const updatedAt = file.updated_at ? new Date(file.updated_at).toLocaleString() : 'Unknown' + const canUpdateFiles = checkPermissions(PermissionAction.STORAGE_ADMIN_WRITE, '*') return ( <> @@ -238,15 +243,35 @@ const PreviewPane = () => { )}
    - + + + + + {!canUpdateFiles && ( + + +
    + + You need additional permissions to delete this file + +
    +
    + )} +
    diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/StorageExplorer.js b/studio/components/to-be-cleaned/Storage/StorageExplorer/StorageExplorer.js index b19374ff0ba..b31a2d8f792 100644 --- a/studio/components/to-be-cleaned/Storage/StorageExplorer/StorageExplorer.js +++ b/studio/components/to-be-cleaned/Storage/StorageExplorer/StorageExplorer.js @@ -30,14 +30,10 @@ const StorageExplorer = observer(({ bucket }) => { selectedItemsToMove, clearSelectedItemsToMove, view, - setView, - setSortBy, - setSortByOrder, currentBucketName, openBucket, loadExplorerPreferences, - addNewFolderPlaceholder, fetchFolderContents, fetchMoreFolderContents, deleteFolder, @@ -116,10 +112,6 @@ const StorageExplorer = observer(({ bucket }) => { /** File manipulation methods */ - const onSelectCreateFolder = (columnIndex = -1) => { - addNewFolderPlaceholder(columnIndex) - } - const onFilesUpload = async (event, columnIndex = -1) => { event.persist() const items = event.target.files || event.dataTransfer.items @@ -158,12 +150,6 @@ const StorageExplorer = observer(({ bucket }) => { clearSelectedItems() } - const onChangeView = (view) => setView(view) - - const onChangeSortBy = (sortBy) => setSortBy(sortBy) - - const onChangeSortByOrder = (sortByOrder) => setSortByOrder(sortByOrder) - return (
    { onFilesUpload={onFilesUpload} onSelectAllItemsInColumn={onSelectAllItemsInColumn} onSelectColumnEmptySpace={onSelectColumnEmptySpace} - onSelectCreateFolder={onSelectCreateFolder} - onChangeView={onChangeView} - onChangeSortBy={onChangeSortBy} - onChangeSortByOrder={onChangeSortByOrder} onColumnLoadMore={(index, column) => fetchMoreFolderContents(index, column, itemSearchString) } diff --git a/studio/lib/pingPostgrest.ts b/studio/lib/pingPostgrest.ts index 623775327d8..ab1ee170d0a 100644 --- a/studio/lib/pingPostgrest.ts +++ b/studio/lib/pingPostgrest.ts @@ -46,6 +46,7 @@ const getApiKey = async ( timeout = DEFAULT_TIMEOUT_MILLISECONDS ): Promise => { const response = await getWithTimeout(`${API_URL}/props/project/${projectRef}/api`, { timeout }) + console.log('getApiKey', response) if (response.error || response.autoApiService.service_api_keys.length === 0) return undefined return response.autoApiService.defaultApiKey } diff --git a/studio/localStores/storageExplorer/StorageExplorerStore.js b/studio/localStores/storageExplorer/StorageExplorerStore.js index 6f3f71576f2..79ca97307fd 100644 --- a/studio/localStores/storageExplorer/StorageExplorerStore.js +++ b/studio/localStores/storageExplorer/StorageExplorerStore.js @@ -103,7 +103,7 @@ class StorageExplorerStore { initStore(projectRef, url, serviceKey, protocol = PROJECT_ENDPOINT_PROTOCOL) { this.projectRef = projectRef this.endpoint = `${API_URL}/storage/${projectRef}` - this.initializeSupabaseClient(serviceKey, url, protocol) + if (serviceKey !== undefined) this.initializeSupabaseClient(serviceKey, url, protocol) } /* Methods which are commonly used + For better readability */ From d87a462f013ac03b511c788c7fcc62ad94e11c56 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Thu, 23 Feb 2023 15:04:20 +0800 Subject: [PATCH 158/230] Remove console log --- studio/lib/pingPostgrest.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/studio/lib/pingPostgrest.ts b/studio/lib/pingPostgrest.ts index ab1ee170d0a..623775327d8 100644 --- a/studio/lib/pingPostgrest.ts +++ b/studio/lib/pingPostgrest.ts @@ -46,7 +46,6 @@ const getApiKey = async ( timeout = DEFAULT_TIMEOUT_MILLISECONDS ): Promise => { const response = await getWithTimeout(`${API_URL}/props/project/${projectRef}/api`, { timeout }) - console.log('getApiKey', response) if (response.error || response.autoApiService.service_api_keys.length === 0) return undefined return response.autoApiService.defaultApiKey } From eced1bd4e2f8827668ea29bba9484a75d0b353bd Mon Sep 17 00:00:00 2001 From: Stojan Dimitrovski Date: Thu, 23 Feb 2023 11:22:37 +0100 Subject: [PATCH 159/230] docs: clarify twitter oauth flow with custom domains (#12624) --- apps/docs/pages/guides/platform/custom-domains.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/docs/pages/guides/platform/custom-domains.mdx b/apps/docs/pages/guides/platform/custom-domains.mdx index 558496506d1..441ebef2f87 100644 --- a/apps/docs/pages/guides/platform/custom-domains.mdx +++ b/apps/docs/pages/guides/platform/custom-domains.mdx @@ -155,6 +155,7 @@ As with the final activation stage of the process for setting up a vanity subdom - Edge functions do not honor the custom domain or the vanity subdomain setting and they still have to be invoked via the `foobarbaz.supabase.co` domain. - A Supabase project can—at this time—use either a Custom Domain or a Vanity Subdomain, but not both. +- Some authentication flows like Sign-in with Twitter set cookies to track the progress of the flow. Make sure you use only one domain in your frontend application for this reason. Mixing calls to the Supabase domain `foobarbaz.supabase.co` and your custom domain could cause those flows to stop working due to the [Same Origin Policy](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy) enforced on cookies by the browser. export const Page = ({ children }) => From cd00092a6a7100b0f7bea8b5f75ffbba504a1f73 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Thu, 23 Feb 2023 12:18:59 -0330 Subject: [PATCH 160/230] Nudge panel layout --- .../interfaces/Docs/GeneratingTypes.tsx | 33 ++++++++++++------- .../TableGridEditor/GridHeaderActions.tsx | 4 ++- .../TableGridEditor/TableGridEditor.tsx | 13 ++------ .../to-be-cleaned/Docs/Pages/Introduction.tsx | 12 +++---- studio/styles/ui.scss | 20 +++++++++++ 5 files changed, 53 insertions(+), 29 deletions(-) diff --git a/studio/components/interfaces/Docs/GeneratingTypes.tsx b/studio/components/interfaces/Docs/GeneratingTypes.tsx index 0a6d54579d2..9cdabfe4ecc 100644 --- a/studio/components/interfaces/Docs/GeneratingTypes.tsx +++ b/studio/components/interfaces/Docs/GeneratingTypes.tsx @@ -69,18 +69,27 @@ export default function GeneratingTypes({ selectedLang }: Props) { application within src/index.ts.

    -
    - {selectedLang === 'js' && ( - - )} +
    +
    +

    + {selectedLang === 'js' && ( + + )} +

    +

    + Remember to re-generate and download this file as you make changes to your tables. +

    +
    = ({ )} - +
    + +
    + } + > + +

    + This measures the aggregate time spend by a query on somethong spmetong. +

    +

    This measures the aggregate time spend by a query on somethong spmetong.

    + + rol name + total_exec_time + prop_exec_time + ncalls + query + + } + body={ + isLoadedQueryMostFrequentlyInvokedData ? ( + QueryMostFrequentlyInvokedData[0].data.map((item, i) => { + return ( + + {item.rolname} + + {item.total_exec_time.milliseconds} ms + + + {item.prop_exec_time} + + {item.ncalls} + +

    {item.query}

    +
    +
    + ) + }) + ) : ( + <> + ) + } + /> + + +

    + This measures the aggregate time spend by a query on somethong spmetong. +

    +

    This measures the aggregate time spend by a query on somethong spmetong.

    +
    + source + rolname + ncalls + prop_exec_time + total_exec_time + query + + } + body={ + isLoadedQueryMostTimeConsumingData ? ( + QueryMostTimeConsumingData[0].data.map((item, i) => { + return ( + + + {item.query.includes('-- source: dashboard') ? ( + <> + Dashboard + + ) : ( + <> + API + + )} + + + {item.rolname}{' '} + + {item.ncalls} + + {item.prop_exec_time} + + + {item.total_exec_time.seconds && item.total_exec_time.seconds + 's'}{' '} + {item.total_exec_time.milliseconds}ms + + + {item.query} + + + ) + }) + ) : ( + <> + ) + } + /> + + +

    + This measures the aggregate time spend by a query on somethong spmetong. +

    +

    This measures the aggregate time spend by a query on somethong spmetong.

    +
    + rol name + calls + total_time + min_time + max_time + mean_time + avg_rows + query + + } + body={ + isLoadedQuerySlowestExecutionTimeData ? ( + QuerySlowestExecutionTimeData[0].data.map((item, i) => { + return ( + + {item.rolname} + {item.calls} + + {item.total_time} + + + {item.min_time} + + + {item.max_time} + + + {item.mean_time} + + + {item.avg_rows} + + + {item.query} + + + ) + }) + ) : ( + <> + ) + } + /> + + + + + ) +} + +const DatabaseExtensions: NextPageWithLayout = () => { + return +} + +DatabaseExtensions.getLayout = (page) => {page} + +export default observer(DatabaseExtensions) From c4af38ada4f5d3fc78b4b47120a6aab85665af33 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 21 Feb 2023 02:00:18 +0800 Subject: [PATCH 189/230] Update insights.tsx --- studio/pages/project/[ref]/database/insights.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/studio/pages/project/[ref]/database/insights.tsx b/studio/pages/project/[ref]/database/insights.tsx index 0b624e72e9b..974bffb886b 100644 --- a/studio/pages/project/[ref]/database/insights.tsx +++ b/studio/pages/project/[ref]/database/insights.tsx @@ -190,7 +190,7 @@ export const Content = () => {
    - source + {/* source */} rolnamencallsprop_exec_time @@ -203,7 +203,7 @@ export const Content = () => { QueryMostTimeConsumingData[0].data.map((item, i) => { return ( - + {/* {item.query.includes('-- source: dashboard') ? ( <> Dashboard @@ -213,7 +213,7 @@ export const Content = () => { API )} - + */} {item.rolname}{' '} From e65be46130dd6ab9e39964e1caffd8ee3934fb48 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 21 Feb 2023 02:01:32 +0800 Subject: [PATCH 190/230] Delete Insights.tsx --- studio/components/ui/Insights.tsx | 49 ------------------------------- 1 file changed, 49 deletions(-) delete mode 100644 studio/components/ui/Insights.tsx diff --git a/studio/components/ui/Insights.tsx b/studio/components/ui/Insights.tsx deleted file mode 100644 index f64919aee78..00000000000 --- a/studio/components/ui/Insights.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { IconAlertCircle } from 'ui' -import { FC } from 'react' - -interface Props { - resourceText: string - isFullPage?: boolean -} - -const NoPermission: FC = ({ resourceText, isFullPage = false }) => { - const NoPermissionMessage = ({}) => ( -
    -
    -
    - -
    -
    -
    -

    You need additional permissions to {resourceText}

    -
    -

    - Contact your organization owner or adminstrator for assistance. -

    -
    -
    -
    -
    -
    - ) - - if (isFullPage) { - return ( -
    -
    - -
    -
    - ) - } else { - return - } -} - -export default NoPermission From e50ec9b70520646b2265a52dc92f643d32cdffaa Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 21 Feb 2023 16:37:13 +0800 Subject: [PATCH 191/230] Update insights.tsx --- .../pages/project/[ref]/database/insights.tsx | 276 +++++++++++------- 1 file changed, 178 insertions(+), 98 deletions(-) diff --git a/studio/pages/project/[ref]/database/insights.tsx b/studio/pages/project/[ref]/database/insights.tsx index 974bffb886b..a214d836385 100644 --- a/studio/pages/project/[ref]/database/insights.tsx +++ b/studio/pages/project/[ref]/database/insights.tsx @@ -6,49 +6,69 @@ import { checkPermissions } from 'hooks' import { DatabaseLayout } from 'components/layouts' import { Extensions } from 'components/interfaces/Database' import NoPermission from 'components/ui/NoPermission' -import { Button, IconGlobe, IconMonitor, Tabs } from 'ui' +import { Button, IconGlobe, IconMonitor, IconThumbsUp, Tabs } from 'ui' import useDbQuery from 'hooks/analytics/useDbQuery' import { useEffect, useState } from 'react' import Table from 'components/to-be-cleaned/Table' -const limit = 100 +const limit = 10 const QueryMostFrequentlyInvoked = ` -SELECT -auth.rolname, -interval '1 millisecond' * statements.total_exec_time AS total_exec_time, -to_char((statements.total_exec_time/sum(statements.total_exec_time) OVER()) * 100, 'FM90D0') || '%' AS prop_exec_time, -to_char(statements.calls, 'FM999G999G999G990') AS ncalls, -statements.query AS query -FROM pg_stat_statements as statements -INNER JOIN pg_authid AS auth ON statements.userid = auth.oid -ORDER BY total_exec_time DESC -LIMIT ${limit}; -` - -const QueryMostTimeConsuming = ` -SELECT -auth.rolname, -interval '1 millisecond' * statements.total_exec_time AS total_exec_time, -to_char((statements.total_exec_time/sum(statements.total_exec_time) OVER()) * 100, 'FM90D0') || '%' AS prop_exec_time, -to_char(statements.calls, 'FM999G999G999G990') AS ncalls, -statements.query AS query -FROM pg_stat_statements as statements -INNER JOIN pg_authid AS auth ON statements.userid = auth.oid -ORDER BY total_exec_time DESC -LIMIT ${limit}; -` - -const QuerySlowestExecutionTime = ` +-- Most frequently called queries +-- A limit of 100 has been added below select auth.rolname, + statements.query, statements.calls, + -- -- Postgres 13, 14, 15 statements.total_exec_time + statements.total_plan_time as total_time, statements.min_exec_time + statements.min_plan_time as min_time, statements.max_exec_time + statements.max_plan_time as max_time, statements.mean_exec_time + statements.mean_plan_time as mean_time, - statements.rows / statements.calls as avg_rows, - statements.query + -- -- Postgres <= 12 + -- total_time, + -- min_time, + -- max_time, + -- mean_time, + statements.rows / statements.calls as avg_rows + from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid + order by + statements.calls desc + limit + ${limit};` + +const QueryMostTimeConsuming = `-- Most time consuming queries +-- A limit of 100 has been added below +select + auth.rolname, + statements.query, + statements.calls, + statements.total_exec_time + statements.total_plan_time as total_time, + to_char(((statements.total_exec_time + statements.total_plan_time)/sum(statements.total_exec_time + statements.total_plan_time) OVER()) * 100, 'FM90D0') || '%' AS prop_total_time + from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid + order by + total_time desc + limit ${limit};` + +const QuerySlowestExecutionTime = `-- Slowest queries by max execution time +-- A limit of 100 has been added below +select + auth.rolname, + statements.query, + statements.calls, + -- -- Postgres 13, 14, 15 + statements.total_exec_time + statements.total_plan_time as total_time, + statements.min_exec_time + statements.min_plan_time as min_time, + statements.max_exec_time + statements.max_plan_time as max_time, + statements.mean_exec_time + statements.mean_plan_time as mean_time, + -- -- Postgres <= 12 + -- total_time, + -- min_time, + -- max_time, + -- mean_time, + statements.rows / statements.calls as avg_rows from pg_stat_statements as statements inner join pg_authid as auth on statements.userid = auth.oid order by @@ -57,26 +77,23 @@ select ${limit}; ` +const QueryHitRate = `-- Cache and index hit rate +select + 'index hit rate' as name, + (sum(idx_blks_hit)) / nullif(sum(idx_blks_hit + idx_blks_read),0) as ratio + from pg_statio_user_indexes + union all + select + 'table hit rate' as name, + sum(heap_blks_hit) / nullif(sum(heap_blks_hit) + sum(heap_blks_read),0) as ratio + from pg_statio_user_tables; +` + export const Content = () => { - // const [timeConsumingData, setTimeConsumingData] = useState() - - // async function fetchData() { - // try { - // const data = await useDbQuery(QueryMostFrequentlyInvoked) - // setTimeConsumingData(data) - // return data - // } catch (error) { - // throw error - // } - // } - - // useEffect(() => { - // fetchData() - // }, []) - const QueryMostFrequentlyInvokedData = useDbQuery(QueryMostFrequentlyInvoked) const QueryMostTimeConsumingData = useDbQuery(QueryMostTimeConsuming) const QuerySlowestExecutionTimeData = useDbQuery(QuerySlowestExecutionTime) + const QueryHitRateData = useDbQuery(QueryHitRate) const isLoadedQueryMostFrequentlyInvokedData = QueryMostFrequentlyInvokedData && @@ -99,27 +116,92 @@ export const Content = () => { QuerySlowestExecutionTimeData[0].data ? true : false + const isLoadedQueryHitRateData = + QueryHitRateData && + QueryHitRateData.length > 0 && + QueryHitRateData[0] && + QueryHitRateData[0].data + ? true + : false - // if (isLoadedQueryMostFrequentlyInvokedData) { - // console.log('QueryMostFrequentlyInvokedData', QueryMostFrequentlyInvokedData) - // } + if (isLoadedQueryMostFrequentlyInvokedData) { + console.log('QueryMostFrequentlyInvokedData', QueryMostFrequentlyInvokedData) + } if (isLoadedQueryMostTimeConsumingData) { console.log('QueryMostTimeConsumingData', QueryMostTimeConsumingData) } - // if (isLoadedQuerySlowestExecutionTimeData) { - // console.log('QuerySlowestExecutionTimeData', QuerySlowestExecutionTimeData) - // } + if (isLoadedQuerySlowestExecutionTimeData) { + console.log('QuerySlowestExecutionTimeData', QuerySlowestExecutionTimeData) + } + if (isLoadedQueryHitRateData) { + console.log('QueryHitRateData', QueryHitRateData) + } return (

    Insights

    + +
    +

    Index hit rate

    +

    + For normal operations of Postgres and performance, you'll want to have your Postgres cache + hit ratio about 99%. If you see your cache hit ratio below that, you probably need to look + at moving to an instance with larger memory. +

    +
    +
    + {QueryHitRateData[0]?.data[0]?.name} +
    +
    +

    + {(QueryHitRateData[0]?.data[0]?.ratio * 100).toFixed(2)} +

    + % +
    +
    + +
    +
    +
    +
    + {QueryHitRateData[0]?.data[1]?.name} +
    +
    +

    + {(QueryHitRateData[0]?.data[1]?.ratio * 100).toFixed(2)} +

    + % +
    +
    + +
    +
    +
    +
    + {/* Hit rate */} + {/*
    +
    +
    */} +
    +
    +
    +

    Query analysis

    +

    + For normal operations of Postgres and performance, you'll want to have your Postgres + cache hit ratio about 99%. If you see your cache hit ratio below that, you probably need + to look at moving to an instance with larger memory. +

    +
    { head={ <> rol name - total_exec_time - prop_exec_time - ncalls - query + prop_total_time + calls + total_time + query } body={ - isLoadedQueryMostFrequentlyInvokedData ? ( - QueryMostFrequentlyInvokedData[0].data.map((item, i) => { + isLoadedQueryMostTimeConsumingData ? ( + QueryMostTimeConsumingData[0].data.map((item, i) => { return ( {item.rolname} - {item.total_exec_time.milliseconds} ms + {item.prop_total_time} + {item.calls} - {item.prop_exec_time} + {item.total_time} - {item.ncalls} - +

    {item.query}

    @@ -192,38 +274,36 @@ export const Content = () => { <> {/* source */} rolname - ncalls - prop_exec_time - total_exec_time + avg_rows + calls + max_time + mean_time + min_time + total_time query } body={ - isLoadedQueryMostTimeConsumingData ? ( - QueryMostTimeConsumingData[0].data.map((item, i) => { + isLoadedQueryMostFrequentlyInvokedData ? ( + QueryMostFrequentlyInvokedData[0].data.map((item, i) => { return ( - {/* - {item.query.includes('-- source: dashboard') ? ( - <> - Dashboard - - ) : ( - <> - API - - )} - */} + {item.rolname} - {item.rolname}{' '} + {item.avg_rows} - {item.ncalls} + {item.calls} - {item.prop_exec_time} + {item.max_time} - - {item.total_exec_time.seconds && item.total_exec_time.seconds + 's'}{' '} - {item.total_exec_time.milliseconds}ms + + {item.mean_time} + + + {item.min_time} + + + {item.total_time} {item.query} @@ -250,13 +330,13 @@ export const Content = () => {
    - rol name + rolname + avg_rowscalls - total_time - min_timemax_timemean_time - avg_rows + min_time + total_timequery } @@ -266,21 +346,21 @@ export const Content = () => { return ( {item.rolname} + + {item.avg_rows} + {item.calls} - {item.total_time} + {item.max_time} - + + {item.mean_time} + + {item.min_time} - {item.max_time} - - - {item.mean_time} - - - {item.avg_rows} + {item.total_time} {item.query} From 7b3988bb8bd3a18d269ca4cae6bd7a3cb942bcb9 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Tue, 21 Feb 2023 17:23:48 +0800 Subject: [PATCH 192/230] Update insights.tsx --- studio/pages/project/[ref]/database/insights.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/studio/pages/project/[ref]/database/insights.tsx b/studio/pages/project/[ref]/database/insights.tsx index a214d836385..ec2d855a051 100644 --- a/studio/pages/project/[ref]/database/insights.tsx +++ b/studio/pages/project/[ref]/database/insights.tsx @@ -152,11 +152,12 @@ export const Content = () => {

    - {QueryHitRateData[0]?.data[0]?.name} + {isLoadedQueryHitRateData && QueryHitRateData[0]?.data[0]?.name}

    - {(QueryHitRateData[0]?.data[0]?.ratio * 100).toFixed(2)} + {isLoadedQueryHitRateData && + (QueryHitRateData[0]?.data[0]?.ratio * 100).toFixed(2)}

    %
    @@ -166,11 +167,12 @@ export const Content = () => {
    - {QueryHitRateData[0]?.data[1]?.name} + {isLoadedQueryHitRateData && QueryHitRateData[0]?.data[1]?.name}

    - {(QueryHitRateData[0]?.data[1]?.ratio * 100).toFixed(2)} + {isLoadedQueryHitRateData && + (QueryHitRateData[0]?.data[1]?.ratio * 100).toFixed(2)}

    %
    From bd9cd2b87f2f340445943ad811d8dcf30636329e Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Wed, 22 Feb 2023 17:44:43 +0800 Subject: [PATCH 193/230] Update insights.tsx --- .../pages/project/[ref]/database/insights.tsx | 44 ++++++------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/studio/pages/project/[ref]/database/insights.tsx b/studio/pages/project/[ref]/database/insights.tsx index ec2d855a051..b00f36e7569 100644 --- a/studio/pages/project/[ref]/database/insights.tsx +++ b/studio/pages/project/[ref]/database/insights.tsx @@ -11,7 +11,7 @@ import useDbQuery from 'hooks/analytics/useDbQuery' import { useEffect, useState } from 'react' import Table from 'components/to-be-cleaned/Table' -const limit = 10 +const limit = 50 const QueryMostFrequentlyInvoked = ` -- Most frequently called queries @@ -182,22 +182,14 @@ export const Content = () => {
    - {/* Hit rate */} - {/*
    -
    -
    */}

    Query analysis

    - For normal operations of Postgres and performance, you'll want to have your Postgres - cache hit ratio about 99%. If you see your cache hit ratio below that, you probably need - to look at moving to an instance with larger memory. + PLACEHOLDER We have outlined some query scenarios to check and allow you to analyze + wether queries are behaving how you expect

    { size="medium" listClassNames="px-16" addOnAfter={ - +
    + +
    } > { label="Most time consuming" className="px-16 text-sm max-w-none" > -

    - This measures the aggregate time spend by a query on somethong spmetong. -

    -

    This measures the aggregate time spend by a query on somethong spmetong.

    @@ -267,10 +257,6 @@ export const Content = () => { label="Most frequently used" className="px-16 text-sm max-w-none" > -

    - This measures the aggregate time spend by a query on somethong spmetong. -

    -

    This measures the aggregate time spend by a query on somethong spmetong.

    @@ -325,10 +311,6 @@ export const Content = () => { label="Slowest execution time" className="px-16 text-sm max-w-none" > -

    - This measures the aggregate time spend by a query on somethong spmetong. -

    -

    This measures the aggregate time spend by a query on somethong spmetong.

    From 3eab73207ffa39b1c49e15d2c7357f713fd7486b Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Wed, 22 Feb 2023 08:07:35 -0330 Subject: [PATCH 194/230] Fix overflows on insights tables --- .../interfaces/Auth/Users/Users.tsx | 2 +- studio/pages/_app.tsx | 1 - .../pages/project/[ref]/database/insights.tsx | 266 +++++++++--------- studio/styles/ui.scss | 40 +++ studio/styles/users-table.scss | 38 --- 5 files changed, 180 insertions(+), 167 deletions(-) diff --git a/studio/components/interfaces/Auth/Users/Users.tsx b/studio/components/interfaces/Auth/Users/Users.tsx index 6f726cb8c4c..8f4e0536cad 100644 --- a/studio/components/interfaces/Auth/Users/Users.tsx +++ b/studio/components/interfaces/Auth/Users/Users.tsx @@ -108,7 +108,7 @@ const Users = () => { {inviteEnabled && } -
    +
    diff --git a/studio/pages/_app.tsx b/studio/pages/_app.tsx index f542d30ca75..02dd7f1361c 100644 --- a/studio/pages/_app.tsx +++ b/studio/pages/_app.tsx @@ -10,7 +10,6 @@ import 'styles/contextMenu.scss' import 'styles/react-data-grid-logs.scss' import 'styles/date-picker.scss' import 'styles/grid.scss' -import 'styles/users-table.scss' import dayjs from 'dayjs' import customParseFormat from 'dayjs/plugin/customParseFormat' diff --git a/studio/pages/project/[ref]/database/insights.tsx b/studio/pages/project/[ref]/database/insights.tsx index b00f36e7569..003d11c363c 100644 --- a/studio/pages/project/[ref]/database/insights.tsx +++ b/studio/pages/project/[ref]/database/insights.tsx @@ -216,40 +216,44 @@ export const Content = () => { label="Most time consuming" className="px-16 text-sm max-w-none" > -
    - rol name - prop_total_time - calls - total_time - query - - } - body={ - isLoadedQueryMostTimeConsumingData ? ( - QueryMostTimeConsumingData[0].data.map((item, i) => { - return ( - - {item.rolname} - - {item.prop_total_time} - - {item.calls} - - {item.total_time} - - -

    {item.query}

    -
    -
    - ) - }) - ) : ( - <> - ) - } - /> +
    +
    + rol name + prop_total_time + calls + total_time + query + + } + body={ + isLoadedQueryMostTimeConsumingData ? ( + QueryMostTimeConsumingData[0].data.map((item, i) => { + return ( + + + {item.rolname} + + + {item.prop_total_time} + + {item.calls} + + {item.total_time} + + +

    {item.query}

    +
    +
    + ) + }) + ) : ( + <> + ) + } + /> + { label="Most frequently used" className="px-16 text-sm max-w-none" > -
    - {/* source */} - rolname - avg_rows - calls - max_time - mean_time - min_time - total_time - query - - } - body={ - isLoadedQueryMostFrequentlyInvokedData ? ( - QueryMostFrequentlyInvokedData[0].data.map((item, i) => { - return ( - - {item.rolname} - - {item.avg_rows} - - {item.calls} - - {item.max_time} - - - {item.mean_time} - - - {item.min_time} - - - {item.total_time} - - - {item.query} - - - ) - }) - ) : ( - <> - ) - } - /> +
    +
    + {/* source */} + rolname + avg_rows + calls + max_time + mean_time + min_time + total_time + query + + } + body={ + isLoadedQueryMostFrequentlyInvokedData ? ( + QueryMostFrequentlyInvokedData[0].data.map((item, i) => { + return ( + + + {item.rolname} + + + {item.avg_rows} + + {item.calls} + + {item.max_time} + + + {item.mean_time} + + + {item.min_time} + + + {item.total_time} + + + {item.query} + + + ) + }) + ) : ( + <> + ) + } + /> + { label="Slowest execution time" className="px-16 text-sm max-w-none" > -
    - rolname - avg_rows - calls - max_time - mean_time - min_time - total_time - query - - } - body={ - isLoadedQuerySlowestExecutionTimeData ? ( - QuerySlowestExecutionTimeData[0].data.map((item, i) => { - return ( - - {item.rolname} - - {item.avg_rows} - - {item.calls} - - {item.max_time} - - - {item.mean_time} - - - {item.min_time} - - - {item.total_time} - - - {item.query} - - - ) - }) - ) : ( - <> - ) - } - /> +
    +
    + rolname + avg_rows + calls + max_time + mean_time + min_time + total_time + query + + } + body={ + isLoadedQuerySlowestExecutionTimeData ? ( + QuerySlowestExecutionTimeData[0].data.map((item, i) => { + return ( + + + {item.rolname} + + + {item.avg_rows} + + {item.calls} + + {item.max_time} + + + {item.mean_time} + + + {item.min_time} + + + {item.total_time} + + + {item.query} + + + ) + }) + ) : ( + <> + ) + } + /> + diff --git a/studio/styles/ui.scss b/studio/styles/ui.scss index e60672668f8..891b2a0bb7d 100644 --- a/studio/styles/ui.scss +++ b/studio/styles/ui.scss @@ -373,3 +373,43 @@ @apply mt-1; } } + +.thin-scrollbars { + scrollbar-width: thin; + scrollbar-color: var(--colors-slate9) var(--colors-slate1); + + .dark & { + scrollbar-color: var(--colors-slate10) var(--colors-slate3o); + } + + ::-webkit-scrollbar { + background: var(--colors-slate2); + height: 3px; + width: 0px; + border-radius: 0; + + .dark & { + background: var(--colors-slate6); + } + } + + ::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px var(--colors-slate6); + -webkit-border-radius: 5px; + border-radius: 5px; + + .dark & { + -webkit-box-shadow: inset 0 0 6px var(--colors-slate8); + } + } + + ::-webkit-scrollbar-thumb { + -webkit-border-radius: 5px; + border-radius: 5px; + background: var(--colors-slate9); + + .dark & { + -webkit-box-shadow: inset 0 0 6px var(--colors-slate12); + } + } +} diff --git a/studio/styles/users-table.scss b/studio/styles/users-table.scss index 5bd24e6d6e5..8b137891791 100644 --- a/studio/styles/users-table.scss +++ b/studio/styles/users-table.scss @@ -1,39 +1 @@ -.users-table-container { - scrollbar-width: thin; - scrollbar-color: var(--colors-slate9) var(--colors-slate1); - .dark & { - scrollbar-color: var(--colors-slate10) var(--colors-slate3o); - } - - ::-webkit-scrollbar { - background: var(--colors-slate2); - height: 3px; - width: 0px; - border-radius: 0; - - .dark & { - background: var(--colors-slate6); - } - } - - ::-webkit-scrollbar-track { - -webkit-box-shadow: inset 0 0 6px var(--colors-slate6); - -webkit-border-radius: 5px; - border-radius: 5px; - - .dark & { - -webkit-box-shadow: inset 0 0 6px var(--colors-slate8); - } - } - - ::-webkit-scrollbar-thumb { - -webkit-border-radius: 5px; - border-radius: 5px; - background: var(--colors-slate9); - - .dark & { - -webkit-box-shadow: inset 0 0 6px var(--colors-slate12); - } - } -} From f6fe14963a42b5c0ce8f81361d9bcb2855701935 Mon Sep 17 00:00:00 2001 From: TzeYiing Date: Wed, 22 Feb 2023 23:00:43 +0800 Subject: [PATCH 195/230] feat: move query insights to reports page --- .../layouts/DatabaseLayout/DatabaseMenu.utils.ts | 7 ------- .../components/layouts/ReportsLayout/ReportsMenu.utils.ts | 7 +++++++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/studio/components/layouts/DatabaseLayout/DatabaseMenu.utils.ts b/studio/components/layouts/DatabaseLayout/DatabaseMenu.utils.ts index 350a06f8ea7..774ad0fb2a7 100644 --- a/studio/components/layouts/DatabaseLayout/DatabaseMenu.utils.ts +++ b/studio/components/layouts/DatabaseLayout/DatabaseMenu.utils.ts @@ -74,13 +74,6 @@ export const generateDatabaseMenu = (project?: Project): ProductMenuGroup[] => { }, ] : []), - { - name: 'Insights', - key: 'insights', - url: `/project/${ref}/database/insights`, - items: [], - label: 'NEW', - }, ], }, ] diff --git a/studio/components/layouts/ReportsLayout/ReportsMenu.utils.ts b/studio/components/layouts/ReportsLayout/ReportsMenu.utils.ts index 8e6142aaef8..78c8383c79f 100644 --- a/studio/components/layouts/ReportsLayout/ReportsMenu.utils.ts +++ b/studio/components/layouts/ReportsLayout/ReportsMenu.utils.ts @@ -42,6 +42,13 @@ export const generateReportsMenu = (project?: Project): ProductMenuGroup[] => { url: `/project/${ref}/reports/database`, items: [], }, + { + name: 'Query Insights', + key: 'insights', + url: `/project/${ref}/reports/insights`, + items: [], + label: 'NEW', + }, ], }, ] From 4ff806673c945fc80926445c6528ba24583defa3 Mon Sep 17 00:00:00 2001 From: TzeYiing Date: Wed, 22 Feb 2023 23:58:12 +0800 Subject: [PATCH 196/230] chore: index efficiency component cleanup --- .../ui/src/components/Accordion/Accordion.tsx | 6 +- .../pages/project/[ref]/database/insights.tsx | 385 ----------------- .../pages/project/[ref]/reports/insights.tsx | 391 ++++++++++++++++++ 3 files changed, 394 insertions(+), 388 deletions(-) delete mode 100644 studio/pages/project/[ref]/database/insights.tsx create mode 100644 studio/pages/project/[ref]/reports/insights.tsx diff --git a/packages/ui/src/components/Accordion/Accordion.tsx b/packages/ui/src/components/Accordion/Accordion.tsx index 11ca83de563..167a4414ffa 100644 --- a/packages/ui/src/components/Accordion/Accordion.tsx +++ b/packages/ui/src/components/Accordion/Accordion.tsx @@ -39,8 +39,8 @@ interface AccordionProps { iconPosition?: Align onChange?: (item: string | string[]) => void openBehaviour: 'single' | 'multiple' - type: Type - size: Size + type?: Type + size?: Size defaultValue?: string | string[] | undefined justified?: Boolean chevronAlign?: Align @@ -98,7 +98,7 @@ function Accordion({ className={containerClasses.join(' ')} children={ -
    {children}
    +
    {children}
    } > diff --git a/studio/pages/project/[ref]/database/insights.tsx b/studio/pages/project/[ref]/database/insights.tsx deleted file mode 100644 index 003d11c363c..00000000000 --- a/studio/pages/project/[ref]/database/insights.tsx +++ /dev/null @@ -1,385 +0,0 @@ -import { observer } from 'mobx-react-lite' -import { PermissionAction } from '@supabase/shared-types/out/constants' - -import { NextPageWithLayout } from 'types' -import { checkPermissions } from 'hooks' -import { DatabaseLayout } from 'components/layouts' -import { Extensions } from 'components/interfaces/Database' -import NoPermission from 'components/ui/NoPermission' -import { Button, IconGlobe, IconMonitor, IconThumbsUp, Tabs } from 'ui' -import useDbQuery from 'hooks/analytics/useDbQuery' -import { useEffect, useState } from 'react' -import Table from 'components/to-be-cleaned/Table' - -const limit = 50 - -const QueryMostFrequentlyInvoked = ` --- Most frequently called queries --- A limit of 100 has been added below -select - auth.rolname, - statements.query, - statements.calls, - -- -- Postgres 13, 14, 15 - statements.total_exec_time + statements.total_plan_time as total_time, - statements.min_exec_time + statements.min_plan_time as min_time, - statements.max_exec_time + statements.max_plan_time as max_time, - statements.mean_exec_time + statements.mean_plan_time as mean_time, - -- -- Postgres <= 12 - -- total_time, - -- min_time, - -- max_time, - -- mean_time, - statements.rows / statements.calls as avg_rows - from pg_stat_statements as statements - inner join pg_authid as auth on statements.userid = auth.oid - order by - statements.calls desc - limit - ${limit};` - -const QueryMostTimeConsuming = `-- Most time consuming queries --- A limit of 100 has been added below -select - auth.rolname, - statements.query, - statements.calls, - statements.total_exec_time + statements.total_plan_time as total_time, - to_char(((statements.total_exec_time + statements.total_plan_time)/sum(statements.total_exec_time + statements.total_plan_time) OVER()) * 100, 'FM90D0') || '%' AS prop_total_time - from pg_stat_statements as statements - inner join pg_authid as auth on statements.userid = auth.oid - order by - total_time desc - limit ${limit};` - -const QuerySlowestExecutionTime = `-- Slowest queries by max execution time --- A limit of 100 has been added below -select - auth.rolname, - statements.query, - statements.calls, - -- -- Postgres 13, 14, 15 - statements.total_exec_time + statements.total_plan_time as total_time, - statements.min_exec_time + statements.min_plan_time as min_time, - statements.max_exec_time + statements.max_plan_time as max_time, - statements.mean_exec_time + statements.mean_plan_time as mean_time, - -- -- Postgres <= 12 - -- total_time, - -- min_time, - -- max_time, - -- mean_time, - statements.rows / statements.calls as avg_rows - from pg_stat_statements as statements - inner join pg_authid as auth on statements.userid = auth.oid - order by - max_time desc - limit - ${limit}; -` - -const QueryHitRate = `-- Cache and index hit rate -select - 'index hit rate' as name, - (sum(idx_blks_hit)) / nullif(sum(idx_blks_hit + idx_blks_read),0) as ratio - from pg_statio_user_indexes - union all - select - 'table hit rate' as name, - sum(heap_blks_hit) / nullif(sum(heap_blks_hit) + sum(heap_blks_read),0) as ratio - from pg_statio_user_tables; -` - -export const Content = () => { - const QueryMostFrequentlyInvokedData = useDbQuery(QueryMostFrequentlyInvoked) - const QueryMostTimeConsumingData = useDbQuery(QueryMostTimeConsuming) - const QuerySlowestExecutionTimeData = useDbQuery(QuerySlowestExecutionTime) - const QueryHitRateData = useDbQuery(QueryHitRate) - - const isLoadedQueryMostFrequentlyInvokedData = - QueryMostFrequentlyInvokedData && - QueryMostFrequentlyInvokedData.length > 0 && - QueryMostFrequentlyInvokedData[0] && - QueryMostFrequentlyInvokedData[0].data - ? true - : false - const isLoadedQueryMostTimeConsumingData = - QueryMostTimeConsumingData && - QueryMostTimeConsumingData.length > 0 && - QueryMostTimeConsumingData[0] && - QueryMostTimeConsumingData[0].data - ? true - : false - const isLoadedQuerySlowestExecutionTimeData = - QuerySlowestExecutionTimeData && - QuerySlowestExecutionTimeData.length > 0 && - QuerySlowestExecutionTimeData[0] && - QuerySlowestExecutionTimeData[0].data - ? true - : false - const isLoadedQueryHitRateData = - QueryHitRateData && - QueryHitRateData.length > 0 && - QueryHitRateData[0] && - QueryHitRateData[0].data - ? true - : false - - if (isLoadedQueryMostFrequentlyInvokedData) { - console.log('QueryMostFrequentlyInvokedData', QueryMostFrequentlyInvokedData) - } - if (isLoadedQueryMostTimeConsumingData) { - console.log('QueryMostTimeConsumingData', QueryMostTimeConsumingData) - } - if (isLoadedQuerySlowestExecutionTimeData) { - console.log('QuerySlowestExecutionTimeData', QuerySlowestExecutionTimeData) - } - if (isLoadedQueryHitRateData) { - console.log('QueryHitRateData', QueryHitRateData) - } - - return ( -
    -
    -

    Insights

    -
    - -
    -

    Index hit rate

    -

    - For normal operations of Postgres and performance, you'll want to have your Postgres cache - hit ratio about 99%. If you see your cache hit ratio below that, you probably need to look - at moving to an instance with larger memory. -

    -
    -
    - {isLoadedQueryHitRateData && QueryHitRateData[0]?.data[0]?.name} -
    -
    -

    - {isLoadedQueryHitRateData && - (QueryHitRateData[0]?.data[0]?.ratio * 100).toFixed(2)} -

    - % -
    -
    - -
    -
    -
    -
    - {isLoadedQueryHitRateData && QueryHitRateData[0]?.data[1]?.name} -
    -
    -

    - {isLoadedQueryHitRateData && - (QueryHitRateData[0]?.data[1]?.ratio * 100).toFixed(2)} -

    - % -
    -
    - -
    -
    -
    -
    -
    - -
    -
    -

    Query analysis

    -

    - PLACEHOLDER We have outlined some query scenarios to check and allow you to analyze - wether queries are behaving how you expect -

    -
    - - -
    - } - > - -
    -
    - rol name - prop_total_time - calls - total_time - query - - } - body={ - isLoadedQueryMostTimeConsumingData ? ( - QueryMostTimeConsumingData[0].data.map((item, i) => { - return ( - - - {item.rolname} - - - {item.prop_total_time} - - {item.calls} - - {item.total_time} - - -

    {item.query}

    -
    -
    - ) - }) - ) : ( - <> - ) - } - /> - - - -
    -
    - {/* source */} - rolname - avg_rows - calls - max_time - mean_time - min_time - total_time - query - - } - body={ - isLoadedQueryMostFrequentlyInvokedData ? ( - QueryMostFrequentlyInvokedData[0].data.map((item, i) => { - return ( - - - {item.rolname} - - - {item.avg_rows} - - {item.calls} - - {item.max_time} - - - {item.mean_time} - - - {item.min_time} - - - {item.total_time} - - - {item.query} - - - ) - }) - ) : ( - <> - ) - } - /> - - - -
    -
    - rolname - avg_rows - calls - max_time - mean_time - min_time - total_time - query - - } - body={ - isLoadedQuerySlowestExecutionTimeData ? ( - QuerySlowestExecutionTimeData[0].data.map((item, i) => { - return ( - - - {item.rolname} - - - {item.avg_rows} - - {item.calls} - - {item.max_time} - - - {item.mean_time} - - - {item.min_time} - - - {item.total_time} - - - {item.query} - - - ) - }) - ) : ( - <> - ) - } - /> - - - - - - ) -} - -const DatabaseExtensions: NextPageWithLayout = () => { - return -} - -DatabaseExtensions.getLayout = (page) => {page} - -export default observer(DatabaseExtensions) diff --git a/studio/pages/project/[ref]/reports/insights.tsx b/studio/pages/project/[ref]/reports/insights.tsx new file mode 100644 index 00000000000..b0c319c299a --- /dev/null +++ b/studio/pages/project/[ref]/reports/insights.tsx @@ -0,0 +1,391 @@ +import { observer } from 'mobx-react-lite' +import { NextPageWithLayout } from 'types' +import { ReportsLayout } from 'components/layouts' +import { Button, IconcheckAlert, Tabs, Accordion } from 'ui' +import useDbQuery from 'hooks/analytics/useDbQuery' +import Table from 'components/to-be-cleaned/Table' +import { IconAlertCircle, IconCheckCircle } from '@supabase/ui' + +const limit = 50 + +const QueryMostFrequentlyInvoked = ` +-- Most frequently called queries +-- A limit of 100 has been added below +select + auth.rolname, + statements.query, + statements.calls, + -- -- Postgres 13, 14, 15 + statements.total_exec_time + statements.total_plan_time as total_time, + statements.min_exec_time + statements.min_plan_time as min_time, + statements.max_exec_time + statements.max_plan_time as max_time, + statements.mean_exec_time + statements.mean_plan_time as mean_time, + -- -- Postgres <= 12 + -- total_time, + -- min_time, + -- max_time, + -- mean_time, + statements.rows / statements.calls as avg_rows + from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid + order by + statements.calls desc + limit + ${limit};` + +const QueryMostTimeConsuming = `-- Most time consuming queries +-- A limit of 100 has been added below +select + auth.rolname, + statements.query, + statements.calls, + statements.total_exec_time + statements.total_plan_time as total_time, + to_char(((statements.total_exec_time + statements.total_plan_time)/sum(statements.total_exec_time + statements.total_plan_time) OVER()) * 100, 'FM90D0') || '%' AS prop_total_time + from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid + order by + total_time desc + limit ${limit};` + +const QuerySlowestExecutionTime = `-- Slowest queries by max execution time +-- A limit of 100 has been added below +select + auth.rolname, + statements.query, + statements.calls, + -- -- Postgres 13, 14, 15 + statements.total_exec_time + statements.total_plan_time as total_time, + statements.min_exec_time + statements.min_plan_time as min_time, + statements.max_exec_time + statements.max_plan_time as max_time, + statements.mean_exec_time + statements.mean_plan_time as mean_time, + -- -- Postgres <= 12 + -- total_time, + -- min_time, + -- max_time, + -- mean_time, + statements.rows / statements.calls as avg_rows + from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid + order by + max_time desc + limit + ${limit}; +` + +const QueryHitRate = `-- Cache and index hit rate +select + 'index hit rate' as name, + (sum(idx_blks_hit)) / nullif(sum(idx_blks_hit + idx_blks_read),0) as ratio + from pg_statio_user_indexes + union all + select + 'table hit rate' as name, + sum(heap_blks_hit) / nullif(sum(heap_blks_hit) + sum(heap_blks_read),0) as ratio + from pg_statio_user_tables; +` + +const DatabaseExtensions: NextPageWithLayout = () => { + const QueryMostFrequentlyInvokedData = useDbQuery(QueryMostFrequentlyInvoked) + const QueryMostTimeConsumingData = useDbQuery(QueryMostTimeConsuming) + const QuerySlowestExecutionTimeData = useDbQuery(QuerySlowestExecutionTime) + const QueryHitRateData = useDbQuery(QueryHitRate) + + const isLoadedQueryMostFrequentlyInvokedData = + QueryMostFrequentlyInvokedData && + QueryMostFrequentlyInvokedData.length > 0 && + QueryMostFrequentlyInvokedData[0] && + QueryMostFrequentlyInvokedData[0].data + ? true + : false + const isLoadedQueryMostTimeConsumingData = + QueryMostTimeConsumingData && + QueryMostTimeConsumingData.length > 0 && + QueryMostTimeConsumingData[0] && + QueryMostTimeConsumingData[0].data + ? true + : false + const isLoadedQuerySlowestExecutionTimeData = + QuerySlowestExecutionTimeData && + QuerySlowestExecutionTimeData.length > 0 && + QuerySlowestExecutionTimeData[0] && + QuerySlowestExecutionTimeData[0].data + ? true + : false + const isLoadedQueryHitRateData = + QueryHitRateData && + QueryHitRateData.length > 0 && + QueryHitRateData[0] && + QueryHitRateData[0].data + ? true + : false + + if (isLoadedQueryMostFrequentlyInvokedData) { + console.log('QueryMostFrequentlyInvokedData', QueryMostFrequentlyInvokedData) + } + if (isLoadedQueryMostTimeConsumingData) { + console.log('QueryMostTimeConsumingData', QueryMostTimeConsumingData) + } + if (isLoadedQuerySlowestExecutionTimeData) { + console.log('QuerySlowestExecutionTimeData', QuerySlowestExecutionTimeData) + } + if (isLoadedQueryHitRateData) { + console.log('QueryHitRateData', QueryHitRateData) + } + + const checkAlert = ( +
    + +
    + ) + + const warnAlert = ( +
    + +
    + ) + const dangerAlert = ( +
    + +
    + ) + + const indexHitRate = QueryHitRateData[0]?.data[0]?.ratio + const tableHitRate = QueryHitRateData[0]?.data[1]?.ratio + const showIndexWarning = + indexHitRate && tableHitRate && (indexHitRate <= 0.99 || tableHitRate <= 0.99) + return ( +
    +

    Insights

    + + + + Index Efficiency + {showIndexWarning ? warnAlert : checkAlert} +
    + } + id="1" + className="flex flex-row gap-8" + > + {isLoadedQueryHitRateData && ( +
    +
    + Index Hit Rate +
    + {indexHitRate >= 0.99 + ? checkAlert + : indexHitRate >= 0.95 + ? warnAlert + : dangerAlert} +
    + + {(QueryHitRateData[0]?.data[0]?.ratio * 100).toFixed(2)} + + % +
    +
    +
    + +
    + {QueryHitRateData[0]?.data[1]?.name == 'table hit rate' && 'Table Hit Rate'} +
    + {tableHitRate >= 0.99 + ? checkAlert + : tableHitRate >= 0.95 + ? warnAlert + : dangerAlert} +
    + + {(QueryHitRateData[0]?.data[1]?.ratio * 100).toFixed(2)} + + % +
    +
    +
    +
    +

    + To best performance, ensure that the cache hit rate ratios above 99%. Consider + upgrading to an instance wiht more memory if the ratios dip below 95%. +

    +
    +
    + )} + + + +
    +

    Query analysis

    +

    + PLACEHOLDER We have outlined some query scenarios to check and allow you to analyze wether + queries are behaving how you expect +

    +
    + + + + } + > + +
    +
    + rol name + prop_total_time + calls + total_time + query + + } + body={ + isLoadedQueryMostTimeConsumingData ? ( + QueryMostTimeConsumingData[0].data.map((item, i) => { + return ( + + {item.rolname} + + {item.prop_total_time} + + {item.calls} + + {item.total_time} + + +

    {item.query}

    +
    +
    + ) + }) + ) : ( + <> + ) + } + /> + + + +
    +
    + {/* source */} + rolname + avg_rows + calls + max_time + mean_time + min_time + total_time + query + + } + body={ + isLoadedQueryMostFrequentlyInvokedData ? ( + QueryMostFrequentlyInvokedData[0].data.map((item, i) => { + return ( + + {item.rolname} + + {item.avg_rows} + + {item.calls} + + {item.max_time} + + + {item.mean_time} + + + {item.min_time} + + + {item.total_time} + + + {item.query} + + + ) + }) + ) : ( + <> + ) + } + /> + + + +
    +
    + rolname + avg_rows + calls + max_time + mean_time + min_time + total_time + query + + } + body={ + isLoadedQuerySlowestExecutionTimeData ? ( + QuerySlowestExecutionTimeData[0].data.map((item, i) => { + return ( + + {item.rolname} + + {item.avg_rows} + + {item.calls} + + {item.max_time} + + + {item.mean_time} + + + {item.min_time} + + + {item.total_time} + + + {item.query} + + + ) + }) + ) : ( + <> + ) + } + /> + + + + + ) +} + +DatabaseExtensions.getLayout = (page) => {page} + +export default observer(DatabaseExtensions) From 5a48ce78702d5332ad2104073697da7aa785fe8a Mon Sep 17 00:00:00 2001 From: TzeYiing Date: Thu, 23 Feb 2023 00:27:21 +0800 Subject: [PATCH 197/230] feat: update layout, add in copy sql button, update styling and text display --- .../pages/project/[ref]/reports/insights.tsx | 350 ++++++++++-------- 1 file changed, 186 insertions(+), 164 deletions(-) diff --git a/studio/pages/project/[ref]/reports/insights.tsx b/studio/pages/project/[ref]/reports/insights.tsx index b0c319c299a..0522ac95aee 100644 --- a/studio/pages/project/[ref]/reports/insights.tsx +++ b/studio/pages/project/[ref]/reports/insights.tsx @@ -1,10 +1,13 @@ import { observer } from 'mobx-react-lite' import { NextPageWithLayout } from 'types' import { ReportsLayout } from 'components/layouts' -import { Button, IconcheckAlert, Tabs, Accordion } from 'ui' +import { Button, Tabs, Accordion } from 'ui' import useDbQuery from 'hooks/analytics/useDbQuery' import Table from 'components/to-be-cleaned/Table' -import { IconAlertCircle, IconCheckCircle } from '@supabase/ui' +import { IconAlertCircle, IconCheckCircle, IconCopy } from '@supabase/ui' +import { executeSql } from 'data/sql/execute-sql-query' +import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' +import CopyButton from 'components/ui/CopyButton' const limit = 50 @@ -89,6 +92,7 @@ const DatabaseExtensions: NextPageWithLayout = () => { const QueryMostTimeConsumingData = useDbQuery(QueryMostTimeConsuming) const QuerySlowestExecutionTimeData = useDbQuery(QuerySlowestExecutionTime) const QueryHitRateData = useDbQuery(QueryHitRate) + const { project } = useProjectContext() const isLoadedQueryMostFrequentlyInvokedData = QueryMostFrequentlyInvokedData && @@ -153,6 +157,14 @@ const DatabaseExtensions: NextPageWithLayout = () => { const tableHitRate = QueryHitRateData[0]?.data[1]?.ratio const showIndexWarning = indexHitRate && tableHitRate && (indexHitRate <= 0.99 || tableHitRate <= 0.99) + + const resetPgStatStatements = () => { + executeSql({ + projectRef: project?.ref, + connectionString: project?.connectionString, + sql: `SELECT pg_stat_statements_reset();`, + }) + } return (

    Insights

    @@ -219,169 +231,179 @@ const DatabaseExtensions: NextPageWithLayout = () => {
    -

    Query analysis

    -

    - PLACEHOLDER We have outlined some query scenarios to check and allow you to analyze wether - queries are behaving how you expect -

    +

    Query Analysis

    + + +
    + } + > + +
    +
    + Role + Time Consumed + Calls + Total Time + Query + + } + body={ + isLoadedQueryMostTimeConsumingData ? ( + QueryMostTimeConsumingData[0].data.map((item, i) => { + return ( + + + {item.rolname} + + + {item.prop_total_time} + + {item.calls} + + {item.total_time.toFixed(2)}ms + + +

    {item.query}

    + +
    +
    + ) + }) + ) : ( + <> + ) + } + /> + + + +
    +
    + {/* source */} + Role + Avg. Roles + Calls + Max Time + Mean Time + Min Time + Total Time + Query + + } + body={ + isLoadedQueryMostFrequentlyInvokedData ? ( + QueryMostFrequentlyInvokedData[0].data.map((item, i) => { + return ( + + + {item.rolname} + + + {item.avg_rows} + + {item.calls} + + {item.max_time.toFixed(2)}ms + + + {item.mean_time.toFixed(2)}ms + + + {item.min_time.toFixed(2)}ms + + + {item.total_time.toFixed(2)}ms + + +

    {item.query}

    + +
    +
    + ) + }) + ) : ( + <> + ) + } + /> + + + +
    +
    + Role + Avg Rows + Calls + Max Time + Mean Time + Min Time + Total Time + Query + + } + body={ + isLoadedQuerySlowestExecutionTimeData ? ( + QuerySlowestExecutionTimeData[0].data.map((item, i) => { + return ( + + + {item.rolname} + + + {item.avg_rows} + + {item.calls} + + {item.max_time.toFixed(2)}ms + + + {item.mean_time.toFixed(2)}ms + + + {item.min_time.toFixed(2)}ms + + + {item.total_time.toFixed(2)}ms + + +

    {item.query}

    + +
    +
    + ) + }) + ) : ( + <> + ) + } + /> + + + - - - - } - > - -
    -
    - rol name - prop_total_time - calls - total_time - query - - } - body={ - isLoadedQueryMostTimeConsumingData ? ( - QueryMostTimeConsumingData[0].data.map((item, i) => { - return ( - - {item.rolname} - - {item.prop_total_time} - - {item.calls} - - {item.total_time} - - -

    {item.query}

    -
    -
    - ) - }) - ) : ( - <> - ) - } - /> - - - -
    -
    - {/* source */} - rolname - avg_rows - calls - max_time - mean_time - min_time - total_time - query - - } - body={ - isLoadedQueryMostFrequentlyInvokedData ? ( - QueryMostFrequentlyInvokedData[0].data.map((item, i) => { - return ( - - {item.rolname} - - {item.avg_rows} - - {item.calls} - - {item.max_time} - - - {item.mean_time} - - - {item.min_time} - - - {item.total_time} - - - {item.query} - - - ) - }) - ) : ( - <> - ) - } - /> - - - -
    -
    - rolname - avg_rows - calls - max_time - mean_time - min_time - total_time - query - - } - body={ - isLoadedQuerySlowestExecutionTimeData ? ( - QuerySlowestExecutionTimeData[0].data.map((item, i) => { - return ( - - {item.rolname} - - {item.avg_rows} - - {item.calls} - - {item.max_time} - - - {item.mean_time} - - - {item.min_time} - - - {item.total_time} - - - {item.query} - - - ) - }) - ) : ( - <> - ) - } - /> - - - + + ) +} + +const QueryActions = ({ sql, className }: { sql: string; className: string }) => { + if (sql.includes('insufficient privilege')) return null + + return ( +
    +
    ) } From b0611565048ffa1d7d524cee7b139185e2121995 Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Wed, 22 Feb 2023 15:14:39 -0330 Subject: [PATCH 198/230] Style updates --- packages/ui/src/lib/theme/defaultTheme.ts | 6 +- .../pages/project/[ref]/reports/insights.tsx | 101 +++++++++--------- 2 files changed, 58 insertions(+), 49 deletions(-) diff --git a/packages/ui/src/lib/theme/defaultTheme.ts b/packages/ui/src/lib/theme/defaultTheme.ts index 4617d5a8e94..d5bffd27180 100644 --- a/packages/ui/src/lib/theme/defaultTheme.ts +++ b/packages/ui/src/lib/theme/defaultTheme.ts @@ -187,7 +187,11 @@ export default { chevron: { base: ` text-scale-900 - rotate-0 group-state-open:rotate-180 + rotate-0 + group-state-open:rotate-180 + group-data-[state=open]:rotate-180 + ease-[cubic-bezier(0.87,_0,_0.13,_1)] + transition-transform duration-300 duration-200 `, align: { diff --git a/studio/pages/project/[ref]/reports/insights.tsx b/studio/pages/project/[ref]/reports/insights.tsx index 0522ac95aee..8a1855cad69 100644 --- a/studio/pages/project/[ref]/reports/insights.tsx +++ b/studio/pages/project/[ref]/reports/insights.tsx @@ -1,10 +1,10 @@ import { observer } from 'mobx-react-lite' import { NextPageWithLayout } from 'types' import { ReportsLayout } from 'components/layouts' -import { Button, Tabs, Accordion } from 'ui' +import { Button, Tabs, Accordion, IconInfo } from 'ui' import useDbQuery from 'hooks/analytics/useDbQuery' import Table from 'components/to-be-cleaned/Table' -import { IconAlertCircle, IconCheckCircle, IconCopy } from '@supabase/ui' +import { IconAlertCircle, IconCheckCircle } from '@supabase/ui' import { executeSql } from 'data/sql/execute-sql-query' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import CopyButton from 'components/ui/CopyButton' @@ -153,8 +153,8 @@ const DatabaseExtensions: NextPageWithLayout = () => { ) - const indexHitRate = QueryHitRateData[0]?.data[0]?.ratio - const tableHitRate = QueryHitRateData[0]?.data[1]?.ratio + const indexHitRate = QueryHitRateData[0]?.data?.[0]?.ratio + const tableHitRate = QueryHitRateData[0]?.data?.[1]?.ratio const showIndexWarning = indexHitRate && tableHitRate && (indexHitRate <= 0.99 || tableHitRate <= 0.99) @@ -176,7 +176,7 @@ const DatabaseExtensions: NextPageWithLayout = () => { > +
    Index Efficiency {showIndexWarning ? warnAlert : checkAlert}
    @@ -185,44 +185,46 @@ const DatabaseExtensions: NextPageWithLayout = () => { className="flex flex-row gap-8" > {isLoadedQueryHitRateData && ( -
    -
    - Index Hit Rate -
    - {indexHitRate >= 0.99 - ? checkAlert - : indexHitRate >= 0.95 - ? warnAlert - : dangerAlert} -
    - - {(QueryHitRateData[0]?.data[0]?.ratio * 100).toFixed(2)} - - % +
    +
    +
    + Index Hit Rate +
    + {indexHitRate >= 0.99 + ? checkAlert + : indexHitRate >= 0.95 + ? warnAlert + : dangerAlert} +
    + + {(QueryHitRateData[0]?.data[0]?.ratio * 100).toFixed(2)} + + % +
    -
    -
    - {QueryHitRateData[0]?.data[1]?.name == 'table hit rate' && 'Table Hit Rate'} -
    - {tableHitRate >= 0.99 - ? checkAlert - : tableHitRate >= 0.95 - ? warnAlert - : dangerAlert} -
    - - {(QueryHitRateData[0]?.data[1]?.ratio * 100).toFixed(2)} - - % +
    + {QueryHitRateData[0]?.data[1]?.name == 'table hit rate' && 'Table Hit Rate'} +
    + {tableHitRate >= 0.99 + ? checkAlert + : tableHitRate >= 0.95 + ? warnAlert + : dangerAlert} +
    + + {(QueryHitRateData[0]?.data[1]?.ratio * 100).toFixed(2)} + + % +
    -
    -

    - To best performance, ensure that the cache hit rate ratios above 99%. Consider - upgrading to an instance wiht more memory if the ratios dip below 95%. +

    +

    + For best performance, ensure that the cache hit rate ratios above 99%.
    {' '} + Consider upgrading to an instance with more memory if the ratios dip below 95%.

    @@ -237,7 +239,7 @@ const DatabaseExtensions: NextPageWithLayout = () => { type="underlined" size="medium" addOnAfter={ -
    +
    @@ -261,7 +263,7 @@ const DatabaseExtensions: NextPageWithLayout = () => { QueryMostTimeConsumingData[0].data.map((item, i) => { return ( - + {item.rolname} @@ -271,7 +273,7 @@ const DatabaseExtensions: NextPageWithLayout = () => { {item.total_time.toFixed(2)}ms - +

    {item.query}

    @@ -306,7 +308,7 @@ const DatabaseExtensions: NextPageWithLayout = () => { QueryMostFrequentlyInvokedData[0].data.map((item, i) => { return ( - + {item.rolname} @@ -325,8 +327,8 @@ const DatabaseExtensions: NextPageWithLayout = () => { {item.total_time.toFixed(2)}ms - -

    {item.query}

    + +

    {item.query}

    @@ -359,7 +361,7 @@ const DatabaseExtensions: NextPageWithLayout = () => { QuerySlowestExecutionTimeData[0].data.map((item, i) => { return ( - + {item.rolname} @@ -379,8 +381,11 @@ const DatabaseExtensions: NextPageWithLayout = () => { {item.total_time.toFixed(2)}ms -

    {item.query}

    - +

    {item.query}

    +
    ) @@ -402,8 +407,8 @@ const QueryActions = ({ sql, className }: { sql: string; className: string }) => if (sql.includes('insufficient privilege')) return null return ( -
    - +
    +
    ) } From a7c8b6307679fd5e32b892beed7fcc639bf91585 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 24 Feb 2023 17:58:57 +0800 Subject: [PATCH 199/230] change name --- .../ReportsLayout/ReportsMenu.utils.ts | 6 +- .../{insights.tsx => query-performance.tsx} | 190 ++++++++++-------- 2 files changed, 112 insertions(+), 84 deletions(-) rename studio/pages/project/[ref]/reports/{insights.tsx => query-performance.tsx} (75%) diff --git a/studio/components/layouts/ReportsLayout/ReportsMenu.utils.ts b/studio/components/layouts/ReportsLayout/ReportsMenu.utils.ts index 78c8383c79f..a2da5b72d1a 100644 --- a/studio/components/layouts/ReportsLayout/ReportsMenu.utils.ts +++ b/studio/components/layouts/ReportsLayout/ReportsMenu.utils.ts @@ -43,9 +43,9 @@ export const generateReportsMenu = (project?: Project): ProductMenuGroup[] => { items: [], }, { - name: 'Query Insights', - key: 'insights', - url: `/project/${ref}/reports/insights`, + name: 'Query Performance', + key: 'query-performance', + url: `/project/${ref}/reports/query-performance`, items: [], label: 'NEW', }, diff --git a/studio/pages/project/[ref]/reports/insights.tsx b/studio/pages/project/[ref]/reports/query-performance.tsx similarity index 75% rename from studio/pages/project/[ref]/reports/insights.tsx rename to studio/pages/project/[ref]/reports/query-performance.tsx index 8a1855cad69..506ca90cd0e 100644 --- a/studio/pages/project/[ref]/reports/insights.tsx +++ b/studio/pages/project/[ref]/reports/query-performance.tsx @@ -8,8 +8,12 @@ import { IconAlertCircle, IconCheckCircle } from '@supabase/ui' import { executeSql } from 'data/sql/execute-sql-query' import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectContext' import CopyButton from 'components/ui/CopyButton' +import { useFlag } from 'hooks' +import ConfirmModal from 'components/ui/Dialogs/ConfirmDialog' +import { useState } from 'react' +import { ReactMarkdown } from 'react-markdown/lib/react-markdown' -const limit = 50 +const limit = 10 const QueryMostFrequentlyInvoked = ` -- Most frequently called queries @@ -87,12 +91,15 @@ select from pg_statio_user_tables; ` -const DatabaseExtensions: NextPageWithLayout = () => { +const QueryPerformanceReport: NextPageWithLayout = () => { const QueryMostFrequentlyInvokedData = useDbQuery(QueryMostFrequentlyInvoked) const QueryMostTimeConsumingData = useDbQuery(QueryMostTimeConsuming) const QuerySlowestExecutionTimeData = useDbQuery(QuerySlowestExecutionTime) const QueryHitRateData = useDbQuery(QueryHitRate) const { project } = useProjectContext() + const [showResetgPgStatStatements, setShowResetgPgStatStatements] = useState(false) + + const tableIndexEfficiencyEnabled = useFlag('tableIndexEfficiency') const isLoadedQueryMostFrequentlyInvokedData = QueryMostFrequentlyInvokedData && @@ -158,94 +165,113 @@ const DatabaseExtensions: NextPageWithLayout = () => { const showIndexWarning = indexHitRate && tableHitRate && (indexHitRate <= 0.99 || tableHitRate <= 0.99) - const resetPgStatStatements = () => { - executeSql({ - projectRef: project?.ref, - connectionString: project?.connectionString, - sql: `SELECT pg_stat_statements_reset();`, - }) - } return ( -
    -

    Insights

    + <> +

    Query performance

    - - - Index Efficiency - {showIndexWarning ? warnAlert : checkAlert} -
    - } - id="1" - className="flex flex-row gap-8" + {tableIndexEfficiencyEnabled && ( + - {isLoadedQueryHitRateData && ( -
    -
    -
    - Index Hit Rate -
    - {indexHitRate >= 0.99 - ? checkAlert - : indexHitRate >= 0.95 - ? warnAlert - : dangerAlert} -
    - - {(QueryHitRateData[0]?.data[0]?.ratio * 100).toFixed(2)} - - % + + Index Efficiency + {showIndexWarning ? warnAlert : checkAlert} +
    + } + id="1" + className="flex flex-row gap-8" + > + {isLoadedQueryHitRateData && ( +
    +
    +
    + Index Hit Rate +
    + {indexHitRate >= 0.99 + ? checkAlert + : indexHitRate >= 0.95 + ? warnAlert + : dangerAlert} +
    + + {(QueryHitRateData[0]?.data[0]?.ratio * 100).toFixed(2)} + + % +
    -
    -
    - {QueryHitRateData[0]?.data[1]?.name == 'table hit rate' && 'Table Hit Rate'} -
    - {tableHitRate >= 0.99 - ? checkAlert - : tableHitRate >= 0.95 - ? warnAlert - : dangerAlert} -
    - - {(QueryHitRateData[0]?.data[1]?.ratio * 100).toFixed(2)} - - % +
    + {QueryHitRateData[0]?.data[1]?.name == 'table hit rate' && 'Table Hit Rate'} +
    + {tableHitRate >= 0.99 + ? checkAlert + : tableHitRate >= 0.95 + ? warnAlert + : dangerAlert} +
    + + {(QueryHitRateData[0]?.data[1]?.ratio * 100).toFixed(2)} + + % +
    +
    +

    + For best performance, ensure that the cache hit rate ratios above 99%.
    {' '} + Consider upgrading to an instance with more memory if the ratios dip below 95%. +

    +
    -
    -

    - For best performance, ensure that the cache hit rate ratios above 99%.
    {' '} - Consider upgrading to an instance with more memory if the ratios dip below 95%. -

    -
    -
    - )} - - + )} + + + )} + + setShowResetgPgStatStatements(true)} + onSelectConfirm={async () => { + try { + await executeSql({ + projectRef: project?.ref, + connectionString: project?.connectionString, + sql: `SELECT pg_stat_statements_reset();`, + }) + setShowResetgPgStatStatements(false) + } catch (error) { + console.error(error) + } + }} + /> + + + Unoptimized queries are a major cause of poor database performance. The techniques on this + page can help you identify and understand queries that take the most time and resources from + your database. You can read more about [query + performance](https://supabase.com/docs/guides/platform/performance#examining-query-performance) + in our docs. + + +
    + +
    -

    Query Analysis

    - - -
    - } - > +
    { - + ) } @@ -413,6 +439,8 @@ const QueryActions = ({ sql, className }: { sql: string; className: string }) => ) } -DatabaseExtensions.getLayout = (page) => {page} +QueryPerformanceReport.getLayout = (page) => ( + {page} +) -export default observer(DatabaseExtensions) +export default observer(QueryPerformanceReport) From 15158aa4a73aef1fceec9736c1c81238325dcf9b Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 24 Feb 2023 19:00:43 +0800 Subject: [PATCH 200/230] updated text across all the report. using react markdown. added typography tailwind config --- .../interfaces/Reports/Reports.constants.ts | 84 +++ .../interfaces/Reports/Reports.types.ts | 1 + .../interfaces/Reports/Reports.utils.tsx | 22 +- .../[ref]/reports/query-performance.tsx | 547 ++++++++---------- studio/tailwind.config.js | 119 ++++ 5 files changed, 462 insertions(+), 311 deletions(-) diff --git a/studio/components/interfaces/Reports/Reports.constants.ts b/studio/components/interfaces/Reports/Reports.constants.ts index 3713345e5f5..17183a514bc 100644 --- a/studio/components/interfaces/Reports/Reports.constants.ts +++ b/studio/components/interfaces/Reports/Reports.constants.ts @@ -242,6 +242,90 @@ order by }, }, }, + [Presets.QUERY_PERFORMANCE]: { + title: 'Query performance', + queries: { + mostFrequentlyInvoked: { + queryType: 'db', + sql: (_params) => ` +-- Most frequently called queries +-- A limit of 100 has been added below +select + auth.rolname, + statements.query, + statements.calls, + -- -- Postgres 13, 14, 15 + statements.total_exec_time + statements.total_plan_time as total_time, + statements.min_exec_time + statements.min_plan_time as min_time, + statements.max_exec_time + statements.max_plan_time as max_time, + statements.mean_exec_time + statements.mean_plan_time as mean_time, + -- -- Postgres <= 12 + -- total_time, + -- min_time, + -- max_time, + -- mean_time, + statements.rows / statements.calls as avg_rows + from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid + order by + statements.calls desc + limit 10;`, + }, + mostTimeConsuming: { + queryType: 'db', + sql: (_params) => `-- A limit of 100 has been added below +select + auth.rolname, + statements.query, + statements.calls, + statements.total_exec_time + statements.total_plan_time as total_time, + to_char(((statements.total_exec_time + statements.total_plan_time)/sum(statements.total_exec_time + statements.total_plan_time) OVER()) * 100, 'FM90D0') || '%' AS prop_total_time + from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid + order by + total_time desc + limit 10;`, + }, + slowestExecutionTime: { + queryType: 'db', + sql: (_params) => `-- Slowest queries by max execution time +-- A limit of 100 has been added below +select + auth.rolname, + statements.query, + statements.calls, + -- -- Postgres 13, 14, 15 + statements.total_exec_time + statements.total_plan_time as total_time, + statements.min_exec_time + statements.min_plan_time as min_time, + statements.max_exec_time + statements.max_plan_time as max_time, + statements.mean_exec_time + statements.mean_plan_time as mean_time, + -- -- Postgres <= 12 + -- total_time, + -- min_time, + -- max_time, + -- mean_time, + statements.rows / statements.calls as avg_rows + from pg_stat_statements as statements + inner join pg_authid as auth on statements.userid = auth.oid + order by + max_time desc + limit 10`, + }, + queryHitRate: { + queryType: 'db', + sql: (_params) => `-- Cache and index hit rate +select + 'index hit rate' as name, + (sum(idx_blks_hit)) / nullif(sum(idx_blks_hit + idx_blks_read),0) as ratio + from pg_statio_user_indexes + union all + select + 'table hit rate' as name, + sum(heap_blks_hit) / nullif(sum(heap_blks_hit) + sum(heap_blks_read),0) as ratio + from pg_statio_user_tables;`, + }, + }, + }, } export const DATETIME_FORMAT = 'MMM D, ha' diff --git a/studio/components/interfaces/Reports/Reports.types.ts b/studio/components/interfaces/Reports/Reports.types.ts index 0cc81dd470e..af6ca322b0a 100644 --- a/studio/components/interfaces/Reports/Reports.types.ts +++ b/studio/components/interfaces/Reports/Reports.types.ts @@ -4,6 +4,7 @@ import { DEFAULT_QUERY_PARAMS } from './Reports.constants' export enum Presets { API = 'api', AUTH = 'auth', + QUERY_PERFORMANCE = 'query_performance', } export interface QueryDataBase { diff --git a/studio/components/interfaces/Reports/Reports.utils.tsx b/studio/components/interfaces/Reports/Reports.utils.tsx index 006ee0e17d5..507176c6cc1 100644 --- a/studio/components/interfaces/Reports/Reports.utils.tsx +++ b/studio/components/interfaces/Reports/Reports.utils.tsx @@ -64,16 +64,24 @@ export const usePresetReport = (hooks: PresetHookResult[]) => { } const isLoading = data.map((datum) => datum.isLoading).some((v) => v) - const Layout: React.FC<{ title: string }> = ({ title, children }) => ( + const Layout: React.FC<{ title: string; showDatePickers?: boolean }> = ({ + title, + showDatePickers = true, + children, + }) => (

    {title}

    - +
    + {showDatePickers && ( + + )} +
    +
    + setShowResetgPgStatStatements(true)} + onSelectCancel={() => setShowResetgPgStatStatements(false)} onSelectConfirm={async () => { try { await executeSql({ @@ -256,176 +185,186 @@ const QueryPerformanceReport: NextPageWithLayout = () => { }} /> - - Unoptimized queries are a major cause of poor database performance. The techniques on this - page can help you identify and understand queries that take the most time and resources from - your database. You can read more about [query - performance](https://supabase.com/docs/guides/platform/performance#examining-query-performance) - in our docs. - - -
    - -
    -
    - -
    -
    - Role - Time Consumed - Calls - Total Time - Query - - } - body={ - isLoadedQueryMostTimeConsumingData ? ( - QueryMostTimeConsumingData[0].data.map((item, i) => { - return ( - - - {item.rolname} - - - {item.prop_total_time} - - {item.calls} - - {item.total_time.toFixed(2)}ms - - -

    {item.query}

    - -
    -
    - ) - }) - ) : ( - <> - ) - } - /> + +
    + +
    +
    + Role + Time Consumed + Calls + Total Time + Query + + } + body={ + !isLoading && mostTimeConsuming ? ( + mostTimeConsuming[0].data!.map((item, i) => { + return ( + + + {item.rolname} + + + {item.prop_total_time} + + + {item.calls} + + + {item.total_time.toFixed(2)}ms + + +

    {item.query}

    + +
    +
    + ) + }) + ) : ( + <> + ) + } + /> + - -
    -
    - {/* source */} - Role - Avg. Roles - Calls - Max Time - Mean Time - Min Time - Total Time - Query - - } - body={ - isLoadedQueryMostFrequentlyInvokedData ? ( - QueryMostFrequentlyInvokedData[0].data.map((item, i) => { - return ( - - - {item.rolname} - - - {item.avg_rows} - - {item.calls} - - {item.max_time.toFixed(2)}ms - - - {item.mean_time.toFixed(2)}ms - - - {item.min_time.toFixed(2)}ms - - - {item.total_time.toFixed(2)}ms - - -

    {item.query}

    - -
    -
    - ) - }) - ) : ( - <> - ) - } - /> + +
    + +
    +
    + {/* source */} + Role + Avg. Roles + Calls + Max Time + Mean Time + Min Time + Total Time + Query + + } + body={ + !isLoading && mostFrequentlyInvoked ? ( + mostFrequentlyInvoked[0].data!.map((item, i) => { + return ( + + + {item.rolname} + + + {item.avg_rows} + + + {item.calls} + + + {item.max_time.toFixed(2)}ms + + + {item.mean_time.toFixed(2)}ms + + + {item.min_time.toFixed(2)}ms + + + {item.total_time.toFixed(2)}ms + + +

    {item.query}

    + +
    +
    + ) + }) + ) : ( + <> + ) + } + /> + - -
    -
    - Role - Avg Rows - Calls - Max Time - Mean Time - Min Time - Total Time - Query - - } - body={ - isLoadedQuerySlowestExecutionTimeData ? ( - QuerySlowestExecutionTimeData[0].data.map((item, i) => { - return ( - - - {item.rolname} - - - {item.avg_rows} - - {item.calls} - - {item.max_time.toFixed(2)}ms - - - {item.mean_time.toFixed(2)}ms - - - {item.min_time.toFixed(2)}ms - - - {item.total_time.toFixed(2)}ms - - -

    {item.query}

    - -
    -
    - ) - }) - ) : ( - <> - ) - } + +
    + +
    +
    + Role + Avg Rows + Calls + Max Time + Mean Time + Min Time + Total Time + Query + + } + body={ + !isLoading && slowestExecutionTime ? ( + slowestExecutionTime[0].data!.map((item, i) => { + return ( + + + {item.rolname} + + + {item.avg_rows} + + + {item.calls} + + + {item.max_time.toFixed(2)}ms + + + {item.mean_time.toFixed(2)}ms + + + {item.min_time.toFixed(2)}ms + + + {item.total_time.toFixed(2)}ms + + +

    {item.query}

    + +
    +
    + ) + }) + ) : ( + <> + ) + } + /> + - + ) } diff --git a/studio/tailwind.config.js b/studio/tailwind.config.js index 21148b6013e..42d8f6c8553 100644 --- a/studio/tailwind.config.js +++ b/studio/tailwind.config.js @@ -73,6 +73,125 @@ module.exports = ui({ 'code::after': { content: '""', }, + '--tw-prose-body': theme('colors.scale[1100]'), + '--tw-prose-headings': theme('colors.scale[1200]'), + '--tw-prose-lead': theme('colors.scale[1100]'), + '--tw-prose-links': theme('colors.scale[1100]'), + '--tw-prose-bold': theme('colors.scale[1100]'), + '--tw-prose-counters': theme('colors.scale[1100]'), + '--tw-prose-bullets': theme('colors.scale[900]'), + '--tw-prose-hr': theme('colors.scale[500]'), + '--tw-prose-quotes': theme('colors.scale[1100]'), + '--tw-prose-quote-borders': theme('colors.scale[500]'), + '--tw-prose-captions': theme('colors.scale[700]'), + '--tw-prose-code': theme('colors.scale[1200]'), + '--tw-prose-pre-code': theme('colors.scale[900]'), + '--tw-prose-pre-bg': theme('colors.scale[400]'), + '--tw-prose-th-borders': theme('colors.scale[500]'), + '--tw-prose-td-borders': theme('colors.scale[200]'), + '--tw-prose-invert-body': theme('colors.scale[200]'), + '--tw-prose-invert-headings': theme('colors.white'), + '--tw-prose-invert-lead': theme('colors.scale[500]'), + '--tw-prose-invert-links': theme('colors.white'), + '--tw-prose-invert-bold': theme('colors.white'), + '--tw-prose-invert-counters': theme('colors.scale[400]'), + '--tw-prose-invert-bullets': theme('colors.scale[600]'), + '--tw-prose-invert-hr': theme('colors.scale[700]'), + '--tw-prose-invert-quotes': theme('colors.scale[100]'), + '--tw-prose-invert-quote-borders': theme('colors.scale[700]'), + '--tw-prose-invert-captions': theme('colors.scale[400]'), + // the following are typography overrides + // examples can be seen here —> https://github.com/tailwindlabs/tailwindcss-typography/blob/master/src/styles.js + // reset all header font weights + 'h1, h2, h3, h4, h5': { + fontWeight: '400', + }, + h2: { + fontWeight: '400', + }, + p: { + fontWeight: '400', + }, + pre: { + background: 'none', + padding: 0, + marginBottom: '32px', + }, + ul: { + listStyleType: 'none', + paddingLeft: '1rem', + }, + 'ul li': { + position: 'relative', + }, + 'ul li::before': { + position: 'absolute', + top: '0.75rem', + left: '-1rem', + height: '0.125rem', + width: '0.5rem', + borderRadius: '0.25rem', + backgroundColor: 'var(--colors-scale7)', + content: '""', + }, + ol: { + paddingLeft: '1rem', + counterReset: 'item', + listStyleType: 'none', + }, + 'ol li': { display: 'block', position: 'relative', paddingLeft: '1rem' }, + 'ol li::before': { + position: 'absolute', + top: '0.25rem', + left: '-1rem', + height: '1.2rem', + width: '1.2rem', + borderRadius: '0.25rem', + backgroundColor: 'var(--colors-scale3)', + border: '1px solid var(--colors-scale5)', + content: 'counter(item) " "', + counterIncrement: 'item', + fontSize: '12px', + color: 'var(--colors-scale9)', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + }, + + 'p img': { + border: '1px solid var(--colors-scale4)', + borderRadius: '4px', + overflow: 'hidden', + }, + iframe: { + border: '1px solid ' + theme('borderColor.DEFAULT'), + borderRadius: theme('borderRadius.lg'), + }, + td: { + borderBottom: '1px solid ' + theme('colors.scale[400]'), + }, + code: { + fontWeight: '400', + padding: '0.2rem 0.4rem', + backgroundColor: theme('colors.scale[400]'), + border: '1px solid ' + theme('colors.scale[500]'), + borderRadius: theme('borderRadius.lg'), + wordBreak: 'break-all', + }, + a: { + position: 'relative', + transition: 'color 0.3s ease-in-out', + paddingBottom: '2px', + fontWeight: '400', + color: 'var(--colors-scale12)', + textDecorationLine: 'underline', + textDecorationColor: 'var(--colors-brand7)', + textDecorationThickness: '1px', + textUnderlineOffset: '4px', + }, + 'a:hover': { + textDecorationColor: 'var(--colors-brand9)', + }, }, }, docs: { From 3c1b18fc1049e4e06960585db32ee1e0e2e1a14b Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 24 Feb 2023 19:02:27 +0800 Subject: [PATCH 201/230] Update query-performance.tsx --- studio/pages/project/[ref]/reports/query-performance.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/studio/pages/project/[ref]/reports/query-performance.tsx b/studio/pages/project/[ref]/reports/query-performance.tsx index 2dc511caaa1..edbd3d41712 100644 --- a/studio/pages/project/[ref]/reports/query-performance.tsx +++ b/studio/pages/project/[ref]/reports/query-performance.tsx @@ -30,7 +30,7 @@ const QueryPerformanceReport: NextPageWithLayout = () => { const slowestExecutionTime = hooks.slowestExecutionTime() const queryHitRate = hooks.queryHitRate() - const { isLoading, Layout } = usePresetReport([ + const { isLoading, Layout, handleRefresh } = usePresetReport([ mostFrequentlyInvoked, mostTimeConsuming, slowestExecutionTime, @@ -179,6 +179,7 @@ This provides useful information about the queries you run most frequently. Quer sql: `SELECT pg_stat_statements_reset();`, }) setShowResetgPgStatStatements(false) + handleRefresh() } catch (error) { console.error(error) } From be3a6bd3f49b6e49cb538ea8afb861cccfc6e7b1 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 24 Feb 2023 19:03:55 +0800 Subject: [PATCH 202/230] Update query-performance.tsx --- studio/pages/project/[ref]/reports/query-performance.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/studio/pages/project/[ref]/reports/query-performance.tsx b/studio/pages/project/[ref]/reports/query-performance.tsx index edbd3d41712..c616c1e00d3 100644 --- a/studio/pages/project/[ref]/reports/query-performance.tsx +++ b/studio/pages/project/[ref]/reports/query-performance.tsx @@ -37,8 +37,6 @@ const QueryPerformanceReport: NextPageWithLayout = () => { queryHitRate, ]) - console.log('ziinc mostFrequentlyInvoked', mostFrequentlyInvoked) - const checkAlert = (
    From 3170ba5d50346cf34dfed2ea6a4317797fd61557 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 24 Feb 2023 19:05:32 +0800 Subject: [PATCH 203/230] Update query-performance.tsx --- .../project/[ref]/reports/query-performance.tsx | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/studio/pages/project/[ref]/reports/query-performance.tsx b/studio/pages/project/[ref]/reports/query-performance.tsx index c616c1e00d3..a34af107eac 100644 --- a/studio/pages/project/[ref]/reports/query-performance.tsx +++ b/studio/pages/project/[ref]/reports/query-performance.tsx @@ -58,13 +58,11 @@ const QueryPerformanceReport: NextPageWithLayout = () => { const showIndexWarning = indexHitRate && tableHitRate && (indexHitRate <= 0.99 || tableHitRate <= 0.99) - const text = `This report will help you identify and understand queries that take the most time and resources - from your database. + const HeaderText = `This report will help you identify and understand queries that take the most time and resources + from your database. You can read more about [query performance](https://supabase.com/docs/guides/platform/performance#examining-query-performance) + in the docs. - You can read more about [query performance](https://supabase.com/docs/guides/platform/performance#examining-query-performance) - in our docs. - - You may also want to reset this analysis when you are optimizing your queries. This analysis is based on the extensions.pg_stat_statements table, so this table will be cleared when resetting. + You may also want to reset this analysis when you are optimizing your queries. This analysis is based on the \`extensions.pg_stat_statements\` table, which will be cleared when you reset analysis below. ` const TimeConsumingHelperText = `This report will show you statistics about queries ordered by the cumulative total execution time. @@ -151,7 +149,7 @@ This provides useful information about the queries you run most frequently. Quer )} - +
    - - + {selectedBucket.public ? (