From 7c127c8f6435a6e571bc8a261eaeadbb8b057c2d Mon Sep 17 00:00:00 2001 From: Joseph Schultz Date: Fri, 23 Dec 2022 16:52:20 -0600 Subject: [PATCH 01/64] Begin C# Documentation based off Flutter v1 docs --- apps/docs/components/CodeBlock/CodeBlock.tsx | 4 +- .../Navigation/NavigationMenu/HomeMenu.tsx | 6 + .../NavigationMenu.constants.ts | 35 + .../NavigationMenu/NavigationMenu.tsx | 17 + apps/docs/data/nav/supabase-csharp/v0.ts | 134 + apps/docs/data/nonGeneratedReferencePages.ts | 4 +- apps/docs/docs/ref/csharp/initialization.mdx | 67 + apps/docs/docs/ref/csharp/installing.mdx | 33 + apps/docs/docs/ref/csharp/introduction.mdx | 20 + apps/docs/docs/ref/csharp/release-notes.mdx | 6 + .../docs/docs/ref/csharp/v0/release-notes.mdx | 6 + apps/docs/layouts/SiteLayout.tsx | 4 + apps/docs/middleware.ts | 2 +- apps/docs/package.json | 8 +- .../docs/pages/reference/csharp/[...slug].tsx | 21 + .../reference/csharp/crawlers/[...slug].tsx | 43 + .../pages/reference/csharp/v0/[...slug].tsx | 21 + .../csharp/v0/crawlers/[...slug].tsx | 42 + apps/docs/public/img/icons/csharp.png | Bin 0 -> 6935 bytes .../public/img/icons/menu/c-sharp-icon.svg | 9 + .../img/icons/menu/reference-csharp.svg | 9 + package-lock.json | 17 + spec/common-client-libs-sections.json | 130 +- spec/supabase_csharp_v0.yml | 2388 +++++++++++++++++ 24 files changed, 2956 insertions(+), 70 deletions(-) create mode 100644 apps/docs/data/nav/supabase-csharp/v0.ts create mode 100644 apps/docs/docs/ref/csharp/initialization.mdx create mode 100644 apps/docs/docs/ref/csharp/installing.mdx create mode 100644 apps/docs/docs/ref/csharp/introduction.mdx create mode 100644 apps/docs/docs/ref/csharp/release-notes.mdx create mode 100644 apps/docs/docs/ref/csharp/v0/release-notes.mdx create mode 100644 apps/docs/pages/reference/csharp/[...slug].tsx create mode 100644 apps/docs/pages/reference/csharp/crawlers/[...slug].tsx create mode 100644 apps/docs/pages/reference/csharp/v0/[...slug].tsx create mode 100644 apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx create mode 100644 apps/docs/public/img/icons/csharp.png create mode 100644 apps/docs/public/img/icons/menu/c-sharp-icon.svg create mode 100644 apps/docs/public/img/icons/menu/reference-csharp.svg create mode 100644 spec/supabase_csharp_v0.yml diff --git a/apps/docs/components/CodeBlock/CodeBlock.tsx b/apps/docs/components/CodeBlock/CodeBlock.tsx index f4e962bb2aa..c29120c7bfb 100644 --- a/apps/docs/components/CodeBlock/CodeBlock.tsx +++ b/apps/docs/components/CodeBlock/CodeBlock.tsx @@ -6,6 +6,7 @@ import { Button, IconCheck, IconCopy } from 'ui' import js from 'react-syntax-highlighter/dist/cjs/languages/hljs/javascript' import ts from 'react-syntax-highlighter/dist/cjs/languages/hljs/typescript' +import csharp from 'react-syntax-highlighter/dist/cjs/languages/hljs/csharp' import py from 'react-syntax-highlighter/dist/cjs/languages/hljs/python' import sql from 'react-syntax-highlighter/dist/cjs/languages/hljs/sql' import bash from 'react-syntax-highlighter/dist/cjs/languages/hljs/bash' @@ -17,7 +18,7 @@ import { useTheme } from 'common/Providers' interface Props { title?: string - language: 'js' | 'jsx' | 'sql' | 'py' | 'bash' | 'ts' | 'dart' | 'json' + language: 'js' | 'jsx' | 'sql' | 'py' | 'bash' | 'ts' | 'dart' | 'json' | 'csharp' linesToHighlight?: number[] hideCopy?: boolean hideLineNumbers?: boolean @@ -62,6 +63,7 @@ const CodeBlock: FC = ({ SyntaxHighlighter.registerLanguage('sql', sql) SyntaxHighlighter.registerLanguage('bash', bash) SyntaxHighlighter.registerLanguage('dart', dart) + SyntaxHighlighter.registerLanguage('csharp', csharp) SyntaxHighlighter.registerLanguage('json', json) const large = false diff --git a/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx b/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx index 9a1f712f859..dcbafaa330b 100644 --- a/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/HomeMenu.tsx @@ -94,6 +94,12 @@ const home = [ href: '/reference/dart/introduction', level: 'reference_dart', }, + { + label: 'C#', + icon: '/img/icons/menu/reference-csharp', + href: '/reference/csharp/introduction', + level: 'reference_csharp', + }, { label: 'Tools Reference', }, diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index d9837f2ea65..ff7a0b3aa65 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -22,6 +22,12 @@ export const REFERENCES: References = { versions: ['v1', 'v0'], icon: '/docs/img/libraries/flutter-icon.svg', }, + csharp: { + name: 'C#', + library: 'supabase-csharp', + versions: ['v0'], + icon: '/docs/img/libraries/c-sharp-icon.svg', + }, cli: { name: 'CLI', library: undefined, @@ -697,6 +703,20 @@ export const reference = { items: [], icon: '/img/icons/menu/reference-dart', }, + { + name: 'supabase-csharp', + url: '/reference/csharp/start', + level: 'reference_csharp', + items: [], + icon: '/img/icons/menu/reference-csharp', + }, + { + name: 'supbase-python', + url: '/reference/python/start', + level: 'reference_python', + items: [], + icon: 'docs/img/icons/javascript.svg', + }, // { // name: 'supabase-python', // url: '/reference/python/start', @@ -746,6 +766,7 @@ export const reference_dart_v0 = { url: '/guides/reference/dart', parent: '/reference', } + export const reference_dart_v1 = { icon: 'reference-dart', title: 'dart', @@ -753,6 +774,13 @@ export const reference_dart_v1 = { parent: '/reference', } +export const reference_csharp_v0 = { + icon: 'reference-csharp', + title: 'c#', + url: 'guides/reference/csharp', + parent: '/reference', +} + export const reference_cli = { icon: 'reference-cli', title: 'Supabase CLI', @@ -846,6 +874,13 @@ export const references = [ icon: '/docs/img/icons/dart-icon.svg', url: '/reference/dart/start', }, + { + label: 'supabase-csharp', + versions: ['v0'], + description: 'something about the reference', + icon: '/docs/img/icons/c-sharp-icon.svg', + url: '/reference/csharp/start', + }, ], }, { diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx index cfb4d87b143..29bfc21edfe 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.tsx @@ -11,6 +11,8 @@ import spec_js_v1 from '~/../../spec/supabase_js_v1.yml' assert { type: 'yml' } import spec_dart_v1 from '~/../../spec/supabase_dart_v1.yml' assert { type: 'yml' } // @ts-expect-error import spec_dart_v0 from '~/../../spec/supabase_dart_v0.yml' assert { type: 'yml' } +// @ts-expect-error +import spec_csharp_v0 from '~/../../spec/supabase_csharp_v0.yml' assert { type: 'yml' } // import { gen_v3 } from '~/lib/refGenerator/helpers' import apiCommonSections from '~/../../spec/common-api-sections.json' import cliCommonSections from '~/../../spec/common-cli-sections.json' @@ -47,6 +49,7 @@ export type RefIdOptions = | 'reference_javascript_v2' | 'reference_dart_v0' | 'reference_dart_v1' + | 'reference_csharp_v0' | 'reference_cli' | 'reference_api' | 'reference_self_hosting_auth' @@ -56,6 +59,7 @@ export type RefIdOptions = export type RefKeyOptions = | 'javascript' | 'dart' + | 'csharp' | 'cli' | 'api' | 'self-hosting-auth' @@ -126,6 +130,10 @@ const NavigationMenu = () => { case url.includes(`/docs/reference/dart`) && url: menuState.setMenuLevelId('reference_dart_v1') break + // C# v0 (latest) + case url.includes(`/docs/reference/csharp`) && url: + menuState.setMenuLevelId('reference_csharp_v0') + break case url.includes(`/docs/reference/cli`) && url: menuState.setMenuLevelId('reference_cli') break @@ -175,6 +183,7 @@ const NavigationMenu = () => { const isReference_Javascript_V2 = 'reference_javascript_v2' === level const isReference_Dart_V0 = 'reference_dart_v0' === level const isReference_Dart_V1 = 'reference_dart_v1' === level + const isReference_Csharp_V0 = 'reference_csharp_v0' === level const isReference_Cli = 'reference_cli' === level const isReference_Api = 'reference_api' === level const isReference_Self_Hosting_Auth = 'reference_self_hosting_auth' === level @@ -229,6 +238,14 @@ const NavigationMenu = () => { lib="dart" spec={spec_dart_v1} /> + {/* // Tools */} + + +Initializing a new client is pretty straightforward. Find your project url and public key from the +admin panel and pass it into your client initialization function. + + + + + + + + + ```csharp + var url = Environment.GetEnvironmentVariable("SUPABASE_URL"); + var key = Environment.GetEnvironmentVariable("SUPABASE_KEY"); + + var options = new Supabase.SupabaseOptions + { + AutoConnectRealtime = true + }; + + var supabase = new Supabase.Client(url, key, options); + await supabase.InitializeAsync(); + ``` + + + + + + ```csharp + public static MauiApp CreateMauiApp() + { + // ... + var builder = MauiApp.CreateBuilder(); + + var url = Environment.GetEnvironmentVariable("SUPABASE_URL"); + var key = Environment.GetEnvironmentVariable("SUPABASE_KEY"); + var options = new SupabaseOptions + { + AutoRefreshToken = true, + AutoConnectRealtime = true, + SessionHandler = new SupabaseSessionHandler() + }; + + // Note the creation as a singleton. + builder.Services.AddSingleton(provider => new Supabase.Client(url, key, options)); + } + ``` + + + + + + diff --git a/apps/docs/docs/ref/csharp/installing.mdx b/apps/docs/docs/ref/csharp/installing.mdx new file mode 100644 index 00000000000..e274af8e280 --- /dev/null +++ b/apps/docs/docs/ref/csharp/installing.mdx @@ -0,0 +1,33 @@ +--- +id: installing +title: 'Installing & Initialization' +slug: installing +custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml +--- + +### Install from NuGet + + + + + You can install Supabase package from [nuget.org](https://www.nuget.org/packages/supabase-csharp/) + + + + + + + + + ```sh Terminal + dotnet add package supabase-csharp + ``` + + + + + + diff --git a/apps/docs/docs/ref/csharp/introduction.mdx b/apps/docs/docs/ref/csharp/introduction.mdx new file mode 100644 index 00000000000..6c699314937 --- /dev/null +++ b/apps/docs/docs/ref/csharp/introduction.mdx @@ -0,0 +1,20 @@ +--- +id: introduction +title: Introduction +hideTitle: true +--- + +
+ +
+

C# Client Library

+

supabase-csharp

+
+
+ +
+ This reference documents every object and method available in Supabase's C# + library, [supabase-csharp](https://www.nuget.org/packages/supabase-csharp). You can + use supabase-csharp to interact with your Postgres database, listen to database changes, invoke + Deno Edge Functions, build login and user management functionality, and manage large files. +
diff --git a/apps/docs/docs/ref/csharp/release-notes.mdx b/apps/docs/docs/ref/csharp/release-notes.mdx new file mode 100644 index 00000000000..b5e0e218918 --- /dev/null +++ b/apps/docs/docs/ref/csharp/release-notes.mdx @@ -0,0 +1,6 @@ +--- +id: release-notes +title: Release Notes +--- + +## dart this is the release notes file. diff --git a/apps/docs/docs/ref/csharp/v0/release-notes.mdx b/apps/docs/docs/ref/csharp/v0/release-notes.mdx new file mode 100644 index 00000000000..2ecb0ef3990 --- /dev/null +++ b/apps/docs/docs/ref/csharp/v0/release-notes.mdx @@ -0,0 +1,6 @@ +--- +id: release-notes +title: Release Notes +--- + +## dart v0 this is the release notes file. diff --git a/apps/docs/layouts/SiteLayout.tsx b/apps/docs/layouts/SiteLayout.tsx index eb017378efd..3bf76800ee4 100644 --- a/apps/docs/layouts/SiteLayout.tsx +++ b/apps/docs/layouts/SiteLayout.tsx @@ -71,6 +71,10 @@ const levelsData = { icon: '/docs/img/icons/menu/reference-dart', name: 'Dart Reference v0.0', }, + reference_csharp_v0: { + icon: '/docs/img/icons/menu/reference-csharp', + name: 'C# Reference v0.0', + }, reference_cli: { icon: '/docs/img/icons/menu/reference-cli', name: 'CLI Reference', diff --git a/apps/docs/middleware.ts b/apps/docs/middleware.ts index d13ce4a442f..254486ccf06 100644 --- a/apps/docs/middleware.ts +++ b/apps/docs/middleware.ts @@ -3,7 +3,7 @@ import type { NextRequest } from 'next/server' import isbot from 'isbot' export function middleware(request: NextRequest) { - const specs = ['javascript', 'dart'] + const specs = ['javascript', 'dart', 'csharp'] let version = '' if (request.url.includes('/v1/')) { diff --git a/apps/docs/package.json b/apps/docs/package.json index 2abc71adb53..009c9759c91 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -9,7 +9,7 @@ "lint": "next lint", "build:sitemap": "node ./internals/generate-sitemap.mjs", "postbuild": "ts-node ./scripts/build-search.ts && node ./internals/generate-sitemap.mjs", - "generate:all": "npm-run-all --parallel gen:api gen:cli gen:gotrue gen:storage gen:supabase-dart:v0 gen:supabase-dart:v1 gen:supabase-js:v1 gen:supabase-js:v2 gen:realtime", + "generate:all": "npm-run-all --parallel gen:api gen:cli gen:gotrue gen:storage gen:supabase-dart:v0 gen:supabase-dart:v1 gen:supabase-csharp:v0 gen:supabase-js:v1 gen:supabase-js:v2 gen:realtime", "gen:api": "npm-run-all gen:api:usage", "gen:api:usage": "ts-node ./generator/index.ts gen --type api --url https://api.supabase.com --input ../../spec/transforms/api_v0_openapi_deparsed.json --output ./docs/reference/api/generated/usage.mdx", "gen:cli": "npm-run-all gen:cli:commands gen:cli:config", @@ -25,6 +25,8 @@ "gen:supabase-dart:v0:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_dart_v0.yml --output ./docs/reference/dart/v0/generated", "gen:supabase-dart:v1": "npm-run-all gen:supabase-dart:v1:ref", "gen:supabase-dart:v1:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_dart_v1.yml --output ./docs/reference/dart/generated", + "gen:supabase-csharp:v0": "npm-run-all gen:supabase-dart:v1:ref", + "gen:supabase-csharp:v0:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_csharp_v1.yml --output ./docs/reference/csharp/generated", "gen:supabase-js:v1": "npm-run-all gen:supabase-js:v1:ref", "gen:supabase-js:v1:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_js_v1.yml --output ./docs/reference/javascript/v1/generated", "gen:supabase-js:v2": "npm-run-all gen:supabase-js:v2:ref", @@ -42,6 +44,7 @@ "@radix-ui/react-accordion": "^1.0.1", "algoliasearch": "^4.14.2", "babel": "^6.23.0", + "clsx": "^1.2.1", "common": "*", "config": "*", "gray-matter": "^4.0.3", @@ -63,6 +66,7 @@ "react-intersection-observer": "^9.4.0", "react-markdown": "^8.0.3", "react-syntax-highlighter": "^15.3.1", + "rehype-slug": "^5.1.0", "remark": "^14.0.2", "remark-admonitions": "^1.2.1", "remark-gfm": "^3.0.1", @@ -72,10 +76,10 @@ "valtio": "^1.7.6" }, "devDependencies": { - "dotenv": "^16.0.3", "@types/node": "^17.0.12", "@types/react": "17.0.39", "config": "*", + "dotenv": "^16.0.3", "ejs": "^3.1.8", "eslint": "8.9.0", "globby": "^12.0.2", diff --git a/apps/docs/pages/reference/csharp/[...slug].tsx b/apps/docs/pages/reference/csharp/[...slug].tsx new file mode 100644 index 00000000000..04e731b5aeb --- /dev/null +++ b/apps/docs/pages/reference/csharp/[...slug].tsx @@ -0,0 +1,21 @@ +import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' +// @ts-expect-error +import spec from '~/../../spec/supabase_csharp_v0.yml' assert { type: 'yml' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' + +const sections = flattenSections(clientLibsCommonSections) + +export default function JSReference(props) { + return +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/csharp', '/csharp') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx b/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx new file mode 100644 index 00000000000..c12f3cabbf2 --- /dev/null +++ b/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx @@ -0,0 +1,43 @@ +import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' +import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' +// @ts-expect-error +import spec from '~/../../spec/supabase_dart_v1.yml' assert { type: 'yml' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import { useRouter } from 'next/router' +import RefSEO from '~/components/reference/RefSEO' + +const sections = flattenSections(clientLibsCommonSections) + +export default function JSReference(props) { + const router = useRouter() + const slug = router.query.slug[0] + const filteredSection = sections.filter((section) => section.id === slug) + + const pageTitle = filteredSection[0]?.title + ? `${filteredSection[0]?.title} | Supabase` + : 'Supabase' + + return ( + <> + + + + + ) +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/dart', '/dart') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/csharp/v0/[...slug].tsx b/apps/docs/pages/reference/csharp/v0/[...slug].tsx new file mode 100644 index 00000000000..a76c3f386be --- /dev/null +++ b/apps/docs/pages/reference/csharp/v0/[...slug].tsx @@ -0,0 +1,21 @@ +import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' +// @ts-expect-error +import spec from '~/../../spec/supabase_csharp_v0.yml' assert { type: 'yml' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' + +const sections = flattenSections(clientLibsCommonSections) + +export default function JSReference(props) { + return +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/csharp/v0', '/csharp/v0') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx b/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx new file mode 100644 index 00000000000..4c78342f556 --- /dev/null +++ b/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx @@ -0,0 +1,42 @@ +import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' +import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' +// @ts-expect-error +import spec from '~/../../spec/supabase_csharp_v0.yml' assert { type: 'yml' } +import RefSectionHandler from '~/components/reference/RefSectionHandler' +import { flattenSections } from '~/lib/helpers' +import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' +import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' +import { useRouter } from 'next/router' +import RefSEO from '~/components/reference/RefSEO' + +const sections = flattenSections(clientLibsCommonSections) + +export default function JSReference(props) { + const router = useRouter() + const slug = router.query.slug[0] + const filteredSection = sections.filter((section) => section.id === slug) + + const pageTitle = filteredSection[0]?.title + ? `${filteredSection[0]?.title} | Supabase` + : 'Supabase' + return ( + <> + + + + + ) +} + +export async function getStaticProps({ params }: { params: { slug: string[] } }) { + return handleRefStaticProps(sections, params, '/csharp/v0', '/csharp/v0') +} + +export function getStaticPaths() { + return handleRefGetStaticPaths() +} diff --git a/apps/docs/public/img/icons/csharp.png b/apps/docs/public/img/icons/csharp.png new file mode 100644 index 0000000000000000000000000000000000000000..37f9fd725faa644a840459ea4a92567978984a10 GIT binary patch literal 6935 zcmaiZdpy(a|NqReA#6@lQ}f;&ZZz8*+8l>riX4(C9mY1~w3%~sQ^F){q83r^&ZR<$ zQZZwcbh_^lpORyr>UKz!QhncaA3mS&=kxvj{#E`W_>IRIO%y@}pjS9U}sBQ2i2DQ#mwSXxvVl?6CCD%+>n zf&yaL2~2ECOmr;YHpKy0mTL<>FHKtj*kzK0C|F(740|2LJ$Z>>t7tA~}CckLCZde9#dVONa%DK(zQ*a&}7O z|3SWl{0BKVA}%409}&m>YXSeJ;xG6=7(w^_ca{_;_rDQ)d;h=5V`Bbo8TMkH7+_XeiNA5YzN?nw!dOwyNr3qu|UXj*^s{>Pghsp_&82vG>Gy2 zJzTJ!Zmu>Ys*TNBGU109FmSdYZzLy`&P)KQ$V4zdN#wO;QUJ-y*3!n7L|jX>u_Y3h zB`;Hh^}u2#F#mt_OIeMz2RXdGZ5fgLgt++B<*6U3zKPBI@%H02I&wM3vDoEE+cLwJ z{O$m7fox{N(I{?lcP9zwiRIKk(_F_o{5|QvDj(>3^ zN3cO@|M%J~{;% zbzJj{Rh|v^lJZfj?&>TmM3-Lor>`%oGqUk|m})FnRD0IxU}hngy>%HTpbeYdcOo|(?;!DJDJ};^i}nZ?umcu>^}0| z!R#IXGyJ6Y!i80RPMI62FRw1DH1tO(msfJHfjb6*%LwK}AS#+mLk@DR0u6y^rF+ty z15zq}|HnWY;8B(_+rvM)ko;p;0&TmlDlk)IM z3nF;mCrx4Yh`9>pFty+c9d)N3KkZg(GAY0}f9!py1QBjtftwa@DV*M4TK!rL^^Nt@ z&`vXjCE-5@!TPdiN@@EjbripJAAGR*Rd}!@rGQZfR0XmYqmGiMct|v zk%+K#sAr(!k;B;}^(;Kjb%Sa3(IX6zfN7}Ucgf8}(36QeX7bFin9iXfJhgfaM0A!3 z!UNrlE2f8G5pL*SBN3gcA>OF5An+xZyb3dAj%sGHboR@%syp?7t_a1#lXT%lm`JF) zstt}yM&N%zTiry_(~#@a$RP;^`2~RJ!>)4?8_{~+*vJR8$A^jJ62_B!=W2u>UODTO zf~%ChkCEWgwOKKDL$=V1E~-~mJ(~vvBkiex%p0{0d99EKTr(8SHMO)Oa32hcuQxR+AbQH&{ zsW}bN4Rwy0#E!%>_aW&)CB7ZQp)jBzlhH8*z_9r(W?2;v6^=5rvV7?AtE&PP;P+Hs zr#74Fb)Jw2{E;u$E)b#9-V0lxq3}mL=IpwjysRKXKWw5Fv+t6au-8|1 zWAA5ds)iGHTxXPh=42yxT{abZefNd~H2Z#>c)s-@KuZtCiQhY`;ApG$z&l zI`s7;u6OdKdtQ8S z;soc>wPdwl=#Szj%D?8CD-Aw6=Os6@rVZ$&|hfJS>t#ft8Pk6w*)7OVDhP*O~V zW_SEVLF1yu$`p6awv`q71qpM5jUO!ZV%;@6(kgHT@negWuNLSCccj#svI+g_U26QB zH8#=$Y<^Vyoks)W`mt%J2<|_}rwk`FYntuK z_b#qku{v2`@C)TihNME-q#Yfz8ZdY}@<{I@ghLv;Bj4m{(V20E> zwe9`lq^i9Ij(beG-#9#HKHFe=L;(1umY3cdq{bgJ5gn>O^h@Q$z;~yb-6<3obXVtK zeA&*iA)=D1SiG}m`i^}rCFqQwW_;+DJ+4?Zb`e`)U(?Vr#*Oi#atUEcqF(@Zi-!Zjt`hgA_uG zzw4@`Nd4iU3U*GzyI)sIYl$0FGx};iOKVN;t7P=oK9|;FH>ia5UB4-u)+H zt<~6|%mdFN73DUi@y=NR>2)T+Y6r?C9Q~Upso{lw^JE)LI;q$o@aERS7 zoLHQ^FJ417WR7Y{8Acx^x_BqqIr3ERy{E+_+1v0`JD;?ye3uq7yhMyH*dn^BW4ES+ z0`)Q~p2-Wt>cFsyJXIGoGo~jqNQ#6cNlB0^=&TsN4*mT{aHA^i{|bBA`YV+QSnBJuB zz#WqqCH|0%~Da1lW@?`ln~n0QmM^ZT){lt$U{5!#NdhwNulmTgnwD_f;J zjof?ooMwmF#Wk~=OKxn=dJ1bDIQyFb$EG%a-n!7VePPee13Sk~;B$M?7r#EwZQ7b! zMOC|cuN9eSlD4`Y^9EfvlG8s93vLLgh;F1$tIe%2m&-TPkY@QsO{B_d($ zVx47iDFxb6xIA_Y<-UYm|KY7Ak8NL&nidO}ASVMQlZn^4<2}vwq|X-A`PRElgVZO- zZv?)=Fe`kPO|p1@PwfQZhu7gw$uKhVhx>Y(`Jy7qiy>F))g0li$q<3_57%{U+d$J< zZUmjaldH2-rN|(W?(TG;P<6sL)NtIvcv)0)*A#yH$Zu8}VhR-Ysyzua+-U_;pIcsJ ztz6sz$ge=5*I3PF4ly}>mfQO@hkZ+ifeIV>(b89HG4|iAzwoZwBp0p-e!Zs~m`du5 zCLXi%kW3GU##CLtd&|>ZQi)RQL#!U_E!|@_5cIu+lW|_m@#? z!al?v)xXT0U?}g1=9b>r+T;QjmfVp)3TxnkesG6lcl1W#e5>lrAv=#Jf`ra^uWM1` zHGyC~7B<`dE^96G7>&|is3je_vDvOZJwyDmukOL!)Zwnp5aRMyi#^^t~})ZS)P za^e2qGpXHat2m#+$1m#eFx{=F{Y_4?!PVgnyESA8j1}qV*Rbxl*5hXDcoi*7&4c=% z#MIjlqsI&jODHMBwJP6<kGEuZ1KDBv8JW=8?Vv6CBvzE2=m*-1t_ng zv-R+X)7wdVW;Y)@n=j>&a|0ZMlRGZ8A5N^ipegIZ1U0ey)>!K7%%N^QL{S`?zJQZB ziqAF!-Rj>pWLQkZTWbBD@i6_KQS?&!@7laii3ff>?wj6?fWANE|M_l z4z`Q_JXMM3C2?`yJ5N#Pc}YW^cg(NT<#~1Nb9S7!S+ktQUY!?xJKOGnyQgO`CGTP7 zxM86n*go(6-f^SCu3%awSj8tu7F%aEWl(cK%3KqrAp^|u-QntQHDoU4M%`iGcOzw? z<|YNGCm&+5(%Gx%yI?qBAv^cU^7eQ`&D^C+TyTg`{z zis}PZJ?DyY%UXXi6rR!!*Ib)!TXJW0U`}xvOk`K#aSdOXjT2RjnOC2V3x9M{{+{oX zgN*lwW^@dy$YzqUs^ z&2G<`5Zg>uG7iCx>CsHP6`vF0n4oHfL$DlrG~650k_K(Ls_QHf972zZ`z^k^6*WZF z!BW5q=~3h~?IBp%1(?er;cV3&c}`@aqLl-~9OjodnlfM2zjZQWR$jVKdqQwx zt}@xq%3M{57*9<)mY4SX`(k;CKk|6cx9&;Q8?wE%&4@Uc@alxhzxI3AP)Oq|rzhycW`TmO`$^l+z?7 z#JZT_&O$~VnK{~pomR?XSyy+07anVcr)>R3_4l_LxOf^?cdk>+Zi9*5(S^ULDxZbp zgAq9J=7fOsBqQB>$ixt%V!CmD2%8(>Vj^(Sh-}q(e3(HlAue6PP_tN8ey6PE-E^T{ zCK85vPX1-OXa`+bsjAxsH%vwV;9X7*ig6j`?oN*OG7wc56cliVj;_Zq(6z+vL!{%h z_nJ(WQJaT}OOuT=UU@%*0$#HC;aAFgGN4UrOg!M~836(ZIrbEoaQD?=XM#t1h5LJy7{HR#IiIknT$rRl}ziu9>D|u~&@_sw-`7 zI;fTYsYld;5X=9R&#ho*9jwdt*Lr2YL4KXvp;IQ3#4@Fod0Gs=>@Vg>D=SNo{r4cF h*DSh;0`l{xHOjhYgo#D8s-^!~o^BiImtA)4`yajWjm-c6 literal 0 HcmV?d00001 diff --git a/apps/docs/public/img/icons/menu/c-sharp-icon.svg b/apps/docs/public/img/icons/menu/c-sharp-icon.svg new file mode 100644 index 00000000000..40d0375079d --- /dev/null +++ b/apps/docs/public/img/icons/menu/c-sharp-icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/docs/public/img/icons/menu/reference-csharp.svg b/apps/docs/public/img/icons/menu/reference-csharp.svg new file mode 100644 index 00000000000..40d0375079d --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-csharp.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/package-lock.json b/package-lock.json index a623b4950f1..04c9896005c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,6 +49,7 @@ "@radix-ui/react-accordion": "^1.0.1", "algoliasearch": "^4.14.2", "babel": "^6.23.0", + "clsx": "^1.2.1", "common": "*", "config": "*", "gray-matter": "^4.0.3", @@ -70,6 +71,7 @@ "react-intersection-observer": "^9.4.0", "react-markdown": "^8.0.3", "react-syntax-highlighter": "^15.3.1", + "rehype-slug": "^5.1.0", "remark": "^14.0.2", "remark-admonitions": "^1.2.1", "remark-gfm": "^3.0.1", @@ -417,6 +419,14 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "apps/docs/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" + } + }, "apps/docs/node_modules/eslint": { "version": "8.9.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", @@ -49505,6 +49515,7 @@ "@types/react": "17.0.39", "algoliasearch": "^4.14.2", "babel": "^6.23.0", + "clsx": "*", "common": "*", "config": "*", "dotenv": "^16.0.3", @@ -49534,6 +49545,7 @@ "react-intersection-observer": "^9.4.0", "react-markdown": "^8.0.3", "react-syntax-highlighter": "^15.3.1", + "rehype-slug": "^5.1.0", "remark": "^14.0.2", "remark-admonitions": "^1.2.1", "remark-gfm": "^3.0.1", @@ -49735,6 +49747,11 @@ "uri-js": "^4.2.2" } }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, "eslint": { "version": "8.9.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", diff --git a/spec/common-client-libs-sections.json b/spec/common-client-libs-sections.json index d80a1e8b3fb..9478de69da0 100644 --- a/spec/common-client-libs-sections.json +++ b/spec/common-client-libs-sections.json @@ -4,14 +4,14 @@ "id": "introduction", "slug": "introduction", "type": "markdown", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "title": "Installing", "id": "installing", "slug": "installing", "type": "markdown", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "title": "Initializing", @@ -28,7 +28,7 @@ }, { "title": "Database", - "libs": ["js", "js_v1", "dart", "dart_v0"], + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"], "items": [ { "id": "select", @@ -36,7 +36,7 @@ "slug": "select", "product": "database", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "insert", @@ -44,7 +44,7 @@ "slug": "insert", "product": "database", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "update", @@ -52,7 +52,7 @@ "slug": "update", "product": "database", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "upsert", @@ -60,7 +60,7 @@ "slug": "upsert", "product": "database", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "delete", @@ -68,7 +68,7 @@ "slug": "delete", "product": "database", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "rpc", @@ -76,7 +76,7 @@ "slug": "rpc", "product": "database", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "using-filters", @@ -85,7 +85,7 @@ "slug": "using-filters", "product": "database", "type": "function", - "libs": ["js", "dart", "dart_v0"], + "libs": ["js", "dart", "dart_v0", "csharp"], "items": [ { "id": "eq", @@ -94,7 +94,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "neq", @@ -103,7 +103,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "gt", @@ -112,7 +112,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "gte", @@ -121,7 +121,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "lt", @@ -130,7 +130,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "lte", @@ -139,7 +139,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "like", @@ -148,7 +148,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "ilike", @@ -157,7 +157,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "is", @@ -166,7 +166,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "in", @@ -175,7 +175,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "contains", @@ -184,7 +184,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "contained-by", @@ -193,7 +193,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "range-gt", @@ -202,7 +202,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "range-gte", @@ -211,7 +211,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "range-lt", @@ -220,7 +220,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "range-lte", @@ -229,7 +229,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "range-adjacent", @@ -238,7 +238,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "overlaps", @@ -247,7 +247,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "text-search", @@ -256,7 +256,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "match", @@ -265,7 +265,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "not", @@ -274,7 +274,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "or", @@ -283,7 +283,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "filter", @@ -292,7 +292,7 @@ "product": "database", "parent": "filters", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] } ] }, @@ -304,7 +304,7 @@ "product": "database", "parent": "modifiers", "type": "function", - "libs": ["js", "dart", "dart_v0"], + "libs": ["js", "dart", "dart_v0", "csharp"], "items": [ { "id": "db-modifiers-select", @@ -322,7 +322,7 @@ "product": "database", "parent": "modifiers", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "limit", @@ -331,7 +331,7 @@ "product": "database", "parent": "modifiers", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "range", @@ -340,7 +340,7 @@ "product": "database", "parent": "modifiers", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "abort-signal", @@ -358,7 +358,7 @@ "product": "database", "parent": "modifiers", "type": "function", - "libs": ["js", "dart", "dart_v0"] + "libs": ["js", "dart", "dart_v0", "csharp"] }, { "id": "maybe-single", @@ -384,7 +384,7 @@ }, { "title": "Auth", - "libs": ["js", "js_v1", "dart", "dart_v0"], + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"], "items": [ { "id": "auth-api", @@ -399,7 +399,7 @@ "slug": "auth-signup", "product": "auth", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "sign-in", @@ -407,7 +407,7 @@ "slug": "auth-signin", "product": "auth", "type": "function", - "libs": ["js_v1", "dart_v0"] + "libs": ["js_v1", "dart_v0", "csharp"] }, { "id": "sign-in-with-provider", @@ -415,7 +415,7 @@ "slug": "auth-signinwithprovider", "product": "auth", "type": "function", - "libs": ["dart_v0"] + "libs": ["dart_v0", "csharp"] }, { "id": "sign-in-with-password", @@ -559,7 +559,7 @@ "slug": "auth-onauthstatechange", "product": "auth", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "reset-password-for-email", @@ -567,7 +567,7 @@ "slug": "auth-resetpasswordforemail", "product": "auth", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "mfa-enroll", @@ -718,7 +718,7 @@ }, { "title": "Functions", - "libs": ["js", "js_v1", "dart", "dart_v0"], + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"], "items": [ { "id": "invoke", @@ -726,13 +726,13 @@ "slug": "auth-admin-invoke", "product": "functions", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] } ] }, { "title": "Realtime", - "libs": ["js", "js_v1", "dart", "dart_v0"], + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"], "items": [ { "id": "stream", @@ -740,7 +740,7 @@ "slug": "stream", "product": "realtime", "type": "function", - "libs": ["dart", "dart_v0"] + "libs": ["dart", "dart_v0", "csharp"] }, { "id": "subscribe", @@ -748,7 +748,7 @@ "slug": "subscribe", "product": "realtime", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "remove-subscription", @@ -756,7 +756,7 @@ "slug": "removesubscription", "product": "realtime", "type": "function", - "libs": ["dart_v0", "js_v1"] + "libs": ["dart_v0", "csharp", "js_v1"] }, { "id": "remove-all-subscriptions", @@ -803,7 +803,7 @@ }, { "title": "Storage", - "libs": ["js", "js_v1", "dart", "dart_v0"], + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"], "items": [ { "id": "create-bucket", @@ -811,7 +811,7 @@ "slug": "storage-createbucket", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "get-bucket", @@ -819,7 +819,7 @@ "slug": "storage-getbucket", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "list-buckets", @@ -827,7 +827,7 @@ "slug": "storage-listbuckets", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "update-bucket", @@ -835,7 +835,7 @@ "slug": "storage-updatebucket", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "delete-bucket", @@ -843,7 +843,7 @@ "slug": "storage-deletebucket", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "empty-bucket", @@ -851,7 +851,7 @@ "slug": "storage-emptybucket", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "from-upload", @@ -859,7 +859,7 @@ "slug": "storage-from-upload", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "from-download", @@ -867,7 +867,7 @@ "slug": "storage-from-download", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "from-list", @@ -875,7 +875,7 @@ "slug": "storage-from-list", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "from-update", @@ -883,7 +883,7 @@ "slug": "storage-from-update", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "from-move", @@ -891,7 +891,7 @@ "slug": "storage-from-move", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "from-copy", @@ -907,7 +907,7 @@ "slug": "storage-from-remove", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "from-create-signed-url", @@ -915,7 +915,7 @@ "slug": "storage-from-createsignedurl", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] }, { "id": "from-create-signed-urls", @@ -931,7 +931,7 @@ "slug": "storage-from-getpublicurl", "product": "storage", "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0"] + "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] } ] }, diff --git a/spec/supabase_csharp_v0.yml b/spec/supabase_csharp_v0.yml new file mode 100644 index 00000000000..f9e6c805d80 --- /dev/null +++ b/spec/supabase_csharp_v0.yml @@ -0,0 +1,2388 @@ +openref: 0.1 + +info: + id: reference/csharp + title: Getting started + description: | + + Supabase C#. + + definition: ../../spec/enrichments/tsdoc_v2/combined.json + slugPrefix: '/' + specUrl: https://github.com/supabase/supabase/edit/master/spec/supabase_csharp_v0.yml + libraries: + - name: 'C#' + id: 'csharp' + version: '0.0.1' + +functions: + - id: sign-up + title: 'SignUp()' + description: | + Creates a new user. + notes: | + - By default, the user needs to verify their email address before logging in. To turn this off, disable **Confirm email** in [your project](https://app.supabase.com/project/_/auth/providers). + - **Confirm email** determines if users need to confirm their email address after signing up. + - If **Confirm email** is enabled, a `user` is returned but `session` is null. + - If **Confirm email** is disabled, both a `user` and a `session` are returned. + - When the user confirms their email address, they are redirected to the [`SITE_URL`](https://supabase.com/docs/reference/auth/config#site_url) by default. You can modify your `SITE_URL` or add additional redirect URLs in [your project](https://app.supabase.com/project/_/auth/url-configuration). + - If SignUp() is called for an existing confirmed user: + - If **Confirm email** is enabled in [your project](https://app.supabase.com/project/_/auth/providers), an obfuscated/fake user object is returned. + - If **Confirm email** is disabled, the error message, `User already registered` is returned. + examples: + - id: sign-up + name: Sign up. + isSpotlight: true + code: | + ```c# + var session = await supabase.Auth.SignUp(email, password); + ``` + - id: sign-in-with-password + title: 'SignIn(email, password)' + description: | + Log in an existing user using email or phone number with password. + notes: | + - Requires either an email and password or a phone number and password. + examples: + - id: sign-in-with-email-and-password + name: Sign in with email and password + isSpotlight: true + code: | + ```c# + var session = await supabase.Auth.SignIn(email, password); + ``` + - id: sign-in-with-phone-and-password + name: Sign in with phone and password + code: | + ```c# + var session = await supabase.Auth.SignIn(SignInType.Phone, phoneNumber, password); + ``` + - id: sign-in-with-otp + title: 'SendMagicLink() and SignIn(SignInType, Phone)' + notes: | + - Requires either an email or phone number. + - This method is used for passwordless sign-ins where a OTP is sent to the user's email or phone number. + - If you're using an email, you can configure whether you want the user to receive a magiclink or a OTP. + - If you're using phone, you can configure whether you want the user to receive a OTP. + - The magic link's destination URL is determined by the [`SITE_URL`](https://supabase.com/docs/reference/auth/config#site_url). You can modify the `SITE_URL` or add additional redirect urls in [your project](https://app.supabase.com/project/_/auth/settings). + examples: + - id: sign-in-with-email + name: Send Magic Link. + isSpotlight: true + description: | + The user will be sent an email which contains either a magiclink or a OTP or both. By default, a given user can only request a OTP once every 60 seconds. + You can pass `emailRedirectTo` with dynamic link to bring the users back to your app after they click on the magic link. + code: | + ```c# + var options = new SignInOptions { RedirectTo = "http://myredirect.example" }; + var didSendMagicLink = await supabase.Auth.SendMagicLink("joseph@supabase.io", options); + ``` + - id: sign-in-with-sms-otp + name: Sign in with SMS OTP. + description: The user will be sent a SMS which contains a OTP. By default, a given user can only request a OTP once every 60 seconds. + code: | + ```c# + await supabase.Auth.SignIn(SignInType.Phone, "+13334445555"); + + // Paired with `VerifyOTP` to get a session + var session = await supabase.Auth.VerifyOTP("+13334445555", TOKEN, MobileOtpType.SMS); + ``` + - id: sign-in-with-oauth + title: 'SignIn(Provider)' + description: | + Signs the user in using third party OAuth providers. + notes: | + - This method is used for signing in using a third-party provider. + - Supabase supports many different [third-party providers](https://supabase.com/docs/guides/auth#providers). + examples: + - id: sign-in-using-a-third-party-provider + name: Sign in using a third-party provider + isSpotlight: true + code: | + ```c# + var signInUrl = supabase.Auth.SignIn(Provider.Github); + ``` + - id: sign-in-with-scopes + name: With scopes + description: | + If you need additional data from an OAuth provider, you can include a space-separated list of scopes in your request to get back an OAuth provider token. + You may also need to specify the scopes in the provider's OAuth app settings, depending on the provider. + code: | + ```c# + var signInUrl = supabase.Auth.SignIn(Provider.Github, 'repo gist notifications'); + + // after user comes back from signin flow + var session = supabase.Auth.GetSessionFromUrl(REDIRECTED_URI); + ``` + - id: sign-out + title: 'SignOut()' + description: | + Signs out the current user, if there is a logged in user. + notes: | + - In order to use the `SignOut()` method, the user needs to be signed in first. + examples: + - id: sign-out + name: Sign out + isSpotlight: true + code: | + ```c# + await supabase.Auth.SignOut(); + ``` + - id: verify-otp + title: 'VerifyOtp()' + notes: | + - The `VerifyOtp` method takes in different verification types. If a phone number is used, the type can either be `sms` or `phone_change`. If an email address is used, the type can be one of the following: `signup`, `magiclink`, `recovery`, `invite` or `email_change`. + - The verification type used should be determined based on the corresponding auth method called before `VerifyOtp` to sign up / sign-in a user. + examples: + - id: verify-sms-one-time-password(otp) + name: Verify Sms One-Time Password (OTP) + isSpotlight: true + code: | + ```c# + var session = await supabase.Auth.VerifyOTP("+13334445555", TOKEN, MobileOtpType.SMS); + ``` + - id: get-session + title: 'CurrentSession' + description: | + Returns the session data, if there is an active session. + examples: + - id: get-the-session-data + name: Get the session data + isSpotlight: true + code: | + ```c# + var session = supabase.Auth.CurrentSession; + ``` + - id: get-user + title: 'CurrentUser' + description: | + Returns the user data, if there is a logged in user. + examples: + - name: Get the logged in user + isSpotlight: true + code: | + ```c# + var user = supabase.Auth.CurrentUser; + ``` + - id: update-user + title: 'UpdateUser()' + description: | + Updates user data, if there is a logged in user. + notes: | + - In order to use the `updateUser()` method, the user needs to be signed in first. + - By Default, email updates sends a confirmation link to both the user's current and new email. + To only send a confirmation link to the user's new email, disable **Secure email change** in your project's [email auth provider settings](https://app.supabase.com/project/_/auth/settings). + examples: + - id: update-the-email-for-an-authenticated-user + name: Update the email for an authenticated user + description: Sends a "Confirm Email Change" email to the new email address. + isSpotlight: true + code: | + ```c# + var attrs = new UserAttributes { Email = "new-email@example.com" }; + var response = await supabase.Auth.Update(attrs); + ``` + - id: update-the-password-for-an-authenticated-user + name: Update the password for an authenticated user + isSpotlight: false + code: | + ```c# + var attrs = new UserAttributes { Password = "***********" }; + var response = await supabase.Auth.Update(attrs); + ``` + - id: update-the-users-metadata + name: Update the user's metadata + isSpotlight: true + code: | + ```c# + var attrs = new UserAttributes + { + Data = new Dictionary { {"example", "data" } } + }; + var response = await supabase.Auth.Update(attrs); + ``` + - id: on-auth-state-change + title: 'StateChanged' + description: | + Receive a notification every time an auth event happens. + notes: | + - Types of auth events: `AuthState.SignedIn`, `AuthState.SignedOut`, `AuthState.UserUpdated`, `AuthState.PasswordRecovery`, `AuthState.TokenRefreshed` + examples: + - id: listen-to-auth-changes + name: Listen to auth changes + isSpotlight: true + code: | + ```c# + supabase.Auth.StateChanged += (sender, ev) => + { + switch (ev.State) + { + case AuthState.SignedIn: + break; + case AuthState.SignedOut: + break; + case AuthState.UserUpdated: + break; + case AuthState.PasswordRecovery: + break; + case AuthState.TokenRefreshed: + break; + } + }; + ``` + - id: auth-reset-password-for-email + title: 'ResetPasswordForEmail()' + description: | + Sends a reset request to an email address. + notes: | + Sends a password reset request to an email address. When the user clicks the reset link in the email they are redirected back to your application. Prompt the user for a new password and call Auth.UpdateUser(): + + examples: + - id: reset-password + name: Reset password for Flutter + isSpotlight: true + code: | + ```c# + await supabase.Auth.ResetPasswordForEmail("joseph@supabase.io"); + ``` + - id: invoke + title: 'invoke()' + description: | + Invokes a Supabase Function. See the [guide](/docs/guides/functions) for details on writing Functions. + notes: | + - Requires an Authorization header. + - Invoke params generally match the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) spec. + examples: + - id: basic-invocation + name: Basic invocation. + isSpotlight: true + code: | + ```c# + var options = new InvokeFunctionOptions + { + Headers = new Dictionary {{ "Authorization", "Bearer 1234" }}, + Body = new Dictionary { { "foo", "bar" } } + }; + + await supabase.Functions.Invoke("hello", options: options); + ``` + - id: modeled-invocation + name: Modeled invocation + code: | + ``` c# + class HelloResponse + { + [JsonProperty("name")] + public string Name { get; set; } + } + + await supabase.Functions.Invoke("hello"); + ``` + - id: select + description: | + Performs vertical filtering with SELECT. + title: 'Fetch data: Select()' + notes: | + - **Column Names must match names in database, not names specified on model properties.** + - By default, Supabase projects will return a maximum of 1,000 rows. This setting can be changed in Project API Settings. It's recommended that you keep it low to limit the payload size of accidental or malicious requests. You can use `range()` queries to paginate through your data. + - `From()` can be combined with [Modifiers](/docs/reference/csharp/using-modifiers) + - `From()` can be combined with [Filters](/docs/reference/csharp/using-filters) + - If using the Supabase hosted platform `apikey` is technically a reserved keyword, since the API gateway will pluck it out for authentication. [It should be avoided as a column name](https://github.com/supabase/supabase/issues/5465). + examples: + - id: getting-your-data + name: Getting your data + isSpotlight: true + code: | + ```c# + var result = await supabase.From().Get(); + var cities = result.Models + ``` + - id: selecting-specific-columns + name: Selecting specific columns + description: You can select specific fields from your tables. + code: | + ```c# + var result = await supabase + .From() + .Select("name, createdAt") + .Get(); + ``` + - id: query-foreign-tables + name: Query foreign tables + description: If your database has relationships, you can query related tables too. + code: | + ```c# + var data = await supabase + .From() + .Select("id, supplier:supplier_id(name), purchaser:purchaser_id(name)") + .Get(); + ``` + - id: filtering-with-inner-joins + name: Filtering with inner joins + description: | + If you want to filter a table based on a child table's values you can use the `!inner()` function. For example, if you wanted + to select all rows in a `message` table which belong to a user with the `username` "Jane": + code: | + ```c# + var result = await supabase + .From() + .Select("*, users!inner(*)") + .Filter("user.username", Operator.Equals, "Jane") + .Get(); + ``` + - id: querying-with-count-option + name: Querying with count option + description: | + You can get the number of rows by using the count option. + Allowed values for count option are [exact](https://postgrest.org/en/stable/api.html#exact-count), [planned](https://postgrest.org/en/stable/api.html#planned-count) and [estimated](https://postgrest.org/en/stable/api.html#estimated-count). + code: | + ```c# + var count = await supabase + .From() + .Select("name") + .Count(CountType.Exact); + ``` + - id: querying-json-data + name: Querying JSON data + description: | + If you have data inside of a JSONB column, you can apply select + and query filters to the data values. Postgres offers a + [number of operators](https://www.postgresql.org/docs/current/functions-json.html) + for querying JSON data. Also see + [PostgREST docs](http://postgrest.org/en/v7.0.0/api.html#json-columns) for more details. + code: | + ```c# + var result = await supabase + .From() + .Select("id, name, address->street") + .Filter("address->postcode", Operator.Equals, 90210) + .Get(); + ``` + + - id: insert + description: | + Performs an INSERT into the table. + title: 'Create data: Insert()' + examples: + - id: create-a-record + name: Create a record + isSpotlight: true + code: | + ```c# + [Table("cities")] + class City : BaseModel + { + [PrimaryKey("id", false)] + public int Id { get; set; } + + [Column("name")] + public string Name { get; set; } + + [Column("country_id")] + public int CountryId { get; set; } + } + + var model = new City + { + Name = "The Shire", + CountryId = 554 + }; + + await supabase.From().Insert(model); + ``` + - id: bulk-create + name: Bulk create + code: | + ```c# + [Table("cities")] + class City : BaseModel + { + [PrimaryKey("id", false)] + public int Id { get; set; } + + [Column("name")] + public string Name { get; set; } + + [Column("country_id")] + public int CountryId { get; set; } + } + + var models = new List + { + new City { Name = "The Shire", CountryId = 554 }, + new City { Name = "Rohan", CountryId = 553 }, + }; + + await supabase.From().Insert(models); + ``` + - id: fetch-inserted-data + name: Fetch inserted record + code: | + ```dart + var result = await supabase + .From() + .Insert(models, new QueryOptions { Returning = ReturnType.Representation }); + ``` + + - id: update + description: | + Performs an UPDATE on the table. + title: 'Modify data: Update()' + notes: | + - `Update()` is typically called using a model as an argument or from a hydrated model. + examples: + - id: updating-your-data + name: Update your data + isSpotlight: true + code: | + ```c# + var model = await supabase + .From() + .Filter("name", Operator.Equals, "Auckland") + .Single(); + + model.Name = "Middle Earth"; + + await model.Update(); + ``` + + - id: upsert + description: | + Performs an UPSERT into the table. + title: 'Upsert data: Upsert()' + notes: | + - Primary keys should be included in the data payload in order for an update to work correctly. + - Primary keys must be natural, not surrogate. There are however, [workarounds](https://github.com/PostgREST/postgrest/issues/1118) for surrogate primary keys. + examples: + - id: upsert-your-data + name: Upsert your data + isSpotlight: true + code: | + ```c# + var model = new City + { + Id = 554, + Name = "Middle Earth" + }; + + await supabase.From().Upsert(model); + ``` + - id: upserting-into-tables-with-constraints + name: Upserting into tables with constraints + description: | + Running the following will cause supabase to upsert data into the `users` table. + If the username 'supabot' already exists, the `onConflict` argument tells supabase to overwrite that row + based on the column passed into `onConflict`. + isSpotlight: true + code: | + ```c# + var model = new City + { + Id = 554, + Name = "Middle Earth" + }; + + await supabase + .From() + .Upsert(model, new QueryOptions { OnConflict = "name" }); + ``` + - id: return-the-exact-number-of-rows + name: Return the exact number of rows + description: | + Allowed values for count option are `exact`, `planned` and `estimated`. + code: | + ```c# + var model = new City + { + Id = 554, + Name = "Middle Earth" + }; + + await supabase + .From() + .Upsert(model, new QueryOptions { Count = QueryOptions.CountType.Exact }); + ``` + + - id: delete + description: | + Performs a DELETE on the table. + title: 'Delete data: Delete()' + notes: | + - `delete()` should always be combined with [Filters](/docs/reference/csharp/using-filters) to target the item(s) you wish to delete. + examples: + - id: delete-records + name: Delete records + isSpotlight: true + code: | + ```c# + await supabase + .From() + .Filter("id", Operator.Equals, 342) + .Delete(); + ``` + + - id: rpc + title: 'Stored Procedures: rpc()' + description: | + You can call stored procedures as a "Remote Procedure Call". + + That's a fancy way of saying that you can put some logic into your database then call it from anywhere. + It's especially useful when the logic rarely changes - like password resets and updates. + examples: + - id: call-a-stored-procedure + name: Call a stored procedure + isSpotlight: true + description: This is an example invoking a stored procedure. + code: | + ```dart + final data = await supabase + .rpc('hello_world'); + ``` + - id: with-parameters + name: With Parameters + code: | + ```dart + final data = await supabase + .rpc('echo_city', params: { 'name': 'The Shire' }); + ``` + + - id: subscribe + description: | + Subscribe to realtime changes in your database. + title: 'on().subscribe()' + notes: | + - Realtime is disabled by default for new Projects for better database performance and security. You can turn it on by [managing replication](/docs/guides/api#managing-realtime). + - If you want to receive the "previous" data for updates and deletes, you will need to set `REPLICA IDENTITY` to `FULL`, like this: `ALTER TABLE your_table REPLICA IDENTITY FULL;` + examples: + - id: listen-to-all-database-changes + name: Listen to all database changes + isSpotlight: true + code: | + ```dart + supabase.channel('*').on( + RealtimeListenTypes.postgresChanges, + ChannelFilter(event: '*', schema: '*'), + (payload, [ref]) { + print('Change received: ${payload.toString()}'); + }, + ).subscribe(); + ``` + - id: listening-to-a-specific-table + name: Listening to a specific table + code: | + ```dart + supabase.channel('public:countries').on( + RealtimeListenTypes.postgresChanges, + ChannelFilter(event: '*', schema: 'public', table: 'countries'), + (payload, [ref]) { + print('Change received: ${payload.toString()}'); + }, + ).subscribe(); + ``` + - id: listening-to-inserts + name: Listening to inserts + code: | + ```dart + supabase.channel('public:countries').on( + RealtimeListenTypes.postgresChanges, + ChannelFilter(event: 'INSERT', schema: 'public', table: 'countries'), + (payload, [ref]) { + print('Change received: ${payload.toString()}'); + }, + ).subscribe(); + ``` + - id: listening-to-updates + name: Listening to updates + description: | + By default, Supabase will send only the updated record. If you want to receive the previous values as well you can + enable full replication for the table you are listening too: + + ```sql + alter table "your_table" replica identity full; + ``` + code: | + ```dart + supabase.channel('public:countries').on( + RealtimeListenTypes.postgresChanges, + ChannelFilter(event: 'UPDATE', schema: 'public', table: 'countries'), + (payload, [ref]) { + print('Change received: ${payload.toString()}'); + }, + ).subscribe(); + ``` + - id: listening-to-deletes + name: Listening to deletes + description: | + By default, Supabase does not send deleted records. If you want to receive the deleted record you can + enable full replication for the table you are listening too: + + ```sql + alter table "your_table" replica identity full; + ``` + code: | + ```dart + supabase.channel('public:countries').on( + RealtimeListenTypes.postgresChanges, + ChannelFilter(event: 'DELETE', schema: 'public', table: 'countries'), + (payload, [ref]) { + print('Change received: ${payload.toString()}'); + }, + ).subscribe(); + ``` + - id: listening-to-multiple-events + name: Listening to multiple events + description: You can chain listeners if you want to listen to multiple events for each table. + code: | + ```dart + supabase.channel('public:countries').on(RealtimeListenTypes.postgresChanges, + ChannelFilter(event: 'INSERT', schema: 'public', table: 'countries'), + (payload, [ref]) { + print('Change received: ${payload.toString()}'); + }).on(RealtimeListenTypes.postgresChanges, + ChannelFilter(event: 'DELETE', schema: 'public', table: 'countries'), + (payload, [ref]) { + print('Change received: ${payload.toString()}'); + }).subscribe(); + ``` + - id: listening-to-row-level-changes + name: Listening to row level changes + description: You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match. + code: | + ```dart + supabase.channel('public:countries:id=eq.200').on( + RealtimeListenTypes.postgresChanges, + ChannelFilter( + event: 'UPDATE', + schema: 'public', + table: 'countries', + filter: 'id=eq.200', + ), (payload, [ref]) { + print('Change received: ${payload.toString()}'); + }).subscribe(); + ``` + + - id: remove-channel + description: | + Unsubscribes and removes Realtime channel from Realtime client. + title: 'removeChannel()' + notes: | + - Removing a channel is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed. + examples: + - id: removes-a-channel + name: Remove a channel + isSpotlight: true + code: | + ```dart + final status = await supabase.removeChannel(channel); + ``` + + - id: remove-all-channels + description: | + Unsubscribes and removes all Realtime channels from Realtime client. + title: 'removeAllChannels()' + notes: | + - Removing channels is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed. + examples: + - id: remove-all-channels + name: Remove all channels + isSpotlight: true + code: | + ```dart + final statuses = await supabase.removeAllChannels(); + ``` + + - id: get-channels + description: | + Returns all Realtime channels. + title: 'getChannels()' + examples: + - id: get-all-channels + name: Get all channels + isSpotlight: true + code: | + ```dart + final channels = supabase.getChannels(); + ``` + + - id: stream + description: | + Notifies of data at the queried table. + title: 'stream()' + notes: | + - `stream()` will emit the initial data as well as any further change on the database as `Stream` of `List>` by combining Postgrest and Realtime. + - Takes a list of primary key columns as its argument. + examples: + - id: listening-to-a-specific-table + name: Listening to a specific table + isSpotlight: true + code: | + ```dart + supabase.from('countries') + .stream(primaryKey: ['id']) + .listen((List> data) { + // Do something awesome with the data + }); + ``` + - id: listening-to-a-specific-rows-within-a-table + name: Listening to a specific rows within a table + description: | + You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match. + This syntax is the as how you can filter data in Realtime + code: | + ```dart + supabase.from('countries') + .stream(primaryKey: ['id']) + .eq('id', '120') + .listen((List> data) { + // Do something awesome with the data + }); + ``` + - id: with-order + name: With `order()` + code: | + ```dart + supabase.from('countries') + .stream(primaryKey: ['id']) + .order('name', ascending: true) + .listen((List> data) { + // Do something awesome with the data + }); + ``` + - id: with-limit + name: With `limit()` + code: | + ```dart + supabase.from('countries') + .stream(primaryKey: ['id']) + .order('name', ascending: true) + .limit(10) + .listen((List> data) { + // Do something awesome with the data + }); + ``` + - id: using-stream-with-stream-builder + name: Using `stream()` with `StreamBuilder` + description: | + When using `stream()` with a `StreamBuilder` within your Flutter application, make sure to store your stream in a variable to prevent refetching upon rebuilding. + code: | + ```dart + final supabase = Supabase.instance.client; + + class MyWidget extends StatefulWidget { + const MyWidget({Key? key}) : super(key: key); + + @override + State createState() => _MyWidgetState(); + } + + class _MyWidgetState extends State { + // Persist the stream in a local variable to prevent refetching upon rebuilds + final _stream = supabase.from('countries').stream(primaryKey: ['id']); + + @override + Widget build(BuildContext context) { + return StreamBuilder( + stream: _stream, + builder: (context, snapshot) { + // Return your widget with the data from the snapshot + }, + ); + } + } + ``` + + - id: list-buckets + description: | + Retrieves the details of all Storage buckets within an existing product. + title: 'listBuckets()' + $ref: '@supabase/storage-js.packages/StorageBucketApi.default.listBuckets' + notes: | + - Policy permissions required: + - `buckets` permissions: `select` + - `objects` permissions: none + examples: + - id: list-buckets + name: List buckets + isSpotlight: true + code: | + ```dart + final List buckets = await supabase + .storage + .listBuckets(); + ``` + + - id: get-bucket + description: | + Retrieves the details of an existing Storage bucket. + title: 'getBucket()' + $ref: '@supabase/storage-js.packages/StorageBucketApi.default.getBucket' + notes: | + - Policy permissions required: + - `buckets` permissions: `select` + - `objects` permissions: none + examples: + - id: get-bucket + name: Get bucket + isSpotlight: true + code: | + ```dart + final Bucket bucket = await supabase + .storage + .getBucket('avatars'); + ``` + + - id: create-bucket + description: | + Creates a new Storage bucket + title: 'createBucket()' + notes: | + - Policy permissions required: + - `buckets` permissions: `insert` + - `objects` permissions: none + examples: + - id: create-bucket + name: Create bucket + isSpotlight: true + code: | + ```dart + final String bucketId = await supabase + .storage + .createBucket('avatars'); + ``` + + - id: empty-bucket + description: | + Removes all objects inside a single bucket. + title: 'emptyBucket()' + notes: | + - Policy permissions required: + - `buckets` permissions: `select` + - `objects` permissions: `select` and `delete` + examples: + - id: empty-bucket + name: Empty bucket + isSpotlight: true + code: | + ```dart + final String result = await supabase + .storage + .emptyBucket('avatars'); + ``` + - id: update-bucket + description: | + Updates a new Storage bucket + title: 'updateBucket()' + notes: | + - Policy permissions required: + - `buckets` permissions: `update` + - `objects` permissions: none + examples: + - id: update-bucket + name: Update bucket + isSpotlight: true + code: | + ```dart + final res = await supabase + .storage + .updateBucket('avatars', const BucketOptions(public: false)); + ``` + + - id: delete-bucket + description: | + Deletes an existing bucket. A bucket can't be deleted with existing objects inside it. You must first `empty()` the bucket. + title: 'deleteBucket()' + notes: | + - Policy permissions required: + - `buckets` permissions: `select` and `delete` + - `objects` permissions: none + examples: + - id: delete-bucket + name: Delete bucket + isSpotlight: true + code: | + ```dart + final String result = await supabase + .storage + .deleteBucket('avatars'); + ``` + + - id: from-upload + description: | + Uploads a file to an existing bucket. + title: 'from.upload()' + $ref: '@supabase/storage-js.packages/StorageFileApi.default.upload' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `insert` + examples: + - id: upload-file + name: Upload file + isSpotlight: true + code: | + ```dart + final avatarFile = File('path/to/file'); + final String path = await supabase.storage.from('avatars').upload( + 'public/avatar1.png', + avatarFile, + fileOptions: const FileOptions(cacheControl: '3600', upsert: false), + ); + ``` + + - id: from-update + description: | + Replaces an existing file at the specified path with a new one. + title: 'from.update()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `update` and `select` + examples: + - id: update-file + name: Update file + isSpotlight: true + code: | + ```dart + final avatarFile = File('path/to/local/file'); + final String path = await supabase.storage.from('avatars').update( + 'public/avatar1.png', + avatarFile, + fileOptions: const FileOptions(cacheControl: '3600', upsert: false), + ); + ``` + + - id: from-move + description: | + Moves an existing file, optionally renaming it at the same time. + title: 'from.move()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `update` and `select` + examples: + - id: move-file + name: Move file + isSpotlight: true + code: | + ```dart + final String result = await supabase + .storage + .from('avatars') + .move('public/avatar1.png', 'private/avatar2.png'); + ``` + + - id: from-create-signed-url + description: | + Create signed url to download file without requiring permissions. This URL can be valid for a set number of seconds. + title: 'from.createSignedUrl()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `select` + examples: + - id: create-signed-url + name: Create Signed URL + isSpotlight: true + code: | + ```dart + final String signedUrl = await supabase + .storage + .from('avatars') + .createSignedUrl('avatar1.png', 60); + ``` + - id: create-signed-url-with-transform + name: With transform + code: | + ```dart + final String signedUrl = await supabase + .storage + .from('avatars') + .createSignedUrl( + 'avatar1.png', + 60, + transform: TransformOptions( + width: 200, + height: 200, + ), + ); + ``` + + - id: from-get-public-url + description: | + Retrieve URLs for assets in public buckets + title: 'from.getPublicUrl()' + notes: | + - The bucket needs to be set to public, either via [updateBucket()](/docs/reference/javascript/storage-updatebucket) or by going to Storage on [app.supabase.com](https://app.supabase.com), clicking the overflow menu on a bucket and choosing "Make public" + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: none + examples: + - id: returns-the-url-for-an-asset-in-a-public-bucket + name: Returns the URL for an asset in a public bucket + isSpotlight: true + code: | + ```dart + final String publicUrl = supabase + .storage + .from('public-bucket') + .getPublicUrl('avatar1.png'); + ``` + - id: returns-the-url-for-an-asset-in-a-public-bucket-with-transform + name: With transform + isSpotlight: true + code: | + ```dart + final String publicUrl = await supabase + .storage + .from('public-bucket') + .getPublicUrl( + 'avatar1.png', + transform: TransformOptions( + width: 200, + height: 200, + ), + ); + ``` + + - id: from-download + description: | + Downloads a file. + title: 'from.download()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `select` + examples: + - id: download-file + name: Download file + isSpotlight: true + code: | + ```dart + final Uint8List file = await supabase + .storage + .from('avatars') + .download('avatar1.png'); + ``` + - id: download-file-with-transform + name: With transform + isSpotlight: true + code: | + ```dart + final Uint8List file = await supabase + .storage + .from('avatars') + .download( + 'avatar1.png', + transform: TransformOptions( + width: 200, + height: 200, + ), + ); + ``` + + - id: from-remove + description: | + Deletes files within the same bucket + title: 'from.remove()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `delete` and `select` + examples: + - id: delete-file + name: Delete file + isSpotlight: true + code: | + ```dart + final List objects = await supabase + .storage + .from('avatars') + .remove(['avatar1.png']); + ``` + + - id: from-list + description: | + Lists all the files within a bucket. + title: 'from.list()' + notes: | + - Policy permissions required: + - `buckets` permissions: none + - `objects` permissions: `select` + examples: + - id: list-files-in-a-bucket + name: List files in a bucket + isSpotlight: true + code: | + ```dart + final List objects = await supabase + .storage + .from('avatars') + .list(); + ``` + - id: using-modifiers + title: Using Modifiers + description: | + Filters work on the row level—they allow you to return rows that + only match certain conditions without changing the shape of the rows. + Modifiers are everything that don't fit that definition—allowing you to + change the format of the response (e.g., returning a CSV string). + + Modifiers must be specified after filters. Some modifiers only apply for + queries that return rows (e.g., `select()` or `rpc()` on a function that + returns a table response). + + - id: limit + title: limit() + description: | + Limits the result with the specified count. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .limit(1); + ``` + - id: with-embedded-resources + name: With embedded resources + code: | + ```dart + final data = await supabase + .from('countries') + .select('name, cities(name)') + .eq('name', 'United States') + .limit(1, foreignTable: 'cities' ); + ``` + + - id: order + title: order() + description: | + Orders the result with the specified column. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .order('id', ascending: false ); + ``` + - id: with-embedded-resources + name: With embedded resources + code: | + ```dart + final data = await supabase + .from('countries') + .select('name, cities(name)') + .eq('name', 'United States') + .order('name', foreignTable: 'cities'); + ``` + + - id: range + title: range() + description: | + Limits the result to rows within the specified range, inclusive. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .range(0,3); + ``` + + - id: single + title: single() + description: | + Retrieves only one row from the result. Result must be one row (e.g. using limit), otherwise this will result in an error. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .single(); + ``` + + - id: using-filters + title: Using Filters + description: | + Filters allow you to only return rows that match certain conditions. + + Filters can be used on `select()`, `update()`, and `delete()` queries. + + If a Database function returns a table response, you can also apply filters. + examples: + - id: applying-filters + name: Applying Filters + description: | + Filters must be applied after any of `select()`, `update()`, `upsert()`, + `delete()`, and `rpc()` and before + [modifiers](/docs/reference/dart/using-modifiers). + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .eq('name', 'The Shire'); // Correct + + final data = await supabase + .from('cities') + .eq('name', 'The Shire') // Incorrect + .select('name, country_id'); + ``` + - id: chaining-filters + name: Chaining Filters + description: | + Filters must be applied after any of `select()`, `update()`, `upsert()`, + `delete()`, and `rpc()` and before + [modifiers](/docs/reference/dart/using-modifiers). + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .eq('name', 'The Shire'); // Correct + + final data = await supabase + .from('cities') + .eq('name', 'The Shire') // Incorrect + .select('name, country_id'); + ``` + - id: conditional-chaining + name: Conditional Chaining + description: | + Filters can be built up one step at a time and then executed. For example: + code: | + ```dart + final data = await supabase + .from('users') + .select() + .eq('address->postcode', 90210); + ``` + - id: filter-by-value-within-json-column + name: Filter by values within a JSON column + description: | + Filters can be built up one step at a time and then executed. For example: + data: + sql: | + ```sql + create table + users ( + id int8 primary key, + name text, + address jsonb + ); + + insert into + users (id, name, address) + values + (1, 'Michael', '{ "postcode": 90210 }'), + (2, 'Jane', null); + ``` + response: | + ```json + { + "data": [ + { + "id": 1, + "name": "Michael", + "address": { + "postcode": 90210 + } + } + ], + "status": 200, + "statusText": "OK" + } + ``` + code: | + ```dart + final data = await supabase + .from('users') + .select() + .eq('address->postcode', 90210); + ``` + - id: filter-foreign-tables + name: Filter Foreign Tables + code: | + ```dart + final data = await supabase + .from('countries') + .select(''' + name, + cities!inner ( + name + ) + ''') + .eq('cities.name', 'Bali'); + ``` + 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: | + ```json + { + "data": [ + { + "name": "Indonesia", + "cities": [ + { + "name": "Bali" + } + ] + } + ], + "status": 200, + "statusText": "OK" + } + ``` + - id: or + title: or() + description: | + Finds all rows satisfying at least one of the filters. + notes: | + - `.or()` expects you to use the raw [PostgREST syntax](https://postgrest.org/en/stable/api.html#horizontal-filtering-rows) for the filter names and values. + + ```dart + .or('id.in.(6,7),arraycol.cs.{"a","b"}') // Use Postgres list () and 'in' for in_ filter. Array {} and 'cs' for contains. + .or('id.in.(${mylist.join(',')}),arraycol.cs.{${mylistArray.join(',')}}') // You can insert a Dart list for list or array column. + .or('id.in.(${mylist.join(',')}),rangecol.cs.(${mylistRange.join(',')}]') // You can insert a Dart list for list or range column. + ``` + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .or('id.eq.20,id.eq.30'); + ``` + - id: use-or-with-and + name: Use `or` with `and` + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .or('id.gt.20,and(name.eq.New Zealand,name.eq.France)'); + ``` + + - id: not + title: not() + description: | + Finds all rows which doesn't satisfy the filter. + notes: | + - `.not()` expects you to use the raw [PostgREST syntax](https://postgrest.org/en/stable/api.html#horizontal-filtering-rows) for the filter names and values. + + ```dart + .not('name','eq','Paris') + .not('arraycol','cs','{"a","b"}') // Use Postgres array {} for array column and 'cs' for contains. + .not('rangecol','cs','(1,2]') // Use Postgres range syntax for range column. + .not('id','in','(6,7)') // Use Postgres list () and 'in' for in_ filter. + .not('id','in','(${mylist.join(',')})') // You can insert a Dart list array. + ``` + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .not('name', 'eq', 'Paris'); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .not('name', 'eq', 'Paris'); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .not('name', 'eq', 'Paris'); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities) + .not('name', 'eq', 'Paris'); + ``` + + - id: match + title: match() + description: | + Finds all rows whose columns match the specified `query` object. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .match({'name': 'Beijing', 'country_id': 156}); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .match({'name': 'Beijing', 'country_id': 156}); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .match({'name': 'Beijing', 'country_id': 156}); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities') + .match({'name': 'Beijing', 'country_id': 156}); + ``` + + - id: eq + title: eq() + description: | + Finds all rows whose value on the stated `column` exactly matches the specified `value`. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .eq('name', 'The shire'); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .eq('name', 'San Francisco'); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .eq('name', 'Mordor'); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities') + .eq('name', 'San Francisco'); + ``` + + - id: neq + title: neq() + description: | + Finds all rows whose value on the stated `column` doesn't match the specified `value`. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .neq('name', 'The shire'); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .neq('name', 'San Francisco'); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .neq('name', 'Mordor'); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities') + .neq('name', 'Lagos'); + ``` + + - id: gt + title: gt() + description: | + Finds all rows whose value on the stated `column` is greater than the specified `value`. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .gt('country_id', 250); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .gt('country_id', 250); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .gt('country_id', 250); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities') + .gt('country_id', 250); + ``` + + - id: gte + title: gte() + description: | + Finds all rows whose value on the stated `column` is greater than or equal to the specified `value`. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .gte('country_id', 250); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .gte('country_id', 250); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .gte('country_id', 250); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities') + .gte('country_id', 250); + ``` + + - id: lt + title: lt() + description: | + Finds all rows whose value on the stated `column` is less than the specified `value`. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .lt('country_id', 250); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .lt('country_id', 250); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .lt('country_id', 250); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities') + .lt('country_id', 250); + ``` + + - id: lte + title: lte() + description: | + Finds all rows whose value on the stated `column` is less than or equal to the specified `value`. + $ref: '@supabase/postgrest-js.PostgrestFilterBuilder.lte' + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .lte('country_id', 250); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .lte('country_id', 250); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .lte('country_id', 250); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities') + .lte('country_id', 250); + ``` + + - id: like + title: like() + description: | + Finds all rows whose value in the stated `column` matches the supplied `pattern` (case sensitive). + $ref: '@supabase/postgrest-js.PostgrestFilterBuilder.lte' + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .like('name', '%la%'); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .like('name', '%la%'); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .like('name', '%la%'); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities') + .like('name', '%la%'); + ``` + + - id: ilike + title: ilike() + description: | + Finds all rows whose value in the stated `column` matches the supplied `pattern` (case insensitive). + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .ilike('name', '%la%'); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .ilike('name', '%la%'); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .ilike('name', '%la%'); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities') + .ilike('name', '%la%'); + ``` + + - id: is + title: is_() + description: | + A check for exact equality (null, true, false), finds all rows whose value on the stated `column` exactly match the specified `value`. + + `is_` and `in_` filter methods are suffixed with `_` to avoid collisions with reserved keywords. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .is_('name', null); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .is_('name', null); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .is_('name', null); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities') + .is_('name', null); + ``` + + - id: in + title: in_() + description: | + Finds all rows whose value on the stated `column` is found on the specified `values`. + + `is_` and `in_` filter methods are suffixed with `_` to avoid collisions with reserved keywords. + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .in_('name', ['Rio de Janeiro', 'San Francisco']); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .in_('name', ['Rio de Janeiro', 'San Francisco']); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .in_('name', ['Rio de Janeiro', 'San Francisco']); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities') + .in_('name', ['Rio de Janeiro', 'San Francisco']); + ``` + + - id: contains + title: contains() + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('countries') + .select('name, id, main_exports') + .contains('main_exports', ['oil']); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('countries') + .update({ 'name': 'Mordor' }) + .contains('main_exports', ['oil']); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('countries') + .delete() + .contains('main_exports', ['oil']); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_countries') + .contains('main_exports', ['oil']); + ``` + + - id: contained-by + title: containedBy() + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('countries') + .select('name, id, main_exports') + .containedBy('main_exports', ['cars', 'food', 'machine']); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('countries') + .update({ 'name': 'Mordor' }) + .containedBy('main_exports', ['orks', 'surveillance', 'evil']); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('countries') + .delete() + .containedBy('main_exports', ['cars', 'food', 'machine']); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_countries') + .containedBy('main_exports', ['cars', 'food', 'machine']); + ``` + + - id: range-lt + title: rangeLt() + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('countries') + .select('name, id, population_range_millions') + .rangeLt('population_range_millions', '[150, 250]'); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('countries') + .update({ 'name': 'Mordor' }) + .rangeLt('population_range_millions', '[150, 250]'); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('countries') + .delete() + .rangeLt('population_range_millions', '[150, 250]'); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_countries') + .rangeLt('population_range_millions', '[150, 250]'); + ``` + + - id: range-gt + title: rangeGt() + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('countries') + .select('name, id, population_range_millions') + .rangeGt('population_range_millions', '[150, 250]'); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('countries') + .update({ 'name': 'Mordor' }) + .rangeGt('population_range_millions', '[150, 250]'); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('countries') + .delete() + .rangeGt('population_range_millions', '[150, 250]'); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_countries') + .rangeGt('population_range_millions', '[150, 250]'); + ``` + + - id: range-gte + title: rangeGte() + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('countries') + .select('name, id, population_range_millions') + .rangeGte('population_range_millions', '[150, 250]'); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('countries') + .update({ 'name': 'Mordor' }) + .rangeGte('population_range_millions', '[150, 250]'); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('countries') + .delete() + .rangeGte('population_range_millions', '[150, 250]'); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_countries') + .rangeGte('population_range_millions', '[150, 250]'); + ``` + + - id: range-lte + title: rangeLte() + $ref: '@supabase/postgrest-js.PostgrestFilterBuilder.rangeLte' + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('countries') + .select('name, id, population_range_millions') + .rangeLte('population_range_millions', '[150, 250]'); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('countries') + .update({ 'name': 'Mordor' }) + .rangeLte('population_range_millions', '[150, 250]'); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('countries') + .delete() + .rangeLte('population_range_millions', '[150, 250]'); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_countries') + .rangeLte('population_range_millions', [150, 250]); + ``` + + - id: range-adjacent + title: rangeAdjacent() + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('countries') + .select('name, id, population_range_millions') + .rangeAdjacent('population_range_millions', '[70, 185]'); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('countries') + .update({ 'name': 'Mordor' }) + .rangeAdjacent('population_range_millions', '[70, 185]'); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('countries') + .delete() + .rangeAdjacent('population_range_millions', '[70, 185]'); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_countries') + .rangeAdjacent('population_range_millions', '[70, 185]'); + ``` + + - id: overlaps + title: overlaps() + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('countries') + .select('name, id, main_exports') + .overlaps('main_exports', ['computers', 'minerals']); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('countries') + .update({ 'name': 'Mordor' }) + .overlaps('main_exports', ['computers', 'minerals']); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('countries') + .delete() + .overlaps('main_exports', ['computers', 'minerals']); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_countries') + .overlaps('main_exports', ['computers', 'minerals']); + ``` + + - id: text-search + title: textSearch() + description: | + Finds all rows whose tsvector value on the stated `column` matches to_tsquery(query). + examples: + - id: text-search + name: Text search + code: | + ```dart + final data = await supabase + .from('quotes') + .select('catchphrase') + .textSearch('catchphrase', "'fat' & 'cat'", + config: 'english' + ); + ``` + - id: basic-normalization + name: Basic normalization + description: Uses PostgreSQL's `plainto_tsquery` function. + code: | + ```dart + final data = await supabase + .from('quotes') + .select('catchphrase') + .textSearch('catchphrase', "'fat' & 'cat'", + type: TextSearchType.plain, + config: 'english' + ); + ``` + - id: full-normalization + name: Full normalization + description: Uses PostgreSQL's `phraseto_tsquery` function. + code: | + ```dart + final data = await supabase + .from('quotes') + .select('catchphrase') + .textSearch('catchphrase', "'fat' & 'cat'", + type: TextSearchType.phrase, + config: 'english' + ); + ``` + - id: web-search + name: Websearch + description: | + Uses PostgreSQL's `websearch_to_tsquery` function. + This function will never raise syntax errors, which makes it possible to use raw user-supplied input for search, and can be used + with advanced operators. + + - `unquoted text`: text not inside quote marks will be converted to terms separated by & operators, as if processed by plainto_tsquery. + - `"quoted text"`: text inside quote marks will be converted to terms separated by <-> operators, as if processed by phraseto_tsquery. + - `OR`: the word “or” will be converted to the | operator. + - `-`: a dash will be converted to the ! operator. + + code: | + ```dart + final data = await supabase + .from('quotes') + .select('catchphrase') + .textSearch('catchphrase', "'fat or cat'", + type: TextSearchType.websearch, + config: 'english' + ); + ``` + + - id: filter + title: filter() + description: | + Finds all rows whose `column` satisfies the filter. + notes: | + - `.filter()` expects you to use the raw [PostgREST syntax](https://postgrest.org/en/stable/api.html#horizontal-filtering-rows) for the filter names and values, so it should only be used as an escape hatch in case other filters don't work. + ```dart + .filter('arraycol','cs','{"a","b"}') // Use Postgres array {} and 'cs' for contains. + .filter('rangecol','cs','(1,2]') // Use Postgres range syntax for range column. + .filter('id','in','(6,7)') // Use Postgres list () and 'in' for in_ filter. + .filter('id','cs','{${mylist.join(',')}}') // You can insert a Dart array list. + ``` + examples: + - id: with-select + name: With `select()` + isSpotlight: true + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, country_id') + .filter('name', 'in', '("Paris","Tokyo")'); + ``` + - id: with-update + name: With `update()` + code: | + ```dart + final data = await supabase + .from('cities') + .update({ 'name': 'Mordor' }) + .filter('name', 'in', '("Paris","Tokyo")'); + ``` + - id: with-delete + name: With `delete()` + code: | + ```dart + final data = await supabase + .from('cities') + .delete() + .filter('name', 'in', '("Paris","Tokyo")'); + ``` + - id: with-rpc + name: With `rpc()` + code: | + ```dart + // Only valid if the Stored Procedure returns a table type. + final data = await supabase + .rpc('echo_all_cities') + .filter('name', 'in', '("Paris","Tokyo")'); + ``` + - id: filter-embedded-resources + name: Filter embedded resources + code: | + ```dart + final data = await supabase + .from('cities') + .select('name, countries ( name )') + .filter('countries.name', 'in', '("France","Japan")'); + ``` From 05b7028103a72e0b1a9bf51079be78073056f4a9 Mon Sep 17 00:00:00 2001 From: Joseph Schultz Date: Fri, 23 Dec 2022 18:18:30 -0600 Subject: [PATCH 02/64] Finish docs with available functionality in c# client --- .../{initialization.mdx => initializing.mdx} | 6 +- spec/common-client-libs-sections.json | 12 +- spec/supabase_csharp_v0.yml | 1732 +++++------------ 3 files changed, 515 insertions(+), 1235 deletions(-) rename apps/docs/docs/ref/csharp/{initialization.mdx => initializing.mdx} (96%) diff --git a/apps/docs/docs/ref/csharp/initialization.mdx b/apps/docs/docs/ref/csharp/initializing.mdx similarity index 96% rename from apps/docs/docs/ref/csharp/initialization.mdx rename to apps/docs/docs/ref/csharp/initializing.mdx index 6f253ddf687..ca29a5605a3 100644 --- a/apps/docs/docs/ref/csharp/initialization.mdx +++ b/apps/docs/docs/ref/csharp/initializing.mdx @@ -1,7 +1,7 @@ --- -id: initialization -title: 'Initialization' -slug: initialization +id: initializing +title: 'Initializing' +slug: initializing custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml --- diff --git a/spec/common-client-libs-sections.json b/spec/common-client-libs-sections.json index 9478de69da0..60b6e7716d3 100644 --- a/spec/common-client-libs-sections.json +++ b/spec/common-client-libs-sections.json @@ -17,7 +17,8 @@ "title": "Initializing", "id": "initializing", "slug": "initializing", - "type": "function" + "type": "markdown", + "libs": ["csharp"] }, { "title": "Typescript Support", @@ -342,6 +343,15 @@ "type": "function", "libs": ["js", "dart", "dart_v0", "csharp"] }, + { + "id": "offset", + "title": "Offset the Query", + "slug": "offset", + "product":"database", + "parent":"modifiers", + "type": "function", + "libs": ["csharp"] + }, { "id": "abort-signal", "title": "Set an abort signal", diff --git a/spec/supabase_csharp_v0.yml b/spec/supabase_csharp_v0.yml index f9e6c805d80..6a881cef0b9 100644 --- a/spec/supabase_csharp_v0.yml +++ b/spec/supabase_csharp_v0.yml @@ -418,7 +418,7 @@ functions: - id: fetch-inserted-data name: Fetch inserted record code: | - ```dart + ```c# var result = await supabase .From() .Insert(models, new QueryOptions { Returning = ReturnType.Representation }); @@ -508,7 +508,7 @@ functions: Performs a DELETE on the table. title: 'Delete data: Delete()' notes: | - - `delete()` should always be combined with [Filters](/docs/reference/csharp/using-filters) to target the item(s) you wish to delete. + - `Delete()` should always be combined with [Filters](/docs/reference/csharp/using-filters) to target the item(s) you wish to delete. examples: - id: delete-records name: Delete records @@ -522,7 +522,7 @@ functions: ``` - id: rpc - title: 'Stored Procedures: rpc()' + title: 'Stored Procedures: Rpc()' description: | You can call stored procedures as a "Remote Procedure Call". @@ -534,62 +534,55 @@ functions: isSpotlight: true description: This is an example invoking a stored procedure. code: | - ```dart - final data = await supabase - .rpc('hello_world'); + ```c# + await supabase.Rpc("hello_world", null); ``` - id: with-parameters name: With Parameters code: | - ```dart - final data = await supabase - .rpc('echo_city', params: { 'name': 'The Shire' }); + ```c# + await supabase.Rpc("hello_world", new Dictionary { { "foo", "bar"} }); ``` - id: subscribe description: | Subscribe to realtime changes in your database. - title: 'on().subscribe()' + title: 'From().On()' notes: | - Realtime is disabled by default for new Projects for better database performance and security. You can turn it on by [managing replication](/docs/guides/api#managing-realtime). - If you want to receive the "previous" data for updates and deletes, you will need to set `REPLICA IDENTITY` to `FULL`, like this: `ALTER TABLE your_table REPLICA IDENTITY FULL;` examples: - - id: listen-to-all-database-changes - name: Listen to all database changes - isSpotlight: true - code: | - ```dart - supabase.channel('*').on( - RealtimeListenTypes.postgresChanges, - ChannelFilter(event: '*', schema: '*'), - (payload, [ref]) { - print('Change received: ${payload.toString()}'); - }, - ).subscribe(); - ``` - id: listening-to-a-specific-table name: Listening to a specific table + isSpotlight: true code: | - ```dart - supabase.channel('public:countries').on( - RealtimeListenTypes.postgresChanges, - ChannelFilter(event: '*', schema: 'public', table: 'countries'), - (payload, [ref]) { - print('Change received: ${payload.toString()}'); - }, - ).subscribe(); + ```c# + await supabase.From().On(ChannelEventType.All, (sender, args) => + { + Debug.WriteLine(args.Response.Payload); + }); + ``` + - id: listen-to-all-database-changes + name: Listen to all database changes + code: | + ```c# + var channel = supabase.Realtime.Channel("realtime", "public", "*"); + + channel.OnMessage += (sender, args) => + { + Debug.WriteLine(args.Response.Payload); + }; + + await channel.Subscribe(); ``` - id: listening-to-inserts name: Listening to inserts code: | - ```dart - supabase.channel('public:countries').on( - RealtimeListenTypes.postgresChanges, - ChannelFilter(event: 'INSERT', schema: 'public', table: 'countries'), - (payload, [ref]) { - print('Change received: ${payload.toString()}'); - }, - ).subscribe(); + ```c# + await supabase.From().On(ChannelEventType.Insert, (sender, args) => + { + Debug.WriteLine(args.Response.Payload); + }); ``` - id: listening-to-updates name: Listening to updates @@ -601,14 +594,11 @@ functions: alter table "your_table" replica identity full; ``` code: | - ```dart - supabase.channel('public:countries').on( - RealtimeListenTypes.postgresChanges, - ChannelFilter(event: 'UPDATE', schema: 'public', table: 'countries'), - (payload, [ref]) { - print('Change received: ${payload.toString()}'); - }, - ).subscribe(); + ```c# + await supabase.From().On(ChannelEventType.Update, (sender, args) => + { + Debug.WriteLine(args.Response.Payload); + }); ``` - id: listening-to-deletes name: Listening to deletes @@ -620,51 +610,31 @@ functions: alter table "your_table" replica identity full; ``` code: | - ```dart - supabase.channel('public:countries').on( - RealtimeListenTypes.postgresChanges, - ChannelFilter(event: 'DELETE', schema: 'public', table: 'countries'), - (payload, [ref]) { - print('Change received: ${payload.toString()}'); - }, - ).subscribe(); - ``` - - id: listening-to-multiple-events - name: Listening to multiple events - description: You can chain listeners if you want to listen to multiple events for each table. - code: | - ```dart - supabase.channel('public:countries').on(RealtimeListenTypes.postgresChanges, - ChannelFilter(event: 'INSERT', schema: 'public', table: 'countries'), - (payload, [ref]) { - print('Change received: ${payload.toString()}'); - }).on(RealtimeListenTypes.postgresChanges, - ChannelFilter(event: 'DELETE', schema: 'public', table: 'countries'), - (payload, [ref]) { - print('Change received: ${payload.toString()}'); - }).subscribe(); + ```c# + await supabase.From().On(ChannelEventType.Delete, (sender, args) => + { + Debug.WriteLine(args.Response.Payload); + }); ``` - id: listening-to-row-level-changes name: Listening to row level changes description: You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match. code: | - ```dart - supabase.channel('public:countries:id=eq.200').on( - RealtimeListenTypes.postgresChanges, - ChannelFilter( - event: 'UPDATE', - schema: 'public', - table: 'countries', - filter: 'id=eq.200', - ), (payload, [ref]) { - print('Change received: ${payload.toString()}'); - }).subscribe(); + ```c# + var channel = supabase.Realtime.Channel("realtime", "public", "countries", "id", "id=eq.200"); + + channel.OnMessage += (sender, args) => + { + Debug.WriteLine(args.Response.Payload); + }; + + await channel.Subscribe(); ``` - id: remove-channel description: | Unsubscribes and removes Realtime channel from Realtime client. - title: 'removeChannel()' + title: 'Unsubscribe()' notes: | - Removing a channel is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed. examples: @@ -672,130 +642,120 @@ functions: name: Remove a channel isSpotlight: true code: | - ```dart - final status = await supabase.removeChannel(channel); - ``` + ```c# + var channel = await supabase.From().On(ChannelEventType.All, (sender, args) => { }); + channel.Unsubscribe(); - - id: remove-all-channels - description: | - Unsubscribes and removes all Realtime channels from Realtime client. - title: 'removeAllChannels()' - notes: | - - Removing channels is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed. - examples: - - id: remove-all-channels - name: Remove all channels - isSpotlight: true - code: | - ```dart - final statuses = await supabase.removeAllChannels(); + // OR + + var channel = supabase.Realtime.Channel("realtime", "public", "*"); + channel.Unsubscribe() ``` - id: get-channels description: | Returns all Realtime channels. - title: 'getChannels()' + title: 'Subscriptions' examples: - id: get-all-channels name: Get all channels isSpotlight: true code: | - ```dart - final channels = supabase.getChannels(); + ```c# + var channels = supabase.Realtime.Subscriptions; ``` - - id: stream - description: | - Notifies of data at the queried table. - title: 'stream()' - notes: | - - `stream()` will emit the initial data as well as any further change on the database as `Stream` of `List>` by combining Postgrest and Realtime. - - Takes a list of primary key columns as its argument. - examples: - - id: listening-to-a-specific-table - name: Listening to a specific table - isSpotlight: true - code: | - ```dart - supabase.from('countries') - .stream(primaryKey: ['id']) - .listen((List> data) { - // Do something awesome with the data - }); - ``` - - id: listening-to-a-specific-rows-within-a-table - name: Listening to a specific rows within a table - description: | - You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match. - This syntax is the as how you can filter data in Realtime - code: | - ```dart - supabase.from('countries') - .stream(primaryKey: ['id']) - .eq('id', '120') - .listen((List> data) { - // Do something awesome with the data - }); - ``` - - id: with-order - name: With `order()` - code: | - ```dart - supabase.from('countries') - .stream(primaryKey: ['id']) - .order('name', ascending: true) - .listen((List> data) { - // Do something awesome with the data - }); - ``` - - id: with-limit - name: With `limit()` - code: | - ```dart - supabase.from('countries') - .stream(primaryKey: ['id']) - .order('name', ascending: true) - .limit(10) - .listen((List> data) { - // Do something awesome with the data - }); - ``` - - id: using-stream-with-stream-builder - name: Using `stream()` with `StreamBuilder` - description: | - When using `stream()` with a `StreamBuilder` within your Flutter application, make sure to store your stream in a variable to prevent refetching upon rebuilding. - code: | - ```dart - final supabase = Supabase.instance.client; + # - id: stream + # description: | + # Notifies of data at the queried table. + # title: 'stream()' + # notes: | + # - `stream()` will emit the initial data as well as any further change on the database as `Stream` of `List>` by combining Postgrest and Realtime. + # - Takes a list of primary key columns as its argument. + # examples: + # - id: listening-to-a-specific-table + # name: Listening to a specific table + # isSpotlight: true + # code: | + # ```dart + # supabase.from('countries') + # .stream(primaryKey: ['id']) + # .listen((List> data) { + # // Do something awesome with the data + # }); + # ``` + # - id: listening-to-a-specific-rows-within-a-table + # name: Listening to a specific rows within a table + # description: | + # You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match. + # This syntax is the as how you can filter data in Realtime + # code: | + # ```dart + # supabase.from('countries') + # .stream(primaryKey: ['id']) + # .eq('id', '120') + # .listen((List> data) { + # // Do something awesome with the data + # }); + # ``` + # - id: with-order + # name: With `order()` + # code: | + # ```dart + # supabase.from('countries') + # .stream(primaryKey: ['id']) + # .order('name', ascending: true) + # .listen((List> data) { + # // Do something awesome with the data + # }); + # ``` + # - id: with-limit + # name: With `limit()` + # code: | + # ```dart + # supabase.from('countries') + # .stream(primaryKey: ['id']) + # .order('name', ascending: true) + # .limit(10) + # .listen((List> data) { + # // Do something awesome with the data + # }); + # ``` + # - id: using-stream-with-stream-builder + # name: Using `stream()` with `StreamBuilder` + # description: | + # When using `stream()` with a `StreamBuilder` within your Flutter application, make sure to store your stream in a variable to prevent refetching upon rebuilding. + # code: | + # ```dart + # final supabase = Supabase.instance.client; - class MyWidget extends StatefulWidget { - const MyWidget({Key? key}) : super(key: key); + # class MyWidget extends StatefulWidget { + # const MyWidget({Key? key}) : super(key: key); - @override - State createState() => _MyWidgetState(); - } + # @override + # State createState() => _MyWidgetState(); + # } - class _MyWidgetState extends State { - // Persist the stream in a local variable to prevent refetching upon rebuilds - final _stream = supabase.from('countries').stream(primaryKey: ['id']); + # class _MyWidgetState extends State { + # // Persist the stream in a local variable to prevent refetching upon rebuilds + # final _stream = supabase.from('countries').stream(primaryKey: ['id']); - @override - Widget build(BuildContext context) { - return StreamBuilder( - stream: _stream, - builder: (context, snapshot) { - // Return your widget with the data from the snapshot - }, - ); - } - } - ``` + # @override + # Widget build(BuildContext context) { + # return StreamBuilder( + # stream: _stream, + # builder: (context, snapshot) { + # // Return your widget with the data from the snapshot + # }, + # ); + # } + # } + # ``` - id: list-buckets description: | Retrieves the details of all Storage buckets within an existing product. - title: 'listBuckets()' - $ref: '@supabase/storage-js.packages/StorageBucketApi.default.listBuckets' + title: 'ListBuckets()' notes: | - Policy permissions required: - `buckets` permissions: `select` @@ -805,17 +765,14 @@ functions: name: List buckets isSpotlight: true code: | - ```dart - final List buckets = await supabase - .storage - .listBuckets(); + ```c# + var buckets = await supabase.Storage.ListBuckets(); ``` - id: get-bucket description: | Retrieves the details of an existing Storage bucket. - title: 'getBucket()' - $ref: '@supabase/storage-js.packages/StorageBucketApi.default.getBucket' + title: 'GetBucket()' notes: | - Policy permissions required: - `buckets` permissions: `select` @@ -825,16 +782,14 @@ functions: name: Get bucket isSpotlight: true code: | - ```dart - final Bucket bucket = await supabase - .storage - .getBucket('avatars'); + ```c# + var bucket = await supabase.Storage.GetBucket("avatars"); ``` - id: create-bucket description: | Creates a new Storage bucket - title: 'createBucket()' + title: 'CreateBucket()' notes: | - Policy permissions required: - `buckets` permissions: `insert` @@ -844,16 +799,14 @@ functions: name: Create bucket isSpotlight: true code: | - ```dart - final String bucketId = await supabase - .storage - .createBucket('avatars'); + ```c# + var bucket = await supabase.Storage.CreateBucket("avatars"); ``` - id: empty-bucket description: | Removes all objects inside a single bucket. - title: 'emptyBucket()' + title: 'EmptyBucket()' notes: | - Policy permissions required: - `buckets` permissions: `select` @@ -863,15 +816,13 @@ functions: name: Empty bucket isSpotlight: true code: | - ```dart - final String result = await supabase - .storage - .emptyBucket('avatars'); + ```c# + var bucket = await supabase.Storage.EmptyBucket("avatars"); ``` - id: update-bucket description: | Updates a new Storage bucket - title: 'updateBucket()' + title: 'UpdateBucket()' notes: | - Policy permissions required: - `buckets` permissions: `update` @@ -881,16 +832,14 @@ functions: name: Update bucket isSpotlight: true code: | - ```dart - final res = await supabase - .storage - .updateBucket('avatars', const BucketOptions(public: false)); + ```c# + var bucket = await supabase.Storage.UpdateBucket("avatars", new BucketUpsertOptions { Public = false }); ``` - id: delete-bucket description: | Deletes an existing bucket. A bucket can't be deleted with existing objects inside it. You must first `empty()` the bucket. - title: 'deleteBucket()' + title: 'DeleteBucket()' notes: | - Policy permissions required: - `buckets` permissions: `select` and `delete` @@ -901,16 +850,13 @@ functions: isSpotlight: true code: | ```dart - final String result = await supabase - .storage - .deleteBucket('avatars'); + var result = await supabase.Storage.DeleteBucket("avatars"); ``` - id: from-upload description: | Uploads a file to an existing bucket. - title: 'from.upload()' - $ref: '@supabase/storage-js.packages/StorageFileApi.default.upload' + title: 'From().Upload()' notes: | - Policy permissions required: - `buckets` permissions: none @@ -920,19 +866,28 @@ functions: name: Upload file isSpotlight: true code: | - ```dart - final avatarFile = File('path/to/file'); - final String path = await supabase.storage.from('avatars').upload( - 'public/avatar1.png', - avatarFile, - fileOptions: const FileOptions(cacheControl: '3600', upsert: false), - ); + ```c# + var imagePath = Path.Combine("Assets", "fancy-avatar.png"); + + await supabase.Storage + .From("avatars") + .Upload(imagePath, "fancy-avatar.png", new FileOptions { CacheControl = "3600", Upsert = false }); + ``` + - id: upload-file-with-progress + name: Upload file with Progress + code: | + ```c# + var imagePath = Path.Combine("Assets", "fancy-avatar.png"); + + await supabase.Storage + .From("avatars") + .Upload(imagePath, "fancy-avatar.png", onProgress: (sender, progress) => Debug.WriteLine($"{progress}%")); ``` - id: from-update description: | Replaces an existing file at the specified path with a new one. - title: 'from.update()' + title: 'From().update()' notes: | - Policy permissions required: - `buckets` permissions: none @@ -942,19 +897,15 @@ functions: name: Update file isSpotlight: true code: | - ```dart - final avatarFile = File('path/to/local/file'); - final String path = await supabase.storage.from('avatars').update( - 'public/avatar1.png', - avatarFile, - fileOptions: const FileOptions(cacheControl: '3600', upsert: false), - ); + ```c# + var imagePath = Path.Combine("Assets", "fancy-avatar.png"); + await supabase.Storage.From("avatars").Update(imagePath, "fancy-avatar.png"); ``` - id: from-move description: | Moves an existing file, optionally renaming it at the same time. - title: 'from.move()' + title: 'From().Move()' notes: | - Policy permissions required: - `buckets` permissions: none @@ -964,17 +915,15 @@ functions: name: Move file isSpotlight: true code: | - ```dart - final String result = await supabase - .storage - .from('avatars') - .move('public/avatar1.png', 'private/avatar2.png'); + ```c# + await supabase.Storage.From("avatars") + .Move("public/fancy-avatar.png", "private/fancy-avatar.png"); ``` - id: from-create-signed-url description: | Create signed url to download file without requiring permissions. This URL can be valid for a set number of seconds. - title: 'from.createSignedUrl()' + title: 'From().CreateSignedUrl()' notes: | - Policy permissions required: - `buckets` permissions: none @@ -984,27 +933,8 @@ functions: name: Create Signed URL isSpotlight: true code: | - ```dart - final String signedUrl = await supabase - .storage - .from('avatars') - .createSignedUrl('avatar1.png', 60); - ``` - - id: create-signed-url-with-transform - name: With transform - code: | - ```dart - final String signedUrl = await supabase - .storage - .from('avatars') - .createSignedUrl( - 'avatar1.png', - 60, - transform: TransformOptions( - width: 200, - height: 200, - ), - ); + ```c# + var url = await supabase.Storage.From("avatars").CreateSignedUrl("public/fancy-avatar.png", 60); ``` - id: from-get-public-url @@ -1012,7 +942,7 @@ functions: Retrieve URLs for assets in public buckets title: 'from.getPublicUrl()' notes: | - - The bucket needs to be set to public, either via [updateBucket()](/docs/reference/javascript/storage-updatebucket) or by going to Storage on [app.supabase.com](https://app.supabase.com), clicking the overflow menu on a bucket and choosing "Make public" + - The bucket needs to be set to public, either via [UpdateBucket()](/docs/reference/csharp/storage-updatebucket) or by going to Storage on [app.supabase.com](https://app.supabase.com), clicking the overflow menu on a bucket and choosing "Make public" - Policy permissions required: - `buckets` permissions: none - `objects` permissions: none @@ -1021,33 +951,14 @@ functions: name: Returns the URL for an asset in a public bucket isSpotlight: true code: | - ```dart - final String publicUrl = supabase - .storage - .from('public-bucket') - .getPublicUrl('avatar1.png'); - ``` - - id: returns-the-url-for-an-asset-in-a-public-bucket-with-transform - name: With transform - isSpotlight: true - code: | - ```dart - final String publicUrl = await supabase - .storage - .from('public-bucket') - .getPublicUrl( - 'avatar1.png', - transform: TransformOptions( - width: 200, - height: 200, - ), - ); + ```c# + var publicUrl = supabase.Storage.From("avatars").GetPublicUrl("public/fancy-avatar.png"); ``` - id: from-download description: | Downloads a file. - title: 'from.download()' + title: 'From().Download()' notes: | - Policy permissions required: - `buckets` permissions: none @@ -1057,33 +968,22 @@ functions: name: Download file isSpotlight: true code: | - ```dart - final Uint8List file = await supabase - .storage - .from('avatars') - .download('avatar1.png'); + ```c# + var bytes = await supabase.Storage.From("avatars").Download("public/fancy-avatar.png"); ``` - - id: download-file-with-transform - name: With transform - isSpotlight: true + - id: download-file-with-progress + name: Download file with Progress code: | - ```dart - final Uint8List file = await supabase - .storage - .from('avatars') - .download( - 'avatar1.png', - transform: TransformOptions( - width: 200, - height: 200, - ), - ); + ```c# + var bytes = await supabase.Storage + .From("avatars") + .Download("public/fancy-avatar.png", (sender, progress) => Debug.WriteLine($"{progress}%")); ``` - id: from-remove description: | Deletes files within the same bucket - title: 'from.remove()' + title: 'From().Remove()' notes: | - Policy permissions required: - `buckets` permissions: none @@ -1093,17 +993,14 @@ functions: name: Delete file isSpotlight: true code: | - ```dart - final List objects = await supabase - .storage - .from('avatars') - .remove(['avatar1.png']); + ```c# + await supabase.Storage.From("avatars").Remove(new List { "public/fancy-avatar.png" }); ``` - id: from-list description: | Lists all the files within a bucket. - title: 'from.list()' + title: 'From().list()' notes: | - Policy permissions required: - `buckets` permissions: none @@ -1113,11 +1010,8 @@ functions: name: List files in a bucket isSpotlight: true code: | - ```dart - final List objects = await supabase - .storage - .from('avatars') - .list(); + ```c# + var objects = await supabase.Storage.From("avatars").List(); ``` - id: using-modifiers title: Using Modifiers @@ -1125,94 +1019,105 @@ functions: Filters work on the row level—they allow you to return rows that only match certain conditions without changing the shape of the rows. Modifiers are everything that don't fit that definition—allowing you to - change the format of the response (e.g., returning a CSV string). - - Modifiers must be specified after filters. Some modifiers only apply for - queries that return rows (e.g., `select()` or `rpc()` on a function that - returns a table response). + change the format of the response (e.g., setting a limit or offset). - id: limit - title: limit() + title: Limit() description: | Limits the result with the specified count. examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .limit(1); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Limit(10) + .Get(); ``` - id: with-embedded-resources name: With embedded resources code: | - ```dart - final data = await supabase - .from('countries') - .select('name, cities(name)') - .eq('name', 'United States') - .limit(1, foreignTable: 'cities' ); + ```c# + var result = await supabase.From() + .Select("name, cities(name)") + .Filter("name", Operator.Equals, "United States") + .Limit(10, "cities") + .Get(); ``` - id: order - title: order() + title: Order() description: | Orders the result with the specified column. examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .order('id', ascending: false ); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Order("id", Ordering.Descending) + .Get(); ``` - id: with-embedded-resources name: With embedded resources code: | - ```dart - final data = await supabase - .from('countries') - .select('name, cities(name)') - .eq('name', 'United States') - .order('name', foreignTable: 'cities'); + ```c# + var result = await supabase.From() + .Select("name, cities(name)") + .Filter("name", Operator.Equals, "United States") + .Order("cities", "name", Ordering.Descending) + .Get(); ``` - id: range - title: range() + title: Range() description: | Limits the result to rows within the specified range, inclusive. examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .range(0,3); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Range(0, 3) + .Get(); + ``` + + - id: offset + title: Offset() + description: | + Specifies the offset of the queried rows to be returned (useful in pagination) + examples: + - id: with-select + name: With `Select()` + isSpotlight: true + code: | + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Offset(25) + .Get(); ``` - id: single - title: single() + title: Single() description: | Retrieves only one row from the result. Result must be one row (e.g. using limit), otherwise this will result in an error. examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .single(); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Single(); ``` - id: using-filters @@ -1220,61 +1125,25 @@ functions: description: | Filters allow you to only return rows that match certain conditions. - Filters can be used on `select()`, `update()`, and `delete()` queries. + Filters can be used on `Select()`, `update()`, and `Delete()` queries. If a Database function returns a table response, you can also apply filters. examples: - id: applying-filters name: Applying Filters description: | - Filters must be applied after any of `select()`, `update()`, `upsert()`, - `delete()`, and `rpc()` and before - [modifiers](/docs/reference/dart/using-modifiers). + Filters must be applied after any of `Select()`, `update()`, `upsert()`, + `Delete()`, and `rpc()` and before + [modifiers](/docs/reference/csharp/using-modifiers). code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .eq('name', 'The Shire'); // Correct - - final data = await supabase - .from('cities') - .eq('name', 'The Shire') // Incorrect - .select('name, country_id'); - ``` - - id: chaining-filters - name: Chaining Filters - description: | - Filters must be applied after any of `select()`, `update()`, `upsert()`, - `delete()`, and `rpc()` and before - [modifiers](/docs/reference/dart/using-modifiers). - code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .eq('name', 'The Shire'); // Correct - - final data = await supabase - .from('cities') - .eq('name', 'The Shire') // Incorrect - .select('name, country_id'); - ``` - - id: conditional-chaining - name: Conditional Chaining - description: | - Filters can be built up one step at a time and then executed. For example: - code: | - ```dart - final data = await supabase - .from('users') - .select() - .eq('address->postcode', 90210); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Filter("name", Operator.Equals, "The Shire") + .Single(); ``` - id: filter-by-value-within-json-column name: Filter by values within a JSON column - description: | - Filters can be built up one step at a time and then executed. For example: data: sql: | ```sql @@ -1308,25 +1177,20 @@ functions: } ``` code: | - ```dart - final data = await supabase - .from('users') - .select() - .eq('address->postcode', 90210); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Filter("address->postcode", Operator.Equals, 90210) + .Get(); ``` - id: filter-foreign-tables name: Filter Foreign Tables code: | - ```dart - final data = await supabase - .from('countries') - .select(''' - name, - cities!inner ( - name - ) - ''') - .eq('cities.name', 'Bali'); + ```c# + var results = await supabase.From() + .Select("name, cities!inner(name)") + .Filter("cities.name", Operator.Equals, "Bali") + .Get(); ``` data: sql: | @@ -1369,940 +1233,409 @@ functions: } ``` - id: or - title: or() + title: Or() description: | Finds all rows satisfying at least one of the filters. - notes: | - - `.or()` expects you to use the raw [PostgREST syntax](https://postgrest.org/en/stable/api.html#horizontal-filtering-rows) for the filter names and values. - - ```dart - .or('id.in.(6,7),arraycol.cs.{"a","b"}') // Use Postgres list () and 'in' for in_ filter. Array {} and 'cs' for contains. - .or('id.in.(${mylist.join(',')}),arraycol.cs.{${mylistArray.join(',')}}') // You can insert a Dart list for list or array column. - .or('id.in.(${mylist.join(',')}),rangecol.cs.(${mylistRange.join(',')}]') // You can insert a Dart list for list or range column. - ``` examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .or('id.eq.20,id.eq.30'); + ```c# + var filters = new List + { + new QueryFilter("id", Operator.Equals, 20), + new QueryFilter("id", Operator.Equals, 30) + }; + + var result = await supabase.From() + .Or(filters) + .Get(); ``` - id: use-or-with-and name: Use `or` with `and` code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .or('id.gt.20,and(name.eq.New Zealand,name.eq.France)'); + ```c# + var filters = new List + { + new QueryFilter("id", Operator.Equals, 20), + new QueryFilter("id", Operator.Equals, 30), + new QueryFilter(Operator.And, new List + { + new QueryFilter("name", Operator.Equals, "New Zealand"), + new QueryFilter("name", Operator.Equals, "France") + }) + }; + + var result = await supabase.From() + .Or(filters) + .Get(); ``` - id: not - title: not() + title: Not() description: | Finds all rows which doesn't satisfy the filter. - notes: | - - `.not()` expects you to use the raw [PostgREST syntax](https://postgrest.org/en/stable/api.html#horizontal-filtering-rows) for the filter names and values. - - ```dart - .not('name','eq','Paris') - .not('arraycol','cs','{"a","b"}') // Use Postgres array {} for array column and 'cs' for contains. - .not('rangecol','cs','(1,2]') // Use Postgres range syntax for range column. - .not('id','in','(6,7)') // Use Postgres list () and 'in' for in_ filter. - .not('id','in','(${mylist.join(',')})') // You can insert a Dart list array. - ``` examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .not('name', 'eq', 'Paris'); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .not('name', 'eq', 'Paris'); - ``` - - id: with-delete - name: With `delete()` - code: | - ```dart - final data = await supabase - .from('cities') - .delete() - .not('name', 'eq', 'Paris'); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities) - .not('name', 'eq', 'Paris'); + ```c# + var result = await supabase.From() + .Select("id, name") + .Not("name", Operator.Equals, "Paris") + .Get(); ``` - id: match - title: match() + title: Match() description: | - Finds all rows whose columns match the specified `query` object. + - Finds a model given a class (useful when hydrating models and correlating with database) + - Finds all rows whose columns match the specified `Dictionary` object. examples: - - id: with-select - name: With `select()` + - id: with-model + name: With Model isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .match({'name': 'Beijing', 'country_id': 156}); + ```c# + var city = new City + { + Id = 224, + Name = "Atlanta" + }; + + var model = supabase.From().Match(city).Single(); ``` - - id: with-update - name: With `update()` + - id: with-dictionary + name: With Dictionary code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .match({'name': 'Beijing', 'country_id': 156}); - ``` - - id: with-delete - name: With `delete()` - code: | - ```dart - final data = await supabase - .from('cities') - .delete() - .match({'name': 'Beijing', 'country_id': 156}); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities') - .match({'name': 'Beijing', 'country_id': 156}); + ```c# + var opts = new Dictionary + { + {"name","Beijing"}, + {"country_id", "156"} + }; + + var model = supabase.From().Match(opts).Single(); ``` - id: eq - title: eq() + title: Operator.Equals description: | Finds all rows whose value on the stated `column` exactly matches the specified `value`. examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .eq('name', 'The shire'); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .eq('name', 'San Francisco'); + ```c# + var result = await supabase.From() + .Filter("name", Operator.Equals, "Bali") + .Get(); ``` - id: with-delete - name: With `delete()` + name: With `Delete()` code: | ```dart - final data = await supabase - .from('cities') - .delete() - .eq('name', 'Mordor'); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities') - .eq('name', 'San Francisco'); + await supabase.From() + .Filter("name", Operator.Equals, "Bali") + .Delete(); ``` - id: neq - title: neq() + title: Operator.NotEqual description: | Finds all rows whose value on the stated `column` doesn't match the specified `value`. examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .neq('name', 'The shire'); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .neq('name', 'San Francisco'); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Filter("name", Operator.NotEqual, "Bali") + .Get(); ``` - id: with-delete - name: With `delete()` + name: With `Delete()` code: | - ```dart - final data = await supabase - .from('cities') - .delete() - .neq('name', 'Mordor'); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities') - .neq('name', 'Lagos'); + ```c# + await supabase.From() + .Filter("name", Operator.NotEqual, "Bali") + .Delete(); ``` - id: gt - title: gt() + title: Operator.GreaterThan description: | Finds all rows whose value on the stated `column` is greater than the specified `value`. examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .gt('country_id', 250); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .gt('country_id', 250); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Filter("country_id", Operator.GreaterThan, 250) + .Get(); ``` - id: with-delete - name: With `delete()` + name: With `Delete()` code: | - ```dart - final data = await supabase - .from('cities') - .delete() - .gt('country_id', 250); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities') - .gt('country_id', 250); + ```c# + await supabase.From() + .Filter("country_id", Operator.GreaterThan, 250) + .Delete(); ``` - id: gte - title: gte() + title: Operator.GreaterThanOrEqual description: | Finds all rows whose value on the stated `column` is greater than or equal to the specified `value`. examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .gte('country_id', 250); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .gte('country_id', 250); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Filter("country_id", Operator.GreaterThanOrEqual, 250) + .Get(); ``` - id: with-delete - name: With `delete()` + name: With `Delete()` code: | - ```dart - final data = await supabase - .from('cities') - .delete() - .gte('country_id', 250); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities') - .gte('country_id', 250); + ```c# + await supabase.From() + .Filter("country_id", Operator.GreaterThanOrEqual, 250) + .Delete(); ``` - id: lt - title: lt() + title: Operator.LessThan description: | Finds all rows whose value on the stated `column` is less than the specified `value`. examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .lt('country_id', 250); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .lt('country_id', 250); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Filter("country_id", Operator.LessThan, 250) + .Get(); ``` - id: with-delete - name: With `delete()` + name: With `Delete()` code: | - ```dart - final data = await supabase - .from('cities') - .delete() - .lt('country_id', 250); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities') - .lt('country_id', 250); + ```c# + await supabase.From() + .Filter("country_id", Operator.LessThan, 250) + .Delete(); ``` - id: lte - title: lte() + title: Operator.LessThanOrEqual description: | Finds all rows whose value on the stated `column` is less than or equal to the specified `value`. $ref: '@supabase/postgrest-js.PostgrestFilterBuilder.lte' examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .lte('country_id', 250); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .lte('country_id', 250); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Filter("country_id", Operator.LessThanOrEqual, 250) + .Get(); ``` - id: with-delete - name: With `delete()` + name: With `Delete()` code: | - ```dart - final data = await supabase - .from('cities') - .delete() - .lte('country_id', 250); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities') - .lte('country_id', 250); + ```c# + await supabase.From() + .Filter("country_id", Operator.LessThanOrEqual, 250) + .Delete(); ``` - id: like - title: like() + title: Operator.Like description: | Finds all rows whose value in the stated `column` matches the supplied `pattern` (case sensitive). - $ref: '@supabase/postgrest-js.PostgrestFilterBuilder.lte' examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .like('name', '%la%'); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .like('name', '%la%'); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Filter("name", Operator.Like, "%la%") + .Get(); ``` - id: with-delete - name: With `delete()` + name: With `Delete()` code: | - ```dart - final data = await supabase - .from('cities') - .delete() - .like('name', '%la%'); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities') - .like('name', '%la%'); + ```c# + await supabase.From() + .Filter("name", Operator.Like, "%la%") + .Delete(); ``` - id: ilike - title: ilike() + title: Operator.ILike description: | Finds all rows whose value in the stated `column` matches the supplied `pattern` (case insensitive). examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .ilike('name', '%la%'); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .ilike('name', '%la%'); + ```c# + await supabase.From() + .Filter("name", Operator.ILike, "%la%") + .Delete(); ``` - id: with-delete - name: With `delete()` + name: With `Delete()` code: | - ```dart - final data = await supabase - .from('cities') - .delete() - .ilike('name', '%la%'); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities') - .ilike('name', '%la%'); + ```c# + await supabase.From() + .Filter("name", Operator.ILike, "%la%") + .Delete(); ``` - id: is - title: is_() + title: Operator.Is description: | A check for exact equality (null, true, false), finds all rows whose value on the stated `column` exactly match the specified `value`. - - `is_` and `in_` filter methods are suffixed with `_` to avoid collisions with reserved keywords. examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .is_('name', null); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .is_('name', null); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Filter("name", Operator.Is, null) + .Get(); ``` - id: with-delete - name: With `delete()` + name: With `Delete()` code: | - ```dart - final data = await supabase - .from('cities') - .delete() - .is_('name', null); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities') - .is_('name', null); + ```c# + await supabase.From() + .Filter("name", Operator.Is, null) + .Delete(); ``` - id: in - title: in_() + title: Operator.In description: | Finds all rows whose value on the stated `column` is found on the specified `values`. - - `is_` and `in_` filter methods are suffixed with `_` to avoid collisions with reserved keywords. examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .in_('name', ['Rio de Janeiro', 'San Francisco']); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .in_('name', ['Rio de Janeiro', 'San Francisco']); + ```c# + var result = await supabase.From() + .Select("name, country_id") + .Filter("name", Operator.In, new List { "Rio de Janiero", "San Francisco" }) + .Get(); ``` - id: with-delete - name: With `delete()` + name: With `Delete()` code: | - ```dart - final data = await supabase - .from('cities') - .delete() - .in_('name', ['Rio de Janeiro', 'San Francisco']); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities') - .in_('name', ['Rio de Janeiro', 'San Francisco']); + ```c# + await supabase.From() + .Filter("name", Operator.In, new List { "Rio de Janiero", "San Francisco" }) + .Delete(); ``` - id: contains - title: contains() + title: Operator.Contains examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('countries') - .select('name, id, main_exports') - .contains('main_exports', ['oil']); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('countries') - .update({ 'name': 'Mordor' }) - .contains('main_exports', ['oil']); + ```c# + var result = await supabase.From() + .Select("name, country_id, main_exports") + .Filter("main_exports", Operator.Contains, new List { "oil", "fish" }) + .Get(); ``` - id: with-delete - name: With `delete()` + name: With `Delete()` code: | - ```dart - final data = await supabase - .from('countries') - .delete() - .contains('main_exports', ['oil']); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_countries') - .contains('main_exports', ['oil']); + ```c# + await supabase.From() + .Filter("main_exports", Operator.Contains, new List { "oil", "fish" }) + .Delete(); ``` - id: contained-by - title: containedBy() + title: Operator.ContainedIn examples: - id: with-select - name: With `select()` + name: With `Select()` isSpotlight: true code: | - ```dart - final data = await supabase - .from('countries') - .select('name, id, main_exports') - .containedBy('main_exports', ['cars', 'food', 'machine']); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('countries') - .update({ 'name': 'Mordor' }) - .containedBy('main_exports', ['orks', 'surveillance', 'evil']); + ```c# + var result = await supabase.From() + .Select("name, country_id, main_exports") + .Filter("main_exports", Operator.ContainedIn, new List { "oil", "fish" }) + .Get(); ``` - id: with-delete - name: With `delete()` + name: With `Delete()` code: | - ```dart - final data = await supabase - .from('countries') - .delete() - .containedBy('main_exports', ['cars', 'food', 'machine']); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_countries') - .containedBy('main_exports', ['cars', 'food', 'machine']); - ``` - - - id: range-lt - title: rangeLt() - examples: - - id: with-select - name: With `select()` - isSpotlight: true - code: | - ```dart - final data = await supabase - .from('countries') - .select('name, id, population_range_millions') - .rangeLt('population_range_millions', '[150, 250]'); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('countries') - .update({ 'name': 'Mordor' }) - .rangeLt('population_range_millions', '[150, 250]'); - ``` - - id: with-delete - name: With `delete()` - code: | - ```dart - final data = await supabase - .from('countries') - .delete() - .rangeLt('population_range_millions', '[150, 250]'); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_countries') - .rangeLt('population_range_millions', '[150, 250]'); - ``` - - - id: range-gt - title: rangeGt() - examples: - - id: with-select - name: With `select()` - isSpotlight: true - code: | - ```dart - final data = await supabase - .from('countries') - .select('name, id, population_range_millions') - .rangeGt('population_range_millions', '[150, 250]'); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('countries') - .update({ 'name': 'Mordor' }) - .rangeGt('population_range_millions', '[150, 250]'); - ``` - - id: with-delete - name: With `delete()` - code: | - ```dart - final data = await supabase - .from('countries') - .delete() - .rangeGt('population_range_millions', '[150, 250]'); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_countries') - .rangeGt('population_range_millions', '[150, 250]'); - ``` - - - id: range-gte - title: rangeGte() - examples: - - id: with-select - name: With `select()` - isSpotlight: true - code: | - ```dart - final data = await supabase - .from('countries') - .select('name, id, population_range_millions') - .rangeGte('population_range_millions', '[150, 250]'); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('countries') - .update({ 'name': 'Mordor' }) - .rangeGte('population_range_millions', '[150, 250]'); - ``` - - id: with-delete - name: With `delete()` - code: | - ```dart - final data = await supabase - .from('countries') - .delete() - .rangeGte('population_range_millions', '[150, 250]'); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_countries') - .rangeGte('population_range_millions', '[150, 250]'); - ``` - - - id: range-lte - title: rangeLte() - $ref: '@supabase/postgrest-js.PostgrestFilterBuilder.rangeLte' - examples: - - id: with-select - name: With `select()` - isSpotlight: true - code: | - ```dart - final data = await supabase - .from('countries') - .select('name, id, population_range_millions') - .rangeLte('population_range_millions', '[150, 250]'); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('countries') - .update({ 'name': 'Mordor' }) - .rangeLte('population_range_millions', '[150, 250]'); - ``` - - id: with-delete - name: With `delete()` - code: | - ```dart - final data = await supabase - .from('countries') - .delete() - .rangeLte('population_range_millions', '[150, 250]'); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_countries') - .rangeLte('population_range_millions', [150, 250]); - ``` - - - id: range-adjacent - title: rangeAdjacent() - examples: - - id: with-select - name: With `select()` - isSpotlight: true - code: | - ```dart - final data = await supabase - .from('countries') - .select('name, id, population_range_millions') - .rangeAdjacent('population_range_millions', '[70, 185]'); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('countries') - .update({ 'name': 'Mordor' }) - .rangeAdjacent('population_range_millions', '[70, 185]'); - ``` - - id: with-delete - name: With `delete()` - code: | - ```dart - final data = await supabase - .from('countries') - .delete() - .rangeAdjacent('population_range_millions', '[70, 185]'); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_countries') - .rangeAdjacent('population_range_millions', '[70, 185]'); - ``` - - - id: overlaps - title: overlaps() - examples: - - id: with-select - name: With `select()` - isSpotlight: true - code: | - ```dart - final data = await supabase - .from('countries') - .select('name, id, main_exports') - .overlaps('main_exports', ['computers', 'minerals']); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('countries') - .update({ 'name': 'Mordor' }) - .overlaps('main_exports', ['computers', 'minerals']); - ``` - - id: with-delete - name: With `delete()` - code: | - ```dart - final data = await supabase - .from('countries') - .delete() - .overlaps('main_exports', ['computers', 'minerals']); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_countries') - .overlaps('main_exports', ['computers', 'minerals']); + ```c# + await supabase.From() + .Filter("main_exports", Operator.ContainedIn, new List { "oil", "fish" }) + .Delete(); ``` - id: text-search - title: textSearch() + title: Operator.[FTS,PLFTS,PHFTS,WFTS] (Full Text Search) description: | Finds all rows whose tsvector value on the stated `column` matches to_tsquery(query). examples: - id: text-search name: Text search code: | - ```dart - final data = await supabase - .from('quotes') - .select('catchphrase') - .textSearch('catchphrase', "'fat' & 'cat'", - config: 'english' - ); + ```c# + var result = await supabase.From() + .Select("catchphrase") + .Filter("catchphrase", Operator.FTS, new FullTextSearchConfig("'fat' & 'cat", "english")) + .Get(); ``` - id: basic-normalization name: Basic normalization description: Uses PostgreSQL's `plainto_tsquery` function. code: | - ```dart - final data = await supabase - .from('quotes') - .select('catchphrase') - .textSearch('catchphrase', "'fat' & 'cat'", - type: TextSearchType.plain, - config: 'english' - ); + ```c# + var result = await supabase.From() + .Select("catchphrase") + .Filter("catchphrase", Operator.PLFTS, new FullTextSearchConfig("'fat' & 'cat", "english")) + .Get(); ``` - id: full-normalization name: Full normalization description: Uses PostgreSQL's `phraseto_tsquery` function. code: | - ```dart - final data = await supabase - .from('quotes') - .select('catchphrase') - .textSearch('catchphrase', "'fat' & 'cat'", - type: TextSearchType.phrase, - config: 'english' - ); + ```c# + var result = await supabase.From() + .Select("catchphrase") + .Filter("catchphrase", Operator.PHFTS, new FullTextSearchConfig("'fat' & 'cat", "english")) + .Get(); ``` - id: web-search name: Websearch @@ -2317,72 +1650,9 @@ functions: - `-`: a dash will be converted to the ! operator. code: | - ```dart - final data = await supabase - .from('quotes') - .select('catchphrase') - .textSearch('catchphrase', "'fat or cat'", - type: TextSearchType.websearch, - config: 'english' - ); - ``` - - - id: filter - title: filter() - description: | - Finds all rows whose `column` satisfies the filter. - notes: | - - `.filter()` expects you to use the raw [PostgREST syntax](https://postgrest.org/en/stable/api.html#horizontal-filtering-rows) for the filter names and values, so it should only be used as an escape hatch in case other filters don't work. - ```dart - .filter('arraycol','cs','{"a","b"}') // Use Postgres array {} and 'cs' for contains. - .filter('rangecol','cs','(1,2]') // Use Postgres range syntax for range column. - .filter('id','in','(6,7)') // Use Postgres list () and 'in' for in_ filter. - .filter('id','cs','{${mylist.join(',')}}') // You can insert a Dart array list. - ``` - examples: - - id: with-select - name: With `select()` - isSpotlight: true - code: | - ```dart - final data = await supabase - .from('cities') - .select('name, country_id') - .filter('name', 'in', '("Paris","Tokyo")'); - ``` - - id: with-update - name: With `update()` - code: | - ```dart - final data = await supabase - .from('cities') - .update({ 'name': 'Mordor' }) - .filter('name', 'in', '("Paris","Tokyo")'); - ``` - - id: with-delete - name: With `delete()` - code: | - ```dart - final data = await supabase - .from('cities') - .delete() - .filter('name', 'in', '("Paris","Tokyo")'); - ``` - - id: with-rpc - name: With `rpc()` - code: | - ```dart - // Only valid if the Stored Procedure returns a table type. - final data = await supabase - .rpc('echo_all_cities') - .filter('name', 'in', '("Paris","Tokyo")'); - ``` - - id: filter-embedded-resources - name: Filter embedded resources - code: | - ```dart - final data = await supabase - .from('cities') - .select('name, countries ( name )') - .filter('countries.name', 'in', '("France","Japan")'); + ```c# + var result = await supabase.From() + .Select("catchphrase") + .Filter("catchphrase", Operator.WFTS, new FullTextSearchConfig("'fat' & 'cat", "english")) + .Get(); ``` From 7113c3e6d5ac7a4bc4c750c69b6a982b6e983d94 Mon Sep 17 00:00:00 2001 From: Joseph Schultz Date: Mon, 16 Jan 2023 11:22:24 -0600 Subject: [PATCH 03/64] Update code blocks to support c# and update some of the Postgrest DB examples --- .../reference/RefFunctionSection.tsx | 2 ++ spec/supabase_csharp_v0.yml | 23 ++++++++++++++----- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/apps/docs/components/reference/RefFunctionSection.tsx b/apps/docs/components/reference/RefFunctionSection.tsx index 59e0c0a6abd..296e19ef9c7 100644 --- a/apps/docs/components/reference/RefFunctionSection.tsx +++ b/apps/docs/components/reference/RefFunctionSection.tsx @@ -122,6 +122,8 @@ const RefFunctionSection: React.FC = (props) => { ? 'ts' : example?.code?.startsWith('```dart') ? 'dart' + : example?.code?.startsWith('```c#') + ? 'c#' : 'js' // ` // import { createClient } from '@supabase/supabase-js' diff --git a/spec/supabase_csharp_v0.yml b/spec/supabase_csharp_v0.yml index 6a881cef0b9..7ae300882d5 100644 --- a/spec/supabase_csharp_v0.yml +++ b/spec/supabase_csharp_v0.yml @@ -304,7 +304,7 @@ functions: ```c# var result = await supabase .From() - .Select("name, createdAt") + .Select(x => new object[] {x.Name, x.CreatedAt}) .Get(); ``` - id: query-foreign-tables @@ -339,7 +339,7 @@ functions: ```c# var count = await supabase .From() - .Select("name") + .Select(x => new object[] { x.Name }) .Count(CountType.Exact); ``` - id: querying-json-data @@ -431,14 +431,24 @@ functions: notes: | - `Update()` is typically called using a model as an argument or from a hydrated model. examples: - - id: updating-your-data + - id: updating-your-data-with-filter name: Update your data isSpotlight: true + code: | + ```c# + var update = await supabase + .From() + .Where(x => x.Name == "Auckland") + .Set(x => new KeyValuePair(x.Name, "Middle Earth")) + .Update(); + ``` + - id: updating-your-data + name: Update your data code: | ```c# var model = await supabase .From() - .Filter("name", Operator.Equals, "Auckland") + .Where(x => x.Name == "Auckland") .Single(); model.Name = "Middle Earth"; @@ -484,7 +494,8 @@ functions: await supabase .From() - .Upsert(model, new QueryOptions { OnConflict = "name" }); + .OnConflict(x => x.Name) + .Upsert(model); ``` - id: return-the-exact-number-of-rows name: Return the exact number of rows @@ -517,7 +528,7 @@ functions: ```c# await supabase .From() - .Filter("id", Operator.Equals, 342) + .Where(x => x.Id == 342) .Delete(); ``` From 3dc3e1e4f0832d0253669f676f8a9b5e08a59eb2 Mon Sep 17 00:00:00 2001 From: Joseph Schultz Date: Mon, 16 Jan 2023 20:42:05 -0600 Subject: [PATCH 04/64] Fix unmerged change --- spec/common-client-libs-sections.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/spec/common-client-libs-sections.json b/spec/common-client-libs-sections.json index a33b664964a..a783a914116 100644 --- a/spec/common-client-libs-sections.json +++ b/spec/common-client-libs-sections.json @@ -827,12 +827,7 @@ "title": "Retrieve public URL", "slug": "storage-from-getpublicurl", "product": "storage", -<<<<<<< HEAD - "type": "function", - "libs": ["js", "js_v1", "dart", "dart_v0", "csharp"] -======= "type": "function" ->>>>>>> master } ] }, From b6e2140ea7b4986d15f3f9c7f0c31e54c0b6ca5f Mon Sep 17 00:00:00 2001 From: Joseph Schultz Date: Mon, 16 Jan 2023 21:06:35 -0600 Subject: [PATCH 05/64] Fit new docs structure expected on current state of `master` --- .../reference/RefFunctionSection.tsx | 5 +- .../docs/reference/csharp/generated/.gitkeep | 0 .../docs/reference/csharp/initializing.mdx | 67 +++++++++++++++++++ .../docs/docs/reference/csharp/installing.mdx | 33 +++++++++ .../docs/reference/csharp/introduction.mdx | 20 ++++++ .../reference/csharp/v0/release-notes.mdx | 6 ++ apps/docs/package.json | 6 +- .../docs/pages/reference/csharp/[...slug].tsx | 6 +- .../reference/csharp/crawlers/[...slug].tsx | 7 +- .../pages/reference/csharp/v0/[...slug].tsx | 6 +- .../csharp/v0/crawlers/[...slug].tsx | 5 +- package-lock.json | 2 +- 12 files changed, 146 insertions(+), 17 deletions(-) create mode 100644 apps/docs/docs/reference/csharp/generated/.gitkeep create mode 100644 apps/docs/docs/reference/csharp/initializing.mdx create mode 100644 apps/docs/docs/reference/csharp/installing.mdx create mode 100644 apps/docs/docs/reference/csharp/introduction.mdx create mode 100644 apps/docs/docs/reference/csharp/v0/release-notes.mdx diff --git a/apps/docs/components/reference/RefFunctionSection.tsx b/apps/docs/components/reference/RefFunctionSection.tsx index 296e19ef9c7..8b228a6bfa6 100644 --- a/apps/docs/components/reference/RefFunctionSection.tsx +++ b/apps/docs/components/reference/RefFunctionSection.tsx @@ -123,7 +123,7 @@ const RefFunctionSection: React.FC = (props) => { : example?.code?.startsWith('```dart') ? 'dart' : example?.code?.startsWith('```c#') - ? 'c#' + ? 'csharp' : 'js' // ` // import { createClient } from '@supabase/supabase-js' @@ -156,7 +156,8 @@ const RefFunctionSection: React.FC = (props) => { .replace(/```/g, '') .replace('js', '') .replace('ts', '') - .replace('dart', ''))} + .replace('dart', '') + .replace('c#', ''))} {((tables && tables.length > 0) || sql) && ( diff --git a/apps/docs/docs/reference/csharp/generated/.gitkeep b/apps/docs/docs/reference/csharp/generated/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/apps/docs/docs/reference/csharp/initializing.mdx b/apps/docs/docs/reference/csharp/initializing.mdx new file mode 100644 index 00000000000..ca29a5605a3 --- /dev/null +++ b/apps/docs/docs/reference/csharp/initializing.mdx @@ -0,0 +1,67 @@ +--- +id: initializing +title: 'Initializing' +slug: initializing +custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml +--- + +### Initializing a new Client + + + + +Initializing a new client is pretty straightforward. Find your project url and public key from the +admin panel and pass it into your client initialization function. + + + + + + + + + ```csharp + var url = Environment.GetEnvironmentVariable("SUPABASE_URL"); + var key = Environment.GetEnvironmentVariable("SUPABASE_KEY"); + + var options = new Supabase.SupabaseOptions + { + AutoConnectRealtime = true + }; + + var supabase = new Supabase.Client(url, key, options); + await supabase.InitializeAsync(); + ``` + + + + + + ```csharp + public static MauiApp CreateMauiApp() + { + // ... + var builder = MauiApp.CreateBuilder(); + + var url = Environment.GetEnvironmentVariable("SUPABASE_URL"); + var key = Environment.GetEnvironmentVariable("SUPABASE_KEY"); + var options = new SupabaseOptions + { + AutoRefreshToken = true, + AutoConnectRealtime = true, + SessionHandler = new SupabaseSessionHandler() + }; + + // Note the creation as a singleton. + builder.Services.AddSingleton(provider => new Supabase.Client(url, key, options)); + } + ``` + + + + + + diff --git a/apps/docs/docs/reference/csharp/installing.mdx b/apps/docs/docs/reference/csharp/installing.mdx new file mode 100644 index 00000000000..e274af8e280 --- /dev/null +++ b/apps/docs/docs/reference/csharp/installing.mdx @@ -0,0 +1,33 @@ +--- +id: installing +title: 'Installing & Initialization' +slug: installing +custom_edit_url: https://github.com/supabase/supabase/edit/master/web/spec/supabase.yml +--- + +### Install from NuGet + + + + + You can install Supabase package from [nuget.org](https://www.nuget.org/packages/supabase-csharp/) + + + + + + + + + ```sh Terminal + dotnet add package supabase-csharp + ``` + + + + + + diff --git a/apps/docs/docs/reference/csharp/introduction.mdx b/apps/docs/docs/reference/csharp/introduction.mdx new file mode 100644 index 00000000000..6c699314937 --- /dev/null +++ b/apps/docs/docs/reference/csharp/introduction.mdx @@ -0,0 +1,20 @@ +--- +id: introduction +title: Introduction +hideTitle: true +--- + +
+ +
+

C# Client Library

+

supabase-csharp

+
+
+ +
+ This reference documents every object and method available in Supabase's C# + library, [supabase-csharp](https://www.nuget.org/packages/supabase-csharp). You can + use supabase-csharp to interact with your Postgres database, listen to database changes, invoke + Deno Edge Functions, build login and user management functionality, and manage large files. +
diff --git a/apps/docs/docs/reference/csharp/v0/release-notes.mdx b/apps/docs/docs/reference/csharp/v0/release-notes.mdx new file mode 100644 index 00000000000..2ecb0ef3990 --- /dev/null +++ b/apps/docs/docs/reference/csharp/v0/release-notes.mdx @@ -0,0 +1,6 @@ +--- +id: release-notes +title: Release Notes +--- + +## dart v0 this is the release notes file. diff --git a/apps/docs/package.json b/apps/docs/package.json index 009c9759c91..c7a92350da2 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -25,8 +25,8 @@ "gen:supabase-dart:v0:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_dart_v0.yml --output ./docs/reference/dart/v0/generated", "gen:supabase-dart:v1": "npm-run-all gen:supabase-dart:v1:ref", "gen:supabase-dart:v1:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_dart_v1.yml --output ./docs/reference/dart/generated", - "gen:supabase-csharp:v0": "npm-run-all gen:supabase-dart:v1:ref", - "gen:supabase-csharp:v0:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_csharp_v1.yml --output ./docs/reference/csharp/generated", + "gen:supabase-csharp:v0": "npm-run-all gen:supabase-csharp:v0:ref", + "gen:supabase-csharp:v0:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_csharp_v0.yml --output ./docs/reference/csharp/generated", "gen:supabase-js:v1": "npm-run-all gen:supabase-js:v1:ref", "gen:supabase-js:v1:ref": "ts-node ./generator/index.ts gen --type legacy --input ../../spec/supabase_js_v1.yml --output ./docs/reference/javascript/v1/generated", "gen:supabase-js:v2": "npm-run-all gen:supabase-js:v2:ref", @@ -93,4 +93,4 @@ "tsconfig": "*", "typescript": "^4.5.3" } -} +} \ No newline at end of file diff --git a/apps/docs/pages/reference/csharp/[...slug].tsx b/apps/docs/pages/reference/csharp/[...slug].tsx index 04e731b5aeb..f3e510ece23 100644 --- a/apps/docs/pages/reference/csharp/[...slug].tsx +++ b/apps/docs/pages/reference/csharp/[...slug].tsx @@ -9,11 +9,11 @@ import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' const sections = flattenSections(clientLibsCommonSections) export default function JSReference(props) { - return + return } -export async function getStaticProps({ params }: { params: { slug: string[] } }) { - return handleRefStaticProps(sections, params, '/csharp', '/csharp') +export async function getStaticProps() { + return handleRefStaticProps(sections, '/csharp') } export function getStaticPaths() { diff --git a/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx b/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx index c12f3cabbf2..89d58eb1478 100644 --- a/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/csharp/crawlers/[...slug].tsx @@ -1,7 +1,7 @@ import clientLibsCommonSections from '~/../../spec/common-client-libs-sections.json' import typeSpec from '~/../../spec/enrichments/tsdoc_v2/combined.json' // @ts-expect-error -import spec from '~/../../spec/supabase_dart_v1.yml' assert { type: 'yml' } +import spec from '~/../../spec/supabase_csharp_v0.yml' assert { type: 'yml' } import RefSectionHandler from '~/components/reference/RefSectionHandler' import { flattenSections } from '~/lib/helpers' import handleRefGetStaticPaths from '~/lib/mdx/handleRefStaticPaths' @@ -29,13 +29,14 @@ export default function JSReference(props) { spec={spec} typeSpec={typeSpec} pageProps={props} + type="client-lib" /> ) } -export async function getStaticProps({ params }: { params: { slug: string[] } }) { - return handleRefStaticProps(sections, params, '/dart', '/dart') +export async function getStaticProps() { + return handleRefStaticProps(sections, '/csharp') } export function getStaticPaths() { diff --git a/apps/docs/pages/reference/csharp/v0/[...slug].tsx b/apps/docs/pages/reference/csharp/v0/[...slug].tsx index a76c3f386be..41b28c0a1ef 100644 --- a/apps/docs/pages/reference/csharp/v0/[...slug].tsx +++ b/apps/docs/pages/reference/csharp/v0/[...slug].tsx @@ -9,11 +9,11 @@ import handleRefStaticProps from '~/lib/mdx/handleRefStaticProps' const sections = flattenSections(clientLibsCommonSections) export default function JSReference(props) { - return + return } -export async function getStaticProps({ params }: { params: { slug: string[] } }) { - return handleRefStaticProps(sections, params, '/csharp/v0', '/csharp/v0') +export async function getStaticProps() { + return handleRefStaticProps(sections, '/csharp/v0') } export function getStaticPaths() { diff --git a/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx b/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx index 4c78342f556..059df1c75b1 100644 --- a/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/csharp/v0/crawlers/[...slug].tsx @@ -28,13 +28,14 @@ export default function JSReference(props) { spec={spec} typeSpec={typeSpec} pageProps={props} + type="client-lib" /> ) } -export async function getStaticProps({ params }: { params: { slug: string[] } }) { - return handleRefStaticProps(sections, params, '/csharp/v0', '/csharp/v0') +export async function getStaticProps() { + return handleRefStaticProps(sections, '/csharp/v0') } export function getStaticPaths() { diff --git a/package-lock.json b/package-lock.json index 02ea0980a38..0feb28269d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49498,7 +49498,7 @@ "@types/react": "17.0.39", "algoliasearch": "^4.14.2", "babel": "^6.23.0", - "clsx": "*", + "clsx": "^1.2.1", "common": "*", "config": "*", "dotenv": "^16.0.3", From 9baa560366bd5fbae8fb4a86eeb1c75446c4f1d5 Mon Sep 17 00:00:00 2001 From: Joseph Schultz Date: Mon, 16 Jan 2023 21:13:26 -0600 Subject: [PATCH 06/64] Update release notes for v0.7.0 --- apps/docs/docs/ref/csharp/release-notes.mdx | 169 +++++++++++++++++++- 1 file changed, 168 insertions(+), 1 deletion(-) diff --git a/apps/docs/docs/ref/csharp/release-notes.mdx b/apps/docs/docs/ref/csharp/release-notes.mdx index b5e0e218918..2f30b2cbed8 100644 --- a/apps/docs/docs/ref/csharp/release-notes.mdx +++ b/apps/docs/docs/ref/csharp/release-notes.mdx @@ -3,4 +3,171 @@ id: release-notes title: Release Notes --- -## dart this is the release notes file. +## 0.7.0 - 2023-01-16 + +- Update dependency: postgrest-csharp@3.1.0 + - [Minor] Breaking API Change: `PrimaryKey` attribute defaults to `shouldInsert: false` as most uses will have the Database generate the primary key. + - Merged [#60](https://github.com/supabase-community/postgrest-csharp/pull/60) which Added linq support for `Select`, `Where`, `OnConflict`, `Columns`, `Order`, `Update`, `Set`, and `Delete` + +## 0.6.2 - 2022-11-22 + +- Update dependency: postgrest-csharp@3.0.4 + - `GetHeaders` is now passed to `ModeledResponse` and `BaseModel` so that the default `Update` and `Delete` methods use the latest credentials + - `GetHeaders` is used in `Rpc` calls (re: [#39](https://github.com/supabase-community/supabase-csharp/issues/39)) + +## 0.6.1 - 2022-11-12 + +- [Hotfix] `GetHeaders` was not passing properly to `SupabaseTable` and `Gotrue.Api` + +## 0.6.0 - 2022-11-12 + +[BREAKING CHANGES] + +- `Client` is no longer a singleton, singleton interactions (if desired) are left to the developer to implement. +- `Client` supports injection of dependent clients after initialization via property: + - `Auth` + - `Functions` + - `Realtime` + - `Postgrest` + - `Storage` +- `SupabaseModel` contains no logic but remains for backwards compatibility. (Marked `Obsolete`) +- `ClientOptions.ShouldInitializeRealtime` was removed (no longer auto initialized) +- `ClientOptions` now references an `ISupabaseSessionHandler` which specifies expected functionality for session persistence on Gotrue (replaces `ClientOptions.SessionPersistor`, `ClientOptions.SessionRetriever`, and `ClientOptions.SessionDestroyer`). +- `supabase-csharp` and all child libraries now have support `nullity` + +Other Changes: + +- Update dependency: functions-csharp@1.2.1 +- Update dependency: gotrue-csharp@3.0.2 +- Update dependency: postgrest-csharp@3.0.2 +- Update dependency: realtime-csharp@4.0.1 +- Update dependency: supabase-storage-csharp@1.2.3 +- Update dependency: supabase-core@0.0.2 + +Big thank you to [@veleek](https://github.com/veleek) for his insight into these changes. + +Re: [#35](https://github.com/supabase-community/supabase-csharp/issues/35), [#34](https://github.com/supabase-community/supabase-csharp/issues/34), [#23](https://github.com/supabase-community/supabase-csharp/issues/23), [#36](https://github.com/supabase-community/supabase-csharp/pull/36) + +## 0.5.3 - 2022-10-11 + +- Update dependency: postgrest-csharp@2.1.0 + - [Minor] Breaking API change: Remove `BaseModel.PrimaryKeyValue` and `BaseModel.PrimaryKeyColumn` in favor of a `PrimaryKey` dictionary with support for composite keys. + - Re: [#48](https://github.com/supabase-community/postgrest-csharp/issues/48) - Add support for derived models on `ReferenceAttribute` + - Re: [#49](https://github.com/supabase-community/postgrest-csharp/issues/49) - Added `Match(T model)` + +## 0.5.2 - 2022-9-13 + +- Update dependency: postgrest-csharp@2.0.12 + - Merged [#47](https://github.com/supabase-community/postgrest-csharp/pull/49) which added cancellation token support to `Table` methods. Thanks [@devpikachu](https://github.com/devpikachu)! + +## 0.5.1 - 2022-8-1 + +- Update dependency: postgrest-csharp@2.0.11 +- Update dependency: supabase-storage-csharp@1.1.1 + +## 0.5.0 - 2022-7-17 + +- Update dependency: postgrest-csharp@2.0.9 +- Update dependency: realtime-csharp@3.0.1 +- Update dependency: supabase-storage-csharp@1.1.0 + - API Change [Breaking/Minor] Library no longer uses `WebClient` and instead leverages `HttpClient`. Progress events on `Upload` and `Download` are now handled with `EventHandler` instead of `WebClient` EventHandlers. + +## 0.4.4 - 2022-5-24 + +- Update dependency: gotrue-csharp@2.4.5 +- Update dependency: postgrest-csharp@2.0.8 + +## 0.4.3 - 2022-5-13 + +- Update dependency: gotrue-csharp@2.4.4 + +## 0.4.2 - 2022-4-30 + +- Update dependency: gotrue-csharp@2.4.3 + +## 0.4.1 - 2022-4-23 + +- Update dependency: gotrue-csharp@2.4.2 + +## 0.4.0 - 2022-4-12 + +- Add support for functions-csharp@1.0.1, giving access to invoking Supabase's edge functions. +- Update dependency: gotrue-csharp@2.4.1 + +## 0.3.5 - 2022-4-11 + +- Update dependency: postgres-csharp@2.0.7 + +## 0.3.4 - 2022-03-28 + +- Update dependency: gotrue-csharp@2.4.0 + +## 0.3.3 - 2022-02-27 + +- Update dependency: gotrue-csharp@2.3.6 +- Update dependency: supabase-storage-csharp@1.0.2 + +## 0.3.2 - 2022-02-18 + +- Update dependency: realtime-csharp@3.0.0 + - Exchange existing websocket client: [WebSocketSharp](https://github.com/sta/websocket-sharp) for [Marfusios/websocket-client](https://github.com/Marfusios/websocket-client) which adds support for Blazor WASM apps. + Ref: [#14](https://github.com/supabase-community/realtime-csharp/pull/14) + +## 0.3.1 - 2022-01-20 + +- Update dependency: gotrue-csharp@2.3.5 + - [#23](https://github.com/supabase-community/gotrue-csharp/pull/23) Added `redirect_url` option for MagicLink sign in (Thanks [@MisterJimson](https://github.com/MisterJimson)) + - [#21](https://github.com/supabase-community/gotrue-csharp/pull/21) Added SignOut method to Stateless Client (Thanks [@fplaras](https://github.com/fplaras)) + +## 0.3.0 - 2021-12-30 + +- Update dependency: postgrest-csharp@2.0.6 + - Add support for `NullValueHandling` to be specified on a `Column` Attribute and for it to be honored on Inserts and Updates. Defaults to: `NullValueHandling.Include`. + - Implements [#38](https://github.com/supabase-community/postgrest-csharp/issues/38) +- Update dependency: realtime-csharp@2.0.8 + - Implement Upstream Realtime RLS Error Broadcast Handler + - Implements [#12](https://github.com/supabase-community/realtime-csharp/issues/12) + - `SocketResponse` now exposes a method: `OldModel`, that hydrates the `OldRecord` property into a model. + +## 0.2.12 - 2021-12-29 + +- Update dependency: gotrue-csharp@2.3.3 + - `SignUp` will return a `Session` with a _populated `User` object_ on an unconfirmed signup. + - Fixes [#19](https://github.com/supabase-community/gotrue-csharp/issues/19) + - Developers who were using a `null` check on `Session.User` will need to adjust accordingly. +- Update dependency: postgrest-csharp@2.0.5 + - Fix for [#37](https://github.com/supabase-community/postgrest-csharp/issues/37) - Return Type `minimal` would fail to resolve because of incorrect `Accept` headers. Added header and test to verify for future. + - Fix for [#36](https://github.com/supabase-community/postgrest-csharp/issues/36) - Inserting/Upserting bulk records would fail while doing an unnecessary generic coercion. + +## 0.2.11 - 2021-12-24 + +- Update dependency: gotrue-csharp@2.3.2 (changes CreateUser parameters to conform to `AdminUserAttributes`) + - See [#15](https://github.com/supabase-community/supabase-csharp/issues/15) + - See [#16](https://github.com/supabase-community/supabase-csharp/issues/16) +- Update dependency: realtime-csharp@2.0.7 + - See [#13](https://github.com/supabase-community/supabase-csharp/issues/13) + +## 0.2.10 - 2021-12-23 + +- Update dependency: gotrue-csharp@2.3.0 (adds metadata support for user signup, see [#14](https://github.com/supabase/community/issues/14)) + +## 0.2.9 - 2021-12-9 + +- Separate Storage client from Supabase repo and into `storage-csharp`, `supabase-csharp` now references new repo. + +## 0.2.8 - 2021-12-4 + +- Update gotrue-csharp to 2.2.4 + - Adds support for `ListUsers` (paginate, sort, filter), `GetUserById`, `CreateUser`, and `UpdateById` + +## 0.2.7 - 2021-12-2 + +- Update gotrue-csharp to 2.2.3 + - Adds support for sending password resets to users. + +## 0.2.6 - 2021-11-29 + +- Support for [#12](https://github.com/supabase-community/supabase-csharp/issues/12) +- Update realtime-csharp to 2.0.6 +- Update gotrue-csharp to 2.2.2 +- Add `StatelessClient` re:[#7](https://github.com/supabase-community/supabase-csharp/issues/7) From 6ab687b0705cc3e49e8e81880d82ad7aeee22b0d Mon Sep 17 00:00:00 2001 From: thorwebdev Date: Thu, 26 Jan 2023 16:56:15 +0800 Subject: [PATCH 07/64] chore: add import maps video. --- apps/docs/pages/guides/functions/import-maps.mdx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/apps/docs/pages/guides/functions/import-maps.mdx b/apps/docs/pages/guides/functions/import-maps.mdx index 1509a9cd8a9..2379dbf2699 100644 --- a/apps/docs/pages/guides/functions/import-maps.mdx +++ b/apps/docs/pages/guides/functions/import-maps.mdx @@ -6,6 +6,15 @@ export const meta = { description: 'Using Import Maps.', } +
+ +
+ Since [Supabase CLI](https://supabase.com/docs/guides/resources/supabase-cli) version `1.33.0` [import maps](https://deno.land/manual@v1.29.2/node/import_maps) can be used with Supabase Edge Functions. [Import maps](https://github.com/WICG/import-maps#the-import-map) is a web-platform standard that allows you to use bare specifiers with Deno without having to install the Node.js package locally. From 1a7cce79d96ef6bf1a35880ca4670b45d1b9a866 Mon Sep 17 00:00:00 2001 From: Pavel Borisov <63344111+pashkinelfe@users.noreply.github.com> Date: Thu, 26 Jan 2023 16:09:47 +0400 Subject: [PATCH 08/64] Add tags for CRDT blogpost --- apps/www/_blog/2022-12-10-postgres-crdt.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/www/_blog/2022-12-10-postgres-crdt.mdx b/apps/www/_blog/2022-12-10-postgres-crdt.mdx index 143a356fee7..aade9b86260 100644 --- a/apps/www/_blog/2022-12-10-postgres-crdt.mdx +++ b/apps/www/_blog/2022-12-10-postgres-crdt.mdx @@ -6,6 +6,8 @@ image: launch-week-6/crdt/og-pg-crdt.png thumb: launch-week-6/crdt/og-pg-crdt.png tags: - launch-week + - postgres + - planetpg date: '2022-12-10' toc_depth: 2 --- From a23384cbf5b50adc3dbc6a2719d8d422c219244d Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Wed, 18 Jan 2023 16:46:37 +0100 Subject: [PATCH 09/64] Revert #11331 --- studio/.env | 4 +--- studio/pages/api/constants.ts | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/studio/.env b/studio/.env index bd29782c04e..e66cc5523ed 100644 --- a/studio/.env +++ b/studio/.env @@ -6,13 +6,11 @@ DEFAULT_PROJECT_NAME=Default Project SUPABASE_URL=http://localhost:8000 SUPABASE_PUBLIC_URL=http://localhost:8000 -NEXT_PUBLIC_SUPABASE_URL=$SUPABASE_URL -NEXT_PUBLIC_SUPABASE_PUBLIC_URL=$SUPABASE_PUBLIC_URL SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE SUPABASE_SERVICE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q # TODO: evaluate these variables at runtime instead # https://nextjs.org/docs/basic-features/environment-variables#loading-environment-variables NEXT_PUBLIC_SITE_URL=http://localhost:3000 -NEXT_PUBLIC_GOTRUE_URL=$NEXT_PUBLIC_SUPABASE_PUBLIC_URL/auth/v1 +NEXT_PUBLIC_GOTRUE_URL=$SUPABASE_PUBLIC_URL/auth/v1 NEXT_PUBLIC_HCAPTCHA_SITE_KEY=10000000-ffff-ffff-ffff-000000000001 diff --git a/studio/pages/api/constants.ts b/studio/pages/api/constants.ts index 18dda1ac966..ae150beae97 100644 --- a/studio/pages/api/constants.ts +++ b/studio/pages/api/constants.ts @@ -1,4 +1,4 @@ -const PUBLIC_URL = new URL(process.env.NEXT_PUBLIC_SUPABASE_PUBLIC_URL || 'http://localhost:8000') +const PUBLIC_URL = new URL(process.env.SUPABASE_PUBLIC_URL || 'http://localhost:8000') export const PROJECT_REST_URL = `${PUBLIC_URL.origin}/rest/v1/` export const PROJECT_ENDPOINT = PUBLIC_URL.host From 8ccbf4007907f58b59ca32947b8e809ab10d15a5 Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Wed, 18 Jan 2023 16:47:16 +0100 Subject: [PATCH 10/64] Fix evaluation of protocol --- .../interfaces/Home/NewProjectPanel/APIKeys.tsx | 3 +-- .../components/interfaces/Settings/API/ServiceList.tsx | 3 +-- .../components/layouts/StorageLayout/StorageLayout.tsx | 3 ++- .../ui/ProjectSettings/DisplayConfigSettings.tsx | 3 +-- .../storageExplorer/StorageExplorerStore.js | 10 ++++------ studio/pages/api/props/project/[ref]/settings.ts | 3 ++- 6 files changed, 11 insertions(+), 14 deletions(-) diff --git a/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx b/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx index ac11e16bd6f..fa147f1dd84 100644 --- a/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx +++ b/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx @@ -7,7 +7,6 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { checkPermissions, useJwtSecretUpdateStatus, useProjectSettings } from 'hooks' import { DEFAULT_PROJECT_API_SERVICE_ID, IS_PLATFORM } from 'lib/constants' -import { PROJECT_ENDPOINT_PROTOCOL } from 'pages/api/constants' import Snippets from 'components/to-be-cleaned/Docs/Snippets' import Panel from 'components/ui/Panel' import SimpleCodeBlock from 'components/to-be-cleaned/SimpleCodeBlock' @@ -46,7 +45,7 @@ const APIKeys = () => { const isNotUpdatingJwtSecret = jwtSecretUpdateStatus === undefined || jwtSecretUpdateStatus === JwtSecretUpdateStatus.Updated - const apiUrl = `${IS_PLATFORM ? 'https' : PROJECT_ENDPOINT_PROTOCOL}://${apiConfig.endpoint}` + const apiUrl = `${IS_PLATFORM ? 'https' : apiConfig.protocol}://${apiConfig.endpoint}` const anonKey = apiKeys.find((key: any) => key.tags === 'anon') const clientInitSnippet: any = Snippets.init(apiUrl) diff --git a/studio/components/interfaces/Settings/API/ServiceList.tsx b/studio/components/interfaces/Settings/API/ServiceList.tsx index ce2097d0b03..e3cd14dc27c 100644 --- a/studio/components/interfaces/Settings/API/ServiceList.tsx +++ b/studio/components/interfaces/Settings/API/ServiceList.tsx @@ -14,7 +14,6 @@ import Panel from 'components/ui/Panel' import PostgrestConfig from './PostgrestConfig' import { DisplayApiSettings } from 'components/ui/ProjectSettings' import { JWT_SECRET_UPDATE_ERROR_MESSAGES } from './API.constants' -import { PROJECT_ENDPOINT_PROTOCOL } from 'pages/api/constants' import { IS_PLATFORM } from 'lib/constants' import JWTSettings from './JWTSettings' @@ -79,7 +78,7 @@ const ServiceList: FC = ({ projectRef }) => { readOnly disabled className="input-mono" - value={`${IS_PLATFORM ? 'https' : PROJECT_ENDPOINT_PROTOCOL}://${ + value={`${IS_PLATFORM ? 'https' : apiConfig?.protocol}://${ apiConfig?.endpoint ?? '-' }`} descriptionText="A RESTful endpoint for querying and managing your database." diff --git a/studio/components/layouts/StorageLayout/StorageLayout.tsx b/studio/components/layouts/StorageLayout/StorageLayout.tsx index 031a5935c33..91d3b1975b6 100644 --- a/studio/components/layouts/StorageLayout/StorageLayout.tsx +++ b/studio/components/layouts/StorageLayout/StorageLayout.tsx @@ -42,6 +42,7 @@ const StorageLayout: FC = ({ title, children }) => { const { services, isLoading } = useProjectSettings(ref as string | undefined) const apiService = find(services ?? [], (service) => service.app.id === 1) const projectUrl = apiService?.app_config?.endpoint ?? '' + const urlProtocol = apiService?.app_config?.protocol const serviceKey = find(apiService?.service_api_keys ?? [], (key) => key.tags === 'service_role') const canAccessStorage = !isLoading && services && serviceKey @@ -52,7 +53,7 @@ const StorageLayout: FC = ({ title, children }) => { const initializeStorageStore = async () => { if (projectUrl) { if (serviceKey) { - storageExplorerStore.initStore(ref, projectUrl, serviceKey.api_key) + storageExplorerStore.initStore(ref, projectUrl, serviceKey.api_key, urlProtocol) await storageExplorerStore.fetchBuckets() } } else { diff --git a/studio/components/ui/ProjectSettings/DisplayConfigSettings.tsx b/studio/components/ui/ProjectSettings/DisplayConfigSettings.tsx index ea70fb700dd..4020fcbb44b 100644 --- a/studio/components/ui/ProjectSettings/DisplayConfigSettings.tsx +++ b/studio/components/ui/ProjectSettings/DisplayConfigSettings.tsx @@ -4,7 +4,6 @@ import { Input, IconAlertCircle, IconLoader } from 'ui' import { JwtSecretUpdateStatus } from '@supabase/shared-types/out/events' import { useJwtSecretUpdateStatus, useProjectSettings } from 'hooks' import { DEFAULT_PROJECT_API_SERVICE_ID, IS_PLATFORM } from 'lib/constants' -import { PROJECT_ENDPOINT_PROTOCOL } from 'pages/api/constants' import Panel from 'components/ui/Panel' const DisplayConfigSettings = () => { @@ -56,7 +55,7 @@ const DisplayConfigSettings = () => { copy disabled className="input-mono" - value={`${IS_PLATFORM ? 'https' : PROJECT_ENDPOINT_PROTOCOL}://${apiConfig.endpoint}`} + value={`${IS_PLATFORM ? 'https' : apiConfig.protocol}://${apiConfig.endpoint}`} descriptionText="A RESTful endpoint for querying and managing your database." layout="horizontal" /> diff --git a/studio/localStores/storageExplorer/StorageExplorerStore.js b/studio/localStores/storageExplorer/StorageExplorerStore.js index b9a1742668b..bc16b36db5f 100644 --- a/studio/localStores/storageExplorer/StorageExplorerStore.js +++ b/studio/localStores/storageExplorer/StorageExplorerStore.js @@ -8,7 +8,6 @@ import { createClient } from '@supabase/supabase-js' import { useStore } from 'hooks' import { copyToClipboard } from 'lib/helpers' import { IS_PLATFORM } from 'lib/constants' -import { PROJECT_ENDPOINT_PROTOCOL } from 'pages/api/constants' import { STORAGE_VIEWS, STORAGE_ROW_TYPES, @@ -97,17 +96,16 @@ class StorageExplorerStore { } } - initStore(projectRef, url, serviceKey) { + initStore(projectRef, url, serviceKey, protocol = "http") { this.projectRef = projectRef - this.initializeSupabaseClient(serviceKey, url) + this.initializeSupabaseClient(serviceKey, url, protocol) } /* Methods which are commonly used + For better readability */ - initializeSupabaseClient = (serviceKey, serviceEndpoint) => { - console.debug(serviceEndpoint) + initializeSupabaseClient = (serviceKey, serviceEndpoint, protocol) => { this.supabaseClient = createClient( - `${IS_PLATFORM ? 'https' : PROJECT_ENDPOINT_PROTOCOL}://${serviceEndpoint}`, + `${IS_PLATFORM ? 'https' : protocol}://${serviceEndpoint}`, serviceKey, { auth: { diff --git a/studio/pages/api/props/project/[ref]/settings.ts b/studio/pages/api/props/project/[ref]/settings.ts index 433ee7f95c8..7e076ddecbc 100644 --- a/studio/pages/api/props/project/[ref]/settings.ts +++ b/studio/pages/api/props/project/[ref]/settings.ts @@ -1,7 +1,7 @@ import { NextApiRequest, NextApiResponse } from 'next' import apiWrapper from 'lib/api/apiWrapper' -import { PROJECT_ENDPOINT } from 'pages/api/constants' +import { PROJECT_ENDPOINT, PROJECT_ENDPOINT_PROTOCOL } from 'pages/api/constants' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) @@ -59,6 +59,7 @@ const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => { db_schema: 'public', endpoint: PROJECT_ENDPOINT, realtime_enabled: true, + protocol: PROJECT_ENDPOINT_PROTOCOL }, }, ], From b98081cd7b615a3d075dd60b5cbe960424fb2ac2 Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Wed, 18 Jan 2023 16:47:31 +0100 Subject: [PATCH 11/64] Remove unused env var --- docker/docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 0080171f90f..cd072bd2e98 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -27,8 +27,6 @@ services: SUPABASE_URL: http://kong:8000 SUPABASE_PUBLIC_URL: ${SUPABASE_PUBLIC_URL} - # Kept for backwards compatibility with studio:0.22.08 - SUPABASE_REST_URL: ${API_EXTERNAL_URL}/rest/v1/ SUPABASE_ANON_KEY: ${ANON_KEY} SUPABASE_SERVICE_KEY: ${SERVICE_ROLE_KEY} From d9e7875875fc647cc1ecd99b5926eb5a1a0ec439 Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Sat, 21 Jan 2023 18:36:38 +0100 Subject: [PATCH 12/64] Apply suggestions from code review Co-authored-by: Han Qiao --- studio/localStores/storageExplorer/StorageExplorerStore.js | 2 +- studio/pages/api/props/project/[ref]/settings.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/studio/localStores/storageExplorer/StorageExplorerStore.js b/studio/localStores/storageExplorer/StorageExplorerStore.js index bc16b36db5f..878b9549520 100644 --- a/studio/localStores/storageExplorer/StorageExplorerStore.js +++ b/studio/localStores/storageExplorer/StorageExplorerStore.js @@ -96,7 +96,7 @@ class StorageExplorerStore { } } - initStore(projectRef, url, serviceKey, protocol = "http") { + initStore(projectRef, url, serviceKey, protocol = PROJECT_ENDPOINT_PROTOCOL) { this.projectRef = projectRef this.initializeSupabaseClient(serviceKey, url, protocol) } diff --git a/studio/pages/api/props/project/[ref]/settings.ts b/studio/pages/api/props/project/[ref]/settings.ts index 7e076ddecbc..986cc58f87c 100644 --- a/studio/pages/api/props/project/[ref]/settings.ts +++ b/studio/pages/api/props/project/[ref]/settings.ts @@ -59,6 +59,7 @@ const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => { db_schema: 'public', endpoint: PROJECT_ENDPOINT, realtime_enabled: true, + // TODO: update platform api to return this field protocol: PROJECT_ENDPOINT_PROTOCOL }, }, From 0b2371632793ef359be02c3eb0bc8539a0eb1dd8 Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Sun, 22 Jan 2023 12:17:10 +0100 Subject: [PATCH 13/64] Re-add constant import --- studio/localStores/storageExplorer/StorageExplorerStore.js | 1 + 1 file changed, 1 insertion(+) diff --git a/studio/localStores/storageExplorer/StorageExplorerStore.js b/studio/localStores/storageExplorer/StorageExplorerStore.js index 878b9549520..6d75f5f36db 100644 --- a/studio/localStores/storageExplorer/StorageExplorerStore.js +++ b/studio/localStores/storageExplorer/StorageExplorerStore.js @@ -8,6 +8,7 @@ import { createClient } from '@supabase/supabase-js' import { useStore } from 'hooks' import { copyToClipboard } from 'lib/helpers' import { IS_PLATFORM } from 'lib/constants' +import { PROJECT_ENDPOINT_PROTOCOL } from 'pages/api/constants' import { STORAGE_VIEWS, STORAGE_ROW_TYPES, From 6e037f19e90d1d69abd93d27ef6da67c0133577a Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Thu, 26 Jan 2023 15:17:03 +0800 Subject: [PATCH 14/64] chore: use api settings route in all places --- .../Functions/TerminalInstructions.tsx | 14 +++++------ .../Home/NewProjectPanel/APIKeys.tsx | 19 +++++++-------- .../interfaces/Settings/API/ServiceList.tsx | 24 ++++++++----------- .../CustomDomainConfig/CustomDomainVerify.tsx | 2 +- .../CustomDomainsConfigureHostname.tsx | 4 ++-- .../layouts/StorageLayout/StorageLayout.tsx | 24 +++++++++++-------- .../ui/ProjectSettings/DisplayApiSettings.tsx | 12 ++++------ .../ProjectSettings/DisplayConfigSettings.tsx | 5 ++-- studio/data/config/project-settings-query.ts | 1 + studio/pages/api/props/project/[ref]/api.ts | 8 ++----- .../pages/api/props/project/[ref]/settings.ts | 4 +--- studio/pages/project/[ref]/api/index.tsx | 7 ++---- .../project/[ref]/functions/[id]/details.tsx | 16 ++++++------- studio/pages/vercel/integrate.tsx | 4 ++-- 14 files changed, 67 insertions(+), 77 deletions(-) diff --git a/studio/components/interfaces/Functions/TerminalInstructions.tsx b/studio/components/interfaces/Functions/TerminalInstructions.tsx index 00449fa46a8..33e39092b85 100644 --- a/studio/components/interfaces/Functions/TerminalInstructions.tsx +++ b/studio/components/interfaces/Functions/TerminalInstructions.tsx @@ -1,6 +1,6 @@ import { useRouter } from 'next/router' import { Button, IconTerminal, IconMaximize2, IconMinimize2, IconBookOpen, IconCode } from 'ui' -import { useProjectSettings } from 'hooks' +import { useProjectSettingsQuery } from 'data/config/project-settings-query' import { useAccessTokens } from 'hooks/queries/useAccessTokens' import { Commands } from './Functions.types' import CommandRender from 'components/interfaces/Functions/CommandRender' @@ -18,17 +18,17 @@ const TerminalInstructions: FC = ({ closable = false }) => { const { ui } = useStore() const { tokens } = useAccessTokens() - const { services } = useProjectSettings(ref as string | undefined) + const { data: settings } = useProjectSettingsQuery({ projectRef: ref as string }) const [showInstructions, setShowInstructions] = useState(!closable) // Get the API service - const API_SERVICE_ID = 1 - const apiService = (services ?? []).find((x: any) => x.app.id == API_SERVICE_ID) - const apiKeys = apiService?.service_api_keys ?? [] - const anonKey = apiKeys.find((x: any) => x.name === 'anon key')?.api_key + const apiService = settings?.autoApiService + const anonKey = apiService?.service_api_keys.find((x: any) => x.name === 'anon key') + ? apiService?.defaultApiKey + : undefined - const endpoint = apiService?.app_config.endpoint ?? '' + const endpoint = apiService?.endpoint ?? '' const endpointSections = endpoint.split('.') const functionsEndpoint = [ ...endpointSections.slice(0, 1), diff --git a/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx b/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx index fa147f1dd84..20b89d4cce5 100644 --- a/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx +++ b/studio/components/interfaces/Home/NewProjectPanel/APIKeys.tsx @@ -5,8 +5,8 @@ import { Input, IconLoader, IconAlertCircle } from 'ui' import { JwtSecretUpdateStatus } from '@supabase/shared-types/out/events' import { PermissionAction } from '@supabase/shared-types/out/constants' -import { checkPermissions, useJwtSecretUpdateStatus, useProjectSettings } from 'hooks' -import { DEFAULT_PROJECT_API_SERVICE_ID, IS_PLATFORM } from 'lib/constants' +import { useProjectSettingsQuery } from 'data/config/project-settings-query' +import { checkPermissions, useJwtSecretUpdateStatus } from 'hooks' import Snippets from 'components/to-be-cleaned/Docs/Snippets' import Panel from 'components/ui/Panel' import SimpleCodeBlock from 'components/to-be-cleaned/SimpleCodeBlock' @@ -22,10 +22,10 @@ const APIKeys = () => { const [selectedLanguage, setSelectedLanguage] = useState(availableLanguages[0]) const { - services, + data: settings, isError: isProjectSettingsError, isLoading: isProjectSettingsLoading, - } = useProjectSettings(ref as string | undefined) + } = useProjectSettingsQuery({ projectRef: ref as string }) const { jwtSecretUpdateStatus, @@ -36,8 +36,7 @@ const APIKeys = () => { const canReadAPIKeys = checkPermissions(PermissionAction.READ, 'service_api_keys') // Get the API service - const apiService = (services ?? []).find((x: any) => x.app.id == DEFAULT_PROJECT_API_SERVICE_ID) - const apiConfig = apiService?.app_config ?? {} + const apiService = settings?.autoApiService const apiKeys = apiService?.service_api_keys ?? [] // API keys should not be empty. However it can be populated with a delay on project creation @@ -45,7 +44,7 @@ const APIKeys = () => { const isNotUpdatingJwtSecret = jwtSecretUpdateStatus === undefined || jwtSecretUpdateStatus === JwtSecretUpdateStatus.Updated - const apiUrl = `${IS_PLATFORM ? 'https' : apiConfig.protocol}://${apiConfig.endpoint}` + const apiUrl = `${apiService?.protocol ?? 'https'}://${apiService?.endpoint ?? '-'}` const anonKey = apiKeys.find((key: any) => key.tags === 'anon') const clientInitSnippet: any = Snippets.init(apiUrl) @@ -110,7 +109,7 @@ const APIKeys = () => {

API Key

- {anonKey.tags?.split(',').map((x: any, i: number) => ( + {anonKey?.tags?.split(',').map((x: any, i: number) => ( {x} @@ -120,7 +119,7 @@ const APIKeys = () => {
} copy={canReadAPIKeys && isNotUpdatingJwtSecret} - reveal={anonKey.tags !== 'anon' && canReadAPIKeys && isNotUpdatingJwtSecret} + reveal={anonKey?.tags !== 'anon' && canReadAPIKeys && isNotUpdatingJwtSecret} value={ !canReadAPIKeys ? 'You need additional permissions to view API keys' @@ -128,7 +127,7 @@ const APIKeys = () => { ? 'JWT secret update failed, new API key may have issues' : jwtSecretUpdateStatus === JwtSecretUpdateStatus.Updating ? 'Updating JWT secret...' - : anonKey.api_key + : apiService?.defaultApiKey } onChange={() => {}} descriptionText={ diff --git a/studio/components/interfaces/Settings/API/ServiceList.tsx b/studio/components/interfaces/Settings/API/ServiceList.tsx index e3cd14dc27c..3edef681a27 100644 --- a/studio/components/interfaces/Settings/API/ServiceList.tsx +++ b/studio/components/interfaces/Settings/API/ServiceList.tsx @@ -3,12 +3,10 @@ import { useRouter } from 'next/router' import { JwtSecretUpdateError, JwtSecretUpdateStatus } from '@supabase/shared-types/out/events' import { IconAlertCircle, Input } from 'ui' -import { - useStore, - useProjectSettings, - useProjectPostgrestConfig, - useJwtSecretUpdateStatus, -} from 'hooks' +import { configKeys } from 'data/config/keys' +import { useQueryClient } from '@tanstack/react-query' +import { useProjectSettingsQuery } from 'data/config/project-settings-query' +import { useStore, useProjectPostgrestConfig, useJwtSecretUpdateStatus } from 'hooks' import Panel from 'components/ui/Panel' import PostgrestConfig from './PostgrestConfig' @@ -25,8 +23,9 @@ const ServiceList: FC = ({ projectRef }) => { const { ui } = useStore() const router = useRouter() const { ref } = router.query + const queryClient = useQueryClient() - const { services, isError, mutateSettings } = useProjectSettings(ref as string | undefined) + const { data: settings, isError } = useProjectSettingsQuery({ projectRef: ref as string }) const { mutateConfig } = useProjectPostgrestConfig(ref as string | undefined) const { jwtSecretUpdateError, jwtSecretUpdateStatus }: any = useJwtSecretUpdateStatus(ref) @@ -40,7 +39,7 @@ const ServiceList: FC = ({ projectRef }) => { switch (jwtSecretUpdateStatus) { case Updated: mutateConfig() - mutateSettings() + queryClient.invalidateQueries({ queryKey: configKeys.settings(projectRef) }) ui.setNotification({ category: 'success', message: 'Successfully updated JWT secret' }) break case Failed: @@ -56,9 +55,8 @@ const ServiceList: FC = ({ projectRef }) => { }, [jwtSecretUpdateStatus]) // Get the API service - const API_SERVICE_ID = 1 - const apiService = services ? services.find((x: any) => x.app.id == API_SERVICE_ID) : {} - const apiConfig = apiService?.app_config + const apiService = settings?.autoApiService + const apiUrl = `${apiService?.protocol ?? 'https'}://${apiService?.endpoint ?? '-'}` return (
@@ -78,9 +76,7 @@ const ServiceList: FC = ({ projectRef }) => { readOnly disabled className="input-mono" - value={`${IS_PLATFORM ? 'https' : apiConfig?.protocol}://${ - apiConfig?.endpoint ?? '-' - }`} + value={apiUrl} descriptionText="A RESTful endpoint for querying and managing your database." layout="horizontal" /> diff --git a/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainVerify.tsx b/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainVerify.tsx index 4d2ed590e8e..1314aaa2e03 100644 --- a/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainVerify.tsx +++ b/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainVerify.tsx @@ -134,7 +134,7 @@ const CustomDomainVerify = ({ projectRef, customDomain, settings }: CustomDomain )} diff --git a/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainsConfigureHostname.tsx b/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainsConfigureHostname.tsx index 8a60cb5b192..1bf16aaff92 100644 --- a/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainsConfigureHostname.tsx +++ b/studio/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainsConfigureHostname.tsx @@ -26,7 +26,7 @@ const CustomDomainsConfigureHostname = () => { const { data: settings } = useProjectSettingsQuery({ projectRef: ref }) const FORM_ID = 'custom-domains-form' - const endpoint = settings?.autoApiService.app_config.endpoint ?? undefined + const endpoint = settings?.autoApiService.endpoint const canConfigureCustomDomain = checkPermissions(PermissionAction.UPDATE, 'projects') const verifyCNAME = async (domain: string): Promise => { @@ -123,7 +123,7 @@ const CustomDomainsConfigureHostname = () => { 'your custom domain' )} , resolving to{' '} - {endpoint !== undefined ? ( + {endpoint ? ( {endpoint} ) : ( "your project's API URL" diff --git a/studio/components/layouts/StorageLayout/StorageLayout.tsx b/studio/components/layouts/StorageLayout/StorageLayout.tsx index 91d3b1975b6..e6b7c0ad180 100644 --- a/studio/components/layouts/StorageLayout/StorageLayout.tsx +++ b/studio/components/layouts/StorageLayout/StorageLayout.tsx @@ -3,7 +3,8 @@ import { useRouter } from 'next/router' import { find, filter, get as _get } from 'lodash' import { observer } from 'mobx-react-lite' -import { useProjectSettings, useStore, withAuth } from 'hooks' +import { AutoApiService, useProjectSettingsQuery } from 'data/config/project-settings-query' +import { useStore, withAuth } from 'hooks' import BaseLayout from 'components/layouts' import ProjectLayout from '../ProjectLayout/ProjectLayout' import StorageMenu from './StorageMenu' @@ -39,21 +40,24 @@ const StorageLayout: FC = ({ title, children }) => { buckets, } = storageExplorerStore || {} - const { services, isLoading } = useProjectSettings(ref as string | undefined) - const apiService = find(services ?? [], (service) => service.app.id === 1) - const projectUrl = apiService?.app_config?.endpoint ?? '' - const urlProtocol = apiService?.app_config?.protocol + const { data: settings, isLoading } = useProjectSettingsQuery({ projectRef: ref as string }) + const apiService = settings?.autoApiService const serviceKey = find(apiService?.service_api_keys ?? [], (key) => key.tags === 'service_role') - const canAccessStorage = !isLoading && services && serviceKey + const canAccessStorage = !isLoading && apiService && serviceKey useEffect(() => { - if (!isLoading && services) initializeStorageStore() + if (!isLoading && apiService) initializeStorageStore(apiService) }, [isLoading]) - const initializeStorageStore = async () => { - if (projectUrl) { + const initializeStorageStore = async (apiService: AutoApiService) => { + if (apiService.endpoint) { if (serviceKey) { - storageExplorerStore.initStore(ref, projectUrl, serviceKey.api_key, urlProtocol) + storageExplorerStore.initStore( + ref, + apiService.endpoint, + apiService.serviceApiKey, + apiService.protocol + ) await storageExplorerStore.fetchBuckets() } } else { diff --git a/studio/components/ui/ProjectSettings/DisplayApiSettings.tsx b/studio/components/ui/ProjectSettings/DisplayApiSettings.tsx index c691e0d5730..73d86086ff9 100644 --- a/studio/components/ui/ProjectSettings/DisplayApiSettings.tsx +++ b/studio/components/ui/ProjectSettings/DisplayApiSettings.tsx @@ -3,8 +3,8 @@ import { IconAlertCircle, IconLoader, Input } from 'ui' import { JwtSecretUpdateStatus } from '@supabase/shared-types/out/events' import { PermissionAction } from '@supabase/shared-types/out/constants' -import { checkPermissions, useJwtSecretUpdateStatus, useProjectSettings } from 'hooks' -import { DEFAULT_PROJECT_API_SERVICE_ID } from 'lib/constants' +import { useProjectSettingsQuery } from 'data/config/project-settings-query' +import { checkPermissions, useJwtSecretUpdateStatus } from 'hooks' import Panel from 'components/ui/Panel' const DisplayApiSettings = () => { @@ -12,11 +12,10 @@ const DisplayApiSettings = () => { const { ref } = router.query const { - services, - error: projectSettingsError, + data: settings, isError: isProjectSettingsError, isLoading: isProjectSettingsLoading, - } = useProjectSettings(ref as string | undefined) + } = useProjectSettingsQuery({ projectRef: ref as string }) const { jwtSecretUpdateStatus, isError: isJwtSecretUpdateStatusError, @@ -28,8 +27,7 @@ const DisplayApiSettings = () => { const isNotUpdatingJwtSecret = jwtSecretUpdateStatus === undefined || jwtSecretUpdateStatus === JwtSecretUpdateStatus.Updated // Get the API service - const apiService = (services ?? []).find((x: any) => x.app.id == DEFAULT_PROJECT_API_SERVICE_ID) - const apiKeys = apiService?.service_api_keys ?? [] + const apiKeys = settings?.autoApiService.service_api_keys ?? [] // api keys should not be empty. However it can be populated with a delay on project creation const isApiKeysEmpty = apiKeys.length === 0 diff --git a/studio/components/ui/ProjectSettings/DisplayConfigSettings.tsx b/studio/components/ui/ProjectSettings/DisplayConfigSettings.tsx index 4020fcbb44b..320a0a8b82e 100644 --- a/studio/components/ui/ProjectSettings/DisplayConfigSettings.tsx +++ b/studio/components/ui/ProjectSettings/DisplayConfigSettings.tsx @@ -3,7 +3,7 @@ import { useRouter } from 'next/router' import { Input, IconAlertCircle, IconLoader } from 'ui' import { JwtSecretUpdateStatus } from '@supabase/shared-types/out/events' import { useJwtSecretUpdateStatus, useProjectSettings } from 'hooks' -import { DEFAULT_PROJECT_API_SERVICE_ID, IS_PLATFORM } from 'lib/constants' +import { DEFAULT_PROJECT_API_SERVICE_ID } from 'lib/constants' import Panel from 'components/ui/Panel' const DisplayConfigSettings = () => { @@ -27,6 +27,7 @@ const DisplayConfigSettings = () => { const jwtSecret = project?.jwt_secret ?? '' const apiService = (services ?? []).find((x: any) => x.app.id == DEFAULT_PROJECT_API_SERVICE_ID) const apiConfig = apiService?.app_config ?? {} + const apiUrl = `${apiConfig.protocol ?? 'https'}://${apiConfig.endpoint ?? '-'}` return ( @@ -55,7 +56,7 @@ const DisplayConfigSettings = () => { copy disabled className="input-mono" - value={`${IS_PLATFORM ? 'https' : apiConfig.protocol}://${apiConfig.endpoint}`} + value={apiUrl} descriptionText="A RESTful endpoint for querying and managing your database." layout="horizontal" /> diff --git a/studio/data/config/project-settings-query.ts b/studio/data/config/project-settings-query.ts index ad473e32e38..2c61a9909a8 100644 --- a/studio/data/config/project-settings-query.ts +++ b/studio/data/config/project-settings-query.ts @@ -48,6 +48,7 @@ export type ServiceApiKey = { } export type AutoApiService = Service & { + protocol: 'https' | 'http' endpoint: string restUrl: string project: Project diff --git a/studio/pages/api/props/project/[ref]/api.ts b/studio/pages/api/props/project/[ref]/api.ts index 9e6cb871c40..d6f30707f2a 100644 --- a/studio/pages/api/props/project/[ref]/api.ts +++ b/studio/pages/api/props/project/[ref]/api.ts @@ -1,7 +1,7 @@ import { NextApiRequest, NextApiResponse } from 'next' import apiWrapper from 'lib/api/apiWrapper' -import { PROJECT_ENDPOINT, PROJECT_REST_URL } from 'pages/api/constants' +import { PROJECT_ENDPOINT, PROJECT_ENDPOINT_PROTOCOL, PROJECT_REST_URL } from 'pages/api/constants' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) @@ -36,17 +36,12 @@ const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => { { id: 1, name: 'Default API', - project: { ref: 'default' }, app: { id: 1, name: 'Auto API' }, app_config: { db_schema: 'public', endpoint: PROJECT_ENDPOINT, realtime_enabled: true, }, - endpoint: PROJECT_ENDPOINT, - restUrl: PROJECT_REST_URL, - defaultApiKey: process.env.SUPABASE_ANON_KEY, - serviceApiKey: process.env.SUPABASE_SERVICE_KEY, service_api_keys: [ { api_key_encrypted: '-', @@ -72,6 +67,7 @@ const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => { endpoint: PROJECT_ENDPOINT, realtime_enabled: true, }, + protocol: PROJECT_ENDPOINT_PROTOCOL, endpoint: PROJECT_ENDPOINT, restUrl: PROJECT_REST_URL, defaultApiKey: process.env.SUPABASE_ANON_KEY, diff --git a/studio/pages/api/props/project/[ref]/settings.ts b/studio/pages/api/props/project/[ref]/settings.ts index 986cc58f87c..433ee7f95c8 100644 --- a/studio/pages/api/props/project/[ref]/settings.ts +++ b/studio/pages/api/props/project/[ref]/settings.ts @@ -1,7 +1,7 @@ import { NextApiRequest, NextApiResponse } from 'next' import apiWrapper from 'lib/api/apiWrapper' -import { PROJECT_ENDPOINT, PROJECT_ENDPOINT_PROTOCOL } from 'pages/api/constants' +import { PROJECT_ENDPOINT } from 'pages/api/constants' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) @@ -59,8 +59,6 @@ const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => { db_schema: 'public', endpoint: PROJECT_ENDPOINT, realtime_enabled: true, - // TODO: update platform api to return this field - protocol: PROJECT_ENDPOINT_PROTOCOL }, }, ], diff --git a/studio/pages/project/[ref]/api/index.tsx b/studio/pages/project/[ref]/api/index.tsx index 482494908ff..9bad3b62f70 100644 --- a/studio/pages/project/[ref]/api/index.tsx +++ b/studio/pages/project/[ref]/api/index.tsx @@ -5,8 +5,7 @@ import { FC, createContext, useContext, useEffect, useState } from 'react' import { observer, useLocalObservable } from 'mobx-react-lite' import { NextPageWithLayout } from 'types' -import { API_URL, IS_PLATFORM } from 'lib/constants' -import { PROJECT_ENDPOINT_PROTOCOL } from 'pages/api/constants' +import { API_URL } from 'lib/constants' import { checkPermissions, useStore } from 'hooks' import { get } from 'lib/common/fetch' import { snakeToCamel } from 'lib/helpers' @@ -117,9 +116,7 @@ const DocView: FC = observer(({}) => { // Data Loaded const autoApiService = { ...data.autoApiService, - endpoint: IS_PLATFORM - ? `https://${data?.autoApiService?.endpoint}` - : `${PROJECT_ENDPOINT_PROTOCOL}://${data.autoApiService.endpoint}`, + endpoint: `${data.apiService.protocol ?? 'https'}://${data.apiService.endpoint ?? '-'}`, } const { query } = router diff --git a/studio/pages/project/[ref]/functions/[id]/details.tsx b/studio/pages/project/[ref]/functions/[id]/details.tsx index 1f17b634105..e668b4903a6 100644 --- a/studio/pages/project/[ref]/functions/[id]/details.tsx +++ b/studio/pages/project/[ref]/functions/[id]/details.tsx @@ -6,7 +6,8 @@ import { IconGlobe, IconTerminal } from 'ui' import { PermissionAction } from '@supabase/shared-types/out/constants' import { NextPageWithLayout } from 'types' -import { checkPermissions, useProjectSettings, useStore } from 'hooks' +import { useProjectSettingsQuery } from 'data/config/project-settings-query' +import { checkPermissions, useStore } from 'hooks' import FunctionsLayout from 'components/layouts/FunctionsLayout' import CommandRender from 'components/interfaces/Functions/CommandRender' import NoPermission from 'components/ui/NoPermission' @@ -95,16 +96,15 @@ const PageLayout: NextPageWithLayout = () => { }, ] - const { services } = useProjectSettings(ref as string | undefined) - - const API_SERVICE_ID = 1 - // Get the API service - const apiService = (services ?? []).find((x: any) => x.app.id == API_SERVICE_ID) + const { data: settings } = useProjectSettingsQuery({ projectRef: ref as string }) + const apiService = settings?.autoApiService const apiKeys = apiService?.service_api_keys ?? [] - const anonKey = apiKeys.find((x: any) => x.name === 'anon key')?.api_key + const anonKey = apiKeys.find((x: any) => x.name === 'anon key') + ? apiService?.defaultApiKey + : undefined - const endpoint = apiService?.app_config.endpoint ?? '' + const endpoint = apiService?.endpoint ?? '' const endpointSections = endpoint.split('.') const functionsEndpoint = [ ...endpointSections.slice(0, 1), diff --git a/studio/pages/vercel/integrate.tsx b/studio/pages/vercel/integrate.tsx index 424df36774d..7da27b95c78 100644 --- a/studio/pages/vercel/integrate.tsx +++ b/studio/pages/vercel/integrate.tsx @@ -370,8 +370,8 @@ const ProjectLinks: FC = observer(() => { // Then create env for vercel project with supabase project const vercelEnvs = prepareVercelEvns(defaultVercelEnvs, { - endpoint: `${IS_PLATFORM ? 'https' : PROJECT_ENDPOINT_PROTOCOL}://${ - projectDetails.autoApiService.endpoint + endpoint: `${projectDetails.apiService.protocol ?? 'https'}://${ + projectDetails.apiService.endpoint ?? '-' }`, anon_key: projectDetails.autoApiService.defaultApiKey, service_key: projectDetails.autoApiService.serviceApiKey, From 4d664106178a59e79f0649c2bbef2c5a022ae4cb Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Thu, 26 Jan 2023 15:31:23 +0000 Subject: [PATCH 15/64] Update studio docker image in docker-compose.yml --- docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index cd072bd2e98..8338141d3ca 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -9,7 +9,7 @@ version: "3.8" services: studio: container_name: supabase-studio - image: supabase/studio:20221214-4eecc99 + image: supabase/studio:20230126-6e037f1 restart: unless-stopped healthcheck: test: [ "CMD", "node", "-e", "require('http').get('http://localhost:3000/api/profile', (r) => {if (r.statusCode !== 200) throw new Error(r.statusCode)})" ] From ff7f57398233033b4a9fa82cef230bee3a26404e Mon Sep 17 00:00:00 2001 From: Greg Richardson Date: Thu, 26 Jan 2023 11:54:19 -0700 Subject: [PATCH 16/64] feat: references pgvector extension in docs extension list --- apps/docs/data/extensions.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/docs/data/extensions.json b/apps/docs/data/extensions.json index 4014e6eeabc..24a76d1a821 100644 --- a/apps/docs/data/extensions.json +++ b/apps/docs/data/extensions.json @@ -468,6 +468,13 @@ "installed_version": "1.1", "comment": "generate universally unique identifiers (UUIDs)" }, + { + "name": "vector", + "schema": "extensions", + "default_version": "0.4.0", + "installed_version": null, + "comment": "vector data type with similarity search" + }, { "name": "xml2", "schema": null, From 542d5202d340ee637fd8eeaef8629660f7090007 Mon Sep 17 00:00:00 2001 From: Sara Tavares <29093946+stavares843@users.noreply.github.com> Date: Fri, 27 Jan 2023 00:09:02 +0000 Subject: [PATCH 17/64] chore(ci): avoid typos (#11373) * Update prettier.yml * Update DEVELOPERS.md * Update prettier.yml * Update DEVELOPERS.md * Update .github/workflows/prettier.yml * Create avoid-typos.yml Co-authored-by: Han Qiao --- .github/workflows/avoid-typos.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/avoid-typos.yml diff --git a/.github/workflows/avoid-typos.yml b/.github/workflows/avoid-typos.yml new file mode 100644 index 00000000000..cd8d982f4aa --- /dev/null +++ b/.github/workflows/avoid-typos.yml @@ -0,0 +1,20 @@ +name: reviewdog +on: + pull_request: + types: [opened, synchronize, reopened, edited] + +jobs: + misspell: + name: runner / misspell + runs-on: ubuntu-latest + steps: + - name: Check out code. + uses: actions/checkout@v1 + - name: misspell + uses: reviewdog/action-misspell@v1 + with: + github_token: ${{ secrets.github_token }} + locale: "US" + reporter: github-pr-review + level: error + exclude: "*.css" From 123d70423c366d53d571e08dceaba28e8f21a62b Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Fri, 27 Jan 2023 03:32:08 +0100 Subject: [PATCH 18/64] fix: typo autoApiService in project/[ref]/api (#11945) * fix: typo autoApiService in project/[ref]/api * Update studio/pages/project/[ref]/api/index.tsx * chore: fix default api key reference * chore: use consistent typing Co-authored-by: Han Qiao Co-authored-by: Qiao Han --- .../Functions/TerminalInstructions.tsx | 2 +- studio/pages/project/[ref]/api/index.tsx | 18 ++++++++++-------- .../project/[ref]/functions/[id]/details.tsx | 5 ++--- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/studio/components/interfaces/Functions/TerminalInstructions.tsx b/studio/components/interfaces/Functions/TerminalInstructions.tsx index 33e39092b85..dbb81db4061 100644 --- a/studio/components/interfaces/Functions/TerminalInstructions.tsx +++ b/studio/components/interfaces/Functions/TerminalInstructions.tsx @@ -25,7 +25,7 @@ const TerminalInstructions: FC = ({ closable = false }) => { // Get the API service const apiService = settings?.autoApiService const anonKey = apiService?.service_api_keys.find((x: any) => x.name === 'anon key') - ? apiService?.defaultApiKey + ? apiService.defaultApiKey : undefined const endpoint = apiService?.endpoint ?? '' diff --git a/studio/pages/project/[ref]/api/index.tsx b/studio/pages/project/[ref]/api/index.tsx index 9bad3b62f70..4a793b45190 100644 --- a/studio/pages/project/[ref]/api/index.tsx +++ b/studio/pages/project/[ref]/api/index.tsx @@ -5,13 +5,13 @@ import { FC, createContext, useContext, useEffect, useState } from 'react' import { observer, useLocalObservable } from 'mobx-react-lite' import { NextPageWithLayout } from 'types' -import { API_URL } from 'lib/constants' import { checkPermissions, useStore } from 'hooks' import { get } from 'lib/common/fetch' import { snakeToCamel } from 'lib/helpers' 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' const PageContext = createContext(null) @@ -70,9 +70,11 @@ const DocView: FC = observer(({}) => { const [selectedLang, setSelectedLang] = useState('js') const [showApiKey, setShowApiKey] = useState(DEFAULT_KEY) - const { data, error }: any = useSWR(`${API_URL}/props/project/${PageState.projectRef}/api`, get) - const API_KEY = data?.autoApiService?.defaultApiKey - const swaggerUrl = data?.autoApiService?.restUrl + const { data, error } = useProjectSettingsQuery({ projectRef: PageState.projectRef as string }) + const API_KEY = data?.autoApiService.service_api_keys.find((key: any) => key.tags === 'anon') + ? data.autoApiService.defaultApiKey + : undefined + const swaggerUrl = data?.autoApiService.restUrl const headers: any = { apikey: API_KEY } const canReadServiceKey = checkPermissions( @@ -80,7 +82,7 @@ const DocView: FC = observer(({}) => { 'service_api_keys.service_role_key' ) - if (API_KEY?.length > 40) headers['Authorization'] = `Bearer ${API_KEY}` + if (API_KEY) headers['Authorization'] = `Bearer ${API_KEY}` const { data: jsonSchema, error: jsonSchemaError } = useSWR( () => swaggerUrl, @@ -116,7 +118,7 @@ const DocView: FC = observer(({}) => { // Data Loaded const autoApiService = { ...data.autoApiService, - endpoint: `${data.apiService.protocol ?? 'https'}://${data.apiService.endpoint ?? '-'}`, + endpoint: `${data.autoApiService.protocol ?? 'https'}://${data.autoApiService.endpoint ?? '-'}`, } const { query } = router @@ -172,7 +174,7 @@ const DocView: FC = observer(({}) => { key="anon" onClick={() => setShowApiKey({ - key: autoApiService?.defaultApiKey, + key: API_KEY, name: 'anon (public)', }) } @@ -184,7 +186,7 @@ const DocView: FC = observer(({}) => { key="service" onClick={() => setShowApiKey({ - key: autoApiService?.serviceApiKey, + key: autoApiService.serviceApiKey, name: 'service_role (secret)', }) } diff --git a/studio/pages/project/[ref]/functions/[id]/details.tsx b/studio/pages/project/[ref]/functions/[id]/details.tsx index e668b4903a6..248434f9d84 100644 --- a/studio/pages/project/[ref]/functions/[id]/details.tsx +++ b/studio/pages/project/[ref]/functions/[id]/details.tsx @@ -99,9 +99,8 @@ const PageLayout: NextPageWithLayout = () => { // Get the API service const { data: settings } = useProjectSettingsQuery({ projectRef: ref as string }) const apiService = settings?.autoApiService - const apiKeys = apiService?.service_api_keys ?? [] - const anonKey = apiKeys.find((x: any) => x.name === 'anon key') - ? apiService?.defaultApiKey + const anonKey = apiService?.service_api_keys.find((x: any) => x.name === 'anon key') + ? apiService.defaultApiKey : undefined const endpoint = apiService?.endpoint ?? '' From 995b737a338fdac3eb9efa819471884735dbdd58 Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Thu, 19 Jan 2023 17:52:58 +0100 Subject: [PATCH 19/64] Upgrade jsonwebtoken via transitive dependency --- package-lock.json | 141 +++++++++++++++------------------------------- 1 file changed, 44 insertions(+), 97 deletions(-) diff --git a/package-lock.json b/package-lock.json index 95377a815ed..16329d13baa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10108,9 +10108,9 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, "node_modules/@types/jsonwebtoken": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", - "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", + "integrity": "sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==", "dependencies": { "@types/node": "*" } @@ -22693,32 +22693,32 @@ } }, "node_modules/jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", "dependencies": { "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", + "lodash": "^4.17.21", "ms": "^2.1.1", - "semver": "^5.6.0" + "semver": "^7.3.8" }, "engines": { - "node": ">=4", - "npm": ">=1.4.28" + "node": ">=12", + "npm": ">=6" } }, "node_modules/jsonwebtoken/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/jsrsasign": { @@ -23024,31 +23024,11 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -23070,11 +23050,6 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, "node_modules/lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -35246,12 +35221,12 @@ } }, "node_modules/universal-github-app-jwt": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.0.tgz", - "integrity": "sha512-3b+ocAjjz4JTyqaOT+NNBd5BtTuvJTxWElIoeHSVelUV9J3Jp7avmQTdLKCaoqi/5Ox2o/q+VK19TJ233rVXVQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", + "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", "dependencies": { - "@types/jsonwebtoken": "^8.3.3", - "jsonwebtoken": "^8.5.1" + "@types/jsonwebtoken": "^9.0.0", + "jsonwebtoken": "^9.0.0" } }, "node_modules/universal-user-agent": { @@ -44899,9 +44874,9 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, "@types/jsonwebtoken": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", - "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", + "integrity": "sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==", "requires": { "@types/node": "*" } @@ -55285,26 +55260,23 @@ } }, "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", "requires": { "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", + "lodash": "^4.17.21", "ms": "^2.1.1", - "semver": "^5.6.0" + "semver": "^7.3.8" }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } } } }, @@ -55550,31 +55522,11 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -55596,11 +55548,6 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, "lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -65224,12 +65171,12 @@ } }, "universal-github-app-jwt": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.0.tgz", - "integrity": "sha512-3b+ocAjjz4JTyqaOT+NNBd5BtTuvJTxWElIoeHSVelUV9J3Jp7avmQTdLKCaoqi/5Ox2o/q+VK19TJ233rVXVQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", + "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", "requires": { - "@types/jsonwebtoken": "^8.3.3", - "jsonwebtoken": "^8.5.1" + "@types/jsonwebtoken": "^9.0.0", + "jsonwebtoken": "^9.0.0" } }, "universal-user-agent": { From dab1862bd25abcba67dc23ab862fd7827e09a39d Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Thu, 19 Jan 2023 18:18:09 +0100 Subject: [PATCH 20/64] Update decode-uri-component --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 16329d13baa..e34a81acac5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15492,9 +15492,9 @@ } }, "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "engines": { "node": ">=0.10" } @@ -49200,9 +49200,9 @@ } }, "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" }, "dedent": { "version": "0.7.0", From 9a74b3d6305b5718fe5a3a03726c245d4c641676 Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Fri, 27 Jan 2023 11:32:17 +0800 Subject: [PATCH 21/64] chore: update base dependency octokit --- apps/www/package.json | 2 +- package-lock.json | 674 ++++++++++++++++++++++++++++++++---------- 2 files changed, 519 insertions(+), 157 deletions(-) diff --git a/apps/www/package.json b/apps/www/package.json index 5dd1f08a31f..69108a1066b 100644 --- a/apps/www/package.json +++ b/apps/www/package.json @@ -36,7 +36,7 @@ "next-seo": "^4.20.0", "next-transpile-modules": "^9.0.0", "nodemailer": "^6.7.3", - "octokit": "^2.0.10", + "octokit": "^2.0.14", "parse-numeric-range": "^1.3.0", "react": "^17.0.2", "react-copy-to-clipboard": "^5.0.2", diff --git a/package-lock.json b/package-lock.json index e34a81acac5..c3483dcb938 100644 --- a/package-lock.json +++ b/package-lock.json @@ -868,7 +868,7 @@ "next-seo": "^4.20.0", "next-transpile-modules": "^9.0.0", "nodemailer": "^6.7.3", - "octokit": "^2.0.10", + "octokit": "^2.0.14", "parse-numeric-range": "^1.3.0", "react": "^17.0.2", "react-copy-to-clipboard": "^5.0.2", @@ -5096,51 +5096,77 @@ } }, "node_modules/@octokit/app": { - "version": "13.0.11", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-13.0.11.tgz", - "integrity": "sha512-qlUynCN1+BNYQ6VaJOMCqDdCo/2yzPixuoFnbcUThakRV+5969Tp+LTAtsZWjjb/tUHfutaAYOnsia1EGTAzfA==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@octokit/app/-/app-13.1.2.tgz", + "integrity": "sha512-Kf+h5sa1SOI33hFsuHvTsWj1jUrjp1x4MuiJBq7U/NicfEGa6nArPUoDnyfP/YTmcQ5cQ5yvOgoIBkbwPg6kzQ==", "dependencies": { - "@octokit/auth-app": "^4.0.0", + "@octokit/auth-app": "^4.0.8", "@octokit/auth-unauthenticated": "^3.0.0", "@octokit/core": "^4.0.0", "@octokit/oauth-app": "^4.0.7", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/types": "^8.0.0", + "@octokit/plugin-paginate-rest": "^6.0.0", + "@octokit/types": "^9.0.0", "@octokit/webhooks": "^10.0.0" }, "engines": { "node": ">= 14" } }, + "node_modules/@octokit/app/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/app/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, "node_modules/@octokit/auth-app": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.7.tgz", - "integrity": "sha512-hjjVCoI/+1oLminVHJPPexguYb9FP4Q60hEHExgy1uAKMMJ5Zf8iJIeRJlIIqneTb4vt7NvUTEj4YDxBLZ1FLg==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.9.tgz", + "integrity": "sha512-VFpKIXhHO+kVJtane5cEvdYPtjDKCOI0uKsRrsZfJP+uEu7rcPbQCLCcRKgyT+mUIzGr1IIOmwP/lFqSip1dXA==", "dependencies": { "@octokit/auth-oauth-app": "^5.0.0", "@octokit/auth-oauth-user": "^2.0.0", "@octokit/request": "^6.0.0", "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "@types/lru-cache": "^5.1.0", "deprecation": "^2.3.1", "lru-cache": "^6.0.0", - "universal-github-app-jwt": "^1.0.1", + "universal-github-app-jwt": "^1.1.1", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 14" } }, + "node_modules/@octokit/auth-app/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/auth-app/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, "node_modules/@octokit/auth-oauth-app": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.4.tgz", - "integrity": "sha512-zlWuii5hAN50vsV6SJC+uIJ7SMhyWjQMEmKJQxkmNDlieE9LjnkZnbOjqRsfcG7VO7WTl4K8ccpo/3A7Kdpmrw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.5.tgz", + "integrity": "sha512-UPX1su6XpseaeLVCi78s9droxpGtBWIgz9XhXAx9VXabksoF0MyI5vaa1zo1njyYt6VaAjFisC2A2Wchcu2WmQ==", "dependencies": { "@octokit/auth-oauth-device": "^4.0.0", "@octokit/auth-oauth-user": "^2.0.0", "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "@types/btoa-lite": "^1.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" @@ -5149,29 +5175,55 @@ "node": ">= 14" } }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, "node_modules/@octokit/auth-oauth-device": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.3.tgz", - "integrity": "sha512-KPTx5nMntKjNZzzltO3X4T68v22rd7Cp/TcLJXQE2U8aXPcZ9LFuww9q9Q5WUNSu3jwi3lRwzfkPguRfz1R8Vg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.4.tgz", + "integrity": "sha512-Xl85BZYfqCMv+Uvz33nVVUjE7I/PVySNaK6dRRqlkvYcArSr9vRcZC9KVjXYObGRTCN6mISeYdakAZvWEN4+Jw==", "dependencies": { "@octokit/oauth-methods": "^2.0.0", "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "universal-user-agent": "^6.0.0" }, "engines": { "node": ">= 14" } }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, "node_modules/@octokit/auth-oauth-user": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.0.4.tgz", - "integrity": "sha512-HrbDzTPqz6GcGSOUkR+wSeF3vEqsb9NMsmPja/qqqdiGmlk/Czkxctc3KeWYogHonp62Ml4kjz2VxKawrFsadQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.1.tgz", + "integrity": "sha512-JgqnNNPf9CaWLxWm9uh2WgxcaVYhxBR09NVIPTiMU2dVZ3FObOHs3njBiLNw+zq84k+rEdm5Y7AsiASrZ84Apg==", "dependencies": { "@octokit/auth-oauth-device": "^4.0.0", "@octokit/oauth-methods": "^2.0.0", "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" }, @@ -5179,6 +5231,19 @@ "node": ">= 14" } }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, "node_modules/@octokit/auth-token": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", @@ -5191,17 +5256,30 @@ } }, "node_modules/@octokit/auth-unauthenticated": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.3.tgz", - "integrity": "sha512-IyfLo1T5GmIC9+07hHGlD3gHtZI1Bona8PLhHXUnwcYDuZt0BhjlNJDYMoPG21C4r7v7+ZSxQHBKrGgkxpYb7A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.4.tgz", + "integrity": "sha512-AT74XGBylcLr4lmUp1s6mjSUgphGdlse21Qjtv5DzpX1YOl5FXKwvNcZWESdhyBbpDT8VkVyLFqa/7a7eqpPNw==", "dependencies": { "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0" + "@octokit/types": "^9.0.0" }, "engines": { "node": ">= 14" } }, + "node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, "node_modules/@octokit/core": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz", @@ -5254,9 +5332,9 @@ } }, "node_modules/@octokit/oauth-app": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-4.1.0.tgz", - "integrity": "sha512-dGZcfmwPkS3VZ9CNnvNszp6mlnbOZh9+/uPNiK/AkvSUJGXTbUVIZTkMvAjbyIFw2WlIx++hhtrTeKNJq6uMbw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-4.2.0.tgz", + "integrity": "sha512-gyGclT77RQMkVUEW3YBeAKY+LBSc5u3eC9Wn/Uwt3WhuKuu9mrV18EnNpDqmeNll+mdV02yyBROU29Tlili6gg==", "dependencies": { "@octokit/auth-oauth-app": "^5.0.0", "@octokit/auth-oauth-user": "^2.0.0", @@ -5281,31 +5359,44 @@ } }, "node_modules/@octokit/oauth-methods": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.4.tgz", - "integrity": "sha512-RDSa6XL+5waUVrYSmOlYROtPq0+cfwppP4VaQY/iIei3xlFb0expH6YNsxNrZktcLhJWSpm9uzeom+dQrXlS3A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.5.tgz", + "integrity": "sha512-yQP6B5gE3axNxuM3U9KqWs/ErAQ+WLPaPgC/7EjsZsQibkf8sjdAfF8/y/EJW+Dd05XQvadX4WhQZPMnO1SE1A==", "dependencies": { "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", + "@octokit/request": "^6.2.3", + "@octokit/request-error": "^3.0.3", + "@octokit/types": "^9.0.0", "btoa-lite": "^1.0.0" }, "engines": { "node": ">= 14" } }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, "node_modules/@octokit/openapi-types": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz", - "integrity": "sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz", + "integrity": "sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==", "dependencies": { - "@octokit/types": "^8.0.0" + "@octokit/types": "^9.0.0" }, "engines": { "node": ">= 14" @@ -5314,12 +5405,25 @@ "@octokit/core": ">=4" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz", - "integrity": "sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw==", + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", "dependencies": { - "@octokit/types": "^8.0.0", + "@octokit/openapi-types": "^16.0.0" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz", + "integrity": "sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==", + "dependencies": { + "@octokit/types": "^9.0.0", "deprecation": "^2.3.1" }, "engines": { @@ -5329,6 +5433,19 @@ "@octokit/core": ">=3" } }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, "node_modules/@octokit/plugin-retry": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-4.0.3.tgz", @@ -5345,11 +5462,11 @@ } }, "node_modules/@octokit/plugin-throttling": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-4.3.2.tgz", - "integrity": "sha512-ZaCK599h3tzcoy0Jtdab95jgmD7X9iAk59E2E7hYKCAmnURaI4WpzwL9vckImilybUGrjY1JOWJapDs2N2D3vw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-5.0.1.tgz", + "integrity": "sha512-I4qxs7wYvYlFuY3PAUGWAVPhFXG3RwnvTiSr5Fu/Auz7bYhDLnzS2MjwV8nGLq/FPrWwYiweeZrI5yjs1YG4tQ==", "dependencies": { - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "bottleneck": "^2.15.3" }, "engines": { @@ -5359,14 +5476,27 @@ "@octokit/core": "^4.0.0" } }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, "node_modules/@octokit/request": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz", - "integrity": "sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz", + "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", "dependencies": { "@octokit/endpoint": "^7.0.0", "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" @@ -5376,11 +5506,11 @@ } }, "node_modules/@octokit/request-error": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz", - "integrity": "sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "dependencies": { - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, @@ -5388,6 +5518,32 @@ "node": ">= 14" } }, + "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/request-error/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, + "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/@octokit/request/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, "node_modules/@octokit/request/node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -5405,13 +5561,13 @@ } }, "node_modules/@octokit/webhooks": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.3.1.tgz", - "integrity": "sha512-TSGiz9+IxP8Oh8LVFwhzLYTJ+8T/U6/fC/i1/iB39izyFzoEub3wNHlsfh8A6PUbde70w2pLr/O2ELlyQdrLgg==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.7.0.tgz", + "integrity": "sha512-zZBbQMpXXnK/ki/utrFG/TuWv9545XCSLibfDTxrYqR1PmU6zel02ebTOrA7t5XIGHzlEOc/NgISUIBUe7pMFA==", "dependencies": { "@octokit/request-error": "^3.0.0", "@octokit/webhooks-methods": "^3.0.0", - "@octokit/webhooks-types": "6.6.0", + "@octokit/webhooks-types": "6.10.0", "aggregate-error": "^3.1.0" }, "engines": { @@ -5419,17 +5575,17 @@ } }, "node_modules/@octokit/webhooks-methods": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-3.0.1.tgz", - "integrity": "sha512-XftYVcBxtzC2G05kdBNn9IYLtQ+Cz6ufKkjZd0DU/qGaZEFTPzM2OabXAWG5tvL0q/I+Exio1JnRiPfetiMSEw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-3.0.2.tgz", + "integrity": "sha512-Vlnv5WBscf07tyAvfDbp7pTkMZUwk7z7VwEF32x6HqI+55QRwBTcT+D7DDjZXtad/1dU9E32x0HmtDlF9VIRaQ==", "engines": { "node": ">= 14" } }, "node_modules/@octokit/webhooks-types": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-6.6.0.tgz", - "integrity": "sha512-czpEwg4UA3hb0G345BVk1zMXWwX0Qdaa4F/z7C3bP6baQ9AWY/VmCYydLU+Pi4z3aOPEJYCvt9zVhZ5CutqBKw==" + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-6.10.0.tgz", + "integrity": "sha512-lDNv83BeEyxxukdQ0UttiUXawk9+6DkdjjFtm2GFED+24IQhTVaoSbwV9vWWKONyGLzRmCQqZmoEWkDhkEmPlw==" }, "node_modules/@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.9", @@ -9858,9 +10014,9 @@ "dev": true }, "node_modules/@types/aws-lambda": { - "version": "8.10.109", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.109.tgz", - "integrity": "sha512-/ME92FneNyXQzrAfcnQQlW1XkCZGPDlpi2ao1MJwecN+6SbeonKeggU8eybv1DfKli90FAVT1MlIZVXfwVuCyg==" + "version": "8.10.110", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.110.tgz", + "integrity": "sha512-r6egf2Cwv/JaFTTrF9OXFVUB3j/SXTgM9BwrlbBRjWAa2Tu6GWoDoLflppAZ8uSfbUJdXvC7Br3DjuN9pQ2NUQ==" }, "node_modules/@types/babel__core": { "version": "7.1.20", @@ -26501,23 +26657,36 @@ "dev": true }, "node_modules/octokit": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-2.0.10.tgz", - "integrity": "sha512-sI15RZVaV9iyqLLEky4i++tMM48Fo9a80zrpOXMdAtbomznBLDi/moi9mAjJg7Ii+EaSEyaWOVIh3M/Vk/a5mw==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/octokit/-/octokit-2.0.14.tgz", + "integrity": "sha512-z6cgZBFxirpFEQ1La8Lg83GCs5hOV2EPpkYYdjsGNbfQMv8qUGjq294MiRBCbZqLufviakGsPUxaNKe3JrPmsA==", "dependencies": { - "@octokit/app": "^13.0.5", + "@octokit/app": "^13.1.1", "@octokit/core": "^4.0.4", "@octokit/oauth-app": "^4.0.6", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0", + "@octokit/plugin-paginate-rest": "^6.0.0", + "@octokit/plugin-rest-endpoint-methods": "^7.0.0", "@octokit/plugin-retry": "^4.0.3", - "@octokit/plugin-throttling": "^4.0.1", - "@octokit/types": "^8.0.0" + "@octokit/plugin-throttling": "^5.0.0", + "@octokit/types": "^9.0.0" }, "engines": { "node": ">= 14" } }, + "node_modules/octokit/node_modules/@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "node_modules/octokit/node_modules/@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "dependencies": { + "@octokit/openapi-types": "^16.0.0" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -41066,72 +41235,147 @@ } }, "@octokit/app": { - "version": "13.0.11", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-13.0.11.tgz", - "integrity": "sha512-qlUynCN1+BNYQ6VaJOMCqDdCo/2yzPixuoFnbcUThakRV+5969Tp+LTAtsZWjjb/tUHfutaAYOnsia1EGTAzfA==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@octokit/app/-/app-13.1.2.tgz", + "integrity": "sha512-Kf+h5sa1SOI33hFsuHvTsWj1jUrjp1x4MuiJBq7U/NicfEGa6nArPUoDnyfP/YTmcQ5cQ5yvOgoIBkbwPg6kzQ==", "requires": { - "@octokit/auth-app": "^4.0.0", + "@octokit/auth-app": "^4.0.8", "@octokit/auth-unauthenticated": "^3.0.0", "@octokit/core": "^4.0.0", "@octokit/oauth-app": "^4.0.7", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/types": "^8.0.0", + "@octokit/plugin-paginate-rest": "^6.0.0", + "@octokit/types": "^9.0.0", "@octokit/webhooks": "^10.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + } } }, "@octokit/auth-app": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.7.tgz", - "integrity": "sha512-hjjVCoI/+1oLminVHJPPexguYb9FP4Q60hEHExgy1uAKMMJ5Zf8iJIeRJlIIqneTb4vt7NvUTEj4YDxBLZ1FLg==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.9.tgz", + "integrity": "sha512-VFpKIXhHO+kVJtane5cEvdYPtjDKCOI0uKsRrsZfJP+uEu7rcPbQCLCcRKgyT+mUIzGr1IIOmwP/lFqSip1dXA==", "requires": { "@octokit/auth-oauth-app": "^5.0.0", "@octokit/auth-oauth-user": "^2.0.0", "@octokit/request": "^6.0.0", "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "@types/lru-cache": "^5.1.0", "deprecation": "^2.3.1", "lru-cache": "^6.0.0", - "universal-github-app-jwt": "^1.0.1", + "universal-github-app-jwt": "^1.1.1", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + } } }, "@octokit/auth-oauth-app": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.4.tgz", - "integrity": "sha512-zlWuii5hAN50vsV6SJC+uIJ7SMhyWjQMEmKJQxkmNDlieE9LjnkZnbOjqRsfcG7VO7WTl4K8ccpo/3A7Kdpmrw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.5.tgz", + "integrity": "sha512-UPX1su6XpseaeLVCi78s9droxpGtBWIgz9XhXAx9VXabksoF0MyI5vaa1zo1njyYt6VaAjFisC2A2Wchcu2WmQ==", "requires": { "@octokit/auth-oauth-device": "^4.0.0", "@octokit/auth-oauth-user": "^2.0.0", "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "@types/btoa-lite": "^1.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + } } }, "@octokit/auth-oauth-device": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.3.tgz", - "integrity": "sha512-KPTx5nMntKjNZzzltO3X4T68v22rd7Cp/TcLJXQE2U8aXPcZ9LFuww9q9Q5WUNSu3jwi3lRwzfkPguRfz1R8Vg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.4.tgz", + "integrity": "sha512-Xl85BZYfqCMv+Uvz33nVVUjE7I/PVySNaK6dRRqlkvYcArSr9vRcZC9KVjXYObGRTCN6mISeYdakAZvWEN4+Jw==", "requires": { "@octokit/oauth-methods": "^2.0.0", "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + } } }, "@octokit/auth-oauth-user": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.0.4.tgz", - "integrity": "sha512-HrbDzTPqz6GcGSOUkR+wSeF3vEqsb9NMsmPja/qqqdiGmlk/Czkxctc3KeWYogHonp62Ml4kjz2VxKawrFsadQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.1.tgz", + "integrity": "sha512-JgqnNNPf9CaWLxWm9uh2WgxcaVYhxBR09NVIPTiMU2dVZ3FObOHs3njBiLNw+zq84k+rEdm5Y7AsiASrZ84Apg==", "requires": { "@octokit/auth-oauth-device": "^4.0.0", "@octokit/oauth-methods": "^2.0.0", "@octokit/request": "^6.0.0", - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + } } }, "@octokit/auth-token": { @@ -41143,12 +41387,27 @@ } }, "@octokit/auth-unauthenticated": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.3.tgz", - "integrity": "sha512-IyfLo1T5GmIC9+07hHGlD3gHtZI1Bona8PLhHXUnwcYDuZt0BhjlNJDYMoPG21C4r7v7+ZSxQHBKrGgkxpYb7A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.4.tgz", + "integrity": "sha512-AT74XGBylcLr4lmUp1s6mjSUgphGdlse21Qjtv5DzpX1YOl5FXKwvNcZWESdhyBbpDT8VkVyLFqa/7a7eqpPNw==", "requires": { "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0" + "@octokit/types": "^9.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + } } }, "@octokit/core": { @@ -41193,9 +41452,9 @@ } }, "@octokit/oauth-app": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-4.1.0.tgz", - "integrity": "sha512-dGZcfmwPkS3VZ9CNnvNszp6mlnbOZh9+/uPNiK/AkvSUJGXTbUVIZTkMvAjbyIFw2WlIx++hhtrTeKNJq6uMbw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-4.2.0.tgz", + "integrity": "sha512-gyGclT77RQMkVUEW3YBeAKY+LBSc5u3eC9Wn/Uwt3WhuKuu9mrV18EnNpDqmeNll+mdV02yyBROU29Tlili6gg==", "requires": { "@octokit/auth-oauth-app": "^5.0.0", "@octokit/auth-oauth-user": "^2.0.0", @@ -41214,15 +41473,30 @@ "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==" }, "@octokit/oauth-methods": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.4.tgz", - "integrity": "sha512-RDSa6XL+5waUVrYSmOlYROtPq0+cfwppP4VaQY/iIei3xlFb0expH6YNsxNrZktcLhJWSpm9uzeom+dQrXlS3A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.5.tgz", + "integrity": "sha512-yQP6B5gE3axNxuM3U9KqWs/ErAQ+WLPaPgC/7EjsZsQibkf8sjdAfF8/y/EJW+Dd05XQvadX4WhQZPMnO1SE1A==", "requires": { "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", + "@octokit/request": "^6.2.3", + "@octokit/request-error": "^3.0.3", + "@octokit/types": "^9.0.0", "btoa-lite": "^1.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + } } }, "@octokit/openapi-types": { @@ -41231,20 +41505,50 @@ "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" }, "@octokit/plugin-paginate-rest": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz", - "integrity": "sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz", + "integrity": "sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==", "requires": { - "@octokit/types": "^8.0.0" + "@octokit/types": "^9.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + } } }, "@octokit/plugin-rest-endpoint-methods": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz", - "integrity": "sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz", + "integrity": "sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==", "requires": { - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "deprecation": "^2.3.1" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + } } }, "@octokit/plugin-retry": { @@ -41257,27 +41561,55 @@ } }, "@octokit/plugin-throttling": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-4.3.2.tgz", - "integrity": "sha512-ZaCK599h3tzcoy0Jtdab95jgmD7X9iAk59E2E7hYKCAmnURaI4WpzwL9vckImilybUGrjY1JOWJapDs2N2D3vw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-5.0.1.tgz", + "integrity": "sha512-I4qxs7wYvYlFuY3PAUGWAVPhFXG3RwnvTiSr5Fu/Auz7bYhDLnzS2MjwV8nGLq/FPrWwYiweeZrI5yjs1YG4tQ==", "requires": { - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "bottleneck": "^2.15.3" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + } } }, "@octokit/request": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz", - "integrity": "sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz", + "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", "requires": { "@octokit/endpoint": "^7.0.0", "@octokit/request-error": "^3.0.0", - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" }, "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + }, "is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -41286,13 +41618,28 @@ } }, "@octokit/request-error": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz", - "integrity": "sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "requires": { - "@octokit/types": "^8.0.0", + "@octokit/types": "^9.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + } } }, "@octokit/types": { @@ -41304,25 +41651,25 @@ } }, "@octokit/webhooks": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.3.1.tgz", - "integrity": "sha512-TSGiz9+IxP8Oh8LVFwhzLYTJ+8T/U6/fC/i1/iB39izyFzoEub3wNHlsfh8A6PUbde70w2pLr/O2ELlyQdrLgg==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.7.0.tgz", + "integrity": "sha512-zZBbQMpXXnK/ki/utrFG/TuWv9545XCSLibfDTxrYqR1PmU6zel02ebTOrA7t5XIGHzlEOc/NgISUIBUe7pMFA==", "requires": { "@octokit/request-error": "^3.0.0", "@octokit/webhooks-methods": "^3.0.0", - "@octokit/webhooks-types": "6.6.0", + "@octokit/webhooks-types": "6.10.0", "aggregate-error": "^3.1.0" } }, "@octokit/webhooks-methods": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-3.0.1.tgz", - "integrity": "sha512-XftYVcBxtzC2G05kdBNn9IYLtQ+Cz6ufKkjZd0DU/qGaZEFTPzM2OabXAWG5tvL0q/I+Exio1JnRiPfetiMSEw==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-3.0.2.tgz", + "integrity": "sha512-Vlnv5WBscf07tyAvfDbp7pTkMZUwk7z7VwEF32x6HqI+55QRwBTcT+D7DDjZXtad/1dU9E32x0HmtDlF9VIRaQ==" }, "@octokit/webhooks-types": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-6.6.0.tgz", - "integrity": "sha512-czpEwg4UA3hb0G345BVk1zMXWwX0Qdaa4F/z7C3bP6baQ9AWY/VmCYydLU+Pi4z3aOPEJYCvt9zVhZ5CutqBKw==" + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-6.10.0.tgz", + "integrity": "sha512-lDNv83BeEyxxukdQ0UttiUXawk9+6DkdjjFtm2GFED+24IQhTVaoSbwV9vWWKONyGLzRmCQqZmoEWkDhkEmPlw==" }, "@pmmmwh/react-refresh-webpack-plugin": { "version": "0.5.9", @@ -44625,9 +44972,9 @@ "dev": true }, "@types/aws-lambda": { - "version": "8.10.109", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.109.tgz", - "integrity": "sha512-/ME92FneNyXQzrAfcnQQlW1XkCZGPDlpi2ao1MJwecN+6SbeonKeggU8eybv1DfKli90FAVT1MlIZVXfwVuCyg==" + "version": "8.10.110", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.110.tgz", + "integrity": "sha512-r6egf2Cwv/JaFTTrF9OXFVUB3j/SXTgM9BwrlbBRjWAa2Tu6GWoDoLflppAZ8uSfbUJdXvC7Br3DjuN9pQ2NUQ==" }, "@types/babel__core": { "version": "7.1.20", @@ -58042,18 +58389,33 @@ "dev": true }, "octokit": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-2.0.10.tgz", - "integrity": "sha512-sI15RZVaV9iyqLLEky4i++tMM48Fo9a80zrpOXMdAtbomznBLDi/moi9mAjJg7Ii+EaSEyaWOVIh3M/Vk/a5mw==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/octokit/-/octokit-2.0.14.tgz", + "integrity": "sha512-z6cgZBFxirpFEQ1La8Lg83GCs5hOV2EPpkYYdjsGNbfQMv8qUGjq294MiRBCbZqLufviakGsPUxaNKe3JrPmsA==", "requires": { - "@octokit/app": "^13.0.5", + "@octokit/app": "^13.1.1", "@octokit/core": "^4.0.4", "@octokit/oauth-app": "^4.0.6", - "@octokit/plugin-paginate-rest": "^5.0.0", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0", + "@octokit/plugin-paginate-rest": "^6.0.0", + "@octokit/plugin-rest-endpoint-methods": "^7.0.0", "@octokit/plugin-retry": "^4.0.3", - "@octokit/plugin-throttling": "^4.0.1", - "@octokit/types": "^8.0.0" + "@octokit/plugin-throttling": "^5.0.0", + "@octokit/types": "^9.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", + "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==" + }, + "@octokit/types": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", + "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "requires": { + "@octokit/openapi-types": "^16.0.0" + } + } } }, "on-finished": { From 0f09af1336a80c335a0811197ce391ce5f9d150e Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Fri, 20 Jan 2023 14:23:07 +0000 Subject: [PATCH 22/64] Remove Backups from self-hosting --- .../DatabaseLayout/DatabaseMenu.utils.ts | 17 ++++++++++------ studio/pages/api/database/[ref]/backups.ts | 20 ------------------- 2 files changed, 11 insertions(+), 26 deletions(-) delete mode 100644 studio/pages/api/database/[ref]/backups.ts diff --git a/studio/components/layouts/DatabaseLayout/DatabaseMenu.utils.ts b/studio/components/layouts/DatabaseLayout/DatabaseMenu.utils.ts index b40ef67dba4..8ea9c65ca30 100644 --- a/studio/components/layouts/DatabaseLayout/DatabaseMenu.utils.ts +++ b/studio/components/layouts/DatabaseLayout/DatabaseMenu.utils.ts @@ -1,6 +1,7 @@ import { Project } from 'types' import { ProductMenuGroup } from 'components/ui/ProductMenu/ProductMenu.types' import { useFlag } from 'hooks' +import { IS_PLATFORM } from 'lib/constants' export const generateDatabaseMenu = (project?: Project): ProductMenuGroup[] => { const ref = project?.ref ?? 'default' @@ -62,12 +63,16 @@ export const generateDatabaseMenu = (project?: Project): ProductMenuGroup[] => { }, ] : []), - { - name: 'Backups', - key: 'backups', - url: `/project/${ref}/database/backups/scheduled`, - items: [], - }, + ...(IS_PLATFORM + ? [ + { + name: 'Backups', + key: 'backups', + url: `/project/${ref}/database/backups/scheduled`, + items: [], + }, + ] + : []), ], }, ] diff --git a/studio/pages/api/database/[ref]/backups.ts b/studio/pages/api/database/[ref]/backups.ts deleted file mode 100644 index 32e883b78d4..00000000000 --- a/studio/pages/api/database/[ref]/backups.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' - -export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) - -async function handler(req: NextApiRequest, res: NextApiResponse) { - const { method } = req - - switch (method) { - case 'GET': - return handleGetAll(req, res) - default: - res.setHeader('Allow', ['GET']) - res.status(405).json({ data: null, error: { message: `Method ${method} Not Allowed` } }) - } -} - -const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => { - return res.status(200).json({ tierKey: 'FREE', backups: [] }) -} From a9d3ec0708706cde36ad59fb938d806094620d5f Mon Sep 17 00:00:00 2001 From: Lakshan Perera Date: Fri, 27 Jan 2023 12:58:02 +0700 Subject: [PATCH 23/64] fix: missing async keyword in example --- examples/edge-functions/supabase/functions/oak-server/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/edge-functions/supabase/functions/oak-server/index.ts b/examples/edge-functions/supabase/functions/oak-server/index.ts index 8e96d1f0033..3f9f192f3ca 100644 --- a/examples/edge-functions/supabase/functions/oak-server/index.ts +++ b/examples/edge-functions/supabase/functions/oak-server/index.ts @@ -6,7 +6,7 @@ router .get('/oak-server', (context) => { context.response.body = 'This is an example Oak server running on Edge Functions!' }) - .post('/oak-server/greet', (context) => { + .post('/oak-server/greet', async (context) => { // Note: request body will be streamed to the function as chunks, set limit to 0 to fully read it. const result = context.request.body({ type: 'json', limit: 0 }) const body = await result.value From 35ae2fad7d8945c92fe3914de67995949f5ca2e1 Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Sun, 22 Jan 2023 09:04:32 +0000 Subject: [PATCH 24/64] Upgrade @supabase/postgres-meta --- package-lock.json | 1145 +++++++++++++++++++++++++++++++++++++++---- studio/package.json | 2 +- 2 files changed, 1061 insertions(+), 86 deletions(-) diff --git a/package-lock.json b/package-lock.json index c3483dcb938..ab3062636ff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3404,8 +3404,7 @@ "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" }, "node_modules/@hcaptcha/react-hcaptcha": { "version": "1.4.4", @@ -4406,6 +4405,116 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/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/@mapbox/node-pre-gyp/node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@mapbox/node-pre-gyp/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/@mdx-js/loader": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-2.1.5.tgz", @@ -5048,7 +5157,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" @@ -5058,7 +5166,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -5074,7 +5181,6 @@ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -5087,7 +5193,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -7271,9 +7376,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.19.2.tgz", - "integrity": "sha512-0U/RVPZQw1QxhrbKV0o281ZWI1Ve3osJnyEYnwOp3slydIQHyXumbJANJeNv9BqABDiHWlmzsxSVopPHMvt3Aw==" + "version": "0.25.21", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz", + "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==" }, "node_modules/@sinonjs/commons": { "version": "1.8.5", @@ -9750,17 +9855,29 @@ } }, "node_modules/@supabase/postgres-meta": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/@supabase/postgres-meta/-/postgres-meta-0.26.1.tgz", - "integrity": "sha512-z4ws1fD+sPwb+J2PRMe2/Oe4HuVwGjPESjFqCR8uiWauTlfbtYR0bXFPMxPA6SkJFqOq/86uJPwzHgHURWZDiA==", + "version": "0.60.0", + "resolved": "https://registry.npmjs.org/@supabase/postgres-meta/-/postgres-meta-0.60.0.tgz", + "integrity": "sha512-0KmqWD4uaezoMA3AbPGIM5f9I26MRWNBfiv6zVcpwKNEb4m0QWdEZYpQ8Bp1z/03SrMq+h/4sXEALX/Ng3BZUg==", "dependencies": { - "@sinclair/typebox": "^0.19.2", + "@sinclair/typebox": "^0.25.1", "pg": "^8.7.1", - "pg-format": "^1.0.4" + "pg-format": "^1.0.4", + "pgsql-parser": "^13.3.0", + "postgres-array": "^3.0.1", + "prettier": "^2.6.0", + "prettier-plugin-sql": "^0.12.1" }, "engines": { - "node": ">=14 <15", - "npm": ">=7" + "node": ">=16", + "npm": ">=8" + } + }, + "node_modules/@supabase/postgres-meta/node_modules/postgres-array": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.1.tgz", + "integrity": "sha512-h7i53Dw2Yq3a1uuZ6lbVFAkvMMwssJ8jkzeAg0XaZm1XIFF/t/s+tockdqbWTymyEm07dVenOQbFisEi+kj8uA==", + "engines": { + "node": ">=12" } }, "node_modules/@supabase/postgrest-js": { @@ -9964,7 +10081,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, "engines": { "node": ">= 6" } @@ -11142,6 +11258,11 @@ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -11222,6 +11343,27 @@ "node": ">= 6.0.0" } }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/agentkeepalive/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -12627,8 +12769,6 @@ "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "optional": true, "engines": { "node": ">=0.6" } @@ -13067,7 +13207,6 @@ "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", @@ -13096,7 +13235,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -13108,7 +13246,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -13369,7 +13506,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, "engines": { "node": ">=10" } @@ -13700,7 +13836,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, "bin": { "color-support": "bin.js" } @@ -15842,6 +15977,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -15955,6 +16098,11 @@ "node": ">=8" } }, + "node_modules/discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" + }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", @@ -16138,6 +16286,11 @@ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, + "node_modules/dotty": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dotty/-/dotty-0.1.2.tgz", + "integrity": "sha512-V0EWmKeH3DEhMwAZ+8ZB2Ao4OK6p++Z0hsDtZq3N0+0ZMVqkzrcEGROvOnZpLnvBg5PTNG23JEDLAm64gPaotQ==" + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -16241,6 +16394,27 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -16300,6 +16474,19 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + }, "node_modules/errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -18422,7 +18609,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -19716,6 +19902,11 @@ "entities": "^2.0.0" } }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -19736,7 +19927,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -19772,6 +19962,14 @@ "node": ">=10.17.0" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -20067,8 +20265,7 @@ "node_modules/ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -20384,6 +20581,11 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + }, "node_modules/is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -23028,6 +23230,17 @@ "node": ">= 0.8.0" } }, + "node_modules/libpg-query": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.1.tgz", + "integrity": "sha512-RLvnKPLWngNR7bNep/Q9euPcfFJVFfDg/iP13lYGxcSI01emS/1vbTw6EBd8UordweWFdvUuK+31sHp104dukA==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.8", + "node-addon-api": "^1.6.3", + "node-gyp": "^8.0.0" + } + }, "node_modules/lie": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", @@ -23357,6 +23570,32 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "devOptional": true }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -25189,7 +25428,6 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -25201,7 +25439,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -25209,11 +25446,26 @@ "node": ">= 8" } }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -25225,7 +25477,17 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dependencies": { "minipass": "^3.0.0" }, @@ -25237,7 +25499,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -25335,6 +25596,11 @@ "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", "integrity": "sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==" }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + }, "node_modules/moo-color": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.3.tgz", @@ -25466,11 +25732,36 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, + "node_modules/nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "dependencies": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + }, + "bin": { + "nearley-railroad": "bin/nearley-railroad.js", + "nearley-test": "bin/nearley-test.js", + "nearley-unparse": "bin/nearley-unparse.js", + "nearleyc": "bin/nearleyc.js" + }, + "funding": { + "type": "individual", + "url": "https://nearley.js.org/#give-to-nearley" + } + }, + "node_modules/nearley/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -26025,6 +26316,11 @@ "tslib": "^2.0.3" } }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + }, "node_modules/node-cache": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", @@ -26086,6 +26382,29 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, "node_modules/node-gyp-build": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", @@ -26096,6 +26415,77 @@ "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-gyp/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/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -26142,6 +26532,17 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, + "node_modules/node-sql-parser": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-4.6.4.tgz", + "integrity": "sha512-OPzbsiN5VX37/HM5BgGxcoDt1ggvFUc6gdzyQzoPjk8orTOHBlgHuDUugP5oRU+CcOw8GniilvV3pt5FBxp47A==", + "dependencies": { + "big-integer": "^1.6.48" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/nodemailer": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.8.0.tgz", @@ -26155,6 +26556,20 @@ "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -27224,6 +27639,40 @@ "split2": "^4.1.0" } }, + "node_modules/pgsql-deparser": { + "version": "13.3.15", + "resolved": "https://registry.npmjs.org/pgsql-deparser/-/pgsql-deparser-13.3.15.tgz", + "integrity": "sha512-Q/ZrQWYsymM+HefLaLK6PX1DNeDdfoKAH5wzfRrOxCsxRoTouIbWhwgVp3QaiovStjVPSeYNH+pqkLH4JsSn2A==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "dotty": "^0.1.0", + "lodash": "^4.17.20", + "pgsql-enums": "^13.1.3" + } + }, + "node_modules/pgsql-enums": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/pgsql-enums/-/pgsql-enums-13.1.3.tgz", + "integrity": "sha512-h3OSGbv1rB1r3lWL3l0gHIMVMVBTzEzROkP2/Wpz2s1eDAffPf9O5x0OqrRdLzhze92S9GUqO/FrS15u027xyg==", + "dependencies": { + "@babel/runtime": "^7.4.2" + } + }, + "node_modules/pgsql-parser": { + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.1.tgz", + "integrity": "sha512-A0vaREC+i0+CPT8vmtBqtgvymiT9k/VMscS6dbK21SBUFK/7YQDb1W/DYvOp8sUH4jzmIxfArw9s0X4jI2J6Tg==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "libpg-query": "13.3.1", + "minimist": "^1.2.6", + "pgsql-deparser": "^13.3.15", + "pgsql-enums": "^13.1.3" + }, + "bin": { + "pgsql-parser": "main/cli.js" + } + }, "node_modules/phenomenon": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/phenomenon/-/phenomenon-1.6.0.tgz", @@ -29254,7 +29703,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==", - "dev": true, "bin": { "prettier": "bin-prettier.js" }, @@ -29265,6 +29713,25 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/prettier-plugin-sql": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-sql/-/prettier-plugin-sql-0.12.1.tgz", + "integrity": "sha512-2z0pMmQEC61Xywerw2FJFpEIaA9lJUjB5mj+9dfRU8HkU7iICFrIizpMjSSDMoGkhh5W+IRROVgLlgRdpphI7g==", + "dependencies": { + "node-sql-parser": "^4.4.0", + "sql-formatter": "^10.0.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + }, + "peerDependencies": { + "prettier": "^2.0.0" + } + }, "node_modules/pretty-error": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", @@ -29358,6 +29825,18 @@ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/promise.allsettled": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.6.tgz", @@ -29605,6 +30084,11 @@ "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==" }, + "node_modules/railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" + }, "node_modules/ramda": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", @@ -29615,6 +30099,18 @@ "url": "https://opencollective.com/ramda" } }, + "node_modules/randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dependencies": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", @@ -32193,6 +32689,14 @@ "node": ">=0.12" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -32963,6 +33467,15 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -33124,6 +33637,32 @@ "node": ">=0.10.0" } }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -33274,6 +33813,18 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "node_modules/sql-formatter": { + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-10.7.2.tgz", + "integrity": "sha512-YspJXMr2rKMGZY50zYRBs2nCtEO/AKDrmQOxmV2CrGEOFSXUhY3YbsOUe6lX0T/7xbBs4pAYv4UObmwf78vtKg==", + "dependencies": { + "argparse": "^2.0.1", + "nearley": "^2.20.1" + }, + "bin": { + "sql-formatter": "bin/sql-formatter-cli.js" + } + }, "node_modules/sqlstring": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", @@ -33291,7 +33842,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, "dependencies": { "minipass": "^3.1.1" }, @@ -34005,7 +34555,6 @@ "version": "6.1.12", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", - "dev": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -34022,7 +34571,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -37663,7 +38211,7 @@ "@sentry/nextjs": "^6.17.4", "@stripe/react-stripe-js": "^1.7.0", "@stripe/stripe-js": "^1.25.0", - "@supabase/postgres-meta": "^0.26.1", + "@supabase/postgres-meta": "^0.60.0", "@supabase/react-data-grid": "^7.1.0-beta.7", "@supabase/shared-types": "^0.1.29", "@supabase/supabase-js": "^2.1.1", @@ -39989,8 +40537,7 @@ "@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" }, "@hcaptcha/react-hcaptcha": { "version": "1.4.4", @@ -40813,6 +41360,93 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "dependencies": { + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "@mdx-js/loader": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-2.1.5.tgz", @@ -41199,7 +41833,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, "requires": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" @@ -41209,7 +41842,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -41220,7 +41852,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, "requires": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -41229,8 +41860,7 @@ "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" } } }, @@ -43015,9 +43645,9 @@ } }, "@sinclair/typebox": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.19.2.tgz", - "integrity": "sha512-0U/RVPZQw1QxhrbKV0o281ZWI1Ve3osJnyEYnwOp3slydIQHyXumbJANJeNv9BqABDiHWlmzsxSVopPHMvt3Aw==" + "version": "0.25.21", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz", + "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==" }, "@sinonjs/commons": { "version": "1.8.5", @@ -44766,13 +45396,24 @@ } }, "@supabase/postgres-meta": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/@supabase/postgres-meta/-/postgres-meta-0.26.1.tgz", - "integrity": "sha512-z4ws1fD+sPwb+J2PRMe2/Oe4HuVwGjPESjFqCR8uiWauTlfbtYR0bXFPMxPA6SkJFqOq/86uJPwzHgHURWZDiA==", + "version": "0.60.0", + "resolved": "https://registry.npmjs.org/@supabase/postgres-meta/-/postgres-meta-0.60.0.tgz", + "integrity": "sha512-0KmqWD4uaezoMA3AbPGIM5f9I26MRWNBfiv6zVcpwKNEb4m0QWdEZYpQ8Bp1z/03SrMq+h/4sXEALX/Ng3BZUg==", "requires": { - "@sinclair/typebox": "^0.19.2", + "@sinclair/typebox": "^0.25.1", "pg": "^8.7.1", - "pg-format": "^1.0.4" + "pg-format": "^1.0.4", + "pgsql-parser": "^13.3.0", + "postgres-array": "^3.0.1", + "prettier": "^2.6.0", + "prettier-plugin-sql": "^0.12.1" + }, + "dependencies": { + "postgres-array": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.1.tgz", + "integrity": "sha512-h7i53Dw2Yq3a1uuZ6lbVFAkvMMwssJ8jkzeAg0XaZm1XIFF/t/s+tockdqbWTymyEm07dVenOQbFisEi+kj8uA==" + } } }, "@supabase/postgrest-js": { @@ -44924,8 +45565,7 @@ "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, "@tsconfig/node10": { "version": "1.0.9", @@ -45975,6 +46615,11 @@ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -46035,6 +46680,23 @@ "debug": "4" } }, + "agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + } + } + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -47099,9 +47761,7 @@ "big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "optional": true + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" }, "big.js": { "version": "5.2.2", @@ -47464,7 +48124,6 @@ "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, "requires": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", @@ -47489,14 +48148,12 @@ "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, "requires": { "aggregate-error": "^3.0.0" } @@ -47673,8 +48330,7 @@ "chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, "chrome-trace-event": { "version": "1.0.3", @@ -47925,8 +48581,7 @@ "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, "combined-stream": { "version": "1.0.8", @@ -49694,6 +50349,11 @@ "repeat-string": "^1.5.4" } }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -49781,6 +50441,11 @@ "path-type": "^4.0.0" } }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" + }, "dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", @@ -50428,6 +51093,11 @@ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, + "dotty": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dotty/-/dotty-0.1.2.tgz", + "integrity": "sha512-V0EWmKeH3DEhMwAZ+8ZB2Ao4OK6p++Z0hsDtZq3N0+0ZMVqkzrcEGROvOnZpLnvBg5PTNG23JEDLAm64gPaotQ==" + }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -50515,6 +51185,26 @@ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -50564,6 +51254,16 @@ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + }, "errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", @@ -52208,7 +52908,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, "requires": { "minipass": "^3.0.0" } @@ -53150,6 +53849,11 @@ "entities": "^2.0.0" } }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, "http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -53167,7 +53871,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, "requires": { "@tootallnate/once": "1", "agent-base": "6", @@ -53194,6 +53897,14 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "requires": { + "ms": "^2.0.0" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -53411,8 +54122,7 @@ "ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" }, "ipaddr.js": { "version": "1.9.1", @@ -53627,6 +54337,11 @@ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + }, "is-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", @@ -55745,6 +56460,16 @@ "type-check": "~0.4.0" } }, + "libpg-query": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.1.tgz", + "integrity": "sha512-RLvnKPLWngNR7bNep/Q9euPcfFJVFfDg/iP13lYGxcSI01emS/1vbTw6EBd8UordweWFdvUuK+31sHp104dukA==", + "requires": { + "@mapbox/node-pre-gyp": "^1.0.8", + "node-addon-api": "^1.6.3", + "node-gyp": "^8.0.0" + } + }, "lie": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", @@ -56018,6 +56743,29 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "devOptional": true }, + "make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + } + }, "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -57286,7 +58034,6 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -57295,16 +58042,25 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, "requires": { "minipass": "^3.0.0" } }, + "minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, "minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, "requires": { "minipass": "^3.0.0" } @@ -57313,7 +58069,14 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "requires": { "minipass": "^3.0.0" } @@ -57322,7 +58085,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -57388,6 +58150,11 @@ "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", "integrity": "sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==" }, + "moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + }, "moo-color": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.3.tgz", @@ -57499,11 +58266,28 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, + "nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "requires": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "neo-async": { "version": "2.6.2", @@ -57904,6 +58688,11 @@ "tslib": "^2.0.3" } }, + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + }, "node-cache": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", @@ -57950,6 +58739,78 @@ } } }, + "node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "node-gyp-build": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", @@ -58003,6 +58864,14 @@ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" }, + "node-sql-parser": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-4.6.4.tgz", + "integrity": "sha512-OPzbsiN5VX37/HM5BgGxcoDt1ggvFUc6gdzyQzoPjk8orTOHBlgHuDUugP5oRU+CcOw8GniilvV3pt5FBxp47A==", + "requires": { + "big-integer": "^1.6.48" + } + }, "nodemailer": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.8.0.tgz", @@ -58013,6 +58882,14 @@ "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -58828,6 +59705,37 @@ "split2": "^4.1.0" } }, + "pgsql-deparser": { + "version": "13.3.15", + "resolved": "https://registry.npmjs.org/pgsql-deparser/-/pgsql-deparser-13.3.15.tgz", + "integrity": "sha512-Q/ZrQWYsymM+HefLaLK6PX1DNeDdfoKAH5wzfRrOxCsxRoTouIbWhwgVp3QaiovStjVPSeYNH+pqkLH4JsSn2A==", + "requires": { + "@babel/runtime": "^7.11.2", + "dotty": "^0.1.0", + "lodash": "^4.17.20", + "pgsql-enums": "^13.1.3" + } + }, + "pgsql-enums": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/pgsql-enums/-/pgsql-enums-13.1.3.tgz", + "integrity": "sha512-h3OSGbv1rB1r3lWL3l0gHIMVMVBTzEzROkP2/Wpz2s1eDAffPf9O5x0OqrRdLzhze92S9GUqO/FrS15u027xyg==", + "requires": { + "@babel/runtime": "^7.4.2" + } + }, + "pgsql-parser": { + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.1.tgz", + "integrity": "sha512-A0vaREC+i0+CPT8vmtBqtgvymiT9k/VMscS6dbK21SBUFK/7YQDb1W/DYvOp8sUH4jzmIxfArw9s0X4jI2J6Tg==", + "requires": { + "@babel/runtime": "^7.11.2", + "libpg-query": "13.3.1", + "minimist": "^1.2.6", + "pgsql-deparser": "^13.3.15", + "pgsql-enums": "^13.1.3" + } + }, "phenomenon": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/phenomenon/-/phenomenon-1.6.0.tgz", @@ -60327,8 +61235,17 @@ "prettier": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", - "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==", - "dev": true + "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==" + }, + "prettier-plugin-sql": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-sql/-/prettier-plugin-sql-0.12.1.tgz", + "integrity": "sha512-2z0pMmQEC61Xywerw2FJFpEIaA9lJUjB5mj+9dfRU8HkU7iICFrIizpMjSSDMoGkhh5W+IRROVgLlgRdpphI7g==", + "requires": { + "node-sql-parser": "^4.4.0", + "sql-formatter": "^10.0.0", + "tslib": "^2.4.0" + } }, "pretty-error": { "version": "2.1.2", @@ -60402,6 +61319,15 @@ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, "promise.allsettled": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.6.tgz", @@ -60592,12 +61518,26 @@ "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==" }, + "railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" + }, "ramda": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==", "dev": true }, + "randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "requires": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + } + }, "randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", @@ -62408,6 +63348,11 @@ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -63023,6 +63968,11 @@ "is-fullwidth-code-point": "^3.0.0" } }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -63155,6 +64105,25 @@ } } }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -63282,6 +64251,15 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "sql-formatter": { + "version": "10.7.2", + "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-10.7.2.tgz", + "integrity": "sha512-YspJXMr2rKMGZY50zYRBs2nCtEO/AKDrmQOxmV2CrGEOFSXUhY3YbsOUe6lX0T/7xbBs4pAYv4UObmwf78vtKg==", + "requires": { + "argparse": "^2.0.1", + "nearley": "^2.20.1" + } + }, "sqlstring": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", @@ -63296,7 +64274,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, "requires": { "minipass": "^3.1.1" } @@ -63652,7 +64629,7 @@ "@storybook/testing-library": "^0.0.9", "@stripe/react-stripe-js": "^1.7.0", "@stripe/stripe-js": "^1.25.0", - "@supabase/postgres-meta": "^0.26.1", + "@supabase/postgres-meta": "^0.60.0", "@supabase/react-data-grid": "^7.1.0-beta.7", "@supabase/shared-types": "^0.1.29", "@supabase/supabase-js": "^2.1.1", @@ -64303,7 +65280,6 @@ "version": "6.1.12", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", - "dev": true, "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -64316,8 +65292,7 @@ "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" } } }, diff --git a/studio/package.json b/studio/package.json index c4792cb5292..737bdc2b094 100644 --- a/studio/package.json +++ b/studio/package.json @@ -26,7 +26,7 @@ "@sentry/nextjs": "^6.17.4", "@stripe/react-stripe-js": "^1.7.0", "@stripe/stripe-js": "^1.25.0", - "@supabase/postgres-meta": "^0.26.1", + "@supabase/postgres-meta": "^0.60.0", "@supabase/react-data-grid": "^7.1.0-beta.7", "@supabase/shared-types": "^0.1.29", "@supabase/supabase-js": "^2.1.1", From 9a9890f8476d7d34c0ab67fdf80bc7f6a02184ac Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Sun, 22 Jan 2023 17:44:16 +0000 Subject: [PATCH 25/64] Downgrade pgsql-parser --- package-lock.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index ab3062636ff..3db4403f5f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23231,9 +23231,9 @@ } }, "node_modules/libpg-query": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.1.tgz", - "integrity": "sha512-RLvnKPLWngNR7bNep/Q9euPcfFJVFfDg/iP13lYGxcSI01emS/1vbTw6EBd8UordweWFdvUuK+31sHp104dukA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.0.tgz", + "integrity": "sha512-9PKW8iRWnSCw+IW5LlZYq+bLMmAhKsAIR2en8iRYnoRLBg4x+HKHBb+PQyqFy8+jC7AmzV65A+DsUO7tiZddEQ==", "hasInstallScript": true, "dependencies": { "@mapbox/node-pre-gyp": "^1.0.8", @@ -27659,14 +27659,14 @@ } }, "node_modules/pgsql-parser": { - "version": "13.4.1", - "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.1.tgz", - "integrity": "sha512-A0vaREC+i0+CPT8vmtBqtgvymiT9k/VMscS6dbK21SBUFK/7YQDb1W/DYvOp8sUH4jzmIxfArw9s0X4jI2J6Tg==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.0.tgz", + "integrity": "sha512-d3ZQtQnUptz19f+WpmRP4OLfAZ33LgYDpycTA9ZSNCF+AZyURfm9e3sRZJ/amBcLtpwnZuto9EHjVz3EPpiksA==", "dependencies": { "@babel/runtime": "^7.11.2", - "libpg-query": "13.3.1", + "libpg-query": "13.3.0", "minimist": "^1.2.6", - "pgsql-deparser": "^13.3.15", + "pgsql-deparser": "^13.3.14", "pgsql-enums": "^13.1.3" }, "bin": { @@ -56461,9 +56461,9 @@ } }, "libpg-query": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.1.tgz", - "integrity": "sha512-RLvnKPLWngNR7bNep/Q9euPcfFJVFfDg/iP13lYGxcSI01emS/1vbTw6EBd8UordweWFdvUuK+31sHp104dukA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.0.tgz", + "integrity": "sha512-9PKW8iRWnSCw+IW5LlZYq+bLMmAhKsAIR2en8iRYnoRLBg4x+HKHBb+PQyqFy8+jC7AmzV65A+DsUO7tiZddEQ==", "requires": { "@mapbox/node-pre-gyp": "^1.0.8", "node-addon-api": "^1.6.3", @@ -59725,14 +59725,14 @@ } }, "pgsql-parser": { - "version": "13.4.1", - "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.1.tgz", - "integrity": "sha512-A0vaREC+i0+CPT8vmtBqtgvymiT9k/VMscS6dbK21SBUFK/7YQDb1W/DYvOp8sUH4jzmIxfArw9s0X4jI2J6Tg==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.0.tgz", + "integrity": "sha512-d3ZQtQnUptz19f+WpmRP4OLfAZ33LgYDpycTA9ZSNCF+AZyURfm9e3sRZJ/amBcLtpwnZuto9EHjVz3EPpiksA==", "requires": { "@babel/runtime": "^7.11.2", - "libpg-query": "13.3.1", + "libpg-query": "13.3.0", "minimist": "^1.2.6", - "pgsql-deparser": "^13.3.15", + "pgsql-deparser": "^13.3.14", "pgsql-enums": "^13.1.3" } }, From af28a42fd6b9f65d3604b572f177c2e22a0d4cd5 Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Sun, 22 Jan 2023 20:36:48 +0000 Subject: [PATCH 26/64] Add type to import to be more explicit --- studio/components/interfaces/Auth/Policies/Policies.tsx | 2 +- .../components/interfaces/Auth/Policies/Policies.utils.ts | 2 +- .../interfaces/Auth/Policies/PolicyEditor/PolicyRoles.tsx | 2 +- .../interfaces/Auth/Policies/PolicyEditor/index.tsx | 2 +- .../interfaces/Auth/Policies/PolicyEditorModal/index.tsx | 2 +- .../interfaces/Auth/Policies/PolicyTableRow/PolicyRow.tsx | 2 +- .../Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx | 2 +- .../interfaces/Auth/Policies/PolicyTableRow/index.tsx | 2 +- .../interfaces/Database/Extensions/EnableExtensionModal.tsx | 2 +- .../Database/Publications/PublicationsTableItem.tsx | 2 +- .../interfaces/Database/Publications/PublicationsTables.tsx | 2 +- studio/components/interfaces/Database/Tables/ColumnList.tsx | 6 +++--- studio/components/interfaces/Database/Tables/TableList.tsx | 2 +- studio/components/interfaces/TableGridEditor/EmptyState.tsx | 2 +- .../interfaces/TableGridEditor/GridHeaderActions.tsx | 2 +- .../SidePanelEditor/ColumnEditor/ColumnDefaultValue.tsx | 2 +- .../SidePanelEditor/ColumnEditor/ColumnEditor.tsx | 2 +- .../SidePanelEditor/ColumnEditor/ColumnEditor.utils.ts | 2 +- .../SidePanelEditor/ColumnEditor/ColumnForeignKey.tsx | 2 +- .../SidePanelEditor/ColumnEditor/ColumnType.tsx | 2 +- .../SidePanelEditor/ColumnEditor/HeaderTitle.tsx | 2 +- .../ForeignKeySelector/ForeignKeySelector.tsx | 4 ++-- .../SidePanelEditor/RowEditor/ReferenceRowViewer.tsx | 2 +- .../TableGridEditor/SidePanelEditor/RowEditor/RowEditor.tsx | 2 +- .../SidePanelEditor/RowEditor/RowEditor.types.ts | 2 +- .../SidePanelEditor/RowEditor/RowEditor.utils.ts | 4 ++-- .../TableGridEditor/SidePanelEditor/SidePanelEditor.tsx | 2 +- .../SidePanelEditor/SidePanelEditor.types.ts | 2 +- .../TableGridEditor/SidePanelEditor/TableEditor/Column.tsx | 2 +- .../SidePanelEditor/TableEditor/ColumnManagement.tsx | 2 +- .../SidePanelEditor/TableEditor/HeaderTitle.tsx | 2 +- .../SidePanelEditor/TableEditor/TableEditor.tsx | 2 +- .../SidePanelEditor/TableEditor/TableEditor.utils.ts | 2 +- .../interfaces/TableGridEditor/TableGridEditor.tsx | 4 ++-- .../layouts/TableEditorLayout/TableEditorLayout.tsx | 2 +- .../layouts/TableEditorLayout/TableEditorMenu.tsx | 2 +- studio/lib/helpers.ts | 1 - studio/pages/project/[ref]/database/tables.tsx | 2 +- studio/pages/project/[ref]/editor/[id].tsx | 2 +- studio/pages/project/[ref]/editor/index.tsx | 2 +- studio/stores/pgmeta/ColumnStore.ts | 2 +- studio/stores/pgmeta/ExtensionsStore.ts | 2 +- studio/stores/pgmeta/ForeignTableStore.ts | 2 +- studio/stores/pgmeta/MetaStore.ts | 2 +- studio/stores/pgmeta/SchemaStore.ts | 2 +- studio/stores/pgmeta/TableStore.ts | 2 +- studio/stores/pgmeta/TypesStore.ts | 2 +- studio/stores/project/VaultStore.ts | 2 +- studio/types/ui.ts | 2 +- 49 files changed, 53 insertions(+), 54 deletions(-) diff --git a/studio/components/interfaces/Auth/Policies/Policies.tsx b/studio/components/interfaces/Auth/Policies/Policies.tsx index 550bd59f740..e587a5c5a77 100644 --- a/studio/components/interfaces/Auth/Policies/Policies.tsx +++ b/studio/components/interfaces/Auth/Policies/Policies.tsx @@ -5,7 +5,7 @@ import { useRouter } from 'next/router' import { observer } from 'mobx-react-lite' import { useParams, useStore } from 'hooks' import { PolicyEditorModal, PolicyTableRow } from 'components/interfaces/Auth/Policies' -import { PostgresRole, PostgresTable } from '@supabase/postgres-meta' +import type { PostgresRole, PostgresTable } from '@supabase/postgres-meta' import ConfirmModal from 'components/ui/Dialogs/ConfirmDialog' import NoSearchResults from 'components/to-be-cleaned/NoSearchResults' diff --git a/studio/components/interfaces/Auth/Policies/Policies.utils.ts b/studio/components/interfaces/Auth/Policies/Policies.utils.ts index ec00c22466d..046c4fb16bf 100644 --- a/studio/components/interfaces/Auth/Policies/Policies.utils.ts +++ b/studio/components/interfaces/Auth/Policies/Policies.utils.ts @@ -1,4 +1,4 @@ -import { PostgresPolicy } from '@supabase/postgres-meta' +import type { PostgresPolicy } from '@supabase/postgres-meta' import { has, isEmpty, isEqual } from 'lodash' import { PolicyFormField, diff --git a/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyRoles.tsx b/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyRoles.tsx index 64398eb56af..27ab7ffc122 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyRoles.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyEditor/PolicyRoles.tsx @@ -1,5 +1,5 @@ import { FC } from 'react' -import { PostgresRole } from '@supabase/postgres-meta' +import type { PostgresRole } from '@supabase/postgres-meta' import MultiSelect from 'components/ui/MultiSelect' diff --git a/studio/components/interfaces/Auth/Policies/PolicyEditor/index.tsx b/studio/components/interfaces/Auth/Policies/PolicyEditor/index.tsx index a5e39deebad..5b249d11b2d 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyEditor/index.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyEditor/index.tsx @@ -6,7 +6,7 @@ import PolicyDefinition from './PolicyDefinition' import PolicyAllowedOperation from './PolicyAllowedOperation' import PolicyRoles from './PolicyRoles' import PolicyEditorFooter from './PolicyEditorFooter' -import { PostgresRole } from '@supabase/postgres-meta' +import type { PostgresRole } from '@supabase/postgres-meta' // Exposed for StoragePoliciesEditor.js export { PolicyName, PolicyRoles } diff --git a/studio/components/interfaces/Auth/Policies/PolicyEditorModal/index.tsx b/studio/components/interfaces/Auth/Policies/PolicyEditorModal/index.tsx index 4ad6f97b6f4..7e77f5285a0 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyEditorModal/index.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyEditorModal/index.tsx @@ -1,7 +1,7 @@ import { Modal } from 'ui' import { FC, useState, useEffect } from 'react' import { isEmpty } from 'lodash' -import { PostgresRole } from '@supabase/postgres-meta' +import type { PostgresRole } from '@supabase/postgres-meta' import { useStore } from 'hooks' import PolicyEditorModalTitle from './PolicyEditorModalTitle' diff --git a/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyRow.tsx b/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyRow.tsx index 0dff2d0a4d9..b3a00e0d638 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyRow.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyRow.tsx @@ -1,7 +1,7 @@ import { FC } from 'react' import * as Tooltip from '@radix-ui/react-tooltip' import { Button, Dropdown, IconEdit, IconTrash, IconMoreVertical } from 'ui' -import { PostgresPolicy } from '@supabase/postgres-meta' +import type { PostgresPolicy } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import { checkPermissions } from 'hooks' diff --git a/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx b/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx index 1e2d975e7a4..82cfd727e02 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRowHeader.tsx @@ -3,7 +3,7 @@ import { FC } from 'react' import { useRouter } from 'next/router' import * as Tooltip from '@radix-ui/react-tooltip' import { Badge, Button } from 'ui' -import { PostgresTable } from '@supabase/postgres-meta' +import type { PostgresTable } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import { checkPermissions } from 'hooks' diff --git a/studio/components/interfaces/Auth/Policies/PolicyTableRow/index.tsx b/studio/components/interfaces/Auth/Policies/PolicyTableRow/index.tsx index b9eafb7e119..487027580b9 100644 --- a/studio/components/interfaces/Auth/Policies/PolicyTableRow/index.tsx +++ b/studio/components/interfaces/Auth/Policies/PolicyTableRow/index.tsx @@ -1,5 +1,5 @@ import { FC } from 'react' -import { PostgresTable, PostgresPolicy } from '@supabase/postgres-meta' +import type { PostgresTable, PostgresPolicy } from '@supabase/postgres-meta' import { observer } from 'mobx-react-lite' import { useStore } from 'hooks' diff --git a/studio/components/interfaces/Database/Extensions/EnableExtensionModal.tsx b/studio/components/interfaces/Database/Extensions/EnableExtensionModal.tsx index f8fde4ddfdb..9f569536579 100644 --- a/studio/components/interfaces/Database/Extensions/EnableExtensionModal.tsx +++ b/studio/components/interfaces/Database/Extensions/EnableExtensionModal.tsx @@ -1,6 +1,6 @@ import { FC, useEffect, useState } from 'react' import { Button, Input, Form, Modal, Listbox, IconPlus, IconDatabase } from 'ui' -import { PostgresExtension, PostgresSchema } from '@supabase/postgres-meta' +import type { PostgresExtension, PostgresSchema } from '@supabase/postgres-meta' import { useStore } from 'hooks' import ShimmeringLoader from 'components/ui/ShimmeringLoader' diff --git a/studio/components/interfaces/Database/Publications/PublicationsTableItem.tsx b/studio/components/interfaces/Database/Publications/PublicationsTableItem.tsx index b0b60b67cf0..5c30d1f31cc 100644 --- a/studio/components/interfaces/Database/Publications/PublicationsTableItem.tsx +++ b/studio/components/interfaces/Database/Publications/PublicationsTableItem.tsx @@ -1,7 +1,7 @@ import { FC, useState } from 'react' import { observer } from 'mobx-react-lite' import { Badge, Toggle } from 'ui' -import { PostgresPublication, PostgresTable } from '@supabase/postgres-meta' +import type { PostgresPublication, PostgresTable } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import { checkPermissions, useStore } from 'hooks' diff --git a/studio/components/interfaces/Database/Publications/PublicationsTables.tsx b/studio/components/interfaces/Database/Publications/PublicationsTables.tsx index 07ea3672d02..73d2f67bbd5 100644 --- a/studio/components/interfaces/Database/Publications/PublicationsTables.tsx +++ b/studio/components/interfaces/Database/Publications/PublicationsTables.tsx @@ -1,7 +1,7 @@ import { FC, useState } from 'react' import { observer } from 'mobx-react-lite' import { Button, Input, IconChevronLeft, IconSearch, IconAlertCircle } from 'ui' -import { PostgresPublication } from '@supabase/postgres-meta' +import type { PostgresPublication } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import { checkPermissions, useStore } from 'hooks' diff --git a/studio/components/interfaces/Database/Tables/ColumnList.tsx b/studio/components/interfaces/Database/Tables/ColumnList.tsx index add64c1ac20..7be131dee70 100644 --- a/studio/components/interfaces/Database/Tables/ColumnList.tsx +++ b/studio/components/interfaces/Database/Tables/ColumnList.tsx @@ -5,7 +5,7 @@ import { Input, Button, IconSearch, IconPlus, IconChevronLeft, IconEdit3, IconTr import { useStore } from 'hooks' import Table from 'components/to-be-cleaned/Table' import NoSearchResults from 'components/to-be-cleaned/NoSearchResults' -import { PostgresTable } from '@supabase/postgres-meta' +import type { PostgresTable } from '@supabase/postgres-meta' interface Props { selectedTable: PostgresTable @@ -25,9 +25,9 @@ const ColumnList: FC = ({ const { meta } = useStore() const [filterString, setFilterString] = useState('') const columns = - filterString.length === 0 + (filterString.length === 0 ? selectedTable.columns - : selectedTable.columns.filter((column: any) => column.name.includes(filterString)) + : selectedTable.columns!.filter((column: any) => column.name.includes(filterString))) ?? [] const isLocked = meta.excludedSchemas.includes(selectedTable?.schema ?? '') diff --git a/studio/components/interfaces/Database/Tables/TableList.tsx b/studio/components/interfaces/Database/Tables/TableList.tsx index 9ee8a088a59..72efc7adee9 100644 --- a/studio/components/interfaces/Database/Tables/TableList.tsx +++ b/studio/components/interfaces/Database/Tables/TableList.tsx @@ -18,7 +18,7 @@ import { partition } from 'lodash' import { useStore } from 'hooks' import Table from 'components/to-be-cleaned/Table' import NoSearchResults from 'components/to-be-cleaned/NoSearchResults' -import { PostgresTable, PostgresSchema } from '@supabase/postgres-meta' +import type { PostgresTable, PostgresSchema } from '@supabase/postgres-meta' interface Props { selectedSchema: string diff --git a/studio/components/interfaces/TableGridEditor/EmptyState.tsx b/studio/components/interfaces/TableGridEditor/EmptyState.tsx index 8c9a1486b09..5b2b3b1d644 100644 --- a/studio/components/interfaces/TableGridEditor/EmptyState.tsx +++ b/studio/components/interfaces/TableGridEditor/EmptyState.tsx @@ -1,6 +1,6 @@ import { FC } from 'react' import { observer } from 'mobx-react-lite' -import { PostgresTable } from '@supabase/postgres-meta' +import type { PostgresTable } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import { checkPermissions, useStore } from 'hooks' import ProductEmptyState from 'components/to-be-cleaned/ProductEmptyState' diff --git a/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx b/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx index 829ea337b80..198e9a2a964 100644 --- a/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx +++ b/studio/components/interfaces/TableGridEditor/GridHeaderActions.tsx @@ -1,7 +1,7 @@ import { FC } from 'react' import Link from 'next/link' import { Button, IconAlertCircle, IconLock } from 'ui' -import { PostgresPolicy, PostgresTable } from '@supabase/postgres-meta' +import type { PostgresPolicy, PostgresTable } from '@supabase/postgres-meta' import { useStore } from 'hooks' diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnDefaultValue.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnDefaultValue.tsx index ca2f6095a86..60bd565fb0b 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnDefaultValue.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnDefaultValue.tsx @@ -1,7 +1,7 @@ import React, { FC } from 'react' import { isNil } from 'lodash' import { Select } from 'ui' -import { PostgresType } from '@supabase/postgres-meta' +import type { PostgresType } from '@supabase/postgres-meta' import InputWithSuggestions from './InputWithSuggestions' import { POSTGRES_DATA_TYPES } from '../SidePanelEditor.constants' diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.tsx index f2d8aab8204..519141c7087 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.tsx @@ -3,7 +3,7 @@ import { FC, useEffect, useState } from 'react' import { isUndefined, isEmpty } from 'lodash' import { Dictionary } from 'components/grid' import { Checkbox, SidePanel, Input, Button, IconExternalLink, Toggle } from 'ui' -import { +import type { PostgresColumn, PostgresExtension, PostgresRelationship, diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.utils.ts b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.utils.ts index 63a8436cae5..2467d36a736 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.utils.ts +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnEditor.utils.ts @@ -1,6 +1,6 @@ import { find, isUndefined, isEqual, isNull } from 'lodash' import { Dictionary } from 'components/grid' -import { +import type { PostgresColumn, PostgresRelationship, PostgresTable, diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnForeignKey.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnForeignKey.tsx index 45a09d5a3cd..50d0778c246 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnForeignKey.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnForeignKey.tsx @@ -5,7 +5,7 @@ import { Button, IconArrowRight } from 'ui' import { ColumnField } from '../SidePanelEditor.types' import InformationBox from 'components/ui/InformationBox' import { getForeignKeyUIState } from './ColumnEditor.utils' -import { PostgresRelationship } from '@supabase/postgres-meta' +import type { PostgresRelationship } from '@supabase/postgres-meta' interface Props { column: ColumnField diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnType.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnType.tsx index 3cfdb838a50..7265c2976d1 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnType.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/ColumnType.tsx @@ -1,6 +1,6 @@ import React, { FC, ReactNode } from 'react' import { IconCalendar, IconType, IconHash, Listbox, IconToggleRight, Input } from 'ui' -import { PostgresType } from '@supabase/postgres-meta' +import type { PostgresType } from '@supabase/postgres-meta' import { POSTGRES_DATA_TYPES, POSTGRES_DATA_TYPE_OPTIONS } from '../SidePanelEditor.constants' import { PostgresDataTypeOption } from '../SidePanelEditor.types' diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/HeaderTitle.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/HeaderTitle.tsx index d416f54bba7..fdde8877ddd 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/HeaderTitle.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ColumnEditor/HeaderTitle.tsx @@ -1,4 +1,4 @@ -import { PostgresTable, PostgresColumn } from '@supabase/postgres-meta' +import type { PostgresTable, PostgresColumn } from '@supabase/postgres-meta' interface Props { table: PostgresTable diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx index ad72f815389..7acd632eaf6 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx @@ -2,7 +2,7 @@ import React, { FC, useEffect, useState } from 'react' import { get, find, isEmpty, sortBy } from 'lodash' import { Dictionary } from 'components/grid' import { SidePanel, Input, Listbox, IconHelpCircle } from 'ui' -import { PostgresTable, PostgresColumn } from '@supabase/postgres-meta' +import type { PostgresTable, PostgresColumn } from '@supabase/postgres-meta' import ActionBar from '../ActionBar' import { ForeignKey } from './ForeignKeySelector.types' @@ -71,7 +71,7 @@ const ForeignKeySelector: FC = ({ setSelectedForeignKey({ schema: table.schema, table: table.name, - column: table.columns.length > 0 ? table.columns[0].name : undefined, + column: table.columns!.length > 0 ? table.columns![0].name : undefined, }) } } diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/ReferenceRowViewer.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/ReferenceRowViewer.tsx index 8f32cec127c..8760f7b0385 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/ReferenceRowViewer.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/ReferenceRowViewer.tsx @@ -1,6 +1,6 @@ import React, { FC, useEffect, useState } from 'react' import { SidePanel, IconLoader, IconXCircle } from 'ui' -import { PostgresRelationship } from '@supabase/postgres-meta' +import type { PostgresRelationship } from '@supabase/postgres-meta' import ActionBar from '../ActionBar' import InputField from './InputField' diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.tsx index 69bebb52dfc..4ebd6a4f6bc 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.tsx @@ -3,7 +3,7 @@ import { isUndefined, partition, isEmpty } from 'lodash' import { SidePanel } from 'ui' import { Dictionary } from 'components/grid' import { Query } from 'components/grid/query/Query' -import { PostgresTable } from '@supabase/postgres-meta' +import type { PostgresTable } from '@supabase/postgres-meta' import { useStore } from 'hooks' import ActionBar from '../ActionBar' diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.types.ts b/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.types.ts index 495ea21e5d1..6af2e718b44 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.types.ts +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.types.ts @@ -1,4 +1,4 @@ -import { PostgresRelationship } from '@supabase/postgres-meta' +import type { PostgresRelationship } from '@supabase/postgres-meta' export interface JsonEditValue { column: string diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.utils.ts b/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.utils.ts index 62b0128756c..7bbe183f5f7 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.utils.ts +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.utils.ts @@ -1,7 +1,7 @@ import dayjs from 'dayjs' import { find, isUndefined, compact, isEqual, omitBy, isNull, isString } from 'lodash' import { Dictionary } from 'components/grid' -import { PostgresTable } from '@supabase/postgres-meta' +import type { PostgresTable } from '@supabase/postgres-meta' import { uuidv4, minifyJSON, tryParseJson } from 'lib/helpers' import { RowField } from './RowEditor.types' @@ -15,7 +15,7 @@ export const generateRowFields = ( // @ts-ignore const primaryKeyColumns = primary_keys.map((key) => key.name) - return table.columns.map((column) => { + return table.columns!.map((column) => { const value = isUndefined(row) ? '' : DATETIME_TYPES.includes(column.format) diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx index 1c4f3fa1a55..7d8c40bd8d0 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.tsx @@ -2,7 +2,7 @@ import { FC, useState } from 'react' import { find, isEmpty, isUndefined } from 'lodash' import { Query, Dictionary } from 'components/grid' import { Modal } from 'ui' -import { PostgresRelationship, PostgresTable, PostgresColumn } from '@supabase/postgres-meta' +import type { PostgresRelationship, PostgresTable, PostgresColumn } from '@supabase/postgres-meta' import { useStore } from 'hooks' import { RowEditor, ColumnEditor, TableEditor } from '.' diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.types.ts b/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.types.ts index 3fc105799d3..59d260113c0 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.types.ts +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.types.ts @@ -1,4 +1,4 @@ -import { PostgresRelationship } from '@supabase/postgres-meta' +import type { PostgresRelationship } from '@supabase/postgres-meta' export interface CreateColumnPayload { tableId: number diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/Column.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/Column.tsx index 4939942cfa7..5970f19f8d8 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/Column.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/Column.tsx @@ -1,7 +1,7 @@ import { FC } from 'react' import { isUndefined } from 'lodash' import { Checkbox, Input, IconX, IconMenu, Popover, IconLink, IconSettings, Button } from 'ui' -import { PostgresType } from '@supabase/postgres-meta' +import type { PostgresType } from '@supabase/postgres-meta' import { ColumnField } from '../SidePanelEditor.types' import ColumnType from '../ColumnEditor/ColumnType' diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ColumnManagement.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ColumnManagement.tsx index 61f8e127f80..f601b5962bc 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ColumnManagement.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/ColumnManagement.tsx @@ -3,7 +3,7 @@ import React, { FC, useState } from 'react' import { partition, isEmpty, isUndefined } from 'lodash' import { Alert, Button, IconEdit, IconHelpCircle, IconKey, IconTrash, IconExternalLink } from 'ui' -import { +import type { PostgresTable, PostgresColumn, PostgresRelationship, diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/HeaderTitle.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/HeaderTitle.tsx index 45e0fd37775..1517ffb30b5 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/HeaderTitle.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/HeaderTitle.tsx @@ -1,5 +1,5 @@ import { FC } from 'react' -import { PostgresTable } from '@supabase/postgres-meta' +import type { PostgresTable } from '@supabase/postgres-meta' interface Props { schema: string diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.tsx index b9a68c8aa27..0d20cee9e41 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.tsx @@ -1,7 +1,7 @@ import { FC, useEffect, useState } from 'react' import { isUndefined, isEmpty } from 'lodash' import { Badge, Checkbox, SidePanel, Input, Alert } from 'ui' -import { PostgresTable, PostgresType } from '@supabase/postgres-meta' +import type { PostgresTable, PostgresType } from '@supabase/postgres-meta' import { useStore } from 'hooks' import ActionBar from '../ActionBar' diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.utils.ts b/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.utils.ts index 6c148727289..2f0d60f983a 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.utils.ts +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.utils.ts @@ -1,5 +1,5 @@ import { some } from 'lodash' -import { PostgresColumn, PostgresTable } from '@supabase/postgres-meta' +import type { PostgresColumn, PostgresTable } from '@supabase/postgres-meta' import { ImportContent, TableField } from './TableEditor.types' import { DEFAULT_COLUMNS } from './TableEditor.constants' diff --git a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx index 36798d285ea..26e1b54f45c 100644 --- a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx @@ -2,7 +2,7 @@ import { FC, useRef, useEffect, useState } from 'react' import { observer } from 'mobx-react-lite' import { useRouter } from 'next/router' import { find, isUndefined } from 'lodash' -import { PostgresColumn, PostgresTable } from '@supabase/postgres-meta' +import type { PostgresColumn, PostgresTable } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import { SchemaView } from 'types' @@ -92,7 +92,7 @@ const TableGridEditor: FC = ({ ? parseSupaTable( { table: selectedTable as PostgresTable, - columns: (selectedTable as PostgresTable).columns, + columns: (selectedTable as PostgresTable).columns!, primaryKeys: (selectedTable as PostgresTable).primary_keys, relationships: (selectedTable as PostgresTable).relationships, }, diff --git a/studio/components/layouts/TableEditorLayout/TableEditorLayout.tsx b/studio/components/layouts/TableEditorLayout/TableEditorLayout.tsx index 19178db155f..570efed3ae9 100644 --- a/studio/components/layouts/TableEditorLayout/TableEditorLayout.tsx +++ b/studio/components/layouts/TableEditorLayout/TableEditorLayout.tsx @@ -1,7 +1,7 @@ import { FC, ReactNode, useState, useEffect } from 'react' import { isUndefined } from 'lodash' import { observer } from 'mobx-react-lite' -import { PostgresTable } from '@supabase/postgres-meta' +import type { PostgresTable } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import { checkPermissions, useParams, useStore } from 'hooks' diff --git a/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx b/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx index fb81c3fa803..72d18037fa5 100644 --- a/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx +++ b/studio/components/layouts/TableEditorLayout/TableEditorMenu.tsx @@ -20,7 +20,7 @@ import { } from 'ui' import * as Tooltip from '@radix-ui/react-tooltip' import { PermissionAction } from '@supabase/shared-types/out/constants' -import { PostgresSchema, PostgresTable } from '@supabase/postgres-meta' +import type { PostgresSchema, PostgresTable } from '@supabase/postgres-meta' import { SchemaView } from 'types' import { checkPermissions, useStore, useParams } from 'hooks' diff --git a/studio/lib/helpers.ts b/studio/lib/helpers.ts index ef127b6ab46..da727d7ec87 100644 --- a/studio/lib/helpers.ts +++ b/studio/lib/helpers.ts @@ -1,5 +1,4 @@ import { v4 as _uuidV4 } from 'uuid' -import { PostgresColumn } from '@supabase/postgres-meta' import { post } from 'lib/common/fetch' import { PASSWORD_STRENGTH, DEFAULT_MINIMUM_PASSWORD_STRENGTH, API_URL } from 'lib/constants' diff --git a/studio/pages/project/[ref]/database/tables.tsx b/studio/pages/project/[ref]/database/tables.tsx index 5bdec6ce3d8..fa709fc8e06 100644 --- a/studio/pages/project/[ref]/database/tables.tsx +++ b/studio/pages/project/[ref]/database/tables.tsx @@ -1,7 +1,7 @@ import { useState, useEffect } from 'react' import { observer } from 'mobx-react-lite' import { isUndefined } from 'lodash' -import { PostgresColumn, PostgresTable } from '@supabase/postgres-meta' +import type { PostgresColumn, PostgresTable } from '@supabase/postgres-meta' import { Modal } from 'ui' import { useStore } from 'hooks' diff --git a/studio/pages/project/[ref]/editor/[id].tsx b/studio/pages/project/[ref]/editor/[id].tsx index 32893d76bec..cd55132af0e 100644 --- a/studio/pages/project/[ref]/editor/[id].tsx +++ b/studio/pages/project/[ref]/editor/[id].tsx @@ -5,7 +5,7 @@ import { useRouter } from 'next/router' import { observer } from 'mobx-react-lite' import { isUndefined, isNaN } from 'lodash' import { Alert, Button, Checkbox, IconExternalLink, Modal } from 'ui' -import { PostgresTable, PostgresColumn } from '@supabase/postgres-meta' +import type { PostgresTable, PostgresColumn } from '@supabase/postgres-meta' import { useStore, withAuth, useUrlState, useParams } from 'hooks' import { Dictionary } from 'components/grid' diff --git a/studio/pages/project/[ref]/editor/index.tsx b/studio/pages/project/[ref]/editor/index.tsx index ee5e4ffc1cf..74762a22dac 100644 --- a/studio/pages/project/[ref]/editor/index.tsx +++ b/studio/pages/project/[ref]/editor/index.tsx @@ -3,7 +3,7 @@ import { NextPage } from 'next' import router from 'next/router' import { observer } from 'mobx-react-lite' import { isUndefined } from 'lodash' -import { PostgresTable } from '@supabase/postgres-meta' +import type { PostgresTable } from '@supabase/postgres-meta' import { useStore, withAuth } from 'hooks' import { TableEditorLayout } from 'components/layouts' diff --git a/studio/stores/pgmeta/ColumnStore.ts b/studio/stores/pgmeta/ColumnStore.ts index 65d379ec262..572f3e01b9c 100644 --- a/studio/stores/pgmeta/ColumnStore.ts +++ b/studio/stores/pgmeta/ColumnStore.ts @@ -1,5 +1,5 @@ import PostgresMetaInterface from '../common/PostgresMetaInterface' -import { PostgresColumn } from '@supabase/postgres-meta' +import type { PostgresColumn } from '@supabase/postgres-meta' import { IRootStore } from '../RootStore' export default class ColumnStore extends PostgresMetaInterface { diff --git a/studio/stores/pgmeta/ExtensionsStore.ts b/studio/stores/pgmeta/ExtensionsStore.ts index fbb26f7d5e8..0f557962e0f 100644 --- a/studio/stores/pgmeta/ExtensionsStore.ts +++ b/studio/stores/pgmeta/ExtensionsStore.ts @@ -1,5 +1,5 @@ import PostgresMetaInterface from '../common/PostgresMetaInterface' -import { PostgresColumn } from '@supabase/postgres-meta' +import type { PostgresColumn } from '@supabase/postgres-meta' import { IRootStore } from '../RootStore' export default class ExtensionsStore extends PostgresMetaInterface { diff --git a/studio/stores/pgmeta/ForeignTableStore.ts b/studio/stores/pgmeta/ForeignTableStore.ts index 0e2fab318ad..19c0deb4aea 100644 --- a/studio/stores/pgmeta/ForeignTableStore.ts +++ b/studio/stores/pgmeta/ForeignTableStore.ts @@ -1,4 +1,4 @@ -import { PostgresTable } from '@supabase/postgres-meta' +import type { PostgresTable } from '@supabase/postgres-meta' import PostgresMetaInterface from '../common/PostgresMetaInterface' import { IRootStore } from '../RootStore' diff --git a/studio/stores/pgmeta/MetaStore.ts b/studio/stores/pgmeta/MetaStore.ts index dc599292ab5..3dcaaeae83e 100644 --- a/studio/stores/pgmeta/MetaStore.ts +++ b/studio/stores/pgmeta/MetaStore.ts @@ -3,7 +3,7 @@ import { makeObservable, observable } from 'mobx' import { find, isUndefined, isEqual, isEmpty, chunk } from 'lodash' import { Query } from 'components/grid/query/Query' -import { +import type { PostgresColumn, PostgresTable, PostgresRelationship, diff --git a/studio/stores/pgmeta/SchemaStore.ts b/studio/stores/pgmeta/SchemaStore.ts index 09236d13166..2d9a0cc38bf 100644 --- a/studio/stores/pgmeta/SchemaStore.ts +++ b/studio/stores/pgmeta/SchemaStore.ts @@ -1,4 +1,4 @@ -import { PostgresSchema } from '@supabase/postgres-meta' +import type { PostgresSchema } from '@supabase/postgres-meta' import PostgresMetaInterface from '../common/PostgresMetaInterface' import { IRootStore } from '../RootStore' diff --git a/studio/stores/pgmeta/TableStore.ts b/studio/stores/pgmeta/TableStore.ts index bb627c6d5c9..5063db74c65 100644 --- a/studio/stores/pgmeta/TableStore.ts +++ b/studio/stores/pgmeta/TableStore.ts @@ -1,5 +1,5 @@ import { action, makeObservable } from 'mobx' -import { PostgresTable } from '@supabase/postgres-meta' +import type { PostgresTable } from '@supabase/postgres-meta' import PostgresMetaInterface, { IPostgresMetaInterface } from '../common/PostgresMetaInterface' import { IRootStore } from '../RootStore' diff --git a/studio/stores/pgmeta/TypesStore.ts b/studio/stores/pgmeta/TypesStore.ts index c7057dbc333..1b507f1be03 100644 --- a/studio/stores/pgmeta/TypesStore.ts +++ b/studio/stores/pgmeta/TypesStore.ts @@ -1,5 +1,5 @@ import PostgresMetaInterface from '../common/PostgresMetaInterface' -import { PostgresType } from '@supabase/postgres-meta' +import type { PostgresType } from '@supabase/postgres-meta' import { IRootStore } from '../RootStore' export default class TypesStore extends PostgresMetaInterface { diff --git a/studio/stores/project/VaultStore.ts b/studio/stores/project/VaultStore.ts index 166f59bf7fe..a803ff64dbc 100644 --- a/studio/stores/project/VaultStore.ts +++ b/studio/stores/project/VaultStore.ts @@ -1,4 +1,4 @@ -import { PostgresColumn } from '@supabase/postgres-meta' +import type { PostgresColumn } from '@supabase/postgres-meta' import { Query } from 'components/grid' import { makeAutoObservable } from 'mobx' import { SchemaView, VaultSecret } from 'types' diff --git a/studio/types/ui.ts b/studio/types/ui.ts index edeb42ec9ac..5e295507e6a 100644 --- a/studio/types/ui.ts +++ b/studio/types/ui.ts @@ -1,4 +1,4 @@ -import { PostgresColumn } from '@supabase/postgres-meta' +import type { PostgresColumn } from '@supabase/postgres-meta' export interface Notification { category: 'info' | 'error' | 'success' | 'loading' From 1a720dd5424d69332122849b1217f747024db609 Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Sun, 22 Jan 2023 20:59:12 +0000 Subject: [PATCH 27/64] Update Dockerfile --- studio/Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/studio/Dockerfile b/studio/Dockerfile index 32fe1d0f128..a83f74c57fe 100644 --- a/studio/Dockerfile +++ b/studio/Dockerfile @@ -12,6 +12,10 @@ FROM node:16-slim as base RUN apt-get update && apt-get install -y --no-install-recommends \ python3 \ build-essential \ + # Added ca-certificates and git to build libpg-query if prebuilt binaries not available + # git required here https://github.com/pyramation/libpg-query-node/blob/8bf1d4b04ea003f1c5c6aa034fd28cfbab3cc308/script/buildAddon.sh#L11 + ca-certificates \ + git \ && rm -rf /var/lib/apt/lists/* RUN npm i -g turbo From ac9cbc6168211dd1645377cdf32f9d64ede3d556 Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Fri, 27 Jan 2023 13:33:22 +0800 Subject: [PATCH 28/64] chore: bump pgmeta version --- package-lock.json | 60 ++++++++++++++++++++++----------------------- studio/package.json | 2 +- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3db4403f5f7..a8b3be04496 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9855,9 +9855,9 @@ } }, "node_modules/@supabase/postgres-meta": { - "version": "0.60.0", - "resolved": "https://registry.npmjs.org/@supabase/postgres-meta/-/postgres-meta-0.60.0.tgz", - "integrity": "sha512-0KmqWD4uaezoMA3AbPGIM5f9I26MRWNBfiv6zVcpwKNEb4m0QWdEZYpQ8Bp1z/03SrMq+h/4sXEALX/Ng3BZUg==", + "version": "0.60.2", + "resolved": "https://registry.npmjs.org/@supabase/postgres-meta/-/postgres-meta-0.60.2.tgz", + "integrity": "sha512-Fjc5xKPzZJ38FhY3IbDFZ5cgVxPJTn8psLkgljZgBOMUyCd3QY3W1jV8rjwAkLfz/lxIOa2KlKZTIswMZMx4WQ==", "dependencies": { "@sinclair/typebox": "^0.25.1", "pg": "^8.7.1", @@ -19903,9 +19903,9 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-errors": { "version": "2.0.0", @@ -23231,9 +23231,9 @@ } }, "node_modules/libpg-query": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.0.tgz", - "integrity": "sha512-9PKW8iRWnSCw+IW5LlZYq+bLMmAhKsAIR2en8iRYnoRLBg4x+HKHBb+PQyqFy8+jC7AmzV65A+DsUO7tiZddEQ==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.1.tgz", + "integrity": "sha512-RLvnKPLWngNR7bNep/Q9euPcfFJVFfDg/iP13lYGxcSI01emS/1vbTw6EBd8UordweWFdvUuK+31sHp104dukA==", "hasInstallScript": true, "dependencies": { "@mapbox/node-pre-gyp": "^1.0.8", @@ -27659,14 +27659,14 @@ } }, "node_modules/pgsql-parser": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.0.tgz", - "integrity": "sha512-d3ZQtQnUptz19f+WpmRP4OLfAZ33LgYDpycTA9ZSNCF+AZyURfm9e3sRZJ/amBcLtpwnZuto9EHjVz3EPpiksA==", + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.1.tgz", + "integrity": "sha512-A0vaREC+i0+CPT8vmtBqtgvymiT9k/VMscS6dbK21SBUFK/7YQDb1W/DYvOp8sUH4jzmIxfArw9s0X4jI2J6Tg==", "dependencies": { "@babel/runtime": "^7.11.2", - "libpg-query": "13.3.0", + "libpg-query": "13.3.1", "minimist": "^1.2.6", - "pgsql-deparser": "^13.3.14", + "pgsql-deparser": "^13.3.15", "pgsql-enums": "^13.1.3" }, "bin": { @@ -38211,7 +38211,7 @@ "@sentry/nextjs": "^6.17.4", "@stripe/react-stripe-js": "^1.7.0", "@stripe/stripe-js": "^1.25.0", - "@supabase/postgres-meta": "^0.60.0", + "@supabase/postgres-meta": "^0.60.2", "@supabase/react-data-grid": "^7.1.0-beta.7", "@supabase/shared-types": "^0.1.29", "@supabase/supabase-js": "^2.1.1", @@ -45396,9 +45396,9 @@ } }, "@supabase/postgres-meta": { - "version": "0.60.0", - "resolved": "https://registry.npmjs.org/@supabase/postgres-meta/-/postgres-meta-0.60.0.tgz", - "integrity": "sha512-0KmqWD4uaezoMA3AbPGIM5f9I26MRWNBfiv6zVcpwKNEb4m0QWdEZYpQ8Bp1z/03SrMq+h/4sXEALX/Ng3BZUg==", + "version": "0.60.2", + "resolved": "https://registry.npmjs.org/@supabase/postgres-meta/-/postgres-meta-0.60.2.tgz", + "integrity": "sha512-Fjc5xKPzZJ38FhY3IbDFZ5cgVxPJTn8psLkgljZgBOMUyCd3QY3W1jV8rjwAkLfz/lxIOa2KlKZTIswMZMx4WQ==", "requires": { "@sinclair/typebox": "^0.25.1", "pg": "^8.7.1", @@ -53850,9 +53850,9 @@ } }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "http-errors": { "version": "2.0.0", @@ -56461,9 +56461,9 @@ } }, "libpg-query": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.0.tgz", - "integrity": "sha512-9PKW8iRWnSCw+IW5LlZYq+bLMmAhKsAIR2en8iRYnoRLBg4x+HKHBb+PQyqFy8+jC7AmzV65A+DsUO7tiZddEQ==", + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.1.tgz", + "integrity": "sha512-RLvnKPLWngNR7bNep/Q9euPcfFJVFfDg/iP13lYGxcSI01emS/1vbTw6EBd8UordweWFdvUuK+31sHp104dukA==", "requires": { "@mapbox/node-pre-gyp": "^1.0.8", "node-addon-api": "^1.6.3", @@ -59725,14 +59725,14 @@ } }, "pgsql-parser": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.0.tgz", - "integrity": "sha512-d3ZQtQnUptz19f+WpmRP4OLfAZ33LgYDpycTA9ZSNCF+AZyURfm9e3sRZJ/amBcLtpwnZuto9EHjVz3EPpiksA==", + "version": "13.4.1", + "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.1.tgz", + "integrity": "sha512-A0vaREC+i0+CPT8vmtBqtgvymiT9k/VMscS6dbK21SBUFK/7YQDb1W/DYvOp8sUH4jzmIxfArw9s0X4jI2J6Tg==", "requires": { "@babel/runtime": "^7.11.2", - "libpg-query": "13.3.0", + "libpg-query": "13.3.1", "minimist": "^1.2.6", - "pgsql-deparser": "^13.3.14", + "pgsql-deparser": "^13.3.15", "pgsql-enums": "^13.1.3" } }, @@ -64629,7 +64629,7 @@ "@storybook/testing-library": "^0.0.9", "@stripe/react-stripe-js": "^1.7.0", "@stripe/stripe-js": "^1.25.0", - "@supabase/postgres-meta": "^0.60.0", + "@supabase/postgres-meta": "^0.60.2", "@supabase/react-data-grid": "^7.1.0-beta.7", "@supabase/shared-types": "^0.1.29", "@supabase/supabase-js": "^2.1.1", diff --git a/studio/package.json b/studio/package.json index 737bdc2b094..57953c2c638 100644 --- a/studio/package.json +++ b/studio/package.json @@ -26,7 +26,7 @@ "@sentry/nextjs": "^6.17.4", "@stripe/react-stripe-js": "^1.7.0", "@stripe/stripe-js": "^1.25.0", - "@supabase/postgres-meta": "^0.60.0", + "@supabase/postgres-meta": "^0.60.2", "@supabase/react-data-grid": "^7.1.0-beta.7", "@supabase/shared-types": "^0.1.29", "@supabase/supabase-js": "^2.1.1", From 35ee01040792bcf63f676983e655f1289451748c Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Fri, 27 Jan 2023 13:45:53 +0800 Subject: [PATCH 29/64] chore: update null check --- studio/components/interfaces/Database/Tables/ColumnList.tsx | 4 ++-- .../SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx | 2 +- .../components/interfaces/TableGridEditor/TableGridEditor.tsx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/studio/components/interfaces/Database/Tables/ColumnList.tsx b/studio/components/interfaces/Database/Tables/ColumnList.tsx index 7be131dee70..c5b668777fc 100644 --- a/studio/components/interfaces/Database/Tables/ColumnList.tsx +++ b/studio/components/interfaces/Database/Tables/ColumnList.tsx @@ -27,9 +27,9 @@ const ColumnList: FC = ({ const columns = (filterString.length === 0 ? selectedTable.columns - : selectedTable.columns!.filter((column: any) => column.name.includes(filterString))) ?? [] + : selectedTable.columns?.filter((column: any) => column.name.includes(filterString))) ?? [] - const isLocked = meta.excludedSchemas.includes(selectedTable?.schema ?? '') + const isLocked = meta.excludedSchemas.includes(selectedTable.schema ?? '') return ( <> diff --git a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx index 7acd632eaf6..e8146e33c43 100644 --- a/studio/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx +++ b/studio/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.tsx @@ -71,7 +71,7 @@ const ForeignKeySelector: FC = ({ setSelectedForeignKey({ schema: table.schema, table: table.name, - column: table.columns!.length > 0 ? table.columns![0].name : undefined, + column: table.columns?.length ? table.columns[0].name : undefined, }) } } diff --git a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx index 26e1b54f45c..e62bfe19e34 100644 --- a/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx +++ b/studio/components/interfaces/TableGridEditor/TableGridEditor.tsx @@ -92,7 +92,7 @@ const TableGridEditor: FC = ({ ? parseSupaTable( { table: selectedTable as PostgresTable, - columns: (selectedTable as PostgresTable).columns!, + columns: (selectedTable as PostgresTable).columns ?? [], primaryKeys: (selectedTable as PostgresTable).primary_keys, relationships: (selectedTable as PostgresTable).relationships, }, From 62e68e50f4d5f57f008a096da34c02a7be57ef82 Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Fri, 27 Jan 2023 14:38:54 +0800 Subject: [PATCH 30/64] chore: pin pgsql-parser in package overrides --- package-lock.json | 366 +++++++++++++++++++++++++++++++++----------- package.json | 3 + studio/package.json | 2 +- 3 files changed, 277 insertions(+), 94 deletions(-) diff --git a/package-lock.json b/package-lock.json index a8b3be04496..a88e70ca30c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3404,7 +3404,8 @@ "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true }, "node_modules/@hcaptcha/react-hcaptcha": { "version": "1.4.4", @@ -4409,6 +4410,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "dev": true, "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -4428,6 +4430,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -4440,6 +4443,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -4459,6 +4463,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -4473,6 +4478,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -4481,6 +4487,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -4492,6 +4499,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4505,6 +4513,7 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -5157,6 +5166,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" @@ -5166,6 +5176,7 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -5181,6 +5192,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -5193,6 +5205,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -7378,7 +7391,8 @@ "node_modules/@sinclair/typebox": { "version": "0.25.21", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz", - "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==" + "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==", + "dev": true }, "node_modules/@sinonjs/commons": { "version": "1.8.5", @@ -9858,6 +9872,7 @@ "version": "0.60.2", "resolved": "https://registry.npmjs.org/@supabase/postgres-meta/-/postgres-meta-0.60.2.tgz", "integrity": "sha512-Fjc5xKPzZJ38FhY3IbDFZ5cgVxPJTn8psLkgljZgBOMUyCd3QY3W1jV8rjwAkLfz/lxIOa2KlKZTIswMZMx4WQ==", + "dev": true, "dependencies": { "@sinclair/typebox": "^0.25.1", "pg": "^8.7.1", @@ -9872,14 +9887,6 @@ "npm": ">=8" } }, - "node_modules/@supabase/postgres-meta/node_modules/postgres-array": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.1.tgz", - "integrity": "sha512-h7i53Dw2Yq3a1uuZ6lbVFAkvMMwssJ8jkzeAg0XaZm1XIFF/t/s+tockdqbWTymyEm07dVenOQbFisEi+kj8uA==", - "engines": { - "node": ">=12" - } - }, "node_modules/@supabase/postgrest-js": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.1.0.tgz", @@ -10081,6 +10088,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, "engines": { "node": ">= 6" } @@ -11261,7 +11269,8 @@ "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "node_modules/accepts": { "version": "1.3.8", @@ -11347,6 +11356,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, "dependencies": { "debug": "^4.1.0", "depd": "^1.1.2", @@ -11360,6 +11370,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -12769,6 +12780,7 @@ "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, "engines": { "node": ">=0.6" } @@ -13123,6 +13135,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "dev": true, "engines": { "node": ">=4" } @@ -13207,6 +13220,7 @@ "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", @@ -13235,6 +13249,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -13246,6 +13261,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -13506,6 +13522,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, "engines": { "node": ">=10" } @@ -13836,6 +13853,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, "bin": { "color-support": "bin.js" } @@ -15981,6 +15999,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, "engines": { "node": ">=8" } @@ -16101,7 +16120,8 @@ "node_modules/discontinuous-range": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==", + "dev": true }, "node_modules/dlv": { "version": "1.1.3", @@ -16289,7 +16309,8 @@ "node_modules/dotty": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/dotty/-/dotty-0.1.2.tgz", - "integrity": "sha512-V0EWmKeH3DEhMwAZ+8ZB2Ao4OK6p++Z0hsDtZq3N0+0ZMVqkzrcEGROvOnZpLnvBg5PTNG23JEDLAm64gPaotQ==" + "integrity": "sha512-V0EWmKeH3DEhMwAZ+8ZB2Ao4OK6p++Z0hsDtZq3N0+0ZMVqkzrcEGROvOnZpLnvBg5PTNG23JEDLAm64gPaotQ==", + "dev": true }, "node_modules/duplexer": { "version": "0.1.2", @@ -16478,6 +16499,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, "engines": { "node": ">=6" } @@ -16485,7 +16507,8 @@ "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true }, "node_modules/errno": { "version": "0.1.8", @@ -18609,6 +18632,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -19905,7 +19929,8 @@ "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true }, "node_modules/http-errors": { "version": "2.0.0", @@ -19927,6 +19952,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -19966,6 +19992,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, "dependencies": { "ms": "^2.0.0" } @@ -20265,7 +20292,8 @@ "node_modules/ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -20584,7 +20612,8 @@ "node_modules/is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true }, "node_modules/is-map": { "version": "2.0.2", @@ -23231,9 +23260,10 @@ } }, "node_modules/libpg-query": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.1.tgz", - "integrity": "sha512-RLvnKPLWngNR7bNep/Q9euPcfFJVFfDg/iP13lYGxcSI01emS/1vbTw6EBd8UordweWFdvUuK+31sHp104dukA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.0.tgz", + "integrity": "sha512-9PKW8iRWnSCw+IW5LlZYq+bLMmAhKsAIR2en8iRYnoRLBg4x+HKHBb+PQyqFy8+jC7AmzV65A+DsUO7tiZddEQ==", + "dev": true, "hasInstallScript": true, "dependencies": { "@mapbox/node-pre-gyp": "^1.0.8", @@ -23574,6 +23604,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", @@ -25428,6 +25459,7 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -25439,6 +25471,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -25450,6 +25483,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", @@ -25466,6 +25500,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -25477,6 +25512,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -25488,6 +25524,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -25499,6 +25536,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -25599,7 +25637,8 @@ "node_modules/moo": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", + "dev": true }, "node_modules/moo-color": { "version": "1.0.3", @@ -25736,6 +25775,7 @@ "version": "2.20.1", "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "dev": true, "dependencies": { "commander": "^2.19.0", "moo": "^0.5.0", @@ -25756,12 +25796,14 @@ "node_modules/nearley/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -26319,7 +26361,8 @@ "node_modules/node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true }, "node_modules/node-cache": { "version": "5.1.2", @@ -26386,6 +26429,7 @@ "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", @@ -26419,6 +26463,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -26431,6 +26476,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -26449,6 +26495,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -26463,6 +26510,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -26476,6 +26524,7 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -26536,6 +26585,7 @@ "version": "4.6.4", "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-4.6.4.tgz", "integrity": "sha512-OPzbsiN5VX37/HM5BgGxcoDt1ggvFUc6gdzyQzoPjk8orTOHBlgHuDUugP5oRU+CcOw8GniilvV3pt5FBxp47A==", + "dev": true, "dependencies": { "big-integer": "^1.6.48" }, @@ -26560,6 +26610,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, "dependencies": { "abbrev": "1" }, @@ -27352,7 +27403,8 @@ "node_modules/packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", + "dev": true }, "node_modules/pako": { "version": "1.0.11", @@ -27561,6 +27613,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/pg/-/pg-8.8.0.tgz", "integrity": "sha512-UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw==", + "dev": true, "dependencies": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", @@ -27585,12 +27638,14 @@ "node_modules/pg-connection-string": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==", + "dev": true }, "node_modules/pg-format": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/pg-format/-/pg-format-1.0.4.tgz", "integrity": "sha512-YyKEF78pEA6wwTAqOUaHIN/rWpfzzIuMh9KdAhc3rSLQ/7zkRFcCgYBAEGatDstLyZw4g0s9SNICmaTGnBVeyw==", + "dev": true, "engines": { "node": ">=4.0" } @@ -27599,6 +27654,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "dev": true, "engines": { "node": ">=4.0.0" } @@ -27607,6 +27663,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", + "dev": true, "peerDependencies": { "pg": ">=8.0" } @@ -27614,12 +27671,14 @@ "node_modules/pg-protocol": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" + "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==", + "dev": true }, "node_modules/pg-types": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dev": true, "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -27631,10 +27690,20 @@ "node": ">=4" } }, + "node_modules/pg-types/node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/pgpass": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dev": true, "dependencies": { "split2": "^4.1.0" } @@ -27643,6 +27712,7 @@ "version": "13.3.15", "resolved": "https://registry.npmjs.org/pgsql-deparser/-/pgsql-deparser-13.3.15.tgz", "integrity": "sha512-Q/ZrQWYsymM+HefLaLK6PX1DNeDdfoKAH5wzfRrOxCsxRoTouIbWhwgVp3QaiovStjVPSeYNH+pqkLH4JsSn2A==", + "dev": true, "dependencies": { "@babel/runtime": "^7.11.2", "dotty": "^0.1.0", @@ -27654,19 +27724,21 @@ "version": "13.1.3", "resolved": "https://registry.npmjs.org/pgsql-enums/-/pgsql-enums-13.1.3.tgz", "integrity": "sha512-h3OSGbv1rB1r3lWL3l0gHIMVMVBTzEzROkP2/Wpz2s1eDAffPf9O5x0OqrRdLzhze92S9GUqO/FrS15u027xyg==", + "dev": true, "dependencies": { "@babel/runtime": "^7.4.2" } }, "node_modules/pgsql-parser": { - "version": "13.4.1", - "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.1.tgz", - "integrity": "sha512-A0vaREC+i0+CPT8vmtBqtgvymiT9k/VMscS6dbK21SBUFK/7YQDb1W/DYvOp8sUH4jzmIxfArw9s0X4jI2J6Tg==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.0.tgz", + "integrity": "sha512-d3ZQtQnUptz19f+WpmRP4OLfAZ33LgYDpycTA9ZSNCF+AZyURfm9e3sRZJ/amBcLtpwnZuto9EHjVz3EPpiksA==", + "dev": true, "dependencies": { "@babel/runtime": "^7.11.2", - "libpg-query": "13.3.1", + "libpg-query": "13.3.0", "minimist": "^1.2.6", - "pgsql-deparser": "^13.3.15", + "pgsql-deparser": "^13.3.14", "pgsql-enums": "^13.1.3" }, "bin": { @@ -29648,17 +29720,19 @@ } }, "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.1.tgz", + "integrity": "sha512-h7i53Dw2Yq3a1uuZ6lbVFAkvMMwssJ8jkzeAg0XaZm1XIFF/t/s+tockdqbWTymyEm07dVenOQbFisEi+kj8uA==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=12" } }, "node_modules/postgres-bytea": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -29667,6 +29741,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -29675,6 +29750,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dev": true, "dependencies": { "xtend": "^4.0.0" }, @@ -29703,6 +29779,7 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==", + "dev": true, "bin": { "prettier": "bin-prettier.js" }, @@ -29717,6 +29794,7 @@ "version": "0.12.1", "resolved": "https://registry.npmjs.org/prettier-plugin-sql/-/prettier-plugin-sql-0.12.1.tgz", "integrity": "sha512-2z0pMmQEC61Xywerw2FJFpEIaA9lJUjB5mj+9dfRU8HkU7iICFrIizpMjSSDMoGkhh5W+IRROVgLlgRdpphI7g==", + "dev": true, "dependencies": { "node-sql-parser": "^4.4.0", "sql-formatter": "^10.0.0", @@ -29829,6 +29907,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -30087,7 +30166,8 @@ "node_modules/railroad-diagrams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==", + "dev": true }, "node_modules/ramda": { "version": "0.28.0", @@ -30103,6 +30183,7 @@ "version": "0.4.6", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dev": true, "dependencies": { "discontinuous-range": "1.0.0", "ret": "~0.1.10" @@ -32693,6 +32774,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, "engines": { "node": ">= 4" } @@ -33471,6 +33553,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -33641,6 +33724,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, "dependencies": { "ip": "^2.0.0", "smart-buffer": "^4.2.0" @@ -33654,6 +33738,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -33804,6 +33889,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "dev": true, "engines": { "node": ">= 10.x" } @@ -33817,6 +33903,7 @@ "version": "10.7.2", "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-10.7.2.tgz", "integrity": "sha512-YspJXMr2rKMGZY50zYRBs2nCtEO/AKDrmQOxmV2CrGEOFSXUhY3YbsOUe6lX0T/7xbBs4pAYv4UObmwf78vtKg==", + "dev": true, "dependencies": { "argparse": "^2.0.1", "nearley": "^2.20.1" @@ -33842,6 +33929,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, "dependencies": { "minipass": "^3.1.1" }, @@ -34555,6 +34643,7 @@ "version": "6.1.12", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", + "dev": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -34571,6 +34660,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -38211,7 +38301,6 @@ "@sentry/nextjs": "^6.17.4", "@stripe/react-stripe-js": "^1.7.0", "@stripe/stripe-js": "^1.25.0", - "@supabase/postgres-meta": "^0.60.2", "@supabase/react-data-grid": "^7.1.0-beta.7", "@supabase/shared-types": "^0.1.29", "@supabase/supabase-js": "^2.1.1", @@ -38287,6 +38376,7 @@ "@storybook/addon-links": "^6.4.19", "@storybook/react": "^6.4.19", "@storybook/testing-library": "^0.0.9", + "@supabase/postgres-meta": "^0.60.2", "@tailwindcss/typography": "^0.5.2", "@testing-library/dom": "^8.19.0", "@testing-library/react": "^12.1.5", @@ -40537,7 +40627,8 @@ "@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true }, "@hcaptcha/react-hcaptcha": { "version": "1.4.4", @@ -41364,6 +41455,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "dev": true, "requires": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -41380,6 +41472,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dev": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -41389,6 +41482,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dev": true, "requires": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -41405,6 +41499,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "requires": { "semver": "^6.0.0" }, @@ -41412,7 +41507,8 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -41420,6 +41516,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dev": true, "requires": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -41431,6 +41528,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -41441,6 +41539,7 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -41833,6 +41932,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, "requires": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" @@ -41842,6 +41942,7 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -41852,6 +41953,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, "requires": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -41860,7 +41962,8 @@ "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true } } }, @@ -43647,7 +43750,8 @@ "@sinclair/typebox": { "version": "0.25.21", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz", - "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==" + "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==", + "dev": true }, "@sinonjs/commons": { "version": "1.8.5", @@ -45399,6 +45503,7 @@ "version": "0.60.2", "resolved": "https://registry.npmjs.org/@supabase/postgres-meta/-/postgres-meta-0.60.2.tgz", "integrity": "sha512-Fjc5xKPzZJ38FhY3IbDFZ5cgVxPJTn8psLkgljZgBOMUyCd3QY3W1jV8rjwAkLfz/lxIOa2KlKZTIswMZMx4WQ==", + "dev": true, "requires": { "@sinclair/typebox": "^0.25.1", "pg": "^8.7.1", @@ -45407,13 +45512,6 @@ "postgres-array": "^3.0.1", "prettier": "^2.6.0", "prettier-plugin-sql": "^0.12.1" - }, - "dependencies": { - "postgres-array": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.1.tgz", - "integrity": "sha512-h7i53Dw2Yq3a1uuZ6lbVFAkvMMwssJ8jkzeAg0XaZm1XIFF/t/s+tockdqbWTymyEm07dVenOQbFisEi+kj8uA==" - } } }, "@supabase/postgrest-js": { @@ -45565,7 +45663,8 @@ "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true }, "@tsconfig/node10": { "version": "1.0.9", @@ -46618,7 +46717,8 @@ "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "accepts": { "version": "1.3.8", @@ -46684,6 +46784,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, "requires": { "debug": "^4.1.0", "depd": "^1.1.2", @@ -46693,7 +46794,8 @@ "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true } } }, @@ -47761,7 +47863,8 @@ "big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true }, "big.js": { "version": "5.2.2", @@ -48061,7 +48164,8 @@ "buffer-writer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "dev": true }, "buffer-xor": { "version": "1.0.3", @@ -48124,6 +48228,7 @@ "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, "requires": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", @@ -48148,12 +48253,14 @@ "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, "requires": { "aggregate-error": "^3.0.0" } @@ -48330,7 +48437,8 @@ "chownr": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true }, "chrome-trace-event": { "version": "1.0.3", @@ -48581,7 +48689,8 @@ "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true }, "combined-stream": { "version": "1.0.8", @@ -50352,7 +50461,8 @@ "detect-libc": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true }, "detect-newline": { "version": "3.1.0", @@ -50444,7 +50554,8 @@ "discontinuous-range": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==", + "dev": true }, "dlv": { "version": "1.1.3", @@ -51096,7 +51207,8 @@ "dotty": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/dotty/-/dotty-0.1.2.tgz", - "integrity": "sha512-V0EWmKeH3DEhMwAZ+8ZB2Ao4OK6p++Z0hsDtZq3N0+0ZMVqkzrcEGROvOnZpLnvBg5PTNG23JEDLAm64gPaotQ==" + "integrity": "sha512-V0EWmKeH3DEhMwAZ+8ZB2Ao4OK6p++Z0hsDtZq3N0+0ZMVqkzrcEGROvOnZpLnvBg5PTNG23JEDLAm64gPaotQ==", + "dev": true }, "duplexer": { "version": "0.1.2", @@ -51257,12 +51369,14 @@ "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true }, "err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true }, "errno": { "version": "0.1.8", @@ -52908,6 +53022,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, "requires": { "minipass": "^3.0.0" } @@ -53852,7 +53967,8 @@ "http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true }, "http-errors": { "version": "2.0.0", @@ -53871,6 +53987,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, "requires": { "@tootallnate/once": "1", "agent-base": "6", @@ -53901,6 +54018,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, "requires": { "ms": "^2.0.0" } @@ -54122,7 +54240,8 @@ "ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true }, "ipaddr.js": { "version": "1.9.1", @@ -54340,7 +54459,8 @@ "is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true }, "is-map": { "version": "2.0.2", @@ -56461,9 +56581,10 @@ } }, "libpg-query": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.1.tgz", - "integrity": "sha512-RLvnKPLWngNR7bNep/Q9euPcfFJVFfDg/iP13lYGxcSI01emS/1vbTw6EBd8UordweWFdvUuK+31sHp104dukA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/libpg-query/-/libpg-query-13.3.0.tgz", + "integrity": "sha512-9PKW8iRWnSCw+IW5LlZYq+bLMmAhKsAIR2en8iRYnoRLBg4x+HKHBb+PQyqFy8+jC7AmzV65A+DsUO7tiZddEQ==", + "dev": true, "requires": { "@mapbox/node-pre-gyp": "^1.0.8", "node-addon-api": "^1.6.3", @@ -56747,6 +56868,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, "requires": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", @@ -58034,6 +58156,7 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -58042,6 +58165,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, "requires": { "minipass": "^3.0.0" } @@ -58050,6 +58174,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, "requires": { "encoding": "^0.1.12", "minipass": "^3.1.0", @@ -58061,6 +58186,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, "requires": { "minipass": "^3.0.0" } @@ -58069,6 +58195,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, "requires": { "minipass": "^3.0.0" } @@ -58077,6 +58204,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, "requires": { "minipass": "^3.0.0" } @@ -58085,6 +58213,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -58153,7 +58282,8 @@ "moo": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", + "dev": true }, "moo-color": { "version": "1.0.3", @@ -58270,6 +58400,7 @@ "version": "2.20.1", "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "dev": true, "requires": { "commander": "^2.19.0", "moo": "^0.5.0", @@ -58280,14 +58411,16 @@ "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true } } }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true }, "neo-async": { "version": "2.6.2", @@ -58691,7 +58824,8 @@ "node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true }, "node-cache": { "version": "5.1.2", @@ -58743,6 +58877,7 @@ "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, "requires": { "env-paths": "^2.2.0", "glob": "^7.1.4", @@ -58760,6 +58895,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -58769,6 +58905,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, "requires": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -58784,6 +58921,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, "requires": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -58795,6 +58933,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -58805,6 +58944,7 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -58868,6 +59008,7 @@ "version": "4.6.4", "resolved": "https://registry.npmjs.org/node-sql-parser/-/node-sql-parser-4.6.4.tgz", "integrity": "sha512-OPzbsiN5VX37/HM5BgGxcoDt1ggvFUc6gdzyQzoPjk8orTOHBlgHuDUugP5oRU+CcOw8GniilvV3pt5FBxp47A==", + "dev": true, "requires": { "big-integer": "^1.6.48" } @@ -58886,6 +59027,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, "requires": { "abbrev": "1" } @@ -59474,7 +59616,8 @@ "packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", + "dev": true }, "pako": { "version": "1.0.11", @@ -59649,6 +59792,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/pg/-/pg-8.8.0.tgz", "integrity": "sha512-UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw==", + "dev": true, "requires": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", @@ -59662,45 +59806,60 @@ "pg-connection-string": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==", + "dev": true }, "pg-format": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/pg-format/-/pg-format-1.0.4.tgz", - "integrity": "sha512-YyKEF78pEA6wwTAqOUaHIN/rWpfzzIuMh9KdAhc3rSLQ/7zkRFcCgYBAEGatDstLyZw4g0s9SNICmaTGnBVeyw==" + "integrity": "sha512-YyKEF78pEA6wwTAqOUaHIN/rWpfzzIuMh9KdAhc3rSLQ/7zkRFcCgYBAEGatDstLyZw4g0s9SNICmaTGnBVeyw==", + "dev": true }, "pg-int8": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "dev": true }, "pg-pool": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", + "dev": true, "requires": {} }, "pg-protocol": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" + "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==", + "dev": true }, "pg-types": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dev": true, "requires": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" + }, + "dependencies": { + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "dev": true + } } }, "pgpass": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dev": true, "requires": { "split2": "^4.1.0" } @@ -59709,6 +59868,7 @@ "version": "13.3.15", "resolved": "https://registry.npmjs.org/pgsql-deparser/-/pgsql-deparser-13.3.15.tgz", "integrity": "sha512-Q/ZrQWYsymM+HefLaLK6PX1DNeDdfoKAH5wzfRrOxCsxRoTouIbWhwgVp3QaiovStjVPSeYNH+pqkLH4JsSn2A==", + "dev": true, "requires": { "@babel/runtime": "^7.11.2", "dotty": "^0.1.0", @@ -59720,19 +59880,21 @@ "version": "13.1.3", "resolved": "https://registry.npmjs.org/pgsql-enums/-/pgsql-enums-13.1.3.tgz", "integrity": "sha512-h3OSGbv1rB1r3lWL3l0gHIMVMVBTzEzROkP2/Wpz2s1eDAffPf9O5x0OqrRdLzhze92S9GUqO/FrS15u027xyg==", + "dev": true, "requires": { "@babel/runtime": "^7.4.2" } }, "pgsql-parser": { - "version": "13.4.1", - "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.1.tgz", - "integrity": "sha512-A0vaREC+i0+CPT8vmtBqtgvymiT9k/VMscS6dbK21SBUFK/7YQDb1W/DYvOp8sUH4jzmIxfArw9s0X4jI2J6Tg==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/pgsql-parser/-/pgsql-parser-13.4.0.tgz", + "integrity": "sha512-d3ZQtQnUptz19f+WpmRP4OLfAZ33LgYDpycTA9ZSNCF+AZyURfm9e3sRZJ/amBcLtpwnZuto9EHjVz3EPpiksA==", + "dev": true, "requires": { "@babel/runtime": "^7.11.2", - "libpg-query": "13.3.1", + "libpg-query": "13.3.0", "minimist": "^1.2.6", - "pgsql-deparser": "^13.3.15", + "pgsql-deparser": "^13.3.14", "pgsql-enums": "^13.1.3" } }, @@ -61200,24 +61362,28 @@ "dev": true }, "postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.1.tgz", + "integrity": "sha512-h7i53Dw2Yq3a1uuZ6lbVFAkvMMwssJ8jkzeAg0XaZm1XIFF/t/s+tockdqbWTymyEm07dVenOQbFisEi+kj8uA==", + "dev": true }, "postgres-bytea": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==" + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "dev": true }, "postgres-date": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "dev": true }, "postgres-interval": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dev": true, "requires": { "xtend": "^4.0.0" } @@ -61235,12 +61401,14 @@ "prettier": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", - "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==" + "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==", + "dev": true }, "prettier-plugin-sql": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/prettier-plugin-sql/-/prettier-plugin-sql-0.12.1.tgz", "integrity": "sha512-2z0pMmQEC61Xywerw2FJFpEIaA9lJUjB5mj+9dfRU8HkU7iICFrIizpMjSSDMoGkhh5W+IRROVgLlgRdpphI7g==", + "dev": true, "requires": { "node-sql-parser": "^4.4.0", "sql-formatter": "^10.0.0", @@ -61323,6 +61491,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, "requires": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -61521,7 +61690,8 @@ "railroad-diagrams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==", + "dev": true }, "ramda": { "version": "0.28.0", @@ -61533,6 +61703,7 @@ "version": "0.4.6", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dev": true, "requires": { "discontinuous-range": "1.0.0", "ret": "~0.1.10" @@ -63351,7 +63522,8 @@ "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true }, "reusify": { "version": "1.0.4", @@ -63971,7 +64143,8 @@ "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true }, "snapdragon": { "version": "0.8.2", @@ -64109,6 +64282,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, "requires": { "ip": "^2.0.0", "smart-buffer": "^4.2.0" @@ -64118,6 +64292,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, "requires": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -64244,7 +64419,8 @@ "split2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", - "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "dev": true }, "sprintf-js": { "version": "1.0.3", @@ -64255,6 +64431,7 @@ "version": "10.7.2", "resolved": "https://registry.npmjs.org/sql-formatter/-/sql-formatter-10.7.2.tgz", "integrity": "sha512-YspJXMr2rKMGZY50zYRBs2nCtEO/AKDrmQOxmV2CrGEOFSXUhY3YbsOUe6lX0T/7xbBs4pAYv4UObmwf78vtKg==", + "dev": true, "requires": { "argparse": "^2.0.1", "nearley": "^2.20.1" @@ -64274,6 +64451,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, "requires": { "minipass": "^3.1.1" } @@ -65280,6 +65458,7 @@ "version": "6.1.12", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", + "dev": true, "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -65292,7 +65471,8 @@ "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true } } }, @@ -67844,7 +68024,7 @@ "next-seo": "^4.20.0", "next-transpile-modules": "^9.0.0", "nodemailer": "^6.7.3", - "octokit": "^2.0.10", + "octokit": "^2.0.14", "parse-numeric-range": "^1.3.0", "postcss": "^8.4.18", "postcss-preset-env": "^6.7.0", diff --git a/package.json b/package.json index bf893aa1978..27c148a2ab9 100644 --- a/package.json +++ b/package.json @@ -62,5 +62,8 @@ "mdx-mermaid": "^1.3.2", "mermaid": "^9.2.2", "mini-svg-data-uri": "^1.4.4" + }, + "overrides": { + "pgsql-parser": "13.4.0" } } diff --git a/studio/package.json b/studio/package.json index 57953c2c638..0e6a6fc37a7 100644 --- a/studio/package.json +++ b/studio/package.json @@ -26,7 +26,6 @@ "@sentry/nextjs": "^6.17.4", "@stripe/react-stripe-js": "^1.7.0", "@stripe/stripe-js": "^1.25.0", - "@supabase/postgres-meta": "^0.60.2", "@supabase/react-data-grid": "^7.1.0-beta.7", "@supabase/shared-types": "^0.1.29", "@supabase/supabase-js": "^2.1.1", @@ -102,6 +101,7 @@ "@storybook/addon-links": "^6.4.19", "@storybook/react": "^6.4.19", "@storybook/testing-library": "^0.0.9", + "@supabase/postgres-meta": "^0.60.2", "@tailwindcss/typography": "^0.5.2", "@testing-library/dom": "^8.19.0", "@testing-library/react": "^12.1.5", From 32b024ecdc5b464283580e36aabe871ac164f084 Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Fri, 27 Jan 2023 14:48:50 +0800 Subject: [PATCH 31/64] Revert "Update Dockerfile" This reverts commit f4fb0351d53e48b6bc0169f3da3501990f94bdb6. --- studio/Dockerfile | 4 ---- 1 file changed, 4 deletions(-) diff --git a/studio/Dockerfile b/studio/Dockerfile index a83f74c57fe..32fe1d0f128 100644 --- a/studio/Dockerfile +++ b/studio/Dockerfile @@ -12,10 +12,6 @@ FROM node:16-slim as base RUN apt-get update && apt-get install -y --no-install-recommends \ python3 \ build-essential \ - # Added ca-certificates and git to build libpg-query if prebuilt binaries not available - # git required here https://github.com/pyramation/libpg-query-node/blob/8bf1d4b04ea003f1c5c6aa034fd28cfbab3cc308/script/buildAddon.sh#L11 - ca-certificates \ - git \ && rm -rf /var/lib/apt/lists/* RUN npm i -g turbo From 7cd4caa1d228e8112aa05326dea47bbd6112b178 Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Fri, 27 Jan 2023 08:04:28 +0100 Subject: [PATCH 32/64] Update studio in docker-compose.yml --- docker/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 8338141d3ca..26a713e8b0c 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -9,7 +9,7 @@ version: "3.8" services: studio: container_name: supabase-studio - image: supabase/studio:20230126-6e037f1 + image: supabase/studio:20230127-123d704 restart: unless-stopped healthcheck: test: [ "CMD", "node", "-e", "require('http').get('http://localhost:3000/api/profile', (r) => {if (r.statusCode !== 200) throw new Error(r.statusCode)})" ] From d9fe70c788eee578ed3a08262158965625e048ca Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 27 Jan 2023 16:18:22 +0800 Subject: [PATCH 33/64] 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 2a4f1def28e..953f297cc92 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -19,15 +19,16 @@ This value is also reported in the [database settings page](https://app.supabase ## Database storage management -Your project will be changed to read-only mode once it reaches 95% of your subscription quota, preventing further writes to your project. +Supabase uses network-attached storage, which balances performance with scalability. + +Your project will be changed to read-only mode once it reaches 95% of your database storage subscription quota, preventing further writes to your project. 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 usage falls under 95%. -If you are on Pro or Enterprise, database storage expands automatically, however you may also encounter this error if fill the database faster than it can expand. +If you are on Pro or Enterprise plan, database storage expands automatically. 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. If you intend to write a lot to your database that would require multiple storage expansions then [reach out to our team](https://app.supabase.com/support/new). -Supabase uses network-attached storage, which balances performance with scalability. Pro projects can store up to 1024TB. -If you intend to grow beyond this, reach out to our team to learn more about our Enterprise tier. +Pro projects can store up to 1024TB but if you intend to grow beyond this, [reach out to our team](https://app.supabase.com/support/new) to learn more about our Enterprise tier. ### Increasing available database storage From 624a5e90bc04880584470d0543f245d251e8ed48 Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Fri, 27 Jan 2023 16:19:06 +0800 Subject: [PATCH 34/64] Update database-usage.mdx --- apps/docs/pages/guides/platform/database-usage.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/platform/database-usage.mdx b/apps/docs/pages/guides/platform/database-usage.mdx index 953f297cc92..55d171ac018 100644 --- a/apps/docs/pages/guides/platform/database-usage.mdx +++ b/apps/docs/pages/guides/platform/database-usage.mdx @@ -26,7 +26,7 @@ In read-only mode, clients will encounter errors such as `cannot execute INSERT Regular operation (read-write mode) is automatically re-enabled once database storage usage falls under 95%. -If you are on Pro or Enterprise plan, database storage expands automatically. 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. If you intend to write a lot to your database that would require multiple storage expansions then [reach out to our team](https://app.supabase.com/support/new). +If you are on Pro or Enterprise, database storage expands automatically. 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. If you intend to write a lot to your database that would require multiple storage expansions then [reach out to our team](https://app.supabase.com/support/new). Pro projects can store up to 1024TB but if you intend to grow beyond this, [reach out to our team](https://app.supabase.com/support/new) to learn more about our Enterprise tier. From bf58e32528882ebc5739f756549febe3cb709005 Mon Sep 17 00:00:00 2001 From: gitstart Date: Fri, 27 Jan 2023 06:52:29 +0000 Subject: [PATCH 35/64] fix: support deleting folder in context-menu --- .../to-be-cleaned/Storage/StorageExplorer/FileExplorer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorer.js b/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorer.js index 4e0f9af240b..69e9a354f06 100644 --- a/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorer.js +++ b/studio/components/to-be-cleaned/Storage/StorageExplorer/FileExplorer.js @@ -26,7 +26,7 @@ const FileExplorer = ({ const fileExplorerRef = useRef(null) const storageExplorerStore = useStorageStore() - const { setSelectedItemToRename } = storageExplorerStore + const { setSelectedItemToRename, setSelectedItemsToDelete } = storageExplorerStore useEffect(() => { if (fileExplorerRef) { From ad4f0507b46322e1d39f068138e21c04ee6c781d Mon Sep 17 00:00:00 2001 From: Joseph Schultz Date: Fri, 27 Jan 2023 08:54:26 -0600 Subject: [PATCH 36/64] Fix capitalization --- spec/supabase_csharp_v0.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/supabase_csharp_v0.yml b/spec/supabase_csharp_v0.yml index 7ae300882d5..4291bdfbb95 100644 --- a/spec/supabase_csharp_v0.yml +++ b/spec/supabase_csharp_v0.yml @@ -169,7 +169,7 @@ functions: description: | Updates user data, if there is a logged in user. notes: | - - In order to use the `updateUser()` method, the user needs to be signed in first. + - In order to use the `UpdateUser()` method, the user needs to be signed in first. - By Default, email updates sends a confirmation link to both the user's current and new email. To only send a confirmation link to the user's new email, disable **Secure email change** in your project's [email auth provider settings](https://app.supabase.com/project/_/auth/settings). examples: @@ -1136,14 +1136,14 @@ functions: description: | Filters allow you to only return rows that match certain conditions. - Filters can be used on `Select()`, `update()`, and `Delete()` queries. + Filters can be used on `Select()`, `Update()`, and `Delete()` queries. If a Database function returns a table response, you can also apply filters. examples: - id: applying-filters name: Applying Filters description: | - Filters must be applied after any of `Select()`, `update()`, `upsert()`, + Filters must be applied after any of `Select()`, `Update()`, `Upsert()`, `Delete()`, and `rpc()` and before [modifiers](/docs/reference/csharp/using-modifiers). code: | From d9dc8304cc476542e40b6ca50840a168907c0d6a Mon Sep 17 00:00:00 2001 From: Joseph Schultz Date: Fri, 27 Jan 2023 08:55:39 -0600 Subject: [PATCH 37/64] Add light icon for c# --- apps/docs/public/img/icons/menu/reference-csharp-light.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/docs/public/img/icons/menu/reference-csharp-light.svg diff --git a/apps/docs/public/img/icons/menu/reference-csharp-light.svg b/apps/docs/public/img/icons/menu/reference-csharp-light.svg new file mode 100644 index 00000000000..782f87bcc40 --- /dev/null +++ b/apps/docs/public/img/icons/menu/reference-csharp-light.svg @@ -0,0 +1 @@ + \ No newline at end of file From 78ae454b4d764997d8aab085a46ad8093466702d Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Fri, 27 Jan 2023 15:13:19 -0330 Subject: [PATCH 38/64] Small SEO nudges --- apps/docs/layouts/DefaultLayout.tsx | 2 +- apps/docs/layouts/guides/index.tsx | 10 ++++++++-- apps/docs/pages/guides/auth/auth-helpers.mdx | 2 +- apps/docs/pages/guides/database/extensions.mdx | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/apps/docs/layouts/DefaultLayout.tsx b/apps/docs/layouts/DefaultLayout.tsx index db490d4c9e7..3e610896b8b 100644 --- a/apps/docs/layouts/DefaultLayout.tsx +++ b/apps/docs/layouts/DefaultLayout.tsx @@ -19,7 +19,7 @@ const Layout: FC = (props: Props) => { return ( <> - {props.meta?.title} | Supabase + {props.meta?.title} | Supabase Docs diff --git a/apps/docs/layouts/guides/index.tsx b/apps/docs/layouts/guides/index.tsx index 07ec7929195..35e41f3c310 100644 --- a/apps/docs/layouts/guides/index.tsx +++ b/apps/docs/layouts/guides/index.tsx @@ -65,12 +65,19 @@ const Layout: FC = (props) => { return ( <> = (props) => { ], }} /> -
Date: Fri, 27 Jan 2023 16:07:06 -0330 Subject: [PATCH 39/64] Fix missing crawler pages, missing h1 tags --- apps/docs/pages/reference/dart/crawlers/[...slug].tsx | 2 +- apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx | 2 +- .../pages/reference/javascript/crawlers/[...slug].tsx | 2 +- .../pages/reference/javascript/v1/crawlers/[...slug].tsx | 2 +- apps/www/pages/blog.tsx | 1 + apps/www/pages/blog/tags/[tag].tsx | 8 ++++---- apps/www/pages/careers/index.tsx | 8 +++++--- apps/www/public/planetpg-paul_copplestone-rss.xml | 9 ++++++++- studio/pages/project/_/[[...routeSlug]].tsx | 2 +- studio/pages/support/new.tsx | 2 +- 10 files changed, 24 insertions(+), 14 deletions(-) diff --git a/apps/docs/pages/reference/dart/crawlers/[...slug].tsx b/apps/docs/pages/reference/dart/crawlers/[...slug].tsx index 036933a1682..84497018cdb 100644 --- a/apps/docs/pages/reference/dart/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/dart/crawlers/[...slug].tsx @@ -14,7 +14,7 @@ const sections = flattenSections(clientLibsCommonSections) export default function JSReference(props) { const router = useRouter() const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.id === slug) + const filteredSection = sections.filter((section) => section.slug === slug) const pageTitle = filteredSection[0]?.title ? `${filteredSection[0]?.title} | Supabase` diff --git a/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx b/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx index 8539659431d..997b56deec2 100644 --- a/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/dart/v0/crawlers/[...slug].tsx @@ -14,7 +14,7 @@ const sections = flattenSections(clientLibsCommonSections) export default function JSReference(props) { const router = useRouter() const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.id === slug) + const filteredSection = sections.filter((section) => section.slug === slug) const pageTitle = filteredSection[0]?.title ? `${filteredSection[0]?.title} | Supabase` diff --git a/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx b/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx index 67c72c5151c..df4a97dcdc5 100644 --- a/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/javascript/crawlers/[...slug].tsx @@ -14,7 +14,7 @@ const sections = flattenSections(clientLibsCommonSections) export default function JSReference(props) { const router = useRouter() const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.id === slug) + const filteredSection = sections.filter((section) => section.slug === slug) const pageTitle = filteredSection[0]?.title ? `${filteredSection[0]?.title} | Supabase` diff --git a/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx b/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx index 18c498125ef..19278fccd67 100644 --- a/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx +++ b/apps/docs/pages/reference/javascript/v1/crawlers/[...slug].tsx @@ -13,7 +13,7 @@ const sections = flattenSections(clientLibsCommonSections) export default function JSReference(props) { const router = useRouter() const slug = router.query.slug[0] - const filteredSection = sections.filter((section) => section.id === slug) + const filteredSection = sections.filter((section) => section.slug === slug) const pageTitle = filteredSection[0]?.title ? `${filteredSection[0]?.title} | Supabase` diff --git a/apps/www/pages/blog.tsx b/apps/www/pages/blog.tsx index a14bbd8feef..a96ed86cd9a 100644 --- a/apps/www/pages/blog.tsx +++ b/apps/www/pages/blog.tsx @@ -100,6 +100,7 @@ function Blog(props: any) { ]} /> +

Supabase blog

diff --git a/apps/www/pages/blog/tags/[tag].tsx b/apps/www/pages/blog/tags/[tag].tsx index b6063851ef9..49aa4a9335b 100644 --- a/apps/www/pages/blog/tags/[tag].tsx +++ b/apps/www/pages/blog/tags/[tag].tsx @@ -37,11 +37,11 @@ function TagBlogsPage(props: Props) {
-

+

Blog -

-

/

-

{`${tag}`}

+ / + {`${tag}`} +

    {blogs.map((blog: PostTypes, idx: number) => ( diff --git a/apps/www/pages/careers/index.tsx b/apps/www/pages/careers/index.tsx index d7d4ec2d29a..af3b1cff166 100644 --- a/apps/www/pages/careers/index.tsx +++ b/apps/www/pages/careers/index.tsx @@ -101,9 +101,11 @@ const CareerPage: NextPage = ({ jobs, contributors }: any) => {
    - Careers +

    + Supabase Careers +

    - We’re on a mission to build the best developer platform + We're on a mission to build the best developer platform

    Explore remote possibilities and join our team to help us achieve it. @@ -321,7 +323,7 @@ const CareerPage: NextPage = ({ jobs, contributors }: any) => {

    https://supabase.com/blog Latest Postgres news from Paul Copplestone at Supabase en - Mon, 27 Jun 2022 02:02:30 +0000 + Fri, 09 Dec 2022 03:03:30 +0000 + https://supabase.com/blog/postgres-crdt + pg_crdt - an experimental CRDT extension for Postgres + https://supabase.com/blog/postgres-crdt + Embedding Yjs and Automerge into Postgres for collaborative applications. + Fri, 09 Dec 2022 03:03:30 +0000 + + https://supabase.com/blog/partial-postgresql-data-dumps-with-rls Partial data dumps using Postgres Row Level Security https://supabase.com/blog/partial-postgresql-data-dumps-with-rls diff --git a/studio/pages/project/_/[[...routeSlug]].tsx b/studio/pages/project/_/[[...routeSlug]].tsx index f9922644dad..dacc4ed5bdb 100644 --- a/studio/pages/project/_/[[...routeSlug]].tsx +++ b/studio/pages/project/_/[[...routeSlug]].tsx @@ -55,7 +55,7 @@ const GenericProjectPage: NextPage = () => { <>
    -

    Select a project to continue

    +

    Select a project to continue

    {
    -

    Supabase support

    +

    Supabase support

    From 0f4d0bb3f0a8d33a869ef13191d011e0c4054c8d Mon Sep 17 00:00:00 2001 From: joe Date: Fri, 27 Jan 2023 14:50:53 -0500 Subject: [PATCH 40/64] chore: Fix spelling on v0.5 Migration Instructions --- apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx b/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx index 9985e50fb92..3b093bd91b4 100644 --- a/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx +++ b/apps/docs/pages/guides/auth/auth-helpers/nextjs.mdx @@ -594,7 +594,7 @@ export const config = { To make these helpers more flexible as well as more maintainable and easier to upgrade for new versions of Next.js, we're stripping them down to the most useful part which is managing the cookies and giving you an authenticated supabase-js client in any environment (client, server, middleware/edge). -Therefore we're marking the `withApiAuth`, `withPageAuth`, and `withMiddlewareAuth` higher order functions as deprectaed and they will be removed in the next **minor** release (v0.6.X). +Therefore we're marking the `withApiAuth`, `withPageAuth`, and `withMiddlewareAuth` higher order functions as deprecated and they will be removed in the next **minor** release (v0.6.X). Please follow the steps below to update your API routes, pages, and middleware handlers. Thanks! From 7243e645ac700794ac064e14ec20d857981ef2ce Mon Sep 17 00:00:00 2001 From: Jonathan Summers-Muir Date: Sat, 28 Jan 2023 04:22:09 +0800 Subject: [PATCH 41/64] Update ExitSurvey.tsx --- .../interfaces/Billing/ExitSurvey/ExitSurvey.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/studio/components/interfaces/Billing/ExitSurvey/ExitSurvey.tsx b/studio/components/interfaces/Billing/ExitSurvey/ExitSurvey.tsx index 9cda2b5aa30..cd24ea8137f 100644 --- a/studio/components/interfaces/Billing/ExitSurvey/ExitSurvey.tsx +++ b/studio/components/interfaces/Billing/ExitSurvey/ExitSurvey.tsx @@ -37,6 +37,8 @@ const ExitSurvey: FC = ({ freeTier, subscription, onSelectBack }) => { // Tracking submitting state separately outside of form component cause of // the additional dynamic confirmation modal that we're doing const [isSubmitting, setIsSubmitting] = useState(false) + const [isSubmittingDowngradeModal, setIsSubmittingDowngradeModal] = useState(false) + const [isSuccessful, setIsSuccessful] = useState(false) const [showConfirmModal, setShowConfirmModal] = useState(false) const [subscriptionPreview, setSubscriptionPreview] = useState() @@ -123,6 +125,7 @@ const ExitSurvey: FC = ({ freeTier, subscription, onSelectBack }) => { try { setIsSubmitting(true) + setIsSubmittingDowngradeModal(true) // Trigger subscription downgrade const tier = freeTier.prices[0].id @@ -175,6 +178,7 @@ const ExitSurvey: FC = ({ freeTier, subscription, onSelectBack }) => { }) } finally { setIsSubmitting(false) + setIsSubmittingDowngradeModal(false) } } @@ -320,8 +324,8 @@ const ExitSurvey: FC = ({ freeTier, subscription, onSelectBack }) => {